HCI 功能规范【5.3. IDs and Handles】
2026/7/6 13:59:28 网站建设 项目流程

这部分内容属于HCI data formats下面的IDs and Handles,主要讲的是:

HCI 里面有两类“标识符”:ID 和 Handle。它们都用来标识某个对象,但使用范围不同。

简单说:

ID:主要用于两个蓝牙设备之间,会出现在空口 PDU 中 Handle:主要用于 Host 和 Controller 之间,不会直接发到空口

一、这部分整体想表达什么

这部分主要说明 HCI 中的IDHandle的区别。

在 HCI Command 和 HCI Event 中,经常会看到类似下面的字段:

Connection_Handle Advertising_Handle Sync_Handle CIS_ID CIG_ID

这些字段看起来都是“编号”,但它们不是同一种东西。

规范在这里先建立一个基础概念:

ID 和 Handle 都是 identifier,也就是标识符。 但是它们的作用范围、分配者、是否会出现在空口数据包中,是不同的。

二、关键信息 1:HCI 中有两类标识符

原文说:

Two types of identifiers are used in HCI commands and events.

意思是:

HCI Command 和 HCI Event 中使用两类标识符:

1. ID 2. Handle

它们都可以理解为“用一个数字代表某个对象”。

例如:

某一个连接 某一个广播集 某一个同步对象 某一个 CIS 某一个 CIG

但是这些数字到底是给谁看的,要看它是 ID 还是 Handle。


三、关键信息 2:ID 是 Host 分配的,并且用于两个对等设备之间

原文说:

IDs, assigned by the Host, are identifiers used between two peer devices and sent over the air in PDUs.

意思是:

ID 是由 Host 分配的。

它的使用范围是:

两个 peer device 之间

也就是两个蓝牙设备之间。

并且 ID 会被放进空口 PDU 中发送。

这里的 “over the air” 就是指通过无线链路传出去,也就是实际出现在蓝牙空口包里。

可以理解为:

Host 分配一个 ID ↓ Controller 在发送空口 PDU 时使用这个 ID ↓ 对端设备收到 PDU 后,也能看到这个 ID ↓ 双方用这个 ID 来识别某个对象

所以 ID 不是只在本机 Host 和 Controller 内部使用,它会影响两个设备之间的协议交互。


四、关键信息 3:不同类型的 ID 有各自独立的编号空间

原文说:

Each different type of ID has a separate number space. The CIS_ID has a separate number space for each CIG_ID.

意思是:

不同类型的 ID 使用不同的编号空间。

所谓number space,可以理解为“编号范围”或者“编号池”。

例如:

A 类型 ID 可以从 0 开始编号 B 类型 ID 也可以从 0 开始编号

这两个0不冲突,因为它们属于不同类型的 ID。

可以类比为:

班级 1 的 1 号学生 班级 2 的 1 号学生

两个都是 1 号,但因为班级不同,所以不会混淆。


五、关键信息 4:CIS_ID 在每个 CIG_ID 下都有独立编号空间

原文特别举了一个例子:

The CIS_ID has a separate number space for each CIG_ID.

意思是:

每个 CIG_ID 下面,CIS_ID 都有自己独立的编号空间。

这里涉及 LE Audio / Isochronous 相关概念:

CIG:Connected Isochronous Group CIS:Connected Isochronous Stream

可以简单理解为:

一个 CIG 里面可以包含多个 CIS

因此:

CIG_ID = 1 下面可以有 CIS_ID = 0 CIG_ID = 2 下面也可以有 CIS_ID = 0

这两个CIS_ID = 0不冲突,因为它们属于不同的 CIG。

可以理解成:

CIG_ID = 1 ├── CIS_ID = 0 └── CIS_ID = 1 CIG_ID = 2 ├── CIS_ID = 0 └── CIS_ID = 1

这里的CIS_ID不是全局唯一,而是在对应的CIG_ID范围内唯一。


六、关键信息 5:Handle 可以由 Host 或 Controller 分配

原文说:

Handles, assigned by either the Host in a command or by the Controller in an event...

意思是:

Handle 可以由 Host 分配,也可以由 Controller 分配。

具体由谁分配,要看具体的对象类型和具体的 HCI Command / Event。

例如:

有些 Handle 是 Host 在 HCI Command 中指定的:

Host -> Controller: 创建某个对象,并指定它的 Handle

有些 Handle 是 Controller 在 HCI Event 中返回的:

