目录
2.1. HCI Write Scan Enable命令格式
HCI_Write_Scan_Enable是一个蓝牙主机控制器接口HCI(Host Controller Interface)指令,它主要用于控制蓝牙设备的扫描功能开启或关闭状态。这个命令对于蓝牙设备在发现周围其他蓝牙设备或者被其他设备发现的过程中起到关键作用。
一、命令概述
HCI_Write_Scan_Enable指令允许主机(Host)控制蓝牙控制器(Controller)是否进入扫描状态。
扫描状态包括两种:Page Scan和Inquiry Scan。Page Scan用于响应其他设备的连接请求,而Inquiry Scan则用于发现周围的蓝牙设备。
二、命令格式及参数说明
2.1. HCI Write Scan Enable命令格式
HCI Write Scan Enable命令的格式通常遵循HCI命令包的通用结构。
包括:
- 指令类型:标识该数据包为HCI命令包。
- 操作码(OpCode):由操作码字段(OCF)和操作组字段(OGF)组成,用于唯一标识该命令。对于HCI_Write_Scan_Enable命令,OGF通常为0x03(表示HCI Control and Baseband commands),OCF则根据具体蓝牙规范版本可能有所不同。
- 参数长度:表示后续参数的长度,对于HCI_Write_Scan_Enable命令,该长度通常为1个字节。
- 参数:即Scan_Enable配置参数的值,用于指定蓝牙设备的扫描状态。
2.2. Scan_Enable
Scan_Enable
是HCI_Write_Scan_Enable
命令中的关键参数。它用于控制蓝牙设备的扫描行为,其取值决定了蓝牙控制器(Controller)是否可以定期检测其他蓝牙控制器的Page Attempts和查询请求(Inquiry Requests)。
Scan_Enable参数的具体配置通常是通过位掩码来实现的,每一位代表一个特定的扫描功能。
- 0x00(默认值):表示不启用任何扫描。在这种状态下,设备不会主动去查找其他蓝牙设备(不进行查询扫描 - Inquiry Scan),也不会响应其他设备的连接请求扫描(不进行寻呼扫描 - Page Scan)。这样的设置适用于设备不需要发现其他设备或者被其他设备发现的场景,例如,当设备已经完成配对并且不需要重新连接或发现新设备时,保持这个状态可以节省电量并减少不必要的信号干扰。
- 0x01:启用查询扫描(Inquiry Scan),但禁用寻呼扫描(Page Scan)。查询扫描主要用于主动搜索周围可被发现的蓝牙设备。当设备开启此扫描模式时,它会在蓝牙频段内监听其他设备发送的可发现信号(例如,设备的广播消息),以便发现可以与之建立连接的设备。然而,由于寻呼扫描被禁用,设备不会响应其他设备发起的连接请求扫描,意味着其他设备不能直接通过寻呼扫描来连接此设备。这种模式适用于设备只想主动寻找其他设备,但暂时不希望被其他设备连接的情况,比如一个设备正在搜索周围的蓝牙打印机来打印文件,但不想被其他未知设备连接。
- 0x03:同时启用查询扫描和寻呼扫描。设备既会主动搜索周围可连接的设备,也会响应其他设备的连接请求。这是一种比较通用的扫描模式,适用于设备需要积极参与设备发现和连接过程的场景,比如蓝牙设备在初次设置或重新设置连接环境时,希望能够与周围设备相互发现并建立连接。
- 其他值:所有其他值是为将来使用而保留的。
HCI_Write_Scan_Enable命令通过Scan_Enable参数来控制蓝牙设备的扫描功能,包括查询扫描和寻呼扫描的启用或禁用。正确的配置对于确保设备的正常工作和互操作性至关重要。
三、响应事件及参数说明
当HCI_Write_Scan_Enable命令执行完毕后,会生成一个HCI_Command_Complete事件(除非该事件被屏蔽)。这是蓝牙HCI的标准流程,用于通知主机(Host)该命令已成功执行并完成了其预期的操作。
3.1. HCI_Command_Complete事件
HCI_Command_Complete事件包含了关于已执行命令的详细信息,包括:
- 事件头(Event Header):
- 事件码(Event Code):对于
HCI_Command_Complete
事件,有一个特定的事件码用于标识此事件类型。这个事件码是按照蓝牙协议规定的固定值,用于让接收方(如蓝牙主机)能够识别这是一个命令完成事件。 - 参数总长度(Parameter Total Length):指示整个事件携带的参数部分的总长度,以字节为单位。这个长度信息有助于接收方正确地解析后续的参数内容。
- 事件码(Event Code):对于
- 命令完成状态参数(Parameters):
- 命令操作码(Command Opcode):这是之前发送的
HCI_Write_Scan_Enable
命令的操作码。通过这个操作码,接收方可以确定是哪个命令完成了,因为可能同时有多个命令在执行或者排队等待执行。操作码是由操作码组字段(OGF)和操作码命令字段(OCF)组成的唯一标识符。 - 返回状态(Return Status):表示命令执行的结果状态。例如,成功完成命令可能有一个特定的值(如 0x00,表示成功),而如果出现错误,可能会返回其他错误码(如 0x01 - 0xFF 范围内的不同值,每个值对应不同的错误情况,具体取决于蓝牙协议规定)。
- 命令操作码(Command Opcode):这是之前发送的