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

sd_ble_gap_conn_param_update error 8

I have an application where my nrf52832 acts as a peripheral and I can connect to it without problems, but after some time like aprox 10 minutes when I try to connect to it again it doesn't accept the connection until it resets and then the cycle restarts.

I'm trying to debug this problem and the function "sd_ble_gap_conn_param_update" gives me "error 8 - Invalid state" following the previous pattern... Why? The connection parameters seems ok...

SD 3.0.0, sdk 12.2.

define MIN_CONN_INTERVAL MSEC_TO_UNITS(250, UNIT_1_25_MS)

define MAX_CONN_INTERVAL MSEC_TO_UNITS(350, UNIT_1_25_MS)

define SLAVE_LATENCY 0

define CONN_SUP_TIMEOUT MSEC_TO_UNITS(1500, UNIT_10_MS)

define FIRST_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(5000,APP_TIMER_PRESCALER)

define NEXT_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(30000, APP_TIMER_PRESCALER)

define MAX_CONN_PARAMS_UPDATE_COUNT 3

Thank you!

Daniel.

Parents
  • Nope, inside ble_conn_params.c -> update_timeout_handler() I forced to check again the m_conn_handle but the error appears appears when the device is connected.

    static void update_timeout_handler(void * p_context)
    {
        UNUSED_PARAMETER(p_context);
    
        if (m_conn_handle != BLE_CONN_HANDLE_INVALID)
        {
            // Check if we have reached the maximum number of attempts
            m_update_count++;
            if (m_update_count <= m_conn_params_config.max_conn_params_update_count)
            {
                uint32_t err_code;
    
                // Parameters are not ok, send connection parameters update request.
                err_code = sd_ble_gap_conn_param_update(m_conn_handle, &m_preferred_conn_params);
                if ((err_code != NRF_SUCCESS) && (m_conn_params_config.error_handler != NULL)&& (m_conn_handle != BLE_CONN_HANDLE_INVALID))
                {
                    m_conn_params_config.error_handler(err_code);///error here!
                }
            }
            else
    [...]
    
Reply
  • Nope, inside ble_conn_params.c -> update_timeout_handler() I forced to check again the m_conn_handle but the error appears appears when the device is connected.

    static void update_timeout_handler(void * p_context)
    {
        UNUSED_PARAMETER(p_context);
    
        if (m_conn_handle != BLE_CONN_HANDLE_INVALID)
        {
            // Check if we have reached the maximum number of attempts
            m_update_count++;
            if (m_update_count <= m_conn_params_config.max_conn_params_update_count)
            {
                uint32_t err_code;
    
                // Parameters are not ok, send connection parameters update request.
                err_code = sd_ble_gap_conn_param_update(m_conn_handle, &m_preferred_conn_params);
                if ((err_code != NRF_SUCCESS) && (m_conn_params_config.error_handler != NULL)&& (m_conn_handle != BLE_CONN_HANDLE_INVALID))
                {
                    m_conn_params_config.error_handler(err_code);///error here!
                }
            }
            else
    [...]
    
Children
No Data
Related