Controller -> Host: 某个对象创建完成,这是我分配给它的 Handle

最典型的就是:

Connection_Handle

连接建立完成后,Controller 会通过事件告诉 Host:

这个连接对应的 Connection_Handle 是多少

之后 Host 再操作这个连接时,就通过这个Connection_Handle指定目标连接。


七、关键信息 6:Handle 用于 Host 和 Controller 之间,不会发到空口

原文说:

handles ... are identifiers used between the Host and the Controller but not sent over the air.

意思是:

Handle 是 Host 和 Controller 之间使用的标识符,不会直接出现在空口 PDU 中。

这点非常关键。

例如Connection_Handle

Host 想让 Controller 对某个连接发送数据、断开连接、读取连接信息时,会在 HCI Command 中带上Connection_Handle

例如:

Host -> Controller: HCI_Disconnect Connection_Handle = 0x000B

意思是:

请断开 Connection_Handle 为 0x000B 的连接

但是这个0x000B只是本机 Host 和 Controller 之间识别连接用的编号。

它不会原封不动地发到空口里让对端设备看到。

对端设备并不知道你本地 Host 和 Controller 之间把这个连接叫做0x000B


八、关键信息 7:有些 Handle 共享编号空间,有些 Handle 有独立编号空间

原文说:

Some handles share the same number spaces and others have separate number spaces.

意思是:

有些 Handle 使用同一个编号空间,有些 Handle 使用不同的编号空间。

也就是说:

某些 Handle 类型之间,编号不能重复; 某些 Handle 类型之间,编号可以重复,因为它们属于不同编号空间。

这个具体要看规范对某个 Handle 的定义。

例如,某些连接相关 handle 可能在同一个范围内管理,而某些广播相关 handle、同步相关 handle 则可能有自己的编号范围。

这里暂时不需要记所有 Handle 的编号空间,只需要先理解原则:

Handle 不是全部都在一个全局编号池里。 不同 Handle 是否冲突,要看它们是否属于同一个 number space。

九、关键信息 8:新分配 ID 或 Handle 时,不能和同一编号空间内已有对象冲突

原文说:

When a device allocates an ID or Handle for a new object ... it shall not use a handle that is currently allocated to another object in the same number space.

意思是:

当设备为一个新对象分配 ID 或 Handle 时,不能使用同一编号空间中已经被其他对象占用的值。

例如 Controller 为一个新的 ACL 连接分配Connection_Handle时,不能分配一个当前已经被别的连接使用的Connection_Handle

错误示例:

ACL Connection A -> Connection_Handle = 0x000B ACL Connection B -> Connection_Handle = 0x000B

如果 A 和 B 属于同一个编号空间,这就是错误的。

正确示例:

ACL Connection A -> Connection_Handle = 0x000B ACL Connection B -> Connection_Handle = 0x000C

这样 Host 才能明确知道:

0x000B 对应连接 A 0x000C 对应连接 B

否则 Host 后续发送命令时就无法区分到底操作哪条连接。


十、关键信息 9:对象删除后,ID 或 Handle 可以被复用

原文说:

After a device deletes an ID or Handle ... it may reuse the ID or Handle.

意思是:

当某个对象被删除后,它对应的 ID 或 Handle 可以被重新使用。

例如:

连接 A 建立 Connection_Handle = 0x000B 连接 A 断开 Connection_Handle = 0x000B 被释放 后面连接 B 建立 Controller 可以再次使用 Connection_Handle = 0x000B

所以Connection_Handle不是永久唯一的。

它只是在当前对象存在期间有效。

这点在分析日志时非常重要:

同一个 Connection_Handle 在不同时间段可能代表不同连接。

例如你在 btsnoop 里看到:

10:00:00 Connection_Handle = 0x000B 10:00:10 Disconnection Complete, Handle = 0x000B 10:00:20 Connection Complete, Handle = 0x000B

不能简单认为 10:00:00 和 10:00:20 的0x000B一定是同一条连接。

中间已经断开过,所以后面的0x000B可能是新的连接复用了旧 handle。


十一、ID 和 Handle 的核心区别

可以这样理解:

ID: - 由 Host 分配 - 用于两个 peer device 之间 - 会出现在空口 PDU 中 - 不同类型 ID 有独立编号空间 Handle: - 可由 Host 或 Controller 分配 - 用于 Host 和 Controller 之间 - 不会直接出现在空口 PDU 中 - 有些 Handle 共享编号空间,有些有独立编号空间

更直观地说:

