增加雷鸟老化测试
authorpenglei <1624952103@qq.com>
Wed, 5 Nov 2025 07:04:21 +0000 (15:04 +0800)
committerpenglei <1624952103@qq.com>
Wed, 5 Nov 2025 07:04:21 +0000 (15:04 +0800)
code/sdk/zhihui/utils/custom_utils.c
code/sdk/zhihui/utils/custom_utils.h
code/sdk/zhihui/utils/custom_utils_at_cmd.c

index 18e15af..3b44f5f 100644 (file)
@@ -663,7 +663,7 @@ void startup_post_init_task(void)
 
     char path[40] = {0};
     uint16_t delay_time = 1500;
-    if(factory_test_flag)
+    if(factory_test_flag == 1)
     {
         snprintf(path, 40, "/user/res/music/FactoryMode.mp3");
         delay_time = 2000;
@@ -673,7 +673,6 @@ void startup_post_init_task(void)
         //snprintf(path, 40, "/user/res/music/PowerOn.mp3");
         uapi_custom_set_uart_rx_enable_flag(false);
     }
-
     custom_play_audio(path,100);
     LOS_Msleep(delay_time);
     custom_stop_play_audio();
@@ -810,6 +809,13 @@ if ( cm_poweron_cat1_on_bootup_flag() )
         printf("key3_enter_ppp_testView_callback error, ret = %d\n", ret);
     else
         printf("key3_enter_ppp_testView_callback succed\n");
+
+
+    if(factory_test_flag == 2)
+    {
+        custom_aging_test_init();
+    }    
+
 #endif
 }
     
@@ -2472,6 +2478,8 @@ void uapi_restore_factory_setting(void)
                         "/user/app_store",//应用市场安装包文件
                         "/user/app",//应用文件解压文件
                         "/user/alipay",//支付宝文件
+                        "/user/system/fac.bin", //产测标志
+                        "user/userdata/aging_test.bin",//产测结果
                     };
 
 #else
