diff --git a/components/bt/controller/bt.c b/components/bt/controller/bt.c index db8713f29c..bc76e63a40 100644 --- a/components/bt/controller/bt.c +++ b/components/bt/controller/bt.c @@ -1439,6 +1439,23 @@ esp_err_t esp_bt_controller_deinit(void) return ESP_OK; } +static void bt_shutdown(void) +{ + esp_err_t ret = ESP_OK; + ESP_LOGD(BTDM_LOG_TAG, "stop/deinit bt"); + + ret = esp_bt_controller_disable(); + if (ESP_OK != ret) { + ESP_LOGW(BTDM_LOG_TAG, "controller disable ret=%d", ret); + } + ret = esp_bt_controller_deinit(); + if (ESP_OK != ret) { + ESP_LOGW(BTDM_LOG_TAG, "controller deinit ret=%d", ret); + } + return; +} + + esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode) { int ret; @@ -1488,6 +1505,10 @@ esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode) } btdm_controller_status = ESP_BT_CONTROLLER_STATUS_ENABLED; + ret = esp_register_shutdown_handler(bt_shutdown); + if (ret != ESP_OK) { + ESP_LOGW(BTDM_LOG_TAG, "Register shutdown handler failed, ret = 0x%x", ret); + } return ESP_OK; } @@ -1515,6 +1536,7 @@ esp_err_t esp_bt_controller_disable(void) esp_phy_disable(); btdm_controller_status = ESP_BT_CONTROLLER_STATUS_INITED; + esp_unregister_shutdown_handler(bt_shutdown); #ifdef CONFIG_PM_ENABLE if (!s_btdm_allow_light_sleep) { diff --git a/components/esp_system/system_api.c b/components/esp_system/system_api.c index 04b84c573f..740940bd73 100644 --- a/components/esp_system/system_api.c +++ b/components/esp_system/system_api.c @@ -17,7 +17,7 @@ #endif -#define SHUTDOWN_HANDLERS_NO 3 +#define SHUTDOWN_HANDLERS_NO 4 static shutdown_handler_t shutdown_handlers[SHUTDOWN_HANDLERS_NO]; esp_err_t esp_register_shutdown_handler(shutdown_handler_t handler)