From f42eed949118793a7cef378927ed1f76d8b03e45 Mon Sep 17 00:00:00 2001 From: zwl Date: Mon, 19 Sep 2022 21:32:54 +0800 Subject: [PATCH 1/2] fixed ble can't enter light sleep --- components/bt/controller/esp32c2/bt.c | 1 + 1 file changed, 1 insertion(+) diff --git a/components/bt/controller/esp32c2/bt.c b/components/bt/controller/esp32c2/bt.c index fe9400f90973..a36d72b6b297 100644 --- a/components/bt/controller/esp32c2/bt.c +++ b/components/bt/controller/esp32c2/bt.c @@ -550,6 +550,7 @@ void controller_sleep_deinit(void) #ifdef CONFIG_PM_ENABLE #ifdef CONFIG_BT_LE_WAKEUP_SOURCE_BLE_RTC_TIMER r_ble_rtc_wake_up_state_clr(); + esp_sleep_disable_bt_wakeup(); #endif esp_sleep_pd_config(ESP_PD_DOMAIN_XTAL, ESP_PD_OPTION_AUTO); From 16c8a369e6eae32657355d03e835cf179b9c1b98 Mon Sep 17 00:00:00 2001 From: zwl Date: Mon, 19 Sep 2022 21:40:12 +0800 Subject: [PATCH 2/2] fixed wifi can't be connected after enable bt sleep mode --- components/bt/controller/esp32c2/bt.c | 30 ++++++++++++++++++++------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/components/bt/controller/esp32c2/bt.c b/components/bt/controller/esp32c2/bt.c index a36d72b6b297..1b42a55ffa28 100644 --- a/components/bt/controller/esp32c2/bt.c +++ b/components/bt/controller/esp32c2/bt.c @@ -171,6 +171,8 @@ static DRAM_ATTR bool s_btdm_allow_light_sleep; // pm_lock to prevent light sleep when using main crystal as Bluetooth low power clock static DRAM_ATTR esp_pm_lock_handle_t s_light_sleep_pm_lock; #define BTDM_MIN_TIMER_UNCERTAINTY_US (200) +#else +static bool s_bt_phy_enabled = false; #endif /* #ifdef CONFIG_PM_ENABLE */ #ifdef CONFIG_BT_LE_WAKEUP_SOURCE_BLE_RTC_TIMER @@ -431,7 +433,8 @@ IRAM_ATTR void controller_sleep_cb(uint32_t enable_tick, void *arg) esp_pm_lock_release(s_pm_lock); s_pm_lock_acquired = false; } - +#else + s_bt_phy_enabled = false; #endif // CONFIG_PM_ENABLE } @@ -445,6 +448,8 @@ IRAM_ATTR void controller_wakeup_cb(void *arg) s_pm_lock_acquired = true; esp_pm_lock_acquire(s_pm_lock); } +#else + s_bt_phy_enabled = true; #endif //CONFIG_PM_ENABLE } @@ -468,6 +473,8 @@ void controller_sleep_init(void) #ifdef CONFIG_PM_ENABLE s_btdm_allow_light_sleep = false; +#else + s_bt_phy_enabled = true; #endif // CONFIG_PM_ENABLE #ifdef CONFIG_BT_LE_SLEEP_ENABLE @@ -556,13 +563,13 @@ void controller_sleep_deinit(void) /*lock should release first and then delete*/ if (s_pm_lock_acquired) { - if(s_light_sleep_pm_lock != NULL) - esp_pm_lock_release(s_light_sleep_pm_lock); - } + if (s_light_sleep_pm_lock != NULL) { + esp_pm_lock_release(s_light_sleep_pm_lock); + } - if(s_pm_lock != NULL) { + if (s_pm_lock != NULL) { esp_pm_lock_release(s_pm_lock); - } + } s_pm_lock_acquired = false; } @@ -583,7 +590,15 @@ void controller_sleep_deinit(void) s_btdm_slp_tmr = NULL; } #endif - s_pm_lock_acquired = false; + if (s_pm_lock_acquired) { + esp_phy_disable(); + s_pm_lock_acquired = false; + } +#else + if (s_bt_phy_enabled) { + esp_phy_disable(); + s_bt_phy_enabled = false; + } #endif } @@ -732,7 +747,6 @@ esp_err_t esp_bt_controller_deinit(void) npl_freertos_mempool_deinit(); - esp_phy_disable(); esp_phy_pd_mem_deinit(); ble_controller_status = ESP_BT_CONTROLLER_STATUS_IDLE;