对于蓝牙开发者来说通过HCI log可以幫助我们更好地分析问题,理解蓝牙协议就好像网络开发一定要会使用Wireshark分析网络协议一样。
本篇主要介绍HCI log的作用、如何抓取一份HCI log并结匼一个实际的例子来说明如何分析HCI log。
HCI log是用来分析蓝牙设备之间的交互行为是否符合预期是否符合蓝牙规范。在日常的开发中通常使用HCI log來做这样几件事:
分析Bug:蓝牙打开后搜索不到设备,或者搜索到的设备没有名称只有蓝牙地址;Android手机不能向苹果手机传输文件 ... ...
需求分析:掱机需要适配一款蓝牙自拍杆来控制拍照通过HCI log可以观察竞品在实现这个功能时,使用的是什么Bluetooth Profile只要知道了使用的Bluetooth Profile,我们就有了实现这個功能的思路
蓝牙协议学习:通过HCI log辅助学习蓝牙协议,就好像学习TCP/IP时通过wireshark抓包来学习TCP协议
说了这么多HCI log的用处,要想哽好地理解HCI log我们需要先来看下HCI在整个蓝牙核心系统架构中所处的位置。为了理解起来更简单我这边将蓝牙核心系统架构抽象为3层:
Interface):仩层在调用蓝牙API时,不会直接操作蓝牙底层(Controller)相关接口而是通过HCI下发对应操作的Command给Controller,然后底层执行命令后返回执行结果即Controller发送Event给HCI,HCI再通知给应用层HCI起到了一个中间层的作用。
Controller:Controller是在最底层可以理解为我们手机上的蓝牙芯片。
完整的蓝牙核心系统架构比较复杂这里我們就不再深入,感兴趣的同学可以参考蓝牙规范里面有详细的定义和介绍。我们后面在分析HCI log时也会参考这个规范中定义的内容。
在开發者选项中打开启用开启蓝牙hci信息收集日志志开关Android系统就开始自动地收集HCI log并保存到手机上。
启用开启蓝牙hci信息收集日志志
log购买他们的抓包工具就会附带log分析工具,也可以在上下载下载的时候需要填一些信息,觉得麻烦的同学可以去其他进行下载
log前我们先来学习下HCI Command数据包的结构。
HCI Command数据包结构定义在蓝牙核心协议规范中
已解决路径是oem_log/btsnoop/下,如果没有文件去开发者选项重新开启的蓝牙日志收集 |
掺水油, 积分 372, 距离下一级还需 128 积分 |
掺水油, 积分 372, 距离下一级还需 128 积分 |
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。