2012-05-06 5 views
11

Ich versuche, Java-Code zu schreiben, um meine XOOM mit unserem Embedded-Gerät über USB-zu-Seriell-Kabel kommunizieren zu lassen.Erklärung über Controltransfer in Android zum Einrichten der USB-Kommunikation

ich verwenden, um dieses chunck Code:

connection.controlTransfer(0x21, 34, 0, 0, null, 0, 0); 
connection.controlTransfer(0x21, 32, 0, 0, new byte[] { (byte) 0x80, 
           0x25, 0x00, 0x00, 0x00, 0x00, 0x08 }, 7, 0); 

Ich weiß, das ist die Setup-Anforderung an das USB-Gerät zu senden. Ich verstehe nicht, warum die request 0x21 ist, warum requestID 32, 34, usw.

Nach den Angaben hier: http://www.beyondlogic.org/usbnutshell/usb6.shtml#SetupPacket, in der Standard-Geräteanforderung, Standardschnittstelle Anfrage und Standard Endpunkt Anfrage keine der request ist 0x21 und keiner der requestID ist 32 oder 34. Gibt es eine Erklärung für diese Parameter einschließlich der übertragenen Datum Puffer?

Antwort

20

Das erste Byte (bmRequestType) im Setup-Paket besteht aus 3 Feldern. Die ersten (niedrigstwertigen) 5 Bits sind der Empfänger, die nächsten 2 Bits sind der Typ und das letzte Bit ist die Richtung.

Wenn Sie einen Wert von 0x21 haben, hat dieser die binäre Darstellung von 100001. Wenn Sie ihn in die einzelnen Felder aufteilen, ist dies 0 01 00001, was Host-zu-Gerät, Klasse und Schnittstelle entspricht. für die Richtung, Typ und Empfänger Felder jeweils.

Das ist also eine Steuernachricht, die an eine bestimmte Schnittstelle gesendet wird, die von einer Standard-USB-Klasse definiert ist.

Da Sie erwähnte, dass dies für zu-Seriell-Adapter an einen USB-Kommunikation, ich werde dies anzunehmen, wird wahrscheinlich zu einer Kommunikationsschnittstelle gesendet werden, gemäß den USB Class Definitions for Communication Devices

Per diesem Dokument, ein bRequest Wert 34 (0x22) entspricht einer SET_CONTROL_LINE_STATE Nachricht, während 32 (0x20) einer SET_LINE_CODING Nachricht (Seiten 51 und 53) entspricht, was im Rahmen der Einrichtung/Initialisierung eines seriellen Gerätes sinnvoll erscheint.

Die Details für jede dieser Nachrichten sind weiter unten auf den Seiten 57 und 58 definiert.

+2

Danke Jesus. Es funktioniert jetzt. Ich werde Sie wählen, nachdem ich vier weitere Punkte in meinem Ruf bekommen habe. – dan

+0

Hallo. Ich benutze Xamarin, um eine Anwendung zu entwickeln, die diese Art von Chip verwendet. In Xamarin gibt die ControlTransfer() - Methode eine Enumeration als ersten Parameter an. Jedes Mal, wenn ich diese Funktion mit diesen Werten aufrufen, wird -1 zurückgegeben. ControlTransfer (UsbAddressing.Out, 0x0000, 0x0001, 0, null, 0, 5000); Könnten Sie mir vielleicht helfen, dieses Problem zu beheben? –

+1

@ a.toraby - zögern Sie nicht, eine Frage zu stellen. Wenn Sie wollen, ping mich in den Kommentaren, um sicherzustellen, dass ich es sehe – JesusFreke

Verwandte Themen