优化代码,解决powerkey 可能造成 充电启动检测不到问题
authorSnickerSun <snickersun@163.com>
Sat, 23 Mar 2024 07:34:40 +0000 (15:34 +0800)
committerSnickerSun <snickersun@163.com>
Sat, 23 Mar 2024 07:34:40 +0000 (15:34 +0800)
code/sdk/application/brandy/brandy_standard/board_init.c

index ff4ad60..ec062ca 100755 (executable)
@@ -99,56 +99,56 @@ static void gpio_func_init(void)
 }\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
+startup_reason_t startup_reason = STARTUP_OTHER;\r
 \r
-static bool pwrkey_interrupt_check(void)\r
+static startup_reason_t get_startup_reason(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
+    startup_reason_t startup_type = STARTUP_OTHER;\r
+    uint16_t g_ulp_wkup_flag = readw(ULP_WKUP_INT_STS);\r
+    if (((g_ulp_wkup_flag >> WKUP_SYSTICK_MASK) & 1) == 1) {\r
+        startup_type = STARTUP_SYSTICK;\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
+    if (((g_ulp_wkup_flag >> WKUP_PWRON_MASK) & 1) == 1) {\r
+        startup_type = STARTUP_PWRON;\r
+    }\r
+    if (((g_ulp_wkup_flag >> WKUP_VBUS_EN_MASK) & 1) == 1) {\r
+        startup_type = STARTUP_VBUS_EN;\r
+    }\r
+    return startup_type;\r
+}\r
+static button_press_state_t porting_button_get_state(void)\r
+{\r
+    if ((readl(ANA_STS) & 0x3) == 0) {\r
+        return PRESSED;\r
+    } else {\r
+        return RELEASED;\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
+    startup_reason = get_startup_reason();\r
+    PRINT("bootup reasion %d (0-systick 1-pwrkey 2-vbus 3-other)"NEWLINE,startup_reason);\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
+            g_pwrkey_press_state =  porting_button_get_state();\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
+            if (pressed_count>=10)\r
             {\r
                 break;\r
             }\r
             uapi_tcxo_delay_ms(200);\r
         }\r
         \r
-        if(pressed_count <15 )\r
+        if(pressed_count <10 )\r
         {\r
             PRINT("not pressed 3 seconds , poweroff!"NEWLINE);\r
             uapi_poweroff_device();\r