HIDAPI 找不到且无法连接到 USB HID 设备



我正在尝试使用python和hidapi模块控制USB HID设备(气象站的射频收发器加密狗),但我无法打开该设备,也无法在使用hid.enumerate时显示。

我能够使用pyusb找到并连接到设备,并查看描述符,我注意到接口类是0x03 (HID),但设备类也是0x03而不是0x00(在接口指定),因为我已经阅读了它应该是。

此设备是否不符合HID规格,是否仅此原因hidapi无法找到该设备?否则,据我所知,该设备似乎表现得像一个普通的HID设备,我能够使用pyusb和控制传输从接口读取HID描述符。

是否有一种方法可以让hidapi连接到设备并忽略错误的设备类(如果这是问题)?如果可能的话,我更愿意使用更专业的hidapi,而不是使用pyusb。

DEVICE ID 6666:5555 on Bus 001 Address 001 =================
bLength                :   0x12 (18 bytes)
bDescriptorType        :    0x1 Device
bcdUSB                 :  0x200 USB 2.0
bDeviceClass           :    0x3 
bDeviceSubClass        :    0x0
bDeviceProtocol        :   0xff
bMaxPacketSize0        :   0x40 (64 bytes)
idVendor               : 0x6666
idProduct              : 0x5555
bcdDevice              :  0x100 Device 1.0
iManufacturer          :    0x1 LA CROSSE TECHNOLOGY
iProduct               :    0x2 Weather Direct Light Wireless Device
iSerialNumber          :    0x3 0123456
bNumConfigurations     :    0x1
CONFIGURATION 1: 30 mA ===================================
bLength              :    0x9 (9 bytes)
bDescriptorType      :    0x2 Configuration
wTotalLength         :   0x22 (34 bytes)
bNumInterfaces       :    0x1
bConfigurationValue  :    0x1
iConfiguration       :    0x0 
bmAttributes         :   0x80 Bus Powered
bMaxPower            :    0xf (30 mA)
INTERFACE 0: Human Interface Device ====================
bLength            :    0x9 (9 bytes)
bDescriptorType    :    0x4 Interface
bInterfaceNumber   :    0x0
bAlternateSetting  :    0x0
bNumEndpoints      :    0x1
bInterfaceClass    :    0x3 Human Interface Device
bInterfaceSubClass :    0x0
bInterfaceProtocol :    0x0
iInterface         :    0x0 
ENDPOINT 0x81: Interrupt IN ==========================
bLength          :    0x7 (7 bytes)
bDescriptorType  :    0x5 Endpoint
bEndpointAddress :   0x81 IN
bmAttributes     :    0x3 Interrupt
wMaxPacketSize   :   0x40 (64 bytes)
bInterval        :   0x20

根据HID规范和USB定义的类代码列表-bDeviceClass确实不应该是0x3:

注意设备描述符中的bDeviceClass和bDeviceSubClass字段不应用于标识属于HID类的设备。在接口描述符中使用bInterfaceClass和bInterfaceSubClass字段。

这确实会导致操作系统对该设备的错误解释。我可以假设的唯一解决方案是自定义驱动程序,它将包装此设备并修补其USB设备描述符。下面是一个这样的驱动程序的例子:https://github.com/microsoft/Windows-driver-samples/tree/main/hid/hidusbfx2

相关内容

  • 没有找到相关文章

最新更新