当前位置: 首页 > news >正文

HCI 功能规范【4.8. Versioned events】

这部分是4.8 Versioned events,讲的是:

如果同一个 HCI Event 存在多个版本,那么 Controller 在生成这个事件时,应该使用“自己支持并且当前已启用”的最新版本。

这一节很短,但它解释了一个很重要的兼容规则:同一个事件可能随着蓝牙规范版本演进而出现 v1、v2、v3 等不同版本,Controller 不一定总是使用最老版本,也不一定使用绝对最新版本,而是使用“支持 + 已启用”的最新版本。


1. 这部分整体表述了哪些知识

这部分主要表达 3 个知识点:

1. 有些 HCI Event 不只有一个版本。 2. 当 Controller 需要生成这个事件时,应选择最新的可用版本。 3. 这个“最新版本”必须同时满足两个条件: - Controller 支持这个版本; - 这个版本对应的 event mask 已经启用,也就是 unmasked。

核心逻辑是:

事件有多个版本 ↓ Controller 不能随便选 ↓ 要选自己支持且 Host 已启用的最新版本

2. 什么是 Versioned events

Versioned events可以理解为:

带版本的 HCI Event

也就是说,同一个事件随着蓝牙规范发展,可能出现多个版本。

例如早期版本的事件参数较少,后续版本为了支持新特性,可能增加字段或调整表达能力。

可以理解为:

某事件 v1:早期格式,参数较少 某事件 v2:后续格式,参数更多,能表达更多信息 某事件 v3:更新格式,支持更新特性

注意:这里不是说事件名字一定完全一样,有些事件可能是同类事件的增强版本或扩展版本。


3. 为什么 HCI Event 会有多个版本

蓝牙规范一直在演进,新的蓝牙版本会增加新能力,例如:

扩展广播 周期广播 LE 2M PHY LE Coded PHY 更丰富的连接信息 ISO / LE Audio 更多同步信息

老版本事件的参数可能不够表达新能力,所以需要新的事件版本。

例如早期 BLE 连接完成事件可能只需要表达基本连接信息;后来如果需要表达更多 PHY、地址、增强连接参数等信息,就可能需要增强版事件。

这类设计的目的不是推翻旧事件,而是为了兼容老 Host、老 Controller,同时让新 Host、新 Controller 能使用更丰富的信息。


4. Controller 应该使用哪个版本

原文说:

the Controller shall use the latest version that is both supported and enabled

意思是:

Controller 应该使用“同时被支持并且已启用”的最新版本。

这里有两个条件:

supported enabled

两个都满足才行。


4.1 supported:Controller 支持该事件版本

supported表示 Controller 自己具备生成这个事件版本的能力。

例如:

Controller 只支持事件 v1 Controller 支持事件 v1 和 v2 Controller 支持事件 v1、v2、v3

如果 Controller 根本不支持 v3,那么即使 Host 希望使用 v3,Controller 也不能生成 v3。


4.2 enabled / unmasked:Host 已经通过 event mask 启用该事件

enabled的意思是这个事件没有被 mask 掉,也就是处于:

unmasked

状态。

HCI 中有一些 event mask,用来控制 Controller 哪些事件可以上报给 Host。

如果某个事件被 mask 掉,Controller 即使支持它,也不应该上报。

可以理解为:

event mask = 事件开关表 unmasked = 这个事件允许上报 masked = 这个事件被屏蔽,不允许上报

所以 Controller 选择事件版本时,不仅要看自己支不支持,还要看 Host 是否启用了对应事件。


5. “latest version that is both supported and enabled” 怎么理解

假设某个事件有 3 个版本:

Event v1 Event v2 Event v3

Controller 支持:

v1、v2、v3

但 Host 只启用了:

v1、v2

那么 Controller 应该生成:

v2

因为 v3 虽然 Controller 支持,但没有被 Host 启用。

再举一个例子:

Controller 只支持:

