mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-01 03:34:32 +02:00
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:
@@ -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;
|
||||||
|
@@ -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*/
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user