2012-05-06 13 views
11

Sto provando a scrivere codice Java per consentire al mio XOOM di comunicare con il nostro dispositivo incorporato via USB a cavo seriale.spiegazione su controltransfer in android per impostare la comunicazione USB

Ho usato questo chunck di codice:

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); 

So che questo è quello di inviare la richiesta di installazione sul dispositivo USB. Non capisco perché requestType è 0x21, perché requestID è 32, 34, ecc.

Secondo le specifiche qui: http://www.beyondlogic.org/usbnutshell/usb6.shtml#SetupPacket, nella richiesta di dispositivo standard, richiesta di interfaccia standard e richiesta endpoint standard, nessuno del requestType è 0x21 e nessuno del requestID è 32 o 34. C'è qualche spiegazione per questi parametri incluso il datebuffer trasmesso ??

risposta

20

Il primo byte (bmRequestType) nel pacchetto di installazione è composto da 3 campi. I primi (meno significativi) 5 bit sono il destinatario, i successivi 2 bit sono il tipo e l'ultimo bit è la direzione.

Se si ha un valore di 0x21, questo ha la rappresentazione binaria di 100001. Se lo si divide in singoli campi, questo è 0 01 00001, che corrisponde a host-a-device, classe e interfaccia, per i campi direzione, tipo e destinatario rispettivamente.

Quindi questo è un messaggio di controllo che viene inviato ad una particolare interfaccia, che è definita da alcune classi usb standard.

Dal momento che lei ha detto che questo è stato per comunicare ad un adattatore da USB a seriale, ho intenzione di assumere questo è probabilmente di essere inviato a un'interfaccia di comunicazione, come per il USB Class Definitions for Communication Devices

Per quel documento, un valore Brequest di 34 (0x22) corrisponde a un messaggio SET_CONTROL_LINE_STATE, mentre 32 (0x20) corrisponde a un messaggio SET_LINE_CODING (pagine 51 e 53), che sembra avere senso come parte del setup/inizializzazione di un dispositivo seriale.

I dettagli per ciascuno di questi messaggi sono definiti più in basso, a pagina 57 e 58.

+2

Grazie Gesù. Ora funziona. Ti voterò dopo aver ottenuto altri quattro punti nella mia reputazione. – dan

+0

Ciao. Sto usando xamarin per sviluppare un'applicazione che utilizza questo tipo di chip. In xamarin, il metodo ControlTransfer() fornisce un enum come primo parametro. Ogni volta che chiamo questa funzione con questi valori restituisce -1. ControlTransfer (UsbAddressing.Out, 0x0000, 0x0001, 0, null, 0, 5000); Potresti aiutarmi a risolvere anche questo problema? –

+1

@ a.toraby - sentiti libero di fare una domanda. Se vuoi, mandami un ping nei commenti per assicurarmi di vederlo – JesusFreke

Problemi correlati