通用属性配置文件(Generic Attribute profile,GATT)
1.?角色
???????除了GAP定義了角色之外,BLE還定義了另外2種角色:GATT服務器和GATT客戶端,它們完全獨立于GAP的角色。提供數據的設備稱為GATT,訪問GATT服務器而獲得數據的設備稱為GATT客戶端。
注意:一個設備可以同時作為服務器和客戶端。
2. ?GATT層
?????? GATT層是傳輸真正數據所在的層。
???????一個GATT服務器通過一個稱為屬性表的表格組織數據,這些數據就是用于真正發送的數據。
?
2.1?屬性
???????一個屬性包含句柄、UUID(類型)、值,句柄是屬性在GATT表中的索引,在一個設備中每一個屬性的句柄都是唯一的。UUID包含屬性表中數據類型的信息,它是理解屬性表中的值的每一個字節的意義的關鍵信息。在一個GATT表中可能有許多屬性,這些屬性能可能有相同的UUID。
2.2?特性
???????一個特性至少包含2個屬性:一個屬性用于聲明,一個屬性用于存放特性的值。
所有通過GATT服務傳輸的數據必須映射成一系列的特性,可以把特性中的這些數據看成是一個個捆綁起來的數據,每個特性就是一個自我包容而獨立的數據點。例如,如果幾塊數據總是一起變化,那么我們可以把它們集中在一個特性里。
2.3描述符
???????任何在特性中的屬性不是定義為屬性值就是為描述符。描述符是一個額外的屬性以提供更多特性的信息,它提供一個人類可識別的特性描述的實例。
??????然而,有一個特別的描述符值得特別地提起:客戶端特性配置描述符(Client Characteristic ConfigurationDescriptor,CCCD),這個描述符是給任何支持通知或指示功能的特性額外增加的。
???????在CCCD中寫入“1”使能通知功能,寫入“2”使能指示功能,寫入“0”同時禁止通知和指示功能。
???
2.4服務
???????一個服務包含一個或多個特性,這些特性是邏輯上相關的集合體。
GATT服務一般包含幾塊具有相關的功能,比如特定傳感器的讀取和設置,人機接口的輸入輸出。組織具有相關的特性到服務中既實用又有效,因為它使得邏輯上和用戶數據上的邊界變得更加清晰,同時它也有助于不同應用程序間代碼的重用。GATT基于藍牙技術聯盟(SIG)官方而設計,SIG建議根據它們的規范設計自己的profile。
??????
2.5 profile(數據配置文件)
???????一個profile文件可以包含一個或者多個服務,一個profile文件包含需要的服務的信息或者為對等設備如何交互的配置文件的選項信息。設備的GAP和GATT的角色都可能在數據的交換過程中改變,因此,這個文件應該包含廣播的種類、所使用的連接間隔、所需的安全等級等信息。
??????需要注意的是:一個profile中的屬性表不能包含另一個屬性表。
2.6?標準的定制服務和特性
???????技術聯盟(SIG)已經定義一些profile、服務、特性和根據協議棧的GATT層定義的屬性。但是,協議棧中只實現了一部分應用的BLE服務,那就意味著,只要協議棧支持GATT,就可能為一個應用建立一個它需要的profile和服務。
??????既然在一個應用中可以支持profile和服務,那么就可以在這個應用中建立一個定制的服務。
2.7??? UUID
?“GATT層”中定義的所有屬性都有一個UUID值,UUID是全球唯一的128位的號碼,它用來識別不同的特性。
2.7.1?藍牙技術聯盟?UUID
???????藍牙核心規范制定了兩種不同的UUID,一種是基本的UUID,一種是代替基本UUID的16位UUID。
所有的藍牙技術聯盟定義UUID共用了一個基本的UUID:
0x0000xxxx-0000-1000-8000-00805F9B34FB
為了進一步簡化基本UUID,每一個藍牙技術聯盟定義的屬性有一個唯一的16位UUID,以代替上面的基本UUID的‘x’部分。例如,心率測量特性使用0X2A37作為它的16位UUID,因此它完整的128位UUID為:
0x00002A37-0000-1000-8000-00805F9B34FB
雖然技術聯盟使用相同的基本UUID,但是16位的UUID足夠唯一地識別藍牙技術聯盟所定義的各種屬性。
藍牙技術聯盟所用的基本UUID不能用于任何定制的屬性、服務和特性。對于定制的屬性,必須使用另外完整的128位UUID。
2.7.2?供應商特定的UUID
?????? SoftDevice?根據藍牙技術聯盟定義UUID類似的方式定義UUID:先增加一個特定的基本UUID,再定義一個16位的UUID(類似于一個別名),再加載在基本UUID之上。這種采用為所有的定制屬性定義一個共用的基本UUID的方式使得應用變為更加簡單,至少在同一服務中更是如此。
使用軟件nRFgo Studio非常容易產生一個新的基本UUID:
例如,在LED BUTTON示例中,采用0x0000xxxx-1212-EFDE-1523-785FEABCD123作為基本UUID。
?
藍牙核心規范沒有任何規則或是建議如何對加入基本UUID的16位UUID進行分配,因此你可以按照你的意圖來任意分配。
例如,在LED BUTTON示例中,0x1523作為服務的UUID,0x1524作為LED特性的UUID,0x1525作為按鍵狀態特性的UUID。
?2.8?空中操作和性質
大部分的空中操作事件都是采用句柄來進行的,因為句柄能夠唯一識別各個屬性。如何使用特性依據它的性質,特性的性質包括:
1)寫
2)沒有回應的寫
3)讀
4)通知
5)指示
?
2.8.1 ?寫和沒有回應的寫
寫和沒有回應的寫允許GATT客戶端寫入一個值到GATT服務器的一個特性中。它們之間不同的地方在于沒有回應的寫事件沒有任何應用層上的確認或回應。
2.8.2??讀
讀性質表明一個GATT客戶端可以讀取在GATT服務器中特性的值。
2.8.3??通知和指示
通知和指示性質允許GATT服務器在其某個特性改變的時候對GATT客戶端進行提醒,通知和指示之間不同之處在于指示有應用層上的確認,而通知沒有。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的通用属性配置文件(Generic Attribute profile,GATT)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bluetooth profile: A
- 下一篇: ble之gatt server