目录
3.5. Max_Extended_Advertising_Events[i]
4.2. HCI_LE_Advertising_Set_Terminated 事件
4.3. HCI_LE_Connection_Complete 或 HCI_LE_Enhanced_Connection_Complete 事件
4.5. HCI_LE_Channel_Selection_Algorithm 事件(如支持)
LE Set Extended Advertising Enable command命令是BLE技术中用于启用或禁用扩展广播功能。
一、命令概述
HCI_LE_Set_Extended_Advertising_Enable
命令允许主机(Host)请求控制器(Controller)启用或禁用一个或多个由Advertising_Handle[i]
参数标识的广播集。这些广播集之前已通过HCI_LE_Set_Extended_Advertising_Parameters
命令配置了广播参数。
BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 4, Part E page 2462
在蓝牙BLE 5.0及更高版本中,扩展广播功能得到了显著增强,支持更大的广播数据负载、更灵活的广播参数设置以及多广播集等特性。
2.1. 命令功能
- 启用扩展广播:当Enable字段设置为true或1时,该命令将启用指定的扩展广播集。此时,蓝牙设备将开始按照配置的广播参数(如广播间隔、广播数据等)发送扩展广播。
- 禁用扩展广播:当Enable字段设置为false或0时,该命令将禁用指定的扩展广播集。此时,蓝牙设备将停止发送与该广播集相关的扩展广播。
2.2. 广播集的管理
- 控制器仅在对应的广播集被启用时才会开始广播事件。
- 控制器将继续广播,直到所有广播集都被禁用。
- 广播集可以通过多种方式被禁用,包括:主机发出
Enable
参数设置为0x00
的HCI_LE_Set_Extended_Advertising_Enable
命令、使用该广播集建立连接、Duration[i]
参数指定的持续时间到期,或发送的扩展广播事件数超过Max_Extended_Advertising_Events[i]
参数。
2.3. 特殊情况处理
- 如果在广播集已启用时再次对其发送
HCI_LE_Set_Extended_Advertising_Enable
命令,则用于持续时间的计时器和事件计数器将被重置,并且任何随机地址的更改都将生效。 - 禁用由
Advertising_Handle[i]
参数标识的广播集不会影响与该集相关联的任何周期性广播。 - 禁用已经禁用的广播集没有任何效果。
2.4. 错误处理
- 如果
Advertising_Handle[i]
数组参数中有多个条目标识相同的广播集,则控制器将返回错误代码“Invalid HCI Command Parameters”(0x12)。 - 如果与
Advertising_Handle[i]
参数对应的广播集不存在,则控制器将返回错误代码“Unknown Advertising Identifier”(0x42)。
2.5. 启用时的额外检查
- 如果
Num_Sets
设置为0x00
,则控制器将返回错误代码“Invalid HCI Command Parameters”(0x12)。 - 如果广播集包含部分广播数据或部分扫描响应数据,则控制器将返回错误代码“Command Disallowed”(0x0C)。
- 如果广播集使用可扫描的扩展广播PDU且当前未提供扫描响应数据,则控制器将返回错误代码“Command Disallowed”(0x0C)。
- 如果广播集使用可连接的扩展广播PDU,且广播集中的广播数据将无法放入
AUX_ADV_IND
PDU中,则控制器将返回错误代码“Invalid HCI Command Parameters”(0x12)。
2.6. 数据长度和PHY编码
- 如果扩展广播正在使用,且任何广播数据或扫描响应数据的长度大于控制器在最长可能的辅助广播段中能够传输的最大长度(与所选广播间隔一致),则控制器将返回错误代码“Packet Too Long”(0x45)。
- 如果在LE编码PHY上进行广播,则除非当前广播参数要求使用S=2进行广播物理信道,否则应假设使用S=8编码;在那种情况下,应假设为该广播物理信道使用S=2编码。
2.7. 地址类型检查
- 如果广播集的
Own_Address_Type
参数设置为0x00
且设备没有公共地址,则控制器应返回错误代码“Invalid HCI Command Parameters”(0x12)。 - 如果广播集的
Own_Address_Type
参数设置为0x01
且未使用HCI_LE_Set_Advertising_Set_Random_Address
命令初始化广播集的随机地址,则控制器应返回错误代码“Invalid HCI Command Parameters”(0x12)。 - 如果广播集的
Own_Address_Type
参数设置为0x02
且控制器的解析列表中没有匹配项,且设备没有公共地址,则控制器应返回错误代码“Invalid HCI Command Parameters”(0x12)。 - 如果广播集的
Own_Address_Type
参数设置为0x03
且控制器的解析列表中没有匹配项,且未使用HCI_LE_Set_Advertising_Set_Random_Address
命令初始化广播集的随机地址,则控制器应返回错误代码“Invalid HCI Command Parameters”(0x12)。
这个命令的复杂性反映了蓝牙BLE 5.0及更高版本中扩展广播功能的强大和灵活性。正确理解和使用此命令对于开发高效、可靠的蓝牙BLE设备至关重要。
二、命令格式
2.1. 一般格式
LE Set Extended Advertising Enable命令通常作为蓝牙HCI(Host Controller Interface)命令的一部分,其格式可能因不同的蓝牙芯片和控制器实现而略有不同。但一般来说,该命令包含以下几个关键字段:
- 命令操作码(Opcode):用于标识这是一个设置扩展广播使能状态的命令。
- 参数长度(Parameter Length):表示后续参数的总长度。
- 广播句柄(Advertising Handle):标识要启用的扩展广播设置的句柄。
- 使能状态(Enable State):一个布尔值,表示是否启用扩展广播。通常,0表示禁用,1表示启用。
- 其他可选参数:根据具体实现,可能还包括其他与扩展广播相关的配置参数,如广播间隔、广播超时等。
2.2. 格式示例
以下是一个假设的LE Set Extended Advertising Enable命令的格式示例:
LE Set Extended Advertising Enable Command
---------------------------------
| Opcode | Parameter Length | Advertising Handle | Enable State | Optional Parameters |
---------------------------------
| 0xXXXX | 0x02 | 0x01 | 0x01 | ... |
---------------------------------
- Opcode:0xXXXX是一个占位符,表示实际的命令操作码。
- Parameter Length:0x02表示后续参数的总长度为2个字节(在这个示例中仅包括广播句柄和使能状态)。
- Advertising Handle:0x01是一个示例值,表示要启用的扩展广播设置的句柄。
- Enable State:0x0