飞凌6410开发板通过USB Reader读卡器读取IC卡ID(Lin

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

程序运行效果:

飞凌6410开发板通过USB Reader读卡器读取IC卡ID(Lin

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyzxfj.html