From 1cc0f6aac578b5eb9e731d644d82efc66cc8270a Mon Sep 17 00:00:00 2001 From: xiewenxiang Date: Tue, 13 Jul 2021 22:13:20 +0800 Subject: [PATCH 1/2] Fixed ESP32 BLE can't resolve the peer address when enable white list --- .../bt/host/bluedroid/common/include/common/bt_target.h | 6 ++++++ components/bt/host/bluedroid/stack/btm/btm_ble_gap.c | 2 ++ components/soc/esp32/include/soc/soc_caps.h | 3 +++ 3 files changed, 11 insertions(+) diff --git a/components/bt/host/bluedroid/common/include/common/bt_target.h b/components/bt/host/bluedroid/common/include/common/bt_target.h index 341190268e..598fa92774 100644 --- a/components/bt/host/bluedroid/common/include/common/bt_target.h +++ b/components/bt/host/bluedroid/common/include/common/bt_target.h @@ -21,6 +21,7 @@ #define BT_TARGET_H #include +#include "soc/soc_caps.h" #ifndef BUILDCFG #define BUILDCFG @@ -257,6 +258,11 @@ #define BLE_ESTABLISH_LINK_CONNECTION_TIMEOUT UC_BT_BLE_ESTAB_LINK_CONN_TOUT #endif +#ifdef SOC_BLE_DONT_UPDATE_OWN_RPA +#define BLE_UPDATE_BLE_ADDR_TYPE_RPA FALSE +#else +#define BLE_UPDATE_BLE_ADDR_TYPE_RPA TRUE +#endif //------------------Added from bdroid_buildcfg.h--------------------- #ifndef L2CAP_EXTFEA_SUPPORTED_MASK #define L2CAP_EXTFEA_SUPPORTED_MASK (L2CAP_EXTFEA_ENH_RETRANS | L2CAP_EXTFEA_STREAM_MODE | L2CAP_EXTFEA_NO_CRC | L2CAP_EXTFEA_FIXED_CHNLS) diff --git a/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c b/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c index 6d1ba22186..d3928a0132 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c +++ b/components/bt/host/bluedroid/stack/btm/btm_ble_gap.c @@ -1015,7 +1015,9 @@ uint32_t BTM_BleUpdateOwnType(uint8_t *own_bda_type, tBTM_START_ADV_CMPL_CBACK * } } else if(*own_bda_type == BLE_ADDR_PUBLIC_ID || *own_bda_type == BLE_ADDR_RANDOM_ID) { if((btm_cb.ble_ctr_cb.addr_mgnt_cb.exist_addr_bit & BTM_BLE_GAP_ADDR_BIT_RESOLVABLE) == BTM_BLE_GAP_ADDR_BIT_RESOLVABLE) { +#if (BLE_UPDATE_BLE_ADDR_TYPE_RPA) *own_bda_type = BLE_ADDR_RANDOM; +#endif btm_cb.ble_ctr_cb.addr_mgnt_cb.own_addr_type = BLE_ADDR_RANDOM; memcpy(btm_cb.ble_ctr_cb.addr_mgnt_cb.private_addr, btm_cb.ble_ctr_cb.addr_mgnt_cb.resolvale_addr, BD_ADDR_LEN); btsnd_hcic_ble_set_random_addr(btm_cb.ble_ctr_cb.addr_mgnt_cb.resolvale_addr); diff --git a/components/soc/esp32/include/soc/soc_caps.h b/components/soc/esp32/include/soc/soc_caps.h index 544209a925..9fb7022f2a 100644 --- a/components/soc/esp32/include/soc/soc_caps.h +++ b/components/soc/esp32/include/soc/soc_caps.h @@ -292,3 +292,6 @@ */ #define SOC_SDMMC_USE_IOMUX 1 #define SOC_SDMMC_NUM_SLOTS 2 + +/*------------------------------ BLE --------------------------------------------*/ +#define SOC_BLE_DONT_UPDATE_OWN_RPA (1) From 95c35288bc92880a2e7cb406e8c08d6072153fd4 Mon Sep 17 00:00:00 2001 From: xiewenxiang Date: Wed, 4 Aug 2021 21:40:23 +0800 Subject: [PATCH 2/2] component/bt: add local irk to controller --- components/bt/host/bluedroid/stack/btm/btm_sec.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/components/bt/host/bluedroid/stack/btm/btm_sec.c b/components/bt/host/bluedroid/stack/btm/btm_sec.c index 41ae31f3aa..50c0123f6b 100644 --- a/components/bt/host/bluedroid/stack/btm/btm_sec.c +++ b/components/bt/host/bluedroid/stack/btm/btm_sec.c @@ -240,6 +240,12 @@ BOOLEAN BTM_SecRegister(tBTM_APPL_INFO *p_cb_info) if (memcmp(btm_cb.devcb.id_keys.ir, &temp_value, sizeof(BT_OCTET16)) == 0) { btm_ble_reset_id(); } +#if (!BLE_UPDATE_BLE_ADDR_TYPE_RPA) + BD_ADDR peer_addr = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; + BT_OCTET16 peer_irk = {0x0}; + /* add local irk to controller */ + btsnd_hcic_ble_add_device_resolving_list (0, peer_addr, peer_irk, btm_cb.devcb.id_keys.irk); +#endif } else { BTM_TRACE_WARNING("%s p_cb_info->p_le_callback == NULL\n", __func__); }