ID 是“设备与设备之间”的标识符 Handle 是“Host 与 Controller 之间”的标识符

十二、结合 BLE 学习时怎么理解

在 BLE 学习中,最常见、最需要先掌握的是:

Connection_Handle

它是一个典型的 Handle。

连接建立之后,Controller 会分配一个Connection_Handle,并通过 HCI Event 告诉 Host。

之后 Host 想对这条连接做操作,都要带上这个 Handle。

例如:

断开连接 更新连接参数 读取远端版本信息 发送 ACL Data 处理 Number Of Completed Packets

这些场景都会用到Connection_Handle

但是要记住:

Connection_Handle 只是本机 Host 和 Controller 之间使用的连接编号。 它不是对端设备地址。 它不是蓝牙 MAC 地址。 它也不是空口连接标识。

十三、一个简单例子

假设手机作为 Central 连接了两个 BLE 外设:

外设 A:DC:0D:30:00:06:F6 外设 B:AA:BB:CC:DD:EE:FF

Controller 可能分配:

外设 A 的连接:Connection_Handle = 0x000B 外设 B 的连接:Connection_Handle = 0x000C

之后 Host 要断开外设 A,就发:

HCI_Disconnect Connection_Handle = 0x000B

Host 要给外设 B 发 ACL Data,就在 ACL Data packet 里带:

Connection_Handle = 0x000C

这里的0x000B0x000C只是本机内部 HCI 层使用的编号。

外设 A 和外设 B 并不知道手机本地给这两条连接分配了什么Connection_Handle


十四、这部分可以总结为

这部分内容讲的是 HCI 中ID 和 Handle 的基本概念与使用规则

核心结论是:

1. HCI 中有两类标识符:ID 和 Handle。 2. ID 由 Host 分配,用于两个 peer device 之间,会出现在空口 PDU 中。 3. Handle 由 Host 或 Controller 分配,用于 Host 和 Controller 之间,不会出现在空口 PDU 中。 4. 不同 ID / Handle 可能有不同的编号空间。 5. 同一个编号空间中,正在使用的 ID 或 Handle 不能重复。 6. 当对象被删除后,它的 ID 或 Handle 可以被重新使用。

对 BLE 学习来说,最重要的是先理解:

Connection_Handle 是 Host 和 Controller 之间用来标识某条连接的本地编号。 它不是设备地址,也不是永久唯一 ID。 连接断开后,这个 handle 可以被释放并在后续连接中复用。

这部分内容属于HCI data formats → IDs and Handles → Controller handles,主要讲的是:

HCI 中有哪些 Controller Handle,这些 Handle 由谁分配、用于标识什么对象、编号空间如何划分,以及一个特殊的 Broadcast Connection_Handle 如何处理。

这一节比较偏“规则说明”,核心是在告诉你:不同类型的 Handle 虽然都叫 Handle,但它们不一定由同一方分配,也不一定处在同一个编号空间中。


一、这部分整体想表达什么

HCI 中存在多种 Controller Handle,主要包括:

Connection_Handle Sync_Handle Advertising_Handle BIG_Handle

这些 Handle 都是 Host 和 Controller 之间使用的标识符,用来标识某些逻辑对象或逻辑通道。

其中最重要的是:

Connection_Handle:标识连接或逻辑传输 Sync_Handle:标识周期广播同步相关逻辑传输 Advertising_Handle:标识一个 advertising set BIG_Handle:标识一个 BIG

这部分的重点不是讲这些对象的完整工作流程,而是讲:

这些 Handle 是谁分配的? 什么时候分配? 通过什么 HCI Command 或 HCI Event 告诉对方? 它们是否共享编号空间?

二、关键信息 1:Controller Handle 用于标识 Host 和 Controller 之间的逻辑通道

原文说:

Connection_Handles, Sync_Handles, Advertising_Handles, and BIG_Handles are Controller Handles used to identify logical channels between the Host and the Controller.

意思是:

这些 Handle 都属于Controller Handle,用于标识 Host 和 Controller 之间的 logical channel。

这里的logical channel不一定是一个真实的物理链路,而是 Host 和 Controller 之间为了管理某个蓝牙对象而使用的逻辑编号。

例如:

一条 ACL 连接 一个同步对象 一个扩展广播集 一个 BIG 广播等时组

Host 后续要操作这些对象时,就通过对应的 Handle 告诉 Controller:

我要操作哪一个连接? 我要操作哪一个广播集? 我要操作哪一个周期广播同步? 我要操作哪一个 BIG?

所以 Handle 的作用就是“定位对象”。


三、关键信息 2:Connection_Handle 通常由 Controller 分配

原文说:

Connection_Handles are assigned by the Controller when a new logical transport is created or reserved...

意思是:

当新的 logical transport 被创建或预留时,Connection_Handle通常由 Controller 分配。

然后 Controller 会通过相关 HCI Event 把这个 Handle 上报给 Host。

常见事件包括:

HCI_Connection_Complete HCI_Synchronous_Connection_Complete HCI_LE_Connection_Complete HCI_LE_Enhanced_Connection_Complete HCI_LE_CIS_Request HCI_LE_Create_BIG_Complete HCI_LE_BIG_Sync_Established HCI_Command_Complete

不用一开始把这些事件都背下来,先抓住本质:

连接或逻辑传输创建完成后,Controller 会分配 Connection_Handle,并通过事件告诉 Host。

例如 BLE 中最常见的是:

HCI_LE_Connection_Complete event

或者新版本中更常见的是:

HCI_LE_Enhanced_Connection_Complete event

它们会告诉 Host:

连接建立成功 这个连接的 Connection_Handle 是多少 对端地址是什么 连接间隔是多少 连接延迟是多少 监督超时时间是多少

之后 Host 再发送 ACL Data 或连接管理命令时,就通过这个Connection_Handle指定这条连接。


四、关键信息 3:Sync_Handle 由 Controller 分配

原文说:

Sync_Handles are assigned by the Controller when a new logical transport is created and reported to the Host in the HCI_LE_Periodic_Advertising_Sync_Established event.

意思是:

Sync_Handle是 Controller 在创建新的同步逻辑传输时分配的。

它会通过下面这个事件报告给 Host:

HCI_LE_Periodic_Advertising_Sync_Established event

这个主要和Periodic Advertising有关。

可以简单理解为:

Host 让 Controller 去同步某个周期广播 ↓ Controller 成功同步后 ↓ Controller 分配一个 Sync_Handle ↓ 之后 Host 用这个 Sync_Handle 管理这个周期广播同步对象

例如后续要终止同步、接收周期广播报告、处理同步状态时,就会用到这个Sync_Handle


五、关键信息 4:Advertising_Handle 由 Host 分配

原文说:

Advertising_Handles are assigned by the Host when a new advertising set is created by using the HCI_LE_Set_Extended_Advertising_Parameters command.

意思是:

Advertising_Handle是由 Host 分配的。

当 Host 使用下面这个命令创建一个新的 advertising set 时,会指定一个Advertising_Handle

HCI_LE_Set_Extended_Advertising_Parameters command

这个主要和Extended Advertising有关。

在 Legacy Advertising 时代,通常只有一组广播参数,所以不需要用Advertising_Handle区分多个广播集。

但 Extended Advertising 支持多个 advertising sets,因此需要一个编号来区分:

Advertising_Handle = 0x00 Advertising_Handle = 0x01 Advertising_Handle = 0x02

每个 handle 可以对应一组不同的广播配置,例如:

Advertising_Handle = 0x00:普通可连接广播 Advertising_Handle = 0x01:周期广播相关广播集 Advertising_Handle = 0x02:厂商数据广播

之后 Host 设置广播数据、扫描响应数据、使能广播时,都可以通过Advertising_Handle指定操作哪一个 advertising set。


六、关键信息 5:BIG_Handle 由 Host 分配

原文说:

BIG_Handles are assigned by the Host when a new BIG is created...

意思是:

BIG_Handle也是由 Host 分配的。

BIG 是:

Broadcast Isochronous Group

也就是广播等时组,主要和 LE Audio 的广播音频相关。

Host 创建 BIG 时,会通过相关命令指定BIG_Handle,例如:

HCI_LE_Create_BIG HCI_LE_Create_BIG_Test LE_BIG_Create_Sync

这里不需要一开始深入 LE Audio,只要先理解:

BIG_Handle 用来标识一个 BIG 对象。 Host 创建 BIG 时指定这个 Handle。 后续 Controller 和 Host 通过这个 Handle 管理这个 BIG。

七、关键信息 6:不同 Handle 的编号空间不同

原文说:

All connection handles that are assigned by the Controller shall be derived from the same number space. Sync handles shall be assigned by the Controller from a separate number space. Advertising handles and BIG handles are assigned by the Host from separate number spaces.

这几句话非常重要。

