Przeglądaj źródła

component/bt: fixed the assert in checking hardware sleep state during wake-up

The hardware sleep state change can take some time after wake-up interrupt. Use busy waiting instead of directly assert
wangmengyang 4 lat temu
rodzic
commit
a024de7cac

+ 6 - 4
components/bt/controller/esp32c3/bt.c

@@ -710,10 +710,6 @@ static void btdm_sleep_exit_phase3_wrapper(void)
     }
 #endif
 
-    if(btdm_sleep_clock_sync()) {
-        ESP_LOGE(BTDM_LOG_TAG, "sleep eco state err\n");
-        assert(0);
-    }
     if (btdm_controller_get_sleep_mode() == ESP_BT_SLEEP_MODE_1) {
         if (s_lp_stat.phy_enabled == 0) {
             esp_phy_enable();
@@ -728,6 +724,12 @@ static void btdm_sleep_exit_phase3_wrapper(void)
         esp_timer_stop(s_btdm_slp_tmr);
         s_lp_stat.wakeup_timer_started = 0;
     }
+
+    // wait for the sleep state to change
+    // the procedure duration is at micro-second level or less
+    while (btdm_sleep_clock_sync()) {
+        ;
+    }
 }
 
 static void IRAM_ATTR btdm_sleep_exit_phase0(void *param)

+ 6 - 4
components/bt/controller/esp32s3/bt.c

@@ -710,10 +710,6 @@ static void btdm_sleep_exit_phase3_wrapper(void)
     }
 #endif
 
-    if(btdm_sleep_clock_sync()) {
-        ESP_LOGE(BT_LOG_TAG, "sleep eco state err\n");
-        assert(0);
-    }
     if (btdm_controller_get_sleep_mode() == ESP_BT_SLEEP_MODE_1) {
         if (s_lp_stat.phy_enabled == 0) {
             esp_phy_enable();
@@ -728,6 +724,12 @@ static void btdm_sleep_exit_phase3_wrapper(void)
         esp_timer_stop(s_btdm_slp_tmr);
         s_lp_stat.wakeup_timer_started = 0;
     }
+
+    // wait for the sleep state to change
+    // the procedure duration is at micro-second level or less
+    while (btdm_sleep_clock_sync()) {
+        ;
+    }
 }
 
 static void IRAM_ATTR btdm_sleep_exit_phase0(void *param)