




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一个在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;/发送0x06buffe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高二物理上学期波传播方向与质点振动方向判断专题
- 死亡游戏应急预案
- 园区防盗应急预案
- 安全应急预案-备案
- 幼儿保育模拟面试题及答案
- 从入门到精通最小拉力测试全程指导及参考答案一
- 2025年初中光伏发电试题及答案
- 委托装修商城合同(标准版)
- 成都高三历史模拟试题及答案
- 心情瓶子测试题及答案
- 个人成长与职业发展心理学
- 《思想道德与法治》(23版):绪论 担当复兴大任 成就时代新人
- 老人常见意外事故预防
- 小学科学课堂教学课型分类(新)
- 《珍惜我们的眼睛:1 用眼习惯小调查》说课稿-2023-2024学年四年级下册综合实践活动沪科黔科版
- 《耳声发射与听力损失》课件
- 第八章-统计指数(平均指数)
- 《电动自行车停放充电场所消防技术规范》(DB 32-T 3904-2020)
- 2024年废旧船舶拆解合同范本
- 川教版2024-2025学年五年级上册信息技术全册教案
- 哈工大课件教学课件
评论
0/150
提交评论