【0x0038】HCI_LE_Set_Extended_Scan_Response_Data命令全面解析

目录

一、命令概述

1.1. 功能

1.2. 错误处理

二、命令格式

2.1. 一般格式

2.2. 格式示例

三、命令参数详细说明

3.1. 广播句柄(Advertising_Handle)

3.2. 操作(Operation)

3.3. 分片偏好(Fragment Preference)​编辑

3.4. 扫描响应数据长度(Scan_Response_Data_Length)

3.5.  扫描响应数据(Scan Response Data)

 四、返回参数详细说明

4.1. 基本返回参数

4.2. 可能的额外返回参数

4.3. 注意事项

五、命令的配置流程

5.1. 准备阶段

5.2. 配置阶段

5.3. 验证阶段

5.4. 注意事项

5.5. 配置示例代码

六、使用场景与示例

6.1. 设备发现与配对

6.2. 广播数据传输

6.3. 设备交互

七、注意事项

7.1. 确保设备兼容性

7.2. 合理设置扫描响应数据

7.3. 注意数据格式和编码

7.4. 考虑安全性和隐私保护

7.5. 遵循蓝牙核心规范

7.6. 测试和验证


LE Set Extended Scan Response Data command是蓝牙低功耗(BLE)技术中的一个重要命令,它允许设备在扫描响应过程中发送额外的数据。这个命令在蓝牙5.0及更高版本中引入,是蓝牙技术扩展广播功能的一部分。通过该命令,设备可以定制其扫描响应数据,以便在扫描过程中向其他设备提供更多信息。

一、命令概述

HCI_LE_Set_Extended_Scan_Response_Data 命令用于提供在扫描响应协议数据单元(PDU)中使用的扫描响应数据。此命令可以在使用 HCI_LE_Set_Extended_Advertising_Parameters 命令LE Set Extended Advertising Data command(0x0037)命令全面解析-CSDN博客创建由 Advertising_Handle 参数标识的广播集之后的任何时间发出,无论该广播集中的广播是否已启用或禁用。

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

1.1. 功能

  • 广播启用时:如果指定的广播集当前已启用广播,则芯片应在后续扩展广播事件中使用此新数据。如果在此命令发出时扩展广播事件正在进行,则芯片可能会为该事件使用旧数据或新数据。

  • 广播禁用时:如果指定的广播集当前已禁用广播,则芯片将保存这些数据,并在为该集启用广播时使用它们。当广播集被移除时,这些数据将被丢弃。

  • 数据长度:只有扫描响应数据的重要部分才应在广播包中传输。如果数据的总长度超过了由 Advertising_Handle 参数标识的广播集的容量或当前可用的内存量,则所有数据都将被丢弃,并且芯片将返回错误代码“Memory Capacity Exceeded (内存容量超出)”(0x07)

  • 操作参数:主机可以使用命令中的 Operation 参数在一个或多个操作中设置扫描响应数据。如果 Operation 指示新数据的开始(值为0x01或0x03),则任何现有的部分或完整的扫描响应数据都将被丢弃。

  • 分片偏好:Fragment_Preference 参数为芯片提供了一个提示,指示是否应将广播数据分段。

1.2. 错误处理

  • 如果广播集不可扫描,并且主机使用此命令(除了丢弃现有数据之外),则芯片将返回错误代码“Invalid HCI Command Parameters(无效的HCI命令参数)”(0x12)
  • 如果广播集使用可扫描的传统广播PDU,并且 Operation 不是0x03 或 Scan_Response_Data_Length 参数超过31个八位字节,则芯片将返回错误代码“Invalid HCI Command Parameters(无效的HCI命令参数)”(0x12)
  • 如果 Operation 不是0x03 并且 Scan_Response_Data_Length 为零,则芯片将返回错误代码“Invalid HCI Command Parameters(无效的HCI命令参数)”(0x12)
  • 如果指定的广播集当前已启用广播,并且 Operation 的值不是0x03,则芯片将返回错误代码“Command Disallowed (命令不允许)”(0x0C)
  • 如果广播集使用扩展广播,并且数据的总长度大于芯片在当前广播集参数下(如果广播已启用,则使用当前广播间隔)可以在最长的可能辅助广播段中传输的最大长度,则所有数据都将被丢弃,并且芯片将返回错误代码“Packet Too Long(数据包太长)”(0x45)
  • 如果广播集使用可扫描的扩展广播PDU,指定的广播集当前已启用广播,并且 Scan_Response_Data_Length 为零,则芯片将返回错误代码“Command Disallowed (命令不允许)”(0x0C))。
  • 如果与 Advertising_Handle 参数对应的广播集不存在,则芯片将返回错误代码“Unknown Advertising Identifier(未知的广播标识符)”(0x42)

