2013-03-22 27 views
5

Attualmente sto lavorando a un progetto che richiede la modalità host USB in Android (utilizzando 4.2.2). Devo essere in grado di fare operazioni di file standard come elencare file e leggere da un'unità USB. Utilizzando la documentazione in modalità host, sono arrivato al punto di essere in grado di rilevare che l'unità è connessa, è la memoria di massa USB e trovare i vari endpoint.Unità USB di lettura USB OTG

Dove mi blocco è cosa fare dopo. Immagino di non capire veramente la differenza tra il controllo e il trasferimento di massa o, nel caso di trasferimenti di controllo, ciò che sta realmente accadendo. Sfortunatamente la mia conoscenza dell'USB è piuttosto limitata e sento che la documentazione è piuttosto scoraggiante.

Qualcuno può aiutarmi a guidarmi, o indirizzarmi verso un esempio funzionante per, cosa avrei bisogno di fare essenzialmente per "montare" l'unità USB? Come ho detto in precedenza ho solo bisogno di quelle operazioni sui file per elencare i file e leggerli, non scrivere. Dovrei anche menzionare che il telefono target è il Galaxy Nexus di Samsung.

Grazie

+0

Se dovessi affrontare questo, probabilmente inizierei con il codice destinato ad accedere a un dispositivo di archiviazione USB inserito in un piccolo sistema embedded a metallo nudo, in quanto potrebbe essere più facilmente portatile del sistema operativo codice del file system. Ovviamente ci sono app pubblicate che fanno questo, ma non ne sono a conoscenza che siano open source. –

+0

So che ci sono app in grado di farlo, ma come hai detto tu non riesco a trovare alcuno open source. Per esempio sul mio Galaxy S3, che non è il telefono di destinazione per questo progetto, non ho bisogno di fare nulla, basta collegarlo e funziona. Hai qualche esempio di ciò che stai suggerendo? – echaney

risposta

0

un endpoint di controllo è (di solito) usati per inviare comandi al dispositivo usb.
un endpoint di massa è (solitamente) utilizzato per trasferire i dati sul dispositivo USB.

alla rinfusa la struttura dei dati non è definita.
ma nel trasferimento di controllo viene definita la struttura dei dati.
l'host invia un pacchetto da 8 byte contenente le informazioni sul comando (come ID richiesta, parametri di comando, lunghezza dei dati da trasferire in fase dati, ecc ...). e quindi facoltativamente alcuni dati vengono ricevuti/inviati e infine l'host/dispositivo accetta il successo del comando passando allo stato. questo è tutto!
ma, i diavoli sono nei dettagli, vedere le specifiche usb. :)


tutte le memorie USB (pendrive, scheda di memoria, dischi rigidi) funzionano sulla classe di archiviazione di massa USB.

utilizzando la classe di archiviazione di massa, è possibile eseguire la lettura-scrittura della memoria ma il filesystem (ad esempio: EXT3, FAT ...) su di esso necessita di un altro driver.

quindi, essenzialmente per leggere/scrivere un file. è necessario collegare al dispositivo:

  1. il collegamento al dispositivo (l'avete fatto)
  2. identificare e prendere il controllo tramite l'interfaccia di memoria di massa
  3. scrivere un driver di archiviazione di massa
  4. filesystem write driver che legge/scrive i file utilizzando il driver di classe di archiviazione di massa
  5. utilizza l'API del driver del filesystem nel progetto.

per scrivere un driver di archiviazione di massa, è necessario leggere le specifiche clas archiviazione di massa USB http://www.usb.org/developers/docs/devclass_docs/ e probebly si sta cercando per il Bulk only

e poi, vedere il file system (s) ci si rivolge per là progettazione e specifica.(Se disponibile)


per quanto ne so, Android è il montaggio del filesystem impianto collegato alla porta USB, quindi si è probebly reinventare la ruota.


extra-nota:
alcuni file system non sono apertamente documentati (se le informazioni engg inverso esiste probely) (es: NTFS)
e alcuni filesystem sono (in parte) brevettati. (es: FAT)