mirror of
https://github.com/espressif/esp-idf
synced 2025-03-12 18:49:08 -04:00
fix(ble): do not assert if ble sleep init failed
This commit is contained in:
parent
a0f798cfc4
commit
e3cbe53fa3
@ -188,7 +188,6 @@ const static uint32_t log_bufs_size[] = {CONFIG_BT_LE_LOG_CTRL_BUF1_SIZE, CONFIG
|
|||||||
static bool s_ble_active = false;
|
static bool s_ble_active = false;
|
||||||
#ifdef CONFIG_PM_ENABLE
|
#ifdef CONFIG_PM_ENABLE
|
||||||
static DRAM_ATTR esp_pm_lock_handle_t s_pm_lock = NULL;
|
static DRAM_ATTR esp_pm_lock_handle_t s_pm_lock = NULL;
|
||||||
#define BTDM_MIN_TIMER_UNCERTAINTY_US (200)
|
|
||||||
#endif // CONFIG_PM_ENABLE
|
#endif // CONFIG_PM_ENABLE
|
||||||
static DRAM_ATTR modem_clock_lpclk_src_t s_bt_lpclk_src = MODEM_CLOCK_LPCLK_SRC_INVALID;
|
static DRAM_ATTR modem_clock_lpclk_src_t s_bt_lpclk_src = MODEM_CLOCK_LPCLK_SRC_INVALID;
|
||||||
|
|
||||||
@ -393,7 +392,7 @@ static void sleep_modem_ble_mac_modem_state_deinit(void)
|
|||||||
sleep_retention_entries_destroy(SLEEP_RETENTION_MODULE_BLE_MAC);
|
sleep_retention_entries_destroy(SLEEP_RETENTION_MODULE_BLE_MAC);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sleep_modem_light_sleep_overhead_set(uint32_t overhead)
|
void IRAM_ATTR sleep_modem_light_sleep_overhead_set(uint32_t overhead)
|
||||||
{
|
{
|
||||||
esp_ble_set_wakeup_overhead(overhead);
|
esp_ble_set_wakeup_overhead(overhead);
|
||||||
}
|
}
|
||||||
@ -414,16 +413,19 @@ esp_err_t controller_sleep_init(void)
|
|||||||
BLE_RTC_DELAY_US_MODEM_SLEEP);
|
BLE_RTC_DELAY_US_MODEM_SLEEP);
|
||||||
#endif /* FREERTOS_USE_TICKLESS_IDLE */
|
#endif /* FREERTOS_USE_TICKLESS_IDLE */
|
||||||
#endif // CONFIG_BT_LE_SLEEP_ENABLE
|
#endif // CONFIG_BT_LE_SLEEP_ENABLE
|
||||||
|
|
||||||
#ifdef CONFIG_PM_ENABLE
|
#ifdef CONFIG_PM_ENABLE
|
||||||
rc = esp_pm_lock_create(ESP_PM_CPU_FREQ_MAX, 0, "bt", &s_pm_lock);
|
rc = esp_pm_lock_create(ESP_PM_CPU_FREQ_MAX, 0, "bt", &s_pm_lock);
|
||||||
if (rc != ESP_OK) {
|
if (rc != ESP_OK) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
#endif // CONFIG_PM_ENABLE
|
||||||
|
|
||||||
|
#if CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
||||||
/* Create a new regdma link for BLE related register restoration */
|
/* Create a new regdma link for BLE related register restoration */
|
||||||
rc = sleep_modem_ble_mac_modem_state_init(1);
|
rc = sleep_modem_ble_mac_modem_state_init(0);
|
||||||
assert(rc == 0);
|
if (rc != ESP_OK) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
esp_sleep_enable_bt_wakeup();
|
esp_sleep_enable_bt_wakeup();
|
||||||
ESP_LOGW(NIMBLE_PORT_LOG_TAG, "Enable light sleep, the wake up source is BLE timer");
|
ESP_LOGW(NIMBLE_PORT_LOG_TAG, "Enable light sleep, the wake up source is BLE timer");
|
||||||
|
|
||||||
@ -436,19 +438,21 @@ esp_err_t controller_sleep_init(void)
|
|||||||
sleep_modem_register_mac_bb_module_prepare_callback(sleep_modem_mac_bb_power_down_prepare,
|
sleep_modem_register_mac_bb_module_prepare_callback(sleep_modem_mac_bb_power_down_prepare,
|
||||||
sleep_modem_mac_bb_power_up_prepare);
|
sleep_modem_mac_bb_power_up_prepare);
|
||||||
#endif // SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
#endif // SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
||||||
#endif /* CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
#endif /* CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
#ifdef CONFIG_PM_ENABLE
|
||||||
error:
|
error:
|
||||||
|
#endif // CONFIG_PM_ENABLE
|
||||||
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
#if CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
||||||
#if SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
#if SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
||||||
sleep_modem_unregister_mac_bb_module_prepare_callback(sleep_modem_mac_bb_power_down_prepare,
|
sleep_modem_unregister_mac_bb_module_prepare_callback(sleep_modem_mac_bb_power_down_prepare,
|
||||||
sleep_modem_mac_bb_power_up_prepare);
|
sleep_modem_mac_bb_power_up_prepare);
|
||||||
#endif // SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
#endif // SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
||||||
esp_sleep_disable_bt_wakeup();
|
esp_sleep_disable_bt_wakeup();
|
||||||
esp_pm_unregister_inform_out_light_sleep_overhead_callback(sleep_modem_light_sleep_overhead_set);
|
esp_pm_unregister_inform_out_light_sleep_overhead_callback(sleep_modem_light_sleep_overhead_set);
|
||||||
#endif /* CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
#endif /* CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
||||||
|
#ifdef CONFIG_PM_ENABLE
|
||||||
/*lock should release first and then delete*/
|
/*lock should release first and then delete*/
|
||||||
if (s_pm_lock != NULL) {
|
if (s_pm_lock != NULL) {
|
||||||
esp_pm_lock_delete(s_pm_lock);
|
esp_pm_lock_delete(s_pm_lock);
|
||||||
@ -461,7 +465,7 @@ error:
|
|||||||
|
|
||||||
void controller_sleep_deinit(void)
|
void controller_sleep_deinit(void)
|
||||||
{
|
{
|
||||||
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
#if CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
||||||
#if SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
#if SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
||||||
sleep_modem_unregister_mac_bb_module_prepare_callback(sleep_modem_mac_bb_power_down_prepare,
|
sleep_modem_unregister_mac_bb_module_prepare_callback(sleep_modem_mac_bb_power_down_prepare,
|
||||||
sleep_modem_mac_bb_power_up_prepare);
|
sleep_modem_mac_bb_power_up_prepare);
|
||||||
|
@ -391,7 +391,6 @@ void esp_bt_read_ctrl_log_from_flash(bool output)
|
|||||||
static bool s_ble_active = false;
|
static bool s_ble_active = false;
|
||||||
#ifdef CONFIG_PM_ENABLE
|
#ifdef CONFIG_PM_ENABLE
|
||||||
static DRAM_ATTR esp_pm_lock_handle_t s_pm_lock = NULL;
|
static DRAM_ATTR esp_pm_lock_handle_t s_pm_lock = NULL;
|
||||||
#define BTDM_MIN_TIMER_UNCERTAINTY_US (200)
|
|
||||||
#endif // CONFIG_PM_ENABLE
|
#endif // CONFIG_PM_ENABLE
|
||||||
static DRAM_ATTR modem_clock_lpclk_src_t s_bt_lpclk_src = MODEM_CLOCK_LPCLK_SRC_INVALID;
|
static DRAM_ATTR modem_clock_lpclk_src_t s_bt_lpclk_src = MODEM_CLOCK_LPCLK_SRC_INVALID;
|
||||||
|
|
||||||
@ -615,7 +614,7 @@ static void sleep_modem_ble_mac_modem_state_deinit(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sleep_modem_light_sleep_overhead_set(uint32_t overhead)
|
void IRAM_ATTR sleep_modem_light_sleep_overhead_set(uint32_t overhead)
|
||||||
{
|
{
|
||||||
r_esp_ble_set_wakeup_overhead(overhead);
|
r_esp_ble_set_wakeup_overhead(overhead);
|
||||||
}
|
}
|
||||||
@ -642,13 +641,16 @@ esp_err_t controller_sleep_init(void)
|
|||||||
if (rc != ESP_OK) {
|
if (rc != ESP_OK) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
#endif // CONFIG_PM_ENABLE
|
||||||
#if CONFIG_BT_LE_SLEEP_ENABLE && !CONFIG_MAC_BB_PD
|
#if CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
||||||
|
#if SOC_PM_RETENTION_HAS_CLOCK_BUG && !CONFIG_MAC_BB_PD
|
||||||
#error "CONFIG_MAC_BB_PD required for BLE light sleep to run properly"
|
#error "CONFIG_MAC_BB_PD required for BLE light sleep to run properly"
|
||||||
#endif // CONFIG_BT_LE_SLEEP_ENABLE && !CONFIG_MAC_BB_PD
|
#endif // SOC_PM_RETENTION_HAS_CLOCK_BUG && !CONFIG_MAC_BB_PD
|
||||||
/* Create a new regdma link for BLE related register restoration */
|
/* Create a new regdma link for BLE related register restoration */
|
||||||
rc = sleep_modem_ble_mac_modem_state_init(1);
|
rc = sleep_modem_ble_mac_modem_state_init(1);
|
||||||
assert(rc == 0);
|
if (rc != ESP_OK) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
esp_sleep_enable_bt_wakeup();
|
esp_sleep_enable_bt_wakeup();
|
||||||
ESP_LOGW(NIMBLE_PORT_LOG_TAG, "Enable light sleep, the wake up source is BLE timer");
|
ESP_LOGW(NIMBLE_PORT_LOG_TAG, "Enable light sleep, the wake up source is BLE timer");
|
||||||
|
|
||||||
@ -661,19 +663,21 @@ esp_err_t controller_sleep_init(void)
|
|||||||
sleep_modem_register_mac_bb_module_prepare_callback(sleep_modem_mac_bb_power_down_prepare,
|
sleep_modem_register_mac_bb_module_prepare_callback(sleep_modem_mac_bb_power_down_prepare,
|
||||||
sleep_modem_mac_bb_power_up_prepare);
|
sleep_modem_mac_bb_power_up_prepare);
|
||||||
#endif // SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
#endif // SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
||||||
#endif /* CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
#endif /* CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
#ifdef CONFIG_PM_ENABLE
|
||||||
error:
|
error:
|
||||||
|
#endif // CONFIG_PM_ENABLE
|
||||||
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
#if CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
||||||
#if SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
#if SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
||||||
sleep_modem_unregister_mac_bb_module_prepare_callback(sleep_modem_mac_bb_power_down_prepare,
|
sleep_modem_unregister_mac_bb_module_prepare_callback(sleep_modem_mac_bb_power_down_prepare,
|
||||||
sleep_modem_mac_bb_power_up_prepare);
|
sleep_modem_mac_bb_power_up_prepare);
|
||||||
#endif // SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
#endif // SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
||||||
esp_sleep_disable_bt_wakeup();
|
esp_sleep_disable_bt_wakeup();
|
||||||
esp_pm_unregister_inform_out_light_sleep_overhead_callback(sleep_modem_light_sleep_overhead_set);
|
esp_pm_unregister_inform_out_light_sleep_overhead_callback(sleep_modem_light_sleep_overhead_set);
|
||||||
#endif /* CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
#endif /* CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
||||||
|
#ifdef CONFIG_PM_ENABLE
|
||||||
/*lock should release first and then delete*/
|
/*lock should release first and then delete*/
|
||||||
if (s_pm_lock != NULL) {
|
if (s_pm_lock != NULL) {
|
||||||
esp_pm_lock_delete(s_pm_lock);
|
esp_pm_lock_delete(s_pm_lock);
|
||||||
@ -686,7 +690,7 @@ error:
|
|||||||
|
|
||||||
void controller_sleep_deinit(void)
|
void controller_sleep_deinit(void)
|
||||||
{
|
{
|
||||||
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
#if CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
||||||
#if SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
#if SOC_PM_RETENTION_HAS_CLOCK_BUG && CONFIG_MAC_BB_PD
|
||||||
sleep_modem_unregister_mac_bb_module_prepare_callback(sleep_modem_mac_bb_power_down_prepare,
|
sleep_modem_unregister_mac_bb_module_prepare_callback(sleep_modem_mac_bb_power_down_prepare,
|
||||||
sleep_modem_mac_bb_power_up_prepare);
|
sleep_modem_mac_bb_power_up_prepare);
|
||||||
@ -695,7 +699,7 @@ void controller_sleep_deinit(void)
|
|||||||
esp_sleep_disable_bt_wakeup();
|
esp_sleep_disable_bt_wakeup();
|
||||||
sleep_modem_ble_mac_modem_state_deinit();
|
sleep_modem_ble_mac_modem_state_deinit();
|
||||||
esp_pm_unregister_inform_out_light_sleep_overhead_callback(sleep_modem_light_sleep_overhead_set);
|
esp_pm_unregister_inform_out_light_sleep_overhead_callback(sleep_modem_light_sleep_overhead_set);
|
||||||
#endif /* CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
#endif /* CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
||||||
#ifdef CONFIG_PM_ENABLE
|
#ifdef CONFIG_PM_ENABLE
|
||||||
/* lock should be released first */
|
/* lock should be released first */
|
||||||
esp_pm_lock_delete(s_pm_lock);
|
esp_pm_lock_delete(s_pm_lock);
|
||||||
|
@ -385,7 +385,6 @@ void esp_bt_read_ctrl_log_from_flash(bool output)
|
|||||||
static bool s_ble_active = false;
|
static bool s_ble_active = false;
|
||||||
#ifdef CONFIG_PM_ENABLE
|
#ifdef CONFIG_PM_ENABLE
|
||||||
static DRAM_ATTR esp_pm_lock_handle_t s_pm_lock = NULL;
|
static DRAM_ATTR esp_pm_lock_handle_t s_pm_lock = NULL;
|
||||||
#define BTDM_MIN_TIMER_UNCERTAINTY_US (200)
|
|
||||||
#endif // CONFIG_PM_ENABLE
|
#endif // CONFIG_PM_ENABLE
|
||||||
static DRAM_ATTR modem_clock_lpclk_src_t s_bt_lpclk_src = MODEM_CLOCK_LPCLK_SRC_INVALID;
|
static DRAM_ATTR modem_clock_lpclk_src_t s_bt_lpclk_src = MODEM_CLOCK_LPCLK_SRC_INVALID;
|
||||||
|
|
||||||
@ -604,7 +603,7 @@ static void sleep_modem_ble_mac_modem_state_deinit(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sleep_modem_light_sleep_overhead_set(uint32_t overhead)
|
void IRAM_ATTR sleep_modem_light_sleep_overhead_set(uint32_t overhead)
|
||||||
{
|
{
|
||||||
r_esp_ble_set_wakeup_overhead(overhead);
|
r_esp_ble_set_wakeup_overhead(overhead);
|
||||||
}
|
}
|
||||||
@ -631,13 +630,17 @@ esp_err_t controller_sleep_init(void)
|
|||||||
if (rc != ESP_OK) {
|
if (rc != ESP_OK) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = esp_deep_sleep_register_hook(&r_esp_ble_stop_wakeup_timing);
|
rc = esp_deep_sleep_register_hook(&r_esp_ble_stop_wakeup_timing);
|
||||||
assert(rc == 0);
|
if (rc != ESP_OK) {
|
||||||
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
goto error;
|
||||||
|
}
|
||||||
|
#endif //CONFIG_PM_ENABLE
|
||||||
|
#if CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
||||||
/* Create a new regdma link for BLE related register restoration */
|
/* Create a new regdma link for BLE related register restoration */
|
||||||
rc = sleep_modem_ble_mac_modem_state_init(0);
|
rc = sleep_modem_ble_mac_modem_state_init(0);
|
||||||
assert(rc == 0);
|
if (rc != ESP_OK) {
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
esp_sleep_enable_bt_wakeup();
|
esp_sleep_enable_bt_wakeup();
|
||||||
ESP_LOGW(NIMBLE_PORT_LOG_TAG, "Enable light sleep, the wake up source is BLE timer");
|
ESP_LOGW(NIMBLE_PORT_LOG_TAG, "Enable light sleep, the wake up source is BLE timer");
|
||||||
|
|
||||||
@ -645,15 +648,17 @@ esp_err_t controller_sleep_init(void)
|
|||||||
if (rc != ESP_OK) {
|
if (rc != ESP_OK) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
#endif /* CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
#ifdef CONFIG_PM_ENABLE
|
||||||
error:
|
error:
|
||||||
|
#endif // CONFIG_PM_ENABLE
|
||||||
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
#if CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
||||||
esp_sleep_disable_bt_wakeup();
|
esp_sleep_disable_bt_wakeup();
|
||||||
esp_pm_unregister_inform_out_light_sleep_overhead_callback(sleep_modem_light_sleep_overhead_set);
|
esp_pm_unregister_inform_out_light_sleep_overhead_callback(sleep_modem_light_sleep_overhead_set);
|
||||||
#endif /* CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
#endif /* CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
||||||
|
#ifdef CONFIG_PM_ENABLE
|
||||||
esp_deep_sleep_deregister_hook(&r_esp_ble_stop_wakeup_timing);
|
esp_deep_sleep_deregister_hook(&r_esp_ble_stop_wakeup_timing);
|
||||||
/*lock should release first and then delete*/
|
/*lock should release first and then delete*/
|
||||||
if (s_pm_lock != NULL) {
|
if (s_pm_lock != NULL) {
|
||||||
@ -667,12 +672,12 @@ error:
|
|||||||
|
|
||||||
void controller_sleep_deinit(void)
|
void controller_sleep_deinit(void)
|
||||||
{
|
{
|
||||||
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
#if CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
||||||
r_ble_rtc_wake_up_state_clr();
|
r_ble_rtc_wake_up_state_clr();
|
||||||
esp_sleep_disable_bt_wakeup();
|
esp_sleep_disable_bt_wakeup();
|
||||||
sleep_modem_ble_mac_modem_state_deinit();
|
sleep_modem_ble_mac_modem_state_deinit();
|
||||||
esp_pm_unregister_inform_out_light_sleep_overhead_callback(sleep_modem_light_sleep_overhead_set);
|
esp_pm_unregister_inform_out_light_sleep_overhead_callback(sleep_modem_light_sleep_overhead_set);
|
||||||
#endif /* CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
#endif /* CONFIG_BT_LE_SLEEP_ENABLE && CONFIG_FREERTOS_USE_TICKLESS_IDLE */
|
||||||
#ifdef CONFIG_PM_ENABLE
|
#ifdef CONFIG_PM_ENABLE
|
||||||
esp_deep_sleep_deregister_hook(&r_esp_ble_stop_wakeup_timing);
|
esp_deep_sleep_deregister_hook(&r_esp_ble_stop_wakeup_timing);
|
||||||
/* lock should be released first */
|
/* lock should be released first */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user