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

This commit is contained in:
zhiweijian
2018-04-02 15:33:04 +08:00
parent aca0008694
commit a6c79cfe0f
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);