summaryrefslogtreecommitdiff
path: root/bsp/Vango/v85xx/libraries/VangoV85xx_standard_peripheral/Include/lib_iso7816.h
blob: fb77f3084aa38100023e3fce81af8feb5e02e33e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/**
  ******************************************************************************
  * @file    lib_iso7816.h 
  * @author  Application Team
  * @version V4.4.0
  * @date    2018-09-27
  * @brief   ISO7816 library.
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */
#ifndef __LIB_ISO7816_H
#define __LIB_ISO7816_H

#ifdef __cplusplus
 extern "C" {
#endif

#include "target.h"

typedef struct
{
  uint32_t FirstBit;
  uint32_t ACKLen;
  uint32_t Parity;
  uint32_t Baudrate;
} ISO7816_InitType;

//FirstBit
#define ISO7816_FIRSTBIT_LSB    ISO7816_INFO_LSB
#define ISO7816_FIRSTBIT_MSB    0
#define IS_ISO7816_FIRSTBIT(__FIRSTBIT__)  (((__FIRSTBIT__) == ISO7816_FIRSTBIT_LSB) ||\
                                            ((__FIRSTBIT__) == ISO7816_FIRSTBIT_MSB))
//ACKLen
#define ISO7816_ACKLEN_1        0
#define ISO7816_ACKLEN_2        ISO7816_CFG_ACKLEN
#define IS_ISO7816_ACKLEN(__ACKLEN__)  (((__ACKLEN__) == ISO7816_ACKLEN_1) ||\
                                        ((__ACKLEN__) == ISO7816_ACKLEN_2))
//Parity
#define ISO7816_PARITY_EVEN     0
#define ISO7816_PARITY_ODD      ISO7816_CFG_CHKP
#define IS_ISO7816_PARITY(__PARITY__)  (((__PARITY__) == ISO7816_PARITY_EVEN) || ((__PARITY__) == ISO7816_PARITY_ODD))

#define IS_ISO7816_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) > 299UL)
#define IS_ISO7816_PRESCALER(__PRESCALER__)  (((__PRESCALER__) <= 0x80) && ((__PRESCALER__) > 0U))

//interrupt
#define ISO7816_INT_RXOV        ISO7816_CFG_OVIE
#define ISO7816_INT_TX          ISO7816_CFG_SDIE
#define ISO7816_INT_RX          ISO7816_CFG_RCIE
#define ISO7816_INT_Msk         (ISO7816_INT_RXOV \
                                |ISO7816_INT_TX   \
                                |ISO7816_INT_RX)
#define IS_ISO7816_INT(__INT__)  ((((__INT__) & ISO7816_INT_Msk) != 0U) &&\
                                  (((__INT__) & ~ISO7816_INT_Msk) == 0U))   
                            
//INTStatus
#define ISO7816_INTSTS_RXOV     ISO7816_INFO_OVIF
#define ISO7816_INTSTS_TX       ISO7816_INFO_SDIF
#define ISO7816_INTSTS_RX       ISO7816_INFO_RCIF
#define ISO7816_INTSTS_Msk      (ISO7816_INTSTS_RXOV \
                                 |ISO7816_INTSTS_TX  \
                                 |ISO7816_INTSTS_RX)
#define IS_ISO7816_INTFLAGR(__INTFLAG__)  (((__INTFLAG__) == ISO7816_INTSTS_RXOV)   ||\
                                           ((__INTFLAG__) == ISO7816_INTSTS_TX)     ||\
                                           ((__INTFLAG__) == ISO7816_INTSTS_RX))                        

#define IS_ISO7816_INTFLAGC(__INTFLAG__)  ((((__INTFLAG__)&ISO7816_INTSTS_Msk) != 0U) &&\
                                           (((__INTFLAG__)&(~ISO7816_INTSTS_Msk)) == 0U))
//status
#define ISO7816_FLAG_SDERR      ISO7816_INFO_SDERR
#define ISO7816_FLAG_RCERR      ISO7816_INFO_RCERR
#define ISO7816_FLAG_Msk        (ISO7816_FLAG_SDERR|ISO7816_FLAG_RCERR)
#define IS_ISO7816_FLAGR(__FLAG__)  (((__FLAG__) == ISO7816_FLAG_SDERR) || ((__FLAG__) == ISO7816_FLAG_RCERR))
#define IS_ISO7816_FLAGC(__FLAG__)  ((((__FLAG__) & ISO7816_FLAG_Msk) != 0U) &&\
                                     (((__FLAG__) & (~ISO7816_FLAG_Msk)) == 0U))

/* Exported Functions ------------------------------------------------------- */
void ISO7816_DeInit(ISO7816_TypeDef *ISO7816x);
void ISO7816_StructInit(ISO7816_InitType *InitStruct);
void ISO7816_Init(ISO7816_TypeDef *ISO7816x, ISO7816_InitType *Init_Struct);
void ISO7816_Cmd(ISO7816_TypeDef *ISO7816x, uint32_t NewState);
void ISO7816_BaudrateConfig(ISO7816_TypeDef *ISO7816x, uint32_t BaudRate);
void ISO7816_CLKDIVConfig(ISO7816_TypeDef *ISO7816x, uint32_t Prescaler);
void ISO7816_CLKOutputCmd(ISO7816_TypeDef *ISO7816x, uint32_t NewState);
void ISO7816_SendData(ISO7816_TypeDef *ISO7816x, uint8_t ch);
uint8_t ISO7816_ReceiveData(ISO7816_TypeDef *ISO7816x);
void ISO7816_INTConfig(ISO7816_TypeDef *ISO7816x, uint32_t INTMask, uint8_t NewState);
uint8_t ISO7816_GetINTStatus(ISO7816_TypeDef *ISO7816x, uint32_t INTMask);
void ISO7816_ClearINTStatus(ISO7816_TypeDef *ISO7816x, uint32_t INTMask);
uint8_t ISO7816_GetFlag(ISO7816_TypeDef *ISO7816x, uint32_t FlagMask);
void ISO7816_ClearFlag(ISO7816_TypeDef *ISO7816x, uint32_t FlagMask);
uint8_t ISO7816_GetLastTransmitACK(ISO7816_TypeDef *ISO7816x);
uint8_t ISO7816_GetLastReceiveCHKSUM(ISO7816_TypeDef *ISO7816x);


#ifdef __cplusplus
}
#endif

#endif /* __LIB_ISO7816_H */

/*********************************** END OF FILE ******************************/