【0x001E】HCI_Write_Inquiry_Scan_Activity详解

目录

一、命令概述

二、命令格式和参数说明

2.1. HCI_Write_Inquiry_Scan_Activity命令格式

2.2. 参数说明

2.2.1. Inquiry_Scan_Interval

2.2.2. Inquiry_Scan_Window

2.3. 示例

三、响应事件及参数说明

3.1. HCI_Command_Complete事件

3.2. Status

四、命令执行流程

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. 硬件和资源限制

6.5. 安全性

6.6. 兼容性和稳定性


HCI_Write_Inquiry_Scan_Activity 是蓝牙主机控制器接口(HCI)中的一个命令。它主要用于控制蓝牙设备的查询扫描(Inquiry Scan)活动。查询扫描是蓝牙设备发现周围其他蓝牙设备的一种机制,通过这个命令可以设置扫描的开启、关闭以及扫描的参数等。

一、命令概述

HCI_Write_Inquiry_Scan_Activity指令用于配置蓝牙设备在inquiry scan模式时的行为。具体来说,它设置了两次连续inquiry scan window之间的间隔(inquiry scan interval)以及每个inquiry scan window的持续时间(inquiry scan window)。

【0x001E】HCI_Write_Inquiry_Scan_Activity详解_第1张图片

HCI_Write_Inquiry_Scan_Activity命令的核心功能在于写入 “Inquiry_Scan_Interval”(查询扫描间隔)和 “Inquiry_Scan_Window”(查询扫描窗口)这两个配置参数的值。这两个参数共同作用,对蓝牙设备的查询扫描行为起到关键的调控作用,以实现诸如设备发现、功耗管理等不同目标。 

通过调整这两个参数,可以影响蓝牙设备被其他蓝牙设备发现的难易程度。

  • inquiry_scan_window越大:蓝牙设备在每个扫描周期内实际进行扫描的时间就越长,因此被其他蓝牙设备发现的机会也就越大。
  • inquiry_scan_interval越小:蓝牙设备进行扫描的频率就越高,同样增加了被其他设备发现的机会。

二、命令格式和参数说明

2.1. HCI_Write_Inquiry_Scan_Activity命令格式

HCI_Write_Inquiry_Scan_Activity命令通常遵循蓝牙核心规范中定义的HCI(Host Controller Interface,主机控制器接口)指令格式。

【0x001E】HCI_Write_Inquiry_Scan_Activity详解_第2张图片

具体来说,它包含操作码(Opcode)和参数部分。操作码用于标识命令的类型,而参数部分则用于传递具体的设置信息。

  • 操作码(OpCode):操作码是一个固定长度(通常为 2 字节)的标识符,用于唯一地确定这个命令是 HCI_Write_Inquiry_Scan_Activity。由蓝牙规范定义,其中一部分字节用于表示命令组(OGF - Opcode Group Field),另一部分用于表示具体的命令(OCF - Opcode Command Field)。通过操作码,蓝牙控制器能够识别出主机发送的是这个特定的写入查询扫描活动命令,而不是其他命令。

  • 参数长度(Parameter Length):这部分指示后面紧跟的参数内容的字节数。其长度通常为 1 字节,用于帮助蓝牙控制器准确地解析参数内容部分。

  • 参数内容(Parameters):这是命令的核心部分,用于传递具体的设置信息,包括查询扫描间隔(Inquiry_Scan_Interval)和查询扫描窗口(Inquiry_Scan_Window)的值。

2.2. 参数说明

2.2.1. Inquiry_Scan_Interval

Inquiry_Scan_Interval,即查询扫描间隔,是一个定义连续查询扫描之间时间间隔的配置参数。它具体指的是从BR/EDR(Basic Rate/Enhanced Data Rate,基本速率/增强数据速率)控制器开始上一次查询扫描到开始下一次查询扫描的时间间隔。它决定了设备多久进行一次查询扫描操作,单位通常是蓝牙时钟周期(一般为 0.625ms)。

【0x001E】HCI_Write_Inquiry_Scan_Activity详解_第3张图片

  • 参数范围:取值范围是0x0012到0x1000,且仅为偶数有效。
  • 时间计算:时间T可以通过公式T = N × 0.625 ms来计算。因此,对应的时间范围是11.25 ms(当N=0x0012时)到2560 ms(当N=0x1000时)
  • 默认值:默认的Inquiry_Scan_Interval为0x1000,对应的时间为2.56秒(即0x1000 × 0.625 ms = 2560 ms ÷ 1000 = 2.56秒)。
  • 参数作用与影响:
    • 作用:该参数主要影响蓝牙设备的查询扫描频率。较小的Interval值意味着设备会更频繁地进行查询扫描,从而可能更快地发现周围的蓝牙设备。相反,较大的Interval值会降低查询扫描的频率,可能会延长发现设备的时间。
    • 影响:Inquiry_Scan_Interval的设置不仅影响蓝牙设备的发现速度,还可能影响设备的功耗和性能。更频繁的查询扫描可能会增加设备的功耗,而较低的扫描频率则可能降低设备的响应速度和发现能力。
  • 应用场景:根据不同的应用场景和需求,可以灵活地调整Inquiry_Scan_Interval的值。例如,在需要快速发现周围蓝牙设备的场景中,可以设置较小的Interval值;而在对功耗有较高要求的场景中,则可以选择较大的Interval值以降低功耗。

Inquiry_Scan_Interval是一个重要的蓝牙配置参数,它直接影响了蓝牙设备的查询扫描频率、发现速度、功耗和性能。在实际应用中,需要根据具体的需求和场景来合理地设置该参数的值。

2.2.2. Inquiry_Scan_Window

Inquiry_Scan_Window,即查询扫描窗口,指在每次查询扫描间隔内,设备实际进行扫描的时间长度。它表示设备开启射频接收,用于监听其他蓝牙设备发出的查询响应的时间段,单位同样是蓝牙时钟周期。扫描窗口的大小直接影响设备发现其他设备的概率。一个较大的扫描窗口在扫描间隔内提供了更多的时间来接收其他设备的信号,从而增加发现设备的机会,但也会消耗更多的电量;较小的扫描窗口则相反。

【0x001E】HCI_Write_Inquiry_Scan_Activity详解_第4张图片

  • 参数范围:0x0011到0x1000,且必须为有效的十六进制数。
  • 时间计算:时间T可以通过公式T = N × 0.625 ms来计算。因此,对应的时间范围是10.625 ms(当N=0x0011时)到2560 ms(当N=0x1000时)。
  • 限制条件:Inquiry_Scan_Window的值必须小于或等于Inquiry_Scan_Interval的值。这是为了确保设备在进行查询扫描时不会超出预定的时间间隔。
  • 默认值:默认的Inquiry_Scan_Window为0x0012,对应的时间为11.25 ms(即0x0012 × 0.625 ms = 11.25 ms)。
  • 参数作用与影响:
    • 作用:Inquiry_Scan_Window直接影响蓝牙设备在进行查询扫描时的活动时间。较小的窗口值意味着设备在每次查询扫描中活跃的时间较短,而较大的窗口值则意味着设备在每次查询扫描中活跃的时间较长。
    • 影响:该参数的设置会影响蓝牙设备的发现速度和功耗。较大的窗口值可能会增加设备的发

你可能感兴趣的:(#,通信协议,蓝牙,HCI)