我想在 OS X 上使用 Python 从 USB HID 扫描仪读取字符串。下面的示例是我的起点,我已经能够为我的扫描仪定制代码:我已经能够执行命令:h.open () 成功并打印出制造商和产品字符串。扫描代码已通过扫描仪与 EVDEV 进行验证。
挑战在于解释返回的数据并将其映射回 ascii 字符串。
from __future__ import print_function
import hid
import time
print("Opening the device")
h = hid.device()
h.open(1118, 2048) # A Microsoft wireless combo keyboard & mouse
print("Manufacturer: %s" % h.get_manufacturer_string())
print("Product: %s" % h.get_product_string())
print("Serial No: %s" % h.get_serial_number_string())
try:
while True:
d = h.read(64)
if d:
print('read: "{}"'.format(d))
finally:
print("Closing the device")
h.close()
$ sudo python try.py
输出:
Opening the device
Manufacturer: Microsoft
Product: Microsoft® Nano Transceiver v2.0
Serial No: None
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
--8<-- snip lots of repeated lines --8<--
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 7, 0, 0, 0]"
read: "[0, 0, 4, 9, 7, 0, 0, 0]"
read: "[0, 0, 7, 0, 0, 0, 0, 0]"
^Closing the device
Traceback (most recent call last):
File "try.py", line 17, in <module>
d = h.read(64)
KeyboardInterrupt
问题
我找不到好的例子(比如用 EVDEV 找到的例子)。任何指向等效项的链接都会非常有帮助。 在没有良好文档的情况下解释输出是一个挑战。 h.read() 返回一个列表
为什么 h.read() 选择 64?
d = h.read(64)
当 64 替换为 1,2,3...8 中的数字时,列表中的元素数相同。9 个或更多结果是 8 个元素的列表。
为什么变量 'd' 是 8 个元素的输出列表?(8 没有在任何地方指定)
print('read: "{}"'.format(d))
每个打印的输出列表代表什么?1个打字字符?
输出列表中的每一列代表什么\encode?
是否有已发布的表格将数字映射到键盘?
我期待回复:如果您有使用 HIDAPI(尤其是 Python)的经验,请在您的回答中说明这一点。进入双倍奖励回合以获得 HID 扫描仪体验