BLE 協議棧之GAP與GATT層小小一瞥
轉載自:https://blog.csdn.net/xiaoleiacmer/article/details/41723707
Generic Access Profile (GAP)
GAP 一共有四種角色:
Broadcaster ,Observer,Peripheral ,Central
Connection Interval (主從裝置連線間隔) 最小7.5ms 最大4.0s
Slave Latency (從裝置延遲): 忽略主裝置的應答 繼續處於睡眠狀態
Supervision Timeout (檢測時間超時) : 最大可連線時間。
有效連線時間:
Effective Connection Interval = (Connection Interval) * ( 1 + (Slave Latency) ) ;
從裝置可以通過Connection Parameter Update Request去要求主裝置改變連線的設定,同時對於主裝置的應答採取接受或者拒絕。解決函式在L2CAP層中。
改變的連線設定包括四種:
1 minimum connection interval
2 maximum connection Interval
3 slave latency
4 timeout
GAP層還負責連線狀態時主從裝置的安全資訊的初始化。
GAP Central Role Profile
兩個主要的設定函式:
GAPCentralRole_GetParameter 與 GAPCentralRole_SetParameter
GAP central role profile 使用的是回撥函式功能區通知事件的發生。使用GAPCentralRole_StartDevice進行初始化設定,且只能被宣告一次。
gapCentralRolesCBs_t : 結構體中包涵了兩個函式指標,
eventCB:當裝置發現或者連線建立或者暫停事件發生的時候會呼叫此回撥函式。
rssiCB:回調當前的RSSI.
在例程中 simpleBLECentralEventCB和 RSSI 回撥函式是 simpleBLECentralRssiCB;
Generic Attribute Profile (GATT)
兩個角色:
GATT Client :在GATT服務端讀/ 寫資料
GATT Server : 資料被GATT 客戶端讀寫
GATT層所提供的服務:
Mandatory GAP Service :包涵裝置和接入資訊(裝置名,裝置識別碼等),以庫的形式在協議棧中。
Mandatory GATT Service :(自我理解是本協議層的相關服務資訊)以庫的形式提供。
SimpleGATTProfile Service: 配置檔案。( 在simpleGATTProfile.c 和simpleGATTProfile.h中).
特徵值(characteristic):是包涵任務屬性和配置的類似介面的值。
特徵值有以下屬性:
1 handle(控制代碼):服務屬性的地址。
2 Type:UUID;
3 Permissions(許可):是否允許從裝置得到特徵資訊。
GATT提供的子服務(部分):
Read Characteristic Value
Read Using Characteristic UUID
Read Multiple Characteristic Values
Read Characteristic Descriptor
Discover Characteristic by UUID
Write Characteristic Value
Write Characteristic Descriptor
Characteristic Value Notification
四個特殊的特徵值:
GATT_PRIMARY_SERVICE_UUID:由服務端提供的特徵值。自我理解是此項服務的ID
GATT_CHARACTER_UUID: 緊隨特徵值後面的宣告值。自我理解是特徵值在GATT層的另一種表達。
GATT_CLIENT_CHAR_CFG_UUID:允許GATT client使能通知功能的特徵值。
GATT_CHAR_USER_DESC_UUID : 用ASCII 來表示的特徵值。
GATT層API主要功能:
1 從GATT層伺服器註冊或者撤銷服務屬性以及回撥。
2 加入或刪除GATT服務。
GAP層API 相關引數:
GAPROLE_PARAM_UPDATE_ENABLE 使能或失能自動連線功能。
GAPROLE_MIN_CONN_INTERVAL 最小連線時間間隔
GAPROLE_MAX_CONN_INTERVAL 最大連線時間間隔
GAPROLE_SLAVE_LATENCY 從裝置延時( 預設 0)
GAPROLE_TIMEOUT_MULTIPLIER 最大連線等待時間
GAPROLE_ADVERT_ENABLED 使能或使能廣播功能
GAPROLE_ADVERT_DATA 改變其值可以限制發現的模式
GAPROLE_SCAN_RSP_DATA 裝置名稱
GAPROLE_ADVERT_OFF_TIME 未建立連線時,啟動第二次連線的間隔
GAP層的API應該使用回撥函式來通知應用程式發生了事件,並使用 GAPRole_StartDevice(外面沒找到到,估計在庫裡)進行初始化設定。
gapRolesCBs_t:結構體有兩個非常重要的內部指標:
pfnStateChange :得到當前的連結狀態
pfnRssiRead: 得到當前的RSSI(訊號強度)
在例程中, peripheralStateNotificationCB是返回當前狀態的回撥函式,但是無法得到訊號強度 ,因為指標被指向了NULL.
同時,在 peripheral profile 中包涵了一個自動連線引數:
GAPROLE_PARAM_UPDATE_ENABLE(在SimpleBLEPeripheral_Init中進行初始化)
如果它的值是TRUE 則在連線的狀態下從裝置就可以向主裝置傳送連線引數,去更新當錢的連線狀態。
Simple GATT Profile (是用來儲存和處理與GATT 伺服器的資料檔案)
SimpleProfile_AddService 初始化程式將屬性加入到屬性列表裡。 在GATT serive中註冊和讀寫回調函式
SimpleProfile_SetParameter 設定GATT層引數函式
SimpleProfile_GetParameter 得到GATT層引數函式
SimpleProfile_RegisterAppCBs 應用程式註冊的一個回撥函式 目的是在GATT client一個服務中可以寫一個新值給特徵值。
利用simpleProfileCBs_t結構體中的函式指標指向一個回撥函式來實現此操作。
simpleProfile_ReadAttrCB 當GATT client 在profile中想讀取屬性值時,呼叫次函式。
simpleProfile_WriteAttrCB 當GATTclient 在profile中想寫新的特徵值時,呼叫此函式。
simpleProfile_HandleConnStatusCB 當連線狀態發生變化時,回撥函式將會受到此函式的資訊,如果一個連線暫停,它會改變所有特徵值配置值。通常這個函式用來檢視特
徵值配置,讀寫值,或者處理一個特徵值的通知。
The simple GATT profile 中有5個特徵值:
SIMPLEPROFILE_CHAR1:讀寫
SIMPLEPROFILE_CHAR2:讀
SIMPLEPROFILE_CHAR3:寫
SIMPLEPROFILE_CHAR4:給client一個通知
SIMPLEPROFILE_CHAR5:當連線時可以寫5個位元組的資料給client
為了能接收到GATT serive 發來的通知(notification),GATT client 必須開啟通知功能
方法:GATT_CLIENT_CFG_NOTIFY寫入0x0001 {每當設定新值使用SimpleProfile_SetParameter}
兩個single-device 的project說明在TI CC254x Bluetooth Low Energy Software Developer’s Guide中有說明。
---------------------
作者:xiaoleiacm
來源:CSDN
原文:https://blog.csdn.net/xiaoleiacmer/article/details/41723707
版權宣告:本文為博主原創文章,轉載請附上博文連結!