AAP HID
?在Android手機和車機連接投屏時,會用到AOA協議(Android Open Accessory Protocol)進行主從切換, 其中反控可以用該協議中HID實現,這個部分稱為AAP HID(Android Accessory Protocol Human Interface Device),我們來看看具體是怎么工作的。
先看谷歌官網的介紹,源地址:Android Open Accessory Protocol 2.0,開始搬運。
與AOA1.0相比,在最新的2.0版本中增加的功能:
- 從Android設備到外設的音頻輸出
- 外部設備可以作為Android設備的一個或多個HID設備
什么是外設?
- Windows電腦是主設備/Host,通過USB連接的鼠盤、鍵盤、U盤,游戲控制手柄和打印機等是外部設備。
- 車機里中控系統是主設備,但是和手機連接投屏時進行了主從切換,所以今天聊的HID場景里,手機是主設備,車機反而成了外部設備,結合AAP HID的功能,車機的反控行為和鼠標類似。
什么是HID設備?
- 顧名思義,與電腦連接并實現人機交互功能的設備,如鼠標鍵盤等。
AOA 2.0中的HID支持只是對標準HID事件的一個代理。該實現對事件的內容或類型沒有任何假設,只是將其傳遞到輸入系統Input System,因此AOA 2.0外設可以充當任何HID設備(鼠標、鍵盤、游戲控制器等)。它可以用于簡單的東西,比如媒體底座上的播放/暫停按鈕,或者復雜的鼠標和全標準鍵盤(QWERTY)的對接站。
AOA 2.0協議增加了四個新的USB控制請求,允許外設作為一個或多個HID輸入設備連接到安卓設備。由于HID支持完全通過endpoint0的控制請求來完成,因此不需要新的USB接口來提供這種支持。控制請求如下:
- ACCESSORY_REGISTER_HID?在安卓設備上注冊了一個新的HID設備。該外設提供了一個ID用于識別其他三個請求,在USB斷開連接或外設發送ACCESSORY_UNREGISTER_HID注銷HID設備之前,此ID一直有效
- ACCESSORY_UNREGISTER_HID?注銷以注冊的HID設備
- ACCESSORY_SET_HID_REPORT_DESC?向Android設備發送一個HID設備的報告描述符。此請求用于描述HID設備的功能,并且必須在向Android設備報告任何HID事件之前發送。如果報表描述符大于endpoint0的最大數據值,則會發送多個ACCESSORY_SET_HID_REPORT_DESC命令,以傳輸整個描述符。
- ACCESSORY_SEND_HID_EVENT?將輸入事件從外設發送到Android設備。
這些新的控件請求的代碼定義如下:
/* Control request for registering a HID device.* Upon registering, a unique ID is sent by the accessory in the* value parameter. This ID will be used for future commands for* the device** requestType: USB_DIR_OUT | USB_TYPE_VENDOR* request: ACCESSORY_REGISTER_HID_DEVICE* value: Accessory assigned ID for the HID device* index: total length of the HID report descriptor* data none*/ #define ACCESSORY_REGISTER_HID 54/* Control request for unregistering a HID device.** requestType: USB_DIR_OUT | USB_TYPE_VENDOR* request: ACCESSORY_REGISTER_HID* value: Accessory assigned ID for the HID device* index: 0* data none*/ #define ACCESSORY_UNREGISTER_HID 55/* Control request for sending the HID report descriptor.* If the HID descriptor is longer than the endpoint zero max packet size,* the descriptor will be sent in multiple ACCESSORY_SET_HID_REPORT_DESC* commands. The data for the descriptor must be sent sequentially* if multiple packets are needed.** requestType: USB_DIR_OUT | USB_TYPE_VENDOR* request: ACCESSORY_SET_HID_REPORT_DESC* value: Accessory assigned ID for the HID device* index: offset of data in descriptor* (needed when HID descriptor is too big for one packet)* data the HID report descriptor*/ #define ACCESSORY_SET_HID_REPORT_DESC 56/* Control request for sending HID events.** requestType: USB_DIR_OUT | USB_TYPE_VENDOR* request: ACCESSORY_SEND_HID_EVENT* value: Accessory assigned ID for the HID device* index: 0* data the HID report for the event*/ #define ACCESSORY_SEND_HID_EVENT 57總結
- 上一篇: coreldraw课表设计作品_平面设计
- 下一篇: http状态码204理解