目录
HCI_LE_Clear_Advertising_Sets
是低功耗蓝牙(Bluetooth Low Energy, BLE)协议栈中的一个主机控制接口(Host Controller Interface, HCI)命令,用于清除一个或多个广播集(Advertising Sets)。广播集是BLE设备用于广播其存在和能力的配置集合。每个广播集可以包含不同的广播数据、扫描响应数据以及广播参数(如间隔、类型等)。
一、命令概述
HCI_LE_Clear_Advertising_Sets
命令用于从控制器(Controller)中移除所有已创建的广播集,无论它们当前是否处于活动状态。通过移除不再需要的广播集,可以释放内存和其他资源,供BLE设备的其他功能使用。
限制条件:如果在BLE设备的任何广播集上启用了常规广播或周期性广播,那么当尝试执行 HCI_LE_Clear_Advertising_Sets
命令以清除这些广播集时,控制器(Controller)将不会执行该命令,并会返回一个错误代码,即“Command Disallowed”(命令不允许),其对应的错误代码是 0x0C
。
- 这是为了确保BLE设备的稳定性和数据一致性。如果广播或周期性广播正在运行,突然清除它们可能会导致数据丢失、设备行为异常或与其他设备的连接中断。因此,BLE协议要求在这种情况下不允许执行清除广播集的命令。
- 为了成功执行
HCI_LE_Clear_Advertising_Sets
命令,开发者需要确保在发送该命令之前,已经通过相应的命令禁用了所有广播集上的广播和周期性广播。一旦所有广播都被成功禁用,就可以安全地发送HCI_LE_Clear_Advertising_Sets
命令来清除广播集了。这样做可以释放资源,并允许BLE设备根据需要配置新的广播集。
HCI 重置: 需要注意的是,在HCI重置时,所有广播集都会被清除。这意味着如果设备经历了HCI重置(可能是由于主机或控制器的请求,或者是由于某种故障导致的自动重置),则不需要显式地发送 HCI_LE_Clear_Advertising_Sets
命令来清除广播集。
资源管理: 在资源受限的设备上,及时清除不再使用的广播集可以释放内存和其他资源,以供其他操作使用。因此,即使在没有广播或周期性广播正在运行时,也可能需要定期清除广播集以优化性能。
命令顺序: 在发送 HCI_LE_Clear_Advertising_Sets
命令之前,确保没有其他操作(如创建新的广播集或修改现有广播集)正在进行,以避免潜在的冲突或不一致状态。
二、命令格式
HCI_LE_Clear_Advertising_Sets
命令的格式通常遵循BLE核心规范中定义的HCI(Host Controller Interface)命令结构。以下是该命令的一般格式和关键组成部分。
2.1. 一般格式
- 组域(OGF, Opcode Group Field):对于BLE相关的命令,OGF通常为0x08,表示该命令属于LE(低功耗)控制器命令组。
- 命令域(OCF, Opcode Command Field):对于
HCI_LE_Clear_Advertising_Sets
命令,OCF为0x003D(Core5.4),用于标识这是一个清除广播集的命令。具体的OCF值需要根据蓝牙核心规范的最新版本或特定蓝牙协议栈的文档来确定。 - 参数长度(Parameter Length):表示后续参数的总长度。对于
HCI_LE_Clear_Advertising_Sets
命令,如果没有额外的参数,则参数长度可能为零。 - (可选)其他参数:根据具体的蓝牙协议栈实现和版本,
HCI_LE_Clear_Advertising_Sets
命令可能包含额外的参数。然而,在大多数情况下,该命令可能不需要额外的参数,因为它仅用于清除所有广播集。
2.2. 示例
假设在特定的蓝牙协议栈实现中,HCI_LE_Clear_Advertising_Sets
命令的格式如下:
- 操作码:由OGF(0x08)和OCF(特定值,如0x003D)组成。
- 参数长度:0(表示没有额外的参数)。
则命令的二进制表示可能如下(以十六进制为例):
08 3D 00
请注意,上述示例仅用于说明命令格式的一般结构,并不表示实际的命令代码。在实际应用中,应参考特定蓝牙协议栈的文档和蓝牙核心规范来确定正确的命令代码和格式。
三、命令的返回事件及参数说明
当HCI_LE_Clear_Advertising_Sets
命令执行完成后,会生成一个HCI_Command_Complete
事件,除非该事件被屏蔽(masked away)。这是蓝牙主机控制器接口(HCI)协议的一部分,用于确认命令的执行结果。
3.1. HCI_Command_Complete
事件
- 事件代码:
HCI_Command_Complete
事件有一个特定的事件代码,用于标识这是一个命令完成事件。 - 参数:该事件包含多个参数,其中最重要的是命令操作码(Opcode)和返回参数。
- 命令操作码:这是之前发送的命令的操作码&