Linux下读取USB扫描枪数据

时间:2022-05-25 17:28:54

1.USB扫描枪
  USB接口的扫描枪相当于键盘输入,在Windows或者Linux下,在成功安装驱动的前提下,打开文件编辑器如word、txt等。扫描枪读出到条码数据时,数据即被捕获到光标处。

2.Linux下读取数据

2.1扫描枪设备
  USB扫描枪相当于一个键盘输入设备,Windows或者Linux下都集成相关驱动,或者免驱动。基于ARM下的Linux系统,接入扫描枪,在“/dev/input”目录下可以查看该事件设备,如图,我这边的是“event1”。
Linux下读取USB扫描枪数据

2.1读取扫描枪数据
  基于Linux的“一切皆文件”的思想,通过上面的“event1”设备,即可获取USB扫描枪返回的数据。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/input.h>

#define SCANNER_DEV "/dev/input/event1"

struct input_event buff; 
int fd; 
int read_nu;

int main(int argc, char *argv[])
{
    fd = open(SCANNER_DEV, O_RDONLY);//打开usb扫描枪设备
    if (fd < 0)
    { 
        perror("can not open device usbscanner!"); 
        exit(1); 
    } 
    int i = 0;
    printf("--fd:%d--\n",fd);
    while(1)
    {
        while(read(fd,&buff,sizeof(struct input_event))==0)
        {
            ;
        }
        printf("type:%d code:%d value:%d\n",buff.type,buff.code,buff.value); 
    }
    close(fd); 
    return 1;
}

其中关键结构体input_event,在“linux/input.h”中有定义

struct input_event
{
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};

type:设备类型,如0表示是键盘,1表示是鼠标,和其他等;
code:键码值;
value:对于不同的类型设备,该值有不同的含义;对于键盘设备来说,0表示未按下(松开),1表示按下,2表示一直按下。
详细的“input_event”参考后面参考链接文章。

3.参考

[1] http://blog.csdn.net/bingqingsuimeng/article/details/8178122