用于mini2440与周立功非接触式ic卡模块的通信

上传人:仙*** 文档编号:33277873 上传时间:2021-10-16 格式:DOC 页数:13 大小:50.50KB
返回 下载 相关 举报
用于mini2440与周立功非接触式ic卡模块的通信_第1页
第1页 / 共13页
用于mini2440与周立功非接触式ic卡模块的通信_第2页
第2页 / 共13页
用于mini2440与周立功非接触式ic卡模块的通信_第3页
第3页 / 共13页
点击查看更多>>
资源描述
一个在linux下的串口程序例子用于mini2440与周立功非接触式ic卡模块的通信头文件#include #include #include #include #include #include #include #include #include #include #include class Cardreader : public QThreadQ_OBJECTpublic:Cardreader();int fd_port;int open_port(int comport);int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop);int initcardreader(int fd_port);unsigned int checkcard(int fd_port);unsigned int readcardid (int fd_port);int beep(int fd_port);void autorun(void);void sendmessage(int data);signals:void message(QString);protected:private:;cpp文件#include cardreader.hCardreader:Cardreader()int Cardreader:open_port(int comport)/* 打开端口 成功返回文件描述符 失败返回0*/*open COM Port*/* comport=1 open COM1 comport=2 open COM2 comport=3 open COM3*/char *dev=/dev/ttySAC0,/dev/ttySAC1,/dev/ttySAC2;longvdisable;int fd;if (comport=1)fd = open( /dev/ttySAC0, O_RDWR|O_NOCTTY|O_NDELAY);if (0 = fd)emit message(Open port error 1);return(0); else if(comport=2)fd = open( /dev/ttySAC1, O_RDWR|O_NOCTTY|O_NDELAY);if (0 = fd) emit message(Open port error 1);return(0);else if (comport=3)fd = open( /dev/ttySAC2, O_RDWR|O_NOCTTY|O_NDELAY);if (0 = fd) emit message(Open port error 1);return(0);if(fcntl(fd, F_SETFL, 0)1000)/等待超时则退出return 0; while (readnum=0);if (buffer0!=0x06)return 0;/发送 0x00 0x52 0x00 0xad 0x03/usleep(40*1000);/等待40msbuffer0=0x00;buffer1=0x52;buffer2=0x00;buffer3=0xad;buffer4=0x03;write(fd_port,buffer,5);/等待0x20回应 否则出错退出usleep(40*1000);/等待50msmemset(buffer,0,sizeof(buffer);/buffer 缓冲区清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1500)/等待超时则退出return 0; while (readnum=0);if (buffer0!=0x20)return 0;/发送0x06buffer0=0x06;write(fd_port,buffer,1);/等待0x00 0x00 0x00 0xff 0x03回应 否则出错退出usleep(40*1000);/等待40msmemset(buffer,0,sizeof(buffer);/buffer 缓冲区清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超时则退出return 0; while (readnum=0);if (buffer0!=0x00)|(buffer1!=0x00)|(buffer2!=0x00)|(buffer3!=0xff)|(buffer4!=0x03)return 0;/发送开始符 0x20buffer0=0x20;write(fd_port,buffer,1);/等待0x06回应 否则出错退出usleep(40*1000);/等待40msmemset(buffer,0,sizeof(buffer);/buffer 缓冲区清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超时则退出return 0; while (readnum=0);if (buffer0!=0x06)return 0;/发送 00 4c 08 00 00 ff ff ff ff ff ff bb 03buffer0=0x00;buffer1=0x4c;buffer2=0x08;buffer3=0x00;buffer4=0x00;buffer5=0xff;buffer6=0xff;buffer7=0xff;buffer8=0xff;buffer9=0xff;buffer10=0xff;buffer11=0xbb;buffer12=0x03;write(fd_port,buffer,13);/等待0x20回应 否则出错退出usleep(40*1000);/等待40msmemset(buffer,0,sizeof(buffer);/buffer 缓冲区清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超时则退出return 0; while (readnum=0);if (buffer0!=0x20)return 0;/发送0x06buffer0=0x06;write(fd_port,buffer,1);/等待0x00 0x00 0x00 0xff 0x03回应 否则出错退出usleep(40*1000);/等待40msmemset(buffer,0,sizeof(buffer);/buffer 缓冲区清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超时则退出return 0; while (readnum=0);if (buffer0!=0x00)|(buffer1!=0x00)|(buffer2!=0x00)|(buffer3!=0xff)|(buffer4!=0x03)return 0;return 1;unsigned int Cardreader:checkcard(int fd_port)/* 检查天线范围内有无卡,有返回1,无或失败返回0 */unsigned char buffer32;int readnum;unsigned int timer;memset(buffer,0,sizeof(buffer);/buffer 缓冲区清0/发送开始符 0x20buffer0=0x20;write(fd_port,buffer,1);/等待0x06回应 否则出错退出usleep(40*1000);/等待40mstimer=0;memset(buffer,0,sizeof(buffer);/buffer 缓冲区清0doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超时则退出 /emit message(card found error 1);return 0; while (readnum=0);if (buffer0!=0x06)emit message(card found error 2);return 0;/发送 00 41 01 01 be 03buffer0=0x00;buffer1=0x41;buffer2=0x01;buffer3=0x01;buffer4=0xbe;buffer5=0x03;write(fd_port,buffer,6);/等待0x20回应 否则出错退出usleep(40*1000);/等待50msmemset(buffer,0,sizeof(buffer);/buffer 缓冲区清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超时则退出return 0; while (readnum=0);if (buffer0!=0x20)emit message(card found error 3);return 0;/发送0x06buffer0=0x06;write(fd_port,buffer,1);/等待0x00 0x00 0x02 0x04 0x00 0xf9 0x03回应usleep(50*1000);/等待40msmemset(buffer,0,sizeof(buffer);/buffer 缓冲区清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超时则退出emit message(card found error 4);return 0; while (readnum=0);if (buffer0!=0x00)|(buffer1!=0x00)|(buffer2!=0x02)|(buffer3!=0x04)|(buffer4!=0x00)|(buffer5!=0xf9)|(buffer6!=0x03)/emit message(card found error 5);return 0;return 1;unsigned int Cardreader:readcardid (int fd_port)/* 读取卡id号码,成功返回32位整数,无或失败返回0 */unsigned char buffer32;int readnum;unsigned int timer;unsigned int result;memset(buffer,0,sizeof(buffer);/buffer 缓冲区清0/发送开始符 0x20buffer0=0x20;write(fd_port,buffer,1);/等待0x06回应 否则出错退出usleep(40*1000);/等待40mstimer=0;memset(buffer,0,sizeof(buffer);/buffer 缓冲区清0doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超时则退出return 0; while (readnum=0);if (buffer0!=0x06)return 0;/发送 00 71 02 00 00 8c 03buffer0=0x00;buffer1=0x71;buffer2=0x02;buffer3=0x00;buffer4=0x00;buffer5=0x8c;buffer6=0x03;write(fd_port,buffer,7);/等待0x20回应 否则出错退出usleep(40*1000);/等待50msmemset(buffer,0,sizeof(buffer);/buffer 缓冲区清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超时则退出return 0; while (readnum=0);if (buffer0!=0x20)return 0;/发送0x06buffer0=0x06;write(fd_port,buffer,1);/等待0x00 0x00 0x04 0x04 . 0x03回应usleep(40*1000);/等待40msmemset(buffer,0,sizeof(buffer);/buffer 缓冲区清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超时则退出return 0; while (readnum=0);if (buffer0!=0x00)|(buffer1!=0x00)|(buffer2!=0x04)|(buffer8!=0x03)return 0;result=0;result=buffer3;result+=buffer48;result+=buffer516;result+=buffer61000)/等待超时则退出return 0; while (readnum=0);if (buffer0!=0x06)return 0;/发送 00 60 04 0a 19 19 01 90 03buffer0=0x00;buffer1=0x60;buffer2=0x04;buffer3=0x0a;buffer4=0x19;buffer5=0x19;buffer6=0x01;buffer7=0x90;buffer8=0x03;write(fd_port,buffer,9);/等待0x20回应 否则出错退出usleep(40*1000);/等待50msmemset(buffer,0,sizeof(buffer);/buffer 缓冲区清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超时则退出return 0; while (readnum=0);if (buffer0!=0x20)return 0;/发送0x06buffer0=0x06;write(fd_port,buffer,1);/等待0x00 0x00 0x00 0xff 0x03回应usleep(40*1000);/等待40msmemset(buffer,0,sizeof(buffer);/buffer 缓冲区清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超时则退出return 0; while (readnum=0);if (buffer0!=0x00)|(buffer1!=0x00)|(buffer2!=0x00)|(buffer3!=0xff)|(buffer4!=0x03)return 0;return 1;void Cardreader:autorun()int newid,oldid;fd_port=open_port(1);set_opt(fd_port,57600, 8, N, 1);initcardreader(fd_port);for (int i=0;i20;i+) usleep(200*1000);if (checkcard(fd_port) newid=readcardid(fd_port);if (oldid!=newid)sendmessage(newid);oldid=newid;beep(fd_port); void Cardreader:sendmessage(int data)emitmessage(QString:number(data,16);
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!