蓝牙SIG命令初始化流程
以一个简单的初始化流程做介绍,介绍command和event的命令

HCI Reset (OGF是0x03,OCF是0x03)
先从HCI Reset 开始软件复位,启用上面的HCI vendor command。
HCI Reset 的OGF是0x03

OCF是0x03,不需要带参数,返回值是reset的状态。

HCI event 回复的是,

0x0E表示接收完全,后面的0x01表示完成的command的数量,后面的0x030c表示command的Opcode,最后的0x00 表示接收成功。

HCI Read Local Version Information (OGF是0x04 OCF是0x01 )
读取HCI 的版本相关信息


HCI EVENT 会回复相关信息
与第一条reset command 回复的头是一样的,不过返回值除了status 还带有hci的相关信息。

HCI Read Buffer Size ( OGF是0x04 OCF是0x05)
读取controller的可以接收的队列信息,ACL和SCO的相关信息:队列的深度和队列可以接收的最大数目。

HCI EVENT 回复
下述信息表示ACL 可以接收的单包数据深度是310,最多可以接收 10包。
SCO 单包数据深度是64 最多可以接收8包。

HCI Read BDADDR(OGF是0x04 OCF是0x09)
读取蓝牙地址

HCI EVENT 回复的内容就会将初始化时候的写入的蓝牙地址返回(这一步可以去查看上一篇文章 vendor初始化 ,里面可以查找到写入蓝牙地址的pskey)。

HCI Write Class of Device (OGF是0x03 OCF 是0x24 )
这一部分蓝牙设备类型cod(蓝牙class of device介绍)参考大佬的介绍


HCI 回复写入成功

HCI Write Local Name(OGF:0x03 OCF:0x13)
写入蓝牙名称
蓝牙名称规定是248个bytes,写入是最好按照248来,不要写少了,不然可能会出问题


HCI EVENT 回复完成

HCI Write Page Timeout(OGF:0x03 OCF:0x18)
写入蓝牙写入超时时间,超过改时间则认为是失败了。
默认0x2000是5.12s

该处写入的是0x4000所以表示超时时间为10.2s

HCI EVENT回复

HCI Set Event Mask (OGF:0x03 OCF:0x01)
设置HCI EVENT 的接收类型 设为0的话则表示不接收该条HCI EVENT




目前只使用到61,所以哪怕全部使能最后也只会到3f(0011 1111).

HCI EVENT 回复

HCI Write Simple Pairing Mode(OGF:0x03 OCF:0x56)
是否使用SSP(Secure Simple Pairing蓝牙安全简易配对)模式



HCI EVENT 回复

HCI Write Inquiry Mode(OGF:0x03 OCF:0x45)
设置蓝牙搜索模式

0x00:只获取基本的蓝牙设备类型等基础核心信息
0x01:获取蓝牙基本信息之后还要获取蓝牙信号强度
0x02:除了上述两种还有获取额外的一些信息,这个在下面会有介绍。


HCI Write Scan Enable(OGF:0x03 OCF:0x1A)
设置蓝牙设备连接使能状态
0x00;不允许连接
0x01:允许扫描不允许连接
0x02:不允许扫描允许连接
0x03:扫描连接都允许


HCI Write LE Host Supported(OGF:0x03 OCF:0x6D)
设置开启ble功能



HCI Write Extended Inquiry Response (OGF:0x03 OCF:0x52)
蓝牙写入额外的信息 UUID Device id 等等

最多可以写入240byte的数据


