【问题标题】:how to get a device class specific descriptor with libusb如何使用 libusb 获取设备类特定描述符
【发布时间】:2014-10-16 12:44:58
【问题描述】:

我正在使用 libusb,我需要获取我正在使用的硬件的设备类特定描述符。

我没有找到任何可以帮助我的功能,有人知道如何做到这一点吗?

谢谢。

【问题讨论】:

  • 你有没有参考这里的 libusb 文档 -> libusb.org?
  • 我认为有一个函数int libusb_get_device_descriptor (libusb_device *dev, struct libusb_device_descriptor *desc) 可以解决您的目的。预期的输出是什么?
  • 我也看到了那个函数,但是它返回一个代表标准 USB 设备描述符的结构,它没有与我正在处理的硬件相关的信息。
  • 你能说得更具体点吗?我已经读过很多遍了。

标签: c usb libusb


【解决方案1】:

我在检查获取类特定描述符的方法时遇到了同样的情况,发现这个问题没有答案。

libusb 没有任何 API 或数据结构来检索特定于类的描述符。这可能是因为 libusb 仅设计用于处理基本的 USB 规范。为了使用 libusb 获取特定于类的描述符详细信息,每个描述符中添加了一些额外的字段。

字段:从 libusb.h 复制

/** Extra descriptors. If libusb encounters unknown endpoint descriptors,
 * it will store them here, should you wish to parse them. */
const unsigned char *extra;

/** Length of the extra descriptors, in bytes. */
int extra_length;

在 libusb_endpoint_descriptor、libusb_interface_descriptor、libusb_config_descriptor 中添加了“extra”和“extra_length”。您必须根据您的类代码(在配置级别或接口级别描述符)手动解码此内容。

您可以参考 usbutils 包中的lsusb.c 以更好地了解解码。

【讨论】:

    【解决方案2】:

    如果 libusb 没有专门的函数来获取你想要的数据,你应该能够使用 libusb_control_transfer 函数(或该函数的异步版本)来获取它。 USB 描述符都是通过控制传输获取的,因此您可以使用该函数进行适当的控制传输。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多