linux上插入一个usb设备,遍历发现其使用了两个节点(hidraw0和hidraw1)
使用open_path参数写hidraw0 可以成功打开, 使用hidraw1不可以
这个就很奇怪了,因为使用 hidapi 的 hid_enumerate 接口遍历说占用了2个hidraw,
难办的是,如果我有多个相同 vendor_id 、product_id 的设备要控制, 通过 hid_enumerate 就有点混乱了
有什么可行的方案吗?
上面说的插一个usb能遍历出2个(1个是无效的),为什么会这样?
hid_device_info结构体成员next不是指向下一个设备的指针吗?
我的部分代码
hid_device_info *info = hid_enumerate(vendor_id, product_id);
hid_device_info *first = info;
for(;info != nullptr; info = info->next) {
cout << "info: " << hex << info << endl;
cout << "path: " << info->path << endl;
cout << "vendor_id: 0x" << hex << info->vendor_id << endl;
cout << "product_id: 0x" << hex << info->product_id << endl;
}
可以参考下面的方案,可行还请采纳:
如果你有多个相同的vendor_id和product_id的设备,你可以通过枚举它们并且通过 serial_number 或者其他特征来区分它们。在调用 hid_open_path() 时可以指定特定的设备,以确保你正在控制正确的设备。
关于你遍历到的两个 hidraw 节点,可能是因为该设备的报告描述符存在多个,或者是因为该设备是一个复杂的设备,包含多个互相独立的功能(每个功能对应一个节点)。你可以通过读取该设备的报告描述符来了解更多信息,以确保你使用的是正确的节点。
不知道你这个问题是否已经解决, 如果还没有解决的话: