用于mini2440与周立功非接触式ic卡模块通信_第1页
用于mini2440与周立功非接触式ic卡模块通信_第2页
用于mini2440与周立功非接触式ic卡模块通信_第3页
用于mini2440与周立功非接触式ic卡模块通信_第4页
用于mini2440与周立功非接触式ic卡模块通信_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论