Determinazione del percorso HID per il dispositivo USB HID usando libhid su Linux

StackOverflow https://stackoverflow.com/questions/1060860

  •  21-08-2019
  •  | 
  •  

Domanda

Mi interessa utilizzando libhid per accedere a un dispositivo HID personalizzato che stiamo sviluppando su un microcontrollore PIC. Sono stato in grado di ottenere con successo il codice test_libhid per l'esecuzione. Le istruzioni per la lettura e la scrittura a dispositivi che utilizzano questa libreria sono forniti come commenti nel codice test_libhid.

Ho cercato di seguire le tecniche documentate per la lettura e la scrittura, ma finora, non sono stato per leggere o scrivere sul dispositivo con successo. Ho il sospetto che il motivo può essere che il descrittore report per il dispositivo specifica una matrice di 64 byte sia per i rapporti di dati di input e output.

Ho letto i dettagli contenuti nella definizione della classe di dispositivo per la sezione HID da usb.org, e penso che ho capito come funzionano i descrittori, in generale, e come essi si traducono in percorsi HID, ma i miei tentativi di leggere e scrivere dati a il dispositivo hanno fallito.

Ho verificato che il dispositivo funziona in Windows, quindi il mio problema sembra risiedere sul lato Linux. Non credo che dovrebbe importa, ma Vorrei sottolineare che sto attualmente lavorando in una macchina virtuale VMWare, caricato con Ubuntu Server 8.04

Qualcuno può fornire alcune indicazioni su come specificare ha nascosto percorso per il seguente descrittore relazione (generato da lsusb -vvv):

Report Descriptor: (length is 29)
    Item(Global): Usage Page, data= [ 0x00 0xff ] 65280 
                        (null)
    Item(Local ): Usage, data= [ 0x01 ] 1
                        (null)
    Item(Main  ): Collection, data= [ 0x01 ] 1
                        Application
    Item(Local ): Usage Minimum, data= [ 0x01 ] 1
                        (null)
    Item(Local ): Usage Maximum, data= [ 0x40 ] 64
                        (null)
    Item(Global): Logical Minimum, data= [ 0x00 ] 0
    Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
    Item(Global): Report Size, data= [ 0x08 ] 8
    Item(Global): Report Count, data= [ 0x40 ] 64
    Item(Main  ): Input, data= [ 0x02 ] 2
                  Data Variable Absolute No_Wrap Linear
                  Preferred_State No_Null_Position Non_Volatile Bitfield
    Item(Local ): Usage Minimum, data= [ 0x01 ] 1
                        (null)
    Item(Local ): Usage Maximum, data= [ 0x40 ] 64
                        (null)
    Item(Main  ): Output, data= [ 0x02 ] 2
                        Data Variable Absolute No_Wrap Linear
                        Preferred_State No_Null_Position Non_Volatile Bitfield
    Item(Main  ): End Collection, data=none

Inoltre, quando si esegue il programma test_libhid, fa uscire l'albero di analisi come 64 voci identiche che assomigliano a questo:

path: 0xff000001.0x00000000; type: 0x80

Questi sono presumibilmente gli ingressi. Questo elenco è seguito da altri 64 voci che assomigliano a questo:

path: 0xff000001.0x00000000; type: 0x90

Ho inviato alla mailing list libhid, ma non c'è stato molta attività lì di recente, così ho pensato che vorrei portare la mia domanda qui. Se chiunque può fornire indicazioni su come deve essere specificato il percorso HID per questo rapporto di ingresso e uscita, sarebbe un grande aiuto.

Grazie.

È stato utile?

Soluzione

Dopo molti tentativi ed errori, non sono mai stato in grado di ottenere libhid di lavorare con il descrittore di rapporto per il mio dispositivo di destinazione. Ho trovato che il Device Interface HID (hiddev) ha lavorato molto bene, ed era in realtà molto facile da capire. C'è una buona PDF Reference per hiddev che consiglio vivamente. Inoltre, il file include hiddev.h in / usr / include / linux era anche molto disponibile. In Ubuntu 8.04, l'interfaccia hiddev funzionato "out of the box", senza necessità di configurazioni aggiuntive.

Speriamo che questo sarà di qualche aiuto per la prossima persona che ha problemi di interfacciamento loro dispositivo HID ad un host Linux.

Nota: il link che ho fornito per il file .PDF sopra sembra essere scomparsa. Ho pubblicato un copia del file .PDF qui . Il suo un servizio di file sharing libero, quindi sarà necessario sopportare alcune inserzioni pubblicitarie al fine di scaricarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top