安卓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 應爲0x2D000x2D01,配件可以使用自己的通信協議通過批量傳輸端點 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 the
                device 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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章