安卓USB开发教程 五 安卓 AOA 1.0
Android Open Accessory Protocol 1.0(AOA 協議 1.0)
Android USB 配件必須遵從 Android Open Accessory(AOA)協議,該協議定義了配件如何檢測和建立與 Android 設備的通信。配件應執行以下步驟:
1. 等待并檢測連接的設備
2. 確定設備的配件模式支持
3. 嘗試以配件模式下啟動設備(如果需要)
4. 如果設備支持 AOA,與設備建立通信
以下部分介紹如何實現這些步驟。
Note:在開發通過 USB 連接到 Android 設備的新配件時,請使用?AOAv2。
等待并檢測連接的設備
配件應該連續檢查連接的 Android 設備。連接設備時,配件應確定設備是否支持配件模式。
確定配件模式支持
當連接 Android 設備時,它可以是以下三種狀態之一:
1. 支持 Android 配件模式,并已經處于配件模式。
2. 支持 Android 配件模式,但不處于配件模式。
3. 不支持 Android 配件模式。
在初始連接期間,附件應檢查連接設備的 USB 設備描述符的廠商 ID 和產品 ID。廠商 ID 應該匹配 Google 的 ID(0x18D1)。如果設備已經處于配件模式,產品 ID 應為0x2D00 或 0x2D01,配件可以使用自己的通信協議通過批量傳輸端點?establish communication with the device(設備不需要在附件模式下啟動)。
Note:0x2D00 保留給支持配件模式的 Android 設備。0x2D01 保留用于支持配件模式的設備以及 Android Debug Bridge(ADB)協議,該協議顯示了用于 ADB 協議的有兩個批量端點的第二個接口。如果你正在計算機上模擬配件,可以使用這些端點來調試配件應用程序。通常,不要使用此接口,除非配件在設備上實現到 ADB 的傳輸。
如果 USB 設備描述符中發現的廠商 ID 或產品 ID 與預期值不匹配,則配件無法確定設備是否支持 Android 配件模式。配件應嘗試以配件模式(詳細說明如下)啟動設備,以確定設備支持情況。
嘗試從配件模式啟動
如果廠商和產品 ID 與配件模式下的 Android 設備不相符,則配件無法辨別設備是否支持(支持但不處于)配件模式,或者設備是否不支持配件模式。這可能是因為支持配件模式(但不處于配件模式)的設備最初報告設備制造商廠商和產品 ID 而不是 AOA 廠商和產品 ID。
配件應嘗試以配件模式啟動設備,以確定設備是否支持該模式:
1. 發送 51 控制請求(“Get Protocol”)以確定設備是否支持 Android 配件協議。如果設備支持協議,則返回非零數字,表示支持的協議版本。控制請求在端點0上具有以下特征:
requestType: USB_DIR_IN | USB_TYPE_VENDOR request: 51 value: 0 index: 0 data: protocol version number (16 bits little endian sent from thedevice to the accessory)
2. 如果設備返回支持的協議版本,則向設備發送帶有標識字符串信息的控制請求。該信息允許設備確定適合配件的應用(或者向用戶呈現 URL 若不存在適合的應用)。控制請求位于端點0(對于每個字符串 ID),具有以下特征:
requestType: USB_DIR_OUT | USB_TYPE_VENDOR request: 52 value: 0 index: string ID data zero terminated UTF8 string sent from accessory to device
支持以下字符串ID,每個字符串的最大為256字節(必須以 \ 0 為零終止)。
manufacturer name: 0 model name: 1 description: 2 version: 3 URI: 4 serial number: 5
3. 發送控制請求,要求設備以配件模式啟動。控制請求在端點0上具有以下特征:
requestType: USB_DIR_OUT | USB_TYPE_VENDOR request: 53 value: 0 index: 0 data: none
完成這些步驟后,配件應等待連接的 USB 設備在配件模式下將其自身重新引入總線,然后重新枚舉所連接的設備。如果設備成功切換到配件模式,則通過檢查廠商和產品 ID 的算法determines accessory mode support?應該是正確的(例如,對應于Google的供應商和產品ID而不是設備制造商的ID)。如果 ID 正確,則配件移動至?establish communication with the device。
Note:AOA 當前不支持同時進行 AOA 和 MTP 連接。 要從 AOA 切換到 MTP,配件必須首先斷開 USB 設備(物理上或電氣上等效的方式),然后使用 MTP 重新連接。
如果任何步驟失敗,配件確定設備不支持 Android 配件模式,并等待下一個設備連接。
建立與設備的通信
如果配件檢測到處于配件模式的 Android 設備,則配件可以查詢設備接口和端點描述符,以獲取與設備通信的批量端點。
接口和批量端點的數量取決于產品 ID。 Android 設備有產品 ID:
1. 0x2D00?具有一個有兩個批量端點的接口,用于輸入和輸出通信。
2.?0x2D01 具有兩個接口,每個接口具有兩個批量端點,用于輸入和輸出通信。 第一個接口處理標準通信,第二個接口處理 ADB 通信。 要使用接口,請找到第一個批量輸入和輸出端點,使用 SET_CONFIGURATION(0x09)設備請求將設備配置設置為 1,然后使用端點進行通信。
原文鏈接:https://source.android.com/devices/accessories/aoa
總結
以上是生活随笔為你收集整理的安卓USB开发教程 五 安卓 AOA 1.0的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tomcat服务器启动错误之Offend
- 下一篇: 什么是跨域?跨域如何解决