Google致力於提高黑人社區的種族平等。 怎麼看。
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

Android開放附件協議1.0

Android USB附件必須遵守Android開放附件(AOA)協議,該協議定義附件如何檢測並建立與Android設備的通信。附件應執行以下步驟:

  1. 等待並檢測連接的設備。
  2. 確定設備的附件模式支持。
  3. 嘗試以附件模式啟動設備(如果需要)。
  4. 如果設備支持AOA,請與設備建立通信。

以下各節說明如何實現這些步驟。

等待並檢測連接的設備

配件應不斷檢查已連接的Android設備。連接設備後,附件應確定該設備是否支持附件模式。

確定附件模式支持

連接Android設備的設備可以處於以下三種狀態之一:

  • 支持Android附件模式,並且已經處於附件模式。
  • 支持Android附件模式,但不處於附件模式。
  • 不支持Android附件模式。

在初始連接期間,附件應檢查所連接設備的USB設備描述符的供應商ID和產品ID。供應商ID應該與Google的ID( 0x18D1 )相匹配。如果設備已經處於附件模式,則產品ID應該為0x2D000x2D01 ,並且附件可以使用其自身的通信協議通過批量傳輸端點與設備建立通信 (該設備無需以附件模式啟動)。

注意: 0x2D00保留用於支持附件模式的Android設備。 0x2D01保留用於支持附件模式以及Android調試橋(ADB)協議的設備,該協議公開了帶有兩個ADB批量端點的第二個接口。如果要在計算機上模擬附件,則可以使用這些端點來調試附件應用程序。通常,除非附件在設備上實現對ADB的直通,否則不要使用此接口。

如果在USB設備描述符中找到的供應商ID或產品ID與預期值不匹配,則附件無法確定該設備是否支持Android附件模式。附件應嘗試以附件模式(下面詳細介紹)啟動設備,以確定設備支持。

嘗試以附件模式啟動

如果供應商和產品ID與附件模式下的Android設備不一致,則附件無法識別該設備是否支持(但不處於)附件模式或該設備不支持附件模式。發生這種情況的原因是,支持附件模式(但不處於附件模式)的設備最初會報告設備製造商供應商和產品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. 如果設備返回受支持的協議版本,請向設備發送帶有標識字符串信息的控制請求。該信息允許設備確定附件的適當應用程序(如果不存在適當的應用程序,則向用戶顯示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來確定附件模式支持 ,該ID應該正確(例如,對應於Google的賣方和產品ID,而不是設備製造商的ID)。如果ID正確,則附件將移動以與設備建立通信

注意: AOA當前不支持同時進行AOA和MTP連接。要將附件從AOA切換到MTP,附件必須首先斷開USB設備的連接(以物理方式或電氣等效方式),然後使用MTP重新連接。

如果任何步驟失敗,則附件確定該設備不支持Android附件模式,並等待下一個設備連接。

與設備建立通信

如果附件在附件模式下檢測到Android驅動的設備,則附件可以查詢設備接口和端點描述符以獲得用於與該設備通信的批量端點。

接口和批量端點的數量取決於產品ID。產品編號為:的Android設備

  • 0x2D00具有一個帶有兩個批量端點的接口,用於輸入和輸出通信。
  • 0x2D01具有兩個帶有兩個批量端點的接口,每個端點用於輸入和輸出通信。第一個接口處理標准通信,第二個接口處理ADB通信。要使用接口,請找到第一個批量輸入和輸出端點,使用SET_CONFIGURATION0x09 )設備請求將設備配置設置為1,然後使用端點進行通信。