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.