python - 如何使用 python/pywinusb 将隐藏数据发送到设备?

标签 python usb hid pywinusb

我正在尝试使用 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

最佳答案

这是我的代码,它适用于运行 TI 数据管道 USB 堆栈的 MSP430F 芯片。这基本上是隐藏的输入和输出端点,它们充当自定义数据管道,允许我以我想要的任何格式发送 64 个字节,除了第一个字节是 ID 号(由 TI 定义)十进制 63,第二个字节是数据包(最大 64 字节数据包)中相关或有用的字节数,前两个字节如上所述。我花了一段时间才弄明白这一点,主要是因为缺乏文档。 pywinusb 附带的几个示例充其量也很难学习。无论如何,这是我的代码。它正在与我的微型计算机一起使用,因此这应该对您有所帮助。

        filter = hid.HidDeviceFilter(vendor_id = 0x2048, product_id = 0x0302)
    hid_device = filter.get_devices()
    device = hid_device[0]
    device.open()
    print(hid_device)


    target_usage = hid.get_full_usage_id(0x00, 0x3f)
    device.set_raw_data_handler(sample_handler)
    print(target_usage)


    report = device.find_output_reports()

    print(report)
    print(report[0])

    buffer = [0xFF]*64
    buffer[0] = 63

    print(buffer)

    report[0].set_raw_data(buffer)
    report[0].send()

这里有一个地方可能会把你搞砸:

out_report = device.find_output_reports()[0]

尝试使用末尾没有“[0]”的“out_report = device.find_output_reports()”。 然后使用

out_report[0].set_raw_data(buffer)

最后

out_report[0].send()

希望这对你有帮助。

关于python - 如何使用 python/pywinusb 将隐藏数据发送到设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16357756/

相关文章:

bash - USB 供应商和产品 ID 到设备绑定(bind)

usb - 包含输入和输出使用情况的 USB HID 报告如何工作?

usb - 简单的操纵杆隐藏报告描述符不起作用

windows - WinUSB 应用程序或用户模式驱动程序作为 USB 分析/嗅探器/趋势的过滤驱动程序

使用 USB 在 PC 应用程序和 iPhone 应用程序之间进行 iPhone 交互

c++ - 如何在 Linux 上使用 Qt 读取 HID 设备 (/dev/hidrawX)?

python pandas groupby排序和连接

python - cvCaptureFromCAM(CV_CAP_ANY) 返回 NULL

python - 用于 Python 的 RPC 库

python 循环导入再次(也就是这个设计有什么问题)