【0x0005】HCI_Create_Connection命令详解

目录

一、命令概述

二、命令格式及参数

2.1. HCI_Create_Connection 命令命令格式

2.2. BD_ADDR

2.3. Packet_Type

2.4. Page_Scan_Repetition_Mode

2.5. Reserved

2.6. Clock_Offset

2.7. Allow_Role_Switch

三、返回事件及参数

3.1. HCI_Command_Status 事件

3.2. HCI_Connection_Complete 事件

四、命令执行流程

4.1. 命令发起

4.2. 命令接收与初步反馈

4.3. 连接建立过程

4.4. 连接完成反馈

4.5. 后续操作与管理

4.6. 示例代码

五、应用场景

5.1. 智能手机与蓝牙耳机连接

5.2. 智能手表与手机的数据同步

5.3. 蓝牙音箱多设备连接

5.4. 工业蓝牙传感器与数据采集器连接

5.5. 蓝牙键盘与电脑连接

5.6. 蓝牙健康监测设备与手机连接

5.7. 蓝牙打印机与移动设备连接

六、注意事项和使用建议

6.1. 注意事项

6.2. 使用建议


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参数指定了具

评论 61
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

byte轻骑兵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值