2013-03-22 18 views
5

Ich arbeite derzeit an einem Projekt, das Usb-Host-Modus in Android erfordert (mit 4.2.2). Ich muss in der Lage sein, Standard-Dateioperationen wie das Auflisten von Dateien und das Lesen von einem USB-Laufwerk durchzuführen. Mit Hilfe der Dokumentation zum Host-Modus ist es mir gelungen, das angeschlossene Laufwerk zu erkennen, USB-Massenspeicher zu verwenden und die verschiedenen Endpunkte zu finden.Android USB OTG USB-Laufwerk lesen

Wo ich stecken bleibe ist was danach zu tun. Ich denke, ich verstehe nicht wirklich den Unterschied zwischen Kontroll- und Massentransfers oder im Fall von Kontrolltransfers, was wirklich passiert. Leider ist mein Wissen über USB selbst etwas begrenzt und ich höre die Dokumentation ist ziemlich entmutigend.

Kann mir jemand helfen, mich durch zu führen, oder zeigen Sie mir ein funktionierendes Beispiel für, was ich tun müsste, um das USB-Laufwerk im Wesentlichen zu "mounten"? Wie ich bereits sagte, brauche ich nur diese Dateioperationen von Auflistungsdateien und sie zu lesen, nicht zu schreiben. Ich sollte auch erwähnen, dass das Zieltelefon das Galaxy Nexus von Samsung ist.

Dank

+0

Wenn ich das angehen würde, würde ich wahrscheinlich mit Code beginnen, der auf ein USB-Speichergerät zugreifen soll, das in ein kleines Bare-Metal-Embedded-System eingesteckt ist, da dieses portabler ist als das Betriebssystem Dateisystemcode. Es gibt natürlich veröffentlichte Apps, die dies tun, aber ich bin mir nicht bewusst, dass das Open Source ist. –

+0

Ich weiß, dass es Apps gibt, die das können, aber wie du gesagt hast, kann ich keine Open-Source-Programme finden. Zum Beispiel auf meinem Galaxy S3, das nicht das Zieltelefon für dieses Projekt ist, muss ich nichts tun, nur einstecken und es funktioniert. Hast du Beispiele dafür, was du vorschlägst? – echaney

Antwort

0

ein Steuer Endpunkt wird (in der Regel) verwendet, um Befehle zum USB-Gerät zu senden.
Ein Bulk-Endpunkt wird (normalerweise) zum Übertragen von Daten an ein USB-Gerät verwendet.

in großen Mengen ist die Struktur der Daten nicht definiert.
aber in Steuerelementübertragung ist die Struktur der Daten definiert.
Der Host sendet ein 8-Byte-Paket, das die Informationen über den Befehl enthält (wie Anforderungs-ID, Befehlsparameter, Länge der Daten, die in der Datenstufe übertragen werden sollen usw.). und dann werden optional einige Daten empfangen/gesendet, und schließlich stimmt der Host/das Gerät dem Erfolg des Befehls zu, indem er zur Statusstufe übergeht. das ist es!
aber Teufel ist in den Details, siehe USB-Spezifikation. :)

Alle USB-Speicher (pendrives, Speicherkarte, Festplatten) arbeiten an der USB-Massenspeicherklasse.

Mit der Massenspeicherklasse können Sie Speicher lesen und schreiben, aber das Dateisystem (zB: EXT3, FAT ...) benötigt einen weiteren Treiber.

so, im Wesentlichen zum Lesen/Schreiben einer Datei. müssen Sie an das Gerät anschließen:

  1. an das Gerät anschließen (Sie haben es geschafft)
  2. identifizieren und
  3. schreiben einen Massenspeicher-Klasse-Treiber
  4. Schreibdateisystem Kontrolle über die Massenspeicherschnittstelle nehmen Treiber, der Dateien mit dem Massenspeicherklassentreiber
  5. lesen/schreiben wird, verwenden Sie den Dateisystemtreiber api in Ihrem Projekt.

einen Massenspeicher-Klasse-Treiber zu schreiben, müssen Sie den USB-Massenspeicher cla Spezifikation http://www.usb.org/developers/docs/devclass_docs/ und probebly Sie suchen die Bulk only

und dann finden Sie das Dateisystem (e) Sie sind Targeting lesen für dort Design und Spezifikation.(Falls vorhanden)


AFAIK hat Android-Dateisystem Montagemöglichkeit auf USB angeschlossen, so dass Sie probebly sind, das Rad neu zu erfinden.


extra Anmerkung:
einige Dateisystem nicht offen dokumentiert (obwohl Reverse engg Informationen probely existiert) (ex: NTFS)
und einige Dateisystem (teilweise) patentiert. (ex: FAT)

Verwandte Themen