PyUSB发送HID报告


UPDATE


我pipe理它正确地发送数据。 对于任何人遇到同样的问题,我用下面的代码:

data=[0x00, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0x00, 0x00] result=dev.ctrl_transfer(0x21, 0x9, wValue=0x200, wIndex=0x00, data_or_wLength=data) 

(这是根据这里发布的答案: 链接 )

但是我不明白,为什么我要用

 bmRequestType=0x21 bRequest=0x9 wValue=0x200 

如果有人能更详细地解释,我将不胜感激。 我只是想学习。


初始请求:


我拼命地试图发送一个简单的报告到HID设备使用PyUSB

使用“SimpleHIDwrite”我确认,该设备工作正常。 我想发送这些数据:

报告ID:00

数据:[00,04,04,FF,FF,FF,00,00]

使用SimpleHIDwrite发送数据

我是相当新的Python和USB,我不知道如何使用dev.ctrl_transfer或dev.write这样做。

此外,还有一些关于发送数据到HID设备的文章,但我不知道如何解决我的问题。

请有人指点一下我的方向吗?

非常感谢你!

这里有一些更多的细节:

  # based on https://github.com/walac/pyusb/blob/master/docs/tutorial.rst import usb.core import usb.util # find our device # dev = usb.core.find(idVendor=0xfffe, idProduct=0x0001) dev = usb.core.find(idVendor=0x1781, idProduct=0x8c0) # was it found? if dev is None: raise ValueError('Device not found') dev.set_configuration() cfg=dev[0] intf=cfg[(0,0)] ep=intf[0] # dev.write(ep.bEndpointAddress, [0x00, 0x00,0x04,0x04,0xFF,0xFF,0xFF,0x00, 0x00], 1000) # dev.ctrl_transfer(bmRequestType, bRequest, wValue=0, wIndex=0, data_or_wLength=None, timeout=None) print("print ep") print(ep) print("print cfg") print(cfg) print("print intf") print(intf) 

而上面的脚本的结果是这样的:

 print ep ENDPOINT 0x81: Interrupt IN ========================== bLength : 0x7 (7 bytes) bDescriptorType : 0x5 Endpoint bEndpointAddress : 0x81 IN bmAttributes : 0x3 Interrupt wMaxPacketSize : 0x8 (8 bytes) bInterval : 0xa print cfg CONFIGURATION 1: 100 mA ================================== bLength : 0x9 (9 bytes) bDescriptorType : 0x2 Configuration wTotalLength : 0x22 (34 bytes) bNumInterfaces : 0x1 bConfigurationValue : 0x1 iConfiguration : 0x0 bmAttributes : 0x80 Bus Powered bMaxPower : 0x32 (100 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 : 0x8 (8 bytes) bInterval : 0xa print intf 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 : 0x8 (8 bytes) bInterval : 0xa Process finished with exit code 0 

Solutions Collecting From Web of "PyUSB发送HID报告"

不要使用PyUSB(除非你需要其他协议)。 管理HID并不困难,但有一个更简单的解决方案。

HIDAPI是一个管理协议的C库 ,还有一个Python包装器 。

而且,它隐藏了从操作系统取回控制权的必要性,该操作系统识别连接上的HID协议并安装它自己的驱动程序。