我有一个相当简单的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库。我只想做这项工作,看起来似乎并不那么艰难,但它一直都是。
有人可以告诉我这是什么我在这里做错了吗?
感谢。
另外,我尝试跟踪错误调用,并在程序刚刚关闭之前做到这一点,这有点令人沮丧。
答案 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()
的函数调用序列对我不起作用。