蓝牙 GATT 服务 uuid 概述

问题描述 投票:0回答:2

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

例如设备信息服务似乎被宣传为 0000180a-xxx,我可以在 https://www.bluetooth.com/specifications/gatt/services/ 中找到“180a”,但例如子字段“型号字符串”的 id 为 00002a24-xxx,这是一个完全不同的前缀,也未在同一列表中定义,而是在此处:https://www.bluetooth.com/specifications/gatt/characteristics/ 。我怎样才能获得所有这些前缀的列表?

我用 xxx 标记的部分似乎与我的手机找到的随机设备相同。是否有地方概述了如何构建 uuid 以及我可以将哪些“安全”前缀用于我自己的 GATT 服务?

bluetooth bluetooth-lowenergy gatt bluetooth-gatt
2个回答
12
投票

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

UUID只不过是标识符,128位标识符。一个给定的 128 位值指定一件给定的事物。使用 128 位随机值可以最大限度地减少两方自行生成标识符时发生冲突的可能性,而无需中央注册表。

蓝牙中的UUID

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

在各种协议部分,标准UUID可以以简短的形式传输,跳过公共位,因此仅在空中使用16或32位。 这是一个实现细节,特定于整个堆栈中的某些协议。因此,标准定义的 UUID 通常称为“短”UUID。 除了标准 UUID 之外,任何实现者都可以自由地从 128 位随机数生成自己的 UUID,并在任何需要的地方使用它们。 自定义 UUID 不得使用蓝牙 Base UUID(并且不能以简短形式编码,但您不应该关心这一点)。

对定制服务的影响

实现标准服务和特性时使用标准UUID。

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

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

旁注

规范没有为自定义 UUID 定义任何分组方案(您所说的前缀),但一些供应商确实鼓励对自定义 UUID 进行分组,以某种方式生成一个 96 位自定义基本 UUID,并从中发出递增值,如蓝牙做过。这不是标准的,也不会带来协议优化。


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.