




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一個(gè)在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)/等待超時(shí)則退出retur
5、n 0; while (readnum=0);if (buffer0!=0x06)return 0;/發(fā)送 0x00 0x52 0x00 0xad 0x03/usleep(40*1000);/等待40msbuffer0=0x00;buffer1=0x52;buffer2=0x00;buffer3=0xad;buffer4=0x03;write(fd_port,buffer,5);/等待0x20回應(yīng) 否則出錯(cuò)退出usleep(40*1000);/等待50msmemset(buffer,0,sizeof(buffer);/buffer 緩沖區(qū)清0timer=0;doreadnum=read(fd_
6、port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1500)/等待超時(shí)則退出return 0; while (readnum=0);if (buffer0!=0x20)return 0;/發(fā)送0x06buffer0=0x06;write(fd_port,buffer,1);/等待0x00 0x00 0x00 0xff 0x03回應(yīng) 否則出錯(cuò)退出usleep(40*1000);/等待40msmemset(buffer,0,sizeof(buffer);/buffer 緩沖區(qū)清0timer=0;doreadnum=read(fd_port
7、,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超時(shí)則退出return 0; while (readnum=0);if (buffer0!=0x00)|(buffer1!=0x00)|(buffer2!=0x00)|(buffer3!=0xff)|(buffer4!=0x03)return 0;/發(fā)送開始符 0x20buffer0=0x20;write(fd_port,buffer,1);/等待0x06回應(yīng) 否則出錯(cuò)退出usleep(40*1000);/等待40msmemset(buffer,0,sizeof(buffer)
8、;/buffer 緩沖區(qū)清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超時(shí)則退出return 0; while (readnum=0);if (buffer0!=0x06)return 0;/發(fā)送 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回應(yīng) 否則出錯(cuò)退出usleep(40*1000);/等待40msmemset(buffer,0,sizeof(buffer);/buffer 緩沖區(qū)清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超時(shí)則退出return 0; while (read
10、num=0);if (buffer0!=0x20)return 0;/發(fā)送0x06buffer0=0x06;write(fd_port,buffer,1);/等待0x00 0x00 0x00 0xff 0x03回應(yīng) 否則出錯(cuò)退出usleep(40*1000);/等待40msmemset(buffer,0,sizeof(buffer);/buffer 緩沖區(qū)清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超時(shí)則退出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)/* 檢查天線范圍內(nèi)有無卡,有返回1,無或失敗返回0 */unsigned char buffer32;int readnum;unsigned int timer;memset(buffer,0,sizeof(buffer);/buffer 緩沖區(qū)清0/發(fā)送開始符 0x20buffer0=0x20;
12、write(fd_port,buffer,1);/等待0x06回應(yīng) 否則出錯(cuò)退出usleep(40*1000);/等待40mstimer=0;memset(buffer,0,sizeof(buffer);/buffer 緩沖區(qū)清0doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超時(shí)則退出 /emit message(card found error 1);return 0; while (readnum=0);if (buffer0!=0x06)emit message(card
13、found error 2);return 0;/發(fā)送 00 41 01 01 be 03buffer0=0x00;buffer1=0x41;buffer2=0x01;buffer3=0x01;buffer4=0xbe;buffer5=0x03;write(fd_port,buffer,6);/等待0x20回應(yīng) 否則出錯(cuò)退出usleep(40*1000);/等待50msmemset(buffer,0,sizeof(buffer);/buffer 緩沖區(qū)清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer
14、+;if (timer1000)/等待超時(shí)則退出return 0; while (readnum=0);if (buffer0!=0x20)emit message(card found error 3);return 0;/發(fā)送0x06buffer0=0x06;write(fd_port,buffer,1);/等待0x00 0x00 0x02 0x04 0x00 0xf9 0x03回應(yīng)usleep(50*1000);/等待40msmemset(buffer,0,sizeof(buffer);/buffer 緩沖區(qū)清0timer=0;doreadnum=read(fd_port,buffer,
15、sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超時(shí)則退出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號(hào)碼,成功返回32位整數(shù),無或失敗返回0 */unsigned char buffer32;int readnum;unsigned int timer;unsigned int result;memset(buffer,0,sizeof(buffer);/buffer 緩沖區(qū)清0/發(fā)送開始符 0x20buffer0=0x20;write(fd_port,buffer,1);/等待0x06回應(yīng) 否則出錯(cuò)退出usleep(40*1000);/等待40mstimer=0;memset(buffer,0,sizeof(bu
17、ffer);/buffer 緩沖區(qū)清0doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超時(shí)則退出return 0; while (readnum=0);if (buffer0!=0x06)return 0;/發(fā)送 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回應(yīng) 否則出錯(cuò)退出usleep(40*1000);/等待50msmemset(buffer,0,sizeof(buffer);/buffer 緩沖區(qū)清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超時(shí)則退出return 0; while (readnum=0);if (buffer0!=0x20)return 0;/發(fā)送0x06buffer0=0x06;write(fd_port,buffer,1);/等待0x00 0x00 0x04 0x04 .
19、0x03回應(yīng)usleep(40*1000);/等待40msmemset(buffer,0,sizeof(buffer);/buffer 緩沖區(qū)清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超時(shí)則退出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)/等待超時(shí)則退出return 0; while (readnum=0);if (buffer0!=0x06)return 0;/發(fā)送 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回應(yīng) 否則出錯(cuò)退出usleep(40*1000);/等待50msmemset(buffer,0,sizeof(buffer);/buffer 緩沖區(qū)清0timer=0;doreadnum=read(fd_port,buffer,sizeof(buffer);usleep(100);timer+;if (timer1000)/等待超時(shí)則退出return 0; while (readnum=0);if (buffer0!=0x20)return 0;/發(fā)送0x06buffe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司組織沖刺活動(dòng)方案
- 公司生日座談會(huì)策劃方案
- 公司文體協(xié)會(huì)活動(dòng)方案
- 2025年現(xiàn)代財(cái)務(wù)管理考試試題及答案
- 2025年生物醫(yī)學(xué)工程基礎(chǔ)知識(shí)與技術(shù)應(yīng)用考試試卷及答案
- 2025年審判與執(zhí)行實(shí)務(wù)考試試卷及答案
- 2025年科學(xué)傳播與社會(huì)認(rèn)知的能力測(cè)試考試卷及答案
- 2025年臨床醫(yī)學(xué)專業(yè)執(zhí)業(yè)醫(yī)師考試試卷及答案
- 滬教版(五四學(xué)制)(2024)六年級(jí)下冊(cè)英語期末復(fù)習(xí)Units1-2知識(shí)清單
- 2025年翻譯專業(yè)技術(shù)資格考試題及答案
- 第19章一次函數(shù)-一次函數(shù)專題數(shù)形結(jié)合一一次函數(shù)與45°角模型講義人教版數(shù)學(xué)八年級(jí)下冊(cè)
- 2023年四川省宜賓市敘州區(qū)數(shù)學(xué)六年級(jí)第二學(xué)期期末考試模擬試題含解析
- 幼兒園警察職業(yè)介紹課件
- 棉印染清潔生產(chǎn)審核報(bào)告
- 滅火器維修與報(bào)廢規(guī)程
- 皮膚病的臨床取材及送檢指南-修訂版
- 機(jī)型理論-4c172實(shí)用類重量平衡
- 校企合作項(xiàng)目立項(xiàng)申請(qǐng)表(模板)
- 管道工廠化預(yù)制推廣應(yīng)用課件
- 海水的淡化精品課件
- 項(xiàng)目工程移交生產(chǎn)驗(yàn)收?qǐng)?bào)告
評(píng)論
0/150
提交評(píng)論