增加充电电池曲线,增加充电日志打印,增加低电压充电图片显示 3310/1 3310/head 3311/target/1
author1624952103 <pl@DESKTOP-EN9LKR5.localdomain>
Thu, 26 Mar 2026 07:09:40 +0000 (15:09 +0800)
committer1624952103 <pl@DESKTOP-EN9LKR5.localdomain>
Thu, 26 Mar 2026 07:09:40 +0000 (15:09 +0800)
code/sdk/application/brandy/brandy_standard/board_init.c
code/sdk/application/brandy/brandy_standard/input_app.c
code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c
code/sdk/zhihui/services/battery/service/battery_driver.cpp

index 5efe6bb..ad961ef 100644 (file)
@@ -211,67 +211,67 @@ void check_pwrkey_3s(void)
     }\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
@@ -296,7 +296,7 @@ void board_init(uint32_t flash_id, uint32_t flash_unique_id)
     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
index 8d184ca..13a5d78 100644 (file)
@@ -126,7 +126,7 @@ button_map_t g_brandy_button_pin_map[BUTTON_PIN_MAP_MAX] = {
 #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 },
index 5a70c16..4bb906c 100644 (file)
 \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
@@ -69,6 +139,31 @@ void ohos_show_bootup_logo(void)
 #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
index c0c201d..f3e9bd9 100644 (file)
@@ -478,6 +478,33 @@ float battery_percent_map[][2]={
 #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
@@ -720,18 +747,21 @@ static int battery_get_percent_by_voltage(float voltage)
 {
     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);
 
@@ -784,7 +814,7 @@ static int battery_get_percent_by_voltage(float voltage)
 
             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;
@@ -792,6 +822,8 @@ static int battery_get_percent_by_voltage(float voltage)
     
     }
 
+    printf("000 history_percent:%d ,percent : %d ,voltage:%.3f \n",history_percent,percent,voltage);
+
     if (voltage <= batteryservice_VOLTAGE_MIN)
         percent = 0;
 
@@ -799,17 +831,21 @@ static int battery_get_percent_by_voltage(float voltage)
     {
         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;
         }
     }