1. 问题描述

【系统】【概率】设备熄屏后等三小时,等蓝牙遥控器休眠,再按遥控器电源键,遥控器不会回连,必现。

 

2. 问题分析

2.1 问题现状分析

a 按非power按键,遥控器发送定向广播

按非power按键,遥控器与tv可以回连,查看代码可以看到有相应的处理逻辑。

 

实现逻辑:

  1. 遥控器按非power按键的时候,遥控器会发送定向广播

  2. tv会开启广播扫描,扫描到蓝牙设备会上报report event

  3. 蓝牙服务层在处理report event的地方会提供广播包中mac地址,并判断是否是定向广播,是则发起hid连接。

 

b 按power按键,遥控器发送非定向广播

 

当前的问题是按power按键,发送的是非定向广播,缺乏相应的回连机制,增加非定向广播的回连代码。

从过snoop日志可以看到power按键的report已经上报上来了,与定向广播不同的是,非定向广播的数据被包含在多个report中,这里怀疑oh对多report数据帧做分包处理了吗?下面通过代码流程和hilog日志分析确定了oh多report做了分包处理。

oh对多report数据帧做分包处理流程

 

从底层一直往上层上报:

 

leExtendedAdvertisingReport函数绑定GapRecvLeExtendedAdvertisingReportEvent函数

 

 

 

这里可以看到numReport数量的大小了

 

 

上报了蓝牙服务层,但是在红色方框中报错了。

 

3. 解决方案

在红色方框中增加如下逻辑:

1. 遥控器按非power按键的时候,遥控器会发送定向广播
2. tv会开启广播扫描,扫描到蓝牙设备会上报report event
3. 蓝牙服务层在处理report event的地方会提供广播包中mac地址,遍历已配对的蓝牙mac地址,如果相等,则发起hid连接。

 

 

 

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