设为首页 加入收藏

TOP

飞凌6410开发板通过USB Reader读卡器读取IC卡ID(Linux源代码)
2014-11-24 14:26:41 来源: 作者: 【 】 浏览:0
Tags:飞凌 6410 开发 通过 USB Reader 读卡器 读取 Linux 源代码

代码原理:


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
#include
#include


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;
}



程序运行效果:



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇S3C2440硬件编程实例 下一篇Android中不同包路径下Activity跳..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: