【发布时间】:2013-05-01 22:57:03
【问题描述】:
是否有 bash 命令、程序或 libusb 函数(虽然我没有找到)指示 USB 设备的 OUT 或 IN 端点是什么?
例如,libusb_interface_descriptor(来自 libusb1.0 库)的 bNumEndpoints 显示我的 USB 驱动器有 3 个端点,但我怎么知道它们的 idnumber 是多少?
【问题讨论】:
是否有 bash 命令、程序或 libusb 函数(虽然我没有找到)指示 USB 设备的 OUT 或 IN 端点是什么?
例如,libusb_interface_descriptor(来自 libusb1.0 库)的 bNumEndpoints 显示我的 USB 驱动器有 3 个端点,但我怎么知道它们的 idnumber 是多少?
【问题讨论】:
在您认领设备后,运行以下命令(其中 $ 代表终端入口点):
$ sudo lsusb -v -d 16c0:05df
其中 16c0:05df 是您的供应商和产品 ID,以冒号分隔。 (如果您不知道这些,请输入 lsusb 并通过拔下并重新运行 lsusb 来确定您的设备)
如果您感到困惑,请使用 lsusb 手册页:
http://linux.die.net/man/8/lsusb
然后,一旦您的描述出现,找到标有 bEndpointAddress 的行,下面的十六进制代码将是该特定报告的端点。
【讨论】:
终于在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。
【讨论】: