fix(ble/bluedroid): Fixed privacy callback triggering multiple times

This commit is contained in:
zhiweijian
2026-04-03 14:07:23 +08:00
parent d2892e882a
commit 1ced86789b
6 changed files with 35 additions and 14 deletions
@@ -80,10 +80,9 @@ static void btm_gen_resolve_paddr_cmpl(tSMP_ENC *p)
BTM_TRACE_DEBUG("set random address failed");
status = BTM_SET_PRIVACY_FAIL;
}
tBTM_BLE_LEGACY_GAP_CB_PARAMS cb_params = {0};
cb_params.status = status;
BTM_LegacyBleCallbackTrigger(BTM_BLE_LEGACY_GAP_SET_PRIVACY_EVT, &cb_params);
BTM_BleLegacyGapOneshotFireIfArmed(BTM_BLE_LEGACY_GAP_SET_PRIVACY_EVT, &cb_params);
}
/*******************************************************************************
**
@@ -37,6 +37,7 @@
#include "hci/hci_layer.h"
#if BLE_INCLUDED == TRUE
#include "l2c_int.h"
#include "bta_dm_gap.h"
#include "stack/gattdefs.h"
#include "gatt_int.h"
@@ -493,7 +494,7 @@ BOOLEAN BTM_BleConfigPrivacy(BOOLEAN privacy_mode)
}
if (random_cb){
random_cb->cb_is_triggered = false;
BTM_BleLegacyGapOneshotArm(BTM_BLE_LEGACY_GAP_SET_PRIVACY_EVT);
}else{
BTM_TRACE_ERROR("%s,random_cb = NULL", __func__);
}
@@ -4104,7 +4105,7 @@ BOOLEAN BTM_BleAddDevToResolvingList(BD_ADDR addr,
BTM_TRACE_ERROR("Add device to resolving list error");
return FALSE;
}
BTM_BleLegacyGapOneshotArm(BTM_BLE_LEGACY_GAP_ADD_DEV_TO_RPA_LIST_EVT);
return TRUE;
}
@@ -298,7 +298,7 @@ void btm_ble_add_resolving_list_entry_complete(UINT8 *p, UINT16 evt_len)
tBTM_BLE_LEGACY_GAP_CB_PARAMS cb_params = {0};
cb_params.status = status;
BTM_LegacyBleCallbackTrigger(BTM_BLE_LEGACY_GAP_ADD_DEV_TO_RPA_LIST_EVT, &cb_params);
BTM_BleLegacyGapOneshotFireIfArmed(BTM_BLE_LEGACY_GAP_ADD_DEV_TO_RPA_LIST_EVT, &cb_params);
BTM_TRACE_DEBUG("%s status = %d", __func__, status);
@@ -436,19 +436,12 @@ void btm_ble_set_addr_resolution_enable_complete(UINT8 *p, UINT16 evt_len)
BTM_TRACE_DEBUG("%s status = %d", __func__, status);
tBTM_LE_RANDOM_CB *random_cb = &btm_cb.ble_ctr_cb.addr_mgnt_cb;
if (random_cb->cb_is_triggered) {
return;
}
if (status != HCI_SUCCESS) {
BTM_TRACE_ERROR("set local privacy failed with status: 0x%x", status);
}
random_cb->cb_is_triggered = true;
tBTM_BLE_LEGACY_GAP_CB_PARAMS cb_params = {0};
cb_params.status = (status == HCI_SUCCESS)? BTM_SUCCESS : BTM_ILLEGAL_VALUE;
BTM_LegacyBleCallbackTrigger(BTM_BLE_LEGACY_GAP_SET_PRIVACY_EVT, &cb_params);
BTM_BleLegacyGapOneshotFireIfArmed(BTM_BLE_LEGACY_GAP_SET_PRIVACY_EVT, &cb_params);
}
/*******************************************************************************
@@ -203,7 +203,6 @@ typedef struct {
tBTM_BLE_ADDR_CBACK *p_generate_cback;
void *p;
TIMER_LIST_ENT raddr_timer_ent;
bool cb_is_triggered;
} tBTM_LE_RANDOM_CB;
#define BTM_BLE_MAX_BG_CONN_DEV_NUM 10