首页 > 解决方案 > 在哪里可以找到服务数据 UUID?

问题描述

在蓝牙 LE 中发送广告数据包时,在 PDU 内可以添加不同类型的数据。其中一些是服务数据类型,其中数据类型值是: 0x16 服务数据 - 16 位 UUID 0x20 服务数据 - 32 位 UUID 0x21 服务数据 - 128 位 UUID

我见过一些使用此类数据的信标。例如,使用 0x16 后跟 0x6E2A 发送温度。

我一直在搜索,但找不到包含所有这些服务数据值的列表在哪里,以查看每种指标的代码。

标签: bluetoothbluetooth-lowenergybeacon

解决方案


您在广告中看到的 0x16、0x20 和 0x21 字节值是广告“AD”类型,指示以下字节包括该类型指定长度的 GATT 服务 UUID,后跟服务数据。有关AD 类型值的完整列表,请参见此处。

在信标广告中,最常见的是使用 16 位 UUID,因为该 UUID 长度在广告数据包中占用的空间最少,剩下的字节数最多用于数据。您提到的 16 位服务 UUID(例如 0x6e2A)理论上已在蓝牙 SIG 注册,并且确实有它们的列表。有几种不同的类型:

  1. 公共关贸总协定服务
  2. 蓝牙 SIG 成员的私人 GATT 服务
  3. 标准制定组织的GATT 服务

第一个列表是任何人都可以实施的公共规范。后两个列表用于私人规范。号码是保留的,但使用方式是拥有号码分配的组织专有的。

如果您查看这些列表,您会发现找不到您提到的 6E2A 编号。这个怎么可能?

没有什么可以阻止人们构建使用 16 位服务 UUID 而不注册它们的蓝牙设备。 注册需要花钱和时间。所以很多项目都跳过了这一步,尤其是在开发中,即使它被认为是被蓝牙 SIG 不赞成的不良行为。

对于像这样的“黑市”关贸总协定服务,根本没有办法找到现有服务的完整列表。 您只能逐个查找它们并对其进行逆向工程。或者您可以向制造商索取文件。

此外,无论服务 UUID 是否向蓝牙 SIG 注册,UUID 后面的服务数据字节都没有标准化。允许广告服务数据的设备制造商在这些字节中对他或她希望用于特定用例的任何数据进行编码。所以不幸的是,他们的意思没有中央登记处。含义必须来自制造商的文档或逆向工程。


推荐阅读