【0x0008】HCI_LE_Set_Advertising_Data命令全面解析

目录

一、命令概述

1.1. 命令功能

1.2. 数据内容

1.3. 命令执行

1.3.1. 广播当前已启用

1.3.2. 广播事件正在进行中但广播已请求禁用

1.3.3. 广播当前已禁用

1.3.4. 数据更新流程

1.3.5. 注意事项

二、命令格式

2.1. 一般格式

2.2. 示例格式

三、命令主要参数详细说明

3.1. 广播数据长度(Advertising_Data_Length)

3.2. 广播数据(Advertising Data)

四、返回参数说明

4.1. HCI_Command_Complete事件参数

4.2. 状态码(Status)

4.3. 注意事项

五、命令执行流程

5.1. 准备广播数据

5.2. 构建命令包

5.3. 发送命令

5.4. 接收响应

5.5. 处理结果

5.6. 示例代码

 六、使用场景

6.1. 开始或更新广播活动

6.2. 设备配对或连接过程

6.3. 隐私保护

6.4. 其他应用场景

七、注意事项

7.1. 数据格式与长度

7.2. 地址类型与隐私保护

7.3. 广播参数配置

7.4. 命令发送时机与状态检查

7.5. 兼容性与互操作性

7.6. 安全性考虑


HCI_LE_Set_Advertising_Data(0x0008) 是蓝牙低功耗(BLE)核心规范中定义的一个HCI(Host Controller Interface)命令,用于设置设备的广播数据。这个命令允许主机(Host)配置BLE控制器(Controller)在广播过程中发送的广播数据。

一、命令概述

BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 4, Part E page 2355 

1.1. 命令功能

HCI_LE_Set_Advertising_Data命令允许主机(Host)为BLE设备配置广播数据。这些数据将被BLE控制器(Controller)用于广播,以便其他BLE设备可以发现和识别该设备。广播数据可以包含设备的名称、服务UUID、制造商特定数据等信息。

1.2. 数据内容

  • 广播数据内容:广播数据包含在广播包的数据字段中,并且只有重要的部分应该被传输。这些重要部分根据蓝牙核心规范的[Vol 3] Part C, Section 11进行定义。
  • 数据长度:广播数据的长度是可变的,但通常受到BLE广播包最大长度的限制(一般为31字节)。如果广播数据长度超过这个限制,BLE控制器可能会忽略超出部分或返回错误。
  • 默认数据:如果未设置广播数据,则默认的广播数据长度应为零,且广播数据应为31个零八位字节(即全零数据)。

1.3. 命令执行

当执行HCI_LE_Set_Advertising_Data命令时,BLE控制器的行为取决于当前的广播状态。

1.3.1. 广播当前已启用

  • 控制器行为:如果广播当前已启用,并且广播事件正在进行中,控制器可能会选择在该事件中使用旧数据或新数据。这取决于控制器的具体实现和内部状态机。一些控制器可能会在完成当前广播事件后,在下一个广播事件中开始使用新的广播数据。
  • 注意事项:由于存在这种不确定性,如果应用对广播数据的即时性有严格要求,可能需要通过其他机制(如定期发送广播数据更新命令)来确保广播信息的准确性。

1.3.2. 广播事件正在进行中但广播已请求禁用

  • 控制器行为:如果广播事件正在进行中,但已经通过其他命令(如HCI_LE_Set_Advertising_Enable设置为0)请求禁用广播,控制器应尽可能快地停止广播事件。一旦广播被禁用,控制器不会为新的广播事件使用新的广播数据。
  • 数据保存:然而,控制器应保存新提供的广播数据,以便在将来重新启用广播时使用。

1.3.3. 广播当前已禁用

  • 控制器行为:如果广播当前已禁用,控制器应简单地保存新提供的广播数据。一旦广播被重新启用(通过HCI_LE_Set_Advertising_Enable设置为1),控制器应开始使用这些新保存的广播数据。
  • 数据更新:通过发送新的HCI_LE_Set_Advertising_Data命令,可以随时更新保存的广播数据。这允许设备根据需要动态地改变其广播信息。

1.3.4. 数据更新流程

  • 发送更新命令:当需要更新广播数据时,应用层通过HCI接口发送新的HCI_LE_Set_Advertising_Data命令。
  • 控制器处理:控制器接收命令,验证数据的格式和内容,然后保存新数据(如果广播已禁用)或准备在下一个广播事件中使用新数据(如果广播已启用)。
  • 广播启用:如果广播当前已禁用,应用层可以通过发送HCI_LE_Set_Advertising_Enable命令(设置为1)来启用广播。一旦广播被启用,控制器将开始使用新保存的广播数据。

1.3.5. 注意事项

  • 数据格式:在发送HCI_LE_Set_Advertising_Data命令之前,应用层需要确保提供的广播数据符合BLE规范的要求。
  • 命令响应:控制器应通过HCI_Command_Complete事件响应命令的完成情况。应用层需要接收并解析这个事件来确认命令是否成功执行。
  • 状态同步:由于广播数据的更新和广播的启用/禁用可能涉及多个命令和状态变化,应用层需要确保这些操作之间的同步和一致性。
  • 错误处理:如果命令执行失败,应用层需要根据错误代码进行相应的错误处理,并可能需要重试命令或采取其他恢复措施。

二、命令格式

HCI_LE_Set_Advertising_Data命令允许主机(Host)为BLE设备配置广播数据。这些数据将被BLE控制器(Controller)用于广播,以便其他BLE设备可以发现和识别该设备。广播数据可以包含设备的名称、服务UUID、制造商特定数据等信息。

2.1. 一般格式

HCI_LE_Set_Advertising_Data命令的格式通常包括以下几个部分:

  • 组域(OGF, Opcode Group Field):对于BLE相关的命令,OGF通常为0x08,表示该命令属于LE(低功耗)控制器命令组。
  • 命令域(OCF, Opcode Command Field):对于HCI_LE_Set_Advertising_Data命令,OCF为0x0008。因此,完整的操作码是这两个字段的组合,即0x08|0x0008(在某些文档或上下文中,可能会看到合并为一个16位值的结果,如0x0058,这是将OGF左移10位后与OCF进行或运算的结果)。
  • 参数长度(Parameter Length):这是一个无符号8位整数(uint8_t),表示后续参数的总长度(以字节为单位)。对于HCI_LE_Set_Advertising_Data命令,这个长度是可变的,它取决于广播数据的实际长度加上广播数据长度的字段本身(1字节)。
  • 广播数据长度(Advertising Data Length):表示广播数据的实际长度,通常是一个无符号8位整数。
  • 广播数据(Advertising Data):这是要设置的广播数据本身,其长度和内容应符合BLE规范的要求。广播数据可以包含多个字段,每个字段都有一个类型和一个长度,以及相应的数据值。

2.2. 示例格式

<

猜你喜欢

转载自blog.csdn.net/weixin_37800531/article/details/143067283