这是两行代码,使用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中执行相同的操作?
最佳答案
有函数interruptWrite(self, endpoint, buffer, timeout = 100)
和interruptRead(self, endpoint, size, timeout = 100)
,请参见
https://github.com/walac/pyusb/blob/master/usb/legacy.pyinterruptRead()
函数类似于C++代码(轮询设备以进行中断,从设备的中断IN端点接收中断数据)
C++中的LIBUSB_ENDPOINT_IN | USB_INTERFACE_OUT
(|
是按位OR)类似于使用指定的USB中断接口(interface)USB_INTERFACE_OUT
从其指定的端点LIBUSB_ENDPOINT_IN
查询数据
在后台,PyUSB使用相同的功能(write()
)进行批量,中断和同步传输,只有控制传输具有特殊的语法。 interruptWrite()
和interruptRead()
也使用write()
函数抽象基础的本机USB传输器类型
来源:https://github.com/walac/pyusb/blob/master/docs/tutorial.rst
通常,设备只有在有未决的中断时才响应中断传输,因此主机会通过中断传输来轮询设备以查找中断。这在发送中断请求(传输)并等待接收答案的C++代码中变得很明显
http://mvidner.blogspot.com/2017/01/usb-communication-with-python-and-pyusb.html
关于python - 将libusb代码移植到Python:中断传输,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43351244/