【问题标题】:know a usb device's endpoint知道 USB 设备的端点
【发布时间】:2013-05-01 22:57:03
【问题描述】:

是否有 bash 命令、程序或 libusb 函数(虽然我没有找到)指示 USB 设备的 OUT 或 IN 端点是什么?

例如,libusb_interface_descriptor(来自 libusb1.0 库)的 bNumEndpoints 显示我的 USB 驱动器有 3 个端点,但我怎么知道它们的 idnumber 是多少?

【问题讨论】:

    标签: endpoint libusb


    【解决方案1】:

    在您认领设备后,运行以下命令(其中 $ 代表终端入口点):

    $ sudo lsusb -v -d 16c0:05df
    

    其中 16c0:05df 是您的供应商和产品 ID,以冒号分隔。 (如果您不知道这些,请输入 lsusb 并通过拔下并重新运行 lsusb 来确定您的设备)

    如果您感到困惑,请使用 lsusb 手册页:

    http://linux.die.net/man/8/lsusb

    然后,一旦您的描述出现,找到标有 bEndpointAddress 的行,下面的十六进制代码将是该特定报告的端点。

    【讨论】:

      【解决方案2】:

      终于在lubusb-1.0中找到了答案。 in 实际上不是一个函数,而是一个结构体字段:

      uint8_t libusb_endpoint_descriptor::bEndpointAddress

      此描述符所描述的端点的地址。

      位 0:3 是端点编号。位 4:6 被保留。位 7 指示方向,参见 libusb_endpoint_direction。

      对于 USB 驱动器的每个接口,我只需要编写这些行来显示可用的端点:

      cout<<"Number of endpoints: "<<(int)interdesc->bNumEndpoints<<endl;
      for(int k=0; k<(int)interdesc->bNumEndpoints; k++) {
              epdesc = &interdesc->endpoint[k];
              cout<<"Descriptor Type: "<<(int)epdesc->bDescriptorType<<endl;
          cout<<"EP Address: "<<(int)epdesc->bEndpointAddress<<endl;
      }
      

      其中 epdesc 是 libusb_endpoint_descriptor,interdesc 是 libusb_interface_descriptor。

      【讨论】:

      • 很棒的代码 sn-p/example,谢谢!我讨厌像 libusb 那样自动生成的文档,它遍历每个结构的每个字段,但没有说明或示例首先如何获取结构。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 2017-09-29
      • 2013-10-07
      • 2013-08-06
      • 1970-01-01
      • 2019-10-02
      相关资源
      最近更新 更多