1 关键字

OpenHarmony3.2 Beta3;蓝牙;周边设备;vendor;芯片适配;

2 问题描述

2.1 运行环境

  • 系统版本: OpenHarmony3.2-Beta3 (以该版本为基线)

  • 应用软件:蓝牙适配so库、蓝牙芯片底层库、系统自带bluetooth应用

2.2 问题现象:

使能蓝牙后开始扫描周边设备,但没有扫描到任何的周边设备,一直不停扫描。

2.3 测试步骤:

  1. OpenHarmony3.2-Beta3为基线编译蓝牙适配so库以及蓝牙芯片底层库加载到系统。

  2. 使能蓝牙功能,扫描周边蓝牙设备。

3 问题原因

使能蓝牙后,在host与controller间的hci交互时,host读取本地芯片的蓝牙地址为全0,导致host一直发送Inquiry命令。

4 解决方案

  • 将蓝牙地址写入到文件//vendor/XXXXXX/bluetooth/src/sprd/btmac.txt中,并将此文件打包到设备的/vendor/etc/目录下。

5 定位过程

5.1 使能bt snoop

使能bt snoop后可以在设备上生成snoop日志文件,用于记录host与controller间的hci协议交互。 snoop的使能以及日志文件的生成路径都可以在bt_conifg.xml文件中配置。 文件路径 //founcation/communication/bluetooth/services/bluetooth/etc/init/bt_config.xml

5.2 读取snoop文件

将设备上/data/bluetooth/log/snoop.log文件通过hdc导出,然后用wireshark或者frontline直接打开查看。

5.3 分析hci协议交互

在wireshark工具中查看host与controller在使能后的hci交互,看host下发给controller的命令执行的结果以及获取的值是否正常。 这里host下发'Read BD ADDR'命令后,controll返回的蓝牙设备地址为全0。

6 知识分享

此问题是蓝牙适配中的底层芯片的配置问题,目前openHarmony上蓝牙这边的配置都在目录 //foundation/communication/bluetooth/services/bluetooth/etc/init/下,这些配置会体现在hci的交互中。

 

 

Logo

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

更多推荐