所有assigned services仅表示16位UUID。如果必须以该格式指定服务,如何确定128位对应项?
从Service Discovery Protocol Overview我知道128位UUID基于所谓的“BASE UUID”,也在那里说明:
00000000-0000-1000-8000-00805F9B34FB
但是如何从16位对应物创建128位UUID?可能有一些0位必须被替换,但是哪个以及如何?
答案 0 :(得分:26)
这可以在蓝牙4.0核心规范 Vol。中找到。 3 - 核心系统。请参阅the list of adopted specs。
在 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
通过将16位值零扩展到32位,可以将16位UUID转换为32位UUID格式。等效方法是将16位UUID值添加到零值32位UUID。
请注意,在另一部分中,有一个方便的助记符:
或者,更简单地说,16位属性UUID替换了以下的x - 荷兰国际集团:
0000xxxx-0000-1000-8000-00805F9B34FB
此外,32位属性UUID替换以下x:
xxxxxxxx-0000-1000-8000-00805F9B34FB
相同的等式用于属性UUID。请参阅 F部分,其中包含第3.2.1节“协议要求/基本概念”下的属性协议(ATT)。 32位属性UUID首先在Bluetooth Core 4.1规范中指定。