⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iccard.h

📁 单相 CPU卡表复费率电能表,内部有提供I2C驱动,CPU卡驱动,NEC单片机0513等
💻 H
字号:
#ifndef ICCARD_H
#define ICCARD_H

#ifdef __cplusplus
extern "C"
{
#endif

#define MAX_485_GPRS_UART_LEN 120
#define CLK_COUNT_9600 0x30
#define CLK_TX_9600 0x2D

#define RXDING 0x00
#define TXDING 0x01
#define VERIFY_ERROR 0x01
#define CPU_RST(pd) ( CPU_CARD_RST = pd )
#define ESAM_RST(pd) ( ESAM_RST_PIN = pd )
#define CPU_IO(pd) ( CPU_CARD_IO = pd )
#define CPU_IO_DIR(pd) ( CPU_CARD_IO_DIR = pd )
#define ESAM_IO(pd) ( ESAM_IO_PIN = pd )
#define ESAM_IO_DIR(pd) ( ESAM_IO_PIN_DIR = pd )
#define IC_IO(pd) if( Cpu_card_comm.selectDevice == SEL_CARD ) CPU_IO(pd);else ESAM_IO(pd)
#define IC_IO_DIR(pd) if( Cpu_card_comm.selectDevice == SEL_CARD ) CPU_IO_DIR(pd);else ESAM_IO_DIR(pd)

#define EPM_NONE   0 // put off
#define EPM_E__1   1 // incorrect card
#define EPM_E__2   2 // user not match
#define EPM_E__3   3 // incorrect password
#define EPM_E__4   4 // Exit Run
#define EPM_E__5   5 // read file error
#define EPM_E__6   6 // internal auth fatal error
#define EPM_E__7   7 // esam external auth fatal error
#define EPM_E__8   8 // cpu card external auth fatal error
#define EPM_E__9   9 // can't select Elect meter application
#define EPM_E__10  10 // 485 COMM error
#define EPM_E__11  11 // invalid user code
#define EPM_E__12  12 // Get ATR eror
#define EPM_E__13  13 // invalid buy times
#define EPM_E__14  14 // parse frame error, maybe beyond accu limit
#define EPM_E__15  15 // write back error
#define EPM_E__16  16 // check sum error
#define EPM_E__17  17 // invalid meter code
#define EPM_E__18  18 // fill too long
#define EPM_E__19  19 // check card beyond meter number
#define EPM_E__20  20 // checking card write back error for number
#define EPM_E__21  21 // need open account card for empty meter
#define EPM_E__22  22 // write ESAM error
#define EPM_E__23  23 //
#define EPM_E__24  24 //
#define EPM_E__25  25 //
#define EPM_E__26  26 //
#define EPM_E__27  27 // file malformat 
#define EPM_E__28  28 // update_key_error

#define SEL_CARD 0
#define SEL_ESAM 1

#define IC_IO_DIR_INPUT 1
#define IC_IO_DIR_OUTPUT 0

#define FILE_ID_RIFFILLING_INFO	 1
#define FILE_ID_ESAM_APPLICATION 1

#define IC_WRITE_START_ADDR 5
#define FILE_ID_MODIFY_PASSWORD 0x01
#define RESET_RESPONSE_DATA_NUBER 13
#define MAX_READ_CARD_NUM 1

#define IC_MONEY_START_POS 0x17
#define IC_USERCODE_START_POS 0x03
#define IC_METERCODE_START_POS 0x0D
#define IC_BUY_TIMES_POS 0x1b
#define IC_ALARM3_PWR_POS 0x1F
#define IC_ALARM1_PWR_POS 0x23
#define IC_CONER_PWR_POS 0x27

#define IC_KEY_LEN 0x18
#define USER_CODE_LEN 9
#define USER_METER_LEN 10
#define MAX_PWD_NUM 8
#define USED_METER 0x3B

#define SEL_TYPE_DF	0 //选择目录
#define SEL_TYPE_EF 2 //选择文件

#define AUTH_CPU_INTERNAL 0x04
#define AUTH_ESAM_EXTERNAL 0x05
#define AUTH_CPU_EXTERNAL 0x06

#define FILE_START 0
#define FILE_CMD 1
#define FILE_LEN	2

#define IC_CARD_CLR BIT0
#define IC_CARD_BUY BIT1
#define IC_CARD_PASSWORD BIT2
#define IC_CARD_CHECK BIT3
#define IC_CARD_BUY_ERR BIT4

#define CPUCARD_COMM_STOP() ( TMMK02 = 1 )
#define CPUCARD_COMM_START() ( TMMK02 = 0 )

#define ICCARD_UNLOCK() ( card_in_slot = 0 )
#define ICCARD_LOCK()   ( card_in_slot = 1 )

#define ICCARD_WB_STAR  (0x50)
#define ICCARD_MAX_DLEN (0x40)

extern uchar card_in_slot;

typedef struct Dummy_Comm485_Parameter
{
    uchar verify;
    uchar Uart_Data;
    uchar State_T_Or_R;
    uchar BIT_Count;
    uchar FramePointer;
    uchar Len_Of_Need_To_Send;
    uchar UartState;
    uchar ucCS;
    uchar selectDevice;
    uchar Serial_Buffer[MAX_485_GPRS_UART_LEN];
}Dummy_Comm485_ParameterS;

extern volatile Dummy_Comm485_ParameterS Cpu_card_comm;
extern uchar cd_data[ICCARD_MAX_DLEN];

extern void TM02Init(void);
extern void CPU_card_start_tx(uchar frame_start_Pointer, uchar len);
extern void CPU_card_receive(void);
extern void CPU_card_send(void);
extern void CPU_card_start_rx(void);
extern void CPU_card_comm_init(void);
extern void CPUCardReset();
extern void CPU_card_read_response(uchar read_len);
extern void CPU_card_send_command(uchar s_pos, uchar send_len);
extern void ICCardPolling(void);

extern uchar IC_get_ATR(void);
extern uchar IC_read_file(uchar sel_dev, uchar file_id, uchar s_pos, uchar read_len);
extern uchar IC_select_file(uchar sel_type, ushort file_id);
extern uchar IC_checking_writeback(uchar rec_num);
extern uchar IC_write_file(uchar sel_dev, uchar file_id, uchar s_pos, uchar w_len);
extern uchar IC_get_rand_data(uchar sel_dev, uchar len);
extern uchar IC_get_data_back(uchar sel_dev, uchar len);
extern uchar IC_write_file_MAC(uchar sel_dev, uchar file_id, uchar s_pos, uchar w_len);
extern uchar IC_write_file_ex(uchar sel_dev, ushort s_pos, uchar w_len);
extern uchar ESAM_read_MAC(uchar file_id, uchar start_pos, uchar len);
extern uchar ESAM_update_key();
extern uchar ESAM_update_key();
extern uchar UNIC_internal_auth_proc();
extern uchar UNIC_esam_external_auth_proc();
extern uchar UNIC_ic_external_auth_proc();
extern ulong card_decrypt(ulong key1);

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -