2013-05-07 18 views
6

Esiste un comando bash, un programma o una funzione di libusb (anche se non ne ho trovato uno) che mi indica quali sono gli endpoint OUT o IN di un dispositivo USB?conoscere l'endpoint di un dispositivo USB

Ad esempio, bNumEndpoints di libusb_interface_descriptor (dalla libreria libusb1.0) mostra che l'unità USB ha 3 endpoint, ma come posso sapere qual è il loro numero identificativo?

risposta

4

Ho finalmente trovato la risposta in lubusb-1.0. In realtà non era una funzione, ma un campo struct:

uint8_t libusb_endpoint_descriptor :: bEndpointAddress

L'indirizzo dell'endpoint descritto da questo descrittore.

Bit 0: 3 sono il numero del punto finale. I bit 4: 6 sono riservati. Bit 7 indica direzione, vedere libusb_endpoint_direction.

Per ogni interfaccia per l'unità usb, ho pensato di scrivere queste righe per visualizzare i punti finali disponibili:

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

Dove epdesc è il libusb_endpoint_descriptor e interdesc è la libusb_interface_descriptor.

8

Dopo aver rivendicato il dispositivo, eseguire questo (dove $ rappresenta il punto di ingresso del terminale):

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

Dove 16c0: 05df sono i vostri vendor e product id separati da due punti. (Se non si conosce questi, il tipo lsusb e capire quale dispositivo è vostra scollegando e ri-esecuzione lsusb)

Se si ottiene l'uso confuso pagina lsusb man:

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

Poi una volta visualizzata la descrizione, individuare la riga con l'indicazione bEndpointAddress e il codice esadecimale che segue sarà l'endpoint per quel report specifico.

Problemi correlati