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

C 是否可以使用libusb创建到同一USB设备的多个连接实例?,c,multithreading,libusb-1.0,C,Multithreading,Libusb 1.0,我正在考虑如何创建一个多线程应用程序,使用libusb向USB设备发送非顺序消息 这两种选择是: 创建单个USB设备连接并具有多个线程 共享单一连接 创建到同一设备的多个libusb连接,以允许 每个线程都有自己的连接吗 (1) 应该可以在相关的libusb调用上使用一些同步互斥锁 我不确定(2)是否可行——如果可行,实现起来可能更简单 这就是问题的背景,但具体问题是: 是否可以使用libusb创建到同一USB设备的多个连接实例?请参阅下面的一个小而完整的C程序,该程序可以证明到同一USB设备有

我正在考虑如何创建一个多线程应用程序,使用libusb向USB设备发送非顺序消息

这两种选择是:

  • 创建单个USB设备连接并具有多个线程 共享单一连接

  • 创建到同一设备的多个libusb连接,以允许 每个线程都有自己的连接吗

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

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

    这就是问题的背景,但具体问题是:


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

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

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

    检查
    r_1
    r_2
    libusb_bulk_transfer
    call
    buf
    值表明使用两个USB手柄的批量传输已成功完成,即每个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;
    }
    
    /**
    *\简要测试同一usb设备是否可以有两个连接
    */
    #包括
    #包括
    int main()
    {
    int r_1;
    int r_2;
    libusb_设备_句柄*句柄_1;
    libusb_设备_句柄*句柄_2;
    uint8_t bmRequestType=0x40 | 0x00 | 0x00;
    uint8_t bRequest=0x90;
    无符号字符buf[12008];
    int n;
    r_1=libusb_init(NULL);
    r_2=libusb_init(NULL);
    handle_1=libusb_open_device_,带有_vid_pid(NULL,0xFFFF,0x0001);
    handle_2=libusb_open_device_,带有_vid_pid(NULL,0xFFFF,0x0001);
    libusb_声明_接口(句柄_1,0);
    libusb_声明_接口(句柄_2,0);
    r_1=libusb_控制_传输(句柄_1,bmRequestType,
    bRequest,0,0,NULL,
    0, 5000);
    r_1=libusb_批量传输(句柄_1,129,
    北纬1200度,
    5000);
    r_2=libusb_控制_传输(句柄_2,bmRequestType,
    bRequest,0,0,NULL,
    0, 5000);
    r_2=libusb_批量传输(句柄_2,129,
    北纬1200度,
    5000);
    printf(“全部完成!\n”);
    返回0;
    }
    
    以下内容是相关的,但相当复杂->如何将基于特定技术的技术问题(答案为真/假)视为主要基于意见的问题超出我的理解范围?两次调用
    libusb_init
    没有意义