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

add: pm,对于air8000带wifi的型号,执行休眠指令时,应该把wifi也自动进入休眠, 退出休眠时重启wifi(暂时)

Wendal Chen 7 месяцев назад
Родитель
Сommit
ee67aeef67
2 измененных файлов с 35 добавлено и 1 удалено
  1. 1 1
      components/airlink/src/task/luat_airlink_spi_master_task.c
  2. 34 0
      components/drv/src/luat_drv_pm.c

+ 1 - 1
components/airlink/src/task/luat_airlink_spi_master_task.c

@@ -242,7 +242,7 @@ __USER_FUNC_IN_RAM__ void airlink_wait_and_prepare_data(uint8_t *txbuff)
     int ret = 0;
     int ret = 0;
     if (g_airlink_pause) {
     if (g_airlink_pause) {
         while (g_airlink_pause) {
         while (g_airlink_pause) {
-            LLOGD("airlink spi 交互暂停中,允许主控休眠, 监测周期1000ms");
+            //LLOGD("airlink spi 交互暂停中,允许主控休眠, 监测周期1000ms");
             luat_rtos_task_sleep(1000);
             luat_rtos_task_sleep(1000);
         }
         }
     }
     }

+ 34 - 0
components/drv/src/luat_drv_pm.c

@@ -3,9 +3,15 @@
 #include "luat_mem.h"
 #include "luat_mem.h"
 #include "luat_airlink.h"
 #include "luat_airlink.h"
 #include "luat_pm.h"
 #include "luat_pm.h"
+#include "luat_rtos.h"
 #include "luat/drv_pm.h"
 #include "luat/drv_pm.h"
 #include "luat_airlink_drv_pm.h"
 #include "luat_airlink_drv_pm.h"
 
 
+
+#ifdef LUAT_USE_AIRLINK
+#include "luat_airlink.h"
+#endif
+
 #define LUAT_LOG_TAG "drv.pm"
 #define LUAT_LOG_TAG "drv.pm"
 #include "luat_log.h"
 #include "luat_log.h"
 
 
@@ -21,8 +27,36 @@ int luat_drv_pm_request(int chip, int mode) {
     }
     }
 }
 }
 
 
+#ifdef LUAT_USE_AIRLINK
+static uint8_t s_wifi_sleep = 0;
+extern uint32_t g_airlink_pause;
+#endif
+
 int luat_drv_pm_power_ctrl(int chip, int id, uint8_t val) {
 int luat_drv_pm_power_ctrl(int chip, int id, uint8_t val) {
     if (chip == 0) {
     if (chip == 0) {
+        #ifdef LUAT_USE_AIRLINK
+        if (id == LUAT_PM_POWER_WORK_MODE && luat_airlink_has_wifi()) {
+            // 首先, 如果是退出
+            if (LUAT_PM_POWER_MODE_NORMAL == val) {
+                if (s_wifi_sleep) {
+                    // 现阶段, 只能重启wifi
+                    luat_gpio_set(23, 0); // 关闭wifi
+                    luat_rtos_task_sleep(10);
+                    luat_gpio_set(23, 1); // 打开wifi
+                    s_wifi_sleep = 0;
+                }
+                g_airlink_pause = 0;
+            }
+            // 然后, 如果是进入
+            else {
+                s_wifi_sleep = 1;
+                luat_airlink_drv_pm_power_ctrl(1, val);
+                luat_rtos_task_sleep(10);
+                // 如果是进入休眠模式, 恢复airlink工作
+                g_airlink_pause = 1;
+            }
+        }
+        #endif
         return luat_pm_power_ctrl(id, val);
         return luat_pm_power_ctrl(id, val);
     }
     }
     else {
     else {