低功耗藍牙的廣播數據
設備在發送廣播報文時,必須遵循固定的廣播數據格式或掃描響應數據格式。格式指的是一串廣播數據結構。各結構的開始處均含有一個長度字段,表示該結構其餘部分的字節長度。緊接着長度的是廣播數據類型字段,通常爲1個字節,也可能是兩三個字節或更長。假如不認識某廣播數據類型,設備可以將其忽略並跳到下個結構。結構內的其他任何數據字節都由數據類型決定。
例如,發送功率等級(tx power level)爲1個字節的數據類型,位於長度字段和數據類型字段之後。這意味着在廣播報文或掃描響應包中,發送功率等級總共需要3個字節:一個長度字節,一個數據類型字節,以及一個字節記錄實際的功率等級。
廣播數據可以是變長的。比如,本地設備名稱可以從幾個字節到數十字節不等。不過,由於數據結構起始處的長度字段約束了廣播數據的長度,所以沒有必要引入終止字節符。
標識
標識(flags)AD是位字段的序列,可以是從0字節到如果字節的任意長度。
低功耗藍牙定義瞭如下標識:
- 有限可發現模式
- 通用可發現模式
- 不支持BR/EDR
- 設備同時支持LE和BR/EDR(控制器)
- 設備同時支持LE和BR/EDR(主機)
處於有限可發現模式的外圍設備,應在AD信息標識中設置有限可發現模式位(Bit 0),並且清除一般可發現模式位(Bit 1)。
有限可發現模式大概只能維持30s的時間。
處於一般可發現模式的外圍設備,應在AD信息標識中設置一般可發現模式位(Bit 1),並且清除有限可發現模式位(Bit 0)。當設備打算被發現時,應使用一般可發現模式。
除以下不同點之外,一般可發現模式與有限可發現模式基本類似:
- 一般可發現設備的可發現時間沒有限制;有限可發現設備大概只能維持30s的時間。
- 一般可發現設備建議的廣播時間間隔更長,介於1.28s和2.56s之間;而有限可發現設備介於250ms和500ms之間。
不支持BR/EDR標識位用來在建立連接前通知對端設備,本方不支持經典藍牙。
設備同時支持LE和BR/EDR標識位,一個關於控制器,一個關於主機,用於判斷對端設備能否在已有經典藍牙連接的同時還可以發起低功耗藍牙。
服務
有多種不同類型的服務廣播數據類型,每種類型公開了一個服務UUID列表。
- 16 位服務 UUID 完整列表
- 16 位服務 UUID 部分列表
- 128 位服務 UUID 完整列表
- 128 位服務 UUID 部分列表
本地名稱
本地名稱廣播數據類型共有兩類:
- 完整的本地名稱
- 裁剪的本地名稱
發射功率等級
發射功率等級廣播數據類型是指傳輸該廣播數據包時採用的功率值,長度爲 1 個字節,單位爲 dBm。
從設備連接間隔範圍
從設備連接間隔範圍代表外圍設備傾向的連接間隔。
間隔參數包括兩個 16 位的值,第一個爲最小連接間隔,第二個爲最大連接間隔。
服務請求
外圍設備希望中央設備支持的服務。
服務請求廣播數據包括 16 位服務 UUID 或 128 位服務 UUID 的部分列表。
服務數據
設置服務廣播時,使用的是“服務數據”廣播數據類型。服務數據的起始兩個字節是 16 位 UUID,表示服務號,其他字節爲實際的服務數據。
製造商指定數據
製造商數據的其實兩個字節爲 16 位的公式標識,接着是公司指定的數據。
廣播格式
| ------------------------------ data ------------------------------- |
| --------- significant part ----- | ----- Non significant part ----- |
| AD Structure 1 | AD Structure 2 | … | AD Structure N | 0000…000 |
| length | ------- data ------- |
| length | AD type | AD data |
舉例:
| Length | AD Type | Value |Length | AD Type | 製造商標識 | value |
| 02 | 01 | 1A | 1B | FF | xx xx | xxxxx |
這裏的 | 02 | 01 | 1A | 是第一個 AD Structure。長度是 02 個字節,類型是 01 表示 flags標識,值是 1A 表示雙模設備。
| 1B | FF | xx xx | xxxxx | 是第二個 AD Structure。長度是 27 個字節,類型是 FF 表示製造商指定的數據,xx xx 是製造商名稱,xxxxx 是自定義數據。
參考資料
《低功耗藍牙開發權威指南》的《第 12 章 12.5節 廣播數據》
《Bluetooth Core Specification V5.2》的《11 ADVERTISING AND SCAN RESPONSE DATA FORMAT》