聲明:如果是ble初學者,看到這麼多層協議可能感到頭暈,已經記不清各層之間是如何銜接的。其實在主機端開發者能接觸到的只有HCI層、L2CAP層、屬性協議層(ATT)。GATT不屬於協議,它是很據ATT層實現的訪問規範。每次想到這就忍不住高歌一曲《洋蔥》:你就這樣一層一層的剝開我的心~,最後真正的數據就剩那麼點!
在上一章節我們瞭解了屬性的概念。在實際的應用中,有這麼一個數據庫,它是由很多條屬性組成。這個數據庫是一個獨立的profile,一個profile可以由至少一個或多個Server 組成。而 一個Server 的由0 或多個引用服務《Include》和至少一個特性《Characteristic》 組成。如下圖:
一個特性包括
特性聲明
特性值聲明
特性描述符
知道你們又開始暈了!來來來~大家跟我一起動動手。
推薦一個BLE的APP工具,它簡直就是學習BLE的利器。讓我們來使用手機配置一個帶電池服務的BLE服務器。
nRF Connect走起~
服務定義的開始爲服務聲明,結束於下一個服務聲明或者句柄達到 0xFFFF。所有的包含定義將緊跟服務聲明並在特性定義之前, 所有的特定定義將緊跟在最後一個包含定義,當沒有包含定義時,特性定義緊跟在服務聲明之後。
屬性類型分組
聲明的屬性的值的聲明
特性描述符
GATT規程
對於 GATT 規程定義瞭如何用 ATT 協議發現和使用服務、特性與描述符的標準方法。
GATT 規程有 3 中基本規程:發現規程、客戶端發起規程和服務器發起規程
發現服務和特性
有 3 種方法發現服務:發現所有首要服務、按服務 UUID 發現首要服務、查找包含服務。
在服務發現以後,便可以發現每個服務的特性。要取得完整的特性,需要發現特性和特性描述符
ATT 協議與 GATT 映射表