如何将蓝牙16位服务UUID转换为128位UUID?

try*_*lly 12 uuid bluetooth

所有分配的服务仅声明16位UUID.如果必须以该格式指定服务,如何确定128位对应项?

服务发现协议概述我知道128位UUID基于所谓的"BASE UUID",在那里也有说明:

00000000-0000-1000-8000-00805F9B34FB
Run Code Online (Sandbox Code Playgroud)

但是如何从16位对应物创建128位UUID?可能有一些0位必须被替换,但是哪个以及如何?

try*_*lly 27

这可以在蓝牙4.0核心规范卷中找到.3 - 核心系统.请参阅采用的规范列表.

B部分中,根据第2.5.1节"搜索服务/ UUID"介绍服务发现协议(SDP)将解释如何计算UUID.

可以通过简单的算术运算来计算16位或32位UUID的完整128位值.

128_bit_value = 16_bit_value * 2^96 + Bluetooth_Base_UUID
128_bit_value = 32_bit_value * 2^96 + Bluetooth_Base_UUID
Run Code Online (Sandbox Code Playgroud)

通过将16位值零扩展到32位,可以将16位UUID转换为32位UUID格式.等效方法是将16位UUID值添加到零值32位UUID.

请注意,在另一部分中,有一个方便的助记符:

或者,更简单地说,16位属性UUID替换了以下x:

0000xxxx-0000-1000-8000-00805F9B34FB
Run Code Online (Sandbox Code Playgroud)

此外,32位属性UUID替换以下x:

xxxxxxxx-0000-1000-8000-00805F9B34FB
Run Code Online (Sandbox Code Playgroud)

相同的等式用于属性UUID.参见第F部分,包括第3.2.1节"协议要求/基本概念"下的属性协议(ATT).32位属性UUID首先在Bluetooth Core 4.1规范中指定.

  • 是否在已知规范预定义了 16 位 UUID 的上下文中使用了“0000-1000-8000-00805F9B34FB”?或者 128 位 UUID 的那部分是某种示例吗? (2认同)