знать конечную точку usb-устройства

есть ли команда bash, программа или функция libusb (хотя я ее не нашел), которая указывает мне, что такое OUT или in конечных точек usb-устройства ?

например, bNumEndpoints libusb_interface_descriptor (из libusb1.0 library) показывает мне, что мой usb-накопитель имеет 3 конечные точки, но как я могу знать, что их idnumber ?

2 ответов


после того, как Вы потребовали устройство, запустите это (где $ представляет точку входа терминала):

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

где 16c0: 05df-идентификаторы поставщика и продукта, разделенные двоеточием. (Если вы этого не знаете, введите 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.