Android Open 配件 1.0 版

Android USB 配件必須遵循 Android Open Accessory (AOA) 通訊協定,定義配件偵測及設定與 Android 裝置配件必須執行下列步驟:

  1. 等待並偵測到已連線的裝置。
  2. 判斷裝置配件模式的支援情形。
  3. 嘗試以配件模式啟動裝置 (如有需要)。
  4. 如果裝置支援 AOA,請與裝置進行通訊。

下列各節將說明如何實作這些步驟。

等待並偵測已連線 裝置

配件應持續檢查是否有已連結的 Android 裝置。 裝置連線後,配件應用於判斷裝置是否 支援配件模式。

判斷配件模式的支援情形

注意:連接配件時不需要 USB 偵錯,但 開發期間可能需要 ADB。詳情請參閱 偵錯注意事項

當 Android 裝置連線時,可能會處於以下三種狀態的其中一種:

  • 支援 Android 配件模式,且已進入配件模式。
  • 支援 Android 配件模式,但不支援配件模式。
  • 不支援 Android 配件模式。

在初始連線期間,配件應檢查版本、廠商 ID、 和已連結裝置 USB 裝置描述元的產品 ID供應商 ID 必須與 Google 的 ID (0x18D1) 相符。如果裝置已加入 配件模式,產品 ID 應為 0x2D000x2D01 和配件 與 裝置 通訊協定 (不需在配件模式中啟動裝置)。

注意: 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。

配件應嘗試以配件模式啟動裝置,來判斷 如果裝置支援該模式:

  1. 傳送 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)
    
  2. 如果裝置傳回支援的通訊協定版本,請傳送控制要求 內含識別字串資訊的裝置這些資訊可讓您 裝置來判斷該配件適用的應用程式 (或 如果沒有適當的應用程式,就會前往使用者的網址)。控制組 要求是否位於端點 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,這些資訊應該正確無誤 (例如 改為 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) 裝置要求,然後使用端點通訊。