1.问题现象
在客户项目中遇见一个问题,有一部分蓝牙鼠标在与设备配对之后,关闭设备的蓝牙再重新打开之后,会出现大概率无法自动回连的问题。
2.问题分析
由于是部分鼠标存在这种异常,对比多款不同蓝牙鼠标进行分析,发现问题复现的鼠标用的均为HOGP的方案。
问题复现过程发现一个问题,当出现设备蓝牙重新打开之后再次搜索周边蓝牙设备可重新搜索到一个相同名称的蓝牙鼠标设备,再次配对连接之后通过设备页面发现前后的蓝牙鼠标MAC地址变了。
那么问题已经很明显了,由于蓝牙鼠标的MAC地址发生改变,设备无法再次进行重连,这样似乎能解释的通。但是问题没有这么简单。客户使用复现问题的蓝牙鼠标配合其他平台进行对比发现,其他平台均未出现异常。
BBQ了~~~~~,继续分析吧。
已知蓝牙鼠标走的是HOGP,BLE总是由主设备发起连接。那么为什么没有连接成功呢?蓝牙鼠标又为何MAC会改变呢?有以下猜想:当蓝牙重新打开时设备端有主动回连的动作,但是在timeout内由于没有扫描到设备或者没有成功连接,蓝牙鼠标存在某种机制,MAC地址会发生变化,再次广播出去,好被其他新的设备发现。
所以设备蓝牙重新打开时如何快速发现蓝牙鼠标以及回连呢?尝试了以下验证方案:
1)换天线,在屏蔽房中测试,排查硬件上是否有影响。
2)调整tag83中的射频功率为12dB,扫描范围更广,能更快发现设备
3)以上验证方案均未成功,只能老老实实梳理代码流程。
3.问题解决方案
救命链接:蓝牙BLE设备回连流程_51CTO博客_ble 蓝牙
这篇博客很好的梳理了HOGP回连的流程,这块还是比较复杂的,如果没有参考可能会耗时比较久才能解决此问题。
最终在协议栈中ble backgrouund connect中调低扫描参数连接参数后解决此问题。我这个调的比较低了,各位如果遇到类似问题,可根据实际情况调整合理的值。
4.写在最后
个人小结,仅供参考,如若有误请留言讨论。