蓝牙 GATT 服务 uuid 概述

Bluetooth GATT service uuid overview

我正在考虑为自定义应用程序实施几个 GATT 服务,但我现在陷入了研究。我知道服务 uuid 不是随机的,有些部分定义明确,其他部分仍然让我感到困惑。

例如设备信息服务似乎被宣传为 0000180a-xxx 我可以在 https://www.bluetooth.com/specifications/gatt/services/, but e.g. the subfield "Model Number String" has the id 00002a24-xxx, a total different prefix which is also not defined in the same list, but instead here: https://www.bluetooth.com/specifications/gatt/characteristics/ 中找到的“180a”。我怎样才能得到所有这些前缀的列表?

我用 xxx 标记的部分是否与我的手机找到的随机设备相同。有什么地方概述了应该如何构建 uuid 以及我可以将哪些 "safe" 前缀用于我自己的 GATT 服务?

在蓝牙中,属性类型、GATT服务类型、特征类型和描述符类型等常量都是通过UUID标识的。

UUID 只不过是标识符,128 位标识符。一个给定的 128 位值指定一个给定的事物。使用 128 位随机值可将自行生成标识符的两方发生冲突的可能性降到最低,而无需中央注册表。

蓝牙中的 UUID

蓝牙标准定义的 UUID 受到特殊对待,因为它们在规范的各种协议中普遍使用。它们围绕 Bluetooth Base UUID (xxxxxxxx-0000-1000-8000-00805F9B34FB) 分组并共享 96 个公共位。 (参见 core specification、3.B.2.5.1)

在各种协议部分,标准的UUID可以以短格式传输,跳过公共位,因此只使用16位或32位在空中。这是一个实现细节,特定于整个堆栈中的某些协议。因此,标准定义的 UUID 通常被称为 UUID。

除了标准 UUID 之外,任何实施者都可以自由地从 128 位随机数生成自己的 UUID,并在需要的任何地方使用它们。自定义 UUID 不得使用蓝牙基本 UUID(并且不能以短格式编码,但您不应该关心这一点)。

对定制服务的影响

在实施标准服务和特征时使用标准 UUID。

切勿将基于 Bluetooth Base-UUID 的 UUID 用于自定义目的。

在开发自定义服务和属性时,从您可能在示例代码、供应商 SDK 或其他任何地方找到的代码中重用现有 UUID(或部分 UUID)并不是一个好主意。你真的应该重生你的。

旁注

规范没有为自定义 UUID 定义任何分组方案(你称之为前缀),但一些供应商确实鼓励对自定义 UUID 进行分组,以一种他们生成一个 96 位自定义基本 UUID 的方式,并从这个,就像蓝牙一样。这不是标准的,也没有带来协议优化。