v1、v2

Host 启用了:

v1、v2、v3

那么 Controller 也只能生成:

v2

因为 v3 虽然 Host 启用了,但 Controller 不支持。

再举一个例子:

Controller 支持:

v1、v2、v3

Host 启用了:

v1、v3

如果规范允许这种独立 mask 情况,那么 Controller 应该选择:

v3

因为它是同时 supported 和 enabled 的最新版本。


6. event mask 在这里为什么重要

HCI Event 不是 Controller 想上报什么就一定上报什么。

Host 可以通过 event mask 控制事件上报范围。

这样做有几个目的:

减少 Host 不关心的事件 避免 Host 收到自己不能解析的事件 兼容旧 Host 让 Host 明确选择使用哪个事件版本

比如一个旧 Host 只能解析旧版本事件,如果 Controller 直接上报新版本事件,Host 可能解析失败。

所以 Host 通过 event mask 告诉 Controller:

哪些事件我允许你上报 哪些事件你不要上报

这就是为什么 versioned events 需要同时看:

Controller 支持能力 Host event mask 设置

7. masked 和 unmasked 是什么意思

在 HCI 语境里:

masked = 被屏蔽 unmasked = 没有被屏蔽,也就是已启用

如果某个 event 被 masked:

Controller 不应把这个 event 上报给 Host

如果某个 event 被 unmasked:

Controller 可以把这个 event 上报给 Host

所以原文中的:

enabled (“unmasked”) in the relevant event mask

意思是:

在相关 event mask 中,这个事件已经被启用,也就是没有被屏蔽。

8. 为什么要用最新版本

如果 Host 和 Controller 都支持并启用了较新的事件版本,Controller 应该使用最新版本,因为新版本通常包含更多信息,能更好表达新特性。

例如:

旧事件:只能表达基本结果 新事件:能表达更多地址信息、PHY 信息、同步信息、扩展参数

这样 Host 就能获得更完整的数据。

但是不能无条件使用最新版本,因为要防止 Host 不支持或未启用该版本。

所以规则不是:

永远用最新版本

而是:

用 supported + enabled 范围内的最新版本

9. 这部分和蓝牙版本兼容有什么关系

这一节本质上是一个兼容性规则。

蓝牙产品中常见组合是:

新 Controller + 旧 Host 旧 Controller + 新 Host Host 和 Controller 支持版本不同

如果没有 versioned events 规则,就可能出现:

Controller 上报了 Host 不能解析的新事件 Host 启用了新事件但 Controller 不支持 同一个事件新旧版本同时出现造成混乱

所以规范要求 Controller 根据“支持 + 启用”来选择事件版本。

这可以保证:

Host 不会收到自己没有启用的事件版本 Controller 不会生成自己不支持的事件版本 在可用范围内尽量使用信息最完整的新版本

10. 对 BLE 学习的实际意义

对 BLE 学习来说,这部分主要影响 HCI log 分析。

当你看到某个事件时,要意识到:

同类事件可能有老版本和新版本 Controller 实际上报哪个版本,取决于: Controller 支持什么 Host 通过 event mask 启用了什么

所以不同手机、不同蓝牙芯片、不同系统版本上,HCI log 里看到的事件可能不完全一样。

例如某些设备可能上报旧事件:

LE Connection Complete

而另一些设备可能上报增强版事件:

LE Enhanced Connection Complete

这并不一定代表业务流程不同,可能只是 Host/Controller 支持能力和 event mask 配置不同。


11. 学习时要注意什么

看 HCI 事件时,不要只记一个事件名,要注意它可能有版本或增强形式。

建议形成这样的查阅习惯:

1. 先看这个事件有没有多个版本。 2. 再看 Controller 是否支持对应版本。 3. 再看 Host 是否通过 event mask 启用了对应事件。 4. 最后看实际 HCI log 中 Controller 上报的是哪个版本。

