【所有文章汇总】
上文已经了解了HCI接口,至此,已经可以去学习抓包,并且分析蓝牙通信流程了。该部分主要介绍一些Host与Controller之间的HCI通信流程图,重点关注消息序列表。
下文仅仅提供 一部分,不能代替所有的方案。
Core5.0 P2709
1、初始化蓝牙控制器
两个设备均需要初始化蓝牙
Controller

该流程主要有几个HCI命令:
- Reset:重置控制器和链路管理器
- Read Local Supported:读取一些特性,检查是否支持低功耗
- Set Event Mask:使能控制器返回给主机的
Event - Read Buffer Size:检查是否有可用的缓存空间
- Read BDADDR:都设备地址
命令流程可以参考我的抓包数据:

2、设置蓝牙控制器为广播状态
初始化蓝牙控制器后,发起广播的流程

主要涉及以下几个HCI包:
- LE Set Advertising Parameters:设置广播相关参数,包括:广播间隔,广播类型,广播通道等
- LE Set Advertising Data:设定广播数据包
- LE Set Scan Response Data:设定扫描响应数据,一般蓝牙的名称在这里设置。
- LE Set Advertising Enable:开启/关闭广播
下面为抓包数据:

3、设置蓝牙控制器为扫描态
一般为手机端设置,设置为扫描状态,扫描设备端发出的广播:

主要涉及以下几个HCI包:
- LE Set Scan Parameters:设置扫描参数
- LE Set Scan Enable:设定扫描使能
- SCAN_REQ:
- SCAN_RSP:
- LE Set Advertising Report:获取广播报告
4、发起连接请求
Device B设置为广播,Device A发起连接

主要涉及以下几个HCI包:
- LE Create Connection:建立连接
- LE Connection Complete:标志着连接链路建立完成
下面为抓包数据:

5、数据交互
一旦两个设备建立连接,就可以发送数据了。

6、断开连接
一旦两个设备不需要去保持连接,两个设备都可以主动关闭连接链路。
Device A主动关闭:

Device B主动关闭:

主要涉及以下几个HCI包:
- HCI_Disconnect:终止一个存在的链接
- Disconnection Complete:标志着链路的终止
下面为抓包数据:
