在Nordic SDK中,可以很方便的配置設(shè)備的廣播時間。當(dāng)廣播超時后,會有哪些處理呢?下面就來介紹下。
1. 廣播事件
廣播相關(guān)的配置在advertising_init()函數(shù)中完成。包含廣播數(shù)據(jù),廣播相關(guān)模式和時間配置,回調(diào)函數(shù)的配置。
1.1 廣播數(shù)據(jù)
SDK中的廣播數(shù)據(jù)內(nèi)容參考ble_advdata_t結(jié)構(gòu)體??砂O(shè)備名稱,外觀,UUID,廠商自定義數(shù)據(jù)等。
1.2 廣播時間配置
廣播時間配置,兩個重要的時間:廣播間隔,廣播時間。
廣播間隔表示兩次廣播的時間間隔,一般為200-1000ms。廣播時間為整個廣播階段的時間,一般為幾十到上百秒。
/**< The advertising interval (in units of 0.625 ms. This value corresponds to 187.5 ms). */
#define APP_ADV_INTERVAL 300
/**< The advertising duration (180 seconds) in units of 10 milliseconds. */
#define APP_ADV_DURATION 18000
1.3 回調(diào)函數(shù)
回調(diào)函數(shù)在初始化函數(shù)中設(shè)置,后續(xù)廣播相關(guān)的事件處理都在此函數(shù)中處理?;卣{(diào)函數(shù)中常用的事件有兩個:BLE_ADV_EVT_FAST,BLE_ADV_EVT_IDLE。
前者表示廣播開始,一般不常用。后者標(biāo)示廣播結(jié)束,即APP_ADV_DURATION超時。此時可以讓設(shè)備進入低功耗狀態(tài),也可以讓設(shè)備繼續(xù)進行廣播。
2. 掃描事件
掃描功能的初始化在scan_init()函數(shù)中進行,主要包含:基本參數(shù)配置、掃描過濾配置。
2.1 基本參數(shù)
掃描相關(guān)的參數(shù)一般打包為一個結(jié)構(gòu)體,如下所示。
/**< Scan parameters requested for scanning and connection. */
static ble_gap_scan_params_t const m_scan_param =
{
.active = 0x01,
.interval = NRF_BLE_SCAN_SCAN_INTERVAL,
.window = NRF_BLE_SCAN_SCAN_WINDOW,
.filter_policy = BLE_GAP_SCAN_FP_WHITELIST,
.timeout = SCAN_DURATION_WITELIST,
.scan_phys = BLE_GAP_PHY_1MBPS,
};
初始化時,還會配置一個回調(diào)函數(shù),用于處理掃描過程中的事件。全面的事件介紹可在枚舉nrf_ble_scan_evt_t中查看。產(chǎn)品研發(fā)中,可能會用部分事件處理,下面簡單說明。
NRF_BLE_SCAN_EVT_FILTER_MATCH:初始化使能掃描過濾后,掃描到符合條件的設(shè)備,會產(chǎn)生此事件。
NRF_BLE_SCAN_EVT_SCAN_TIMEOUT:掃描超時后,會產(chǎn)生此事件。此事件處理中,可以繼續(xù)掃描,也可以不做處理。
2.2 掃描過濾
掃描支持多種過濾,具體選項可在nrf_ble_scan_filter_type_t結(jié)構(gòu)體中查看。