2013-05-07 18 views
6

Czy istnieje polecenie bash, program lub funkcja libusb (chociaż tego nie znalazłem), która wskazuje mi, jakie są punkty końcowe OUT lub IN urządzenia usb?znać punkt końcowy urządzenia USB

Na przykład bNumEndpoints z libusb_interface_descriptor (z biblioteki libusb1.0) pokazuje, że mój dysk usb ma 3 punkty końcowe, ale skąd mogę wiedzieć, jaki jest ich numer identyfikacyjny?

Odpowiedz

4

W końcu znalazłem odpowiedź w lubusb-1.0. W rzeczywistości nie była to funkcja, ale pole struct: libusb_endpoint_descriptor

uint8_t :: bEndpointAddress

Adres końcowym opisanym przez ten deskryptor.

Bity 0: 3 to numer punktu końcowego. Bity 4: 6 są zarezerwowane. Bit 7 wskazuje kierunek, patrz libusb_endpoint_direction.

Dla każdego interfejsu na USB, po prostu musiałem napisać te linie, aby wyświetlić dostępne punkty końcowe:

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; 
} 

Gdzie epdesc jest libusb_endpoint_descriptor i interdesc jest libusb_interface_descriptor.

8

Po twierdził urządzenie, należy uruchomić ten (gdzie $ reprezentuje punkt wejścia terminala):

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

Gdzie 16c0: 05df są twoi dostawcy produktów i identyfikatory oddzielone dwukropkiem. (Jeśli nie wiesz, te, wpisz lsusb i dowiedzieć się, jakie jest twoje urządzenie poprzez odłączenie i ponowne przeprowadzenie lsusb)

Jeśli się mylić użyć strony lsusb Man:

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

Następnie po pojawieniu się opisu znajdź wiersz oznaczony bEndpointAddress, a poniższy kod szesnastkowy będzie punktem końcowym dla tego konkretnego raportu.

Powiązane problemy