This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Continuous scanning for BLE Devices stops every time a BLE device is discovered

Dear All,

I am trying to develop a simple BLE scanner that will scan for BLE beacons and print the retrieved packages.

I am using nRF5 SDK v16.0.0.

I have mostly succeeded in doing so, but I have noticed this:

When the softdevice broadcasts the BLE_GAP_EVT_ADV_REPORT event and after printing out the advertisement package the scanning seems to stop. In order to mitigate that I manually continue the scanning. My ble_evt_handler looks like this:

static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
{
    ret_code_t err_code = NRF_SUCCESS;
    ble_gap_evt_t const * p_gap_evt = &p_ble_evt->evt.gap_evt;

    switch (p_ble_evt->header.evt_id)
    {
        case BLE_GAP_EVT_ADV_REPORT:
            {
                ble_gap_evt_adv_report_t const * p_adv_report = &p_gap_evt->params.adv_report;

                NRF_LOG_INFO("Advertising packet received:");
                NRF_LOG_RAW_HEXDUMP_INFO(p_adv_report->data.p_data, p_adv_report->data.len);
                sd_ble_gap_scan_start(NULL, &m_data); // Manually continue scanning after printing out this result
            } break;
        ...
    }
}


My scanner is configured like this:
#define SCAN_INTERVAL           0x00A0                                  /**< Determines scan interval in units of 0.625 millisecond. */
#define SCAN_WINDOW             0x0050                                  /**< Determines scan window in units of 0.625 millisecond. */
#define SCAN_TIMEOUT            0x0000                                  /**< Timout when scanning. 0x0000 disables timeout. */


/**@brief Scan parameters requested for scanning and connection. */
static ble_gap_scan_params_t m_scan_params =
{
    .extended          = 1,
    .active            = 1,
    .interval          = SCAN_INTERVAL,
    .window            = SCAN_WINDOW,
    .filter_policy     = BLE_GAP_SCAN_FP_ACCEPT_ALL,
    .scan_phys         = BLE_GAP_PHY_CODED,
    .timeout           = SCAN_TIMEOUT,
};

static uint8_t data[255];
ble_data_t m_data = {
    .p_data = data,
    .len = 255
};

/**@brief Function to start scanning. */
static void scan_start(void)
{
    ret_code_t ret;

    ret = sd_ble_gap_scan_start(&m_scan_params, &m_data);
    APP_ERROR_CHECK(ret);
}


So my question is the following: Do I need to do the manual continuation of the scanning after a BLE device was discovered, or I am missing something in my configuration that causes this behaviour?

Please note that this behaviour is the same both for the 1MBPS_PHY and the CODED_PHY, I am using

Thank you very much for your assistance.

Related