I'm using an nrf52840 devkit but I'm assuming this behavior happens on all nrf52 devices. I'm trying to control the scanner using app_timer because I need a higher scan interval than the maximum supported interval (BLE_GAP_SCAN_INTERVAL_MAX). When calling nrf_ble_scan_start I'm observing that the softdevice does not start immediately scanning but waits m_scan.interval before it starts the actual scan. In theory, this would be simple a case of adding that delay into my timer code which seems to be working fine, but it takes a while before the advertising starts back up. What is happening in my code:
I set scan_window to BLE_GAP_SCAN_WINDOW_MAX. I set scan_interval to 1000ms.
1. I start a timer that fires every 10 seconds.
2. The timer fires, I call sd_ble_gap_scan_stop, I start a second stop-timer which I set to 1000ms+ my requested window (184ms in this case)
3. After 1000ms, the scan starts. (see screenshot)
4. After 184ms the stop-timer fires, after which the scan ends by calling sd_ble_gap_scan_stop, but advertisements seem to cease for about another second;
5. Only after about 1000ms the advertisements start back up.
Is there a way for me to get the advertisements to start sooner? Decreasing the scan_interval partly resolves the issue (the advertising delay is only 300ms when I set scan_interval to 300ms), but causes the radio to briefly switch off and back on when scanning for a longer time, causing a % packet-loss received from other advertisers. Ideally, if there was a way to immediately start scanning when calling nrf_ble_scan_start, this would resolve my issue (this seems to happen with the first scan, but subsequent scans have the delay).
I will check with the SoftDevice team if this behavior is to be expected, and if there is some way to change it.
Can you confirm which version of the SoftDevice you are testing on?
Thanks! I'm using S140
Which version? s140 v7.0.1?
Are there any active central connections, or are you only doing advertising and scanning?