M471M/R1/S BSP V3.01.000
The Board Support Package for M4521
sclib.h
Go to the documentation of this file.
1/**************************************************************************/
8#ifndef __SCLIB_H__
9#define __SCLIB_H__
10
11#include "NuMicro.h"
12
26#ifdef __cplusplus
27extern "C"
28{
29#endif
30
31#define SCLIB_MAX_ATR_LEN 32
32#define SCLIB_MIN_ATR_LEN 2
33
34// Protocol
35#define SCLIB_PROTOCOL_UNDEFINED 0x00000000
36#define SCLIB_PROTOCOL_T0 0x00000001
37#define SCLIB_PROTOCOL_T1 0x00000002
38
39#define SCLIB_SUCCESS 0x00000000
40// error code generate by interrupt handler
41#define SCLIB_ERR_CARD_REMOVED 0x00000001
42#define SCLIB_ERR_OVER_RUN 0x00000002
43#define SCLIB_ERR_PARITY_ERROR 0x00000003
44#define SCLIB_ERR_NO_STOP 0x00000004
45#define SCLIB_ERR_SILENT_BYTE 0x00000005
46#define SCLIB_ERR_CMD 0x00000006
47#define SCLIB_ERR_UNSUPPORTEDCARD 0x00000007
48#define SCLIB_ERR_READ 0x00000008
49#define SCLIB_ERR_WRITE 0x00000009
50#define SCLIB_ERR_TIME0OUT 0x0000000A
51#define SCLIB_ERR_TIME1OUT 0x0000000B
52#define SCLIB_ERR_TIME2OUT 0x0000000C
53#define SCLIB_ERR_AUTOCONVENTION 0x0000000D
54#define SCLIB_ERR_CLOCK 0x0000000E
55#define SCLIB_ERR_BGTIMEOUT 0x0000000E
56// error code generate while parsing ATR and process PPS
57#define SCLIB_ERR_ATR_UNRECOGNIZED 0x00001001
58#define SCLIB_ERR_ATR_INVALID_PARAM 0x00001002
59#define SCLIB_ERR_ATR_INVALID_TCK 0x00001003
60#define SCLIB_ERR_PPS 0x00001004
61// error code for T=1 protocol
62#define SCLIB_ERR_T1_PARITY 0x00002001
63#define SCLIB_ERR_T1_ICC 0x00002002
64#define SCLIB_ERR_T1_PROTOCOL 0x00002003
65#define SCLIB_ERR_T1_ABORT_RECEIVED 0x00002004
66#define SCLIB_ERR_T1_RESYNCH_RECEIVED 0x00002005
67#define SCLIB_ERR_T1_VPP_ERROR_RECEIVED 0x00002006
68#define SCLIB_ERR_T1_WTXRES_RECEIVED 0x00002007
69#define SCLIB_ERR_T1_IFSRES_RECEIVED 0x00002008
70#define SCLIB_ERR_T1_ABORTRES_RECEIVED 0x00002009
71#define SCLIB_ERR_T1_CHECKSUM 0x0000200A
72
73// error code for T=0 protocol
74#define SCLIB_ERR_T0_PROTOCOL 0x00003003
75
76// error code indicates application control flow error
77#define SCLIB_ERR_DEACTIVE 0x0000F001
78#define SCLIB_ERR_CARDBUSY 0x0000F002
79 /* end of group NUC451_SCLIB_EXPORTED_CONSTANTS */
81
89typedef struct
90{
91 uint32_t T;
92 uint32_t ATR_Len;
93 uint8_t ATR_Buf[SCLIB_MAX_ATR_LEN];
95
99typedef struct
100{
101 uint8_t Fi;
102 uint8_t Di;
103 uint8_t conv;
104 uint8_t chksum;
105 uint8_t GT;
106 uint8_t WI;
107 uint8_t BWI;
108 uint8_t CWI;
109 uint8_t clkStop;
110 uint8_t IFSC;
111 uint8_t NAD;
113
114 /* end of group NUC451_SCLIB_EXPORTED_STRUCTS */
116
135int32_t SCLIB_Activate(uint32_t num, uint32_t u32EMVCheck);
136
154int32_t SCLIB_ActivateDelay(uint32_t num, uint32_t u32EMVCheck, uint32_t u32Delay);
155
163int32_t SCLIB_ColdReset(uint32_t num);
164
172int32_t SCLIB_WarmReset(uint32_t num);
173
179void SCLIB_Deactivate(uint32_t num);
180
190int32_t SCLIB_GetCardInfo(uint32_t num, SCLIB_CARD_INFO_T *s_info);
191
192
202int32_t SCLIB_GetCardAttrib(uint32_t num, SCLIB_CARD_ATTRIB_T *s_attrib);
203
217int32_t SCLIB_StartTransmission(uint32_t num, uint8_t *cmdBuf, uint32_t cmdLen, uint8_t *rspBuf, uint32_t *rspLen);
218
230int32_t SCLIB_SetIFSD(uint32_t num, uint8_t size);
231
232
242#if defined (__GNUC__)
244void SCLIB_RequestTimeExtension(uint32_t u32Protocol);
245#else
246__weak void SCLIB_RequestTimeExtension(uint32_t u32Protocol);
247#endif
248
257uint32_t SCLIB_CheckCDEvent(uint32_t num);
258
267uint32_t SCLIB_CheckTimeOutEvent(uint32_t num);
268
277uint32_t SCLIB_CheckTxRxEvent(uint32_t num);
278
287uint32_t SCLIB_CheckErrorEvent(uint32_t num);
288
289
290#ifdef __cplusplus
291}
292#endif
293
294#endif //__SCLIB_H__
295 /* end of group SCLIB_EXPORTED_FUNCTIONS */
297 /* end of group SC_Library */
299 /* end of group Component Library */
301
void *__dso_handle __attribute__((weak))
Definition: _syscalls.c:35
NuMicro peripheral access layer header file.
uint32_t T
Protocol, ether SCLIB_PROTOCOL_T0 or SCLIB_PROTOCOL_T1.
Definition: sclib.h:91
uint8_t NAD
NAD value.
Definition: sclib.h:111
int32_t SCLIB_SetIFSD(uint32_t num, uint8_t size)
Set interface device max information field size (IFSD)
uint8_t WI
Wait integer for T0.
Definition: sclib.h:106
uint8_t Fi
Findex;.
Definition: sclib.h:101
uint32_t SCLIB_CheckErrorEvent(uint32_t num)
Process error event in IRQ handler.
uint8_t GT
Guard Time.
Definition: sclib.h:105
uint32_t SCLIB_CheckCDEvent(uint32_t num)
Process card detect event in IRQ handler.
uint8_t Di
Dindex;.
Definition: sclib.h:102
uint8_t chksum
Checksum type.
Definition: sclib.h:104
__weak void SCLIB_RequestTimeExtension(uint32_t u32Protocol)
A callback called by library while smartcard request for a time extension.
uint8_t CWI
Character waiting integer for T1;.
Definition: sclib.h:108
uint8_t BWI
Block waiting integer for T1;.
Definition: sclib.h:107
int32_t SCLIB_ActivateDelay(uint32_t num, uint32_t u32EMVCheck, uint32_t u32Delay)
Activate a smartcard with large delay between set VCC high and start CLK output.
uint8_t clkStop
Card clock stop status. 00 Not allowed, 01 low, 02, high, 03 ether high or low.
Definition: sclib.h:109
void SCLIB_Deactivate(uint32_t num)
Deactivate a smartcard.
int32_t SCLIB_GetCardAttrib(uint32_t num, SCLIB_CARD_ATTRIB_T *s_attrib)
Get the card attribute (e.g., Fi, Di, convention, guard time... etc. ) after activation success.
int32_t SCLIB_Activate(uint32_t num, uint32_t u32EMVCheck)
Activate a smartcard.
uint8_t conv
Convention, direct or inverse. 0 direct, 1 inverse.
Definition: sclib.h:103
int32_t SCLIB_GetCardInfo(uint32_t num, SCLIB_CARD_INFO_T *s_info)
Get the card information (e.g., protocol selected, ATR...) after activation success.
uint8_t IFSC
size of negotiated IFCS
Definition: sclib.h:110
int32_t SCLIB_StartTransmission(uint32_t num, uint8_t *cmdBuf, uint32_t cmdLen, uint8_t *rspBuf, uint32_t *rspLen)
Start a smartcard transmission.
uint32_t SCLIB_CheckTxRxEvent(uint32_t num)
Process card transmission event in IRQ handler.
int32_t SCLIB_WarmReset(uint32_t num)
Warm reset a smartcard.
int32_t SCLIB_ColdReset(uint32_t num)
Cold reset a smartcard.
uint32_t ATR_Len
ATR length, between SCLIB_MAX_ATR_LEN and SCLIB_MIN_ATR_LEN.
Definition: sclib.h:92
uint32_t SCLIB_CheckTimeOutEvent(uint32_t num)
Process time out event in IRQ handler.
#define SCLIB_MAX_ATR_LEN
Max ATR length. ISO-7816 8.2.1.
Definition: sclib.h:31
A structure holds smartcard attribute, including convention, guard time, waiting time,...
Definition: sclib.h:100
A structure holds smartcard information.
Definition: sclib.h:90