}\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