1. 程式人生 > >藍芽協議系列之(六) GATT

藍芽協議系列之(六) GATT

6  Generic Attribute Protocol

6.1 功能介紹
ATT之所以稱作“protocol”,是因為它還比較抽象,僅僅定義了一套機制,允許client和server通過Attribute的形式共享資訊。而具體共享哪些資訊,ATT並不關心,這是GATT(Generic Attribute Profile)的主場。
GATT相對ATT只多了一個‘G‘,但含義卻大不同,因為GATT是一個profile(更準確的說是profile framework)。
在藍芽協議中,profile一直是一個比較抽象的概念,我們可以將其理解為“應用場景、功能、使用方式”都被規定好的Application。傳統的BR/EDR如此,BLE更甚。上面我們講過,BLE很大一部分的應用場景是資訊(Attribute)的共享,因此,BLE協議棧基於Attribute Protocol,定義了一個稱作GATT(Generic Attribute)的profile framework(它本身也是一個profile),用於提供通用的、資訊的儲存和共享等功能。

6.2 層次結構

作為一個Profile framework,GATT profile提出瞭如下的層次結構:


由上圖可知,GATT profile的層次結構依次是:Profile—>Service—>characteristic。

“Profile”是基於GATT所派生出的真正的Profile,位於GATT Profile hierarchy的最頂層,由一個或者多個和某一應用場景有關的Service組成。
一個Service包含一個或者多個Characteristic(特徵),也可以通過Include的方式,包含其它Service。

Characteristic則是GATT profile中最基本的資料單位,由一個Properties、一個Value、一個或者多個Descriptor組成。
Characteristic Properties定義了characteristic的Value如何被使用,以及characteristic的Descriptor如何被訪問。
Characteristic Value是特徵的實際值,例如一個距離特徵,其Characteristic Value就是距離長度。
Characteristic Descriptor則儲存了一些和Characteristic Value相關的資訊(例如value記錄距離長度,那麼Descriptor可以是長度單位m/km)。

以上除“Profile”外的每一個定義,Service、Characteristic、Characteristic Properties、Characteristic Value、Characteristic Descriptor等等,都是作為一個Attribute存在的,包括之前所描述的Attribute的所有特徵:Attribute 

Handle、Attribute Types、Attribute Value和AttributePermissions。

6  Generic Attribute Protocol

6.1 功能介紹
ATT之所以稱作“protocol”,是因為它還比較抽象,僅僅定義了一套機制,允許client和server通過Attribute的形式共享資訊。而具體共享哪些資訊,ATT並不關心,這是GATT(Generic Attribute Profile)的主場。
GATT相對ATT只多了一個‘G‘,但含義卻大不同,因為GATT是一個profile(更準確的說是profile framework)。
在藍芽協議中,profile一直是一個比較抽象的概念,我們可以將其理解為“應用場景、功能、使用方式”都被規定好的Application。傳統的BR/EDR如此,BLE更甚。上面我們講過,BLE很大一部分的應用場景是資訊(Attribute)的共享,因此,BLE協議棧基於Attribute Protocol,定義了一個稱作GATT(Generic Attribute)的profile framework(它本身也是一個profile),用於提供通用的、資訊的儲存和共享等功能。

6.2 層次結構

作為一個Profile framework,GATT profile提出瞭如下的層次結構:


由上圖可知,GATT profile的層次結構依次是:Profile—>Service—>characteristic。

“Profile”是基於GATT所派生出的真正的Profile,位於GATT Profile hierarchy的最頂層,由一個或者多個和某一應用場景有關的Service組成。
一個Service包含一個或者多個Characteristic(特徵),也可以通過Include的方式,包含其它Service。

Characteristic則是GATT profile中最基本的資料單位,由一個Properties、一個Value、一個或者多個Descriptor組成。
Characteristic Properties定義了characteristic的Value如何被使用,以及characteristic的Descriptor如何被訪問。
Characteristic Value是特徵的實際值,例如一個距離特徵,其Characteristic Value就是距離長度。
Characteristic Descriptor則儲存了一些和Characteristic Value相關的資訊(例如value記錄距離長度,那麼Descriptor可以是長度單位m/km)。

以上除“Profile”外的每一個定義,Service、Characteristic、Characteristic Properties、Characteristic Value、Characteristic Descriptor等等,都是作為一個Attribute存在的,包括之前所描述的Attribute的所有特徵:Attribute 

Handle、Attribute Types、Attribute Value和AttributePermissions。

7  Generic Access Profile(GAP)

前面4到6章的內容,都是和基於連線的data channel有關,至於無連線的advertising channel,以及連線建立的過程,好像被我們忽略了。雖然Link Layer已經做出了定義(具體可參考第3章的介紹),但它們並沒有體現到Application(或者Profile)層面,畢竟Link layer太底層了。
因此,BLE協議棧定義了一個稱作Generic Access(通用訪問)的profile,以實現如下功能:
1)定義GAP層的藍芽裝置角色(role)
和3.3中的Link Layer的role類似,只不過GAP層的role更接近使用者(可以等同於從使用者的角度看到的藍芽裝置的role),包括:
Broadcaster Role,裝置正在傳送advertising events;
Observer Role,裝置正在接收advertising events;
Peripheral Role,裝置接受Link Layer連線(對應Link Layer的slave角色);
Central Role,裝置發起Link Layer連線(對應Link Layer的master角色)。

2)定義GAP層的、用於實現各種通訊的操作模式(Operational Mode)和過程(Procedures),包括:
Broadcast mode and observation procedure,實現單向的、無連線的通訊方式;
Discovery modes and procedures,實現藍芽裝置的發現操作;
Connection modes and procedures,實現藍芽裝置的連線操作;
Bonding modes and procedures,實現藍芽裝置的配對操作。

3)定義User Interface有關的藍芽引數,包括:
藍芽地址(Bluetooth Device Address);
藍芽名稱(Bluetooth Device Name);
藍芽的pincode(Bluetooth Passkey);

藍芽的class(Class of Device,和發射功率有關);