This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

for controlling connection parameters

Hi. I'm using nRF52832, SDK13, S312v4 as peripheral.

I want to change connection parameter as below.

#define MIN_CONN_INTERVAL_FAST MSEC_TO_UNITS(30, UNIT_1_25_MS) #define MAX_CONN_INTERVAL_FAST MSEC_TO_UNITS(60, UNIT_1_25_MS)

#define MIN_CONN_INTERVAL MSEC_TO_UNITS(100, UNIT_1_25_MS) #define MAX_CONN_INTERVAL MSEC_TO_UNITS(200, UNIT_1_25_MS)

static void gap_connection_interval(unsigned short conn_handle_val, unsigned char interval) {

ret_code_t              err_code;
ble_gap_conn_params_t   gap_conn_params;

if(interval==CON_INTERVAL_FAST)
{
	gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL_FAST;
	gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL_FAST;
	gap_conn_params.slave_latency	  = SLAVE_LATENCY;
	gap_conn_params.conn_sup_timeout  = CONN_SUP_TIMEOUT;
}
else
{
	gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL;
	gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL;
	gap_conn_params.slave_latency	  = SLAVE_LATENCY;
	gap_conn_params.conn_sup_timeout  = CONN_SUP_TIMEOUT;
}
err_code = sd_ble_gap_conn_param_update(conn_handle_val, &gap_conn_params);
APP_ERROR_CHECK(err_code);

}

static void gap_params_init(void) {

ret_code_t              err_code;
ble_gap_conn_params_t   gap_conn_params;
ble_gap_conn_sec_mode_t sec_mode;

BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode);

err_code = sd_ble_gap_device_name_set(&sec_mode,
                                      (const uint8_t *)DEVICE_NAME,
                                      strlen(DEVICE_NAME));
APP_ERROR_CHECK(err_code);

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

gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL;
gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL;
gap_conn_params.slave_latency     = SLAVE_LATENCY;
gap_conn_params.conn_sup_timeout  = CONN_SUP_TIMEOUT;

err_code = sd_ble_gap_ppcp_set(&gap_conn_params);
APP_ERROR_CHECK(err_code);

err_code = sd_ble_gap_tx_power_set(TX_POWER_LEVEL);
APP_ERROR_CHECK(err_code);

}

#define FIRST_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(20000) #define NEXT_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(5000) #define MAX_CONN_PARAMS_UPDATE_COUNT 3

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             = true;
cp_init.error_handler                  = conn_params_error_handler;

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

}

step 1. gap_params_init() : slow interval. after connection, it works well.

step 2. gap_connection_interval(conn_handle_val, CON_INTERVAL_FAST) : fast interval, it works well.

step 3. gap_connection_interval(conn_handle_val, CON_INTERVAL_SLOW) : slow interval, it works well.

step 4. gap_connection_interval(conn_handle_val, CON_INTERVAL_FAST) : fast interval again, it doesn't work. and system goes stop.

Why does it work just 2 times? I have to change connection interval many times. Do I have to change "conn_params_init()"? How can I do that?

I need your help.

Related