知道USB设备的端点

时间:2013-05-07 20:53:04

标签: endpoint libusb

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

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

2 个答案:

答案 0 :(得分:9)

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

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

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

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

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

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

答案 1 :(得分:5)

我终于在lubusb-1.0中找到了答案。 In实际上不是一个函数,而是一个struct字段:

  

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。