目录
2.1. HCI_Create_Connection 命令命令格式
2.4. Page_Scan_Repetition_Mode
3.2. HCI_Connection_Complete 事件
HCI_Create_Connection 命令的主要功能是指示链路管理器(Link Manager)创建一个与远程设备的连接。这个连接是在BR/EDR控制器层面,通过发起寻呼(Page)过程来建立链路级别的连接。链路管理器会根据本地设备的当前状态、微微网(piconet)状态以及待连接设备的状态,来确定新的ACL连接的建立方式。
一、命令概述
HCI_Create_Connection 命令核心功能在于促使链路管理器依据命令参数中指定的远程设备的 BD_ADDR(蓝牙设备地址),创建与该远程设备的连接。一旦此命令被执行,本地的BR/EDR控制器便会启动寻呼(Page)流程,进而创建链路级别的连接。
关于新的ACL连接具体如何建立,并非固定不变,而是由多方面因素共同决定。链路管理器会综合考量本地设备的当前状态、所在微微网(piconet)的情况以及待连接设备的状态,来最终确定该 ACL 连接的建立方式,以此实现不同蓝牙设备间有效的链路连接搭建,为后续的数据通信等操作奠定基础。
二、命令格式及参数
2.1. HCI_Create_Connection
命令命令格式
HCI_Create_Connection
命令的格式通常遵循HCI(Host Controller Interface)协议的规范,由操作码(OpCode)、参数总长度(Parameter_Total_Length)和各个参数组成。
- 操作码(OpCode):由操作码组字段(OGF)和操作码命令字段(OCF)组成,用于标识特定的HCI命令。对于
HCI_Create_Connection
命令,OGF通常为0x01(表示链路控制),OCF为0x0005。 - 参数总长度(Parameter_Total_Length):表示命令参数的总长度(以字节为单位)。
- 命令参数:包括 BD_ADDR、Packet_Type、Page_Scan_Repetition_Mode、Reserved、Clock_Offset 和 Allow_Role_Switch,这些参数按照一定的顺序排列,用于向链路管理器提供创建连接所需的详细信息。
- 示例:以下是一个
HCI_Create_Connection
命令的示例:- 操作码:0x0405(由OGF 0x01和OCF 0x0005组成)
- 参数总长度:13字节(0x0D)
- 参数:
- BD_ADDR:0x34:0x36:0x55:0xce:0x01:0xeb(示例地址)
- Packet_Type:0xcc18(示例值,表示支持多种数据包类型)
- Page_Scan_Repetition_Mode:0x01(表示R1模式)
- Reserved:0x00
- Clock_Offset:0xf094(示例值,表示有效的时钟偏移)
- Allow_Role_Switch:0x01(表示支持角色互换)
2.2. BD_ADDR
BD_ADDR是远程设备的蓝牙设备地址(Bluetooth Device Address),用于唯一标识要连接的目标设备。链路管理器将依据这个地址来发起与特定远程设备的连接过程。
2.3. Packet_Type
Packet_Type参数指定了链路管理器在 ACL 连接中应该使用的数据包类型。主机(Host)不能指定本地控制器不支持的数据包类型。在发送 HCI ACL 数据分组时,链路管理器只能使用由 Packet_Type 指定的数据包类型或者始终允许的 DM1 数据包类型。可以通过对不同数据包类型进行按位或(bit - wise OR)操作来为 Packet_Type 参数指定多种数据包类型,然后链路管理器会从可接受的数据包类型列表中选择要使用的数据包类型。不同数据包类型的详细定义可参考蓝牙协议文档 [Vol 2] Part B, Section 6.5。
每一位都对应着一种或多种可能的数据包类型。
- 位 1(2-DH1):不使用。意味着2-DH1类型的数据包在当前的连接中不应被使用。
- 位 2(3-DH1):不使用。与位1类似,3-DH1类型的数据包也不应被使用。
- 位 3:忽略;无论此位是否设置,DM1数据包都可能被使用。意味着DM1数据包是默认可用的,不受此位的影响。
- 位 4(DH1):可以使用。如果设置了此位,则DH1类型的数据包可能被使用。
- 位 8(2-DH3):不使用。2-DH3类型的数据包在当前的连接中不应被使用。
- 位 9(3-DH3):不使用。与位8类似,3-DH3类型的数据包也不应被使用。
- 位 10(DM3):可以使用。如果设置了此位,则DM3类型的数据包可能被使用。
- 位 11(DH3):可以使用。如果设置了此位,则DH3类型的数据包可能被使用。
- 位 12(2-DH5):不使用。2-DH5类型的数据包在当前的连接中不应被使用。
- 位 13(3-DH5):不应使用。与位12类似,3-DH5类型的数据包也不应被使用。
- 位 14(DM5):可以使用。如果设置了此位,则DM5类型的数据包可能被使用。
- 位 15(DH5):可以使用。如果设置了此位,则DH5类型的数据包可能被使用。
- 所有其他位:保留供将来使用。这些位在当前版本中未定义,应设置为0。
数据包类型解释
- DMx:表示数据(Data)模式下的x个时隙数据包。DM1、DM3和DM5分别表示1、3和5个时隙的数据包。
- DHx:表示数据(Data)和握手(Handshake)模式下的x个时隙数据包。DH1、DH3和DH5分别表示1、3和5个时隙的数据包,其中包含握手信息。
- 2-DHx 和 3-DHx:这些表示特定于蓝牙核心规范版本的数据包类型,通常与不同的调制方式和/或编码方案相关。在蓝牙的经典规范中(如1.x和2.x版本),这些类型可能不被使用或具有特定的含义。
2.4. Page_Scan_Repetition_Mode
Page_Scan_Repetition_Mode参数指定了具