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
commit 6b7ad6b707
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) {
cmd = BTM_CMD_STARTED;
p_rec->sec_state = BTM_SEC_STATE_AUTHENTICATING;

View File

@ -485,6 +485,7 @@ typedef struct {
#if SMP_INCLUDED == TRUE
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 */
bool skip_update_conn_param; /* skip update connection paraams or not*/
#endif
#if (BLE_PRIVACY_SPT == TRUE)
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)
{
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
some peripherals are not able to revert to fast connection parameters
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_CALLBACK *p_callback = p_cb->p_callback;
BD_ADDR pairing_bda;
tBTM_SEC_DEV_REC *p_rec;
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);
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);