它们说明了编号空间的划分:

Connection_Handle:Controller 分配,来自同一个 Connection_Handle 编号空间 Sync_Handle:Controller 分配,但使用单独的编号空间 Advertising_Handle:Host 分配,使用单独的编号空间 BIG_Handle:Host 分配,使用单独的编号空间

也就是说:

Connection_Handle = 0x0001 Sync_Handle = 0x0001 Advertising_Handle = 0x0001 BIG_Handle = 0x0001

这些数值即使一样,也不一定冲突,因为它们属于不同类型、不同编号空间。

但是在同一个编号空间中,正在使用的 Handle 不能重复。

例如两个当前存在的 ACL 连接不能同时使用同一个Connection_Handle

连接 A:Connection_Handle = 0x000B 连接 B:Connection_Handle = 0x000B // 不允许

但是下面这种情况可能是允许的:

Connection_Handle = 0x000B Advertising_Handle = 0x0B

因为它们不是同一个编号空间。


八、关键信息 7:Broadcast Connection_Handle 是一个特殊情况

下面的5.3.1.1 Broadcast Connection_Handles讲的是一个特殊规则:

Broadcast Connection_Handle

这部分主要是 BR/EDR 里的广播相关内容,不是你当前学习 BLE Legacy 广播时最核心的内容。

但是可以先理解它的规则:

当 Host 第一次发送一个 HCI ACL Data packet,并且其中:

Broadcast_Flag = 0b01

也就是active Peripheral broadcast时,如果是在上电或 reset 之后第一次这样发送,那么:

Connection_Handle 的值必须是当前 Controller 没有使用的 handle。

随后 BR/EDR Controller 会继续使用这个相同的Connection_Handle做 broadcast,直到下一次 reset。


九、关键信息 8:Broadcast Connection_Handle 一旦用于 broadcast,Controller 不应重新分配给别的连接

原文说:

The Controller shall not re-allocate a Connection_Handle that it knows is used for broadcast.

意思是:

Controller 如果知道某个Connection_Handle已经被用于 broadcast,就不应该再把这个Connection_Handle分配给其他连接。

因为如果同一个Connection_Handle同时用于 broadcast 和新连接,Host 和 Controller 之间就会产生歧义:

这个 ACL Data 到底是 broadcast 数据? 还是某条新连接的数据?

所以原则上要避免这种冲突。


十、关键信息 9:规范考虑了极少见的冲突情况

原文提到一种特殊情况:

Controller 可能还没有来得及解析 Host 发送的 Broadcast packet,就先发送了 Connection Complete event。

这样就可能出现:

Connection Complete event 中的 Connection_Handle 和 Host 发送的 broadcast ACL Data packet 中的 Connection_Handle 相同

也就是:

新连接的 Connection_Handle 和 broadcast 使用的 Connection_Handle 冲突了

规范说这种冲突是可以避免并处理的。

处理方式是:

如果 Host 收到 Connection Complete event,里面的 Connection_Handle 正好是 broadcast 用过的 handle, Host 应该先等待,不要马上给这条新连接发送数据。

要等到:

Number Of Completed Packets event

表明该 Connection_Handle 对应的 pending broadcast packets 已经没有了。

然后 Host 还要:

把 broadcast 使用的 Connection_Handle 改成另一个当前没有被 Controller 分配使用的值。

之后,Connection Complete event 中那个Connection_Handle才能用于新连接。


十一、为什么要这样处理

这个规则的目的是让 Controller 可以区分:

Host 之前发送的 broadcast message

和:

后来新建立的 connection

即使它们一度使用了相同的Connection_Handle,也能通过等待 pending packet 清空和更换 broadcast handle 的方式,避免数据归属混乱。

可以简单理解为:

旧的 broadcast 数据还没处理完 ↓ 新连接碰巧也用了同一个 Connection_Handle ↓ Host 不能马上用这个 Handle 给新连接发数据 ↓ 先等旧 broadcast 数据处理完 ↓ 再把 broadcast 改用别的 Handle ↓ 这个 Handle 才正式归新连接使用

十二、关键信息 10:从 Controller 发给 Host 的 broadcast ACL Data,Connection_Handle 应该填 ACL connection 的 handle

原文说:

For an HCI ACL Data packet sent from the Controller to the Host where the Broadcast_Flag is 01, the Connection_Handle parameter should contain the Connection_Handle for the ACL connection to the Central that sent the broadcast.

意思是:

