添加power+function按键同时按下开机,检测为SafeMode的函数。 921/1 921/head
authorSnickerSun <snickersun@163.com>
Mon, 9 Sep 2024 09:53:05 +0000 (17:53 +0800)
committerSnickerSun <snickersun@163.com>
Mon, 9 Sep 2024 09:53:05 +0000 (17:53 +0800)
后面可以用这个函数切换SafeMode启动。

code/sdk/application/brandy/brandy_standard/board_init.c
code/sdk/drivers/peripheral/utils/custom_runtime.c
code/sdk/drivers/peripheral/utils/custom_runtime.h

index 909649a..08157ef 100755 (executable)
@@ -18,6 +18,7 @@
 #include "lcd_mipi.h"\r
 #include "lcd_bus.h"\r
 #include "button_porting.h"\r
+#include "custom_runtime.h"\r
 \r
 static const lcd_bus_api g_display_api_qspi = {\r
     .bus_init = lcd_qspi_init,\r
@@ -104,7 +105,18 @@ static startup_reason_t startup_reason = STARTUP_OTHER;
 #define  PRESS_COUNT_LIMIT 5\r
 static button_press_state_t porting_button_get_state(void)\r
 {\r
-    if ((readl(ANA_STS) & 0x3) == 0) {\r
+    if ((readl(ANA_STS) & 0x3) == 0) \r
+    {\r
+        return PRESSED;\r
+    } else {\r
+        return RELEASED;\r
+    }\r
+}\r
+#define FUNCTION_BUTTON_GPIO_PIN S_AGPIO_R10\r
+static button_press_state_t porting_function_button_get_state(void)\r
+{\r
+    if (uapi_gpio_get_val(FUNCTION_BUTTON_GPIO_PIN) == GPIO_LEVEL_LOW)\r
+    {\r
         return PRESSED;\r
     } else {\r
         return RELEASED;\r
@@ -145,6 +157,16 @@ void check_pwrkey_3s(void)
     }\r
     // button_api->button_unregister_callback(PIN_NONE);\r
 }\r
+\r
+bool need_enter_safemode(void)\r
+{\r
+    if (PRESSED ==  porting_button_get_state() && PRESSED ==  porting_function_button_get_state())\r
+    {\r
+        return true;\r
+    }else{\r
+        return false;\r
+    }\r
+}\r
 void board_init(uint32_t flash_id, uint32_t flash_unique_id)\r
 {\r
     /* flash init */\r
@@ -158,6 +180,15 @@ void board_init(uint32_t flash_id, uint32_t flash_unique_id)
     pio_func_init();\r
     gpio_func_init();\r
     check_pwrkey_3s();\r
+    if (need_enter_safemode() == true)\r
+    {\r
+        //TODO 设置进入安全模式的全局变量\r
+        PRINT("entering SafeMode\r\n");\r
+        uapi_dev_runtime_set_safemode_flag(1);\r
+    }else{\r
+        PRINT("entering NormalMode\r\n");\r
+    }\r
+\r
 #ifdef QSPI_DISPLAY\r
     PRINT("qspi**************\r\n");\r
     lcd_bus_register_api(&g_display_api_qspi, BUS_DISPLAY_QSPI);\r
index c52aae2..eaf42f0 100644 (file)
@@ -61,6 +61,7 @@ typedef struct
  * */
 typedef struct 
 {
+    uint8_t enter_safemode;
     uint8_t in_silent_mode;
     uint8_t in_lowpower_mode;
     uint8_t stepcount;
@@ -403,4 +404,16 @@ void uapi_dev_runtime_set_absolute_static_status(uint8_t status)
 uint8_t uapi_dev_runtime_get_absolute_static_status(void)
 {
     return g_runtime.absolute_static_state;
+}
+
+
+// 安全模式
+void uapi_dev_runtime_set_safemode_flag(uint8_t status)
+{
+    g_runtime.enter_safemode = status;
+}
+// 安全模式
+uint8_t uapi_dev_runtime_get_safemode_flag(void)
+{
+    return g_runtime.enter_safemode;
 }
\ No newline at end of file
index ea9f71a..35416d8 100644 (file)
@@ -191,6 +191,12 @@ uint8_t uapi_sleep_mode_flag_get(void);
 void uapi_dev_runtime_set_absolute_static_status(uint8_t status);
 uint8_t uapi_dev_runtime_get_absolute_static_status(void);
 
+
+// 安全模式
+void uapi_dev_runtime_set_safemode_flag(uint8_t status);
+// 安全模式
+uint8_t uapi_dev_runtime_get_safemode_flag(void);
+
 #ifdef __cplusplus
 #if __cplusplus
 }