我正在考虑如何创建一个多线程应用程序,使用libusb将非顺序消息发送到USB设备。
这两个选项是:
创建单个USB设备连接并具有多个线程 分享那个单一的连接?
创建多个libusb连接到同一设备允许 每个线程都有自己的连接?
(1)应该可以在相关的libusb调用上使用一些同步互斥。
我不确定(2)是否可能 - 如果可能,它可能更容易实现?
这是问题的背景,但具体问题是:
是否可以使用libusb为同一USB设备创建多个连接实例?
答案 0 :(得分:0)
请参阅下面的小型但完整的C程序,证明可以与同一USB设备建立多个连接。
如果要使用它,则必须为您的设备适当修改VID和PID值。还假设设备根据来自主机的控制请求进行批量传输。
检查r_1
和r_2
libusb_bulk_transfer
调用buf
值表示使用两个USB句柄的批量传输已成功完成,即每个传输中都存在预期的数据包数据
/**
* \brief test whether it is possible to have two connections to same usb device
*/
#include <stdio.h>
#include <libusb-1.0/libusb.h>
int main()
{
int r_1;
int r_2;
libusb_device_handle *handle_1;
libusb_device_handle *handle_2;
uint8_t bmRequestType = 0x40 | 0x00| 0x00;
uint8_t bRequest = 0x90;
unsigned char buf[12008];
int n;
r_1 = libusb_init(NULL);
r_2 = libusb_init(NULL);
handle_1 = libusb_open_device_with_vid_pid(NULL, 0xFFFF, 0x0001);
handle_2 = libusb_open_device_with_vid_pid(NULL, 0xFFFF, 0x0001);
libusb_claim_interface(handle_1, 0);
libusb_claim_interface(handle_2, 0);
r_1 = libusb_control_transfer(handle_1, bmRequestType,
bRequest, 0, 0, NULL,
0, 5000);
r_1 = libusb_bulk_transfer(handle_1, 129,
buf, 12008, &n,
5000);
r_2 = libusb_control_transfer(handle_2, bmRequestType,
bRequest, 0, 0, NULL,
0, 5000);
r_2 = libusb_bulk_transfer(handle_2, 129,
buf, 12008, &n,
5000);
printf("All Done!\n");
return 0;
}