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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值