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

GAP Disconnect seems to stop first application timer

Using SDK 15.3 and S132.

I'm having similar behavior to the thread below:

https://devzone.nordicsemi.com/f/nordic-q-a/12066/gap-disconnect-stops-app-timer

After disconnecting with my nrf52 devkit, the conn_parameters module seems to stop my timer. If I disconnect from my nrf52 too fast (within 1 second of connecting), I get an error caused by 'update_timeout_handler' in ble_conn_params.c because it's trying to call 'send_update_request' after the disconnect has occurred. Unlike the OP in the other thread, I do in fact call conn_params_init(); at the start. Below my main() and conn_params_init(). I'm creating all my application timers by using APP_TIMER_DEF(). By debugging the code, I can see that the 'on_disconnect' function in ble_conn_params.c is stopping my application timer by calling 'app_timer_stop(p_instance->timer_id)'. Why does my application timer and the conn_params_timer have the same ID? 

/**@brief Function for application main entry.
 */
int main(void)
   {
    bool erase_bonds;

    // Initialize.
    log_init();
    // Initialize the async SVCI interface to bootloader before any interrupts are enabled.
    //ret_code_t err_code = ble_dfu_buttonless_async_svci_init();
    //APP_ERROR_CHECK(err_code);
    power_management_init();
    ble_stack_init();
    sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE);
    timers_init();
    application_timers_start();
    
    (void) fds_register(fds_evt_handler);
    ret_code_t rc;
    rc = fds_init();
    APP_ERROR_CHECK(rc);
    /* Wait for fds to initialize. */
    wait_for_fds_ready();
    
    //buttons_leds_init(&erase_bonds); 
    gap_params_init();
    gatt_init();
    services_init();
    conn_params_init();
    
    peer_manager_init();
    config_init();
    ...
    ...
    }

/**@brief Function for initializing the Connection Parameters module.
 */
static void conn_params_init(void)
{
    ret_code_t             err_code;
    ble_conn_params_init_t cp_init;

    memset(&cp_init, 0, sizeof(cp_init));

    cp_init.p_conn_params                  = NULL;
    cp_init.first_conn_params_update_delay = FIRST_CONN_PARAMS_UPDATE_DELAY;
    cp_init.next_conn_params_update_delay  = NEXT_CONN_PARAMS_UPDATE_DELAY;
    cp_init.max_conn_params_update_count   = MAX_CONN_PARAMS_UPDATE_COUNT;
    cp_init.start_on_notify_cccd_handle    = BLE_GATT_HANDLE_INVALID;
    cp_init.disconnect_on_fail             = false;
    cp_init.evt_handler                    = on_conn_params_evt;
    cp_init.error_handler                  = conn_params_error_handler;

    err_code = ble_conn_params_init(&cp_init);
    APP_ERROR_CHECK(err_code);
}

Related