Просмотр исходного кода

Merge branch 'bugfix/coex_bug' into 'master'

esp32: fix coex bug

See merge request idf/esp-idf!2603
Jiang Jiang Jian 7 лет назад
Родитель
Сommit
abbccb7acd
4 измененных файлов с 18 добавлено и 5 удалено
  1. 12 3
      components/bt/bt.c
  2. 1 1
      components/bt/lib
  3. 4 0
      components/esp32/include/esp_phy_init.h
  4. 1 1
      components/esp32/lib

+ 12 - 3
components/bt/bt.c

@@ -915,7 +915,14 @@ esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
 
     esp_phy_load_cal_and_init(PHY_BT_MODULE);
 
-    if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_ORIG) {
+    if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_NONE) {
+        //Just register to sleep module, make the modem sleep modules check BT sleep status when sleep enter.
+        //Thus, it will prevent WIFI from disabling RF when BT is not in sleep but is using RF.
+        esp_modem_sleep_register(MODEM_BLE_MODULE);
+        esp_modem_sleep_register(MODEM_CLASSIC_BT_MODULE);
+        esp_modem_sleep_exit(MODEM_BLE_MODULE);
+        esp_modem_sleep_exit(MODEM_CLASSIC_BT_MODULE);
+    } else if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_ORIG) {
         esp_modem_sleep_register(MODEM_BLE_MODULE);
         esp_modem_sleep_register(MODEM_CLASSIC_BT_MODULE);
     } else if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_EVED) {
@@ -933,7 +940,8 @@ esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
 
     ret = btdm_controller_enable(mode);
     if (ret) {
-        if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_ORIG) {
+        if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_NONE
+                || btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_ORIG) {
             esp_modem_sleep_deregister(MODEM_BLE_MODULE);
             esp_modem_sleep_deregister(MODEM_CLASSIC_BT_MODULE);
         } else if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_EVED) {
@@ -973,7 +981,8 @@ esp_err_t esp_bt_controller_disable(void)
     }
 
     if (ret == ESP_BT_MODE_IDLE) {
-        if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_ORIG) {
+        if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_NONE
+                || btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_ORIG) {
             esp_modem_sleep_deregister(MODEM_BLE_MODULE);
             esp_modem_sleep_deregister(MODEM_CLASSIC_BT_MODULE);
         } else if (btdm_controller_get_sleep_mode() == BTDM_MODEM_SLEEP_MODE_EVED) {

+ 1 - 1
components/bt/lib

@@ -1 +1 @@
-Subproject commit e0740ac07b0939bcfc089e580df460ed3cdd950c
+Subproject commit 48b2459bcb4b9b6d6c64b93a1b8c6c70e25dfbd7

+ 4 - 0
components/esp32/include/esp_phy_init.h

@@ -202,6 +202,10 @@ esp_err_t esp_modem_sleep_exit(modem_sleep_module_t module);
 
 /**
  * @brief Register module to make it be able to require to enter/exit modem sleep
+ *        Although the module has no sleep function, as long as the module use RF,
+ *        it must call esp_modem_sleep_regsiter. Otherwise, other modules with sleep
+ *        function will disable RF without checking the module which doesn't call
+ *        esp_modem_sleep_regsiter.
  */
 esp_err_t esp_modem_sleep_register(modem_sleep_module_t module);
 

+ 1 - 1
components/esp32/lib

@@ -1 +1 @@
-Subproject commit 534a9b14101af90231d40a4f94924d67bc848d5f
+Subproject commit 0bfda8bbf6a804298b357614f5f215248c36bce3