2017-04-11 124 views
1

下面是两行代码执行在C++中使用的libusb中断传输:移植的libusb代码到Python:中断传输

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?

回答

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来查询来自其指定端点的数据0

在后台PyUSB

使用相同的功能(write())为散装中断同步传输,只有有特殊的语法控制转移。 interruptWrite()interruptRead()也使用write()功能抽象底层的原生USB转院类型

USB传输有四种口味:批量,中断,同步和 控制。 [...]

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

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

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

一般设备只在中断传输的答案,如果有未决中断

,所以主机轮询,用于与中断传送中断的装置。这在发送中断请求(传送)并等待接收答案的C++代码中变得明显。

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