Hello,
I want to add central-role features to my peripheral firmware. I've already managed to get this work. The strange thing, I only get one BLE_GAP_EVT_ADV_REPORT. So the firmeware receives one advertisement and then it stops receiving.
The documentation says that it stops/pauses scanning when an ADV_REPORT is received and BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA is not set. But I'm not even in extended mode.
I'm using a nRF52832-DK and the SDK is 15.3.0 with Softdevice 6.1.1. Here is my code:
Init and start:
void scanning_init(nrf_ble_scan_t scan)
{
ret_code_t err_code;
m_scan = scan;
ble_gap_scan_params_t scan_params;
memset(&scan_params, 0, sizeof(scan_params));
scan_params.active = 0;
scan_params.interval = 160;
scan_params.window = 80;
scan_params.timeout = BLE_GAP_SCAN_TIMEOUT_UNLIMITED;
scan_params.scan_phys = BLE_GAP_PHY_1MBPS;
scan_params.extended = 0;
nrf_ble_scan_init_t init_scan;
memset(&init_scan, 0, sizeof(init_scan));
init_scan.connect_if_match = false,
init_scan.p_conn_param = NULL,
init_scan.conn_cfg_tag = NULL,
init_scan.p_scan_param = &scan_params,
err_code = nrf_ble_scan_init(&m_scan, &init_scan, evt_hdler);
APP_ERROR_CHECK(err_code);
}
void scanning_start()
{
ret_code_t err_code;
err_code = nrf_ble_scan_start(&m_scan);
APP_ERROR_CHECK(err_code);
}
void on_ble_central_evt(ble_evt_t const * p_ble_evt)
{
ret_code_t err_code;
// For readability
ble_gap_evt_t const * p_gap_evt = &p_ble_evt->evt.gap_evt;
ble_gap_addr_t const * const p_peer_addr = &p_gap_evt->params.adv_report.peer_addr;
switch (p_ble_evt->header.evt_id)
{
...
case BLE_GAP_EVT_ADV_REPORT:
{
NRF_LOG_INFO("Advertisement received");
}
break; // BLE_GAP_ADV_REPORT
...
default:
// No implementation needed.
break;
}
}
I can see "Advertisement received" in the log, but only once.
Any ideas? Thanks for your help in advance!