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

📄 14443source.c

📁 非接触式IC卡串口读写程序源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	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 + -