123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- #ifndef _FSL_SMARTCARD_H_
- #define _FSL_SMARTCARD_H_
- #include "fsl_common.h"
- #define FSL_SMARTCARD_DRIVER_VERSION (MAKE_VERSION(2, 2, 0))
- #define SMARTCARD_INIT_DELAY_CLOCK_CYCLES (42000u)
- #define SMARTCARD_EMV_ATR_DURATION_ETU (20150u)
- #define SMARTCARD_TS_DIRECT_CONVENTION (0x3Bu)
- #define SMARTCARD_TS_INVERSE_CONVENTION (0x3Fu)
- typedef enum _smartcard_status
- {
- kStatus_SMARTCARD_Success = MAKE_STATUS(kStatusGroup_SMARTCARD, 0),
- kStatus_SMARTCARD_TxBusy = MAKE_STATUS(kStatusGroup_SMARTCARD, 1),
- kStatus_SMARTCARD_RxBusy = MAKE_STATUS(kStatusGroup_SMARTCARD, 2),
- kStatus_SMARTCARD_NoTransferInProgress = MAKE_STATUS(kStatusGroup_SMARTCARD, 3),
- kStatus_SMARTCARD_Timeout = MAKE_STATUS(kStatusGroup_SMARTCARD, 4),
- kStatus_SMARTCARD_Initialized =
- MAKE_STATUS(kStatusGroup_SMARTCARD, 5),
- kStatus_SMARTCARD_PhyInitialized =
- MAKE_STATUS(kStatusGroup_SMARTCARD, 6),
- kStatus_SMARTCARD_CardNotActivated = MAKE_STATUS(kStatusGroup_SMARTCARD, 7),
- kStatus_SMARTCARD_InvalidInput =
- MAKE_STATUS(kStatusGroup_SMARTCARD, 8),
- kStatus_SMARTCARD_OtherError = MAKE_STATUS(kStatusGroup_SMARTCARD, 9)
- } smartcard_status_t;
- typedef enum _smartcard_control
- {
- kSMARTCARD_EnableADT = 0x0u,
- kSMARTCARD_DisableADT = 0x1u,
- kSMARTCARD_EnableGTV = 0x2u,
- kSMARTCARD_DisableGTV = 0x3u,
- kSMARTCARD_ResetWWT = 0x4u,
- kSMARTCARD_EnableWWT = 0x5u,
- kSMARTCARD_DisableWWT = 0x6u,
- kSMARTCARD_ResetCWT = 0x7u,
- kSMARTCARD_EnableCWT = 0x8u,
- kSMARTCARD_DisableCWT = 0x9u,
- kSMARTCARD_ResetBWT = 0xAu,
- kSMARTCARD_EnableBWT = 0xBu,
- kSMARTCARD_DisableBWT = 0xCu,
- kSMARTCARD_EnableInitDetect = 0xDu,
- kSMARTCARD_EnableAnack = 0xEu,
- kSMARTCARD_DisableAnack = 0xFu,
- kSMARTCARD_ConfigureBaudrate = 0x10u,
- kSMARTCARD_SetupATRMode = 0x11u,
- kSMARTCARD_SetupT0Mode = 0x12u,
- kSMARTCARD_SetupT1Mode = 0x13u,
- kSMARTCARD_EnableReceiverMode = 0x14u,
- kSMARTCARD_DisableReceiverMode = 0x15u,
- kSMARTCARD_EnableTransmitterMode = 0x16u,
- kSMARTCARD_DisableTransmitterMode = 0x17u,
- kSMARTCARD_ResetWaitTimeMultiplier = 0x18u,
- } smartcard_control_t;
- typedef enum _smartcard_card_voltage_class
- {
- kSMARTCARD_VoltageClassUnknown = 0x0u,
- kSMARTCARD_VoltageClassA5_0V = 0x1u,
- kSMARTCARD_VoltageClassB3_3V = 0x2u,
- kSMARTCARD_VoltageClassC1_8V = 0x3u
- } smartcard_card_voltage_class_t;
- typedef enum _smartcard_transfer_state
- {
- kSMARTCARD_IdleState = 0x0u,
- kSMARTCARD_WaitingForTSState = 0x1u,
- kSMARTCARD_InvalidTSDetecetedState = 0x2u,
- kSMARTCARD_ReceivingState = 0x3u,
- kSMARTCARD_TransmittingState = 0x4u,
- } smartcard_transfer_state_t;
- typedef enum _smartcard_reset_type
- {
- kSMARTCARD_ColdReset = 0x0u,
- kSMARTCARD_WarmReset = 0x1u,
- kSMARTCARD_NoColdReset = 0x2u,
- kSMARTCARD_NoWarmReset = 0x3u,
- } smartcard_reset_type_t;
- typedef enum _smartcard_transport_type
- {
- kSMARTCARD_T0Transport = 0x0u,
- kSMARTCARD_T1Transport = 0x1u
- } smartcard_transport_type_t;
- typedef enum _smartcard_parity_type
- {
- kSMARTCARD_EvenParity = 0x0u,
- kSMARTCARD_OddParity = 0x1u
- } smartcard_parity_type_t;
- typedef enum _smartcard_card_convention
- {
- kSMARTCARD_DirectConvention = 0x0u,
- kSMARTCARD_InverseConvention = 0x1u
- } smartcard_card_convention_t;
- typedef enum _smartcard_interface_control
- {
- kSMARTCARD_InterfaceSetVcc = 0x00u,
- kSMARTCARD_InterfaceSetClockToResetDelay = 0x01u,
- kSMARTCARD_InterfaceReadStatus = 0x02u
- } smartcard_interface_control_t;
- typedef enum _smartcard_direction
- {
- kSMARTCARD_Receive = 0u,
- kSMARTCARD_Transmit = 1u
- } smartcard_direction_t;
- typedef void (*smartcard_interface_callback_t)(void *smartcardContext, void *param);
- typedef void (*smartcard_transfer_callback_t)(void *smartcardContext, void *param);
- typedef void (*smartcard_time_delay_t)(uint32_t us);
- typedef struct _smartcard_card_params
- {
-
- uint16_t Fi;
- uint8_t fMax;
- uint8_t WI;
- uint8_t Di;
- uint8_t BWI;
- uint8_t CWI;
- uint8_t BGI;
- uint8_t GTN;
- uint8_t IFSC;
- uint8_t modeNegotiable;
- uint8_t currentD;
-
- uint8_t status;
- bool t0Indicated;
- bool t1Indicated;
- bool atrComplete;
- bool atrValid;
- bool present;
- bool active;
- bool faulty;
- smartcard_card_convention_t convention;
- } smartcard_card_params_t;
- typedef struct _smartcard_timers_state
- {
- volatile bool adtExpired;
- volatile bool wwtExpired;
- volatile bool cwtExpired;
- volatile bool bwtExpired;
- volatile bool initCharTimerExpired;
- } smartcard_timers_state_t;
- typedef struct _smartcard_interface_config
- {
- uint32_t smartCardClock;
- uint32_t clockToResetDelay;
- uint8_t clockModule;
- uint8_t clockModuleChannel;
- uint8_t clockModuleSourceClock;
- smartcard_card_voltage_class_t vcc;
- uint8_t controlPort;
- uint8_t controlPin;
- uint8_t irqPort;
- uint8_t irqPin;
- uint8_t resetPort;
- uint8_t resetPin;
- uint8_t vsel0Port;
- uint8_t vsel0Pin;
- uint8_t vsel1Port;
- uint8_t vsel1Pin;
- uint8_t dataPort;
- uint8_t dataPin;
- uint8_t dataPinMux;
- uint8_t tsTimerId;
- } smartcard_interface_config_t;
- typedef struct _smartcard_xfer
- {
- smartcard_direction_t direction;
- uint8_t *buff;
- size_t size;
- } smartcard_xfer_t;
- typedef struct _smartcard_context
- {
-
- void *base;
- smartcard_direction_t direction;
- uint8_t *xBuff;
- volatile size_t xSize;
- volatile bool xIsBusy;
- uint8_t txFifoEntryCount;
- uint8_t rxFifoThreshold;
-
- smartcard_interface_callback_t interfaceCallback;
- smartcard_transfer_callback_t transferCallback;
- void *interfaceCallbackParam;
- void *transferCallbackParam;
- smartcard_time_delay_t timeDelay;
- smartcard_reset_type_t resetType;
- smartcard_transport_type_t tType;
-
- volatile smartcard_transfer_state_t transferState;
- smartcard_timers_state_t timersState;
- smartcard_card_params_t
- cardParams;
- uint8_t IFSD;
- smartcard_parity_type_t parity;
- volatile bool rxtCrossed;
- volatile bool txtCrossed;
- volatile bool wtxRequested;
- volatile bool parityError;
- uint8_t statusBytes[2];
-
- smartcard_interface_config_t interfaceConfig;
- bool abortTransfer;
- } smartcard_context_t;
- #endif
|