@@ -4682,4 +4690,387 @@ void custom_check_factory_test_flag(void)
 uint8_t custom_get_factory_test_flag(void)
 {
     return factory_test_flag;
-}
\ No newline at end of file
+}
+
+typedef struct
+{
+    uint32_t charge_error; //充电失败次数 
+    uint32_t speaker_error; //spk失败次数 
+    uint32_t mic_error;   //mic失败次数 
+    uint32_t motor_error;   //马达失败次数 
+    uint32_t mag_error;     //磁力计失败次数 
+    uint32_t ppg_error;     //ppg失败次数
+    uint32_t gsensor_error;  //gsensor失败次数
+    uint32_t crown_error;   //表冠失败次数
+    uint32_t tp_error;      //tp失败次数
+    uint32_t display_error; //LCD失败次数
+    uint32_t cat1_error;    //CAT1失败次数
+    uint32_t fail_num;      //总失败次数
+    uint32_t executions_num;//执行次数 
+    uint32_t left_time;    //剩余时间
+    uint32_t target_time;    //目标时间
+    uint32_t flag; //老化测试状态 (未开始 - 0, 已开始 - 1, 停止 - 2,完成 - 3)
+} custom_aging_t;
+
+
+static void aging_task(void)
+{
+    
+    custom_aging_t aging_t = {0};
+
+    aging_t.flag = 1;
+
+    aging_t.target_time = 8 * 60 * 60;
+
+    int aging_time = 0;
+    errcode_t ret = 0;
+    uint32_t enter_aging_time = 0;
+    uint32_t current_aging_time = 0;
+    int cmd = 0;
+    uapi_get_timestampe_ss(&enter_aging_time);
+
+    uint8_t cnt = pm_veto_get_id_cnt(PM_ID_P_TEST);
+    if (cnt == 0) 
+    {
+        uapi_pm_add_sleep_veto(PM_ID_P_TEST);
+    }
+
+    uapi_delete_files("user/userdata/aging_test.bin");
+
+    PRINT("aging_t.flag : %d \n",aging_t.flag);
+    while(aging_t.flag == 1)
+    //while(aging_t.flag == 0xfdfd0002)
+    {
+        aging_t.left_time = aging_time;
+        printf("fac:老化目标时间 : %d \r\n",aging_t.target_time);
+        printf("fac:老化剩余时间 : %d \r\n",aging_t.left_time);
+
+        aging_t.executions_num++;
+        printf("fac:老化执行次数 : %d \r\n",aging_t.executions_num);
+        printf("fac:总失败次数 : %d \r\n",aging_t.fail_num);
+
+/*********************LCD 老化测试*****************************/
+        //单色屏测试 2min
+        uint32_t total_time = 2 * 60;
+        uint32_t enter_time = 0;
+        uint32_t age_time = 0;
+        uint32_t current_time = 0;
+        uapi_get_timestampe_ss(&current_time);
+        uapi_get_timestampe_ss(&enter_time);
+        int i = 0;
+        uapi_set_screen_on_api();
+        ScreenAlwaysOnCtr(1);
+        #ifdef BOARD_LEINIAO
+        start_lcd_test_view();
+        printf("fac:LCDTEST ATCMD Enter LCD test interface (LcdTestView)\n");
+        printf("fac:Use AT^LCDTEST=3-8 to change colors: 3=Green, 4=Blue, 5=Yellow, 6=Red, 7=White, 8=Black\n");
+        do
+        {
+            if(aging_t.flag != 1)
+            {
+                uapi_save_file_data("user/userdata/aging_test.bin",&aging_t,sizeof(custom_aging_t),"wb");
+                return;
+            }
+            uapi_get_timestampe_ss(&current_time);
+            // uapi_get_timestampe_ss(&enter_time);
+            set_lcd_test_color(i);
+            i++;
+            i = i%5;            
+            LOS_Msleep(2000);
+            // uapi_get_timestampe_ss(&age_time);
+            // PRINT("current_time - enter_time[%d]\n",current_time -  enter_time);
+        }while(current_time - enter_time <= 2 * 60);
+        // for(int i = 0; i < 5; i++)
+        // {
+        //     LOS_Msleep(2000);
+        //     set_lcd_test_color(i);
+        // }
+        #else
+        uint8_t lcd_cmd = 1;
+        do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_LCD_TEST, &lcd_cmd, sizeof(lcd_cmd));
+        printf("fac:LCDTEST ATCMD Enter LCD test interface\n");
+
+        for(int i = 1; i < 6; i++)
+        {
+            LOS_Msleep(2000);
+            do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_LCD_COLOR_TEST, &i, 1);
+        }
+        #endif
+
+        ScreenAlwaysOnCtr(0);
+        // 退出LCD测试界面
+#ifdef BOARD_LEINIAO
+        stop_lcd_test_view();
+        printf("fac:LCDTEST ATCMD Exit LCD test interface (LcdTestView)\n");
+#else
+        // 其他板:使用原有的消息机制
+        lcd_cmd = 0;
+        do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_LCD_TEST, &lcd_cmd, sizeof(lcd_cmd));
+        printf("fac:LCDTEST ATCMD Exit LCD test interface\n");
+#endif
+
+/*********************充电 老化测试*****************************/
+        // if(!get_charge_stat())
+        // {
+        //     aging_t.charge_error++;
+        //     aging_t.fail_num++;
+        // }
+        float vol = 0.0;
+        uint8 per = 0;
+        per = batteryservice_get_voltage(&vol);
+        printf("fac:电压:%.3f  电量:%d \r\n",vol,per);
+        if(vol < 3.3 || vol > 4.3 || per < 0 || per > 100)
+        {
+            aging_t.charge_error++;
+            aging_t.fail_num++;
+        }
+        printf("fac:电池自检 失败次数 : %d \r\n",aging_t.charge_error);
+
+
+/********************* 马达 老化测试*****************************/
+        total_time = 2 * 60;
+        enter_time = 0;
+        age_time = 0;
+        current_time = 0;
+        uapi_get_timestampe_ss(&current_time);
+        uapi_get_timestampe_ss(&enter_time);
+        do
+        {
+            if(aging_t.flag != 1)
+            {
+                uapi_save_file_data("user/userdata/aging_test.bin",&aging_t,sizeof(custom_aging_t),"wb");
+                return;
+            }
+            uapi_get_timestampe_ss(&current_time);
+            // uapi_get_timestampe_ss(&enter_time);
+            custom_VibratorFunc_int(0);  
+            LOS_Msleep(2000);
+            // uapi_get_timestampe_ss(&age_time);
+            // PRINT("current_time - enter_time[%d]\n",current_time -  enter_time);
+        }while(current_time - enter_time <= 2 * 60);
+        printf("fac:马达失败次数 : %d \r\n",aging_t.motor_error);
+
+/********************* mic 老化测试*****************************/
+//         ret = uapi_microhone_switch(1);
+//         LOS_Msleep(2000 * 60);
+//         ret = uapi_microhone_switch(0);
+//         if(ret != 0)
+//         {
+//             aging_t.mic_error++;
+//             aging_t.fail_num++;
+//         }
+//         PRINT("mic失败次数 : %d \r\n",aging_t.mic_error);
+//         uapi_delete_files("/user/userdata/microphone.mp3");
+// /********************* spk 老化测试*****************************/
+//         total_time = 2 * 60;
+//         enter_time = 0;
+//         age_time = 0;
+//         uapi_get_timestampe_ss(&enter_time);
+//         do
+//         {
+//             if(aging_t.flag != 1)
+//             {
+//                 uapi_save_file_data("user/userdata/aging_test.bin",&aging_t,sizeof(custom_aging_t),"wb");
+//                 return;
+//             }
+//             uapi_get_timestampe_ss(&current_time);
+//             uapi_check_spk(1);
+//             LOS_Msleep(2000);
+//             uapi_check_spk(0);
+//             aging_t.speaker_error = 0;
+//             // PRINT("current_time - enter_time[%d]\n",current_time -  enter_time);
+//         }while(current_time - enter_time <= 2 * 60);
+//         PRINT("spk失败次数 : %d \r\n",aging_t.speaker_error);
+        total_time = 2 * 60;
+        enter_time = 0;
+        age_time = 0;
+        uapi_get_timestampe_ss(&current_time);
+        uapi_get_timestampe_ss(&enter_time);
+        do
+        {
+            if(aging_t.flag != 1)
+            {
+                uapi_save_file_data("user/userdata/aging_test.bin",&aging_t,sizeof(custom_aging_t),"wb");
+                return;
+            }
+            uapi_get_timestampe_ss(&current_time);
+
+            int32_t ret = custom_play_audio("/user/res/music/1khz.mp3",100);
+            if (ret != 0) 
+            {
+                aging_t.speaker_error++;
+                aging_t.fail_num++;
+
+            }
+
+            const char *defaultArgs[6] = {"01", "mp3", "16000", "1", "16", "user/userdata/1.mp3"};
+
+            ret = AudioCaptureSample(6, defaultArgs);
+            if (ret != 0) 
+            {
+                aging_t.mic_error++;
+                aging_t.fail_num++;
+            }
+
+            LOS_Msleep(3000);
+
+            int32_t argc = 1;
+            uint8_t *argv = (uint8_t*)"stop";
+            AudioCaptureSample(argc, (const char **)&argv);
+            LOS_Msleep(500);
+            custom_stop_play_audio();
+
+            LOS_Msleep(1000);
+
+            ret = custom_play_audio("user/userdata/1.mp3",100);
+            if (ret != 0) 
+            {
+                aging_t.speaker_error++;
+                aging_t.fail_num++;
+            }
+
+            LOS_Msleep(3000);
+
+            custom_stop_play_audio();
+
+            uapi_delete_files("user/userdata/1.mp3");
+            LOS_Msleep(1000);
+
+            }while(current_time - enter_time <= 2 * 60);
+        printf("fac:spk 失败次数 : %d \r\n",aging_t.speaker_error);
+        printf("fac:mic 失败次数 : %d \r\n",aging_t.mic_error);
+
+/*********************gsensor 老化测试*****************************/
+        // total_time = 2 * 60;
+        // enter_time = 0;
+        // age_time = 0;
+        // uapi_get_timestampe_ss(&current_time);
+        // uapi_get_timestampe_ss(&enter_time);
+        // do
+        // {
+        //     if(aging_t.flag != 1)
+        //     {
+        //         uapi_save_file_data("user/userdata/aging_test.bin",&aging_t,sizeof(custom_aging_t),"wb");
+        //         return;
+        //     }
+        //     uapi_get_timestampe_ss(&current_time);
+
+            uint8_t id;
+#ifdef SUPPORT_CYWEE_SERVICE
+            uapi_cywee_get_id(&id);
+#endif
+            printf("fac:gsensor id : 0x%x\n",id);
+            if(id != 0x13)
+            {
+                aging_t.gsensor_error++;
+                aging_t.fail_num++;
+            }
+            // LOS_Msleep(1000);
+            // PRINT("current_time - enter_time[%d]\n",current_time -  enter_time);
+        // }while(current_time - enter_time <= 2 * 60);
+        printf("fac:gsensor失败次数 : %d \r\n",aging_t.gsensor_error);
+
+/*********************4g 老化测试*****************************/
+        total_time = 2 * 60;
+        enter_time = 0;
+        age_time = 0;
+        uapi_get_timestampe_ss(&current_time);
+        uapi_get_timestampe_ss(&enter_time);
+        do
+        {
+            if(aging_t.flag != 1)
+            {
+                uapi_save_file_data("user/userdata/aging_test.bin",&aging_t,sizeof(custom_aging_t),"wb");
+                return;
+            }
+            uapi_get_timestampe_ss(&current_time);
+
+            uint8_t sig;
+#ifdef SUPPORT_CAT1_SERVICE
+            uapi_set4GCapability(false);
+            LOS_Msleep(2000);
+            uapi_set4GCapability(true);
+            LOS_Msleep(5000);
+            cat1_getsignal();
+            LOS_Msleep(5000);
+            sig = uapi_dev_runtime_get_cat1_signal();
+#endif
+            printf("fac:4g-sig : %d\n",sig);
+
+            if(sig < 25 || sig == 99)
+            {
+                aging_t.cat1_error++;
+                aging_t.fail_num++;
+            }
+
+            LOS_Msleep(1000);
+            // PRINT("current_time - enter_time[%d]\n",current_time -  enter_time);
+        }while(current_time - enter_time <= 2 * 60);
+        printf("fac:4g失败次数 : %d \r\n",aging_t.gsensor_error);
+
+        uapi_get_timestampe_ss(&current_aging_time);
+
+        if(current_aging_time - enter_aging_time > aging_t.target_time)
+        {
+            aging_t.flag = 3;
+            aging_time = 0;
+            aging_t.left_time = 0;
+            printf("fac:老化完成\n");
+
+            uapi_save_file_data("user/userdata/aging_test.bin",&aging_t,sizeof(custom_aging_t),"wb");
+
+            printf("fac:老化结果:\n");
+            printf("fac:老化时间:%d 小时\n",aging_t.target_time/3600);
+            printf("fac:老化轮数: %d \r\n",aging_t.executions_num);
+            printf("fac:总失败次数: %d \r\n",aging_t.fail_num);
+            printf("fac:mic失败次数: %d\r\n",aging_t.mic_error);
+            printf("fac:spk失败次数: %d\r\n",aging_t.speaker_error);
+            printf("fac:gsensor自检失败次数: %d\r\n",aging_t.gsensor_error);
+            printf("fac:电池自检失败次数: %d\r\n",aging_t.charge_error);
+            printf("fac:4g自检失败次数: %d\r\n",aging_t.cat1_error);
+
+            return;
+        }
+        aging_time = aging_t.target_time - (current_aging_time - enter_aging_time);
+        printf("fac:aging_time : %d flag : %d\r\n",aging_time,aging_t.flag);
+        uapi_save_file_data("user/userdata/aging_test.bin",&aging_t,sizeof(custom_aging_t),"wb");
+
+    }
+}
+
+void custom_get_aging_result(void)
+{
+    custom_aging_t aging_t = {0};
+    uint16_t len = 0;
+    uapi_get_file_data("user/userdata/aging_test.bin",&aging_t,&len);
+
+    printf("fac:老化结果:\n");
+    printf("fac:老化时间:%d 小时\n",aging_t.target_time/3600);
+    printf("fac:老化轮数: %d \r\n",aging_t.executions_num);
+    printf("fac:总失败次数: %d \r\n",aging_t.fail_num);
+    printf("fac:mic失败次数: %d\r\n",aging_t.mic_error);
+    printf("fac:spk失败次数: %d\r\n",aging_t.speaker_error);
+    printf("fac:gsensor自检失败次数: %d\r\n",aging_t.gsensor_error);
+    printf("fac:电池自检失败次数: %d\r\n",aging_t.charge_error);
+    printf("fac:4g自检失败次数: %d\r\n",aging_t.cat1_error);
+}
+
+errcode_t custom_aging_test_init(void)
+{
+    app_task_definition_t taskcfg={0};
+    taskcfg.create_queue_handle = NULL;
+    taskcfg.attr.name="aging_test_service";
+    taskcfg.attr.priority = TASK_PRIORITY_CMD;
+    taskcfg.attr.stack_size =  1024*8;
+    taskcfg.func = aging_task;
+    taskcfg.use_mem = USE_EXTEND_MEM;
+
+    errcode_t ret=uapi_create_osThread_custom(&taskcfg);
+    if(ret != ERRCODE_SUCC)
+    {
+        PRINT("create ppg_service failed %d!\r\n",ret);
+        return ERRCODE_FAIL;
+    }
+
+    return ERRCODE_SUCC;
+}
index 1fe7b61..2c96421 100644 (file)
@@ -498,7 +498,8 @@ errcode_t uapi_create_osThread_custom_with_args(app_task_definition_ext_t *task_
 void custom_set_factory_test_flag(uint8_t flag);
 uint8_t custom_get_factory_test_flag(void);
 void custom_check_factory_test_flag(void);
-
+errcode_t custom_aging_test_init(void);
+void custom_get_aging_result(void);
 
 #include "custom_utilscpp.h"
 
index 83c21f4..ba5a9c7 100644 (file)
@@ -1808,10 +1808,21 @@ static uint32_t custom_enter_factory_test_mode(uint8_t *para, uint32_t paraLen,
 
     uint8_t cmd = (uint8_t)atoi((char*)argv[0]);
     
-    custom_set_factory_test_flag(cmd);
+    if(cmd == 3)
+    {
+        custom_get_aging_result();
+    }   
+    else
+    {
+        custom_set_factory_test_flag(cmd);
 
-    printf("fac:enter or exit facotry mode :%d\n",cmd);
+        printf("fac:enter or exit facotry mode :%d\n",cmd);
+    }
 
+    if(cmd == 0)
+    {
+        uapi_restore_factory_setting();
+    }
     uapi_reboot_device();
 
     return ERRCODE_SUCC;