藍牙代碼分析二

gap_params_init()函數

GAP定義了設備如何發現和創建與其餘設備的連接。該函數就是用來設置GAP的參數,設置設備名等。能夠從Generic Access Service 中看到設置的這些參數。sd_ble_gap_ppcp_set()中ppcp表示外圍設備鏈接首選參數。這個參數主要是讓中央設備在首次鏈接外設時能夠讀取他們以及時調整鏈接參數。或者噹噹中央設備之後重連該設備,而且保留這些參數,那麼就免去鏈接後可能須要修改鏈接參數的麻煩。固然也能夠經過sd_ble_gap_ppcp_set()來更改鏈接參數。ui

conn_params_init() spa

連接參數更新設置。主要設置何時發起更新連接參數請求以及間隔和最大嘗試次數。事件

client characteristic configuration descriptor  客戶端特徵配置描述符ip

ble_stack_init()it

softdevice_ble_evt_handler_set(ble_evt_dispatch)註冊事件派發程序。io

由於個人藍牙須要和蘋果的homekit平臺對接,因此就拿homekit_init(void)做爲添加服務的分析。模板

homekit總體上能夠分爲三個部分,uuid的初始化,外設信息初始化和配對初始化。cli

在uuids_init(void)中經過static const ble_uuid128_t base_uuid = { { HOMEKIT_BASE_UUID } };賦值,而後經過sd_ble_uuid_vs_add(&base_uuid, &uuids_type)函數將自定義的uuid添加到協議棧中。配置

在void accessoryinfo_init(void),主要是實現了添加服務和特徵值。

而後經過service_addService(&service, characteristics)函數將這些服務放到協議棧裏。經過函數service_add_characteristic(uint16_t service_handle, const service_characteristic_t* characteristics)來添加服務的特性值。其實其餘任何服務添加模板都是同樣,這些已經是套路。

最後經過函數pairing_init(void)來初始化配對參數。配對的設置總體代碼也同樣,具體的須要另外章節分析。

而後就到了廣播初始化函數advertising_init(void),初始化函數中經過ble_advdata_t結構體來設置廣播參數好比:廣播的uuid,廣播所依賴的homekit版本,還有廣播數據等。廣播通常有四種類型分別是:通用廣播,定向廣播,不可鏈接廣播,可發現廣播。最後經過函數ble_advdata_set()將這些數據設置進棧。以後就能夠經過函數sd_ble_gap_adv_start()來進行廣播了。

相關文章
相關標籤/搜索