如果分析 HCI log 时发现“规范里还有一个更新事件,但日志里没有出现”,可能原因是:

Controller 不支持 Host 没有启用 当前场景不触发 相关 event mask 没打开 系统蓝牙栈选择了兼容旧事件

12. 这部分关键信息总结

12.1 有些 HCI Event 有多个版本

这些事件随着蓝牙规范演进,可能出现旧版本、新版本、增强版本。


12.2 Controller 生成事件时,要选择合适版本

选择规则是:

使用 Controller 支持,并且 Host 已启用的最新版本。

12.3 supported 和 enabled 都必须满足

supported:Controller 支持该事件版本 enabled / unmasked:Host 通过 event mask 允许该事件上报

缺一不可。


12.4 event mask 是 Host 控制事件上报的机制

Host 通过 event mask 告诉 Controller:

哪些事件可以上报 哪些事件不要上报

12.5 新版本事件通常携带更多信息

如果 Host 和 Controller 都支持并启用新版本,Controller 应该使用新版本。


12.6 不同设备上看到不同事件版本是正常的

这可能由 Controller 能力、Host 协议栈版本、event mask 配置共同决定。


13. 最核心的一句话

这一节可以总结为:

Versioned events 的核心规则是:如果某个 HCI Event 存在多个版本,Controller 在生成该事件时,应使用自己支持并且 Host 已通过 event mask 启用的最新版本;这样既能尽量使用新版本事件携带更多信息,又能避免上报 Host 没有启用或无法处理的事件版本。

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

同一个 BLE 流程在不同手机、不同 Controller、不同系统版本上,HCI log 中看到的事件版本可能不同;分析时要结合 Controller 支持能力和 event mask 配置来看,不能只按一个固定事件名理解。
http://www.cnnetsun.cn/news/3161179.html

相关文章:

  • 总目录 2026版国家级全领域科研痛点攻关
  • 第25篇:数据安全:从“边界防护”到“纵深防御”
  • 关于C++多重继承下虚表结构的问题
  • Redis分布式锁进阶第三十七篇
  • 奇迹 MU 剑与翼手游官网下载:奇迹 MU 剑与翼最新官方下载渠道
  • SRC漏洞挖掘入门:8种实战姿势与零基础进阶路径
  • Three.js 城市光影教程
  • 数学的本质是什么?——数学为什么如此不可思议地有效-龍德明宇
  • 主动推理-信息组织
  • SpringBoot3.x新特性解读与迁移指南
  • 影刀RPA深度教程:异常处理与调试完全指南
  • 泳池设备品牌哪家好
  • 《欠你的那场婚礼》 台剧|在线观看|电视剧|夸克|下载|豆瓣
  • 嵌入式系统2x2矩阵键盘设计与74HC32应用
  • 模型回滚流程:版本能切回去,数据也要对得上
  • LangGraph 工作流:用业务场景检验技术取舍
  • 2026年GEO贴牌代理源码解构:核心状态机深度拆解
  • SpringBoot项目从开发到部署的完整指南
  • Java分布式架构设计方法
  • Allegro PCB设计环境搭建与高速布线实战指南
  • 互联网大厂 Java 求职者面试:音视频领域的挑战与机遇
  • OpenCV核心接口与图像处理实战指南
  • 基于YOLOv8的铁轨障碍物智能检测系统实战指南
  • NSED协议:分布式共识与AI协同决策的创新实践
  • YOLO与3D点云融合:从环境搭建到2D-3D关联实战指南
  • 开源云WAF部署与配置实战:防渗透、防CC、防漏洞攻击
  • 基于YOLO的智能麻将识别:从数据标注到模型部署全流程实战
  • Windows系统深度优化架构与最佳实践方案:Win11Debloat技术解析
  • YOLO26目标检测实战:从环境搭建到自定义数据集训练全流程
  • YOLO目标检测从入门到实战:环境搭建、模型训练与10大项目应用