哇!今天超开心~ 2023-02-01 13:19 采纳率: 0%
浏览 25

hidraw 和 hidapi 的问题

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;
    }
  • 写回答

2条回答 默认 最新

  • CodeBytes 2023-02-01 13:31
    关注

    可以参考下面的方案,可行还请采纳:

    如果你有多个相同的vendor_idproduct_id的设备,你可以通过枚举它们并且通过 serial_number 或者其他特征来区分它们。在调用 hid_open_path() 时可以指定特定的设备,以确保你正在控制正确的设备。
    
    关于你遍历到的两个 hidraw 节点,可能是因为该设备的报告描述符存在多个,或者是因为该设备是一个复杂的设备,包含多个互相独立的功能(每个功能对应一个节点)。你可以通过读取该设备的报告描述符来了解更多信息,以确保你使用的是正确的节点。
    
    评论

报告相同问题?

问题事件

  • 创建了问题 2月1日