我有一个连接到我的linux系统的QR /条形码扫描器,它作为/ dev / hidraw1设备。
如果我ls -la /dev/hidraw*
我得到了
crw------- 1 root root 248, 0 May 5 10:18 /dev/hidraw0
crw------- 1 root root 248, 1 May 5 11:05 /dev/hidraw1
每当我尝试使用cat /dev/hidraw1
命令从此设备读取时,我会获得大量垃圾数据以及编码数据,但它也不会以格式化方式出现。这是QR码之一的输出
68<,?
.4xml ve7'rsion4="1
..0"4 encod-%in4876g=
"UTF-8"?><PrintLetterB,
.arcod4e&D!'ata"&% ' uid=$"12345,.678",name=
"Rohit 4Ka,
poo.44r,."4 gend&& er=4"M,."4 yob=8"319,93" co
="S
,/O:
Mukesh 4,
为什么它没有连续可读的字符串,改变波特率也没有任何区别。 Here is the screenshot attached
答案 0 :(得分:0)
你的是HID设备,而不是RS-232设备。它使用的协议是二进制。每次read()
来自设备时,您真正得到的是HID报告,而不是文本行。
报告的格式因设备而异。 HID规范要求设备发布描述报告格式的HID报告描述符。这很复杂,但如果您只想使用这个特定的设备,您可以查看阅读报告,并尝试推断它的含义。
根据我的经验,条形码扫描仪通常包含一个小标题,然后是有效负载数据。标题通常包含条形码类型和数据长度的字段。由于报告大小是固定的,但条形码是任意长的,长条形码被分成多个报告,所以还有标志来表示这是第一个,连续的还是最后一个块。
如果您要发布设备的转储,为了进一步分析,请不要使用cat
。使用hexdump -C
或od -tx1
或类似的显示正确二进制数据的内容。
答案 1 :(得分:0)
大多数扫描仪可以配置为HID设备或USB CDC设备。请查看扫描仪的手册,例如&#34; USB接口配置&#34;并查看是否可以将其设置为USB CDC(或USB Com端口仿真)。如果可以,它将作为/ dev / ttyACM *附加在linux上,并提供数据作为串行流,更容易阅读。