mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-02 03:00:34 +03:00
fix(ble/bluedroid): Fixed privacy callback triggering multiple times
This commit is contained in:
@@ -2280,6 +2280,7 @@ tBTM_STATUS BTM_ReadChannelMap(BD_ADDR remote_bda)
|
||||
{
|
||||
tACL_CONN *p;
|
||||
tBTM_BLE_CH_MAP_RESULTS result;
|
||||
tBTM_BLE_LEGACY_GAP_CB_PARAMS cb_params;
|
||||
UINT8 status;
|
||||
|
||||
BTM_TRACE_DEBUG("BTM_ReadChannelMap: RemBdAddr: %02x%02x%02x%02x%02x%02x\n",
|
||||
@@ -2310,7 +2311,7 @@ tBTM_STATUS BTM_ReadChannelMap(BD_ADDR remote_bda)
|
||||
result.status = BTM_UNKNOWN_ADDR;
|
||||
|
||||
_ch_map_err:
|
||||
tBTM_BLE_LEGACY_GAP_CB_PARAMS cb_params = {0};
|
||||
memset(&cb_params, 0, sizeof(cb_params));
|
||||
// `ch_map_read` is same as `results`
|
||||
memcpy(&cb_params.ch_map_results, &result, sizeof(tBTM_BLE_CH_MAP_RESULTS));
|
||||
BTM_LegacyBleCallbackTrigger(BTM_BLE_LEGACY_GAP_READ_CHANNEL_MAP_EVT, &cb_params);
|
||||
@@ -2362,6 +2363,7 @@ void btm_read_channel_map_complete(UINT8 *p)
|
||||
BTM_TRACE_DEBUG("btm_read_channel_map_complete\n");
|
||||
|
||||
if (btm_cb.devcb.is_ch_map_cb) {
|
||||
tBTM_BLE_LEGACY_GAP_CB_PARAMS cb_params;
|
||||
/* Reset the callback pointer to prevent duplicate calls */
|
||||
btm_cb.devcb.is_ch_map_cb = false;
|
||||
/* Extract HCI status from the response */
|
||||
@@ -2390,7 +2392,7 @@ void btm_read_channel_map_complete(UINT8 *p)
|
||||
}
|
||||
|
||||
/* Invoke the registered callback with the results */
|
||||
tBTM_BLE_LEGACY_GAP_CB_PARAMS cb_params = {0};
|
||||
memset(&cb_params, 0, sizeof(cb_params));
|
||||
// `ch_map_read` is same as `results`
|
||||
memcpy(&cb_params.ch_map_results, &results, sizeof(tBTM_BLE_CH_MAP_RESULTS));
|
||||
BTM_LegacyBleCallbackTrigger(BTM_BLE_LEGACY_GAP_READ_CHANNEL_MAP_EVT, &cb_params);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
/*******************************************************************************
|
||||
**
|
||||
|
||||
@@ -283,6 +283,7 @@ BOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, tBLE_ADDR_
|
||||
{
|
||||
BOOLEAN result = TRUE;
|
||||
UINT8 status;
|
||||
tBTM_BLE_LEGACY_GAP_CB_PARAMS cb_params;
|
||||
#if (BLE_50_FEATURE_SUPPORT == TRUE)
|
||||
if (addr_type > BLE_ADDR_RANDOM && addr_type != BLE_ADDR_ANONYMOUS)
|
||||
#else
|
||||
@@ -366,7 +367,7 @@ BOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, tBLE_ADDR_
|
||||
return TRUE;
|
||||
|
||||
_wl_end:
|
||||
tBTM_BLE_LEGACY_GAP_CB_PARAMS cb_params = {0};
|
||||
memset(&cb_params, 0, sizeof(cb_params));
|
||||
cb_params.white_list_update.status = status;
|
||||
cb_params.white_list_update.operation = to_add ? BTM_WHITELIST_ADD : BTM_WHITELIST_REMOVE;
|
||||
BTM_LegacyBleCallbackTrigger(BTM_BLE_LEGACY_GAP_WHITE_LIST_UPDATE_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
|
||||
|
||||
Reference in New Issue
Block a user