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

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

Например, bNumEndpoints libusb_interface_descriptor (из библиотеки libusb1.0) показывает мне, что мой USB-накопитель имеет 3 конечных точки, но как я могу узнать их идентификационный номер?


person Vulpo    schedule 07.05.2013    source источник


Ответы (2)


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

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

Где 16c0:05df — идентификаторы вашего поставщика и продукта, разделенные двоеточием. (Если вы их не знаете, введите lsusb и выясните, какое устройство принадлежит вам, отключив и повторно запустив lsusb)

Если вы запутались, используйте справочную страницу lsusb:

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

Затем, как только появится ваше описание, найдите строку с надписью bEndpointAddress, и следующий шестнадцатеричный код будет конечной точкой для этого конкретного отчета.

person eatonphil    schedule 16.07.2013

Наконец-то я нашел ответ в lubusb-1.0. На самом деле это была не функция, а поле структуры:

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.

person Vulpo    schedule 08.05.2013
comment
Отличный фрагмент кода/пример, спасибо! Я ненавижу автоматически сгенерированные документы, такие как тот, который есть у libusb, он проходит через каждое поле каждой структуры, но в первую очередь нет указаний или примеров того, как получить структуру. - person Violet Giraffe; 19.05.2021