歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

飛凌6410開發板通過USB Reader讀卡器讀取IC卡ID(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 <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;
}

 

程序運行效果:

Copyright © Linux教程網 All Rights Reserved