From 8b42452e3a1ed9f75c3f9ceb624a77ddd26797eb Mon Sep 17 00:00:00 2001 From: Eric Mechin Date: Thu, 23 Oct 2025 15:16:21 +0200 Subject: [PATCH 1/2] drivers: stm32wb: fix extended advertising error #51430 Set extended advertising setting in app_conf.h file according to CMakeList.txt for BLE stack Options flags and to zephyr Kconfig options. Signed-off-by: Eric Mechin --- lib/stm32wb/CMakeLists.txt | 112 +++++++++++++++++++++++++++++++++++++ lib/stm32wb/hci/app_conf.h | 13 ++++- 2 files changed, 122 insertions(+), 3 deletions(-) diff --git a/lib/stm32wb/CMakeLists.txt b/lib/stm32wb/CMakeLists.txt index a875149e6..3d91dd6c2 100644 --- a/lib/stm32wb/CMakeLists.txt +++ b/lib/stm32wb/CMakeLists.txt @@ -2,6 +2,118 @@ # # SPDX-License-Identifier: Apache-2.0 +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_LL_ONLY "1 << 0") +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_LL_HOST "0 << 0") + +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_NO_SVC_CHANGE_DESC "1 << 1") +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_WITH_SVC_CHANGE_DESC "0 << 1") + +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_DEVICE_NAME_RO "1 << 2") +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_DEVICE_NAME_RW "0 << 2") + +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_EXT_ADV "1 << 3") +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_NO_EXT_ADV "0 << 3") + +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_CS_ALGO2 "1 << 4") +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_NO_CS_ALGO2 "0 << 4") + +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_REDUC_GATTDB_NVM "1 << 5") +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_FULL_GATTDB_NVM "0 << 5") + +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_GATT_CACHING_USED "1 << 6") +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_GATT_CACHING_NOTUSED "0 << 6") + +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_POWER_CLASS_1 "1 << 7") +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_POWER_CLASS_2_3 "0 << 7") + +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_APPEARANCE_WRITABLE "1 << 0") +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_APPEARANCE_READONLY "0 << 0") + +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_ENHANCED_ATT_SUPPORTED "1 << 1") +MATH(EXPR SHCI_C2_BLE_INIT_OPTIONS_ENHANCED_ATT_NOTSUPPORTED "0 << 1") + +if(CONFIG_BT_DEVICE_NAME_GATT_WRITABLE) + message(STATUS "CONFIG_BT_DEVICE_NAME_GATT_WRITABLE: ${CONFIG_BT_DEVICE_NAME_GATT_WRITABLE}") + set(CFG_DEVICE_NAME ${SHCI_C2_BLE_INIT_OPTIONS_DEVICE_NAME_RW}) +else() + message(STATUS "CONFIG_BT_DEVICE_NAME_GATT_WRITABLE: UNDEFINED") + set(CFG_DEVICE_NAME ${SHCI_C2_BLE_INIT_OPTIONS_DEVICE_NAME_RO}) +endif() + +if(CONFIG_BT_EXT_ADV) + message(STATUS "CONFIG_BT_EXT_ADV: ${CONFIG_BT_EXT_ADV}") + MATH(EXPR CFG_EXT_ADV "${SHCI_C2_BLE_INIT_OPTIONS_EXT_ADV} | ${SHCI_C2_BLE_INIT_OPTIONS_CS_ALGO2}") +else() + message(STATUS "CONFIG_BT_EXT_ADV: UNDEFINED") + MATH(EXPR CFG_EXT_ADV "${SHCI_C2_BLE_INIT_OPTIONS_NO_EXT_ADV} | ${SHCI_C2_BLE_INIT_OPTIONS_NO_CS_ALGO2}") +endif() + +if(CONFIG_BT_GATT_CACHING) + message(STATUS "CONFIG_BT_GATT_CACHING: ${CONFIG_BT_GATT_CACHING}") + set(CFG_GATT_CACHING ${SHCI_C2_BLE_INIT_OPTIONS_GATT_CACHING_USED}) +else() + message(STATUS "CONFIG_BT_GATT_CACHING: UNDEFINED") + set(CFG_GATT_CACHING ${SHCI_C2_BLE_INIT_OPTIONS_GATT_CACHING_NOTUSED}) +endif() + +MATH(EXPR CFG_BLE_OPTIONS "${SHCI_C2_BLE_INIT_OPTIONS_LL_HOST} | ${SHCI_C2_BLE_INIT_OPTIONS_WITH_SVC_CHANGE_DESC} | ${CFG_DEVICE_NAME} | ${CFG_EXT_ADV} | ${SHCI_C2_BLE_INIT_OPTIONS_FULL_GATTDB_NVM} | ${CFG_GATT_CACHING} | ${SHCI_C2_BLE_INIT_OPTIONS_POWER_CLASS_2_3}" OUTPUT_FORMAT HEXADECIMAL) + +if(CONFIG_BT_DEVICE_APPEARANCE_GATT_WRITABLE) + message(STATUS "CONFIG_BT_DEVICE_APPEARANCE_GATT_WRITABLE: ${CONFIG_BT_DEVICE_APPEARANCE_GATT_WRITABLE}") + set(CFG_DEVICE_APPEARANCE ${SHCI_C2_BLE_INIT_OPTIONS_APPEARANCE_WRITABLE}) +else() + message(STATUS "CONFIG_BT_DEVICE_APPEARANCE_GATT_WRITABLE: UNDEFINED") + set(CFG_DEVICE_APPEARANCE ${SHCI_C2_BLE_INIT_OPTIONS_APPEARANCE_READONLY}) +endif() + +if(CONFIG_BT_EATT) + message(STATUS "CONFIG_BT_EATT: ${CONFIG_BT_EATT}") + set(CFG_EATT ${SHCI_C2_BLE_INIT_OPTIONS_ENHANCED_ATT_SUPPORTED}) +else() + message(STATUS "CONFIG_BT_EATT: UNDEFINED") + set(CFG_EATT ${SHCI_C2_BLE_INIT_OPTIONS_ENHANCED_ATT_NOTSUPPORTED}) +endif() + +set(CFG_BLE_OPTIONS_EXT ${CFG_DEVICE_APPEARANCE} | ${CFG_EATT}) +MATH(EXPR CFG_BLE_OPTIONS_EXT "${CFG_DEVICE_APPEARANCE} | ${CFG_EATT}" OUTPUT_FORMAT HEXADECIMAL) + +if(CONFIG_BT_EXT_ADV_MAX_ADV_SET) + message(STATUS "CONFIG_BT_EXT_ADV_MAX_ADV_SET: ${CONFIG_BT_EXT_ADV_MAX_ADV_SET}") + if(CONFIG_BT_EXT_ADV_MAX_ADV_SET GREATER 8) + set(CFG_BLE_MAX_ADV_SET_NBR 1) + else() + set(CFG_BLE_MAX_ADV_SET_NBR ${CONFIG_BT_EXT_ADV_MAX_ADV_SET}) + endif() +else() + message(STATUS "CONFIG_BT_EXT_ADV_MAX_ADV_SET: UNDEFINED") + set(CFG_BLE_MAX_ADV_SET_NBR 1) +endif() + +if(CFG_BLE_MAX_ADV_SET_NBR LESS 4) + set(CFG_BLE_MAX_ADV_DATA_LEN 1650) +elseif(CFG_BLE_MAX_ADV_SET_NBR EQUAL 4) + set(CFG_BLE_MAX_ADV_DATA_LEN 1035) +elseif(CFG_BLE_MAX_ADV_SET_NBR EQUAL 5) + set(CFG_BLE_MAX_ADV_DATA_LEN 621) +elseif(CFG_BLE_MAX_ADV_SET_NBR EQUAL 6) + set(CFG_BLE_MAX_ADV_DATA_LEN 414) +elseif(CFG_BLE_MAX_ADV_SET_NBR GREATER 6) + set(CFG_BLE_MAX_ADV_DATA_LEN 207) +endif() + +message(STATUS "BLE Stack modularity configuration:") +message(STATUS "CFG_BLE_OPTIONS: ${CFG_BLE_OPTIONS}") +message(STATUS "CFG_BLE_OPTIONS_EXT: ${CFG_BLE_OPTIONS_EXT}") +message(STATUS "CFG_BLE_MAX_ADV_SET_NBR: ${CFG_BLE_MAX_ADV_SET_NBR}") +message(STATUS "CFG_BLE_MAX_ADV_DATA_LEN: ${CFG_BLE_MAX_ADV_DATA_LEN}") + +zephyr_compile_definitions( + -DCFG_BLE_OPTIONS=${CFG_BLE_OPTIONS} + -DCFG_BLE_OPTIONS_EXT=${CFG_BLE_OPTIONS_EXT} + -DCFG_BLE_MAX_ADV_SET_NBR=${CFG_BLE_MAX_ADV_SET_NBR} + -DCFG_BLE_MAX_ADV_DATA_LEN=${CFG_BLE_MAX_ADV_DATA_LEN} +) + zephyr_include_directories(hci) zephyr_sources(hci/hw_ipcc.c) diff --git a/lib/stm32wb/hci/app_conf.h b/lib/stm32wb/hci/app_conf.h index 7a6e39b01..3185e4700 100644 --- a/lib/stm32wb/hci/app_conf.h +++ b/lib/stm32wb/hci/app_conf.h @@ -304,7 +304,9 @@ * other bits: complete with Options_extension flag */ /* Z-WB-3 */ +#ifndef __ZEPHYR__ #define CFG_BLE_OPTIONS (SHCI_C2_BLE_INIT_OPTIONS_LL_ONLY | SHCI_C2_BLE_INIT_OPTIONS_WITH_SVC_CHANGE_DESC | SHCI_C2_BLE_INIT_OPTIONS_DEVICE_NAME_RW | SHCI_C2_BLE_INIT_OPTIONS_NO_EXT_ADV | SHCI_C2_BLE_INIT_OPTIONS_NO_CS_ALGO2 | SHCI_C2_BLE_INIT_OPTIONS_FULL_GATTDB_NVM | SHCI_C2_BLE_INIT_OPTIONS_GATT_CACHING_NOTUSED | SHCI_C2_BLE_INIT_OPTIONS_POWER_CLASS_2_3) +#endif /** * BLE stack Options_extension flags to be configured with: @@ -319,7 +321,9 @@ * 0: Enhanced ATT not supported * other bits: reserved (shall be set to 0) */ +#ifndef __ZEPHYR__ #define CFG_BLE_OPTIONS_EXT (SHCI_C2_BLE_INIT_OPTIONS_APPEARANCE_READONLY | SHCI_C2_BLE_INIT_OPTIONS_ENHANCED_ATT_NOTSUPPORTED) +#endif #define CFG_BLE_MAX_COC_INITIATOR_NBR (32) @@ -332,8 +336,9 @@ * in addition to the number of links * - Range: 0 .. 4 */ +#ifndef __ZEPHYR__ #define CFG_BLE_MAX_ADD_EATT_BEARERS (4) - +#endif /** * BLE Rx model configuration flags to be configured with: @@ -353,8 +358,9 @@ * on Max Extended advertising configuration supported. * This parameter is considered by the CPU2 when CFG_BLE_OPTIONS has SHCI_C2_BLE_INIT_OPTIONS_EXT_ADV flag set */ - +#ifndef __ZEPHYR__ #define CFG_BLE_MAX_ADV_SET_NBR (3) +#endif /* Maximum advertising data length (in bytes) * Range: 31 .. 1650 with limitation: @@ -362,8 +368,9 @@ * on Max Extended advertising configuration supported. * This parameter is considered by the CPU2 when CFG_BLE_OPTIONS has SHCI_C2_BLE_INIT_OPTIONS_EXT_ADV flag set */ - +#ifndef __ZEPHYR__ #define CFG_BLE_MAX_ADV_DATA_LEN (1650) +#endif /* RF TX Path Compensation Value (16-bit signed integer). Units: 0.1 dB. * Range: -1280 .. 1280 From 8f71bbd4ef1671a47183d886ca80eb0503d37acc Mon Sep 17 00:00:00 2001 From: Eric Mechin Date: Tue, 28 Oct 2025 15:37:55 +0100 Subject: [PATCH 2/2] driver: stm32wb: fix extended advertising error #51430 Added in CMakeList.txt the BLE stack Maximum number of created Enhanced ATT bearers to be configured Signed-off-by: Eric Mechin --- lib/stm32wb/CMakeLists.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/stm32wb/CMakeLists.txt b/lib/stm32wb/CMakeLists.txt index 3d91dd6c2..eee58b477 100644 --- a/lib/stm32wb/CMakeLists.txt +++ b/lib/stm32wb/CMakeLists.txt @@ -101,17 +101,31 @@ elseif(CFG_BLE_MAX_ADV_SET_NBR GREATER 6) set(CFG_BLE_MAX_ADV_DATA_LEN 207) endif() +if(CONFIG_BT_EATT_MAX) + message(STATUS "CONFIG_BT_EATT_MAX: ${CONFIG_BT_EATT_MAX}") + if(CONFIG_BT_EATT_MAX GREATER 4) + set(CFG_BLE_MAX_ADD_EATT_BEARERS 4) + else() + set(CFG_BLE_MAX_ADD_EATT_BEARERS ${CONFIG_BT_EATT_MAX}) + endif() +else() + message(STATUS "CONFIG_BT_EATT_MAX: UNDEFINED") + set(CFG_BLE_MAX_ADD_EATT_BEARERS 4) +endif() + message(STATUS "BLE Stack modularity configuration:") message(STATUS "CFG_BLE_OPTIONS: ${CFG_BLE_OPTIONS}") message(STATUS "CFG_BLE_OPTIONS_EXT: ${CFG_BLE_OPTIONS_EXT}") message(STATUS "CFG_BLE_MAX_ADV_SET_NBR: ${CFG_BLE_MAX_ADV_SET_NBR}") message(STATUS "CFG_BLE_MAX_ADV_DATA_LEN: ${CFG_BLE_MAX_ADV_DATA_LEN}") +message(STATUS "CFG_BLE_MAX_ADD_EATT_BEARERS: ${CFG_BLE_MAX_ADD_EATT_BEARERS}") zephyr_compile_definitions( -DCFG_BLE_OPTIONS=${CFG_BLE_OPTIONS} -DCFG_BLE_OPTIONS_EXT=${CFG_BLE_OPTIONS_EXT} -DCFG_BLE_MAX_ADV_SET_NBR=${CFG_BLE_MAX_ADV_SET_NBR} -DCFG_BLE_MAX_ADV_DATA_LEN=${CFG_BLE_MAX_ADV_DATA_LEN} + -DCFG_BLE_MAX_ADD_EATT_BEARERS=${CFG_BLE_MAX_ADD_EATT_BEARERS} ) zephyr_include_directories(hci)