2012-12-21 19 views
7

我對Android開發相當陌生,最近我一直在探索USB主機。Android開發USB轉移

會有人能告訴我如何使用批量傳輸,這樣我可以看到一個外接攝像頭看到的東西,而是表明它在我的平板電腦?

相機:佳能PowerShot A1300 平板電腦:的Iconia A200

我環顧四周堆棧溢出和其他一些論壇,但至今尚未能找到關於如何使用批量傳輸或使用什麼常量一個很好的解釋作爲檢索某些數據的參數。

我能夠看到端點並與外部相機建立連接,但我不知道從哪裏走。

任何幫助深表謝意。

回答

14

中的Android USB主機API是相當薄的,我的意思是,一旦你已經超越枚舉接口/端點和創造它不會做更多的事情來幫助你的連接。然後,您就可以與原始USB數據傳輸進行通信,其格式取決於相機所代表的設備類別。您的請求有點像蠕蟲,所以我會盡我所能提供有用的資源。

不幸的是,存儲和媒體設備不是最簡單的設備類別來解釋,所以它可能是困難的,如果您是剛開始你的腳在USB溼一般。我可以給出的最好的建議是看看您的相機報告的接口類的設備類規格(大多數是大容量存儲或MTP),可以在這裏找到:http://www.usb.org/developers/devclass_docs

spec文檔將枚舉您需要使用命令與設備進行通信。我還建議查看USB In a Nutshell,它很好地指出如何構建USB請求,這可以幫助您將規格文檔中看到的內容映射到在UsbDeviceConnection的方法中找到的參數: http://www.beyondlogic.org/usbnutshell/usb1.shtml

最初可能會有一些控制命令需要發送到「端點0」,以便設置攝像機,然後剩下的轉移可能會發生在大量端點上。

在Android中的術語,控制請求只能被同步使用UsbDeviceConnection.controlTransfer(),這意味着該方法將阻塞,直到傳輸完成發送。填寫此方法的參數可在設備類的規格文檔中找到。

批量終端上的請求可以通過UsbDeviceConnection.bulkTransfer()或異步使用UsbRequest實例同步發送。使用UsbRequest,您可以排隊轉移,然後稍後(通過UsbDeviceConnection.requestWait())查詢結果。

我在使用主機的API做一些基本的中斷和控制轉移到得到這樣的設備描述符的信息我Github的頁面上的一些例子。也許一些,這將是對您有幫助,以及:https://github.com/devunwired/accessory-samples


隨着有關USB示例代碼關於你的問題:

在此代碼提出的要求僅僅是一個普通的「獲取配置描述符」要求所有USB設備必須響應(這是一個核心命令,而不是類特定的)。實際上,它是Android API獲取您可以查詢接口和端點信息的請求。字段值來自核心USB規範(該命令特別在3.0規範的第9.4.3和9.6.3節中定義):http://www.usb.org/developers/docs/或者您可以從Nutshell中的USB中找到更有幫助的說明,其中有更多一點討論:http://www.beyondlogic.org/usbnutshell/usb5.shtml#ConfigurationDescriptors

長度有點隨意,這告訴驅動程序有多少字節讀取或寫入。大多數USB主機驅動程序將首先查詢設備描述符,其中包括一個字段,告訴主機設備支持的最大數據包大小,然後將該大小用作未來請求的長度。一個全功能的驅動程序可能會做這個命令,然後首先檢查長度字節(描述符的wTotalLength字段)以查看緩衝區是否足夠大,如果不是,則修改/重新發送。在這個例子中,爲了簡單起見我只選擇了64,因爲這是協議定義爲可支持的「最大」最大數據包大小。

再次,然後提出您的設備必須提供的特定數據的請求,這些命令將在特定的類文檔中找到,而不是核心規範。

+0

我曾經在beyondlogic網站上偷看過,並且在解釋很多內容時遇到了一些麻煩,並且無法找到與android部分的關係。 我發現該設備被認爲是 public static final int USB_CLASS_STILL_IMAGE 我將深入研究spec pdf,看看我能找到什麼! 再次感謝,(希望我不會卡住!) –

+0

我發現標準設備請求的實用性有點麻煩,因爲它們似乎只是爲設備提供元數據。我讀錯了嗎? 我記下了類,子類和協議代碼以及各自的端點數據,但尚未發現任何相關命令以將相機發送給設備的相關命令。 –

+0

以下信息將在設備類規範文檔中找到。靜止圖像列在我鏈接的網站上,或者這裏是直接鏈接到該類文檔。具體而言,第7節討論了使用圖像捕獲的工作流程:http://www.usb.org/developers/devclass_docs/usb_still_img10.pdf – Devunwired