是否可以使用 libusb 为同一个 USB 设备创建多个连接实例?

Is it possible to create multiple connection instances to same USB device using libusb?

我正在考虑如何创建多线程应用程序以使用 libusb 将非顺序消息发送到 USB 设备。

两个选项是:

  1. 创建单个 USB 设备连接并具有多个线程 共享单个连接?

  2. 创建到同一设备的多个 libusb 连接允许 每个线程都有自己的连接?

(1) 应该可以在相关的 libusb 调用上使用一些同步互斥锁。

我不确定 (2) 是否可行 - 如果可行,实施起来可能更简单?

这是问题的上下文,但具体问题是:

是否可以使用 libusb 为同一个 USB 设备创建多个连接实例?

请参阅下面的一个小而完整的 C 程序,该程序证明可以对同一 USB 设备进行多个连接。

如果您想使用它,您必须为您的设备适当地修改 VID 和 PID 值。还假设设备根据主机的控制请求进行批量传输。

检查 r_1r_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;
}