目录
一、命令概述
二、命令格式及参数说明
2.1. HCI_Create_Connection_Cancel 命令格式
2.2. BD_ADDR
三、返回事件及参数说明
3.1. HCI_Command_Complete 事件
3.2. HCI_Connection_Complete 事件
四、命令执行流程梳理
4.1. 命令发起
4.2. 命令接收与初步判断
4.3. 根据连接状态执行操作
4.4. 相关事件发送顺序
4.5. 主机处理反馈
4.6. 示例代码
五、应用场景
5.1. 用户操作引发的取消
5.2. 环境因素导致的取消
5.3. 设备状态改变引发的取消
5.4. 其他应用场景
六、注意事项
6.1. 命令参数准确性
6.2. 事件处理与响应
6.3. 连接状态管理
6.4. 错误处理与命令协调
HCI_Create_Connection_Cancel 命令的核心作用在于请求取消由HCI_Create_Connection 命令所启动正在进行的连接创建过程。当出于某些原因,比如发现连接目标不合适、环境因素影响连接或者用户主动取消等情况时,就可以使用该命令来终止尚未完成的连接创建流程。
一、命令概述
当本地设备尝试与远程设备建立连接时,如果出于某种原因需要取消这个连接创建过程(例如,用户取消了操作,或者连接超时等),可以使用 HCI_Create_Connection_Cancel 命令。该命令会通知蓝牙控制器停止尝试与指定 BD_ADDR 的设备建立连接。
如果命令成功执行,蓝牙控制器将停止正在进行的连接创建过程,并返回状态码 0x00。如果命令失败(例如,因为指定的 BD_ADDR 无效,或者没有正在进行的连接创建过程与该 BD_ADDR 相关联),蓝牙控制器将返回相应的错误状态码。
二、命令格式及参数说明
2.1. HCI_Create_Connection_Cancel 命令格式
HCI_Create_Connection 命令的格式通常遵循 HCI 命令的一般结构,包括:
- 命令前缀(一个字节,表示这是一个 HCI 命令包)
- 操作码(Opcode,由 OGF 和 OCF 组成,用于标识具体的 HCI 命令)
- 参数长度(表示后续参数的总长度)
- 参数(本命令中为 BD_ADDR)
2.2. BD_ADDR
在 HCI_Create_Connection_Cancel 命令里,通过填写对应的 BD_ADDR,来明确是针对哪一个目标设备的连接创建过程要进行取消操作,就如同通过地址来指定要取消某项服务对应的具体对象一样。
- 描述:这是一个 48 位的蓝牙设备地址(Bluetooth Device Address,简称 BD_ADDR),用于唯一标识一个蓝牙设备。
- 格式:由 6 个十六进制数表示,例如 0xXX:0xXX:0xXX:0xXX:0xXX:0xXX。
- 作用:准确地定位到之前发起连接创建的那个目标设备,确保取消操作作用在期望的连接创建流程上,避免误取消其他无关的连接尝试或者操作,保证命令执行的针对性和准确性。
三、返回事件及参数说明
当 HCI_Create_Connection_Cancel 命令执行完毕后,会触发一系列的事件和状态反馈,具体取决于连接的状态和之前的操作。
3.1. HCI_Command_Complete 事件
- 基本事件生成:无论结果如何,当 HCI_Create_Connection_Cancel 命令执行完成后,都会生成一个 HCI_Command_Complete 事件。该事件用于通知主机(Host)该命令的执行状态。
- 连接未建立时的处理:
- 如果在基带(Baseband)层连接尚未建立,但有一个与指定 BD_ADDR(蓝牙设备地址)相关联的连接创建过程正在进行,那么取消命令会成功执行,断开任何可能的连接尝试,并返回状态为“Success”(0x00)的 HCI_Command_Complete 事件。
- 如果之前没有针对该 BD_ADDR 发起连接创建过程,那么控制器会返回状态为“Unknown Connection Identifier”(0x02)的 HCI_Command_Complete 事件,表示没有找到要取消的连接。
- 连接已建立但尚未通知时的处理:如果在基带层连接已经建立,但 BR/EDR 控制器(蓝牙控制器)尚未向主机发送 HCI_Connection_Complete 事件(表示连接成功建立的事件),那么收到取消命令后,本地设备会断开连接,并返回状态为“Success”(0x00)的 HCI_Command_Complete 事件。
- 连接已建立且已通知时的处理:如果连接已经建立,并且 HCI_Connection_Complete 事件已经发送给主机,那么控制器会返回状态为“Connection Already Exists”(0x0B)的 HCI_Command_Complete 事件,表示连接已经存在,无法取消。
3.2. HCI_Connection_Complete 事件
- 发送顺序及关联:无论取消命令是否成功,与原始 HCI_Create_Connection 命令相对应的 HCI_Connection_Complete 事件都会发送。并且其发送顺序是在 HCI_Create_Connection_