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!