}\r
}\r
\r
-static void check_power_on_voltage(void)\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
- 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
+// static void check_power_on_voltage(void)\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
+// 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
+// // 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
\r
-#endif\r
+// #endif\r
\r
-}\r
+// }\r
\r
bool need_enter_safemode(void)\r
{\r
gpio_func_init();\r
check_pwrkey_3s();\r
\r
- check_power_on_voltage();\r
+ // check_power_on_voltage();\r
\r
if (need_enter_safemode() == true)\r
{\r
#ifdef BOARD_N9
{ S_AGPIO_R3, BUTTON_1 },
#else
- { S_AGPIO_R10, BUTTON_1 },
+ { PIN_NONE, BUTTON_1 },
#endif
#ifdef BOARD_LEINIAO
{ S_AGPIO_L12, BUTTON_2 },
\r
#include "soc_lcd_api.h"\r
\r
+#if defined(SUPPORT_BATTERY_SERVICE)\r
+#include "battery_service.h"\r
+#endif\r
+\r
// int32_t user_get_random_bytes(uint32_t size, uint8_t *randnum)\r
// {\r
// return uapi_drv_cipher_trng_get_random_bytes(randnum, size);\r
// return 0;\r
// }\r
\r
+\r
+//true电压过低 false电压正常\r
+static bool check_power_on_voltage(void)\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
+ disable_charge();\r
+ uapi_tcxo_delay_ms(1000);\r
+ batteryservice_get_voltage_by_channel(&batV,ADC_CHANNEL_BAT_VOLTAGE);\r
+ enable_charge();\r
+\r
+ PRINT("battery Voltage %.02f\n",batV);\r
+\r
+ return (batV <= 3.3f) ? true : false;\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
void ohos_show_bootup_logo(void)\r
{\r
/* 未接lcd时不能调用图形相关类的实例 */\r
#endif\r
\r
\r
+\r
+ if(check_power_on_voltage())\r
+ {\r
+ //显示充电图片\r
+\r
+ while(1)\r
+ {\r
+ #ifdef SUPPORT_POWER_MANAGER\r
+ const power_display_svr_api_t *display_api = power_display_svr_get_api();\r
+ display_api->turn_on_screen();\r
+ display_api->set_screen_set_keepon_timeout(-1);\r
+ #endif\r
+ if(check_power_on_voltage())\r
+ { \r
+ uapi_watchdog_kick();\r
+ uapi_tcxo_delay_ms(5000);\r
+ }\r
+ else\r
+ mcu_reset();\r
+ }\r
+ }\r
+\r
+\r
+\r
+\r
#if defined(CONFIG_OTA_UPDATE_SUPPORT) && defined(ENABLE_UIKIT)\r
if (upg_check_upgrade_need_upgrade())\r
{ \r
#endif
};
+float battery_charge_percent_map[][2]={
+#ifdef BOARD_FD272
+ {4.375, 100},
+ {4.255, 95},
+ {4.155, 90},
+ {4.069, 85},
+ {3.996, 80},
+ {3.933, 75},
+ {3.877, 70},
+ {3.828, 65},
+ {3.784, 60},
+ {3.744, 55},
+ {3.708, 50},
+ {3.674, 45},
+ {3.643, 40},
+ {3.614, 35},
+ {3.586, 30},
+ {3.560, 25},
+ {3.535, 20},
+ {3.510, 15},
+ {3.480, 10},
+ {3.415, 5},
+ {3.300, 0}
+#endif
+};
+
+
#ifdef BOARD_LEINIAO
#define batteryservice_VOLTAGE_MAX (4.2f)
#elif defined BOARD_FD272
{
uint32_t current_time = 0;
int percent = 0;
- int map_len = sizeof(battery_percent_map)/sizeof(battery_percent_map[0]);
+ // ===================== 最小修改:根据充电状态选择MAP =====================
+ const float (*battery_map)[2] = get_charge_stat() ? battery_charge_percent_map : battery_percent_map;
+ int map_len = sizeof(battery_charge_percent_map)/sizeof(battery_charge_percent_map[0]); // 两个map长度一样
+ // ======================================================================
float temp_value = 0.0f;
for (int i =0;i<map_len -1;i++)
{
//电压在前后两个之间
- if (voltage <= battery_percent_map[i][0] && voltage > battery_percent_map[i+1][0] )
+ if (voltage <= battery_map[i][0] && voltage > battery_map[i+1][0] )
{
//电压差 前大后小
- float r_div = ( battery_percent_map[i][0] - voltage)/(battery_percent_map[i][0] - battery_percent_map[i+1][0]);
+ float r_div = ( battery_map[i][0] - voltage)/(battery_map[i][0] - battery_map[i+1][0]);
//百分比 前大后小
- temp_value = battery_percent_map[i][1] - (battery_percent_map[i][1] - battery_percent_map[i+1][1] ) * r_div ;
+ temp_value = battery_map[i][1] - (battery_map[i][1] - battery_map[i+1][1] ) * r_div ;
percent = (int)(temp_value + 0.5);
history_percent = percent;
// printf("batterymap[%d]=%f,batterymap[%d]=%f, r_div = %f , temp_value = %f ,percent = %d\n",
- // i,battery_percent_map[i][0],i+1,battery_percent_map[i+1][0],
+ // i,battery_map[i][0],i+1,battery_map[i+1][0],
// r_div,temp_value,percent
// );
break;
}
+ printf("000 history_percent:%d ,percent : %d ,voltage:%.3f \n",history_percent,percent,voltage);
+
if (voltage <= batteryservice_VOLTAGE_MIN)
percent = 0;
{
if(get_charge_stat() && history_percent < 100 && history_percent) //充电中则均匀增加
{
+ printf("111 history_percent:%d ,percent : %d ,voltage:%.3f \n",history_percent,percent,voltage);
// uapi_save_runtime_log(RUNTIME_LOG_BATTERY_MIN_UP);
history_percent++;
percent = history_percent;
}
else if(!get_charge_stat() && history_percent) //未充电且history_percent不为0 则保持不变
{
+ printf("222 history_percent:%d ,percent : %d ,voltage:%.3f \n",history_percent,percent,voltage);
percent = history_percent;
}
else
{
+ printf("333 history_percent:%d ,percent : %d ,voltage:%.3f \n",history_percent,percent,voltage);
percent = 100;
+ history_percent = 100;
}
}