【问题标题】:Porting libusb code to Python: interrupt transfer将 libusb 代码移植到 Python:中断传输
【发布时间】:2017-04-11 16:15:30
【问题描述】:

以下是在 C++ 中使用 libusb 执行中断传输的两行代码:

libusb_fill_interrupt_transfer(transfer_receive, handle, LIBUSB_ENDPOINT_IN | USB_INTERFACE_OUT, buffer_receive, sizeof(buffer_receive), cb_in, &usb_data, 30000);
r = libusb_submit_transfer(transfer_receive);

如何在 Python 中使用 PyUSB 做同样的事情?

【问题讨论】:

    标签: python c++ usb libusb


    【解决方案1】:

    函数有interruptWrite(self, endpoint, buffer, timeout = 100)interruptRead(self, endpoint, size, timeout = 100),见

    https://github.com/walac/pyusb/blob/master/usb/legacy.py

    interruptRead()函数类似于C++代码(轮询设备中断,从设备的中断IN端点接收中断数据)

    C++中的LIBUSB_ENDPOINT_IN | USB_INTERFACE_OUT|是按位或)类似使用指定的USB中断接口USB_INTERFACE_OUT从其指定的端点LIBUSB_ENDPOINT_IN查询数据

    在后台 PyUSB 对 bulkinterruptisochronous transfer 使用相同的功能 (write()),仅 控制转移 有特殊的语法。 interruptWrite()interruptRead() 还使用抽象底层原生 USB 传输类型的 write() 函数

    USB 有四种传输方式:批量传输、中断传输、同步传输和 控制。 [...]

    控制传输是唯一具有结构化数据的传输 在规范中描述,其他人只是发送和接收原始数据 USB的观点。正因为如此,你有不同的功能 处理控制传输,所有其他传输由 相同的功能。

    您通过ctrl_transfer 方法发出控制转移。这是 用于 OUT 和 IN 传输。传输方向为 由bmRequestType 参数确定。

    来源:https://github.com/walac/pyusb/blob/master/docs/tutorial.rst

    通常,如果设备有未决的中断,则设备只会在中断传输上响应,因此主机会通过中断传输轮询设备以查找中断。这在发送中断请求(传输)并等待接收应答的 C++ 代码中变得很明显

    http://mvidner.blogspot.com/2017/01/usb-communication-with-python-and-pyusb.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 2015-08-20
      • 2011-08-30
      相关资源
      最近更新 更多