📄 14443source.c
字号:
send_len = 5; // send data is 3 bytes do { event = WriteCom(Fd, send_bff, send_len); // tx command frame } while (event != send_len); recv_len = 19; // receive data is 19 or 7 bytes event = ReadCom(Fd, recv_bff, recv_len, Baudrate, 200); if (recv_len == event) { // receive completed for (i = 0; i < 2; i++) { if (recv_bff[i] != chk_code[i]) break; } if (2 == i) { count = recv_bff[2]; // get length of received data if (16 != count) return 3; memcpy(p_BlkData, &recv_bff[3], count); return 0; // success } else return 3; // ack failed } else if (7 == event) { for(i = 0; i < 7; i++) { if (chk_code[i] != recv_bff[i]) break; } if (7 == i) return 4; // receive failed else return 3; // ack failed } else if (-1 == event) { // timeout return 2; } else if (-2 == event) { // function:select error! return 5; } else { return 6; // receive incompleted }}/******************************************************************************** READ UID * * Description: read card's UID* * Arguments int MacNum machine number* char* p_UID pointer of area stored UID* int Fd handler of device* int Baudrate baudrate value* * Return : int* 0 success* 1 parameter error* 2 timeout* 3 acknowledge failed* 4 read UID failed* 5 function:select error* 6 receive incompleted** Note : timeout value is 200ms ********************************************************************************/int ReadUID(int MacNum, char* p_UID, int Fd, int Baudrate){ int i; int count; int event; int send_len; int recv_len; char chk_code[7] = {DLE, (MacNum & 0xFF), 0x04, 'F', 'a', 'i', 'l'}; char send_bff[4]; char recv_bff[9]; if (MacNum > 255 || MacNum < 0 || NULL == p_UID) return 1; // parameter error send_bff[0] = DLE; send_bff[1] = (MacNum & 0xFF); // machine number send_bff[2] = 'U'; // command byte send_len = 3; // send data is 3 bytes do { event = WriteCom(Fd, send_bff, send_len); // tx command frame } while (event != send_len); recv_len = 8; // receive data is 8 or 7 bytes event = ReadCom(Fd, recv_bff, recv_len, Baudrate, 200); if (recv_len == event) { // receive completed for (i = 0; i < 2; i++) { if (recv_bff[i] != chk_code[i]) break; } if (2 == i) { count = recv_bff[2]; // get length of received data if (5 != count) return 3; // incorrect length memcpy(p_UID, &recv_bff[3], count); return 0; // success } else return 3; // ack failed } else if (7 == event) { for(i = 0; i < 7; i++) { if (chk_code[i] != recv_bff[i]) break; } if (7 == i) return 4; // receive failed else return 3; // ack failed } else if (-1 == event) { // timeout return 2; } else if (-2 == event) { // function:select error! return 5; } else { return 6; // receive incompleted }}/******************************************************************************** WRITE A BLOCK * * Description: write a block of card** Arguments int MacNum machine number* int KeyAddr key address* int BlkNum block number* char* p_BlkData pointer of area stored block data* int Fd handler of device* int Baudrate baudrate value* * Return : int* 0 success* 1 parameter error* 2 timeout* 3 acknowledge failed* 4 write block failed* 5 function:select error* 6 receive incompleted** Note : timeout value is 200ms ********************************************************************************/int WriteBlk(int MacNum, int KeyAddr, int BlkNum, char* p_BlkData, int Fd, int Baudrate){ int i; int event; int send_len; int recv_len; char chk_done[7] = {DLE, (MacNum & 0xFF), 0x04, 'D', 'o', 'n', 'e'}; char chk_fail[7] = {DLE, (MacNum & 0xFF), 0x04, 'F', 'a', 'i', 'l'}; char send_bff[21]; char recv_bff[7]; if ( MacNum > 255 || MacNum < 0 || (KeyAddr & 0x7F) > 23 || KeyAddr < 0 || BlkNum > (64 * 4 - 1) || BlkNum < 0 || NULL == p_BlkData) return 1; // parameter error send_bff[0] = DLE; send_bff[1] = (MacNum & 0xFF); // machine number send_bff[2] = 'W'; // command byte send_bff[3] = (KeyAddr & 0x7F); // key address send_bff[4] = (BlkNum & 0xFF); // block number memcpy(&send_bff[5], p_BlkData, 16); send_len = 21; // send data is 21 bytes do { event = WriteCom(Fd, send_bff, send_len); // tx command frame } while (event != send_len); recv_len = 7; // receive data is 7 bytes event = ReadCom(Fd, recv_bff, recv_len, Baudrate, 200); if (recv_len == event) { // receive completed for (i = 0; i < 7; i++) { if (recv_bff[i] != chk_done[i]) break; } if (7 == i) return 0; // success for(i = 0; i < 7; i++) { if (chk_fail[i] != recv_bff[i]) break; } if (7 == i) return 4; // receive failed else return 3; // ack failed } else if (-1 == event) { // timeout return 2; } else if (-2 == event) { // function:select error! return 5; } else { return 6; // receive incompleted }}/******************************************************************************** STOP A CARD * * Description: stop a card ** Arguments int MacNum machine number* int Fd hadler of device* int Baudrate bautrate value ** Return : int* 0 success* 1 parameter error* 2 timeout* 3 acknowledge failed* 4 stop a card failed* 5 function:select error* 6 receive incompleted** Note : timeout value is 200ms ********************************************************************************/int StopCard(int MacNum, int Fd, int Baudrate){ int i; int event; int send_len; int recv_len; char chk_done[7] = {DLE, (MacNum & 0xFF), 0x04, 'D', 'o', 'n', 'e'}; char chk_fail[7] = {DLE, (MacNum & 0xFF), 0x04, 'F', 'a', 'i', 'l'}; char send_bff[3]; char recv_bff[7]; if ( MacNum > 255 || MacNum < 0 ) return 1; // parameter error send_bff[0] = DLE; send_bff[1] = (MacNum & 0xFF); // machine number send_bff[2] = 'H'; // command byte send_len = 3; // send data is 3 bytes do { event = WriteCom(Fd, send_bff, send_len); // tx command frame } while (event != send_len); recv_len = 7; // receive data is 7 bytes event = ReadCom(Fd, recv_bff, recv_len, Baudrate, 200); if (recv_len == event) { // receive completed for (i = 0; i < 7; i++) { if (recv_bff[i] != chk_done[i]) break; } if (7 == i) return 0; // success for(i = 0; i < 7; i++) { if (chk_fail[i] != recv_bff[i]) break; } if (7 == i) return 4; // receive failed else return 3; // ack failed } else if (-1 == event) { // timeout return 2; } else if (-2 == event) { // function:select error! return 5; } else { return 6; // receive incompleted }}/******************************************************************************** WRITE MACHINE'S CIPHER KEY* * Description: write cipher key into EEPROM of machine** Arguments int MacNum machine number* int KeyAddr key address* char* p_Cipher pointer of area stored machine's cipher* int Fd handler of device* int Baudrate baudrate value* * Return : int* 0 success* 1 parameter error* 2 timeout* 3 acknowledge failed* 4 write cipher failed* 5 function:select error* 6 receive incompleted** Note : timeout value is 200ms ********************************************************************************/int WriteMacCph(int MacNum, int KeyAddr, char* p_Cipher, int Fd, int Baudrate){ int i; int event; int send_len; int recv_len; char chk_done[7] = {DLE, (MacNum & 0xFF), 0x04, 'D', 'o', 'n', 'e'}; char chk_fail[7] = {DLE, (MacNum & 0xFF), 0x04, 'F', 'a', 'i', 'l'}; char send_bff[10]; char recv_bff[7]; if ( MacNum > 255 || MacNum < 0 || (KeyAddr & 0x7F) > 23 || KeyAddr < 0 || NULL== p_Cipher ) return 1; // parameter error send_bff[0] = DLE; send_bff[1] = (MacNum & 0xFF); // machine number send_bff[2] = 'E'; // command byte send_bff[3] = (KeyAddr & 0x7F); // key address memcpy(&send_bff[4], p_Cipher, 6); send_len = 10; // send data is 10 bytes do { event = WriteCom(Fd, send_bff, send_len); // tx command frame } while (event != send_len); recv_len = 7; // receive data is 7 bytes event = ReadCom(Fd, recv_bff, recv_len, Baudrate, 200); if (recv_len == event) { // receive completed for (i = 0; i < 7; i++) { if (recv_bff[i] != chk_done[i]) break; } if (7 == i) return 0; // success for(i = 0; i < 7; i++) { if (chk_fail[i] != recv_bff[i]) break; } if (7 == i) return 4; // receive failed else return 3; // ack failed } else if (-1 == event) { // timeout return 2; } else if (-2 == event) { // function:select error! return 5; } else { return 6; // receive incompleted }}/******************************************************************************** WRITE CARD'S CIPHER KEY* * Description: write cipher key into card** Arguments int MacNum machine number* int KeyAddr key address* int BlkNum block number* char* p_Cipher pointer of area stored machine's cipher* int Fd handler of device* int Baudrate baudrate value* * Return : int* 0 success* 1 parameter error* 2 timeout* 3 acknowledge failed* 4 write cipher failed* 5 function:select error* 6 receive incompleted** Note : timeout value is 200ms ********************************************************************************/int WriteCdCph(int MacNum, int KeyAddr, int BlkNum, char* p_Cipher, int Fd, int Baudrate){ int i; int event; int send_len; int recv_len; char chk_done[7] = {DLE, (MacNum & 0xFF), 0x04, 'D', 'o', 'n', 'e'}; char chk_fail[7] = {DLE, (MacNum & 0xFF), 0x04, 'F', 'a', 'i', 'l'}; char send_bff[21]; char recv_bff[7]; if ( MacNum > 255 || MacNum < 0 || (KeyAddr & 0x7F) > 23 || KeyAddr < 0 || BlkNum > (64 * 4 - 1) || BlkNum < 0 || NULL== p_Cipher ) return 1; // parameter error send_bff[0] = DLE; send_bff[1] = (MacNum & 0xFF); // machine number send_bff[2] = 'K'; // command byte send_bff[3] = (KeyAddr & 0x7F); // key address send_bff[4] = (BlkNum & 0xFF); // block number memcpy(&send_bff[5], p_Cipher, 16); send_len = 21; // send data is 21 bytes do { event = WriteCom(Fd, send_bff, send_len); // tx command frame } while (event != send_len); recv_len = 7; // receive data is 7 bytes event = ReadCom(Fd, recv_bff, recv_len, Baudrate, 200); if (recv_len == event) { // receive completed for (i = 0; i < 7; i++) { if (recv_bff[i] != chk_done[i]) break; } if (7 == i) return 0; // success for(i = 0; i < 7; i++) { if (chk_fail[i] != recv_bff[i]) break; } if (7 == i) return 4; // receive failed else return 3; // ack failed } else if (-1 == event) { // timeout return 2; } else if (-2 == event) { // function:select error! return 5; } else { return 6; // receive incompleted }}/******************************************************************************** CHANGE BAUD RATE* * Description: change baud rate of machine* * Arguments int MacNum machine number* int Value * 0x00 <----> 9600bps* 0x01 <----> 14400bps* 0x02 <----> 19200bps* 0x03 <----> 28800bps* 0x04 <----> 57600bps * int Fd handler of device* int Baudrate baudrate value* * Return : int* 0 success* 1 parameter error* 2 timeout* 3 acknowledge failed* 4 function:select error* 5 failure** Note : timeout value is 200ms ********************************************************************************/int ChgBaudrate(int MacNum, int Value, int Fd, int Baudrate){ int i; int event; int send_len; int recv_len; char chk_code[6] = {DLE, (MacNum & 0xFF), 0x03, 'O', 'K', '!'}; char send_bff[4]; char recv_bff[6]; if (MacNum > 255 || MacNum < 0 || Value > 4 || Value < 0) return 1; // parameter error send_bff[0] = DLE; send_bff[1] = (MacNum & 0xFF); // machine number send_bff[2] = 'b'; // command byte send_bff[3] = Value; send_len = 4; // send data is 3 bytes do { event = WriteCom(Fd, send_bff, send_len); // tx command frame } while (event != send_len); recv_len = 6; // receive data is 6 bytes event = ReadCom(Fd, recv_bff, recv_len, Baudrate, 200); if (recv_len == event) { // receive completed for (i = 0; i < recv_len; i++) { if (recv_bff[i] != chk_code[i]) break; } if (recv_len == i) { return 0; // success } else return 3; // ack failed } else if (-1 == event) { // timeout return 2; } else if (-2 == event) { // function:select error! return 4; } else { return 5; // failure }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -