我正在尝试使用pywinusb将输出报告发送到pic18f4550。该设备可以接收数据,我已经用一个C#应用程序对其进行了测试,结果运行良好。另外,我可以用pywinusb从设备读取数据,但我在尝试发送数据时遇到问题。
这是我运行的代码:
from pywinusb import hid
filter = hid.HidDeviceFilter(vendor_id = 0x0777, product_id = 0x0077)
devices = filter.get_devices()
if devices:
device = devices[0]
print "success"
device.open()
out_report = device.find_output_reports()[0]
buffer= [0x00]*65
buffer[0]=0x0
buffer[1]=0x01
buffer[2]=0x00
buffer[3]=0x01
out_report.set_raw_data(buffer)
out_report.send()
dev.close()
它会产生以下错误:
success
Traceback (most recent call last):
File "C:\Users\7User\Desktop\USB PIC18\out.py", line 24, in <module>
out_report.send()
File "build\bdist.win32\egg\pywinusb\hid\core.py", line 1451, in send
self.__prepare_raw_data()
File "build\bdist.win32\egg\pywinusb\hid\core.py", line 1406, in __prepare_raw_data
byref(self.__raw_data), self.__raw_report_size) )
File "build\bdist.win32\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
HID非常强大,但是没有人使用合适的HID枚举,HID提供了一个非常灵活(虽然不容易)的模式来描述其报表上的格式。
对于一个简单的设备,我建议开始使用一个简单的字节数组,这将为主机应用程序提供数据项的上下文。
不管怎样,原始报告又来了。。。
使用starting_data=output_report.get_raw_data()[:]对任何给定的输出报告,然后直接更改任何“raw”元素。
当然,理想情况下,您可以正确定义用法,并且可以独立更改报表项,而不必猜测位宽度和位置:-)
这是我的代码,它与运行TI的datapipe USB堆栈的MSP430F芯片一起工作。这基本上是hid输入和输出端点,它们充当自定义数据管道,允许我以任何格式发送64个字节,除了第一个字节是十进制63的ID号(由TI定义),第二个字节是数据包中相关或有用的字节数(最大64字节的数据包),前两个字节被描述上面。我花了一段时间才弄清楚,主要是因为缺少文档。pywinusb附带的几个例子顶多很难学习。总之这是我的密码。它正在与我的微,所以这应该会帮助你。
有一个地方可能会把你搞砸:
尝试使用“out_report=device.find_output_reports()”,但不要在结尾使用“[0]”。 然后使用
最后
希望这能帮到你。
相关问题 更多 >
编程相关推荐