目录
HCI_Read_Local_Supported_Commands命令是蓝牙协议栈中用于查询本地控制器支持的HCI命令列表的一个关键命令。通过此命令,Host设备可以了解控制器的功能集,从而确定可以使用的HCI命令范围。
一、命令功能
HCI_Read_Local_Supported_Commands命用于读取本地控制器支持的HCI(Host Controller Interface,主机控制器接口)命令列表。它返回的是Supported_Commands配置参数,该参数详细列出了控制器所支持的各种HCI命令。该参数是一个位域(bit-field),其中每个位都代表一个特定的HCI命令是否受支持。如果某一位被设置为1,则表示相应的HCI命令受支持;如果为0,则表示不支持。
通过这种方式,主机可以了解控制器的功能和能力,从而进行更有效的设备配置和兼容性检查。例如,如果主机知道控制器支持某个特定的HCI命令,那么它就可以使用该命令来执行相应的任务,而无需担心控制器不支持该命令而导致的错误或失败。
二、命令格式
HCI_Read_Local_Supported_Commands命令遵循HCI命令包的标准结构。
2.1. 命令包结构
HCI命令包通常由以下几个部分组成:
- Packet Type:用于标识数据包类型。对于HCI命令包,其值通常为0x01。
- Opcode:操作码,用于标识具体的HCI命令。命令的操作码由OGF(Opcode Group Field,操作码组字段)和OCF(Opcode Command Field,操作码命令字段)组成。对于HCI_Read_Local_Supported_Commands命令,OGF为0x04(表示信息参数命令组),OCF为0x0002(表示读取本地支持的命令)。
- Parameter Total Length:参数总长度,表示命令中参数部分的字节数。对于HCI_Read_Local_Supported_Commands命令,由于其通常不包含任何参数,因此参数总长度通常为0。
- Parameter:参数部分,用于传递命令所需的额外信息。对于此命令,由于不包含参数,因此该部分为空。
2.2. 响应格式
当HCI_Read_Local_Supported_Commands命令成功执行时,蓝牙控制器会返回一个HCI Command Complete事件作为响应。
该响应的格式通常遵循HCI事件包的标准结构,并包含特定于该响应的信息。响应中通常包含以下字段:
- Status:状态码,用于表示命令执行的状态。如果值为0x00,则表示命令成功执行;其他值则表示命令执行过程中发生了错误。
- Return Parameters:返回参数,包含命令执行的结果或状态信息。对于此命令,返回参数通常是一个位域(bit-field),其中每个位都代表一个特定的HCI命令是否受支持。如果某一位被设置为1,则表示相应的HCI命令受支持;如果为0,则表示不支持。
三、返回参数说明
3.1. Status
Status(状态码)是一个关键的返回参数,用于告知主机(Host)命令的执行结果。通过解析HCI_Command_Complete事件中的返回参数,主机可以了解命令的执行结果,并据此进行后续操作或错误处理。
- 0x00:表示HCI_Read_Local_Supported_Commands命令成功执行。
- 其他值:表示不同类型的错误,如参数无效、命令不允许、资源不足等。具体的错误代码和含义可以参考蓝牙核心规范中的相关描述。蓝牙Controller错误代码全面概览-CSDN博客
3.2. Supported_Commands
当主机发送一个查询控制器支持命令HCI_Read_Local_Supported_Commands时,控制器会返回一个包含Supported_Commands位域的HCI_Command_Complete事件作为响应。主机可以解析这个事件,通过检查Supported_Commands位域中的每一位来了解控制器支持哪些HCI命令。
“Supported_Commands”配置参数用于列出本地控制器支持的HCI(Host Controller Interface,主机控制器接口)命令。这是一个非常重要的参数,可以帮助主机了解控制器的功能和能力,从而进行更有效的设备配置和兼容性检查。
- 格式:Supported_Commands是一个64字节(即512位)的位域