1. 程式人生 > >通用屬性配置檔案(GATT)及其服務,特性與屬性介紹

通用屬性配置檔案(GATT)及其服務,特性與屬性介紹

宣告:本文轉載自http://blog.chinaunix.net/uid-21411227-id-5750680.html

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 Configuration Descriptor,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客戶端進行提醒,通知和指示之間不同之處在於指示有應用層上的確認,而通知沒有。