From 2f45a942a58c2098d02c1b177cfd4ff48dad5514 Mon Sep 17 00:00:00 2001 From: Zhou Xiao Date: Tue, 19 Aug 2025 13:14:00 +0800 Subject: [PATCH] feat(ble): support pawr feature in ble sdk on ESP32-H2 (cherry picked from commit 2f7e200fc8cff30593d24204fce2223d4b19d338) Co-authored-by: cjin --- components/bt/controller/esp32h2/Kconfig.in | 7 ++ components/bt/controller/esp32h2/ble.c | 79 +++++++++++++++++-- components/bt/controller/esp32h2/esp_bt_cfg.h | 11 +++ 3 files changed, 91 insertions(+), 6 deletions(-) diff --git a/components/bt/controller/esp32h2/Kconfig.in b/components/bt/controller/esp32h2/Kconfig.in index fd0dff5b73..6f6290765e 100644 --- a/components/bt/controller/esp32h2/Kconfig.in +++ b/components/bt/controller/esp32h2/Kconfig.in @@ -240,6 +240,13 @@ config BT_LE_CTE_FEATURE_ENABLED communication scenarios. If you are using chip esp32h2, ensure that encryption is disabled when using this feature. +config BT_LE_PERIODIC_ADV_WITH_RESPONSE_ENABLED + bool "Enable BLE periodic advertising with response" + depends on BT_LE_50_FEATURE_SUPPORT + default n + help + This enables BLE periodic advertising with response feature + menu "Memory Settings" depends on !BT_NIMBLE_ENABLED diff --git a/components/bt/controller/esp32h2/ble.c b/components/bt/controller/esp32h2/ble.c index 70fb867eec..0b6fc1e7d0 100644 --- a/components/bt/controller/esp32h2/ble.c +++ b/components/bt/controller/esp32h2/ble.c @@ -17,11 +17,6 @@ void base_stack_deinitEnv(void); int base_stack_enable(void); void base_stack_disable(void); -int conn_stack_initEnv(void); -void conn_stack_deinitEnv(void); -int conn_stack_enable(void); -void conn_stack_disable(void); - int adv_stack_initEnv(void); void adv_stack_deinitEnv(void); int adv_stack_enable(void); @@ -44,6 +39,30 @@ int dtm_stack_enable(void); void dtm_stack_disable(void); #endif // CONFIG_BT_LE_DTM_ENABLED +#if DEFAULT_BT_LE_PAWR_SUPPORTED || CONFIG_BT_LE_ERROR_SIM_ENABLED +int ble_single_env_init(void); +void ble_single_env_deinit(void); +int ble_single_init(void); +void ble_single_deinit(void); +#endif // DEFAULT_BT_LE_PAWR_SUPPORTED || CONFIG_BT_LE_ERROR_SIM_ENABLED + +#if DEFAULT_BT_LE_PAWR_SUPPORTED +int pawrBcast_stack_initEnv(void); +void pawrBcast_stack_deinitEnv(void); +int pawrBcast_stack_enable(void); +void pawrBcast_stack_disable(void); + +int pawrSync_stack_initEnv(void); +void pawrSync_stack_deinitEnv(void); +int pawrSync_stack_enable(void); +void pawrSync_stack_disable(void); +#endif // DEFAULT_BT_LE_PAWR_SUPPORTED + +int conn_stack_initEnv(void); +void conn_stack_deinitEnv(void); +int conn_stack_enable(void); +void conn_stack_disable(void); + #if CONFIG_BT_LE_ERROR_SIM_ENABLED int conn_errorSim_initEnv(void); void conn_errorSim_deinitEnv(void); @@ -142,11 +161,44 @@ int ble_stack_initEnv(void) #endif // CONFIG_BT_LE_ERROR_SIM_ENABLED #endif // DEFAULT_BT_LE_MAX_CONNECTIONS +#if DEFAULT_BT_LE_PAWR_SUPPORTED || CONFIG_BT_LE_ERROR_SIM_ENABLED + rc = ble_single_env_init(); + if (rc) { + return rc; + } + + rc = ble_single_init(); + if (rc) { + return rc; + } +#endif // DEFAULT_BT_LE_PAWR_SUPPORTED || CONFIG_BT_LE_ERROR_SIM_ENABLED + +#if DEFAULT_BT_LE_PAWR_SUPPORTED + rc = pawrBcast_stack_initEnv(); + if (rc) { + return rc; + } + + rc = pawrSync_stack_initEnv(); + if (rc) { + return rc; + } +#endif // DEFAULT_BT_LE_PAWR_SUPPORTED + return 0; } void ble_stack_deinitEnv(void) { +#if DEFAULT_BT_LE_PAWR_SUPPORTED + pawrSync_stack_deinitEnv(); + pawrBcast_stack_deinitEnv(); +#endif // DEFAULT_BT_LE_PAWR_SUPPORTED +#if DEFAULT_BT_LE_PAWR_SUPPORTED || CONFIG_BT_LE_ERROR_SIM_ENABLED + ble_single_deinit(); + ble_single_env_deinit(); +#endif // DEFAULT_BT_LE_PAWR_SUPPORTED || CONFIG_BT_LE_ERROR_SIM_ENABLED + #if DEFAULT_BT_LE_MAX_CONNECTIONS #if CONFIG_BT_LE_ERROR_SIM_ENABLED conn_errorSim_deinitEnv(); @@ -156,6 +208,7 @@ void ble_stack_deinitEnv(void) #if CONFIG_BT_LE_DTM_ENABLED dtm_stack_deinitEnv(); #endif // CONFIG_BT_LE_DTM_ENABLED + sync_stack_deinitEnv(); extAdv_stack_deinitEnv(); adv_stack_deinitEnv(); @@ -205,6 +258,17 @@ int ble_stack_enable(void) } #endif // CONFIG_BT_LE_ERROR_SIM_ENABLED #endif // DEFAULT_BT_LE_MAX_CONNECTIONS +#if DEFAULT_BT_LE_PAWR_SUPPORTED + rc = pawrBcast_stack_enable(); + if (rc) { + return rc; + } + + rc = pawrSync_stack_enable(); + if (rc) { + return rc; + } +#endif // DEFAULT_BT_LE_PAWR_SUPPORTED #if (CONFIG_BT_NIMBLE_ENABLED || CONFIG_BT_BLUEDROID_ENABLED) ble_stack_enableVsCmds(true); @@ -224,7 +288,10 @@ void ble_stack_disable(void) ble_stack_enableVsEvents(false); ble_stack_enableVsCmds(false); #endif // (CONFIG_BT_NIMBLE_ENABLED || CONFIG_BT_BLUEDROID_ENABLED) - +#if DEFAULT_BT_LE_PAWR_SUPPORTED + pawrSync_stack_disable(); + pawrBcast_stack_disable(); +#endif // DEFAULT_BT_LE_PAWR_SUPPORTED #if DEFAULT_BT_LE_MAX_CONNECTIONS #if CONFIG_BT_LE_ERROR_SIM_ENABLED conn_errorSim_disable(); diff --git a/components/bt/controller/esp32h2/esp_bt_cfg.h b/components/bt/controller/esp32h2/esp_bt_cfg.h index 01f9dc6182..4734737c5a 100644 --- a/components/bt/controller/esp32h2/esp_bt_cfg.h +++ b/components/bt/controller/esp32h2/esp_bt_cfg.h @@ -45,6 +45,11 @@ extern "C" { #else #define DEFAULT_BT_LE_50_FEATURE_SUPPORT (0) #endif + #if CONFIG_BT_NIMBLE_PERIODIC_ADV_WITH_RESPONSES + #define DEFAULT_BT_LE_PAWR_SUPPORTED (1) + #else + #define DEFAULT_BT_LE_PAWR_SUPPORTED (0) + #endif // CONFIG_BT_NIMBLE_PERIODIC_ADV_WITH_RESPONSES #else #if CONFIG_BT_LE_LL_CFG_FEAT_LE_CODED_PHY @@ -71,6 +76,12 @@ extern "C" { #define DEFAULT_BT_LE_MAX_CONNECTIONS (2) #endif + #if defined(CONFIG_BT_LE_PERIODIC_ADV_WITH_RESPONSE_ENABLED) + #define DEFAULT_BT_LE_PAWR_SUPPORTED (CONFIG_BT_LE_PERIODIC_ADV_WITH_RESPONSE_ENABLED) + #else + #define DEFAULT_BT_LE_PAWR_SUPPORTED (0) + #endif + #if defined(CONFIG_BT_LE_ACL_BUF_SIZE) #define DEFAULT_BT_LE_ACL_BUF_SIZE (CONFIG_BT_LE_ACL_BUF_SIZE) #else