当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 用于mini2440与周立功非接触式ic卡模块通信
个人资料整理仅限学习使用1/13一个在linux下的串口程序例子用于mini2440与周立功非接触式ic卡模块的通信头文件#includeQThread#includeunistd.h#includestring.h#includeerrno.h#includesys/types.h#includesys/stat.h#includefcntl.h#includestdlib.h#includestdio.h#includeunistd.h#includetermios.hclassCardreader:publicQThread{Q_OBJECTpublic:Cardreader(。intfd_port。intopen_port(intcomport。intset_opt(intfd,intnSpeed,intnBits,charnEvent,intnStop。intinitcardreader(intfd_port。unsignedintcheckcard(intfd_port。unsignedintreadcardid(intfd_port。intbeep(intfd_port。voidautorun(void。voidsendmessage(intdata。signals:voidmessage(QString。protected:private:}。cpp文件#includecardreader.hCardreader::Cardreader(个人资料整理仅限学习使用2/13{}intCardreader::open_port(intcomport{/*打开端口成功返回文件描述符失败返回0*//*openCOMPort*//*comport=1openCOM1comport=2openCOM2comport=3openCOM3*///char*dev[]={/dev/ttySAC0,/dev/ttySAC1,/dev/ttySAC2}。longvdisable。intfd。if(comport==1{fd=open(/dev/ttySAC0,O_RDWR|O_NOCTTY|O_NDELAY。if(0==fd{emitmessage(Openporterror1。return(0。}}elseif(comport==2{fd=open(/dev/ttySAC1,O_RDWR|O_NOCTTY|O_NDELAY。if(0==fd{emitmessage(Openporterror1。return(0。}}elseif(comport==3{fd=open(/dev/ttySAC2,O_RDWR|O_NOCTTY|O_NDELAY。if(0==fd{emitmessage(Openporterror1。return(0。}}if(fcntl(fd,F_SETFL,00{emitmessage(Openporterror2。return(0。}if(isatty(STDIN_FILENO==0{emitmessage(Openporterror3。个人资料整理仅限学习使用3/13//return(0。}returnfd。}intCardreader::set_opt(intfd,intnSpeed,intnBits,charnEvent,intnStop{/*端口设置,成功返回1,失败返回0*//*setpatmeterofCOMport*//*fd:filedescriptofCOMportnSpeed:bautratenBits:unmberofdatabitsnEven:PAREmodeO:oddE:evenN:nonenStop:stopbits*/structtermiosnewtio,oldtio。if(tcgetattr(fd,&oldtio!=0return0。bzero(&newtio,sizeof(newtio。newtio.c_cflag|=CLOCAL|CREAD。newtio.c_cflag&=~CSIZE。switch(nBits{case7:newtio.c_cflag|=CS7。//7bitsdatabreak。case8:newtio.c_cflag|=CS8。//8bitsdatabreak。}switch(nEvent{case'O'://oddnewtio.c_cflag|=PARENB。newtio.c_cflag|=PARODD。newtio.c_iflag|=(INPCK|ISTRIP。break。case'E'://evennewtio.c_iflag|=(INPCK|ISTRIP。newtio.c_cflag|=PARENB。newtio.c_cflag&=~PARODD。break。个人资料整理仅限学习使用4/13case'N'://nonenewtio.c_cflag&=~PARENB。break。}switch(nSpeed{case2400:cfsetispeed(&newtio,B2400。cfsetospeed(&newtio,B2400。break。case4800:cfsetispeed(&newtio,B4800。cfsetospeed(&newtio,B4800。break。case91000:cfsetispeed(&newtio,B9600。cfsetospeed(&newtio,B9600。break。case571000:cfsetispeed(&newtio,B57600。cfsetospeed(&newtio,B57600。break。case115200:cfsetispeed(&newtio,B115200。cfsetospeed(&newtio,B115200。break。default:cfsetispeed(&newtio,B9600。cfsetospeed(&newtio,B9600。break。}if(nStop==1newtio.c_cflag&=~CSTOPB。elseif(nStop==2newtio.c_cflag|=CSTOPB。newtio.c_cc[VTIME]=0。newtio.c_cc[VMIN]=0。tcflush(fd,TCIFLUSH。if((tcsetattr(fd,TCSANOW,&newtio!=0return0。return1。}intCardreader::initcardreader(intfd_port个人资料整理仅限学习使用5/13{/*读卡器初始化,成功返回1,失败返回0*/unsignedcharbuffer[32]。intreadnum。unsignedinttimer。memset(buffer,0,sizeof(buffer。//buffer缓冲区清0//发送开始符0x20buffer[0]=0x20。write(fd_port,buffer,1。//等待0x06回应否则出错退出usleep(40*1000。//等待40mstimer=0。memset(buffer,0,sizeof(buffer。//buffer缓冲区清0do{readnum=read(fd_port,buffer,sizeof(buffer。usleep(100。timer++。if(timer1000//等待超时则退出return0。}while(readnum==0。if(buffer[0]!=0x06return0。//发送0x000x520x000xad0x03//usleep(40*1000。//等待40msbuffer[0]=0x00。buffer[1]=0x52。buffer[2]=0x00。buffer[3]=0xad。buffer[4]=0x03。write(fd_port,buffer,5。//等待0x20回应否则出错退出usleep(40*1000。//等待50msmemset(buffer,0,sizeof(buffer。//buffer缓冲区清0timer=0。do{readnum=read(fd_port,buffer,sizeof(buffer。usleep(100。timer++。if(timer1500//等待超时则退出return0。}while(readnum==0。if(buffer[0]!=0x20个人资料整理仅限学习使用6/13return0。//发送0x06buffer[0]=0x06。write(fd_port,buffer,1。//等待0x000x000x000xff0x03回应否则出错退出usleep(40*1000。//等待40msmemset(buffer,0,sizeof(buffer。//buffer缓冲区清0timer=0。do{readnum=read(fd_port,buffer,sizeof(buffer。usleep(100。timer++。if(timer1000//等待超时则退出return0。}while(readnum==0。if((buffer[0]!=0x00||(buffer[1]!=0x00||(buffer[2]!=0x00||(buffer[3]!=0xff||(buffer[4]!=0x03return0。//发送开始符0x20buffer[0]=0x20。write(fd_port,buffer,1。//等待0x06回应否则出错退出usleep(40*1000。//等待40msmemset(buffer,0,sizeof(buffer。//buffer缓冲区清0timer=0。do{readnum=read(fd_port,buffer,sizeof(buffer。usleep(100。timer++。if(timer1000//等待超时则退出return0。}while(readnum==0。if(buffer[0]!=0x06return0。//发送004c080000ffffffffffffbb03buffer[0]=0x00。buffer[1]=0x4c。buffer[2]=0x08。buffer[3]=0x00。buffer[4]=0x00。buffer[5]=0xff。buffer[6]=0xff。个人资料整理仅限学习使用7/13buffer[7]=0xff。buffer[8]=0xff。buffer[9]=0xff。buffer[10]=0xff。buffer[11]=0xbb。buffer[12]=0x03。write(fd_port,buffer,13。//等待0x20回应否则出错退出usleep(40*1000。//等待40msmemset(buffer,0,sizeof(buffer。//buffer缓冲区清0timer=0。do{readnum=read(fd_port,buffer,sizeof(buffer。usleep(100。timer++。if(timer1000//等待超时则退出return0。}while(readnum==0。if(buffer[0]!=0x20return0。//发送0x06buffer[0]=0x06。write(fd_port,buffer,1。//等待0x000x000x000xff0x03回应否则出错退出usleep(40*1000。//等待40msmemset(buffer,0,sizeof(buffer。//buffer缓冲区清0timer=0。do{readnum=read(fd_port,buffer,sizeof(buffe
本文标题:用于mini2440与周立功非接触式ic卡模块通信
链接地址:https://www.777doc.com/doc-7455550 .html