знать конечную точку 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.