mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 189:f392fc9709a3 1 /*
AnnaBridge 189:f392fc9709a3 2 * Copyright (c) 2015-2016, Freescale Semiconductor, Inc.
AnnaBridge 189:f392fc9709a3 3 * All rights reserved.
AnnaBridge 189:f392fc9709a3 4 *
AnnaBridge 189:f392fc9709a3 5 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 189:f392fc9709a3 6 * are permitted provided that the following conditions are met:
AnnaBridge 189:f392fc9709a3 7 *
AnnaBridge 189:f392fc9709a3 8 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 189:f392fc9709a3 9 * of conditions and the following disclaimer.
AnnaBridge 189:f392fc9709a3 10 *
AnnaBridge 189:f392fc9709a3 11 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 189:f392fc9709a3 12 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 189:f392fc9709a3 13 * other materials provided with the distribution.
AnnaBridge 189:f392fc9709a3 14 *
AnnaBridge 189:f392fc9709a3 15 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
AnnaBridge 189:f392fc9709a3 16 * contributors may be used to endorse or promote products derived from this
AnnaBridge 189:f392fc9709a3 17 * software without specific prior written permission.
AnnaBridge 189:f392fc9709a3 18 *
AnnaBridge 189:f392fc9709a3 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 189:f392fc9709a3 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 189:f392fc9709a3 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 189:f392fc9709a3 22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 189:f392fc9709a3 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 189:f392fc9709a3 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 189:f392fc9709a3 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 189:f392fc9709a3 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 189:f392fc9709a3 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 189:f392fc9709a3 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 189:f392fc9709a3 29 */
AnnaBridge 189:f392fc9709a3 30
AnnaBridge 189:f392fc9709a3 31 #ifndef _FSL_SMARTCARD_H_
AnnaBridge 189:f392fc9709a3 32 #define _FSL_SMARTCARD_H_
AnnaBridge 189:f392fc9709a3 33
AnnaBridge 189:f392fc9709a3 34 #include "fsl_common.h"
AnnaBridge 189:f392fc9709a3 35
AnnaBridge 189:f392fc9709a3 36 /*!
AnnaBridge 189:f392fc9709a3 37 * @addtogroup smartcard
AnnaBridge 189:f392fc9709a3 38 * @{
AnnaBridge 189:f392fc9709a3 39 */
AnnaBridge 189:f392fc9709a3 40
AnnaBridge 189:f392fc9709a3 41
AnnaBridge 189:f392fc9709a3 42 /*******************************************************************************
AnnaBridge 189:f392fc9709a3 43 * Definitions
AnnaBridge 189:f392fc9709a3 44 ******************************************************************************/
AnnaBridge 189:f392fc9709a3 45
AnnaBridge 189:f392fc9709a3 46 /*! @name Driver version */
AnnaBridge 189:f392fc9709a3 47 /*@{*/
AnnaBridge 189:f392fc9709a3 48 /*! @brief Smart card driver version 2.1.2.
AnnaBridge 189:f392fc9709a3 49 */
AnnaBridge 189:f392fc9709a3 50 #define FSL_SMARTCARD_DRIVER_VERSION (MAKE_VERSION(2, 1, 2))
AnnaBridge 189:f392fc9709a3 51 /*@}*/
AnnaBridge 189:f392fc9709a3 52
AnnaBridge 189:f392fc9709a3 53 /*! @brief Smart card global define which specify number of clock cycles until initial 'TS' character has to be received
AnnaBridge 189:f392fc9709a3 54 */
AnnaBridge 189:f392fc9709a3 55 #define SMARTCARD_INIT_DELAY_CLOCK_CYCLES (42000u)
AnnaBridge 189:f392fc9709a3 56
AnnaBridge 189:f392fc9709a3 57 /*! @brief Smart card global define which specify number of clock cycles during which ATR string has to be received */
AnnaBridge 189:f392fc9709a3 58 #define SMARTCARD_EMV_ATR_DURATION_ETU (20150u)
AnnaBridge 189:f392fc9709a3 59
AnnaBridge 189:f392fc9709a3 60 /*! @brief Smart card specification initial TS character definition of direct convention */
AnnaBridge 189:f392fc9709a3 61 #define SMARTCARD_TS_DIRECT_CONVENTION (0x3Bu)
AnnaBridge 189:f392fc9709a3 62
AnnaBridge 189:f392fc9709a3 63 /*! @brief Smart card specification initial TS character definition of inverse convention */
AnnaBridge 189:f392fc9709a3 64 #define SMARTCARD_TS_INVERSE_CONVENTION (0x3Fu)
AnnaBridge 189:f392fc9709a3 65
AnnaBridge 189:f392fc9709a3 66 /*! @brief Smart card Error codes. */
AnnaBridge 189:f392fc9709a3 67 typedef enum _smartcard_status
AnnaBridge 189:f392fc9709a3 68 {
AnnaBridge 189:f392fc9709a3 69 kStatus_SMARTCARD_Success = MAKE_STATUS(kStatusGroup_SMARTCARD, 0), /*!< Transfer ends successfully */
AnnaBridge 189:f392fc9709a3 70 kStatus_SMARTCARD_TxBusy = MAKE_STATUS(kStatusGroup_SMARTCARD, 1), /*!< Transmit in progress */
AnnaBridge 189:f392fc9709a3 71 kStatus_SMARTCARD_RxBusy = MAKE_STATUS(kStatusGroup_SMARTCARD, 2), /*!< Receiving in progress */
AnnaBridge 189:f392fc9709a3 72 kStatus_SMARTCARD_NoTransferInProgress = MAKE_STATUS(kStatusGroup_SMARTCARD, 3), /*!< No transfer in progress */
AnnaBridge 189:f392fc9709a3 73 kStatus_SMARTCARD_Timeout = MAKE_STATUS(kStatusGroup_SMARTCARD, 4), /*!< Transfer ends with time-out */
AnnaBridge 189:f392fc9709a3 74 kStatus_SMARTCARD_Initialized =
AnnaBridge 189:f392fc9709a3 75 MAKE_STATUS(kStatusGroup_SMARTCARD, 5), /*!< Smart card driver is already initialized */
AnnaBridge 189:f392fc9709a3 76 kStatus_SMARTCARD_PhyInitialized =
AnnaBridge 189:f392fc9709a3 77 MAKE_STATUS(kStatusGroup_SMARTCARD, 6), /*!< Smart card PHY drive is already initialized */
AnnaBridge 189:f392fc9709a3 78 kStatus_SMARTCARD_CardNotActivated = MAKE_STATUS(kStatusGroup_SMARTCARD, 7), /*!< Smart card is not activated */
AnnaBridge 189:f392fc9709a3 79 kStatus_SMARTCARD_InvalidInput =
AnnaBridge 189:f392fc9709a3 80 MAKE_STATUS(kStatusGroup_SMARTCARD, 8), /*!< Function called with invalid input arguments */
AnnaBridge 189:f392fc9709a3 81 kStatus_SMARTCARD_OtherError = MAKE_STATUS(kStatusGroup_SMARTCARD, 9) /*!< Some other error occur */
AnnaBridge 189:f392fc9709a3 82 } smartcard_status_t;
AnnaBridge 189:f392fc9709a3 83
AnnaBridge 189:f392fc9709a3 84 /*! @brief Control codes for the Smart card protocol timers and misc. */
AnnaBridge 189:f392fc9709a3 85 typedef enum _smartcard_control
AnnaBridge 189:f392fc9709a3 86 {
AnnaBridge 189:f392fc9709a3 87 kSMARTCARD_EnableADT = 0x0u,
AnnaBridge 189:f392fc9709a3 88 kSMARTCARD_DisableADT = 0x1u,
AnnaBridge 189:f392fc9709a3 89 kSMARTCARD_EnableGTV = 0x2u,
AnnaBridge 189:f392fc9709a3 90 kSMARTCARD_DisableGTV = 0x3u,
AnnaBridge 189:f392fc9709a3 91 kSMARTCARD_ResetWWT = 0x4u,
AnnaBridge 189:f392fc9709a3 92 kSMARTCARD_EnableWWT = 0x5u,
AnnaBridge 189:f392fc9709a3 93 kSMARTCARD_DisableWWT = 0x6u,
AnnaBridge 189:f392fc9709a3 94 kSMARTCARD_ResetCWT = 0x7u,
AnnaBridge 189:f392fc9709a3 95 kSMARTCARD_EnableCWT = 0x8u,
AnnaBridge 189:f392fc9709a3 96 kSMARTCARD_DisableCWT = 0x9u,
AnnaBridge 189:f392fc9709a3 97 kSMARTCARD_ResetBWT = 0xAu,
AnnaBridge 189:f392fc9709a3 98 kSMARTCARD_EnableBWT = 0xBu,
AnnaBridge 189:f392fc9709a3 99 kSMARTCARD_DisableBWT = 0xCu,
AnnaBridge 189:f392fc9709a3 100 kSMARTCARD_EnableInitDetect = 0xDu,
AnnaBridge 189:f392fc9709a3 101 kSMARTCARD_EnableAnack = 0xEu,
AnnaBridge 189:f392fc9709a3 102 kSMARTCARD_DisableAnack = 0xFu,
AnnaBridge 189:f392fc9709a3 103 kSMARTCARD_ConfigureBaudrate = 0x10u,
AnnaBridge 189:f392fc9709a3 104 kSMARTCARD_SetupATRMode = 0x11u,
AnnaBridge 189:f392fc9709a3 105 kSMARTCARD_SetupT0Mode = 0x12u,
AnnaBridge 189:f392fc9709a3 106 kSMARTCARD_SetupT1Mode = 0x13u,
AnnaBridge 189:f392fc9709a3 107 kSMARTCARD_EnableReceiverMode = 0x14u,
AnnaBridge 189:f392fc9709a3 108 kSMARTCARD_DisableReceiverMode = 0x15u,
AnnaBridge 189:f392fc9709a3 109 kSMARTCARD_EnableTransmitterMode = 0x16u,
AnnaBridge 189:f392fc9709a3 110 kSMARTCARD_DisableTransmitterMode = 0x17u,
AnnaBridge 189:f392fc9709a3 111 kSMARTCARD_ResetWaitTimeMultiplier = 0x18u,
AnnaBridge 189:f392fc9709a3 112 } smartcard_control_t;
AnnaBridge 189:f392fc9709a3 113
AnnaBridge 189:f392fc9709a3 114 /*! @brief Defines Smart card interface voltage class values */
AnnaBridge 189:f392fc9709a3 115 typedef enum _smartcard_card_voltage_class
AnnaBridge 189:f392fc9709a3 116 {
AnnaBridge 189:f392fc9709a3 117 kSMARTCARD_VoltageClassUnknown = 0x0u,
AnnaBridge 189:f392fc9709a3 118 kSMARTCARD_VoltageClassA5_0V = 0x1u,
AnnaBridge 189:f392fc9709a3 119 kSMARTCARD_VoltageClassB3_3V = 0x2u,
AnnaBridge 189:f392fc9709a3 120 kSMARTCARD_VoltageClassC1_8V = 0x3u
AnnaBridge 189:f392fc9709a3 121 } smartcard_card_voltage_class_t;
AnnaBridge 189:f392fc9709a3 122
AnnaBridge 189:f392fc9709a3 123 /*! @brief Defines Smart card I/O transfer states */
AnnaBridge 189:f392fc9709a3 124 typedef enum _smartcard_transfer_state
AnnaBridge 189:f392fc9709a3 125 {
AnnaBridge 189:f392fc9709a3 126 kSMARTCARD_IdleState = 0x0u,
AnnaBridge 189:f392fc9709a3 127 kSMARTCARD_WaitingForTSState = 0x1u,
AnnaBridge 189:f392fc9709a3 128 kSMARTCARD_InvalidTSDetecetedState = 0x2u,
AnnaBridge 189:f392fc9709a3 129 kSMARTCARD_ReceivingState = 0x3u,
AnnaBridge 189:f392fc9709a3 130 kSMARTCARD_TransmittingState = 0x4u,
AnnaBridge 189:f392fc9709a3 131 } smartcard_transfer_state_t;
AnnaBridge 189:f392fc9709a3 132
AnnaBridge 189:f392fc9709a3 133 /*! @brief Defines Smart card reset types */
AnnaBridge 189:f392fc9709a3 134 typedef enum _smartcard_reset_type
AnnaBridge 189:f392fc9709a3 135 {
AnnaBridge 189:f392fc9709a3 136 kSMARTCARD_ColdReset = 0x0u,
AnnaBridge 189:f392fc9709a3 137 kSMARTCARD_WarmReset = 0x1u,
AnnaBridge 189:f392fc9709a3 138 kSMARTCARD_NoColdReset = 0x2u,
AnnaBridge 189:f392fc9709a3 139 kSMARTCARD_NoWarmReset = 0x3u,
AnnaBridge 189:f392fc9709a3 140 } smartcard_reset_type_t;
AnnaBridge 189:f392fc9709a3 141
AnnaBridge 189:f392fc9709a3 142 /*! @brief Defines Smart card transport protocol types */
AnnaBridge 189:f392fc9709a3 143 typedef enum _smartcard_transport_type
AnnaBridge 189:f392fc9709a3 144 {
AnnaBridge 189:f392fc9709a3 145 kSMARTCARD_T0Transport = 0x0u,
AnnaBridge 189:f392fc9709a3 146 kSMARTCARD_T1Transport = 0x1u
AnnaBridge 189:f392fc9709a3 147 } smartcard_transport_type_t;
AnnaBridge 189:f392fc9709a3 148
AnnaBridge 189:f392fc9709a3 149 /*! @brief Defines Smart card data parity types */
AnnaBridge 189:f392fc9709a3 150 typedef enum _smartcard_parity_type
AnnaBridge 189:f392fc9709a3 151 {
AnnaBridge 189:f392fc9709a3 152 kSMARTCARD_EvenParity = 0x0u,
AnnaBridge 189:f392fc9709a3 153 kSMARTCARD_OddParity = 0x1u
AnnaBridge 189:f392fc9709a3 154 } smartcard_parity_type_t;
AnnaBridge 189:f392fc9709a3 155
AnnaBridge 189:f392fc9709a3 156 /*! @brief Defines data Convention format */
AnnaBridge 189:f392fc9709a3 157 typedef enum _smartcard_card_convention
AnnaBridge 189:f392fc9709a3 158 {
AnnaBridge 189:f392fc9709a3 159 kSMARTCARD_DirectConvention = 0x0u,
AnnaBridge 189:f392fc9709a3 160 kSMARTCARD_InverseConvention = 0x1u
AnnaBridge 189:f392fc9709a3 161 } smartcard_card_convention_t;
AnnaBridge 189:f392fc9709a3 162
AnnaBridge 189:f392fc9709a3 163 /*! @brief Defines Smart card interface IC control types */
AnnaBridge 189:f392fc9709a3 164 typedef enum _smartcard_interface_control
AnnaBridge 189:f392fc9709a3 165 {
AnnaBridge 189:f392fc9709a3 166 kSMARTCARD_InterfaceSetVcc = 0x00u,
AnnaBridge 189:f392fc9709a3 167 kSMARTCARD_InterfaceSetClockToResetDelay = 0x01u,
AnnaBridge 189:f392fc9709a3 168 kSMARTCARD_InterfaceReadStatus = 0x02u
AnnaBridge 189:f392fc9709a3 169 } smartcard_interface_control_t;
AnnaBridge 189:f392fc9709a3 170
AnnaBridge 189:f392fc9709a3 171 /*! @brief Defines transfer direction.*/
AnnaBridge 189:f392fc9709a3 172 typedef enum _smartcard_direction
AnnaBridge 189:f392fc9709a3 173 {
AnnaBridge 189:f392fc9709a3 174 kSMARTCARD_Receive = 0u,
AnnaBridge 189:f392fc9709a3 175 kSMARTCARD_Transmit = 1u
AnnaBridge 189:f392fc9709a3 176 } smartcard_direction_t;
AnnaBridge 189:f392fc9709a3 177
AnnaBridge 189:f392fc9709a3 178 /*! @brief Smart card interface interrupt callback function type */
AnnaBridge 189:f392fc9709a3 179 typedef void (*smartcard_interface_callback_t)(void *smartcardContext, void *param);
AnnaBridge 189:f392fc9709a3 180 /*! @brief Smart card transfer interrupt callback function type */
AnnaBridge 189:f392fc9709a3 181 typedef void (*smartcard_transfer_callback_t)(void *smartcardContext, void *param);
AnnaBridge 189:f392fc9709a3 182
AnnaBridge 189:f392fc9709a3 183 /*! @brief Time Delay function used to passive waiting using RTOS [us] */
AnnaBridge 189:f392fc9709a3 184 typedef void (*smartcard_time_delay_t)(uint32_t us);
AnnaBridge 189:f392fc9709a3 185
AnnaBridge 189:f392fc9709a3 186 /*! @brief Defines card-specific parameters for Smart card driver */
AnnaBridge 189:f392fc9709a3 187 typedef struct _smartcard_card_params
AnnaBridge 189:f392fc9709a3 188 {
AnnaBridge 189:f392fc9709a3 189 /* ISO7816/EMV4.3 specification variables */
AnnaBridge 189:f392fc9709a3 190 uint16_t Fi; /*!< 4 bits Fi - clock rate conversion integer */
AnnaBridge 189:f392fc9709a3 191 uint8_t fMax; /*!< Maximum Smart card frequency in MHz */
AnnaBridge 189:f392fc9709a3 192 uint8_t WI; /*!< 8 bits WI - work wait time integer */
AnnaBridge 189:f392fc9709a3 193 uint8_t Di; /*!< 4 bits DI - baud rate divisor */
AnnaBridge 189:f392fc9709a3 194 uint8_t BWI; /*!< 4 bits BWI - block wait time integer */
AnnaBridge 189:f392fc9709a3 195 uint8_t CWI; /*!< 4 bits CWI - character wait time integer */
AnnaBridge 189:f392fc9709a3 196 uint8_t BGI; /*!< 4 bits BGI - block guard time integer */
AnnaBridge 189:f392fc9709a3 197 uint8_t GTN; /*!< 8 bits GTN - extended guard time integer */
AnnaBridge 189:f392fc9709a3 198 uint8_t IFSC; /*!< Indicates IFSC value of the card */
AnnaBridge 189:f392fc9709a3 199 uint8_t modeNegotiable; /*!< Indicates if the card acts in negotiable or a specific mode. */
AnnaBridge 189:f392fc9709a3 200 uint8_t currentD; /*!< 4 bits DI - current baud rate divisor*/
AnnaBridge 189:f392fc9709a3 201 /* Driver-specific variables */
AnnaBridge 189:f392fc9709a3 202 uint8_t status; /*!< Indicates smart card status */
AnnaBridge 189:f392fc9709a3 203 bool t0Indicated; /*!< Indicates ff T=0 indicated in TD1 byte */
AnnaBridge 189:f392fc9709a3 204 bool t1Indicated; /*!< Indicates if T=1 indicated in TD2 byte */
AnnaBridge 189:f392fc9709a3 205 bool atrComplete; /*!< Indicates whether the ATR received from the card was complete or not */
AnnaBridge 189:f392fc9709a3 206 bool atrValid; /*!< Indicates whether the ATR received from the card was valid or not */
AnnaBridge 189:f392fc9709a3 207 bool present; /*!< Indicates if a smart card is present */
AnnaBridge 189:f392fc9709a3 208 bool active; /*!< Indicates if the smart card is activated */
AnnaBridge 189:f392fc9709a3 209 bool faulty; /*!< Indicates whether smart card/interface is faulty */
AnnaBridge 189:f392fc9709a3 210 smartcard_card_convention_t convention; /*!< Card convention, kSMARTCARD_DirectConvention for direct convention,
AnnaBridge 189:f392fc9709a3 211 kSMARTCARD_InverseConvention for inverse convention */
AnnaBridge 189:f392fc9709a3 212 } smartcard_card_params_t;
AnnaBridge 189:f392fc9709a3 213
AnnaBridge 189:f392fc9709a3 214 /*! @brief Smart card defines the state of the EMV timers in the Smart card driver */
AnnaBridge 189:f392fc9709a3 215 typedef struct _smartcard_timers_state
AnnaBridge 189:f392fc9709a3 216 {
AnnaBridge 189:f392fc9709a3 217 volatile bool adtExpired; /*!< Indicates whether ADT timer expired */
AnnaBridge 189:f392fc9709a3 218 volatile bool wwtExpired; /*!< Indicates whether WWT timer expired */
AnnaBridge 189:f392fc9709a3 219 volatile bool cwtExpired; /*!< Indicates whether CWT timer expired */
AnnaBridge 189:f392fc9709a3 220 volatile bool bwtExpired; /*!< Indicates whether BWT timer expired */
AnnaBridge 189:f392fc9709a3 221 volatile bool initCharTimerExpired; /*!< Indicates whether reception timer
AnnaBridge 189:f392fc9709a3 222 for initialization character (TS) after the RST has expired */
AnnaBridge 189:f392fc9709a3 223 } smartcard_timers_state_t;
AnnaBridge 189:f392fc9709a3 224
AnnaBridge 189:f392fc9709a3 225 /*! @brief Defines user specified configuration of Smart card interface */
AnnaBridge 189:f392fc9709a3 226 typedef struct _smartcard_interface_config
AnnaBridge 189:f392fc9709a3 227 {
AnnaBridge 189:f392fc9709a3 228 uint32_t smartCardClock; /*!< Smart card interface clock [Hz] */
AnnaBridge 189:f392fc9709a3 229 uint32_t clockToResetDelay; /*!< Indicates clock to RST apply delay [smart card clock cycles] */
AnnaBridge 189:f392fc9709a3 230 uint8_t clockModule; /*!< Smart card clock module number */
AnnaBridge 189:f392fc9709a3 231 uint8_t clockModuleChannel; /*!< Smart card clock module channel number */
AnnaBridge 189:f392fc9709a3 232 uint8_t clockModuleSourceClock; /*!< Smart card clock module source clock [e.g., BusClk] */
AnnaBridge 189:f392fc9709a3 233 smartcard_card_voltage_class_t vcc; /*!< Smart card voltage class */
AnnaBridge 189:f392fc9709a3 234 uint8_t controlPort; /*!< Smart card PHY control port instance */
AnnaBridge 189:f392fc9709a3 235 uint8_t controlPin; /*!< Smart card PHY control pin instance */
AnnaBridge 189:f392fc9709a3 236 uint8_t irqPort; /*!< Smart card PHY Interrupt port instance */
AnnaBridge 189:f392fc9709a3 237 uint8_t irqPin; /*!< Smart card PHY Interrupt pin instance */
AnnaBridge 189:f392fc9709a3 238 uint8_t resetPort; /*!< Smart card reset port instance */
AnnaBridge 189:f392fc9709a3 239 uint8_t resetPin; /*!< Smart card reset pin instance */
AnnaBridge 189:f392fc9709a3 240 uint8_t vsel0Port; /*!< Smart card PHY Vsel0 control port instance */
AnnaBridge 189:f392fc9709a3 241 uint8_t vsel0Pin; /*!< Smart card PHY Vsel0 control pin instance */
AnnaBridge 189:f392fc9709a3 242 uint8_t vsel1Port; /*!< Smart card PHY Vsel1 control port instance */
AnnaBridge 189:f392fc9709a3 243 uint8_t vsel1Pin; /*!< Smart card PHY Vsel1 control pin instance */
AnnaBridge 189:f392fc9709a3 244 uint8_t dataPort; /*!< Smart card PHY data port instance */
AnnaBridge 189:f392fc9709a3 245 uint8_t dataPin; /*!< Smart card PHY data pin instance */
AnnaBridge 189:f392fc9709a3 246 uint8_t dataPinMux; /*!< Smart card PHY data pin mux option */
AnnaBridge 189:f392fc9709a3 247 uint8_t tsTimerId; /*!< Numerical identifier of the External HW timer for Initial character detection */
AnnaBridge 189:f392fc9709a3 248 } smartcard_interface_config_t;
AnnaBridge 189:f392fc9709a3 249
AnnaBridge 189:f392fc9709a3 250 /*! @brief Defines user transfer structure used to initialize transfer */
AnnaBridge 189:f392fc9709a3 251 typedef struct _smartcard_xfer
AnnaBridge 189:f392fc9709a3 252 {
AnnaBridge 189:f392fc9709a3 253 smartcard_direction_t direction; /*!< Direction of communication. (RX/TX) */
AnnaBridge 189:f392fc9709a3 254 uint8_t *buff; /*!< The buffer of data. */
AnnaBridge 189:f392fc9709a3 255 size_t size; /*!< The number of transferred units. */
AnnaBridge 189:f392fc9709a3 256 } smartcard_xfer_t;
AnnaBridge 189:f392fc9709a3 257
AnnaBridge 189:f392fc9709a3 258 /*!
AnnaBridge 189:f392fc9709a3 259 * @brief Runtime state of the Smart card driver.
AnnaBridge 189:f392fc9709a3 260 */
AnnaBridge 189:f392fc9709a3 261 typedef struct _smartcard_context
AnnaBridge 189:f392fc9709a3 262 {
AnnaBridge 189:f392fc9709a3 263 /* Xfer part */
AnnaBridge 189:f392fc9709a3 264 void *base; /*!< Smart card module base address */
AnnaBridge 189:f392fc9709a3 265 smartcard_direction_t direction; /*!< Direction of communication. (RX/TX) */
AnnaBridge 189:f392fc9709a3 266 uint8_t *xBuff; /*!< The buffer of data being transferred.*/
AnnaBridge 189:f392fc9709a3 267 volatile size_t xSize; /*!< The number of bytes to be transferred. */
AnnaBridge 189:f392fc9709a3 268 volatile bool xIsBusy; /*!< True if there is an active transfer. */
AnnaBridge 189:f392fc9709a3 269 uint8_t txFifoEntryCount; /*!< Number of data word entries in transmit FIFO. */
AnnaBridge 189:f392fc9709a3 270 /* Smart card Interface part */
AnnaBridge 189:f392fc9709a3 271 smartcard_interface_callback_t interfaceCallback; /*!< Callback to invoke after interface IC raised interrupt.*/
AnnaBridge 189:f392fc9709a3 272 smartcard_transfer_callback_t transferCallback; /*!< Callback to invoke after transfer event occur.*/
AnnaBridge 189:f392fc9709a3 273 void *interfaceCallbackParam; /*!< Interface callback parameter pointer.*/
AnnaBridge 189:f392fc9709a3 274 void *transferCallbackParam; /*!< Transfer callback parameter pointer.*/
AnnaBridge 189:f392fc9709a3 275 smartcard_time_delay_t timeDelay; /*!< Function which handles time delay defined by user or RTOS. */
AnnaBridge 189:f392fc9709a3 276 smartcard_reset_type_t resetType; /*!< Indicates whether a Cold reset or Warm reset was requested. */
AnnaBridge 189:f392fc9709a3 277 smartcard_transport_type_t tType; /*!< Indicates current transfer protocol (T0 or T1) */
AnnaBridge 189:f392fc9709a3 278 /* Smart card State part */
AnnaBridge 189:f392fc9709a3 279 volatile smartcard_transfer_state_t transferState; /*!< Indicates the current transfer state */
AnnaBridge 189:f392fc9709a3 280 smartcard_timers_state_t timersState; /*!< Indicates the state of different protocol timers used in driver */
AnnaBridge 189:f392fc9709a3 281 smartcard_card_params_t
AnnaBridge 189:f392fc9709a3 282 cardParams; /*!< Smart card parameters(ATR and current) and interface slots states(ATR and current) */
AnnaBridge 189:f392fc9709a3 283 uint8_t IFSD; /*!< Indicates the terminal IFSD */
AnnaBridge 189:f392fc9709a3 284 smartcard_parity_type_t parity; /*!< Indicates current parity even/odd */
AnnaBridge 189:f392fc9709a3 285 volatile bool rxtCrossed; /*!< Indicates whether RXT thresholds has been crossed */
AnnaBridge 189:f392fc9709a3 286 volatile bool txtCrossed; /*!< Indicates whether TXT thresholds has been crossed */
AnnaBridge 189:f392fc9709a3 287 volatile bool wtxRequested; /*!< Indicates whether WTX has been requested or not*/
AnnaBridge 189:f392fc9709a3 288 volatile bool parityError; /*!< Indicates whether a parity error has been detected */
AnnaBridge 189:f392fc9709a3 289 uint8_t statusBytes[2]; /*!< Used to store Status bytes SW1, SW2 of the last executed card command response */
AnnaBridge 189:f392fc9709a3 290 /* Configuration part */
AnnaBridge 189:f392fc9709a3 291 smartcard_interface_config_t interfaceConfig; /*!< Smart card interface configuration structure */
AnnaBridge 189:f392fc9709a3 292
AnnaBridge 189:f392fc9709a3 293 } smartcard_context_t;
AnnaBridge 189:f392fc9709a3 294
AnnaBridge 189:f392fc9709a3 295 /*! @}*/
AnnaBridge 189:f392fc9709a3 296 #endif /* _FSL_SMARTCARD_H_*/