微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

libusb 相当于 PyUSB usb.util.find_descriptor

如何解决libusb 相当于 PyUSB usb.util.find_descriptor

PyUSB 有一个名为 usb.util.find_descriptor 的小实用函数,顾名思义,它允许我搜索具有特定条件的描述,例如:

ep = usb.util.find_descriptor(
    intf,# match the first OUT endpoint
    custom_match = \
    lambda e: \
        usb.util.endpoint_direction(e.bEndpointAddress) == \
        usb.util.ENDPOINT_OUT)

我需要在使用 libusb 构建的 C++ 应用程序中使用相同的功能。但是我在 libusb API specification 中没有看到任何类似的东西。在 libusb 之上实现相同功能的最简单方法是什么?

我使用的是 Linux,如果这有区别的话。但是,除非严格要求,否则我宁愿不添加任何额外的依赖项。

更新

这是我目前所拥有的:

  libusb_config_descriptor* config;
  int ret = libusb_get_config_descriptor(m_dev,0 /* config_index */,&config);
  if (ret != LIBUSB_SUCCESS) {
    raise_exception(std::runtime_error,"libusb_get_config_descriptor() Failed: " << usb_strerror(ret));
  }

  // Do not assume endpoint_in is 1
  const libusb_interface *interface = config->interface;
  const libusb_interface_descriptor configuration = interface->altsetting[0];
  for(int i = 0; i < configuration.bNumEndpoints; ++i) {
    const libusb_endpoint_descriptor endpoint = configuration.endpoint[i];

    if ((endpoint.bEndpointAddress & LIBUSB_ENDPOINT_IN) == LIBUSB_ENDPOINT_IN) {
      endpoint_in = endpoint.bEndpointAddress >> 8; // 3 first bytes
      log_debug("endpoint_in: " << endpoint_in); 
    }
  }

迭代就是这样工作的,尽管它看起来很丑陋,而且大部分是不可重用的。此外,使用以下命令提取端点编号:

endpoint_in = endpoint.bEndpointAddress >> 8; // 3 first bytes

似乎不起作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。