gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:31:15 32 4
gpt4 key购买 nike

我正在考虑如何创建一个多线程应用程序以使用 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;
}

关于c - 是否可以使用 libusb 创建到同一 USB 设备的多个连接实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49153357/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com