Linux下读取USB扫描枪数据
1.USB扫描枪
USB接口的扫描枪相当于键盘输入,在Windows或者Linux下,在成功安装驱动的前提下,打开文件编辑器如word、txt等。扫描枪读出到条码数据时,数据即被捕获到光标处。
2.Linux下读取数据
2.1扫描枪设备
USB扫描枪相当于一个键盘输入设备,Windows或者Linux下都集成相关驱动,或者免驱动。基于ARM下的Linux系统,接入扫描枪,在“/dev/input”目录下可以查看该事件设备,如图,我这边的是“event1”。
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