bluetooth - 在哪里可以找到服务数据 UUID?
问题描述
在蓝牙 LE 中发送广告数据包时,在 PDU 内可以添加不同类型的数据。其中一些是服务数据类型,其中数据类型值是: 0x16 服务数据 - 16 位 UUID 0x20 服务数据 - 32 位 UUID 0x21 服务数据 - 128 位 UUID
我见过一些使用此类数据的信标。例如,使用 0x16 后跟 0x6E2A 发送温度。
我一直在搜索,但找不到包含所有这些服务数据值的列表在哪里,以查看每种指标的代码。
解决方案
您在广告中看到的 0x16、0x20 和 0x21 字节值是广告“AD”类型,指示以下字节包括该类型指定长度的 GATT 服务 UUID,后跟服务数据。有关AD 类型值的完整列表,请参见此处。
在信标广告中,最常见的是使用 16 位 UUID,因为该 UUID 长度在广告数据包中占用的空间最少,剩下的字节数最多用于数据。您提到的 16 位服务 UUID(例如 0x6e2A)理论上已在蓝牙 SIG 注册,并且确实有它们的列表。有几种不同的类型:
- 公共关贸总协定服务
- 蓝牙 SIG 成员的私人 GATT 服务
- 标准制定组织的GATT 服务
第一个列表是任何人都可以实施的公共规范。后两个列表用于私人规范。号码是保留的,但使用方式是拥有号码分配的组织专有的。
如果您查看这些列表,您会发现找不到您提到的 6E2A 编号。这个怎么可能?
没有什么可以阻止人们构建使用 16 位服务 UUID 而不注册它们的蓝牙设备。 注册需要花钱和时间。所以很多项目都跳过了这一步,尤其是在开发中,即使它被认为是被蓝牙 SIG 不赞成的不良行为。
对于像这样的“黑市”关贸总协定服务,根本没有办法找到现有服务的完整列表。 您只能逐个查找它们并对其进行逆向工程。或者您可以向制造商索取文件。
此外,无论服务 UUID 是否向蓝牙 SIG 注册,UUID 后面的服务数据字节都没有标准化。允许广告服务数据的设备制造商在这些字节中对他或她希望用于特定用例的任何数据进行编码。所以不幸的是,他们的意思没有中央登记处。含义必须来自制造商的文档或逆向工程。
推荐阅读
- python - 使用 Python 扩展和 FFmpeg 时出现“分段错误(核心转储)”的原因
- javascript - Jest mock 静态成员的类方法
- excel - 如何使我的子过程动态循环通过一个范围?
- azure - 使用 Azure Devops CICD 使用 Terraform 部署 Azure SQL 数据对象
- ios - UITextField:attributeText 在 resignFirstResponder 时无法正常工作
- kubernetes - Kubernetes 作业和部署之间有什么区别
- conditional-statements - 根据谷歌电子表格上的名称计算总次数值
- ffmpeg - 不支持 ffmpeg 编解码器,找不到支持的设备
- java - Graphviz 异常 :: 提供的引擎都不能被初始化
- ffmpeg - 我有 2 个区域需要模糊 - 如何重复使用相同的滤镜?