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