使用 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_page
和 usage
的值在所有情况下都是 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
我正在尝试编写一些 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_page
和 usage
的值在所有情况下都是 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