Przeglądaj źródła

Merge branch 'bugfix/ble_light_sleep_error_on_esp32c2_master' into 'master'

Bugfix/ble light sleep error on esp32c2 master

Closes BLE-161 and BLE-162

See merge request espressif/esp-idf!20248
Jiang Jiang Jian 3 lat temu
rodzic
commit
292fe7c57f
1 zmienionych plików z 23 dodań i 8 usunięć
  1. 23 8
      components/bt/controller/esp32c2/bt.c

+ 23 - 8
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
@@ -550,18 +557,19 @@ 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);
 
     /*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;
     }
 
@@ -582,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
 
 }
@@ -731,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;