Generic Access Profile (GAP)
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中有說明。
總結
以上是生活随笔為你收集整理的Generic Access Profile (GAP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TI-BLE协议栈的GAP
- 下一篇: TI-BLE协议栈的GATT