蓝牙 GATT 服务 uuid 概述

标签 bluetooth bluetooth-lowenergy gatt bluetooth-gatt

我正在考虑为自定义应用程序实现几个 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 服务?

最佳答案

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

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

蓝牙中的 UUID

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

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

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

对定制服务的影响

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

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

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

旁注

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

关于蓝牙 GATT 服务 uuid 概述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60017350/

相关文章:

c++ - 如何从 Qt 中连接的 HID 设备读取信息

objective-c - 如何在建立蓝牙连接时自动启动 iOS 应用程序?

android - 找到最近的信标

android - 低功耗蓝牙 - notifyCharacteristicChanged() 不更新描述符值

python - BLE 使用 gatttool 或 bluepy 订阅通知

c++ - 使用 C++ 在 Windows 中配对蓝牙设备

iphone - GameKit 4.0 尚未准备好迎接黄金时段?停止广告服务

bluetooth - 如何获得蓝牙低功耗设备的实际名称?

ios - 在swift iOS中计算高字节和低字节?

linux - 不添加使用 bluez 的 GATT 服务?