安卓開放性配件協議1 0

2021-07-04 05:30:15 字數 2716 閱讀 5502

譯自:

androidopen accessory protocol 1.0(aoap 1.0)

安卓開放性配件協議1.0

乙個安卓usb配件必須遵循安卓開放性配件協議,這個協議定義了usb配件的查詢以及同安卓裝置的通訊。總之,乙個usb配件必須執行以下幾個步驟:

等待以及探測已連線的裝置。

決定裝置配件的支援模式。

如有需要,在從屬模式下啟動裝置。

如果支援aoa協議,則與其建立通訊連線。

下面具體解釋這幾步是如何實現的。

等待以及探測已連線的裝置

為了連線到安卓裝置,你的usb配件必須可以連續不斷地檢查接入點裝置。當乙個裝置連線上來,你的usb配件要判斷其是否支援usb從屬模式。

決定裝置配件的支援模式

當乙個安卓裝置連線之後,有以下三種可能的狀態:

a.硬體支援安卓usb從屬模式,並且它已經處在從屬模式中了。

b.硬體支援安卓usb從屬模式,但並不在從屬模式中。

c.硬體不支援安卓usb從屬模式。

在初始連線時,usb配件要檢查裝置的verdor id (vid)和product id (pid),通過裝置的usb硬體描述符。vid要與谷歌的id(0x18d1)相符,如果裝置已經處在從屬模式(狀態a),pid應該是0x2d00或0x2d01。由此,usb配件就能夠以自己的通訊協議(aoa)通過批量資料傳輸埠建立與裝置之間的通訊了。不需要在從屬模式下啟動裝置。

注意:0x2d00是為支援usb從屬模式的安卓裝置保留的;0x2d01是為usb從屬模式和adb (android debugbridge)協議均支援的安卓裝置保留的,對於adb的兩個批量埠,這公開的第二個介面。如果你是在一台電腦上模擬,那麼你就可以使用這一埠來除錯配套的應用。總之,除非你的usb配件是通過adb向裝置傳輸,那麼就不要使用這個埠。

如果vid和pid不匹配,就沒有辦法辨別出狀態b和狀態c,因此就需要嘗試在從屬模式下啟動裝置,以判斷裝置是否支援。

如有需要,在從屬模式下啟動裝置

如果vid和pid不符合從屬模式下的安卓裝置的標誌,usb配件就不確定裝置是不是支援usb從屬模式而只是不在從屬狀態,又或者裝置壓根就不支援usb從屬模式。這是因為裝置可能並沒有對aoa協議提供專門的支援,它可以支援usb從屬模式,但裝置製造商的vid和pid不在初始報告中(?)。在這兩種情況裡,usb配件就要嘗試讓硬體進入usb從屬模式,以弄清楚硬體是否支援它。下面將分幾步介紹來如何做:

傳送控制請求來弄清楚硬體是否支援aoa協議。如果硬體支援這個協議,就會返回乙個非零的數字,代表它所支援的協議版本。這個位於埠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)  

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  

當識別字串被傳送,就請求硬體進入usb從屬模式。這些位於埠0的控制請求具有以下特點:

requesttype:    usb_dir_out | usb_type_vendor

request:        53

value:          0

index:          0

data:           none  

傳送了最終的控制請求後,連線了的usb裝置要以usb從屬模式的形式重新引入匯流排,並且usb配件可以重新列舉已連線的裝置。演算法流程跳回到「決定裝置配件的支援模式」這一環節,再來檢查vid和pid。如果硬體成功地轉換到了從屬模式,這時的vid和pid將和原先不同:會以谷歌的vid和pid取代原先的製造商id。現在,usb配件就可以同裝置建立通訊連線了。

同裝置建立通訊連線

如果乙個處在usb從屬模式下的安卓裝置被偵測到,usb配件就可以查詢硬體介面和埠描述符來獲取批量端點,從而與裝置達成通訊。pid為0x2d00的安卓裝置有乙個帶有兩個批量端點的介面,用以進行輸入輸出通訊;pid為0x2d01的安卓裝置有兩個帶有兩個批量端點的介面,第乙個介面是用於標準通訊的,而第二個是用於adb通訊。為了在乙個介面進行通訊,你需要做的就是找出第乙個批量輸入輸出的端點,通過裝置請求「set_configuration(0x09)」將裝置配置設定為1,然後再使用端點進行通訊。

開放性試題

2021 全國高三二模 已知數列 left right 是等差數列,其前 n 項和為 s 有下列四個命題 甲 a 0 乙 s 0 丙 a a 0 丁 s s 0 如果只有乙個是假命題,則該命題是 quad a.甲 b.乙 c.丙 d.丁 解析 若 s 0 則 s cfrac a right 0 即 ...

開放性試題整理

1.在圓圈中填入1到9 2和3已給出 使得行 列都相等,並寫出推導過程。答案 行列都相同,可以把它拆開 如下圖 設黑色實心圓圈位為x,對這四個線段求和,2 3 x算了兩遍。這樣就可以算出x為6,行或列和為14,進而推導出其他圓圈中的數字。2.有5位海盜分100枚金幣,先由一名海盜提出分配方案,如果獲...

OpenShare 前所未有的開放性

客戶總是面臨乙個選擇 開放的企業門戶產品 vs 封閉的企業門戶產品 市場上大多數企業門戶產品是自成一體的其實也就是封閉的,他們不能和企業目錄整合,不能和exchange整合,不能和sap整合,不能和lync整合,不能和各種企業應用整合。這樣就注定了它們只是企業應用之一,而不可能成為整合各種應用和各種...