使用 Python 与原始 HID 设备交互?

Interacting with raw HID devices using Python?

我正在尝试编写一些 Python 代码以通过其原始 hid 接口与设备(键盘)通信。键盘向主机提供多个 HID 设备(键盘、系统键、鼠标、raw hid 等),我只能通过查看 "Usage page" 和 "Usage" 属性来识别正确的设备。

我查看了 Python hid 模块(打包在 Fedora 31 的 python3-hidapi-0.7.99.post20-13.fc31.x86_64 中),但在 hid.enumerate() 的 return 值中usage_pageusage 的值在所有情况下都是 0

>>> import hid
>>> import pprint
>>> pprint.pprint([(x['path'], x['usage_page']) for x in hid.enumerate() if x['vendor_id'] == 1240 and x['product_id'] == 61138])
[(b'0002:0010:00', 0),
 (b'0002:0010:02', 0),
 (b'0002:0010:03', 0),
 (b'0002:0010:01', 0),
 (b'0002:0010:04', 0),
 (b'0002:0010:05', 0)]

有什么方法可以从 Python 获取 usage_page 信息吗?看起来这是通过 /sys/class/hidraw/hidraw<N>/device/report_descriptor 在 sysfs 中可用的设备报告描述符中公开的,但如果可能的话,我想通过编写自己的枚举代码来避免重新发明轮子。

在后台,您的 python 应用程序使用 hidapi C 库,目前不支持在 Linux 上获取 usage/usage_page-es。

所以,回答你的直接问题:目前没有办法直接从 Python 获得 usage/usage_page ,具体来说,使用 hid图书馆。

关于添加这种现成支持的讨论很活跃: https://github.com/libusb/hidapi/pull/139