在Python中从/向USB HID设备进行简单的读/写操作?

时间:2012-10-09 14:34:23

标签: python-2.7 usb windows-7-x64 hid pywinusb

我有一个相当简单的USB HID设备,我一直试图弄清楚如何使用Python读取和写入。我已经能够使用PyWinUSB从它读取,但问题出现在我尝试写入它时。试着写信会让事情爆炸。

例如:

device = hid.HidDeviceFilter(vendor_id = 0x0003, product_id = 0x1001).get_devices()[0]

这很好用。然后阅读原始数据,这就是我现在所关心的一切(一旦我能弄清楚如何写出被诅咒的东西,我就会使用它):

def readData(data):
    print(data)
    return None

这很好用(事实上,当我看到它工作时,它非常令人兴奋)。所以我会像这样分配数据处理程序:

device.set_raw_data_handler(readData)

每次按下按钮,都很好。数据是您所期望的。哪个好极了!

当我想要写入设备时问题就出现了。 将示例simple_send文件作为模板(可能不是最佳选择)之后,我将执行以下操作:

report = device.find_output_reports()[0]

哪个会返回一个包含4个条目的字典的报表对象。那是对的吗?您是否使用output_reports对象写入设备?尝试通过将报告值设置为ANYTHING来实现:

report[<key>] = "pneumonoultramicroscopicvolcanoconiosis"
report.send()

这将继续引起我无法解释的一些令人讨厌的错误:

    Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    report.send()
  File "C:\Python27\lib\site-packages\pywinusb-0.3.1-py2.7.egg\pywinusb\hid\core.py", line 1446, in send
    self.__prepare_raw_data()
  File "C:\Python27\lib\site-packages\pywinusb-0.3.1-py2.7.egg\pywinusb\hid\core.py", line 1401, in __prepare_raw_data
    byref(self.__raw_data), self.__raw_report_size) )
  File "C:\Python27\lib\site-packages\pywinusb-0.3.1-py2.7.egg\pywinusb\hid\winapi.py", line 382, in __init__
    raise helpers.HIDError("hidP error: %s" % self.error_message_dict[error_code])
HIDError: hidP error: data index not found

我正在使用Windows 7.我设法找到(最终)HID DLL导出函数的参考,我不必(或者,就此而言真的很想)使用PyWinUSB库。我只想做这项工作,看起来似乎并不那么艰难,但它一直都是。

有人可以告诉我这是什么我在这里做错了吗?

感谢。

另外,我尝试跟踪错误调用,并在程序刚刚关闭之前做到这一点,这有点令人沮丧。

2 个答案:

答案 0 :(得分:3)

我使用了这个

    buffer= [0xFF]*33 # 33 = report size + 1 byte (report id)
    buffer[0]=0x0 # report id
    buffer[1]=0xFE
    buffer[2]=0x00
    buffer[3]=0xFF
    out_report.set_raw_data(buffer)
    out_report.send()
    dev.close()

答案 1 :(得分:0)

对我来说,只有这个:

 report.send([0x70, ..., 0x73 ])

set_raw_data([0x70, ..., 0x73)和后续send()的函数调用序列对我不起作用。