全部assigned services只聲明16位UUID。如果我必須以這種格式指定服務,我怎樣才能確定128位對應方?如何將藍牙16位服務UUID轉換爲128位UUID?
從Service Discovery Protocol Overview我知道,128位的UUID是基於所謂的「BASE UUID」這也說明有:
00000000-0000-1000-8000-00805F9B34FB
但我怎麼創建從16位對應128位的UUID?可能一些0位數字必須被替換,但是哪些以及如何?
全部assigned services只聲明16位UUID。如果我必須以這種格式指定服務,我怎樣才能確定128位對應方?如何將藍牙16位服務UUID轉換爲128位UUID?
從Service Discovery Protocol Overview我知道,128位的UUID是基於所謂的「BASE UUID」這也說明有:
00000000-0000-1000-8000-00805F9B34FB
但我怎麼創建從16位對應128位的UUID?可能一些0位數字必須被替換,但是哪些以及如何?
這可以在藍牙4.0核心規格卷。 3 - 核心系統。見the list of adopted specs。
在B部分,覆蓋下章2.5.1 服務發現協議(SDP) 「搜索服務/ UUID」將解釋如何計算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位UUID可以由16位值到32位零擴展被轉換爲32位的UUID格式。一個等價的方法是將16位UUID值添加到零值32位UUID。
需要注意的是,在另一部分,有一個方便的記憶:
或者,說得簡單些,16位屬性UUID取代了X公司在後續 ING:
0000xxxx-0000-1000-8000-00805F9B34FB
另外,32位屬性UUID替換X的如下所示:
xxxxxxxx-0000-1000-8000-00805F9B34FB
相同的公式適用於屬性UUID。參見F部分,涵蓋屬性協議(ATT)下的第3.2.1章「協議要求/基本概念」。藍牙核心4.1規範中首先指定了32位屬性UUID。