lib_iso7816.h 8.9 KB
Newer Older
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 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
/**
  ******************************************************************************
  * @file    lib_iso7816.h 
  * @author  Application Team
  * @version V1.1.0
  * @date    2019-10-28
  * @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 Parity;
  uint32_t Baudrate;
  uint32_t TXRetry;
  uint32_t RXACKLength;
  uint32_t TXNACKLength;
} ISO7816_InitType;
//FirstBit
#define ISO7816_FIRSTBIT_MSB   (0UL)
#define ISO7816_FIRSTBIT_LSB    ISO7816_CFG_LSB
#define IS_ISO7816_FIRSTBIT(__FIRSTBIT__)  (((__FIRSTBIT__) == ISO7816_FIRSTBIT_MSB) ||\
                                            ((__FIRSTBIT__) == ISO7816_FIRSTBIT_LSB))
//Parity
#define ISO7816_PARITY_EVEN    (0UL)
#define ISO7816_PARITY_ODD      ISO7816_CFG_CHKP
#define IS_ISO7816_PARITY(__PARITY__)  (((__PARITY__) == ISO7816_PARITY_EVEN) ||\
                                        ((__PARITY__) == ISO7816_PARITY_ODD))
//Baudrate
#define IS_ISO7816_BAUDRATE(__BAUDRATE__) ((200UL <= (__BAUDRATE__)) &&\
                                          ((__BAUDRATE__) <= 2625000UL))
//TXRetry
#define ISO7816_TXRTY_0            ((0x00U << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define ISO7816_TXRTY_1            ((0x01U << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define ISO7816_TXRTY_2            ((0x02U << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define ISO7816_TXRTY_3            ((0x03U << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define ISO7816_TXRTY_4            ((0x04U << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define ISO7816_TXRTY_5            ((0x05U << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define ISO7816_TXRTY_6            ((0x06U << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define ISO7816_TXRTY_7            ((0x07U << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define ISO7816_TXRTY_8            ((0x08U << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define ISO7816_TXRTY_9            ((0x09U << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define ISO7816_TXRTY_10           ((0x0AU << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define ISO7816_TXRTY_11           ((0x0BU << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define ISO7816_TXRTY_12           ((0x0CU << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define ISO7816_TXRTY_13           ((0x0DU << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define ISO7816_TXRTY_14           ((0x0EU << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define ISO7816_TXRTY_15           ((0x0FU << ISO7816_CFG_TXRTYCNT_Pos) \
                                   | (1U << 10))
#define IS_ISO7816_TXRTY(__TXRTY__)          (((__TXRTY__) == ISO7816_TXRTY_0)     || \
                                              ((__TXRTY__) == ISO7816_TXRTY_1)     || \
                                              ((__TXRTY__) == ISO7816_TXRTY_2)     || \
                                              ((__TXRTY__) == ISO7816_TXRTY_3)     || \
                                              ((__TXRTY__) == ISO7816_TXRTY_4)     || \
                                              ((__TXRTY__) == ISO7816_TXRTY_5)     || \
                                              ((__TXRTY__) == ISO7816_TXRTY_6)     || \
                                              ((__TXRTY__) == ISO7816_TXRTY_7)     || \
                                              ((__TXRTY__) == ISO7816_TXRTY_8)     || \
                                              ((__TXRTY__) == ISO7816_TXRTY_9)     || \
                                              ((__TXRTY__) == ISO7816_TXRTY_10)    || \
                                              ((__TXRTY__) == ISO7816_TXRTY_11)    || \
                                              ((__TXRTY__) == ISO7816_TXRTY_12)    || \
                                              ((__TXRTY__) == ISO7816_TXRTY_13)    || \
                                              ((__TXRTY__) == ISO7816_TXRTY_14)    || \
                                              ((__TXRTY__) == ISO7816_TXRTY_15))
//RXACKLength
#define ISO7816_RXACKLEN_2    (0UL)
#define ISO7816_RXACKLEN_1    (ISO7816_CFG_RXACKSET)
#define IS_ISO7816_RXACKLEN(__RXACKLEN__)  (((__RXACKLEN__) == ISO7816_RXACKLEN_2) ||\
                                            ((__RXACKLEN__) == ISO7816_RXACKLEN_1))
//TXNACKLength
#define ISO7816_TXNACKLEN_0  (0UL)
#define ISO7816_TXNACKLEN_1  (ISO7816_CFG_AUTORXACK)
#define ISO7816_TXNACKLEN_2  (ISO7816_CFG_AUTORXACK | ISO7816_CFG_ACKLEN)
#define IS_ISO7816_TXNACKLEN(__TXNACKLEN__)  (((__TXNACKLEN__) == ISO7816_TXNACKLEN_0) ||\
                                              ((__TXNACKLEN__) == ISO7816_TXNACKLEN_1) ||\
                                              ((__TXNACKLEN__) == ISO7816_TXNACKLEN_2))

#define IS_ISO7816_PRESCALER(__PRESCALER__)  ((__PRESCALER__) <= 0x80)

//interrupt
#define ISO7816_INT_TXRTYERR    ISO7816_CFG_TXRTYERRIE
#define ISO7816_INT_RXOV        ISO7816_CFG_RXOVIE
#define ISO7816_INT_TXDONE      ISO7816_CFG_TXDONEIE
#define ISO7816_INT_RX          ISO7816_CFG_RXIE
#define ISO7816_INT_RXERR       ISO7816_CFG_RXERRIE
#define ISO7816_INT_Msk         (ISO7816_INT_TXRTYERR  \
                                |ISO7816_INT_RXOV      \
                                |ISO7816_INT_TXDONE    \
                                |ISO7816_INT_RX        \
                                |ISO7816_INT_RXERR)
#define IS_ISO7816_INT(__INT__)  ((((__INT__) & ISO7816_INT_Msk) != 0U) &&\
                                  (((__INT__) & ~ISO7816_INT_Msk) == 0U))   

//INTStatus
#define ISO7816_INTSTS_TXRTYERR ISO7816_INFO_TXRTYERRIF
#define ISO7816_INTSTS_RXOV     ISO7816_INFO_RXOVIF
#define ISO7816_INTSTS_TXDONE   ISO7816_INFO_TXDONEIF
#define ISO7816_INTSTS_RX       ISO7816_INFO_RXIF
#define ISO7816_INTSTS_RXERR    ISO7816_INFO_RXERRIF
#define ISO7816_INTSTS_Msk     (ISO7816_INTSTS_TXRTYERR \
                               |ISO7816_INTSTS_RXOV     \
                               |ISO7816_INTSTS_TXDONE   \
                               |ISO7816_INTSTS_RX       \
                               |ISO7816_INTSTS_RXERR)
#define IS_ISO7816_INTFLAGR(__INTFLAG__)  (((__INTFLAG__) == ISO7816_INTSTS_TXRTYERR) ||\
                                           ((__INTFLAG__) == ISO7816_INTSTS_RXOV)     ||\
                                           ((__INTFLAG__) == ISO7816_INTSTS_TXDONE)   ||\
                                           ((__INTFLAG__) == ISO7816_INTSTS_RX)       ||\
                                           ((__INTFLAG__) == ISO7816_INTSTS_RXERR))

#define IS_ISO7816_INTFLAGC(__INTFLAG__)  ((((__INTFLAG__)&ISO7816_INTSTS_Msk) != 0U) &&\
                                           (((__INTFLAG__)&(~ISO7816_INTSTS_Msk)) == 0U))
//status
#define ISO7816_FLAG_DMATXDONE      ISO7816_INFO_DMATXDONE
#define IS_ISO7816_FLAGR(__FLAG__)  ((__FLAG__) == ISO7816_FLAG_DMATXDONE)
#define IS_ISO7816_FLAGC(__FLAG__)  ((__FLAG__) == ISO7816_FLAG_DMATXDONE)

/****************************** ISO7816 Instances *****************************/
#define IS_ISO7816_ALL_INSTANCE(INSTANCE) (((INSTANCE) == ISO78160) || \
                                           ((INSTANCE) == ISO78161))

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

#ifdef __cplusplus
}
#endif

#endif /* __LIB_ISO7816_H */

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