blob: 01c0cf93414e7abf92c9a826a1236b62089646a2 [file] [log] [blame]
/******************************************************************************
*
* Copyright (C) 2018 ST Microelectronics S.A.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*
******************************************************************************/
#ifndef SPILAYERINTERFACE_H_
#define SPILAYERINTERFACE_H_
#include "utils-lib/Tpdu.h"
typedef struct SpiDriver_config {
char* pDevName;
/*!< Port name connected to ESE
*
* Platform specific canonical device name to which ESE is connected.
*
* e.g. On Linux based systems this would be /dev/p73
*/
uint32_t devMaxFreq;
/*!< Communication speed between DH and ESE
*
* This is the baudrate of the bus for communication between DH and ESE
*/
void* pDevHandle;
/*!< Device handle output */
} SpiDriver_config_t, *pSpiDriver_config_t; /* pointer to SpiDriver_config_t */
/**
* Initializes the connection to the SE:
* 1- Initial configuration of the SPI bus (if needed)
* 2- Start the polling mechanism to read the ATP from the eSE and set-up the
* atp struct.
* 3- Reconfigure SPI bus after the atp (if needed)
*
* @return 0 if connection could be initialized, -1 otherwise.
*/
int SpiLayerInterface_init(SpiDriver_config_t* tSpiDriver);
/**
* Sends a TPDU to the SE, waits for the response and returns it.
*
* @param cmdTpdu The TPDU to be sent.
* @param respTpdu The memory position where to store the response.
* @param numberOfBwt The maximum number of BWT to wait.
*
* @return 0 if everything went ok, -1 otherwise. If timeout expired with no
* response, 0 will be returned and respTpdu will be NULL.
*/
int SpiLayerInterface_transcieveTpdu(Tpdu* cmdTpdu, Tpdu* respTpdu,
int numberOfBwt);
void SpiLayerInterface_close(void* pDevHandle);
/**
* Setup communication to the SE:
* 1- Perform a SE reset pulse
* 2- Start the polling mechanism to read the ATP from the eSE and set-up the
* atp struct.
* 3- Configure the IFSD length with the SE.
*
* @return 0 if connection could be initialized, -1 otherwise.
*/
int SpiLayerInterface_setup();
#endif /* SPILAYERINTERFACE_H_ */