TI-BLE协议栈的GATT
由于還沒有看具體的代碼,難免會有理解錯誤的地方,本著共同學習的態度和大家交流探討;
在BLE中;GATT是焦點;
在鏈路層(LL),可以把設備分為主機和從機,從機廣播,主機發起連接;
在GAP層, ? ? ?可以把設備分為中心設備和外圍設備;
? ? ? ? 在GATT層, ? ?可以把設備分為服務端和客戶端;
我們需要記住一點就是,這些劃分相互是不受影響的;
在說GATT之前先說下ATT;
ATT的Client/Server架構:
服務設備提供數據,客戶端使用這些數據;服務端通過操作屬性的方式,提供數據訪問服務設備的服務/客戶角色,不依賴于GAP層中心設備/外圍設備角色,和LL層的master/slave角色定義。一個設備可能同時做為一個客戶端和服務端,而兩個設備上的屬性不會相互影響。
ATT的Attribute Table Example (屬性表示例)
Handle:屬性在列表中的地址
Type??:說明代表什么數據,可以是BluetoothSIG分配或者客戶自定義的UUID(統一識別碼,具有唯一性和通用性)
Permissions:權限,定義了client是否可以訪問屬性的值,以及特定的訪問方式。
GATT的Client/Server架構:
GATT指定了profile數據交換所在的結構。
除了數據的封裝方式不同,client/server和Attribute協議結構相同,數據封裝在“Services”里,用“Characteristic”(特征)表示。
GATT的Services 中的Characteristic結構和ATT的Attribute 協議結構相同
GATT的Profile?層次結構:
為了實現用戶的應用,profile通常有一個或者多個“Services”組成。
一個service或許包含某個特征值“characteristicvalues”(例如,在一個溫度采集設備中,通常會包含一個溫度的特征值)。
每一個特征值必須有占用一個特征聲明結構,其中包括他的其他特性,它是服務端和客戶端共享的讀寫空間,這個特征值可以包含一個可選的描述(descriptor字串),來指示這個特征值的含義。
GATT?的Characteristic Declaration(聲明):
Handle 40 是一個特征值的聲明,用0x2803來指示,這個0x2803 同樣也是Bluetooth SIG的相關數據手冊定義的,作為GATT?
Characteristic Declaration的UUID
特征值的屬性值包含5個字節的長度10:29:00:E1:FF
*0xFFE1,表明特征值的屬類型(0xFFE1:客戶自定義特征值的UUID)
*0x0029,是這個值所保存的位置handle(0x0029=41)
*0x10,表明這個特征值的操作權限0x10:notifyonly
GATT?的Characteristic ?Configuration:
另外作為特征值聲明,可以有一個可選的描述信息。
這個例子中,handle 42包含了特征值的配置信息,0x2902,這個值同樣也是BluetoothSIG的相關數據手冊定義的,作為GATTClient Characteristic Configuration的UUID。
這個配置值有讀寫權限,意味著,GATT客戶端可以改變這個值。如果把這個值(通知開關使能)從0x0000 Notificationoff改為0x0001 notificationon,GATT服務器將開始發送這個特征值的通知到GATT客戶端。
GATT Service Example:(這個是重點)
△Handle句柄——屬性在表中的地址,每個屬性有唯一的句柄。
△type?類型——表示數據代表的事務,通常是藍牙技術聯盟規定的或由用戶自定義UUID。
△權限——對頂了GATT客戶端設備對屬性的訪問權限,包括是否能訪問和怎樣訪問。
首選我們來看一下GATT屬性表中有一些特殊的屬性類型,其值是由藍牙技術聯盟(SIG)定義:
△GATT_PRIMARY_SERVICE_UUID——表示新服務的起始和提供的服務類型;
△GATT_CHARACTER_UUID——稱為“特征聲明”緊隨其后的是GATT特征值;
△GATT_CLIENT_CHAR_CFG_UUID——這一屬性代表特征描述符,它與屬性表中它前面最近的特征值有關,他允許GATT客戶端設備使能特征值通知。
△GATT_CHAR_USER_DESC_UUID——這一屬性代表特征值描述符,他與屬性表中他前面最近的句柄處的特征值相關,包含一個ASCCI字符串,是對相關的特征的描述。
在Handle為40的一行中,這個是特征聲明;它的特征值的屬性值包含5個字節的長度10:29:00:E1:FF
*0xFFE1,表明特征值的屬類型(0xFFE1:客戶自定義特征值的UUID)
*0x0029,是這個值所保存的位置handle(0x0029=41)
*0x10,表明這個特征值的操作權限0x10:notifyonly
個人感覺這個地方類似于C語言中的變量的定義:這個一行就相當于定義了一個整型變量a;
int a;0xFFE1就相當于a;0x0029類似于a在內存中的地址;
在Handle為41的一行中,其特征值就相當于a的值;這也是用戶自定義的有效數據;
在Handle為42的一行中,這個是特征描述符,
在Handle為43的一行中,0x2800表示又一個新服務的起始
總結
以上是生活随笔為你收集整理的TI-BLE协议栈的GATT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Generic Access Profi
- 下一篇: 蓝牙BLE ATT剖析(一)