如果 Controller 向 Host 发送一个 HCI ACL Data packet,并且其中Broadcast_Flag = 01,那么Connection_Handle应该包含发送该 broadcast 的 Central 对应 ACL connection 的 handle。

这部分仍然是 BR/EDR broadcast 场景,不是 BLE 广播包里那种 Advertising Data。

所以这里千万不要和 BLE Advertising 混在一起。


十三、关键信息 11:Connectionless Peripheral Broadcast 不分配 Connection_Handle

原文最后说:

For Connectionless Peripheral Broadcast, no Connection_Handle is assigned.

意思是:

对于Connectionless Peripheral Broadcast,不会分配Connection_Handle

也就是说,不是所有 broadcast 都一定有 Connection_Handle。是否有 Handle,取决于具体 broadcast 类型。


十四、这部分和 BLE 学习的关系

如果你当前目标是理解 BLE,尤其是:

BLE Legacy Advertising BLE Scanning BLE Connection HCI Command / Event ACL Data

那么这一节里最重要的是前半部分,也就是:

Connection_Handle Sync_Handle Advertising_Handle BIG_Handle

其中你最应该优先掌握的是:

Connection_Handle Advertising_Handle Sync_Handle

优先级可以这样排:

第一优先级:Connection_Handle 第二优先级:Advertising_Handle 第三优先级:Sync_Handle 第四优先级:BIG_Handle

至于Broadcast Connection_Handles这一小节,主要是 BR/EDR broadcast 相关内容。如果你的目标是 BLE,可以先了解概念,不需要现在深挖。


十五、几个容易混淆的点

1. Advertising_Handle 不是 BLE 设备地址

Advertising_Handle只是 Host 创建 extended advertising set 时指定的本地编号。

它不是:

Public Device Address Random Device Address Resolvable Private Address

它只是用来区分多个 advertising sets。


2. Connection_Handle 不是对端设备地址

Connection_Handle是 Controller 分配给某条连接的本地编号。

它不是:

对端 MAC 地址 Identity Address Random Address

同一个外设断开后重新连接,可能得到新的Connection_Handle

不同外设连接时,也会有不同的Connection_Handle


3. Handle 可以复用

连接断开、同步删除、广播集删除之后,对应的 Handle 值可能被再次使用。

所以分析日志时要结合时间线:

Connection Complete ACL Data Disconnection Complete Connection Complete

不能只看到相同 Handle 就认为一定是同一个对象。


4. Legacy Advertising 通常不用 Advertising_Handle

你之前重点看的:

LE Set Advertising Parameters LE Set Advertising Data LE Set Scan Response Data LE Set Advertising Enable

这些是 Legacy Advertising 常用命令。

Legacy Advertising 通常没有Advertising_Handle这个概念。

Advertising_Handle主要出现在 Extended Advertising 相关命令中,例如:

HCI_LE_Set_Extended_Advertising_Parameters HCI_LE_Set_Extended_Advertising_Data HCI_LE_Set_Extended_Scan_Response_Data HCI_LE_Set_Extended_Advertising_Enable

十六、可以这样总结

这部分内容讲的是Controller Handles 的分类、分配者、使用场景和编号空间规则

核心结论是:

1. Connection_Handle、Sync_Handle、Advertising_Handle、BIG_Handle 都是 Controller Handle。 2. 它们用于 Host 和 Controller 之间标识逻辑对象或逻辑通道。 3. Connection_Handle 通常由 Controller 分配,并通过连接完成类事件上报给 Host。 4. Sync_Handle 由 Controller 分配,用于 Periodic Advertising Sync。 5. Advertising_Handle 由 Host 分配,用于 Extended Advertising 中区分多个 advertising sets。 6. BIG_Handle 由 Host 分配,用于 BIG 广播等时组。 7. Connection_Handle、Sync_Handle、Advertising_Handle、BIG_Handle 处在不同的编号空间中。 8. 同一个编号空间内,正在使用的 Handle 不能重复;对象释放后 Handle 可以复用。 9. Broadcast Connection_Handle 是 BR/EDR broadcast 相关的特殊规则,学习 BLE 时可以先了解,不必作为重点深挖。

对你当前学习 BLE 来说,这一节最实用的理解是:

Connection_Handle 用来标识一条已经建立的连接; Advertising_Handle 用来标识一个扩展广播集; Sync_Handle 用来标识一个周期广播同步对象; 这些 Handle 都不是蓝牙设备地址,而是 Host 和 Controller 之间管理对象用的编号。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询