/** ****************************************************************************** * @file SMARTCARD/SMARTCARD_T0/Inc/smartcard.h * @author MCD Application Team * @brief This file contains all the functions prototypes for the Smartcard * firmware library. ****************************************************************************** * @attention * * Copyright (c) 2017 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __SMARTCARD_H #define __SMARTCARD_H /* Includes ------------------------------------------------------------------*/ #include "stm32f1xx.h" #include "platform_config.h" /* Exported constants --------------------------------------------------------*/ #define T0_PROTOCOL 0x00 /* T0 protocol */ #define DIRECT 0x3B /* Direct bit convention */ #define INDIRECT 0x3F /* Indirect bit convention */ #define SETUP_LENGTH 20 #define HIST_LENGTH 20 #define LC_MAX 20 #define SC_RECEIVE_TIMEOUT 400 /* Direction to reader */ #define SC_TRANSMIT_TIMEOUT 200 /* Direction to transmit */ /* SC Tree Structure ----------------------------------------------------------- MasterFile ________|___________ | | | System UserData Note ------------------------------------------------------------------------------*/ /* SC ADPU Command: Operation Code -------------------------------------------*/ #define SC_CLA_GSM11 0xA0 /*------------------------ Data Area Management Commands ---------------------*/ #define SC_SELECT_FILE 0xA4 #define SC_GET_RESPONCE 0xC0 #define SC_STATUS 0xF2 #define SC_UPDATE_BINARY 0xD6 #define SC_READ_BINARY 0xB0 #define SC_WRITE_BINARY 0xD0 #define SC_UPDATE_RECORD 0xDC #define SC_READ_RECORD 0xB2 /*-------------------------- Administrative Commands -------------------------*/ #define SC_CREATE_FILE 0xE0 /*-------------------------- Safety Management Commands ----------------------*/ #define SC_VERIFY 0x20 #define SC_CHANGE 0x24 #define SC_DISABLE 0x26 #define SC_ENABLE 0x28 #define SC_UNBLOCK 0x2C #define SC_EXTERNAL_AUTH 0x82 #define SC_GET_CHALLENGE 0x84 /*-------------------------- Answer to reset Commands ------------------------*/ #define SC_GET_A2R 0x00 /* SC STATUS: Status Code ----------------------------------------------------*/ #define SC_EF_SELECTED 0x9F #define SC_DF_SELECTED 0x9F #define SC_OP_TERMINATED 0x9000 /* Smartcard Voltage */ #define SC_VOLTAGE_5V 0 #define SC_VOLTAGE_3V 1 /* Exported types ------------------------------------------------------------*/ typedef enum { SC_POWER_ON = 0x00, SC_RESET_LOW = 0x01, SC_RESET_HIGH = 0x02, SC_ACTIVE = 0x03, SC_ACTIVE_ON_T0 = 0x04, SC_POWER_OFF = 0x05 } SC_State; /* ATR structure - Answer To Reset -------------------------------------------*/ typedef struct { uint8_t TS; /* Bit Convention */ uint8_t T0; /* High nibble = Number of setup byte; low nibble = Number of historical byte */ uint8_t T[SETUP_LENGTH]; /* Setup array */ uint8_t H[HIST_LENGTH]; /* Historical array */ uint8_t Tlength; /* Setup array dimension */ uint8_t Hlength; /* Historical array dimension */ } SC_ATR; /* ADPU-Header command structure ---------------------------------------------*/ typedef struct { uint8_t CLA; /* Command class */ uint8_t INS; /* Operation code */ uint8_t P1; /* Selection Mode */ uint8_t P2; /* Selection Option */ } SC_Header; /* ADPU-Body command structure -----------------------------------------------*/ typedef struct { uint8_t LC; /* Data field length */ uint8_t Data[LC_MAX]; /* Command parameters */ uint8_t LE; /* Expected length of data to be returned */ } SC_Body; /* ADPU Command structure ----------------------------------------------------*/ typedef struct { SC_Header Header; SC_Body Body; } SC_ADPU_Commands; /* SC response structure -----------------------------------------------------*/ typedef struct { uint8_t Data[LC_MAX]; /* Data returned from the card */ uint8_t SW1; /* Command Processing status */ uint8_t SW2; /* Command Processing qualification */ } SC_ADPU_Response; /* Exported macro ------------------------------------------------------------*/ /* Exported functions ------------------------------------------------------- */ /* APPLICATION LAYER ---------------------------------------------------------*/ void SC_Handler(SC_State *SCState, SC_ADPU_Commands *SC_ADPU, SC_ADPU_Response *SC_Response); void SC_PowerCmd(FunctionalState NewState); void SC_Reset(GPIO_PinState ResetState); void SC_IOConfig(void); void SC_ParityErrorHandler(void); void SC_PTSConfig(void); #endif /* __SMARTCARD_H */