广播与扫描事件

在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_FASTBLE_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结构体中查看。

你可能感兴趣的:(广播与扫描事件)