Android 9.0 HOGP 配对流程优化

本文探讨了在Android 9.0中优化HOGP(基于BLE的HID设备)配对流程的方法,包括增大ATT MTU size以减少传输时间,使用Data Packet Length Extension提升传输效率,启用2M Phy物理层速率,以及提出服务搜索和秘钥生成并行等策略,旨在缩短HOGP设备的配对时间。
摘要由CSDN通过智能技术生成

在Android Pie的系统中,HOGP设备(基于BLE的HID设备)的配对流程和以往的Android版本一样,从扫描到设备,到物理层建立连接,再到生成秘钥、服务搜索、HOGP profile连接,最终设备可以使用,这一套流程并没有什么改变。它是一套通用的逻辑,先建立物理连接,接着生成秘钥(以便后续profile连接时会用到),再以最小的BLE connection interval(7.5ms)快速浏览对端设备的服务,将服务缓存并上报服务的UUID给java层,java层决定连接哪个服务。
针对这个通用的BLE设备配对逻辑,从效率的角度出发,本文试图从配对流程的每一步提出一点优化的方案,尽量缩短HOGP设备的配对时间。

物理层连接的建立,以资源换时间

配对一个HOGP设备,从host下发给controller的“LE Create Connection”开始。这个command当中有两组重要的时间参数,他们是:

  • LE_Scan_Interval , LE_Scan_Window
  • Conn_Interval_Min , Conn_Interval_Max

后两个决定了连接建立后Android平台与 HOGP设备的通信周期,在配对阶段这个值当然是越小越好;前两个则表明,Android端愿意付出多大的努力去和对方“配对”。根据Spec的规定,Android需要在HOGP设备的广播包之后150us发出连接请求,因此它需要先扫描设备,扫到之后再立即送出CONNECT_REQ,建立连接。这个过程如下图所示:
BLE连接建立
因此,在扫描的interval一定的情况下,更大的扫描窗口将有更大的概率在一个interval中扫到设备并建立连接。目前,在Android 9.0的源码中,LE_Scan_IntervalLE_Scan_Window分别为60ms和30ms。
当然,提高扫描窗口会占用更多的物理层资源,因此这里优化的原则是,在符合使用场景的前提下,尽量增加扫描窗口的时间。

更大的ATT MTU size

HOGP即HID over GATT,它使用的是GATT profile。GATT的ATT MTU默认是23字节。也就是说,在GATT这一层,默认一个packet只能装23字节。如果数据量太大装不下,也就只能分多个packet传输。例如,HOGP里面有一个非常重要的属性叫“Report Map”,它对应USB HID的“HID Descriptor”,是一个数据量比较大的属性,长度一般在100字节以上。如果使用默认的ATT MTU来传输,配对的双方需要交互多次,花费多个connection event。以一个长度为189字节的Report Map在Connection Interval为15ms的case为例,air中的情况如下图:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值