#include "button_porting.h"\r
#include "non_os_reboot.h"\r
#include "pm_control.h"\r
+\r
+#if defined(SUPPORT_BATTERY_SERVICE)\r
+#include "battery_service.h"\r
+#endif\r
+\r
+\r
#define PM_SHIPMODE_DELAY_SLEEP_MS 100\r
static const lcd_bus_api g_display_api_qspi = {\r
.bus_init = lcd_qspi_init,\r
PRINT("bootup continue pressed %d pressed count %d"NEWLINE,g_pwrkey_press_state==PRESSED?1:0,pressed_count);\r
}\r
}\r
+\r
+static void check_power_on_voltage(void)\r
+{\r
+ #if defined(SUPPORT_BATTERY_SERVICE) && !defined(BOARD_FD272)\r
+\r
+ extern uint8_t get_charge_stat(void);\r
+ extern bool batteryservice_get_voltage_by_channel(float *voltage, uint8_t channel);\r
+ #define ADC_CHANNEL_BAT_VOLTAGE 2\r
+\r
+ // if(!get_charge_stat())\r
+ {\r
+ float batV = 0.0f;\r
+ disable_charge();\r
+ uapi_tcxo_delay_ms(1000);\r
+ batteryservice_get_voltage_by_channel(&batV,ADC_CHANNEL_BAT_VOLTAGE);\r
+ enable_charge();\r
+ PRINT("battery Voltage %.02f\n",batV);\r
+\r
+ if(batV <= 3.3f)\r
+ {\r
+ if(get_charge_stat())\r
+ {\r
+ for(int i = 0; i < 3;i++)\r
+ {\r
+\r
+ \r
+ // while(batV <= 3.3)\r
+ // {\r
+ disable_charge();\r
+ uapi_tcxo_delay_ms(1000);\r
+ batteryservice_get_voltage_by_channel(&batV,ADC_CHANNEL_BAT_VOLTAGE);\r
+ PRINT("battery Voltage %.02f\n",batV);\r
+ enable_charge();\r
+ if(batV > 3.3f)\r
+ {\r
+ break;\r
+ }\r
+ uapi_tcxo_delay_ms(5000);\r
+ // }\r
+ }\r
+ if(batV <= 3.3f)\r
+ {\r
+ extern void mcu_reset(void);\r
+ mcu_reset();\r
+ }\r
+\r
+ }\r
+ else\r
+ {\r
+ PRINT("Warning: Battery voltage is too low. Device will power off");\r
+ uapi_tcxo_delay_ms(10);\r
+ extern void mcu_poweroff(void);\r
+ mcu_poweroff();\r
+ }\r
+\r
+ }\r
+ \r
+ }\r
+ \r
+#endif\r
+\r
+}\r
+\r
bool need_enter_safemode(void)\r
{\r
if (PRESSED == porting_button_get_state() && PRESSED == porting_function_button_get_state())\r
pio_func_init();\r
gpio_func_init();\r
check_pwrkey_3s();\r
+\r
+ check_power_on_voltage();\r
+ \r
if (need_enter_safemode() == true)\r
{\r
PRINT("entering SafeMode\r\n");\r
uapi_timer_init();\r
uapi_timer_adapter(0, TIMER_0_IRQN, irq_prio(TIMER_0_IRQN));\r
\r
-#if defined(SUPPORT_BATTERY_SERVICE)\r
-\r
- extern uint8_t get_charge_stat(void);\r
- extern bool batteryservice_get_voltage_by_channel(float *voltage, uint8_t channel);\r
- #define ADC_CHANNEL_BAT_VOLTAGE 2\r
-\r
- if(!get_charge_stat())\r
- {\r
- float batV = 0.0f;\r
- batteryservice_get_voltage_by_channel(&batV,ADC_CHANNEL_BAT_VOLTAGE);\r
- PRINT("battery Voltage %.02f\n",batV);\r
-\r
- if(batV <= 3.0f)\r
- {\r
- printf("Warning: Battery voltage is too low. Device will power off");\r
- uapi_tcxo_delay_ms(10);\r
- extern void mcu_poweroff(void);\r
- mcu_poweroff();\r
- }\r
- // while( batV < MIN_BOOTUP_VOTAGE)\r
- // {\r
- // batteryservice_get_voltage_by_channel(&batV,ADC_CHANNEL_BAT_VOLTAGE);\r
- // charge_stat = get_charge_stat();\r
- // PRINT("battery Voltage %.02f , charging %d\n",batV,charge_stat);\r
- // uapi_tcxo_delay_ms(1000);\r
- // enable_charge(); \r
- // // disable_02c();\r
- \r
- // }\r
- }\r
- \r
-#endif\r
\r
chip_xip_init();\r
#if TCXO_CLK_DYN_ADJUST == YES\r