Merge branch 'bugfix/btdm_do_not_update_conn_params_when_have_key_in_slave' into 'master'

Component/bt: do not update connection params when already have keys in slave

See merge request idf/esp-idf!2176
This commit is contained in:
Jiang Jiang Jian
2018-04-11 20:47:27 +08:00
4 changed files with 20 additions and 1 deletions

View File

@@ -1447,6 +1447,12 @@ tBTM_STATUS btm_ble_set_encryption (BD_ADDR bd_addr, void *p_ref_data, UINT8 lin
} }
} }
// already have encrypted information, do not need to update connection parameters
if(link_role == BTM_ROLE_SLAVE && (p_rec->ble.key_type & BTM_LE_KEY_PENC)) {
p_rec->ble.skip_update_conn_param = true;
} else {
p_rec->ble.skip_update_conn_param = false;
}
if (SMP_Pair(bd_addr) == SMP_STARTED) { if (SMP_Pair(bd_addr) == SMP_STARTED) {
cmd = BTM_CMD_STARTED; cmd = BTM_CMD_STARTED;
p_rec->sec_state = BTM_SEC_STATE_AUTHENTICATING; p_rec->sec_state = BTM_SEC_STATE_AUTHENTICATING;

View File

@@ -485,6 +485,7 @@ typedef struct {
#if SMP_INCLUDED == TRUE #if SMP_INCLUDED == TRUE
tBTM_LE_KEY_TYPE key_type; /* bit mask of valid key types in record */ tBTM_LE_KEY_TYPE key_type; /* bit mask of valid key types in record */
tBTM_SEC_BLE_KEYS keys; /* LE device security info in slave rode */ tBTM_SEC_BLE_KEYS keys; /* LE device security info in slave rode */
bool skip_update_conn_param; /* skip update connection paraams or not*/
#endif #endif
#if (BLE_PRIVACY_SPT == TRUE) #if (BLE_PRIVACY_SPT == TRUE)
tBLE_ADDR_TYPE current_addr_type; /* current adv addr type*/ tBLE_ADDR_TYPE current_addr_type; /* current adv addr type*/

View File

@@ -1389,6 +1389,11 @@ void smp_idle_terminate(tSMP_CB *p_cb, tSMP_INT_DATA *p_data)
*******************************************************************************/ *******************************************************************************/
void smp_fast_conn_param(tSMP_CB *p_cb, tSMP_INT_DATA *p_data) void smp_fast_conn_param(tSMP_CB *p_cb, tSMP_INT_DATA *p_data)
{ {
tBTM_SEC_DEV_REC *p_rec = btm_find_dev (p_cb->pairing_bda);
if(p_rec && p_rec->ble.skip_update_conn_param) {
//do nothing
return;
}
/* Disable L2CAP connection parameter updates while bonding since /* Disable L2CAP connection parameter updates while bonding since
some peripherals are not able to revert to fast connection parameters some peripherals are not able to revert to fast connection parameters
during the start of service discovery. Connection paramter updates during the start of service discovery. Connection paramter updates

View File

@@ -951,6 +951,7 @@ void smp_proc_pairing_cmpl(tSMP_CB *p_cb)
tSMP_EVT_DATA evt_data = {0}; tSMP_EVT_DATA evt_data = {0};
tSMP_CALLBACK *p_callback = p_cb->p_callback; tSMP_CALLBACK *p_callback = p_cb->p_callback;
BD_ADDR pairing_bda; BD_ADDR pairing_bda;
tBTM_SEC_DEV_REC *p_rec;
SMP_TRACE_DEBUG ("smp_proc_pairing_cmpl \n"); SMP_TRACE_DEBUG ("smp_proc_pairing_cmpl \n");
@@ -975,7 +976,13 @@ void smp_proc_pairing_cmpl(tSMP_CB *p_cb)
memcpy (pairing_bda, p_cb->pairing_bda, BD_ADDR_LEN); memcpy (pairing_bda, p_cb->pairing_bda, BD_ADDR_LEN);
if (p_cb->role == HCI_ROLE_SLAVE) { if (p_cb->role == HCI_ROLE_SLAVE) {
L2CA_EnableUpdateBleConnParams(p_cb->pairing_bda, TRUE); p_rec = btm_find_dev (p_cb->pairing_bda);
if(p_rec && p_rec->ble.skip_update_conn_param) {
//clear flag
p_rec->ble.skip_update_conn_param = false;
} else {
L2CA_EnableUpdateBleConnParams(p_cb->pairing_bda, TRUE);
}
} }
smp_reset_control_value(p_cb); smp_reset_control_value(p_cb);