2012-05-06 85 views
11

我正在嘗試編寫Java代碼,讓我的XOOM通過USB連接到我們的嵌入式設備與串行電纜。關於android中controltransfer的解釋以設置USB通訊

我用這個chunck代碼:

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

我知道這是發送建立請求USB設備。我不明白爲什麼requestType是0x21,爲什麼requestID是32,34等。

根據這裏的規格:http://www.beyondlogic.org/usbnutshell/usb6.shtml#SetupPacket,在標準設備請求中,在標準接口請求和標準端點請求中,沒有一個requestType是0x21並且requestID都不是32或34.有沒有對這些參數進行解釋,包括傳輸的數據緩衝區?

回答

20

設置數據包中的第一個字節(bmRequestType)由3個字段組成。第一個(最不重要的)5位是接收方,接下來的2位是類型,最後一位是方向。

如果您的值爲0x21,則它的二進制表示形式爲100001.如果將它分成單個字段,則這是0 01 00001,它對應於主機到設備,類和接口,分別爲方向,類型和收件人字段。

所以這是一個控制消息,被髮送到一個特定的接口,這是由一些標準的USB類定義的。

既然你提到這是對USB轉串口適配器進行通信,我會認爲這是可能被髮送到通信接口,如按照USB Class Definitions for Communication Devices

每這份文件中,bRequest值34(0x22)對應於SET_CONTROL_LINE_STATE消息,而32(0x20)對應於SET_LINE_CODING消息(第51和53頁),這似乎是串行設備設置/初始化的一部分。

這些消息的詳細信息在第57頁和第58頁進一步定義。

+2

謝謝耶穌。它現在有效。在我獲得四項榮譽後,我會給你投票。 – dan

+0

嗨。我使用xamarin來開發使用這種芯片的應用程序。在xamarin中,ControlTransfer()方法將枚舉作爲第一個參數。每次我用這些值調用這個函數時,它都會返回-1。 ControlTransfer(UsbAddressing.Out,0x0000,0x0001,0,null,0,5000);你能幫我解決這個問題嗎? –

+1

@ a.toraby - 隨時提問。如果你願意,在評論中給我發個ping,以確保我看到它 – JesusFreke