将libusb代码移植到Python:中断传输

时间:2017-04-11 16:15:30

标签: python c++ usb libusb

以下是使用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中执行相同的操作?

1 个答案:

答案 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