




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上一个在linux下的串口程序例子 用于mini2440与周立功非接触式ic卡模块的通信头文件#include <QThread>#include <unistd.h>#include <string.h>#include <errno.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdlib.h>#include <std
2、io.h>#include <unistd.h>#include <termios.h>class Cardreader : public QThread Q_OBJECTpublic: Cardreader(>。 int fd_port。 int open_port(int comport>。 int set_opt(int
3、 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>。
4、0; void autorun(void>。 void sendmessage(int data>。signals: void message(QString>。protected:private:。cpp文件#include "cardreader.h"Cardreader:Cardreader(>int Cardreader:open_port(int comport>
5、 /* 打开端口 成功返回文件描述符 失败返回0*/ /*open COM Port*/ /* comport=1 open COM1 comport=2 open COM2 comport=3 open COM3*/ /char *dev="/dev/ttySAC0&qu
6、ot;,"/dev/ttySAC1","/dev/ttySAC2"。 long vdisable。 int fd。 if (comport=1>
7、; fd = open( "/dev/ttySAC0", O_RDWR|O_NOCTTY|O_NDELAY>。 if (0 = fd>
8、60; emit message("Open port error 1">。
9、0;return(0>。 else if(comport=2> fd = open(
10、"/dev/ttySAC1", O_RDWR|O_NOCTTY|O_NDELAY>。 if (0 = fd>
11、60; emit message("Open port error 1">。 return(0>。
12、160; else if (comport=3>
13、0; fd = open( "/dev/ttySAC2", O_RDWR|O_NOCTTY|O_NDELAY>。 if (0 = fd>
14、160; emit message("Open port error 1">。
15、160; return(0>。 if(fcntl(fd, F_SETFL, 0><0> &
16、#160; emit message("Open port error 2">。 return(0>。
17、 if(isatty(STDIN_FILENO>=0> emit message("Open port error 3">。
18、0; / return(0>。 return fd。int Cardreader:set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop> /
19、* 端口设置,成功返回1,失败返回0 */ /*set patmeter of COM port*/ /*fd:file descript of COM port nSpeed:baut rate nBits:unmber
20、of data bits nEven:PARE mode O:odd E:even N:none nStop:stop bits*/ struct termios newtio,oldtio。 if (
21、 tcgetattr( fd,&oldtio> != 0> return 0。 bzero( &newtio, sizeof( newtio > >。
22、; newtio.c_cflag |= CLOCAL | CREAD。 newtio.c_cflag &= CSIZE。 switch( nBits >
23、case 7: newtio.c_cflag |= CS7。/7 bits data break。 case 8:
24、 newtio.c_cflag |= CS8。/8 bits data break。
25、160; switch( nEvent > case 'O':/odd newtio.c_cflag |= PARENB。
26、60; newtio.c_cflag |= PARODD。 newtio.c_iflag |= (INPCK | ISTRIP>。
27、 break。 case 'E': /even newtio.c_iflag |= (INPCK | ISTRIP>。
28、; newtio.c_cflag |= PARENB。 newtio.c_cflag &= PARODD。 break。
29、; case 'N': /none newtio.c_cflag &= PARENB。 break。 &
30、#160; switch( nSpeed > case 2400: cfsetispeed(&newtio, B2400>。
31、60; cfsetospeed(&newtio, B2400>。 break。 case 4800:
32、 cfsetispeed(&newtio, B4800>。 cfsetospeed(&newtio, B4800>。
33、160; break。 case 91000: cfsetispeed(&newtio, B9600>。
34、0; cfsetospeed(&newtio, B9600>。 break。 case :
35、; cfsetispeed(&newtio, B57600>。 cfsetospeed(&newtio, B57600>。 break。
36、; case : cfsetispeed(&newtio, B>。 cfsetospeed(&newtio, B>。
37、60; break。 default: cfsetispeed(&newtio, B9600>。
38、160; cfsetospeed(&newtio, B9600>。 break。
39、60; if( nStop = 1 > newtio.c_cflag &= CSTOPB。 else if ( nStop = 2 > newtio.c_cf
40、lag |= CSTOPB。 newtio.c_ccVTIME = 0。 newtio.c_ccVMIN = 0。 tcflush(fd,TCIFLUSH>。 if(tcse
41、tattr(fd,TCSANOW,&newtio>>!=0> return 0。 return 1。int Cardreader:initcardreader(int fd_port> /*
42、 读卡器初始化,成功返回1,失败返回0 */ unsigned char buffer32。 int readnum。 unsigned int timer。 memset(buffer,0,sizeof(buffer>
43、;>。/buffer 缓冲区清0 /发送开始符 0x20 buffer0=0x20。 write(fd_port,buffer,1>。 /等待0x06回应 否则出错退出
44、0; usleep(40*1000>。/等待40ms timer=0。 memset(buffer,0,sizeof(buffer>>。/buffer 缓冲区清0 do &
45、#160; readnum=read(fd_port,buffer,sizeof(buffer>>。 usleep(100>。
46、160; timer+。 if (timer>1000>/等待超时则退出
47、160; return 0。 while (readnum=0>。 if (buffer0!=0x06> return 0。 &
48、#160; /发送 0x00 0x52 0x00 0xad 0x03 /usleep(40*1000>。/等待40ms buffer0=0x00。buffer1=0x52。buffer2=0x00。buffer3=0xad。buffer4=0x03。 w
49、rite(fd_port,buffer,5>。 /等待0x20回应 否则出错退出 usleep(40*1000>。/等待50ms memset(buffer,0,sizeof(buffer>>。/buffer 缓冲区清0 &
50、#160; timer=0。 do readnum=read(fd_port,buffer,sizeof(buffer>>。 &
51、#160; usleep(100>。 timer+。 if (timer>1500>/等待超时则
52、退出 return 0。 while (readnum=0>。 if (buffer0!=0x20>
53、 return 0。 /发送0x06 buffer0=0x06。 write(fd_port,buffer,1>。
54、0; /等待0x00 0x00 0x00 0xff 0x03回应 否则出错退出 usleep(40*1000>。/等待40ms memset(buffer,0,sizeof(buffer>>。/buffer 缓冲区清0 timer
55、=0。 do readnum=read(fd_port,buffer,sizeof(buffer>>。
56、; usleep(100>。 timer+。 if (timer>1000>/等待超时则退出
57、160; return 0。 while (readnum=0>。 if (buffer0!=0x00>|(buffer1!=0x00>|(b
58、uffer2!=0x00>|(buffer3!=0xff>|(buffer4!=0x03>> return 0。 /发送开始符 0x20 buffer0=0x20。
59、; write(fd_port,buffer,1>。 /等待0x06回应 否则出错退出 usleep(40*1000>。/等待40ms memset(buffer,0,sizeof(buffer>>。/buffer 缓冲区清0
60、; timer=0。 do readnum=read(fd_port,buffer,sizeof(buffer>>。
61、; usleep(100>。 timer+。 &
62、#160;if (timer>1000>/等待超时则退出 return 0。 while (readnum=0>。 &
63、#160;if (buffer0!=0x06> return 0。 /发送 00 4c 08 00 00 ff ff ff ff ff ff bb 03 buffer0=0x00。buffer1=0x4c。buffe
64、r2=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>。
65、; /等待0x20回应 否则出错退出 usleep(40*1000>。/等待40ms memset(buffer,0,sizeof(buffer>>。/buffer 缓冲区清0 timer=0。
66、 do readnum=read(fd_port,buffer,sizeof(buffer>>。 us
67、leep(100>。 timer+。 if (timer>1000>/等待超时则退出
68、; return 0。 while (readnum=0>。 if (buffer0!=0x20> &
69、#160; return 0。 /发送0x06 buffer0=0x06。 write(fd_port,buffer,1>。 /等待0x00 0x00 0x00 0xff
70、0x03回应 否则出错退出 usleep(40*1000>。/等待40ms memset(buffer,0,sizeof(buffer>>。/buffer 缓冲区清0 timer=0。 do
71、160; readnum=read(fd_port,buffer,sizeof(buffer>>。 usleep(100>。
72、60; timer+。 if (timer>1000>/等待超时则退出
73、60; return 0。 while (readnum=0>。 if (buffer0!=0x00>|(buffer1!=0x00>|(buffer2!=0x00>|(buffer3!=0xff>|(buffer4!=0x03>>
74、60; return 0。 return 1。unsigned int Cardreader:checkcard(int fd_port> /* 检查天线范围内有无卡,有返回1,无或失败返回0 */
75、60; unsigned char buffer32。 int readnum。 unsigned int timer。 memset(buffer,0,sizeof(buffer>>。/buffer 缓冲区清0
76、 /发送开始符 0x20 buffer0=0x20。 write(fd_port,buffer,1>。 /等待0x06回应 否则出错退出 usleep(40*1
77、000>。/等待40ms timer=0。 memset(buffer,0,sizeof(buffer>>。/buffer 缓冲区清0 do
78、160; readnum=read(fd_port,buffer,sizeof(buffer>>。 usleep(100>。
79、60; timer+。 if (timer>1000>/等待超时则退出 /emit message("card found error 1">。&
80、#160; return 0。
81、0; while (readnum=0>。 if (buffer0!=0x06> emit message("card found error 2">。
82、60; return 0。 /发送 00 41 01 01 be 03 buffer0=0x00。buffer1=0x41。b
83、uffer2=0x01。buffer3=0x01。buffer4=0xbe。buffer5=0x03。 write(fd_port,buffer,6>。 /等待0x20回应 否则出错退出 usleep(40*1000>。/等待50ms
84、 memset(buffer,0,sizeof(buffer>>。/buffer 缓冲区清0 timer=0。 do
85、; readnum=read(fd_port,buffer,sizeof(buffer>>。 usleep(100>。 timer+。
86、; if (timer>1000>/等待超时则退出 return 0。
87、60; while (readnum=0>。 if (buffer0!=0x20> emit message("card found error 3">。
88、160; return 0。 /发送0x06 buffer0=0x06。
89、60;write(fd_port,buffer,1>。 /等待0x00 0x00 0x02 0x04 0x00 0xf9 0x03回应 usleep(50*1000>。/等待40ms memset(buffer,0,sizeof(buffer>>。/buffer 缓冲区清0
90、0; timer=0。 do readnum=read(fd_port,buffer,sizeof(buffer>>。
91、0; usleep(100>。 timer+。
92、if (timer>1000>/等待超时则退出 emit message("card found error 4">。 &
93、#160; return 0。
94、0; while (readnum=0>。 if (buffer0!=0x00>|(buffer1!=0x00>|(buffer2!=0x02>|(buffer3!=0x04>|(buffer4!=0x00>|(buffer5!=0xf9>|(buffer6!=0x03>>
95、; /emit message("card found error 5">。 return 0。 return 1。unsigned int Cardreade
96、r:readcardid (int fd_port> /* 读取卡id号码,成功返回32位整数,无或失败返回0 */ unsigned char buffer32。 int readnum。 unsigned int
97、timer。 unsigned int result。 memset(buffer,0,sizeof(buffer>>。/buffer 缓冲区清0 /发送开始符 0x20 buffer0=0x20。 &
98、#160; write(fd_port,buffer,1>。 /等待0x06回应 否则出错退出 usleep(40*1000>。/等待40ms timer=0。
99、160; memset(buffer,0,sizeof(buffer>>。/buffer 缓冲区清0 do readnum=read(fd_port,buffer,sizeof(buffer>
100、>。 usleep(100>。 timer+。
101、60; if (timer>1000>/等待超时则退出 return 0。 while (readnum=0>。
102、60; if (buffer0!=0x06> return 0。 /发送 00 71 02 00 00 8c 03 buffer0=0x00。buffer1=0x71。buffer2=0x02。
103、buffer3=0x00。buffer4=0x00。buffer5=0x8c。buffer6=0x03。 write(fd_port,buffer,7>。 /等待0x20回应 否则出错退出 usleep(40*1000>。/等待50ms
104、; memset(buffer,0,sizeof(buffer>>。/buffer 缓冲区清0 timer=0。 do
105、0; readnum=read(fd_port,buffer,sizeof(buffer>>。 usleep(100>。 timer+。
106、0; if (timer>1000>/等待超时则退出 return 0。
107、160; while (readnum=0>。 if (buffer0!=0x20> return 0。 /发送0x06
108、60;buffer0=0x06。 write(fd_port,buffer,1>。 /等待0x00 0x00 0x04 0x04 . 0x03回应 usleep(40*1000>。/等待40ms memset(b
109、uffer,0,sizeof(buffer>>。/buffer 缓冲区清0 timer=0。 do readnum
110、=read(fd_port,buffer,sizeof(buffer>>。 usleep(100>。 timer+。 &
111、#160; if (timer>1000>/等待超时则退出 return 0。 while (readnum=0
112、>。 if (buffer0!=0x00>|(buffer1!=0x00>|(buffer2!=0x04>|(buffer8!=0x03>> return 0。 result=0。
113、60; result=buffer3。 result+=buffer4<<8。 result+=buffer5<<16。 result+=buffer6<<24。 &
114、#160; return result。int Cardreader:beep(int fd_port> /* 蜂鸣器响,成功返回32位整数,无或失败返回0 */ unsigned char buffer32。 int readnum。
115、60; unsigned int timer。 unsigned int result。 memset(buffer,0,sizeof(buffer>>。/buffer 缓冲区清0 /发送开始符 0x20
116、0; buffer0=0x20。 write(fd_port,buffer,1>。 /等待0x06回应 否则出错退出 usleep(40*1000>。/等待40ms
117、timer=0。 memset(buffer,0,sizeof(buffer>>。/buffer 缓冲区清0 do
118、;readnum=read(fd_port,buffer,sizeof(buffer>>。 usleep(100>。 timer+。
119、; if (timer>1000>/等待超时则退出 return 0。 while (r
120、eadnum=0>。 if (buffer0!=0x06> return 0。 /发送 00 60 04 0a 19 19 01 90 03
121、; buffer0=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>。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 办公自动化与医疗信息安全的关系研究
- 以用户为中心的创意产业与区块链版权结合之道
- 区块链技术革新医疗数据共享的密钥
- 办公空间中的医疗品牌建设与信任文化建设
- 医疗行业中的商业模式创新与机遇探索
- 冀教版数学四年级下册-分数的意义教学设计
- 医疗教育中的伦理议题溶栓治疗案例教学
- AI赋能智慧办公推动健康监测智能化发展
- 区块链技术在实体产业的应用与前景分析
- 腹主动脉腔静脉瘘的临床护理
- 2025年中国邮政集团工作人员招聘考试笔试试题(含答案)
- 【语文】第23课《“蛟龙”探海》课件 2024-2025学年统编版语文七年级下册
- 大部分分校:地域文化形考任务一-国开(CQ)-国开期末复习资料
- 走进泰国-课件
- 沙场合作协议书完美参考
- 屋面防水维修工程施工组织设计
- 信用证修改练习习题
- 提高深基坑钢支撑施工质量QC成果
- 塞思卡拉曼《安全边际》
- 避难硐室密闭门安全技术措施
- 超星尔雅学习通《现场生命急救知识与技能》章节测试含答案
评论
0/150
提交评论