以下是使用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);
如何使用PyUSB在Python中执行相同的操作?
答案 0 :(得分: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
(|
是按位OR)类似于使用指定的USB中断接口USB_INTERFACE_OUT
来查询来自其指定端点的数据LIBUSB_ENDPOINT_IN
在后台PyUSB对批量,中断和等时传输使用相同的功能(write()
),仅控制传输具有特殊语法。 interruptWrite()
和interruptRead()
也使用抽象底层本机USB传输类型的write()
函数
USB有四种传输方式:批量传输,中断传输,等时传输和 控制。 [...]
控制转移是唯一具有结构化数据的转移 在规范中描述,其他人只是发送和接收原始数据 USB的观点。因此,你有不同的功能 处理控制转移,所有其他转移都由管理 相同的功能。
您通过
ctrl_transfer
方法发出控件转移。它是 用于OUT和IN传输。转移方向是 根据{{1}}参数确定。
来源:https://github.com/walac/pyusb/blob/master/docs/tutorial.rst
一般情况下,如果设备有中断挂起,则设备仅在中断传输时应答,因此主机通过中断传输轮询设备中断。这在C ++代码中变得很明显,它发送中断请求(传输)并等待接收答案
http://mvidner.blogspot.com/2017/01/usb-communication-with-python-and-pyusb.html