代碼原理:
USB Reader雖然是USB接口,但是大多數是模擬鍵盤輸入的。
因此,可以通過 open("/dev/tty0".....) 這個系統函數打開設備。
那麼就可以像讀取文件一樣讀取IC卡的ID。
要點注意:
由於開發板上Linux驅動的不同,因此鍵盤可能會產生多個字節的掃描碼(最多可能有6個)。因此程序要進行過濾。
例如:過濾【鍵盤碼】>128的值。
在Linux下,鍵盤碼值(1~127),釋放鍵(KeyUP)的值為【鍵值】+128
即: 鍵盤碼= 10,則釋放鍵=10+128
如果僅僅是轉換 0~9這幾個值,可以采用下面的算法
int key = '0' + 【鍵盤碼值】 - 1;
//Reader.h
#ifndef READER_H
#define READER_H
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int OpenReader(char* dev)
{
int Reader_Fd=-1;
Reader_Fd = open(dev, O_RDWR);
return Reader_Fd;
}
void CloseReader(int fd)
{
close(fd);
}
int ReadId(int fd,char *id_buf,int len)
{
unsigned char key[5];
unsigned char K;
int i=0;
do
{
K=0;
if(read(fd,key,4)>0)
{
if(key[0]<128)
{
id_buf[i++]='0'+key[0]-1;
K=key[0];
}
}
if(i>len)i==0;
}while(K!=28);
id_buf[i-1]='\0';
return 1;
}
#endif // READER_H
//主程序
#include"reader.h"
int main(int argc, char *argv[])
{
int reader_fd;
char buf[32];
if((reader_fd=OpenReader("/dev/tty0"))==-1)
{
puts("Open Dev Error!\r\n");
}
while(1)
{
if(ReadId(reader_fd,buf,32)==1)
{
printf("Read ID=%s\r\n",buf);
}
}
CloseReader(reader_fd);
return 0;
}
程序運行效果: