Android USB 配件必須遵循 Android Open Accessory (AOA) 通訊協定,定義配件偵測及設定與 Android 裝置配件必須執行下列步驟:
- 等待並偵測到已連線的裝置。
- 判斷裝置配件模式的支援情形。
- 嘗試以配件模式啟動裝置 (如有需要)。
- 如果裝置支援 AOA,請與裝置進行通訊。
下列各節將說明如何實作這些步驟。
等待並偵測已連線 裝置
配件應持續檢查是否有已連結的 Android 裝置。 裝置連線後,配件應用於判斷裝置是否 支援配件模式。
判斷配件模式的支援情形
注意:連接配件時不需要 USB 偵錯,但 開發期間可能需要 ADB。詳情請參閱 偵錯注意事項。
當 Android 裝置連線時,可能會處於以下三種狀態的其中一種:
- 支援 Android 配件模式,且已進入配件模式。
- 支援 Android 配件模式,但不支援配件模式。
- 不支援 Android 配件模式。
在初始連線期間,配件應檢查版本、廠商 ID、
和已連結裝置 USB 裝置描述元的產品 ID供應商 ID
必須與 Google 的 ID (0x18D1
) 相符。如果裝置已加入
配件模式,產品 ID 應為 0x2D00
或
0x2D01
和配件
與
裝置
通訊協定 (不需在配件模式中啟動裝置)。
注意: 0x2D00
保留給
支援配件模式的 Android 裝置。0x2D01
是
保留給支援配件模式和 Android Debug (Android Debug) 的裝置
橋接 (ADB) 通訊協定,公開具有兩個大量端點的第二個介面
。您可以在下列情況下使用這些端點對配件應用程式進行偵錯:
您正在電腦模擬配件一般來說,請不要使用
除非配件實作直通至裝置上的 ADB
如果 USB 裝置描述元中的版本、供應商 ID 或產品 ID 與預期值相符,配件無法判斷裝置是否支援 Android 配件模式。配件會嘗試在 配件模式 (詳述如下) 來判斷裝置支援情形。
重點: USB 配件必須 在初始握手時傳送標頭。標題會包含製造商、型號和 版本。如果安裝的 Android 應用程式 版本相符,但配件不會傳送 Android 裝置版本 在 Android 10 以下版本上執行的應用程式,將因為擲回例外狀況而重新啟動 系統程序
嘗試以配件開始 模式
如果版本、供應商和產品 ID 與採用 Android 技術的裝置不符 裝置處於配件模式,配件就無法判斷裝置是否支援 (但 not in) 配件模式或裝置不支援配件模式時。這個 可能會發生原因 模式),一開始會回報裝置製造商供應商和產品 ID 而不是 AOA 供應商和產品 ID。
配件應嘗試以配件模式啟動裝置,來判斷 如果裝置支援該模式:
- 傳送 51 控制要求 (「取得通訊協定」) 以判斷是否裝置
必須支援 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)
- 如果裝置傳回支援的通訊協定版本,請傳送控制要求
內含識別字串資訊的裝置這些資訊可讓您
裝置來判斷該配件適用的應用程式 (或
如果沒有適當的應用程式,就會前往使用者的網址)。控制組
要求是否位於端點 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
- 傳送控制要求,要求裝置以配件模式啟動。
控制要求在端點 0 上具有下列特性:
requestType: USB_DIR_OUT | USB_TYPE_VENDOR request: 53 value: 0 index: 0 data: none
完成上述步驟後,配件應會等待已連接的 USB 以配件模式在公車上重新介紹裝置,然後重新列舉 。演算法 會決定是否支援配件模式 檢查供應商和產品 ID,這些資訊應該正確無誤 (例如 改為 Google 的廠商和產品 ID,而不是裝置製造商的 ID) 裝置已成功切換至配件模式。如果 ID 和版本正確 配件則會移至 Building 與裝置通訊。
注意:AOA 目前不支援 AOA。 AOA 和 MTP 同時連線。如要從 AOA 改用 MTP,請使用配件 必須先拔除 USB 裝置 (實體或電線) 相同),然後使用 MTP 重新連線。
如果有任何步驟失敗,配件會判斷裝置不支援 Android 配件模式,然後等待下一部裝置連線。
與 裝置
如果配件偵測到處於配件模式的 Android 裝置,則 配件可以查詢裝置介面和端點描述元,以取得 與裝置通訊的大量端點。
介面和大量端點的數量取決於產品 ID。一個 產品 ID 如下的 Android 裝置:
0x2D00
有一個介面,其中有兩個大量輸入端點 以及輸出通訊0x2D01
有兩個介面,每個介面各有兩個大量端點 提供輸入與輸出通訊第一個介面會處理 第二個介面則處理 ADB 通訊。如要使用 找到第一個大量輸入和輸出端點,然後設定 設為 1,且值為 1 的SET_CONFIGURATION
(0x09
) 裝置要求,然後使用端點通訊。