11

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

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

4

2 回答 2

14

声明设备后,运行以下命令(其中 $ 代表终端入口点):

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

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

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

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

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

于 2013-07-16T15:45:22.757 回答
8

我终于在 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。

于 2013-05-08T10:17:25.417 回答