版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一个在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, i
2、nt 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:ope
3、n_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);
4、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)/等待超时则退出retur
5、n 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_
6、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
7、,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)
8、;/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;buff
9、er7=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 (read
10、num=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=
11、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;
12、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
13、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
14、+;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,
15、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 card
16、reader: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(bu
17、ffer);/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);/
18、等待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 .
19、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
20、+=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;/发送0x06buffe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年政府引导基金项目申请报告范文
- 病床呼叫显示器课程设计
- 班级常规活动课程设计
- 班级传统特色课程设计
- 玻璃鳞片物理特性研究报告
- 玻璃隔断装修报价方案
- 玻璃贴膜施工方案
- 玻璃浮雕技术现状研究报告
- 玻璃材料市场研究报告
- 玻璃幕墙检测方案
- DB43-T 1878-2020 电能过滤器通用技术规范
- 大数据与会计论文
- 人民武装工作概述课件
- 高三定语从句复习公开课 全国一等奖
- Intercultural Communication 跨文化传播-暨南大学中国大学mooc课后章节答案期末考试题库2023年
- 不稳定血红蛋白病
- 六年级上册数学教学设计-第五单元 数据处理∣北师大版
- 免费下载装修合同范本
- 医院人事管理制度汇编
- GB/T 30030-2023自动导引车术语
- 药理学学习指导及练习题
评论
0/150
提交评论