diff --git a/config/nrfconnect/app/overlay-bt_private_addresses.conf b/config/nrfconnect/app/overlay-bt_private_addresses.conf deleted file mode 100644 index 348efd657ba370..00000000000000 --- a/config/nrfconnect/app/overlay-bt_private_addresses.conf +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright (c) 2021 Project CHIP Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -CONFIG_BT_SMP=y -CONFIG_BT_PRIVACY=y -CONFIG_BT_MAX_PAIRED=0 -CONFIG_BT_BONDABLE=n -CONFIG_BT_TINYCRYPT_ECC=n -CONFIG_BT_SMP_OOB_LEGACY_PAIR_ONLY=y diff --git a/examples/lighting-app/nrfconnect/CMakeLists.txt b/examples/lighting-app/nrfconnect/CMakeLists.txt index b5de67cf049a05..718ed198c3d727 100644 --- a/examples/lighting-app/nrfconnect/CMakeLists.txt +++ b/examples/lighting-app/nrfconnect/CMakeLists.txt @@ -30,11 +30,6 @@ if (EXISTS boards/${BOARD}.conf) list(APPEND CONF_FILE boards/${BOARD}.conf) endif() -# TODO: temporary fix to remove after solving static addressing problem on nrf5340 -if(BOARD STREQUAL "nrf5340dk_nrf5340_cpuapp") - list(INSERT OVERLAY_CONFIG 0 ${CHIP_ROOT}/config/nrfconnect/app/overlay-bt_private_addresses.conf) -endif() - option(BUILD_WITH_DFU "Build target with Device Firmware Upgrade support" OFF) if(BUILD_WITH_DFU) list(INSERT OVERLAY_CONFIG 0 ${CHIP_ROOT}/config/nrfconnect/app/overlay-ota_requestor.conf) diff --git a/examples/lock-app/nrfconnect/CMakeLists.txt b/examples/lock-app/nrfconnect/CMakeLists.txt index f187c196370920..b2a9f7de892e5a 100644 --- a/examples/lock-app/nrfconnect/CMakeLists.txt +++ b/examples/lock-app/nrfconnect/CMakeLists.txt @@ -29,11 +29,6 @@ if (EXISTS boards/${BOARD}.conf) list(APPEND CONF_FILE boards/${BOARD}.conf) endif() -# TODO: temporary fix to remove after solving static addressing problem on nrf5340 -if(${BOARD} STREQUAL "nrf5340dk_nrf5340_cpuapp") - list(INSERT OVERLAY_CONFIG 0 ${CHIP_ROOT}/config/nrfconnect/app/overlay-bt_private_addresses.conf) -endif() - option(BUILD_WITH_DFU "Build target with Device Firmware Upgrade support" OFF) if(BUILD_WITH_DFU) if(${BOARD} STREQUAL "nrf5340dk_nrf5340_cpuapp") diff --git a/examples/pump-app/nrfconnect/CMakeLists.txt b/examples/pump-app/nrfconnect/CMakeLists.txt index e9f8574e29a53d..2fb43b984c0ec3 100644 --- a/examples/pump-app/nrfconnect/CMakeLists.txt +++ b/examples/pump-app/nrfconnect/CMakeLists.txt @@ -29,11 +29,6 @@ if (EXISTS boards/${BOARD}.conf) list(APPEND CONF_FILE boards/${BOARD}.conf) endif() -# TODO: temporary fix to remove after solving static addressing problem on nrf5340 -if(${BOARD} STREQUAL "nrf5340dk_nrf5340_cpuapp") - list(INSERT OVERLAY_CONFIG 0 ${CHIP_ROOT}/config/nrfconnect/app/overlay-bt_private_addresses.conf) -endif() - option(BUILD_WITH_DFU "Build target with Device Firmware Upgrade support" OFF) if(BUILD_WITH_DFU) if(${BOARD} STREQUAL "nrf5340dk_nrf5340_cpuapp") diff --git a/examples/pump-controller-app/nrfconnect/CMakeLists.txt b/examples/pump-controller-app/nrfconnect/CMakeLists.txt index bb5e2314f6adff..ca973b463c1fe7 100644 --- a/examples/pump-controller-app/nrfconnect/CMakeLists.txt +++ b/examples/pump-controller-app/nrfconnect/CMakeLists.txt @@ -29,11 +29,6 @@ if (EXISTS boards/${BOARD}.conf) list(APPEND CONF_FILE boards/${BOARD}.conf) endif() -# TODO: temporary fix to remove after solving static addressing problem on nrf5340 -if(${BOARD} STREQUAL "nrf5340dk_nrf5340_cpuapp") - list(INSERT OVERLAY_CONFIG 0 ${CHIP_ROOT}/config/nrfconnect/app/overlay-bt_private_addresses.conf) -endif() - option(BUILD_WITH_DFU "Build target with Device Firmware Upgrade support" OFF) if(BUILD_WITH_DFU) if(${BOARD} STREQUAL "nrf5340dk_nrf5340_cpuapp") diff --git a/src/platform/Zephyr/BLEManagerImpl.cpp b/src/platform/Zephyr/BLEManagerImpl.cpp index 52331487e53248..e7b99e7792890c 100644 --- a/src/platform/Zephyr/BLEManagerImpl.cpp +++ b/src/platform/Zephyr/BLEManagerImpl.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -85,22 +86,40 @@ struct bt_gatt_service sChipoBleService = BT_GATT_SERVICE(sChipoBleAttributes); // This value should be adjusted accordingly if the service declaration changes. constexpr int kCHIPoBLE_CCC_AttributeIndex = 3; -void InitRandomStaticAddress() +CHIP_ERROR InitRandomStaticAddress() { -#if !CONFIG_BT_PRIVACY - // When the BT privacy feature is disabled, generate a random static address once per boot. - // This must be done before bt_enable() has been called. + // Generate a random static address for the default identity. + // This must be done before bt_enable() as after that updating the default identity is not possible. + int error = 0; bt_addr_le_t addr; - int error = bt_addr_le_create_static(&addr); - VerifyOrReturn(error == 0, ChipLogError(DeviceLayer, "Failed to create BLE address: %d", error)); +#if CONFIG_BT_HOST_CRYPTO + // When CONFIG_BT_HOST_CRYPTO is enabled, bt_addr_le_create_static() depends on HCI transport + // which is not yet started at this point, so use a different method for generating the address + addr.type = BT_ADDR_LE_RANDOM; + error = sys_csrand_get(addr.a.val, sizeof(addr.a.val)); + BT_ADDR_SET_STATIC(&addr.a); +#else + error = bt_addr_le_create_static(&addr); +#endif + + if (error) + { + ChipLogError(DeviceLayer, "Failed to create BLE address: %d", error); + return System::MapErrorZephyr(error); + } error = bt_id_create(&addr, nullptr); - VerifyOrReturn(error == 0, ChipLogError(DeviceLayer, "Failed to create BLE identity: %d", error)); - ChipLogProgress(DeviceLayer, "BLE address was set to %02X:%02X:%02X:%02X:%02X:%02X", addr.a.val[5], addr.a.val[4], - addr.a.val[3], addr.a.val[2], addr.a.val[1], addr.a.val[0]); -#endif + if (error) + { + ChipLogError(DeviceLayer, "Failed to create BLE identity: %d", error); + return System::MapErrorZephyr(error); + } + + ChipLogProgress(DeviceLayer, "BLE address: %02X:%02X:%02X:%02X:%02X:%02X", addr.a.val[5], addr.a.val[4], addr.a.val[3], + addr.a.val[2], addr.a.val[1], addr.a.val[0]); + return CHIP_NO_ERROR; } } // unnamed namespace @@ -116,7 +135,7 @@ CHIP_ERROR BLEManagerImpl::_Init() memset(mSubscribedConns, 0, sizeof(mSubscribedConns)); - InitRandomStaticAddress(); + ReturnErrorOnFailure(InitRandomStaticAddress()); int err = bt_enable(NULL); VerifyOrReturnError(err == 0, MapErrorZephyr(err));