typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long uint32_t;
uint8_t const Uart_Cmd_Table[256] = {
//0xAA, 0x55, 0x9A, 0xFB, 0x00, 0x61, 0x48, 0x34, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
//0xFF, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x16, 0x02, 0x00,
//0x04, 0x03, 0x00, 0x17, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x02,
//0x17, 0x00, 0x08, 0x03, 0x00, 0x88, 0x13, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A,
//0x01, 0x00, 0x7F, 0x00, 0x0B, 0x06, 0x00, 0x00, 0x00, 0x15, 0x05, 0xE6, 0x07, 0x00, 0x0C, 0x06,
//0x00, 0x3B, 0x17, 0x16, 0x06, 0xE8, 0x07, 0x00, 0x0D, 0x02, 0x00, 0x15, 0x08, 0x00, 0x0E, 0x02,
//0x00, 0x16, 0x10, 0x00, 0x0F, 0x01, 0x00, 0x01, 0x00, 0x10, 0x01, 0x00, 0x02, 0x00, 0x11, 0x01,
//0x00, 0x03, 0x00, 0x12, 0x08, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x13,
//0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x08, 0x00, 0x02, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x06, 0x00, 0x82, 0x0A, 0x0A, 0x0A, 0x14, 0x14,
//0x00, 0x16, 0x20, 0x00, 0x88, 0x13, 0x00, 0x00, 0x00, 0x32, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x04, 0x00, 0x32, 0x01, 0x50, 0x01, 0x00, 0x79, 0x01, 0x00,
//0x04, 0x00, 0x7A, 0x01, 0x00, 0x05, 0x00, 0x7B, 0x01, 0x00, 0x06, 0x00, 0x7C, 0x08, 0x00, 0x04,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x08, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x7E, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8};
//0xAA, 0x55, 0x9A, 0xFB, 0x00, 0x61, 0x48, 0x34, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
//0xFF, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x40, 0x28, 0x00,
//0x04, 0x03, 0x00, 0x44, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00,
//0x00, 0x00, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A,
//0x01, 0x00, 0x00, 0x00, 0x0B, 0x06, 0x00, 0x00, 0x00, 0x03, 0x0A, 0xE6, 0x07, 0x00, 0x0C, 0x06,
//0x00, 0x3B, 0x17, 0x04, 0x0C, 0xE8, 0x07, 0x00, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02,
//0x00, 0x00, 0x00, 0x00, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x11, 0x01,
//0x00, 0x00, 0x00, 0x12, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13,
//0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x08, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x16, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x04, 0x00, 0x32, 0x01, 0x50, 0x01, 0x00, 0x79, 0x01, 0x00,
//0x00, 0x00, 0x7A, 0x01, 0x00, 0x00, 0x00, 0x7B, 0x01, 0x00, 0x00, 0x00, 0x7C, 0x08, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x7E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB9};
//0xAA, 0x55, 0x9A, 0xFB, 0x00, 0x61, 0x48, 0x34, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
//0xFF, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x08, 0x00, 0x00,
//0x04, 0x03, 0x00, 0x10, 0x08, 0x01, 0x00, 0x06, 0x01, 0x00, 0x03, 0x00, 0x07, 0x02, 0x00, 0x04,
//0x18, 0x00, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A,
//0x01, 0x00, 0x04, 0x00, 0x0B, 0x06, 0x00, 0x00, 0x00, 0x18, 0x0A, 0xE7, 0x07, 0x00, 0x0C, 0x06,
//0x00, 0x3B, 0x17, 0x19, 0x0C, 0xE9, 0x07, 0x00, 0x0D, 0x02, 0x00, 0x02, 0x02, 0x00, 0x0E, 0x02,
//0x00, 0x04, 0x05, 0x00, 0x0F, 0x01, 0x00, 0x0A, 0x00, 0x10, 0x01, 0x00, 0x0B, 0x00, 0x11, 0x01,
//0x00, 0x0C, 0x00, 0x12, 0x08, 0x00, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xFF, 0x00, 0x13,
//0x08, 0x00, 0xB0, 0xB5, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0x00, 0x00, 0x14, 0x08, 0x00, 0x61, 0x62,
//0x63, 0x64, 0x65, 0x69, 0x6A, 0x6B, 0x00, 0x15, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x16, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x04, 0x00, 0x32, 0x01, 0x50, 0x01, 0x00, 0x79, 0x01, 0x00,
//0x1B, 0x00, 0x7A, 0x01, 0x00, 0x3C, 0x00, 0x7B, 0x01, 0x00, 0x3D, 0x00, 0x7C, 0x08, 0x00, 0x41,
//0x42, 0x43, 0x44, 0x45, 0x47, 0x48, 0x49, 0x00, 0x7D, 0x08, 0x00, 0xBF, 0xBE, 0xC0, 0xCA, 0xCB,
//0xCC, 0xCD, 0xCE, 0x00, 0x7E, 0x08, 0x00, 0x6C, 0x6D, 0x6E, 0x6F, 0xAB, 0xAC, 0xAD, 0xAE, 0x3C};
0xAA, 0x55, 0x9A, 0xFB, 0x00, 0x61, 0x48, 0x34, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x08, 0x00, 0x00, 0x04, 0x03,
0x00, 0x1D, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x03, 0x12, 0x00, 0x08,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x01, 0x00, 0x00, 0x00,
0x0B, 0x06, 0x00, 0x00, 0x00, 0x18, 0x0A, 0xE7, 0x07, 0x00, 0x0C, 0x06, 0x00, 0x3B, 0x17, 0x19, 0x0C,
0xE9, 0x07, 0x00, 0x0D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x01,
0x00, 0x01, 0x00, 0x10, 0x01, 0x00, 0x02, 0x00, 0x11, 0x01, 0x00, 0x03, 0x00, 0x12, 0x08, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x13, 0x08, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x3F, 0x00, 0x14, 0x08, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x06,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x04, 0x00, 0x32, 0x01, 0x50, 0x01,
0x00, 0x79, 0x01, 0x00, 0x04, 0x00, 0x7A, 0x01, 0x00, 0x05, 0x00, 0x7B, 0x01, 0x00, 0x06, 0x00, 0x7C,
0x08, 0x00, 0xFF, 0xFF, 0x0F, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0x7D, 0x08, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7E, 0x08, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F};
//0xAA, 0x55, 0x9A, 0xFB, 0x00, 0xE4, 0x96, 0x86, 0x12, // 未知待确认
//// -------------------------------------- 0x16A
//0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 未知待确认
//0x06, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 未知待确认
//// -------------------------------------- 0x17A
//0x00, 0x03, 0x02, 0x00, 0x16, 0x02,
//// -------------------------------------- 0x180
//0x00, 0x04, 0x03, 0x00, 0x17, 0x00,
//// -------------------------------------- 0x186
//0x00, 0x06, 0x01, 0x00, 0x00,
//// -------------------------------------- 0x18B
//0x00, 0x07, 0x02, 0x00, 0x02, 0x17,
//// -------------------------------------- 0x191
//0x00, 0x08, 0x03, 0x00, 0x88, 0x13, 0x00,
//// -------------------------------------- 0x198
//0x00, 0x09, 0x02, 0x00, 0x00, 0x00,
//// -------------------------------------- 0x19E
//0x00, 0x0A, 0x01, 0x00, 0x7F,
//// -------------------------------------- 0x1A3
//0x00, 0x0B, 0x06, 0x00, 0x00, 0x00, 0x15, 0x05, 0xE6, 0x07,
//// -------------------------------------- 0x1AD
//0x00, 0x0C, 0x06, 0x00, 0x3B, 0x17, 0x16, 0x06, 0xE8, 0x07,
//// -------------------------------------- 0x1B7
//0x00, 0x0D, 0x02, 0x00, 0x15, 0x08,
//// -------------------------------------- 0x1BD
//0x00, 0x0E, 0x02, 0x00, 0x16, 0x10,
//// -------------------------------------- 0x1C3
//0x00, 0x0F, 0x01, 0x00, 0x01,
//// -------------------------------------- 0x1C8
//0x00, 0x10, 0x01, 0x00, 0x02,
//// -------------------------------------- 0x1CD
//0x00, 0x11, 0x01, 0x00, 0x03,
//// -------------------------------------- 0x1D2
//0x00, 0x12, 0x08, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
//// -------------------------------------- 0x1DE
//0x00, 0x13, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//// -------------------------------------- 0x1EA
//0x00, 0x14, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//// -------------------------------------- 0x1F6
//0x00, 0x15, 0x06, 0x00, 0x82, 0x0A, 0x0A, 0x0A, 0x14, 0x14,
//// -------------------------------------- 0x200
//0x00, 0x16, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//// -------------------------------------- 0x213
//0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//// -------------------------------------- 0x223
//0x00, 0x6F, 0x04, 0x00, 0x32, 0x01, 0x50, 0x10,
//// -------------------------------------- 0x22B
//0x00, 0x79, 0x01, 0x00, 0x04,
//// -------------------------------------- 0x230
//0x00, 0x7A, 0x01, 0x00, 0x05,
//// -------------------------------------- 0x235
//0x00, 0x7B, 0x01, 0x00, 0x06,
//// -------------------------------------- 0x23A
//0x00, 0x7C, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//// -------------------------------------- 0x246
//0x00, 0x7D, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//// -------------------------------------- 0x252
//0x00, 0x7E, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//// -------------------------------------- 0x25E
//0xA8
//};
uint8_t const EEPROM_Data_TableA[512] = {
// --------------------------------------------------------------------------- Page0
0x11, 0x22, 0x33, 0x35, // Device ID
0x12, 0x22, 0x38, 0x45, 0x27, 0x2E, 0x31, 0x16, // 与 Card ID 最后一个字节计算获得4字节数据存入0x90C、0x90D、0x90E、0x90F
0x6D, 0x5B, 0x4A, 0x1B, // MFRC500 Serial ID
0xEA, 0x06, 0xF2, 0xAB, 0xA8, 0x30, 0x56, 0x24, 0xA7, 0x43, 0x28, 0xC4, 0xBD, 0x53, 0x43, 0xD3, // 0x936~0x945 0~15
0xAD, 0x66, 0x9F, 0x36, 0x5C, 0x1F, 0x6D, 0x31, 0x85, 0x98, 0x60, 0x73, 0xAD, 0x94, 0x4B, 0x55, // 0x946~0x955 16~31
0xD6, 0xD5, 0xF0, 0x60, 0x80, 0xCB, 0x19, 0x11, 0x3C, 0x70, 0xDF, 0xD8, 0xC4, 0x70, 0x53, 0x68, // 0x956~0x965 32~47
// --------------------------------------------------------------------------- Page1
0x9E, 0x8C, 0x3E, 0x2C, 0x12, 0x41, 0x3E, 0x14, 0xD9, 0xA3, 0x1E, 0x98, 0x20, 0x90, 0x60, 0xFE, // 0x966~0x975 48~63
0xE9, 0x04, 0x19, 0xD7, 0x4D, 0xC5, 0x03, 0xC9, 0xAB, 0x4D, 0xCC, 0x92, 0x1C, 0xDC, 0xB4, 0x4A, // 0x976~0x985 64~79
0xE4, 0xF3, 0x59, 0xE7, 0xB0, 0xE4, 0xC9, 0x07, 0x3E, 0xC2, 0xE1, 0xE7, 0x56, 0x80, 0xD7, 0xBA, // 0x986~0x995 80~95
0xC1, 0x56, 0x13, 0x1C, 0xF8, 0x66, 0x3B, 0xD7, 0x5E, 0x9F, 0x94, 0xF9, 0xAA, 0xE1, 0x8F, 0x03, // 0x996~0x9A5 96~111
// --------------------------------------------------------------------------- Page2
0xE8, 0x63, 0x99, 0x73, 0x23, 0x53, 0x39, 0x91, 0x19, 0xBB, 0x57, 0x69, 0x38, 0xAB, 0xDD, 0x12, // 0x9A6~0x9B5 112~127
0x0A, 0x04, 0x04, 0x00, 0x09, 0x04, 0x08, 0x01, 0x09, 0x0F, 0x0F, 0x05, 0x09, 0x05, 0x09, 0x09, // 0x4B~0x5A
0x01, 0x03, 0x07, 0x06, 0x0D, 0x02, 0x0F, 0x0D, 0x03, 0x07, 0x03, 0x04, 0x0C, 0x0D, 0x06, 0x08, // 0x5B~0x6A
0x0C, 0x07, 0x08, 0x05, 0x0A, 0x08, 0x08, 0x0F, 0x0E, 0x0C, 0x08, 0x01, 0x00, 0x07, 0x0F, 0x07, // 0x6B~0x7A
// --------------------------------------------------------------------------- Page3
0x07, 0x0D, 0x01, 0x0B, 0x0F, 0x0D, 0x02, 0x02, 0x09, 0x03, 0x00, 0x01, 0x01, 0x0B, 0x05, 0x0E, // 0x7B~0x8A
0x02, 0x0B, 0x08, 0x09, 0x03, 0x0A, 0x0C, 0x00, 0x06, 0x07, 0x00, 0x00, 0x0B, 0x04, 0x01, 0x02, // 0x8B~0x9A
0x04, 0x0A, 0x00, 0x04, 0x05, 0x09, 0x08, 0x0E, 0x0B, 0x0C, 0x06, 0x0A, 0x07, 0x0B, 0x0D, 0x01, // 0x9B~0xAA
0x01, 0x03, 0x07, 0x0D, 0x07, 0x00, 0x0E, 0x0D, 0x09, 0x02, 0x0E, 0x0C, 0x0B, 0x09, 0x0E, 0x04, // 0xAB~0xBA
// --------------------------------------------------------------------------- Page4
0x0C, 0x0C, 0x09, 0x0F, 0x00, 0x05, 0x0C, 0x05, 0x0B, 0x0F, 0x06, 0x06, 0x0E, 0x06, 0x08, 0x0C, // 0xBB~0xCA
0x0F, 0x09, 0x0D, 0x02, 0x08, 0x03, 0x00, 0x01, 0x02, 0x0A, 0x0B, 0x02, 0x06, 0x00, 0x04, 0x09, // 0xCB~0xDA
0x08, 0x0E, 0x07, 0x0A, 0x0D, 0x08, 0x02, 0x0A, 0x05, 0x01, 0x06, 0x0B, 0x00, 0x03, 0x05, 0x0F, // 0xDB~0xEA
0x0D, 0x06, 0x00, 0x0D, 0x05, 0x0F, 0x02, 0x0C, 0x0B, 0x0D, 0x05, 0x00, 0x05, 0x0A, 0x03, 0x02, // 0xEB~0xFA
// --------------------------------------------------------------------------- Page5
0x05, 0x01, 0x03, 0x0E, 0x08, 0x06, 0x0A, 0x04, 0x03, 0x0A, 0x0F, 0x01, 0x0B, 0x01, 0x01, 0x0F, // 0xFB~0x10A
0x04, 0x06, 0x0F, 0x08, 0x02, 0x06, 0x09, 0x0A, 0x0F, 0x02, 0x03, 0x06, 0x05, 0x09, 0x02, 0x00, // 0x10B~0x11A
0x0D, 0x04, 0x04, 0x0A, 0x07, 0x0A, 0x04, 0x0C, 0x0C, 0x0B, 0x0D, 0x0E, 0x05, 0x0B, 0x09, 0x02, // 0x11B~0x12A
0x04, 0x07, 0x07, 0x08, 0x03, 0x07, 0x05, 0x0E, 0x0C, 0x07, 0x0D, 0x01, 0x06, 0x0C, 0x0E, 0x0E, // 0x12B~0x13A
// --------------------------------------------------------------------------- Page6
0x0C, 0x08, 0x06, 0x04, 0x0F, 0x0E, 0x0A, 0x03, 0x03, 0x0E, 0x0B, 0x0E, 0x03, 0x0B, 0x0A, 0x00, // 0x13B~0x14A
0xB7, // 0x15A
0x9B, // 0x15B
0xF1, // 0x15C
0x5B, // 0x15D
0x29, // 0x14B
0x91, // 0xAFC
0xC7, // 0x14C
0x47, // 0xAFD
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// --------------------------------------------------------------------------- Page7
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
// ---------------------------------------------------------------------------
uint8_t gucv_EEPolynomialArray[4];
uint8_t gucv_WriteCardBuffer[1024];
uint8_t ucvFlagesBuffer[64];
uint8_t gucvDeviceIDArray[4]; // [0x90C]、[0x90D]、[0x90E]、[0x90F]
uint8_t gucvHalfBlock_buffer[128];
uint8_t gucvBlock_buffer[256];
uint8_t ucvUartDataBuffer[1024]; //
uint8_t ucvOffsetMode1; // [0xAF8]
uint8_t ucvOffsetMode2; // [0xAF9]
uint8_t ucvOffsetMode3; // [0xAFB]
uint8_t gucv_CardIDArray[5]; // ID卡的序列号
uint8_t gucv_XR159;
uint8_t gucv_XR15F;
uint8_t gucv_EEXorArray[2];
uint8_t gucv_EESumArray[2];
uint8_t Fun_DeviceID_Produced(void);
uint8_t Fun_AnalyzeMode_Get(uint8_t mode);
uint8_t Fun_SelectMode_Analyze( void );
void Lab_46C2( uint8_t* buffer );
void Fun_FormatModeA_Analyze( void );
void Lab_4C9E( uint8_t* output );
void Lab_6241( uint8_t byte0, uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4, uint8_t* output );
uint8_t Lab_5623( uint8_t byte0, uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4, uint8_t byte5 );
void Fun_FormatModeB_Analyze( void );
void Lab_49CA( uint8_t* output );
void Lab_437B( uint8_t byte0, uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4, uint8_t* output );
// ---------------------------------------------------------------------------
uint8_t Fun_EEPROM_Check( void )
{
uint16_t i = 0;
uint16_t uivTmpIndex = 16;
uint8_t ucvTmpXorValue = 0;
uint8_t ucvTmpSumValue = 0;
for( i = 0; i < 128; i++ )
{
gucvHalfBlock_buffer[i] = EEPROM_Data_TableA[i + uivTmpIndex];
}
uivTmpIndex += 128;
for( i = 0; i < 256; i++ )
{
gucvBlock_buffer[i] = EEPROM_Data_TableA[i+uivTmpIndex];
}
uivTmpIndex += 256;
// 异或与和校验的多项式
gucv_EEPolynomialArray[0] = EEPROM_Data_TableA[uivTmpIndex];
gucv_EEPolynomialArray[1] = EEPROM_Data_TableA[uivTmpIndex+1];
gucv_EEPolynomialArray[2] = EEPROM_Data_TableA[uivTmpIndex+2];
gucv_EEPolynomialArray[3] = EEPROM_Data_TableA[uivTmpIndex+3];
uivTmpIndex += 4;
// 异或与和的校验值
gucv_EEXorArray[0] = EEPROM_Data_TableA[uivTmpIndex]; // 0x14B
gucv_EEXorArray[1] = EEPROM_Data_TableA[uivTmpIndex+2]; // 0x14C
gucv_EESumArray[0] = EEPROM_Data_TableA[uivTmpIndex+1]; // 0xAFC
gucv_EESumArray[1] = EEPROM_Data_TableA[uivTmpIndex+3]; // 0xAFD
// Fun_EEPROM_Verify
do{
for( i = 0; i < 128; i++ )
{
ucvTmpXorValue ^= gucvHalfBlock_buffer[i];
ucvTmpSumValue += gucvHalfBlock_buffer[i];
}
for( i = 0; i < 4; i++ )
{
ucvTmpXorValue ^= gucv_EEPolynomialArray[i];
ucvTmpSumValue += gucv_EEPolynomialArray[i];
}
if( ( ucvTmpXorValue != gucv_EEXorArray[0] ) || ( ucvTmpSumValue != gucv_EESumArray[0] ) )
{
return 1;
}
}while(0);
do{
ucvTmpXorValue = 0;
ucvTmpSumValue = 0;
for( i = 0; i < 128; i++ )
{
ucvTmpXorValue ^= ( ( ( gucvBlock_buffer[i] << 4 ) + gucvBlock_buffer[i+128]) + i );
ucvTmpSumValue += ( ( gucvBlock_buffer[i] << 4 ) + gucvBlock_buffer[i+128]);
}
if( ( ucvTmpXorValue != gucv_EEXorArray[1] ) || ( ucvTmpSumValue != gucv_EESumArray[1] ) )
{
return 1;
}
}while(0);
return 0;
}
// 生成刷卡器序列号
uint8_t Fun_DeviceID_Produced( void )
{
uint8_t ucvTmpProduct = 0;
uint8_t ucvTmpResidue = 0;
uint8_t ucvTmpCalData = 0;
uint8_t ucvTmpValue = 0;
uint8_t ucvTmpArray[8] = {0};
if( EEPROM_Data_TableA[0] != 0x11 )
{
return 1;
}
if( EEPROM_Data_TableA[1] != 0x22 )
{
return 1;
}
if( EEPROM_Data_TableA[2] != 0x33 )
{
return 1;
}
ucvTmpValue = EEPROM_Data_TableA[3];
if( ucvTmpValue >= 100 )
{
return 1;
}
do{
ucvTmpProduct = ucvTmpValue / 10;
ucvTmpResidue = ucvTmpValue % 10;
ucvTmpCalData = ( ( ucvTmpProduct + ucvTmpResidue ) & 3 );
ucvTmpCalData += ( ( ucvTmpResidue * 3 ) + 2 );
ucvTmpValue = EEPROM_Data_TableA[4];
ucvTmpArray[0] = ucvTmpValue - ucvTmpCalData;
ucvTmpValue = EEPROM_Data_TableA[5];
ucvTmpArray[1] = ucvTmpValue - ( ( ucvTmpCalData + 3 ) * 2 );
ucvTmpValue = EEPROM_Data_TableA[6];
ucvTmpArray[2] = ucvTmpValue - ( ucvTmpCalData* 5 );
ucvTmpValue = EEPROM_Data_TableA[7];
ucvTmpArray[3] = ucvTmpValue - ( ucvTmpCalData * 6 );
ucvTmpValue = EEPROM_Data_TableA[8];
ucvTmpArray[4] = ucvTmpValue - ( ucvTmpCalData * 3 );
ucvTmpValue = EEPROM_Data_TableA[9];
ucvTmpArray[5] = ucvTmpValue - ( ( ucvTmpCalData + 4 ) * 3 );
ucvTmpValue = EEPROM_Data_TableA[10];
ucvTmpArray[6] = ucvTmpValue - ( ucvTmpCalData * 4 );
ucvTmpValue = EEPROM_Data_TableA[11];
ucvTmpArray[7] = ucvTmpValue - ( ucvTmpCalData + 8 );
}while(0);
if( ( gucvDeviceIDArray[0] >= 100 ) || ( gucvDeviceIDArray[1] >= 100 ) ||
( gucvDeviceIDArray[2] >= 100 ) || ( gucvDeviceIDArray[3] >= 100 ) )
{
return 3;
}
gucvDeviceIDArray[0] = ( (ucvTmpArray[0] * 10 ) + ucvTmpArray[1] );
gucvDeviceIDArray[1] = ( (ucvTmpArray[2] * 10 ) + ucvTmpArray[3] );
gucvDeviceIDArray[2] = ( (ucvTmpArray[4] * 10 ) + ucvTmpArray[5] );
gucvDeviceIDArray[3] = ( (ucvTmpArray[6] * 10 ) + ucvTmpArray[7] );
return 0;
}
// 待验证
uint8_t Fun_SelectMode_Analyze( void )
{
uint8_t ucvTmpIndex = 0xFE;
uint8_t i,j;
for(i = 0; i < 64; i++)
{
for(j = 0; j < 16; j++)
{
// 清零 1K xram(0x48A~0x88B)
gucv_WriteCardBuffer[ ( (i << 4 ) + j ) ] = 0;
}
// 清零 64 xram(0x8AF~0x8EE)
//XBYTE[ 0x8AF + i ] = 0;
}
// 数据段的长度
// uivDataSegLenght = (ucvUartDataBuffer[25] << 8) | ucvUartDataBuffer[26];
if( (ucvUartDataBuffer[25] | (ucvUartDataBuffer[26] ^ 0x08)) != 0)
ucvTmpIndex = Fun_AnalyzeMode_Get( ucvUartDataBuffer[29] );
switch( ucvTmpIndex )
{
case 0:
//Lab_293C(); // 写卡指令处理步骤 处理方式
Fun_FormatModeA_Analyze();
printf("Hello world! - c.jsrun.net.");
break;
case 1:
//Lab_4055(); // 写卡指令处理步骤 处理方式
Fun_FormatModeB_Analyze();
break;
case 2:
//Lab_2421();
break;
case 3:
//Lab_47FA();
break;
case 4:
//Lab_2C99();
break;
case 5:
case 9: // XBYTE[0x17E] == 0x9C
//Lab_2730();
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 0xFE:
//Lab_2842();
break;
default:
break;
}
return 0;
}
// 已经验证
uint8_t Fun_AnalyzeMode_Get(uint8_t mode)
{
if( (mode & 0xC0) == 0 )
{
return 0;
}
else if( (mode & 0xC0) == 0x40 )
{
return 1;
}
else if( (mode & 0xC0) == 0x80 )
{
if( (mode & 0xC0) == 4 )
{
return 2;
}
else if( ( (mode & 0xC0) == 8 ) || ( (mode & 0xC0) == 0xC ) || ( (mode & 0xC0) == 0x10 ) )
{
return 3;
}
else if( (mode & 0xC0) == 0x14 )
{
return 4;
}
else if( (mode & 0xC0) == 0x18 )
{
return 5;
}
else if( (mode & 0xC0) == 0x1C )
{
return 9;
}
else if( (mode & 0xC0) == 0x23 )
{
return 6;
}
else if( (mode & 0xC0) == 0x24 )
{
return 7;
}
else if( (mode & 0xC0) == 0x28 )
{
return 8;
}
}
return 0xFF;
}
// 已经验证
void Fun_FormatModeA_Analyze( void )
{
uint8_t ucv_output[4];
uint16_t i = 0;
uint16_t j = 0;
uint16_t uivFrameLenght = 0; // 串口接收帧中数据的总个数
uint8_t ucvTmpColOffset = 0; // 列偏移
uint8_t ucvTmpRowOffset = 0; // 行偏移
uint16_t uivTmpDataIndex = 16 + 9; // 从帧中取数据的索引
uint16_t uivTmpCaseSelect = 0; // 数据段的分支选择
uint16_t uivTmpSegLenght = 0; // 当前数据段需要取出数据的个数
uint8_t ucvTmpOffset64 = (ucvOffsetMode1 * 4) * 0x10; // 缓存取出数据的偏移
uint8_t ucvTmpOffset128 = (ucvOffsetMode2 * 4) * 0x10;
uint8_t ucvTmpOffset192 = (ucvOffsetMode3 * 4) * 0x10;
// 可能是卡ID的Key [0x4D5]、[0x4D6]、[0x4D7]、[0x4D8]
gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 0 ] = gucvDeviceIDArray[0]; // [XRB0C]*10+[XRB0D]:76 0x4C
gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 1 ] = gucvDeviceIDArray[1]; // [XRB0E]*10+[XRB0F]:13 0x0D
gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 2 ] = gucvDeviceIDArray[2]; // [XRB10]*10+[XRB11]:61 0x3D
gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 3 ] = gucvDeviceIDArray[3]; // [XRB12]*10+[XRB13]:53 0x35 V
// 获取串口接收帧中数据的总个数
uivFrameLenght = (uint16_t)((ucvUartDataBuffer[4] << 8) | ucvUartDataBuffer[3]);
while(uivTmpDataIndex < (uivFrameLenght - 5)) // 是否所有的数据都取出来了
{
uivTmpCaseSelect = (uint16_t)((ucvUartDataBuffer[uivTmpDataIndex] << 8 ) | (ucvUartDataBuffer[uivTmpDataIndex + 1]));
uivTmpSegLenght = (uint16_t)((ucvUartDataBuffer[uivTmpDataIndex+3] << 8 ) | (ucvUartDataBuffer[ uivTmpDataIndex+2]));
uivTmpDataIndex += 4;
if( uivTmpCaseSelect < 256 )
{
switch( uivTmpCaseSelect )
{
case 3:
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );
ucvTmpColOffset = 0;
// [0x4CA:0x4CB]:EEPROM_Page1[0x40:0x41]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 4:
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );
ucvTmpColOffset = 2;
// [0x4CC:0x4CE]:EEPROM_Page1[0x42:0x44]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 6:
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );
ucvTmpColOffset = 15;
// [0x4D9]:EEPROM_Page1[0x4F]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 7:
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );
ucvTmpColOffset = 5;
// [0x4CF:0x4D0]:EEPROM_Page1[0x45:0x46]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 8:
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 ) + 2;
ucvTmpColOffset = 0;
// [0x4EA:0x4EC]:EEPROM_Page1[0x60:0x62]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 9:
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 ) + 2;
ucvTmpColOffset = 3;
// [0x4ED:0x4EE]:EEPROM_Page1[0x63:0x64]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0xA:
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 );
ucvTmpColOffset = 7;
// [0x4D1]:EEPROM_Page1[0x47]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0xB:
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 ) + 1;
ucvTmpColOffset = 0;
// [0x4DA:0x4DF]:EEPROM_Page1[0x50:0x55]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0xC:
ucvTmpRowOffset = 5;
ucvTmpColOffset = 8;
// [0x4E2:0x4E8]:EEPROM_Page1[0x58:0x5E]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0xD:
ucvTmpRowOffset = 5;
ucvTmpColOffset = 6;
// [0x4E0:0x4E1]:EEPROM_Page1[0x56:0x57]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0xE:
ucvTmpRowOffset = 5;
ucvTmpColOffset = 14;
// [0x4E8:0x4E9]:EEPROM_Page1[0x5E:0x5F]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0xF:
ucvTmpRowOffset = 4;
ucvTmpColOffset = 8;
// [0x4D2]:EEPROM_Page1[0x48]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0x10:
ucvTmpRowOffset = 4;
ucvTmpColOffset = 9;
// [0x4D3]:EEPROM_Page1[0x49]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0x11:
ucvTmpRowOffset = 4;
ucvTmpColOffset = 10;
// [0x4D4]:EEPROM_Page1[0x4A]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0x12:
ucvTmpRowOffset = 8;
ucvTmpColOffset = 0;
// [0x50A:0x511]:EEPROM_Page2[0x80:0x87]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0x13:
ucvTmpRowOffset = 9;
ucvTmpColOffset = 0;
// [0x51A:0x521]:EEPROM_Page2[0x90:0x97]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0x14:
ucvTmpRowOffset = 10;
ucvTmpColOffset = 0;
// [0x52A:0x531]:EEPROM_Page2[0xA0:0xA7]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0x15:
ucvTmpRowOffset = 14;
ucvTmpColOffset = 0;
// [0x56A:0x56F]:EEPROM_Page3[0xE0:0xE5]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0x16:
ucvTmpRowOffset = 13;
ucvTmpColOffset = 0;
// [0x55A:0x569]:EEPROM_Page3[0xD0:0xDF]
for( j = 16; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
// Lab_22D7();
ucvTmpColOffset = 0;
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 0 ) ] = 0; // [0x55A] = 0
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 1 ) ] = 0; // [0x55B] = 0
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 2 ) ] = 0; // [0x55C] = 0
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 3 ) ] = 0; // [0x55D] = 0
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 4 ) ] = 1; // [0x55E] = 1
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 5 ) ] = 2; // [0x55F] = 2
// [0x560] = 2
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 6 ) ] = Lab_5623( gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 0 ) ],
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 1 ) ],
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 2 ) ],
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 3 ) ],
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 4 ) ],
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 5 ) ] );
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0x79:
ucvTmpRowOffset = 14;
ucvTmpColOffset = 6;
// [0x570]:EEPROM_Page3[0xE6]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0x7A:
ucvTmpRowOffset = 14;
ucvTmpColOffset = 7;
// [0x571]:EEPROM_Page3[0xE7]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0x7B:
ucvTmpRowOffset = 14;
ucvTmpColOffset = 8;
// [0x572]:EEPROM_Page3[0xE8]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0x7C:
ucvTmpRowOffset = 8;
ucvTmpColOffset = 8;
// [0x512:0x519]:EEPROM_Page2[0x88:0x8F]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0x7D:
ucvTmpRowOffset = 9;
ucvTmpColOffset = 8;
// [0x522:0x519]:EEPROM_Page2[0x98:0x9F]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
case 0x7E:
ucvTmpRowOffset = 10;
ucvTmpColOffset = 8;
// [0x532:0x539]:EEPROM_Page2[0xA8:0xAF]
for( j = 0; j < uivTmpSegLenght; j++ )
{
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 16 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset += 1;
uivTmpDataIndex += 1;
}
ucvFlagesBuffer[ucvTmpRowOffset] = 1;
break;
default:
break;
}
}
}
// Lab_2C49
Lab_6241( gucv_WriteCardBuffer[ (ucvTmpOffset64 + 32) ], // [0x4EA]:88
gucv_WriteCardBuffer[ (ucvTmpOffset64 + 33) ], // [0x4EB]:13
gucv_WriteCardBuffer[ (ucvTmpOffset64 + 34) ], // [0x4EC]:00
gucv_WriteCardBuffer[ (ucvTmpOffset64 + 35) ], // [0x4ED]:00
gucv_WriteCardBuffer[ (ucvTmpOffset64 + 36) ], ucv_output); // [0x4EE]:00
// Lab_1CCA
gucv_WriteCardBuffer[ ucvTmpOffset64 + 37 ] = ucv_output[0]; // 0x4EF
gucv_WriteCardBuffer[ ucvTmpOffset64 + 38 ] = ucv_output[1]; // 0x4F0
printf("扇区3地址[0x4EF/0x4F0]的数据:0x%X, 0x%X; \r\n", ucv_output[0], ucv_output[1]);
gucv_WriteCardBuffer[ ucvTmpOffset192 + 0 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 32 ]; // [0x54A] = [0x4EA] = 88
gucv_WriteCardBuffer[ ucvTmpOffset192 + 1 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 33 ]; // [0x54B] = [0x4EB] = 13
gucv_WriteCardBuffer[ ucvTmpOffset192 + 2 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 34 ]; // [0x54C] = [0x4EC] = 00
gucv_WriteCardBuffer[ ucvTmpOffset192 + 3 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 35 ]; // [0x54D] = [0x4ED] = 00
gucv_WriteCardBuffer[ ucvTmpOffset192 + 4 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 36 ]; // [0x54E] = [0x4EE] = 00
gucv_WriteCardBuffer[ ucvTmpOffset192 + 5 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 37 ]; // [0x54F] = [0x4EF] = 00
gucv_WriteCardBuffer[ ucvTmpOffset192 + 6 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 38 ]; // [0x550] = [0x4F0] = 00
// Lab_2EA3, Lab_4C9E, Lab_2EA6
Lab_4C9E(ucv_output);
gucv_WriteCardBuffer[ (ucvTmpOffset192 + 16) ] = ucv_output[0]; // [0x578] = 0x46
gucv_WriteCardBuffer[ (ucvTmpOffset192 + 17) ] = ucv_output[1]; // [0x579] = 0x2D
gucv_WriteCardBuffer[ (ucvTmpOffset192 + 14) ] = ucv_output[2]; // [0x576] = 0x46
gucv_WriteCardBuffer[ (ucvTmpOffset192 + 15) ] = ucv_output[3]; // [0x577] = 0x80
printf("扇区3地址[0x576/0x577/0x578/0x579]的数据:0x%X, 0x%X, 0x%X, 0x%X; \r\n", ucv_output[2], ucv_output[3], ucv_output[0], ucv_output[1]);
}
// 已经验证
uint8_t Lab_5623( uint8_t byte0, uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4, uint8_t byte5 )
{
return (( ( ( ( byte1 * 3 ) + ( byte0 * 2 ) + byte2 + ( byte3 * 4 ) ) / 11 ) ^ byte4 ) ^ byte5);
}
// 已经验证
void Lab_4C9E( uint8_t* output )
{
uint8_t i;
uint8_t ucvTmpOffset64 = (ucvOffsetMode1 * 4) * 0x10;
uint8_t ucvTmpOffset128 = (ucvOffsetMode2 * 4) * 0x10;
uint8_t ucvTmpOffset192 = (ucvOffsetMode3 * 4) * 0x10;
uint8_t ucv_tmp_array[16];
uint8_t ucv_swap_array[16];
uint8_t ucv_swap_buffer[4];
// [0xB11] = ( [0x936] ^ [0x4CD] ) + ( [0x939] ^ [0x570] ) = 0x95
ucv_tmp_array[0] = ( EEPROM_Data_TableA[16] ^ gucv_WriteCardBuffer[ ( 3 + ucvTmpOffset64 ) ] ) + // 0x4CD
( EEPROM_Data_TableA[3+16] ^ gucv_WriteCardBuffer[ ( 38 + ucvTmpOffset192 ) ] ); // 0x570
// [0xB12] = ( [0x937] ^ [0x4CE] ) + ( [0x93A] ^ [0x571] ) = 0xAE
ucv_tmp_array[1] = ( EEPROM_Data_TableA[1+16] ^ gucv_WriteCardBuffer[ ( 4 + ucvTmpOffset64 ) ] ) + // 0x4CE
( EEPROM_Data_TableA[4+16] ^ gucv_WriteCardBuffer[ ( 39 + ucvTmpOffset192 ) ] ); // 0x571
// [0xB13] = ( [0x938] ^ [0x4CB] ) + ( [0x937] ^ [0x4D3] )
ucv_tmp_array[2] = ( EEPROM_Data_TableA[2+16] ^ gucv_WriteCardBuffer[ ( 1 + ucvTmpOffset64 ) ] ) + // 0x4CB
( EEPROM_Data_TableA[1+16] ^ gucv_WriteCardBuffer[ ( 9 + ucvTmpOffset64 ) ] ); // 0x4D3
// [0xB14] = ( [0x939] ^ [0x4CC] ) + (EEPROM_Data_TableA[5+16] ^ [0x572])
ucv_tmp_array[3] = ( EEPROM_Data_TableA[3+16] ^ gucv_WriteCardBuffer[ ( 2 + ucvTmpOffset64 ) ] ) + // 0x4CC
( EEPROM_Data_TableA[5+16] ^ gucv_WriteCardBuffer[ ( 40 + ucvTmpOffset192 ) ] ); // 0x572
// [0xB15] = ( [0x93A] ^ [0x4CA] ) + ( [0x938] ^ [0x4D4] )
ucv_tmp_array[4] = ( EEPROM_Data_TableA[4+16] ^ gucv_WriteCardBuffer[ ( 0 + ucvTmpOffset64 ) ] ) + // 0x4CA
( EEPROM_Data_TableA[2+16] ^ gucv_WriteCardBuffer[ ( 10 + ucvTmpOffset64 ) ] ); // 0x4D4
ucv_tmp_array[5] = ( EEPROM_Data_TableA[5+16] ) + ( gucv_WriteCardBuffer[ ( 14 + ucvTmpOffset64 ) ] ); // 0x4D8
ucv_tmp_array[6] = ( EEPROM_Data_TableA[6+16] ) + ( gucv_WriteCardBuffer[ ( 13 + ucvTmpOffset64 ) ] ); // 0x4D7
ucv_tmp_array[7] = ( EEPROM_Data_TableA[7+16] ) + ( gucv_WriteCardBuffer[ ( 12 + ucvTmpOffset64 ) ] ); // 0x4D6
ucv_tmp_array[8] = ( EEPROM_Data_TableA[8+16] ) + ( gucv_WriteCardBuffer[ ( 11 + ucvTmpOffset64 ) ] ); // 0x4D5
ucv_tmp_array[9] = ( EEPROM_Data_TableA[9+16] ) + ( gucv_WriteCardBuffer[ ( 8 + ucvTmpOffset64 ) ] ); // 0x4D2
ucv_tmp_array[10] = ( EEPROM_Data_TableA[10+16] ) + ( gucv_WriteCardBuffer[ ( 26 + ucvTmpOffset64 ) ] ); // 0x4E4
ucv_tmp_array[11] = ( EEPROM_Data_TableA[11+16] ) + ( gucv_WriteCardBuffer[ ( 25 + ucvTmpOffset64 ) ] ); // 0x4E3
ucv_tmp_array[12] = ( EEPROM_Data_TableA[12+16] ) + ( gucv_WriteCardBuffer[ ( 29 + ucvTmpOffset64 ) ] ); // 0x4E7
ucv_tmp_array[13] = ( EEPROM_Data_TableA[13+16] ) + ( gucv_WriteCardBuffer[ ( 27 + ucvTmpOffset64 ) ] ); // 0x4E5
ucv_tmp_array[14] = ( EEPROM_Data_TableA[14+16] ) + ( gucv_WriteCardBuffer[ ( 28 + ucvTmpOffset64 ) ] ); // 0x4E6
ucv_tmp_array[15] = ( EEPROM_Data_TableA[15+16] ) + ( gucv_WriteCardBuffer[ ( 24 + ucvTmpOffset64 ) ] ); // 0x4E2
ucv_swap_buffer[0] = ( gucv_CardIDArray[3] ^ ( ucv_tmp_array[3] + ucv_tmp_array[5] ) ) +
( ( ucv_tmp_array[1] ^ ucv_tmp_array[12] ) + ( ucv_tmp_array[7] ^ ucv_tmp_array[8] ) );
ucv_swap_buffer[1] = ( gucv_CardIDArray[2] ^ ( ucv_tmp_array[0] + ucv_tmp_array[2] ) ) +
( ( ucv_tmp_array[3] ^ ucv_tmp_array[13] ) + ( ucv_tmp_array[4] ^ ucv_tmp_array[9] ) );
ucv_swap_buffer[2] = ( gucv_CardIDArray[0] ^ ( ucv_tmp_array[1] + ucv_tmp_array[3] ) ) +
( ( ucv_tmp_array[0] ^ ucv_tmp_array[14] ) + ( ucv_tmp_array[5] ^ ucv_tmp_array[10] ) );
ucv_swap_buffer[3] = ( gucv_CardIDArray[1] ^ ( ucv_tmp_array[9] + ucv_tmp_array[12] ) ) +
( gucv_CardIDArray[4] ^ ( ucv_tmp_array[5] + ucv_tmp_array[7] ) ) +
( ( ucv_tmp_array[2] ^ ucv_tmp_array[15] ) + ( ucv_tmp_array[6] ^ ucv_tmp_array[11] ) );
Lab_46C2(ucv_swap_buffer);
// Lab_4DE7
for( i = 0; i < 16; i++ )
{
// [0x4CA:0x4DB] ^ = 0x13
ucv_swap_array[i] = gucv_WriteCardBuffer[( ( 0 + ucvTmpOffset64 ) + i )] ^ // 0x4CA
( EEPROM_Data_TableA[17+16] + EEPROM_Data_TableA[ ( 16 + 16 + i ) ] );
// [0x4DA:0x4EB] ^ = 0x13
ucv_swap_array[i] += gucv_WriteCardBuffer[( ( 16 + ucvTmpOffset64 ) + i )] ^ // 0x4DA
( EEPROM_Data_TableA[18+16] + EEPROM_Data_TableA[ ( 16 + 16 + i ) ] );
// [0x50A:0x51B] ^ = 0x13
ucv_swap_array[i] += gucv_WriteCardBuffer[( ( 0 + ucvTmpOffset128 ) + i )] ^ // 0x50A
( EEPROM_Data_TableA[19+16] + EEPROM_Data_TableA[ ( 16 + 16 + i ) ] );
// [0x51A:0x52B] ^ = 0x13
ucv_swap_array[i] += gucv_WriteCardBuffer[( ( 16 + ucvTmpOffset128 ) + i )] ^ // 0x51A
( EEPROM_Data_TableA[20+16] + EEPROM_Data_TableA[ ( 16 + 16 + i ) ] );
// [0x52A:0x53B] ^ = 0x13
ucv_swap_array[i] += gucv_WriteCardBuffer[( ( 32 + ucvTmpOffset128 ) + i )] ^ // 0x52A
( EEPROM_Data_TableA[21+16] + EEPROM_Data_TableA[ ( 16 + 16 + i ) ] );
}
// Lab_4E62
for( i = 0; i < 12; i++ )
{
// [0x56A:0x576] ^ = 0x13
ucv_swap_array[i] += gucv_WriteCardBuffer[ ( ( 32 + ucvTmpOffset192 ) + i ) ] ^ // 0x56A
( EEPROM_Data_TableA[22+16] + EEPROM_Data_TableA[ ( 16 + 16 + i ) ] ) ;
}
// Lab_4E88 R6 = [0x15F], R5 = [0x159]
ucv_swap_buffer[0] = ( ucv_swap_array[8] ^ ucv_swap_array[12] ) +
( ( gucv_XR159 ^ gucv_XR15F ) + ( ucv_swap_array[1] ^ ucv_swap_array[4] ) );
// = 0x16
ucv_swap_buffer[1] = ( ucv_swap_array[9] ^ ucv_swap_array[13] ) +
( ( gucv_XR159 + gucv_XR15F ) + ( ucv_swap_array[0] ^ ucv_swap_array[5] ) );
// = 0x16
ucv_swap_buffer[2] = ( ucv_swap_array[10] ^ ucv_swap_array[15] ) +
( gucv_XR159 + ( ucv_swap_array[2] ^ ucv_swap_array[6] ) );
// = 0x16
ucv_swap_buffer[3] = ( ucv_swap_array[11] ^ ucv_swap_array[14] ) +
( gucv_XR15F + ( ucv_swap_array[3] ^ ucv_swap_array[7] ) );
Lab_46C2(ucv_swap_buffer);
output[0] = ( gucv_XR159 + gucv_EEPolynomialArray[0] );
output[1] = ( gucv_XR15F + gucv_EEPolynomialArray[1] );
for( i = 0; i < 16; i++ )
{
ucv_tmp_array[ i ] = ( gucv_WriteCardBuffer[ ( 0 + ucvTmpOffset64 + i ) ] ^ // 0x4CA
( EEPROM_Data_TableA[ ( 96 + 16 + i ) ] + EEPROM_Data_TableA[101+16]) ) +
( gucv_WriteCardBuffer[ ( 16 + ucvTmpOffset64 + i ) ] ^ // 0x4DA
( EEPROM_Data_TableA[ ( 112 + 16 + i ) ] + EEPROM_Data_TableA[118+16] ) );
}
for( i = 0; i < 9; i++ )
{
ucv_tmp_array[ i ] += gucv_WriteCardBuffer[ ( 32 + ucvTmpOffset192 + i ) ] ^ // 0x56A
( EEPROM_Data_TableA[102+16] + ( EEPROM_Data_TableA[ ( 96 + 16 + i ) ] + EEPROM_Data_TableA[103+16] ) );
}
ucv_swap_buffer[0] = ( ucv_tmp_array[3] ^ ucv_tmp_array[8] ) + ( ucv_tmp_array[6] ^ ucv_tmp_array[12] );
ucv_swap_buffer[1] = ( ucv_tmp_array[0] ^ ucv_tmp_array[9] ) + ( ucv_tmp_array[7] ^ ucv_tmp_array[13] );
ucv_swap_buffer[2] = ( ucv_tmp_array[2] ^ ucv_tmp_array[10] ) + ( ucv_tmp_array[4] ^ ucv_tmp_array[14] );
ucv_swap_buffer[3] = ( ucv_tmp_array[1] ^ ucv_tmp_array[11] ) + ( ucv_tmp_array[5] ^ ucv_tmp_array[15] );
Lab_46C2(ucv_swap_buffer);
output[2] = ( gucv_XR159 + gucv_EEPolynomialArray[2] );
output[3] = ( gucv_XR15F + gucv_EEPolynomialArray[3] );
}
// 已经验证
void Lab_6241( uint8_t byte0, uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4, uint8_t* output )
{
uint8_t i, ucvTmpOffset64, ucvTmpOffset128, ucvTmpOffset192;
uint8_t ucv_tmp_array[16];
uint8_t ucv_swap_array[16];
uint8_t ucv_swap_buffer[4];
ucvTmpOffset64 = ( ( ucvOffsetMode1 * 4 ) * 0x10 ); // 0x40
ucvTmpOffset128 = ( ( ucvOffsetMode2 * 4 ) * 0x10 ); // 0x40
ucvTmpOffset192 = ( ( ucvOffsetMode3 * 4 ) * 0x10 ); // 0x40
// ---------------------------------------------------------------------------
// XBYTE[0xB11<0x7C>] = ( [0x980<0xCC>] ^ RAM_9<88> ) + ( [0x976<0xE9>] ^ [0x4CE] ) + ( [0x97F<0x4D>] ^ [0x4D3] )
ucv_tmp_array[0] = ( ( EEPROM_Data_TableA[74+16] ^ byte0 ) +
( ( EEPROM_Data_TableA[64+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 4 ) ] ) + // 0x4CE
( EEPROM_Data_TableA[73+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 9 ) ] ) ) ); // 0x4D3
// XBYTE[0xB12<0x2D>] = ( [0x981<0x92>] ^ RAM_A ) + ( [0x977<0x04>] ^ [0x4CD] ) + ( [0x97E<0xAB>] ^ [0x4D4] )
ucv_tmp_array[1] = ( ( EEPROM_Data_TableA[75+16] ^ byte1 ) +
( ( EEPROM_Data_TableA[65+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 3 ) ] ) + // 0x4CD
( EEPROM_Data_TableA[72+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 10 ) ] ) ) ); // 0x4D4
// XBYTE[0xB13<0xF8>] = ( [0x982<0x1C>] ^ RAM_B ) + ( [0x978<0x19>] ^ [0x4CB] ) + ( [0x97B<0xC5>] ^ [0x570] )
ucv_tmp_array[2] = ( ( EEPROM_Data_TableA[76+16] ^ byte2 ) +
( ( EEPROM_Data_TableA[66+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 1 ) ] ) + // 0x4CB
( EEPROM_Data_TableA[69+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset192 + 38 ) ] ) ) ); // 0x4F0
// XBYTE[0xB14<0xA2>] = ( [0x983<0xDC>] ^ RAM_C ) + ( [0x979<0xD7>] ^ [0x4CC] ) + ( [0x97C<0x06>] ^ [0x571] )
ucv_tmp_array[3] = ( ( EEPROM_Data_TableA[77+16] ^ byte4 ) +
( ( EEPROM_Data_TableA[67+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 2 ) ] ) + // 0x4CC
( EEPROM_Data_TableA[70+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset192 + 39 ) ] ) ) ); // 0x4F1
// XBYTE[0xB15<0xDE>] = ( [0x984<0xB4>] ^ RAM_D ) + ( [0x97A<0x4D>] ^ [0x4CA] ) + ( [0x97D<0xC9>] ^ [0x572] )
ucv_tmp_array[4] = ( ( EEPROM_Data_TableA[78+16] ^ byte3 ) +
( ( EEPROM_Data_TableA[68+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 0 ) ] ) + // 0x4CA
( EEPROM_Data_TableA[71+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset192 + 40 ) ] ) ) ); // 0x4F2
// ---------------------------------------------------------------------------
ucv_tmp_array[5] = EEPROM_Data_TableA[69+16] + byte0; // <0x4D> <0xC5>
ucv_tmp_array[6] = EEPROM_Data_TableA[70+16] + byte1; // <0x16> <0x03>
ucv_tmp_array[7] = EEPROM_Data_TableA[71+16] + byte2; // <0xC9> <0xC9>
ucv_tmp_array[8] = EEPROM_Data_TableA[72+16] + byte3; // <0xAB> <0xAB>
ucv_tmp_array[9] = EEPROM_Data_TableA[73+16] + byte4; // <0x4D> <0x4D>
// ---------------------------------------------------------------------------
// XBYTE[0xB1B<0xAF>] = ( [0x980<0xCC>] ^ [0x4E3] ) + ( [0x976<0xE9>] ^ [0x4D7] ) )
ucv_tmp_array[10] = ( ( EEPROM_Data_TableA[74+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 25 ) ] ) + // 0x4E3
( EEPROM_Data_TableA[64+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 13 ) ] ) ); // 0x4D7
// XBYTE[0xB1C<0xCC>] = ( [0x981] ^ [0x4E4] ) + ( [0x977] ^ [0x4D5] ) )
ucv_tmp_array[11] = ( ( EEPROM_Data_TableA[75+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 26 ) ] ) + // 0x4E4
( EEPROM_Data_TableA[65+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 11 ) ] ) ); // 0x4D5
// XBYTE[0xB1D<0x2E>] = ( [0x982] ^ [0x4E5] ) + ( [0x978] ^ [0x4D6] ) )
ucv_tmp_array[12] = ( ( EEPROM_Data_TableA[76+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 27 ) ] ) + // 0x4E5
( EEPROM_Data_TableA[66+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 12 ) ] ) ); // 0x4D6
// XBYTE[0xB1E<0xBD>] = ( [0x983] ^ [0x4E7] ) + ( [0x979] ^ [0x4D8] ) )
ucv_tmp_array[13] = ( ( EEPROM_Data_TableA[77+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 29 ) ] ) + // 0x4E7
( EEPROM_Data_TableA[67+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 14 ) ] ) ); // 0x4D8
// XBYTE[0xB1F<0xD2>] = ( [0x984] ^ [0x4E6] ) + ( [0x97A] ^ [0x4E2] ) )
ucv_tmp_array[14] = ( ( EEPROM_Data_TableA[78+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 28 ) ] ) + // 0x4E6
( EEPROM_Data_TableA[68+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 24 ) ] ) ); // 0x4E2
// XBYTE[0xB20<0x4B>] = ( [0x985] + [0x4D2] )
ucv_tmp_array[15] = ( EEPROM_Data_TableA[79+16] + gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 8 ) ] ); // 0x4D2
// ---------------------------------------------------------------------------
// 与接收到的 5 字节卡数据计算
// <0x61>
ucv_swap_buffer[0] = ( ( ( ucv_tmp_array[3] + ucv_tmp_array[2] ) ^ gucv_CardIDArray[0] ) +
( ( ucv_tmp_array[4] ^ ucv_tmp_array[8] ) + ( ucv_tmp_array[0] ^ ucv_tmp_array[12] ) ) );
// <0x25>
ucv_swap_buffer[1] = ( ( ( ucv_tmp_array[7] + ucv_tmp_array[11] ) ^ gucv_CardIDArray[1] ) +
( ( ucv_tmp_array[5] ^ ucv_tmp_array[9] ) + ( ucv_tmp_array[1] ^ ucv_tmp_array[13] ) ) );
// <0x59>
ucv_swap_buffer[2] = ( ( ( ucv_tmp_array[0] + ucv_tmp_array[5] ) ^ gucv_CardIDArray[2] ) +
( ( ucv_tmp_array[7] ^ ucv_tmp_array[10] ) + ( ucv_tmp_array[2] ^ ucv_tmp_array[14] ) ) );
// <0x36>
ucv_swap_buffer[3] = ( ( gucv_CardIDArray[4] ^ ( ucv_tmp_array[8] + ucv_tmp_array[13] ) )+
( ( ( ucv_tmp_array[4] + ucv_tmp_array[1] ) ^ gucv_CardIDArray[3] ) +
( ( ( EEPROM_Data_TableA[79+16] + gucv_WriteCardBuffer[( ucvTmpOffset64 + 8 )] ) ^ ucv_tmp_array[3] ) + // 0x4D2
( ucv_tmp_array[6] ^ ucv_tmp_array[11] ) ) ) );
// 4 Bytes 隐藏后存入 gucv_XR159、gucv_XR15F
Lab_46C2(ucv_swap_buffer);
// ---------------------------------------------------------------------------
for( i = 0; i < 16; i++ )
{
ucv_swap_array[ i ] = ( ( EEPROM_Data_TableA[81+16] + EEPROM_Data_TableA[ ( i + 80 + 16 ) ] ) ^
gucv_WriteCardBuffer[ ( ( ucvTmpOffset64 + 0 ) + i ) ] ); // [0x4CA + i]
ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[82+16] + EEPROM_Data_TableA[ ( i + 80 + 16 ) ] ) ^
gucv_WriteCardBuffer[ ( ( ucvTmpOffset64 + 16 ) + i ) ] ); // [0x4DA + i]
ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[83+16] + EEPROM_Data_TableA[ ( i + 80 + 16 ) ] ) ^
gucv_WriteCardBuffer[ ( ( ucvTmpOffset128 + 0 ) + i ) ] ); // [0x50A + i]
ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[84+16] + EEPROM_Data_TableA[ ( i + 80 + 16 ) ] ) ^
gucv_WriteCardBuffer[ ( ( ucvTmpOffset128 + 16 ) + i ) ] ); // [0x51A + i]
ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[85+16] + EEPROM_Data_TableA[ ( i + 80 + 16 ) ] ) ^
gucv_WriteCardBuffer[ ( ( ucvTmpOffset128 + 32 ) + i ) ] ); // [0x52A + i]
}
for( i = 0; i < 12; i++ )
{
ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[86+16] + EEPROM_Data_TableA[ ( i + 80 + 16 ) ] ) ^
gucv_WriteCardBuffer[ ( ( ucvTmpOffset192 + 32 ) + i ) ] ); // [0x56A + i]
}
// ---------------------------------------------------------------------------
ucv_swap_buffer[0] = ( ( ucv_swap_array[2] ^ ( ucv_swap_array[3] + byte0 ) ) +
( ( ucv_swap_array[12] ^ ucv_swap_array[8] ) +
( ( ucv_swap_array[4] ^ ucv_swap_array[0] ) +
( gucv_XR15F ^ gucv_XR159 ) ) ) );
ucv_swap_buffer[1] = ( ( ucv_swap_array[10] ^ ( ucv_swap_array[11] + byte1) ) +
( ( ucv_swap_array[13] ^ ucv_swap_array[9] ) + ( ( ( ucv_swap_array[1] ^ ucv_swap_array[5] ) + gucv_XR159 ) + gucv_XR15F ) ) );
ucv_swap_buffer[2] = ( ( ucv_swap_array[4] ^ ( ucv_swap_array[5] + byte2 ) ) +
( ( ucv_swap_array[10] ^ ucv_swap_array[14] ) + ( ( ucv_swap_array[2] ^ ucv_swap_array[6] ) + gucv_XR159 ) ) );
ucv_swap_buffer[3] = ( ( ( ucv_swap_array[15] ^ ucv_swap_array[11] ) + ( ( ucv_swap_array[3] ^ ucv_swap_array[7] ) + gucv_XR15F) ) +
( ( ucv_swap_array[2] + byte4 ) ^ ( ucv_swap_array[12] ^ ( ucv_swap_array[13] + byte3 )) ) );
// 4 Bytes 隐藏后存入 gucv_XR159、gucv_XR15F
Lab_46C2(ucv_swap_buffer);
output[0] = (gucv_EEPolynomialArray[0] + gucv_XR159); // 8F
output[1] = (gucv_EEPolynomialArray[1] + gucv_XR15F); // BA
}
// 已经验证
void Lab_46C2( uint8_t* buffer)
{
uint8_t ucv_tmp_array[4];
uint8_t ucv_tmp_buffer[4];
ucv_tmp_array[0] = buffer[0];
ucv_tmp_array[1] = buffer[1];
ucv_tmp_array[2] = buffer[2];
ucv_tmp_array[3] = buffer[3];
ucv_tmp_buffer[0] = ( ( ucv_tmp_array[1] + ucv_tmp_array[0] ) ^ ( ucv_tmp_array[3] + ucv_tmp_array[2] ) );
ucv_tmp_buffer[1] = ( ( ucv_tmp_array[0] ^ ucv_tmp_array[2] ) + ( ucv_tmp_array[1] ^ ucv_tmp_array[3] ) );
ucv_tmp_buffer[2] = ( ( ucv_tmp_array[0] + ucv_tmp_array[2] ) ^ ( ucv_tmp_array[3] + ucv_tmp_array[1] ) );
ucv_tmp_buffer[3] = ( ( ucv_tmp_array[0] ^ ucv_tmp_array[3] ) + ( ucv_tmp_array[1] ^ ucv_tmp_array[2] ) );
// F0
gucv_XR159 = ( EEPROM_Data_TableA[( ucv_tmp_buffer[1] + 144)] + ( EEPROM_Data_TableA[ ( ucv_tmp_buffer[0] + 144 ) ] << 4 ) );
// 7A
gucv_XR15F = ( EEPROM_Data_TableA[( ucv_tmp_buffer[3] + 144)] + ( EEPROM_Data_TableA[ ( ucv_tmp_buffer[2] + 144 ) ] << 4 ) );
}
// 已经验证
void Fun_FormatModeB_Analyze( void )
{
uint8_t ucv_output[4];
uint16_t i = 0;
uint16_t j = 0;
uint16_t uivFrameLenght = 0; // 串口接收帧中数据的总个数
uint8_t ucvTmpColOffset = 0; // 列偏移
uint8_t ucvTmpRowOffset = 0; // 行偏移
uint16_t uivTmpDataIndex = 9; // 从帧中取数据的索引
uint16_t uivTmpCaseSelect = 0; // 数据段的分支选择
uint16_t uivTmpSegLenght = 0; // 当前数据段需要取出数据的个数
uint8_t ucvTmpOffset64 = (ucvOffsetMode1 * 4) * 0x10; // 缓存取出数据的偏移
uint8_t ucvTmpOffset128 = (ucvOffsetMode2 * 4) * 0x10;
uint8_t ucvTmpOffset192 = (ucvOffsetMode3 * 4) * 0x10;
// 可能是卡ID的Key [0x4D5]、[0x4D6]、[0x4D7]、[0x4D8]
gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 0 ] = gucvDeviceIDArray[0]; // [XRB0C]*10+[XRB0D]:76 0x4C
gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 1 ] = gucvDeviceIDArray[1]; // [XRB0E]*10+[XRB0F]:13 0x0D
gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 2 ] = gucvDeviceIDArray[2]; // [XRB10]*10+[XRB11]:61 0x3D
gucv_WriteCardBuffer[ ucvTmpOffset64 + 0xB + 3 ] = gucvDeviceIDArray[3]; // [XRB12]*10+[XRB13]:53 0x35
// 获取串口接收帧中数据的总个数
uivFrameLenght = (uint16_t)((ucvUartDataBuffer[4] << 8) | ucvUartDataBuffer[3]);
//XBYTE[((ucvOffsetMode1 * 4) + 0x8AF)] = 1; // [0x08B3] = 1
uivTmpDataIndex += 16;
while( uivTmpDataIndex < (uivFrameLenght - 5) )
{
// Lab_2F7C()
uivTmpCaseSelect = (uint16_t)((ucvUartDataBuffer[uivTmpDataIndex] << 8 ) | (ucvUartDataBuffer[uivTmpDataIndex + 1]));
uivTmpSegLenght = (uint16_t)((ucvUartDataBuffer[uivTmpDataIndex+3] << 8 ) | (ucvUartDataBuffer[ uivTmpDataIndex+2]));
uivTmpDataIndex += 4;
if( uivTmpCaseSelect < 256 )
{
switch( uivTmpCaseSelect )
{
case 3:
// Lab_40D7
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 ); // Row Index:4
ucvTmpColOffset = 0; // Col Index:0
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_416C_Next
// Lab_42B3_Next
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B3] = 1
break;
case 4:
// Lab_40E6
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 ); // Row Index:4
ucvTmpColOffset = 2; // Col Index:2
// [0x4CC:0x4CE]:EEPROM_Page1[0x42:0x44]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_416C_Next
// Lab_42B3_Next
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B3] = 1
break;
case 6:
// Lab_40FB
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 ); // Row Index:4
ucvTmpColOffset = 15; // Col Index:15
// [0x4D9]:EEPROM_Page1[0x4F]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_416C_Next
// Lab_42B3_Next
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B3] = 1
break;
case 9:
// Lab_4112
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 ) + 2; // Row Index:6
ucvTmpColOffset = 3; // Col Index:3
// Lab_411F
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
gucv_WriteCardBuffer[ ( ucvTmpOffset192 + 2 + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_42B3_Next
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B5] = 1
break;
case 0xA:
// Lab_4157
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 ); // Row Index:4
ucvTmpColOffset = 7; // Col Index:7
// [0x4D1]:EEPROM_Page1[0x47]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_42B3_Next
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B3] = 1
break;
case 0xB:
// Lab_4172
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 )+1; // Row Index:5
ucvTmpColOffset = 0; // Col Index:0
// [0x4DA:0x4DF]:EEPROM_Page1[0x50:0x55]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_42B3_Next
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B4] = 1
break;
case 0xC:
// Lab_4189
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 )+1; // Row Index:5
ucvTmpColOffset = 8; // Col Index:8
// [0x4E2:0x4E8]:EEPROM_Page1[0x58:0x5E]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_42B3_Next
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B4] = 1
break;
case 0xD:
// Lab_41A5
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 )+1; // Row Index:5
ucvTmpColOffset = 6; // Col Index:6
// [0x4E0:0x4E1]:EEPROM_Page1[0x56:0x57]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_42B3_Next
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B4] = 1
break;
case 0xE:
// Lab_41C1
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 )+1; // Row Index:5
ucvTmpColOffset = 14; // Col Index:14
// [0x4E8:0x4E9]:EEPROM_Page1[0x5E:0x5F]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_42B3_Next
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B4] = 1
break;
case 0xF:
// Lab_41DD
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 ); // Row Index:4
ucvTmpColOffset = 8; // Col Index:8
// [0x4D2]:EEPROM_Page1[0x48]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_42B3_Next
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B3] = 1
break;
case 0x10:
// Lab_41F8
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 ); // Row Index:4
ucvTmpColOffset = 9; // Col Index:9
// [0x4D3]:EEPROM_Page1[0x49]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_42B3_Next
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B3] = 1
break;
case 0x11:
// Lab_4213
ucvTmpRowOffset = ( ucvOffsetMode1 * 4 ); // Row Index:4
ucvTmpColOffset = 10; // Col Index:10
// [0x4D4]:EEPROM_Page1[0x4A]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_42B3_Next
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B3] = 1
break;
case 0x12:
// Lab_422E
ucvTmpRowOffset = ( ucvOffsetMode2 * 4 ); // Row Index:8
ucvTmpColOffset = 0; // Col Index:0
// [0x50A:0x511]:EEPROM_Page2[0x80:0x87]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_42B3_Next
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B7] = 1
break;
case 0x13:
// Lab_4244
ucvTmpRowOffset = ( ucvOffsetMode2 * 4 )+1; // Row Index:9
ucvTmpColOffset = 0; // Col Index:0
// [0x51A:0x521]:EEPROM_Page2[0x90:0x97]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_42B3_Next
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B8] = 1
break;
case 0x14:
// Lab_425D
ucvTmpRowOffset = ( ucvOffsetMode2 * 4 )+2; // Row Index:10
ucvTmpColOffset = 0; // Col Index:0
// [0x52A:0x531]:EEPROM_Page2[0xA0:0xA7]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_42B3_Next
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B9] = 1
break;
case 0x16:
// Lab_4277
ucvTmpRowOffset = ( ucvOffsetMode3 * 4 )+1; // Row Index:13
ucvTmpColOffset = 0; // Col Index:0
// [0x55A:0x569]:EEPROM_Page3[0xD0:0xDF]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_22D7();
ucvTmpColOffset = 0;
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 0 ) ] = 0; // [0x55A] = 0
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 1 ) ] = 0; // [0x55B] = 0
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 2 ) ] = 0; // [0x55C] = 0
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 3 ) ] = 0; // [0x55D] = 0
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 4 ) ] = 1; // [0x55E] = 1
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 5 ) ] = 2; // [0x55F] = 2
// [0x560] = 2
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 6 ) ] = Lab_5623( gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 0 ) ],
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 1 ) ],
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 2 ) ],
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 3 ) ],
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 4 ) ],
gucv_WriteCardBuffer[ ( (ucvTmpRowOffset * 0x10) + 5 ) ] );
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8BC] = 1
break;
case 0x79:
// Lab_4298
ucvTmpRowOffset = ( ucvOffsetMode3 * 4 )+2; // Row Index:14
ucvTmpColOffset = 6; // Col Index:6
// [0x570]:EEPROM_Page3[0xE6]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8BD] = 1
break;
case 0x7A:
// Lab_42B7
ucvTmpRowOffset = ( ucvOffsetMode3 * 4 )+2; // Row Index:14
ucvTmpColOffset = 7; // Col Index:7
// [0x571]:EEPROM_Page3[0xE7]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8BD] = 1
break;
case 0x7B:
// Lab_42D6
ucvTmpRowOffset = ( ucvOffsetMode3 * 4 )+2; // Row Index:14
ucvTmpColOffset = 8; // Col Index:8
// [0x572]:EEPROM_Page3[0xE8]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8BD] = 1
break;
case 0x7C:
// Lab_42F5
ucvTmpRowOffset = ( ucvOffsetMode2 * 4 ); // Row Index:8
ucvTmpColOffset = 8; // Col Index:8
// [0x512:0x519]:EEPROM_Page2[0x88:0x8F]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B7] = 1
break;
case 0x7D:
// Lab_430F
ucvTmpRowOffset = ( ucvOffsetMode2 * 4 )+1; // Row Index:9
ucvTmpColOffset = 8; // Col Index:8
// [0x522:0x519]:EEPROM_Page2[0x98:0x9F]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B8] = 1
break;
case 0x7E:
// Lab_432F
ucvTmpRowOffset = ( ucvOffsetMode2 * 4 )+2; // Row Index:10
ucvTmpColOffset = 8; // Col Index:8
// [0x532:0x539]:EEPROM_Page2[0xA8:0xAF]
for( i = 0; i < uivTmpSegLenght; i++ )
{
// Lab_26CC();
gucv_WriteCardBuffer[ ( ( ucvTmpRowOffset * 0x10 ) + ucvTmpColOffset ) ] = ucvUartDataBuffer[ uivTmpDataIndex ];
ucvTmpColOffset++;
uivTmpDataIndex++;
}
// Lab_434E_Next
ucvFlagesBuffer[ ucvTmpRowOffset ] = 1; // [0x8B9] = 1
break;
default:
// Lab_4081
break;
}
// Lab_4081
}
}
// Lab_4353
Lab_437B( gucv_WriteCardBuffer[ (ucvTmpOffset64 + 32) ], // [0x4EA]:
gucv_WriteCardBuffer[ (ucvTmpOffset64 + 33) ], // [0x4EB]:
gucv_WriteCardBuffer[ (ucvTmpOffset64 + 34) ], // [0x4EC]:
gucv_WriteCardBuffer[ (ucvTmpOffset64 + 35) ], // [0x4ED]:
gucv_WriteCardBuffer[ (ucvTmpOffset64 + 36) ], ucv_output); // [0x4EE]:
// Lab_1CCA
gucv_WriteCardBuffer[ ucvTmpOffset64 + 37 ] = ucv_output[0]; // 0x4EF
gucv_WriteCardBuffer[ ucvTmpOffset64 + 38 ] = ucv_output[1]; // 0x4F0
printf("扇区3地址[0x4EF/0x4F0]的数据:0x%X, 0x%X; \r\n", ucv_output[0], ucv_output[1]);
gucv_WriteCardBuffer[ ucvTmpOffset192 + 0 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 32 ]; // [0x54A] = [0x4EA] = 88
gucv_WriteCardBuffer[ ucvTmpOffset192 + 1 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 33 ]; // [0x54B] = [0x4EB] = 13
gucv_WriteCardBuffer[ ucvTmpOffset192 + 2 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 34 ]; // [0x54C] = [0x4EC] = 00
gucv_WriteCardBuffer[ ucvTmpOffset192 + 3 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 35 ]; // [0x54D] = [0x4ED] = 00
gucv_WriteCardBuffer[ ucvTmpOffset192 + 4 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 36 ]; // [0x54E] = [0x4EE] = 00
gucv_WriteCardBuffer[ ucvTmpOffset192 + 5 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 37 ]; // [0x54F] = [0x4EF] = 00
gucv_WriteCardBuffer[ ucvTmpOffset192 + 6 ] = gucv_WriteCardBuffer[ ucvTmpOffset64 + 38 ]; // [0x550] = [0x4F0] = 00
Lab_49CA(ucv_output);
gucv_WriteCardBuffer[ (ucvTmpOffset192 + 46) ] = ucv_output[0]; // [0x578] = 0x46
gucv_WriteCardBuffer[ (ucvTmpOffset192 + 47) ] = ucv_output[1]; // [0x579] = 0x2D
gucv_WriteCardBuffer[ (ucvTmpOffset192 + 44) ] = ucv_output[2]; // [0x576] = 0x46
gucv_WriteCardBuffer[ (ucvTmpOffset192 + 45) ] = ucv_output[3]; // [0x577] = 0x80
printf("扇区3地址[0x576/0x577/0x578/0x579]的数据:0x%X, 0x%X, 0x%X, 0x%X; \r\n", ucv_output[2], ucv_output[3], ucv_output[0], ucv_output[1]);
}
// 已经验证
void Lab_49CA( uint8_t* output )
{
uint8_t i;
uint8_t ucvTmpOffset64 = (ucvOffsetMode1 * 4) * 0x10;
uint8_t ucvTmpOffset128 = (ucvOffsetMode2 * 4) * 0x10;
uint8_t ucvTmpOffset192 = (ucvOffsetMode3 * 4) * 0x10;
uint8_t ucv_tmp_array[16];
uint8_t ucv_swap_array[16];
uint8_t ucv_swap_buffer[4];
ucv_tmp_array[0] = ( ( EEPROM_Data_TableA[0+16] ^ gucv_WriteCardBuffer[ 4 + ucvTmpOffset64 ] ) +
( EEPROM_Data_TableA[6+16] ^ gucv_WriteCardBuffer[ 39 + ucvTmpOffset192 ] ) );
ucv_tmp_array[1] = ( ( EEPROM_Data_TableA[1+16] ^ gucv_WriteCardBuffer[ 3 + ucvTmpOffset64 ] ) +
( EEPROM_Data_TableA[7+16] ^ gucv_WriteCardBuffer[ 38 + ucvTmpOffset192 ] ) );
ucv_tmp_array[2] = ( ( EEPROM_Data_TableA[2+16] ^ gucv_WriteCardBuffer[ 2 + ucvTmpOffset64 ] ) +
( EEPROM_Data_TableA[8+16] ^ gucv_WriteCardBuffer[ 8 + ucvTmpOffset192 ] ) );
ucv_tmp_array[3] = ( ( EEPROM_Data_TableA[3+16] ^ gucv_WriteCardBuffer[ 0 + ucvTmpOffset64 ] ) +
( EEPROM_Data_TableA[9+16] ^ gucv_WriteCardBuffer[ 40 + ucvTmpOffset192 ] ) );
ucv_tmp_array[4] = ( ( EEPROM_Data_TableA[4+16] ^ gucv_WriteCardBuffer[ 1 + ucvTmpOffset64 ] ) +
( EEPROM_Data_TableA[10+16] ^ gucv_WriteCardBuffer[ 9 + ucvTmpOffset192 ] ) );
ucv_tmp_array[5] = ( EEPROM_Data_TableA[5+16] + gucv_WriteCardBuffer[ ( 10 + ucvTmpOffset64 ) ] );
ucv_tmp_array[6] = ( EEPROM_Data_TableA[6+16] + gucv_WriteCardBuffer[ ( 12 + ucvTmpOffset64 ) ] );
ucv_tmp_array[7] = ( EEPROM_Data_TableA[7+16] + gucv_WriteCardBuffer[ ( 11 + ucvTmpOffset64 ) ] );
ucv_tmp_array[8] = ( EEPROM_Data_TableA[8+16] + gucv_WriteCardBuffer[ ( 13 + ucvTmpOffset64 ) ] );
ucv_tmp_array[9] = ( EEPROM_Data_TableA[9+16] + gucv_WriteCardBuffer[ ( 14 + ucvTmpOffset64 ) ] );
ucv_tmp_array[10] = ( EEPROM_Data_TableA[10+16] + gucv_WriteCardBuffer[ ( 25 + ucvTmpOffset64 ) ] );
ucv_tmp_array[11] = ( EEPROM_Data_TableA[11+16] + gucv_WriteCardBuffer[ ( 26 + ucvTmpOffset64 ) ] );
ucv_tmp_array[12] = ( EEPROM_Data_TableA[12+16] + gucv_WriteCardBuffer[ ( 27 + ucvTmpOffset64 ) ] );
ucv_tmp_array[13] = ( EEPROM_Data_TableA[13+16] + gucv_WriteCardBuffer[ ( 29 + ucvTmpOffset64 ) ] );
ucv_tmp_array[14] = ( EEPROM_Data_TableA[14+16] + gucv_WriteCardBuffer[ ( 24 + ucvTmpOffset64 ) ] );
ucv_tmp_array[15] = ( EEPROM_Data_TableA[15+16] + gucv_WriteCardBuffer[ ( 28 + ucvTmpOffset64 ) ] );
ucv_swap_buffer[0] = ( gucv_CardIDArray[4] ^ ( ucv_tmp_array[1] + ucv_tmp_array[15] ) ) +
( ( ucv_tmp_array[0] ^ ucv_tmp_array[12] ) + ( ucv_tmp_array[7] ^ ucv_tmp_array[8] ) );
ucv_swap_buffer[1] = ( gucv_CardIDArray[2] ^ ( ucv_tmp_array[2] + ucv_tmp_array[5] ) ) +
( ( ucv_tmp_array[3] ^ ucv_tmp_array[13] ) + ( ucv_tmp_array[6] ^ ucv_tmp_array[9] ) );
ucv_swap_buffer[2] = ( gucv_CardIDArray[3] ^ ( ucv_tmp_array[0] + ucv_tmp_array[3] ) ) +
( ( ucv_tmp_array[1] ^ ucv_tmp_array[14] ) + ( ucv_tmp_array[5] ^ ucv_tmp_array[10] ) );
ucv_swap_buffer[3] = ( gucv_CardIDArray[0] ^ ( ucv_tmp_array[8] + ucv_tmp_array[13] ) ) +
( gucv_CardIDArray[1] ^ ( ucv_tmp_array[6] + ucv_tmp_array[7] ) ) +
( ( ucv_tmp_array[2] ^ ucv_tmp_array[15] ) + ( ucv_tmp_array[4] ^ ucv_tmp_array[11] ) );
Lab_46C2(ucv_swap_buffer);
for( i = 0; i < 16; i++ )
{
ucv_swap_array[i] = ( ( EEPROM_Data_TableA[23+16] + EEPROM_Data_TableA[ (16+16 + i) ] ) ^
( gucv_WriteCardBuffer[ ( 0 + ucvTmpOffset64 ) + i ] ) ); // 0x4CA
ucv_swap_array[i] += ( ( EEPROM_Data_TableA[24+16] + EEPROM_Data_TableA[ (16+16 + i) ] ) ^
( gucv_WriteCardBuffer[ ( 16 + ucvTmpOffset64 ) + i ] ) ); // 0x4DA
ucv_swap_array[i] += ( ( EEPROM_Data_TableA[25+16] + EEPROM_Data_TableA[ (16+16 + i) ] ) ^
( gucv_WriteCardBuffer[ ( 0 + ucvTmpOffset128 ) + i ] ) ); // 0x50A
ucv_swap_array[i] += ( ( EEPROM_Data_TableA[26+16] + EEPROM_Data_TableA[ (16+16 + i) ] ) ^
( gucv_WriteCardBuffer[ ( 16 + ucvTmpOffset128 ) + i ] ) ); // 0x51A
ucv_swap_array[i] += ( ( EEPROM_Data_TableA[27+16] + EEPROM_Data_TableA[ (16+16 + i) ] ) ^
( gucv_WriteCardBuffer[ ( 32 + ucvTmpOffset128 ) + i ] ) ); // 0x52A
}
for( i = 0; i < 12; i++ )
{
ucv_swap_array[i] += ( ( EEPROM_Data_TableA[28+16] + EEPROM_Data_TableA[ (16+16 + i) ] ) ^
( gucv_WriteCardBuffer[ ( 32 + ucvTmpOffset192 ) + i ] ) ); // 0x56A
}
// Lab_4BA1
ucv_swap_buffer[0] = ( ucv_swap_array[8] ^ ucv_swap_array[13] ) +
( ( gucv_XR159 ^ gucv_XR15F ) + ( ucv_swap_array[7] ^ ucv_swap_array[0] ) );
ucv_swap_buffer[1] = ( ucv_swap_array[9] ^ ucv_swap_array[14] ) +
( ( gucv_XR159 + gucv_XR15F ) + ( ucv_swap_array[2] ^ ucv_swap_array[5] ) );
ucv_swap_buffer[2] = ( ucv_swap_array[11] ^ ucv_swap_array[12] ) +
( gucv_XR159 + ( ucv_swap_array[3] ^ ucv_swap_array[6] ) );
ucv_swap_buffer[3] = ( ucv_swap_array[10] ^ ucv_swap_array[15] ) +
( gucv_XR15F + ( ucv_swap_array[1] ^ ucv_swap_array[4] ) );
Lab_46C2(ucv_swap_buffer);
output[0] = ( gucv_XR159 + gucv_EEPolynomialArray[0] );
output[1] = ( gucv_XR15F + gucv_EEPolynomialArray[1] );
for( i = 0; i < 16; i++ )
{
ucv_tmp_array[i] = ( gucv_WriteCardBuffer[ ( 0 + ucvTmpOffset64 + i ) ] ^ // 0x4CA
( EEPROM_Data_TableA[ ( 112+16 + i ) ] + EEPROM_Data_TableA[113+16]) ) +
( gucv_WriteCardBuffer[ ( 16 + ucvTmpOffset64 + i ) ] ^ // 0x4DA
( EEPROM_Data_TableA[ ( 96+16 + i ) ] + EEPROM_Data_TableA[97+16] ) );
}
for( i = 0; i < 9; i++ )
{
ucv_tmp_array[i] += gucv_WriteCardBuffer[ ( 32 + ucvTmpOffset192 + i ) ] ^ // 0x56A
( EEPROM_Data_TableA[115+16] + ( EEPROM_Data_TableA[ ( 112+16 + i ) ] + EEPROM_Data_TableA[116+16] ) );
}
ucv_swap_buffer[0] = ( ucv_tmp_array[0] ^ ucv_tmp_array[8] ) + ( ucv_tmp_array[6] ^ ucv_tmp_array[15] );
ucv_swap_buffer[1] = ( ucv_tmp_array[3] ^ ucv_tmp_array[9] ) + ( ucv_tmp_array[4] ^ ucv_tmp_array[13] );
ucv_swap_buffer[2] = ( ucv_tmp_array[2] ^ ucv_tmp_array[11] ) + ( ucv_tmp_array[7] ^ ucv_tmp_array[14] );
ucv_swap_buffer[3] = ( ucv_tmp_array[1] ^ ucv_tmp_array[10] ) + ( ucv_tmp_array[5] ^ ucv_tmp_array[12] );
Lab_46C2(ucv_swap_buffer);
output[2] = ( gucv_XR159 + gucv_EEPolynomialArray[2] );
output[3] = ( gucv_XR15F + gucv_EEPolynomialArray[3] );
}
// 已经验证
void Lab_437B( uint8_t byte0, uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4, uint8_t* output)
{
uint8_t i, ucvTmpOffset64, ucvTmpOffset128, ucvTmpOffset192;
uint8_t ucv_tmp_array[16];
uint8_t ucv_swap_array[16];
uint8_t ucv_swap_buffer[4];
ucvTmpOffset64 = ( ( ucvOffsetMode1 * 4 ) * 0x10 ); // 0x40
ucvTmpOffset128 = ( ( ucvOffsetMode2 * 4 ) * 0x10 ); // 0x40
ucvTmpOffset192 = ( ( ucvOffsetMode3 * 4 ) * 0x10 ); // 0x40
// ---------------------------------------------------------------------------
ucv_tmp_array[0] = ( ( EEPROM_Data_TableA[75+16] ^ byte0 ) +
( ( EEPROM_Data_TableA[68+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 4 ) ] ) + // 0x4CE
( EEPROM_Data_TableA[70+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 8 ) ] ) ) ); // 0x4D3
ucv_tmp_array[1] = ( ( EEPROM_Data_TableA[76+16] ^ byte1 ) +
( ( EEPROM_Data_TableA[67+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 3 ) ] ) + // 0x4CD
( EEPROM_Data_TableA[69+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 10 ) ] ) ) ); // 0x4D4
ucv_tmp_array[2] = ( ( EEPROM_Data_TableA[77+16] ^ byte2 ) +
( ( EEPROM_Data_TableA[65+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 1 ) ] ) + // 0x4CB
( EEPROM_Data_TableA[71+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 40 ) ] ) ) ); // 0x4F2
ucv_tmp_array[3] = ( ( EEPROM_Data_TableA[78+16] ^ byte4 ) +
( ( EEPROM_Data_TableA[64+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 2 ) ] ) + // 0x4CC
( EEPROM_Data_TableA[73+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 38 ) ] ) ) ); // 0x4F0
ucv_tmp_array[4] = ( ( EEPROM_Data_TableA[79+16] ^ byte3 ) +
( ( EEPROM_Data_TableA[66+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 0 ) ] ) + // 0x4CA
( EEPROM_Data_TableA[72+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 39 ) ] ) ) ); // 0x4F1
// ---------------------------------------------------------------------------
ucv_tmp_array[5] = EEPROM_Data_TableA[69+16] + byte4;
ucv_tmp_array[6] = EEPROM_Data_TableA[70+16] + byte3;
ucv_tmp_array[7] = EEPROM_Data_TableA[71+16] + byte2;
ucv_tmp_array[8] = EEPROM_Data_TableA[72+16] + byte1;
ucv_tmp_array[9] = EEPROM_Data_TableA[73+16] + byte0;
// ---------------------------------------------------------------------------
ucv_tmp_array[10] = ( ( EEPROM_Data_TableA[77+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 26 ) ] ) + // 0x4E4
( EEPROM_Data_TableA[67+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 13 ) ] ) ); // 0x4D7
ucv_tmp_array[11] = ( ( EEPROM_Data_TableA[76+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 25) ] ) + // 0x4E3
( EEPROM_Data_TableA[66+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 11) ] ) ); // 0x4D5
ucv_tmp_array[12] = ( ( EEPROM_Data_TableA[75+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 29) ] ) + // 0x4E7
( EEPROM_Data_TableA[68+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 12) ] ) ); // 0x4D6
ucv_tmp_array[13] = ( ( EEPROM_Data_TableA[74+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 27) ] ) + // 0x4E5
( EEPROM_Data_TableA[65+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 14) ] ) ); // 0x4D8
ucv_tmp_array[14] = ( ( EEPROM_Data_TableA[79+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 28) ] ) + // 0x4E6
( EEPROM_Data_TableA[64+16] ^ gucv_WriteCardBuffer[ ( ucvTmpOffset64 + 24) ] ) ); // 0x4E2
ucv_tmp_array[15] = ( EEPROM_Data_TableA[78+16] + gucv_WriteCardBuffer[ ucvTmpOffset64 + 9] ); // 0x4D2
// ---------------------------------------------------------------------------
ucv_swap_buffer[0] = ( ( ( ucv_tmp_array[1] + ucv_tmp_array[2] ) ^ gucv_CardIDArray[2] ) +
( ( ucv_tmp_array[4] ^ ucv_tmp_array[11] ) + ( ucv_tmp_array[0] ^ ucv_tmp_array[12] ) ) );
ucv_swap_buffer[1] = ( ( ( ucv_tmp_array[6] + ucv_tmp_array[7] ) ^ gucv_CardIDArray[0] ) +
( ( ucv_tmp_array[3] ^ ucv_tmp_array[13] ) + ( ucv_tmp_array[5] ^ ucv_tmp_array[9] ) ) );
ucv_swap_buffer[2] = ( ( ( ucv_tmp_array[0] + ucv_tmp_array[5] ) ^ gucv_CardIDArray[4] ) +
( ( ucv_tmp_array[1] ^ ucv_tmp_array[14] ) + ( ucv_tmp_array[7] ^ ucv_tmp_array[8]) ) );
ucv_swap_buffer[3] = ( ( ( ucv_tmp_array[9] + ucv_tmp_array[12] ) ^ gucv_CardIDArray[3] ) +
( ( ( ucv_tmp_array[3] + ucv_tmp_array[4] ) ^ gucv_CardIDArray[1] ) +
( ucv_tmp_array[2] ^ ( EEPROM_Data_TableA[78+16] + gucv_WriteCardBuffer[ (ucvTmpOffset64 + 9) ] ) ) + // 0x4D3
( ucv_tmp_array[6] ^ ucv_tmp_array[10] ) ) );
Lab_46C2(ucv_swap_buffer);
// ---------------------------------------------------------------------------
for( i = 0; i < 16; i++ )
{
ucv_swap_array[ i ] = ( ( EEPROM_Data_TableA[ (i + 80+16) ] + EEPROM_Data_TableA[90+16] ) ^
gucv_WriteCardBuffer[ ( ( ucvTmpOffset64 + 16 ) + i ) ] ); // [0x4DA + i]
ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[ ( i + 80+16 ) ] + EEPROM_Data_TableA[91+16] ) ^
gucv_WriteCardBuffer[ ( ( ucvTmpOffset64 + 0 ) + i ) ] ); // [0x4CA + i]
ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[ ( i + 80+16 ) ] + EEPROM_Data_TableA[92+16] ) ^
gucv_WriteCardBuffer[ ( ( ucvTmpOffset128 + 16 ) + i ) ] ); // [0x51A + i]
ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[ ( i + 80+16 ) ] + EEPROM_Data_TableA[93+16] ) ^
gucv_WriteCardBuffer[ ( ( ucvTmpOffset128 + 32 ) + i ) ] ); // [0x52A + i]
ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[ ( i + 80+16 ) ] + EEPROM_Data_TableA[94+16] ) ^
gucv_WriteCardBuffer[ ( ( ucvTmpOffset128 + 0 ) + i ) ] ); // [0x50A + i]
}
for( i = 0; i < 12; i++ )
{
ucv_swap_array[ i ] += ( ( EEPROM_Data_TableA[ ( i + 80+16 ) ] + EEPROM_Data_TableA[95+16] ) ^
gucv_WriteCardBuffer[ ( ( ucvTmpOffset192 + 32 ) + i ) ] ); // [0x56A + i]
}
// ---------------------------------------------------------------------------
ucv_swap_buffer[0] = ( ( ucv_swap_array[4] ^ ( ucv_swap_array[2] + byte0 ) ) +
( ( ( ucv_swap_array[14] ^ ucv_swap_array[8] ) +
( ( ucv_swap_array[5] ^ ucv_swap_array[0] ) +
( gucv_XR15F ^ gucv_XR159 ) ) ) ) );
ucv_swap_buffer[1] = ( ( ucv_swap_array[12] ^ ( ucv_swap_array[7] ^ byte1 ) ) +
( ( ( ucv_swap_array[9] ^ ucv_swap_array[15] ) +
( ( ( ucv_swap_array[1] ^ ucv_swap_array[4] ) + gucv_XR159 ) + gucv_XR15F ) ) ) );
ucv_swap_buffer[2] = ( ( ucv_swap_array[4] ^ ( ucv_swap_array[8] + byte2 ) ) +
( ( ucv_swap_array[10] ^ ucv_swap_array[12] ) + ( gucv_XR159 + ( ucv_swap_array[3] ^ ucv_swap_array[6] ) ) ) );
ucv_swap_buffer[3] = ( ( ( ucv_swap_array[5] ^ ( ucv_swap_array[9] + byte4) ) ^
( ucv_swap_array[1] + byte3 ) ) +
( ( ucv_swap_array[13] ^ ucv_swap_array[11] ) + ( ( ucv_swap_array[2] ^ ucv_swap_array[7] ) + gucv_XR15F ) ) );
Lab_46C2(ucv_swap_buffer);
// ---------------------------------------------------------------------------
output[0] = ( gucv_EEPolynomialArray[0] + gucv_XR159 );
output[1] = ( gucv_EEPolynomialArray[1] + gucv_XR15F );
}
int main () {
uint16_t i;
ucvOffsetMode1 = 1; // [0xAF8]
ucvOffsetMode2 = 2; // [0xAF9]
ucvOffsetMode3 = 3; // [0xAFB]
for(i = 0; i < 256; i++)
{
ucvUartDataBuffer[i] = Uart_Cmd_Table[i];
}
// 刷卡器编号
Fun_DeviceID_Produced();
// 当前ID卡号
gucv_CardIDArray[0] = 0xE6;
gucv_CardIDArray[1] = 0x0E;
gucv_CardIDArray[2] = 0xD6;
gucv_CardIDArray[3] = 0x86;
gucv_CardIDArray[4] = 0xB8;
// 多项式
gucv_EEPolynomialArray[0] = EEPROM_Data_TableA[400]; // 0x15A
gucv_EEPolynomialArray[1] = EEPROM_Data_TableA[401]; // 0x15B
gucv_EEPolynomialArray[2] = EEPROM_Data_TableA[402]; // 0x15C
gucv_EEPolynomialArray[3] = EEPROM_Data_TableA[403]; // 0x15D
// 异或校验、和校验
gucv_EEXorArray[0] = EEPROM_Data_TableA[404]; // 0x14B
gucv_EEXorArray[1] = EEPROM_Data_TableA[406]; // 0x14C
gucv_EESumArray[0] = EEPROM_Data_TableA[405]; // 0xAFC
gucv_EESumArray[1] = EEPROM_Data_TableA[407]; // 0xAFD
Fun_SelectMode_Analyze();
//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
return 0;
}