C 是否可以使用libusb创建到同一USB设备的多个连接实例?
我正在考虑如何创建一个多线程应用程序,使用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设备的多个连接实例?请参阅下面的一个小而完整的C程序,该程序可以证明到同一USB设备有多个连接 如果您想使用它,您必须为您的设备适当地修改VID和PID值。还有一种假设,即设备根据主机的控制请求进行批量传输 检查
r_1
和r_2
libusb_bulk_transfer
callbuf
值表明使用两个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
没有意义