PowerKey 3秒开机
authorSnickerSun <snickersun@163.com>
Wed, 20 Mar 2024 15:56:16 +0000 (23:56 +0800)
committerSnickerSun <snickersun@163.com>
Wed, 20 Mar 2024 15:56:16 +0000 (23:56 +0800)
code/sdk/application/brandy/brandy_standard/board_init.c

index 73a1d50..ff4ad60 100755 (executable)
@@ -17,6 +17,7 @@
 #include "lcd_qspi.h"\r
 #include "lcd_mipi.h"\r
 #include "lcd_bus.h"\r
+#include "button_porting.h"\r
 \r
 static const lcd_bus_api g_display_api_qspi = {\r
     .bus_init = lcd_qspi_init,\r
@@ -97,6 +98,66 @@ static void gpio_func_init(void)
     }\r
 }\r
 \r
+static button_press_state_t g_pwrkey_press_state = RELEASED;\r
+startup_reason_t startup_reason = 3;\r
+bool pwrkey_interrupt = 0;\r
+\r
+static bool pwrkey_interrupt_check(void)\r
+{\r
+    button_peripheral_api *button_api = button_port_get_api();\r
+    // if not vbus or pwren interrupt return\r
+    if (button_api->button_check_interrupt(PIN_NONE) == false) {\r
+        button_api->button_clear_interrupt(PIN_NONE);\r
+        return false;\r
+    }\r
+    // deal with vbus interrupt\r
+    if (button_api->button_check_vbus_interrupt()) {\r
+        // button_api->button_deal_vbus_event();\r
+        button_api->button_clear_interrupt(PIN_NONE);\r
+        return false;\r
+    }\r
+\r
+    return true;\r
+\r
+}\r
+\r
+void check_pwrkey_3s(void)\r
+{\r
+   //3秒按键开机\r
+    button_peripheral_api *button_api=button_port_get_api();\r
+    bool button_pressed = false;\r
+    int pressed_count = 0;\r
+    // button_api->button_register_callback(PIN_NONE, (osal_irq_handler)button_irq_callback);\r
+    uapi_ulp_wkup_type_record();\r
+    startup_reason = uapi_get_startup_reason();\r
+    pwrkey_interrupt = pwrkey_interrupt_check();\r
+    PRINT("bootup reasion %d (0-systick 1-pwrkey 2-vbus 3-other), pwrkey_interrupt %d"NEWLINE,startup_reason,pwrkey_interrupt);\r
+    if(startup_reason == 1) g_pwrkey_press_state = PRESSED;\r
+    else g_pwrkey_press_state = RELEASED;\r
+\r
+    if (g_pwrkey_press_state == PRESSED)\r
+    {\r
+        while(g_pwrkey_press_state == PRESSED){//按键启动才检测3秒\r
+            g_pwrkey_press_state =  button_api->button_get_state(PIN_NONE);\r
+            PRINT("bootup timeout %d g_pwrkey_press_state %d"NEWLINE,pressed_count,g_pwrkey_press_state);\r
+            pressed_count ++ ;\r
+            if (pressed_count>=15)\r
+            {\r
+                break;\r
+            }\r
+            uapi_tcxo_delay_ms(200);\r
+        }\r
+        \r
+        if(pressed_count <15 )\r
+        {\r
+            PRINT("not pressed 3 seconds , poweroff!"NEWLINE);\r
+            uapi_poweroff_device();\r
+        }\r
+        PRINT("bootup continue pressed %d pressed count %d"NEWLINE,g_pwrkey_press_state==PRESSED?1:0,pressed_count);\r
+\r
+    }\r
+    // button_api->button_unregister_callback(PIN_NONE);\r
+}\r
 void board_init(uint32_t flash_id, uint32_t flash_unique_id)\r
 {\r
     /* flash init */\r
@@ -109,7 +170,7 @@ void board_init(uint32_t flash_id, uint32_t flash_unique_id)
 \r
     pio_func_init();\r
     gpio_func_init();\r
-\r
+    check_pwrkey_3s();\r
 #ifdef QSPI_DISPLAY\r
     PRINT("qspi**************\r\n");\r
     lcd_bus_register_api(&g_display_api_qspi, BUS_DISPLAY_QSPI);\r