📄 tvpsmrtcard_fw.h
字号:
#define TVP_CRC_RXCRC_READ 0x10000 // Use the last 2 bytes in CRC calculation
#define TVP_CRC_RXCRC_WRITE 0x100 // Use the last 2 bytes in CRC calculation
#define TVP_CRC_INF_BYTES 0xff00 // CRC interface byte
#define TVP_CRC_TEST_NAKPE 0xf0 // Number of NAK/PAR errors to gen in test mode
#define TVP_CRC_LENGTH 0xe // Byte number of LEN byte in T=1 block
#define TVP_CRC_MSB_FIRST 0x1 // Generate CRC chars with MSB first
#define TVP_ISO_CRC_LENGTH 0x4 // Default ISO value is 2
#define TVP_DEFAULT_CRC (TVP_ISO_CRC_LENGTH + TVP_CRC_MSB_FIRST + TVP_CRC_RXCRC_WRITE)
/* Smart UART system state machine designations */
#define TVP_SMRT_UNDEF_ST 0x000
#define TVP_SMRT_POWER_OFF 0x010
#define TVP_SMRT_POWER_DOWN 0x020
#define TVP_SMRT_POWER_READY 0x030
#define TVP_SMRT_POWER_REMOVE 0x035
#define TVP_SMRT_POWER_RESTART 0x038
#define TVP_SMRT_POWER_UP 0x040
#define TVP_SMRT_PR_RST_ST 0x200
#define TVP_SMRT_RST_CHK_ST 0x320
#define TVP_SMRT_RST_ST 0x340
#define TVP_SMRT_RST_SET_UART 0x380
#define TVP_SMRT_RST_PPS_ST 0x3a0
#define TVP_SMRT_CLOCK_STOPPED_ST 0x3f0
#define TVP_SMRT_IDLE_ST 0x400
#define TVP_SMRT_TX_NOT_STARTED 0x400 // Used to be 0x700 - Old T=1 idle
#define TVP_SMRT_PST_RST_ST 0x400 // Old T=0 idle
#define TVP_SMRT_SND_ALL 0x500
#define TVP_SMRT_RCV_T0_PCB 0x600 // NULL, ACK, or SW1
#define TVP_SMRT_RCV_ONE 0x610
#define TVP_SMRT_RCV_MANY 0x620
#define TVP_SMRT_RCV_SW2 0x640
#define TVP_SMRT_TX_IN_PROGRESS 0x700
#define TVP_SMRT_RCV_NAD 0x800
#define TVP_SMRT_RCV_T1_PCB 0x810
#define TVP_SMRT_RCV_LENGTH 0x820
#define TVP_SMRT_RCV_DATA 0x830
#define TVP_SMRT_RCV_EDC_BYTE0 0x840
#define TVP_SMRT_RCV_EDC_BYTE1 0x850
#define TVP_SMRT_TX_IRDETO_IN_PROGRESS 0x900
#define TVP_SMRT_RCV_IRDETO_HDR 0xa00
#define TVP_SMRT_RCV_IRDETO_LEN 0xa10
#define TVP_SMRT_RCV_IRDETO_DATA 0xa20
#define TVP_SMRT_RCV_IRDETO_EDC 0xa30
#define TVP_SMRT_RCV_ERROR_DUMP 0xb00
#define TVP_SMRT_DUMP_RCVD_BYTES 0xb00
/* Smart Card State machine for T=1 protocol Vpp Control */
#define TVP_SMRT_VPP_IDLE 0
#define TVP_SMRT_VPP_WAIT_PCB 1
#define TVP_SMRT_VPP_ACTIVE 2
/* Time values */
#define TVP_SMRT_INITWWT 10887 // 1.2 seconds at init etu
#define TVP_SMRT_VCCDETTIME 576 // 500us of fastest clock in units of (etu*16)
#define TVP_SMRT_FTOTIME 75 // 2^6+11 etu (approx half CWT)
/* Smart Card UART interface structure definitions */
#define TVP_LEN_BYTE 2 // Location in receive buffer of length byte
#define TVP_T0_HDR_SIZE 5 // Number of bytes in T=1 block header
#define TVP_T1_HDR_SIZE 3 // Number of bytes in T=1 block header
#define TVP_IRDETO_LEN_BYTE 7 // Location in receive buffer of length byte
#define TVP_IRDETO_HDR_SIZE 8 // Number of bytes in Irdeto Rcv block header
#define TVP_SMRT_DONT_SEND_EDC 0
#define TVP_SMRT_SEND_EDC 1
#define TVP_LAST_BYTE_FLAG 0x100 // Signal UART Tx logic to send the EDC
#define TVP_CTRLF 0x100 // Control flag for T=0 VPP logic. Identifies
// the INS and P3 bytes as they are sent
#define TVP_INS_BYTE 1 // Index value of the INS byte in the T=0 hdr
#define TVP_P3_BYTE 4 // Index value of the P3 byte in the T=0 hdr
#define TVP_ROLL_VALUE 21 // Number of bits available for Wait Time
#define TVP_MAX_NON_ROLL_VALUE ((1<<TVP_ROLL_VALUE) - 1)
#define TVP_SMRT_MAX_SIZE_T0 256 // Maximum message length in bytes
#define TVP_SMRT_MAX_LENGTH_T1 254 // Maximum value for length byte in T=1 data
#define TVP_SMRT_MAX_LENGTH_IRDETO 64 // Maximum value for len byte in Irdeto data
#define TVP_MAX_PTS_SIZE 6 // Largest PTS string
#define TVP_SMRT_NULL 0x60 // NULL value for T=0 protocol
#define TVP_INVERSE_BYTE 0x3f
#define TVP_DIRECT_BYTE 0x3b
#define TVP_GET_TURNAROUND_GUARDTIME(x) ((x>>8) & 0xff)
#define TVP_GET_NORMAL_GUARDTIME(x) (x & TVP_GUARDTIME_MASK)
/*******************************************
* StructureType description
*******************************************/
typedef struct {
unsigned short smrt_state; // Smart card Interface state machine
unsigned char data_dir; // Data direction to/from smart card
unsigned char vpp_cntrl_state; // State of Vpp Control if under SW control
unsigned char *snd_data; // Pointer to the data to send to the
// smart card
unsigned char *rcv_data; // Pointer to user's buffer for received
// data from smart card
TvpSmrtStatusOut *status; // User's status pointer
unsigned short *rcv_sz; // Size of data received from smart card
unsigned short rcv_ptr; // Receive buffer index
unsigned short rcv_limit; // Max number of chars to receive
unsigned short snd_ptr; // Send buffer index
unsigned short snd_sz; // Size of data to send to smart card
// (Application software supplied)
unsigned char int_num; // IRQ number that the smart card driver
// interface will use to interrupt the user
unsigned long protocol; // Protocol type
unsigned short roll_count; // Current number of timer roll-overs
unsigned short roll_goal; // Timeout value in number of roll-overs
Tvp_On_Off power; // Power Down = 0 ; Power UP 1
Tvp_True_False edc_flag; // Send and check the edc characters
unsigned char check_first_char; // Flag indicating check of 1st char of ATR
unsigned char unique_first_char; // 1st ATR char for check of unique 1st char
unsigned char process_atr_len; // Process the standard ATR length
unsigned char turnaround_gdtime;
unsigned char normal_gdtime;
}TvpSmrtCardGlbl_s;
typedef struct {
volatile unsigned long buffer; // Transmit and Receive Buffer
volatile unsigned long sccc; // Comm Control Register
volatile unsigned long scs; // Status Register
volatile unsigned long scic; // Interface Control Register
volatile unsigned long bitdiv; // Bit Time Divisor
volatile unsigned long vdtim; // Vcc Detect Time
volatile unsigned long wwtim; // Work Wait Time
volatile unsigned long rx_edc; // Receiver EDC Register
volatile unsigned long bwt; // Block Wait Time
volatile unsigned long fto; // Fifo Time Out
volatile unsigned long scim; // Interrupt Mask Register
volatile unsigned long scis; // Interrupt Status Register
volatile unsigned long scrc; // CRC Register
volatile unsigned long tx_edc; // Transmit EDC Register
volatile unsigned long sbitdiv; // Start Bit Divisor Register
}TvpSmrtUartRegisters_s;
typedef struct {
unsigned short upper;
unsigned short lower;
} TvpWord2Shorts;
typedef void (*TVP_SMCISR_PTR)();
/*********************************************************************
* PRIVATE FUNCTION PROTOTYPES *
*********************************************************************/
TVP_FERROR tvpSmrtUartReset_l(void);
TVP_SMCISR_PTR tvpSmrtReplaceIsr (TVP_SMCISR_PTR new_isr, unsigned char bit_num);
unsigned long *tvpSmrtRegsAddress (void);
#ifdef DEBUG_SMART_CARD_TI
void tvpSmrtGetSmrtMemory (TvpSmrtUartRegisters_s *hwRegs,
TvpSmrtCardGlbl_s *swRegs);
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -