在Nordic SDK中,可以很方便的配置设备的广播时间。当广播超时后,会有哪些处理呢?下面就来介绍下。
1. 广播事件
广播相关的配置在advertising_init()
函数中完成。包含广播数据,广播相关模式和时间配置,回调函数的配置。
1.1 广播数据
SDK中的广播数据内容参考ble_advdata_t
结构体。可包含设备名称,外观,UUID,厂商自定义数据等。
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 回调函数
回调函数在初始化函数中设置,后续广播相关的事件处理都在此函数中处理。回调函数中常用的事件有两个:BLE_ADV_EVT_FAST
,BLE_ADV_EVT_IDLE
。
前者表示广播开始,一般不常用。后者标示广播结束,即APP_ADV_DURATION
超时。此时可以让设备进入低功耗状态,也可以让设备继续进行广播。
2. 扫描事件
扫描功能的初始化在scan_init()
函数中进行,主要包含:基本参数配置、扫描过滤配置。
2.1 基本参数
扫描相关的参数一般打包为一个结构体,如下所示。
/**< 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,
};
初始化时,还会配置一个回调函数,用于处理扫描过程中的事件。全面的事件介绍可在枚举nrf_ble_scan_evt_t
中查看。产品研发中,可能会用部分事件处理,下面简单说明。
NRF_BLE_SCAN_EVT_FILTER_MATCH
:初始化使能扫描过滤后,扫描到符合条件的设备,会产生此事件。
NRF_BLE_SCAN_EVT_SCAN_TIMEOUT
:扫描超时后,会产生此事件。此事件处理中,可以继续扫描,也可以不做处理。
2.2 扫描过滤
扫描支持多种过滤,具体选项可在nrf_ble_scan_filter_type_t
结构体中查看。