2013-06-21 22 views
11

Come utilizzare correttamente libusb per comunicare con dispositivi USB collegati?Come utilizzare correttamente libusb per comunicare con dispositivi USB collegati?

In particolare, come faccio a trasferire i dati ai dispositivi USB, ricevere informazioni dai dispositivi, scoprire il nome del dispositivo collegato, se hanno lo stoccaggio, ecc

Più in particolare, sarò in esecuzione questo su un computer Mac   OS  , quindi so che non posso usare solo i file di intestazione di Windows.

Se c'è una buona spiegazione sui dispositivi libusb e USB, sarebbe utile anche.

risposta

6

Here è un post su una questione analoga che potrebbe essere utile a voi. Includo molti link

Ma forse preferiresti vederlo qui. Quindi in tal caso, ecco qui!

Libusb consente di enumerare i dispositivi e selezionare quello desiderato in base a un ID fornitore/prodotto specifico (ID V/P). Se non lo sai e non riesci a trovarlo online con la descrizione del prodotto, puoi facilmente trovarlo.

Se non è online, è necessario utilizzare un'app simile a lsusb su Linux. (Non credo che sia su Mac.) Quando si esegue lsusb elenca i dispositivi connessi e i loro ID V/P. Puoi facilmente trovare il tuo dispositivo scollegando, eseguendo lsusb e ricollegando il dispositivo e confrontando. È un pezzo di torta. Si spera che qualsiasi app della lista USB su Mac visualizzi l'ID V/P come fa lsusb.

Poi, una volta che hai questo ID V/P che si intende utilizzare libusb (se si utilizza 0,1) per enumerare tutti i dispositivi e trovare il dispositivo che corrisponde a quella id. (Sostengo l'uso di libusbx che ha una singola funzione di ricerca basata su ID V/P - infatti, libusbx è molto più conciso tutto intorno.)

Dopo aver selezionato il dispositivo, si invierà un pacchetto utilizzando uno dei due Funzionalità o rapporti di uscita. Questa è la parte più complicata perché il pacchetto che invii dipende dal singolo dispositivo in cui credo. Si tratta di 8 byte di dati e solo uno dei quali è un singolo carattere che si desidera inviare al dispositivo USB. (Se si desidera inviare 8 caratteri, è necessario eseguire il ciclo di una serie di caratteri e inviare una funzionalità o un report di output per ciascun carattere.)

Come esempio, si senta libero di fare riferimento a un terminale piuttosto specifico example che ho scritto per controllando due LED. Se è utile, fantastico! Esso contiene una libusbx e libusb-0.1 esempio.

Spero che questo aiuti!

+0

Invece di lsusb, su un Mac (di cui è interessato il post originale) è possibile eseguire 'system_profiler SPUSBDataType' per ottenere ID fornitore e ID prodotto. –

+0

So che questo è datato, ma cosa faresti nel caso di più dispositivi? In altre parole, dire che ho due lettori RFID collegati dello stesso tipo e produttore? – audiFanatic

1

Il processo che è possibile seguire è:

  1. Prendi il VID, PID per il dispositivo che si desidera comunicare utilizzando lsusb
  2. tentare di aprire il dispositivo e leggere il descrittore di dispositivo
  3. Se si desidera nome del dispositivo descrittore di utilizzo di stringa per ottenere che
  4. Verificare eventuali driver del kernel è collegato. Se lo è, quindi staccare e fare un po 'di trasferimento dati grezzi
  5. Dopo aver ottenuto la risposta ancora una volta ri-collegare il driver.