此命令允许主机灵活地设置和管理广播集中的扫描响应数据,以适应不同的BLE应用场景。

二、命令格式

2.1. 一般格式

LE Set Extended Scan Response Data command的命令格式通常遵循蓝牙协议栈中的主机控制器接口层(HCI)所定义的数据格式。该命令包含多个字段,每个字段都有其特定的长度和含义。

一般来说,该命令的格式可能如下(具体格式可能因蓝牙版本或实现而有所不同):

  • 命令操作码(Opcode):由OGF(Opcode Group Field,操作码组字段)和OCF(Opcode Command Field,操作码命令字段)组成。在上述snoop中,OGF被标识为“LE Controller”,而OCF的值为0x0038。这两个字段结合起来唯一标识了这个HCI命令。

  • 参数长度(Parameter Length):这个字段表示紧随命令操作码之后的参数的总长度。在上述snoop中并没有直接给出这个字段的值,但根据后续参数的长度,可以推断出它的值。

  • 操作(Operation):这个字段描述了命令的具体操作。在上述snoop中,操作码为“Complete extended advertising data”,意味着这个命令用于设置完整的扩展广播数据。

  • 分片偏好(Fragment Preference):这个字段指示了芯片应该如何处理主机提供的广播数据。在上述snoop中,分片偏好被设置为“Controller should not fragment or should minimize fragmentation of Host advertising data”,意味着芯片应该尽量避免对主机提供的广播数据进行分片。

  • 服务数据(Service Data):这个字段包含了要设置的扫描响应数据中的服务数据部分。在上述snoop中,显示了两个服务数据项,分别具有不同的Uuid和值。这些服务数据项遵循BLE广播数据的格式,包括长度字段、类型字段和数据字段

2.2. 格式示例

以下是一个LE Set Extended Scan Response Data command的格式示例(请注意,这只是一个示例,具体格式可能因蓝牙版本或实现而有所不同):

OGF:    xx (LE Controller Commands, 根据具体实现确定)  
OCF:    0x00YY (YY为特定于实现的命令码,假设为扩展扫描响应数据设置)  
Length: N (整个命令的长度,包括OGF, OCF, Length字段, Parameter Length字段, 以及后续的参数)  
  
Parameter Length: M (参数的长度,即扫描响应数据的长度加上任何额外的参数长度)  
  
Scan Response Data:  
    - Length of Data: L1 (第一个广播数据段的长度)  
    - Type: T1       (第一个广播数据段的类型)  
    - Data: D1       (第一个广播数据段的内容)  
    - ... (可能包含多个广播数据段)  
    - Length of Data: Ln (第n个广播数据段的长度)  
    - Type: Tn       (第n个广播数据段的类型)  
    - Data: Dn       (第n个广播数据段的内容)

说明

  • OGF:操作码组字段,用于指示命令所属的类别。对于BLE相关的命令,OGF的值通常是固定的,用于区分BLE命令与其他蓝牙命令。具体值应根据所使用的蓝牙芯片或模块的文档确定。

  • OCF:操作码命令字段,与OGF结合使用,唯一标识一个特定的HCI命令。对于假设的LE Set Extended Scan Response Data命令,OCF将是一个特定的值,该值由蓝牙芯片制造商或软件栈提供商定义。

  • Length:表示整个命令的长度(包括OGF、OCF、Length字段、Parameter Length字段以及后续的参数)。

  • Parameter Length&

猜你喜欢

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