优化
authorpenglei <1624952103@qq.com>
Sun, 7 Apr 2024 13:34:53 +0000 (21:34 +0800)
committerpenglei <1624952103@qq.com>
Sun, 7 Apr 2024 13:34:53 +0000 (21:34 +0800)
code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c
code/sdk/application/wstp/at_service/app/app_at_process.c
code/sdk/application/wstp/at_service/app/app_common_api.c
code/sdk/drivers/peripheral/slip/cat1Service/cat1_server.h
code/sdk/drivers/peripheral/utils/custom_utils.c

index 5d0d4da..93359d1 100644 (file)
@@ -21,7 +21,8 @@
 #include "power_display_service.h"\r
 #include "efuse.h"\r
 #include "mag_service.h"\r
-\r
+#include "nandflash_config.h"\r
+#include "string.h"\r
 \r
 #pragma pack(1)\r
 typedef struct factorytest_cmd_header_t\r
@@ -32,8 +33,34 @@ typedef struct factorytest_cmd_header_t
     uint8_t submod;\r
     uint8_t testitem;\r
 }factorytest_cmd_header_t;\r
+\r
+typedef struct\r
+{\r
+    uint8_t send_data;//填充字节\r
+    uint32_t flag; //老化测试状态 (完成 - 0xfdfd0000, 停止 - 0xfdfd0001, 开始-0xfdfd0002, 结束-0xfdfd0003)\r
+    uint32_t executions_num;//执行次数 \r
+    uint32_t target_num;    //目标次数\r
+    uint32_t fail_num;      //失败次数\r
+    uint32_t enter_age_time;  //进入老化时间\r
+    uint32_t age_time;      //每轮老化结束时间\r
+    uint16_t restart_num;    //老化重启次数\r
+\r
+    uint32_t display_error; //屏失败次数\r
+    uint32_t tp_error;      //tp失败次数\r
+    uint32_t gsensor_error;  //A+G sensor失败次数\r
+    uint32_t ppg_error;     //ppg失败次数\r
+    uint32_t mag_error;     //magnetic 失败次数 \r
+    uint32_t motor_error;   //motor失败次数 \r
+    uint32_t speaker_error; //speaker失败次数 \r
+    uint32_t flash_res_error;    //片外资源失败次数\r
+    uint16_t flash_bad_block_num;  //老化前后flash的坏块数量差值\r
+}ble_aging_t;\r
+\r
 #pragma pack()\r
 \r
+\r
+ble_aging_t aging_t;\r
+\r
 static osTimerId_t g_ble_vibrator_timer;\r
 \r
 static osTimerId_t g_ble_acc_timer;\r
@@ -49,6 +76,8 @@ static uint8_t leaklight_flag = 0;
 static uint16_t cycle_time_ms = 200;\r
 static uint16_t duty = 20;\r
 \r
+static uint32_t aging_time = 0;\r
+\r
 static int CRC16_XMODEM(uint8_t *bytes,uint16_t length) {\r
     int crc = 0x0000;          // initial value\r
     int polynomial = 0x1021;\r
@@ -270,6 +299,185 @@ void ble_leaklight_check_timer_callback(void)
     leaklight_flag++;\r
 }\r
 \r
+void get_rtc(uint32_t *msc)\r
+{\r
+    char time_data[64] = {0};\r
+    uint8_t send_data1[20] = {0};\r
+    uint8_t send_data2[7] = {0};\r
+\r
+    uint8_t i = 0;\r
+    get_system_time(time_data);\r
+    uint8_t len = strlen(time_data);\r
+    //1970-01-01 00:00:26\r
+    PRINT("time_data : %s , len : %d\r\n",time_data,len);\r
+\r
+    for (int j = 0; j < len; j ++) \r
+    {\r
+        if(time_data[j] >= '0' && time_data[j] <= '9' ) \r
+        {\r
+            send_data1[i++] = (time_data[j] - '0');\r
+        }\r
+    }\r
+    \r
+    i = 0;\r
+    for(int j = 0; j < 14 ; j+=2)\r
+    {\r
+        send_data2[i++] = send_data1[j] * 10 + send_data1[j+1];\r
+    }\r
+\r
+    *msc = ((((send_data2[0] * 100 + send_data2[1] - 1970) * 365 \r
+    + (send_data2[2] -1)* 30 + (send_data2[3] - 1) ) * 24 \r
+    + send_data2[4]) * 60 + send_data2[5]) * 60 \r
+    + send_data2[6];\r
+\r
+}\r
+\r
+void aging_task(void)\r
+{\r
+    //while(aging_t.flag == 0xfdfd0002 && aging_time)\r
+    while(aging_t.flag == 0xfdfd0002)\r
+    {\r
+        msleep(60000);\r
+        \r
+        uint32_t msc;\r
+        get_rtc(&msc);\r
+        aging_t.enter_age_time = msc;\r
+        PRINT("aging_t.enter_age_time : %d \r\n",aging_t.enter_age_time);\r
+        aging_t.executions_num++;\r
+        PRINT("aging_t.executions_num : %d \r\n",aging_t.executions_num);\r
+        aging_t.target_num = msc/60;\r
+        PRINT("aging_t.target_num : %d \r\n",aging_t.target_num);\r
+        aging_t.fail_num = 0;\r
+        PRINT("aging_t.fail_num : %d \r\n",aging_t.fail_num);\r
+        aging_t.restart_num = 0;\r
+        PRINT("aging_t.restart_num : %d \r\n",aging_t.restart_num);\r
+\r
+        uint16_t before_block_num;\r
+        struct nand_driver_struct *nandflash_driver;\r
+        nandflash_driver = get_nand_flash();\r
+        for (uint32_t i = 0; i < nandflash_driver->total_block; i++) \r
+        {\r
+            if (nandflash_driver->check_bad_block(i) == 1) \r
+            {\r
+                before_block_num++;\r
+            }\r
+        }\r
+\r
+        uint32_t id;\r
+        lcd_getid(&id);\r
+        if(id != 0x1133)\r
+        {\r
+            aging_t.display_error++;\r
+            aging_t.fail_num++;\r
+        }\r
+        mcu_pm_lcd_on(0,0);\r
+        mcu_pm_lcd_off(0,0);\r
+        PRINT("aging_t.display_error : %d \r\n",aging_t.display_error);\r
+\r
+\r
+        ppg_send_cmd_to_driver("leaklight",1);\r
+        FT_RESULTS_t ft_result = hx3695_factroy_test(LEAK_LIGHT_TEST);\r
+        ppg_send_cmd_to_driver("leaklight",0);  \r
+        if(ft_result.gr_data_final < 10000 || ft_result.red_data_final < 10000 || ft_result.ir_data_final < 10000)\r
+        {\r
+            aging_t.ppg_error++;\r
+            aging_t.fail_num++;\r
+        }\r
+            \r
+        PRINT("aging_t.ppg_error : %d \r\n",aging_t.ppg_error);\r
+\r
+        uint16_t tp_id;\r
+        touch_getid(&tp_id);\r
+        if(tp_id != 0x6456)\r
+        {\r
+            aging_t.tp_error++;\r
+            aging_t.fail_num++;\r
+        }\r
+        PRINT("aging_t.tp_error : %d \r\n",aging_t.tp_error);\r
+\r
+        gsenson_t g;\r
+        get_gsonsen_xyz(&g);\r
+        if(g.x == 0 && g.y == 0 && g.z == 0)\r
+        {\r
+            aging_t.gsensor_error++;\r
+            aging_t.fail_num++;\r
+        }\r
+        PRINT("aging_t.gsensor_error : %d \r\n",aging_t.gsensor_error);\r
+\r
+        float fAzimuth,fPitch,fRoll;\r
+        mmc5603_getdata(&fAzimuth,&fPitch,&fRoll);\r
+        if(fAzimuth < 0)\r
+        {\r
+            aging_t.mag_error++;\r
+            aging_t.fail_num++;\r
+        }\r
+        PRINT("aging_t.mag_error : %d \r\n",aging_t.mag_error);\r
+\r
+        vibrator_cyclicity(20,200,2000);\r
+        aging_t.motor_error = 0;\r
+        PRINT("aging_t.motor_error : %d \r\n",aging_t.motor_error);\r
+\r
+        aging_t.speaker_error = 0;\r
+        PRINT("aging_t.speaker_error : %d \r\n",aging_t.speaker_error);\r
+\r
+        uint32_t flash_id;\r
+        flash_getid(&flash_id);\r
+        if(flash_id == 0)\r
+        {\r
+            aging_t.flash_res_error++;\r
+            aging_t.fail_num++;\r
+        }\r
+        PRINT("aging_t.flash_res_error : %d \r\n",aging_t.flash_res_error);\r
+\r
+        uint16_t after_block_num;\r
+        nandflash_driver = get_nand_flash();\r
+        for (uint32_t i = 0; i < nandflash_driver->total_block; i++) \r
+        {\r
+            if (nandflash_driver->check_bad_block(i) == 1) \r
+            {\r
+                after_block_num++;\r
+            }\r
+        }\r
+\r
+        aging_t.flash_bad_block_num = after_block_num - before_block_num;\r
+\r
+        get_rtc(&msc);\r
+        aging_t.age_time = msc;\r
+        PRINT("aging_t.age_time : %d \r\n",aging_t.age_time);\r
+        aging_time -= (aging_t.age_time - aging_t.enter_age_time);\r
+        PRINT("aging_time : %d \r\n",aging_time);\r
+        if(aging_time == 0)\r
+        {\r
+            aging_t.flag = 0xfdfd0000;\r
+            return;\r
+        }\r
+    }\r
+}\r
+\r
+errcode_t aging_test_init(void)\r
+{\r
+    app_task_definition_t taskcfg={0};\r
+    taskcfg.create_queue_handle = NULL;\r
+    taskcfg.attr.name="aging_test_service";\r
+    taskcfg.attr.priority = TASK_PRIORITY_CMD;\r
+    taskcfg.attr.stack_size =  1024*8;\r
+    taskcfg.func = aging_task;\r
+    taskcfg.use_mem = USE_EXTEND_MEM;\r
+\r
+    errcode_t ret=uapi_create_osThread_custom(&taskcfg);\r
+    if(ret != ERRCODE_SUCC)\r
+    {\r
+        PRINT("create ppg_service failed %d!\r\n",ret);\r
+        return ERRCODE_FAIL;\r
+    }\r
+\r
+    memset(&aging_t, 0, sizeof(ble_aging_t));\r
+    aging_t.flag = 0xfdfd0002;\r
+    \r
+    return ERRCODE_SUCC;\r
+}\r
+\r
+\r
 /**\r
  * BLE_TEST_CMD_MODE_COMMON\r
  * factorytest_protocol_common_decode\r
@@ -498,37 +706,9 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
             } else if(testitem == 0x02)\r
             {\r
                 //获取RTC\r
-                char time_data[64] = {0};\r
-                uint8_t send_data1[20] = {0};\r
-                uint8_t send_data2[7] = {0};\r
                 uint8_t time_stamp[5] = {0};\r
-\r
                 uint32_t msc = 0;\r
-\r
-                uint8_t i = 0;\r
-                get_system_time(time_data);\r
-                uint8_t len = strlen(time_data);\r
-                //1970-01-01 00:00:26\r
-                PRINT("time_data : %s , len : %d\r\n",time_data,len);\r
-\r
-                for (int j = 0; j < len; j ++) \r
-                {\r
-                    if(time_data[j] >= '0' && time_data[j] <= '9' ) \r
-                    {\r
-                        send_data1[i++] = (time_data[j] - '0');\r
-                    }\r
-                }\r
-                \r
-                i = 0;\r
-                for(int j = 0; j < 14 ; j+=2)\r
-                {\r
-                    send_data2[i++] = send_data1[j] * 10 + send_data1[j+1];\r
-                }\r
-\r
-                msc = ((((send_data2[0] * 100 + send_data2[1] - 1970) * 365 \r
-                + (send_data2[2] -1)* 30 + (send_data2[3] - 1) ) * 24 \r
-                + send_data2[4]) * 60 + send_data2[5]) * 60 \r
-                + send_data2[6];\r
+                get_rtc(&msc);\r
 \r
                 time_stamp[1] = (uint8_t)((msc & 0XFF000000) >> 24);\r
                 time_stamp[2] = (uint8_t)((msc & 0X00FF0000) >> 16);\r
@@ -557,8 +737,8 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
             {\r
                 //进入老化命令\r
                 uint8_t send_data = 0x00;\r
-\r
-                set_system_time((char *)data);\r
+                aging_time = (*data) * 60 * 60;\r
+                aging_test_init();\r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_AGING_TEST,\r
                         0x01,\r
@@ -569,7 +749,9 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                 //停止老化\r
                 uint8_t send_data = 0x00;\r
 \r
-                set_system_time((char *)data);\r
+                aging_t.flag = 0xfdfd0001;\r
+\r
+\r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_AGING_TEST,\r
                         0x02,\r
@@ -579,33 +761,35 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
             } else if(testitem == 0x03)\r
             {\r
                 //查询老化标志\r
-                uint8_t send_data = 0x00;\r
+                uint8_t send_data[3] = {0};\r
 \r
-                set_system_time((char *)data);\r
+                if(aging_t.fail_num != 0)\r
+                {\r
+                    send_data[1] = 0xff;\r
+                    send_data[2] = 0x01;\r
+                }\r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_AGING_TEST,\r
                         0x03,\r
-                        &send_data,\r
-                        1);\r
+                        send_data,\r
+                        3);\r
                 \r
             } else if(testitem == 0x04)\r
             {\r
                 //查询老化结果\r
-                uint8_t send_data = 0x00;\r
 \r
-                set_system_time((char *)data);\r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_AGING_TEST,\r
                         0x04,\r
-                        &send_data,\r
-                        1);\r
+                        &aging_t,\r
+                        sizeof(aging_t));\r
 \r
             } else if(testitem == 0x05)\r
             {\r
                 //清除老化结果\r
                 uint8_t send_data = 0x00;\r
 \r
-                set_system_time((char *)data);\r
+                memset(&aging_t, 0, sizeof(ble_aging_t));\r
                 factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
                         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_AGING_TEST,\r
                         0x05,\r
@@ -685,7 +869,6 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
             } else if(testitem == 0x02)\r
             {\r
                 //LCD 上电\r
-                mcu_pm_lcd_on(0,0);\r
                 uint8_t send_data = 0x00;\r
 \r
                 mcu_pm_lcd_on(0,0);\r
@@ -1096,41 +1279,89 @@ void factorytest_protocol_soft_test_decode(uint8_t submode,uint8_t testitem,uint
                         0x02,\r
                         &send_data,\r
                         1);\r
-\r
-\r
             } else if(testitem == 0x03)\r
             {\r
-                //查看sim卡插入状态(未完成)\r
-                // uint8_t send_data = 0x00;\r
-                // uint16_t len = sizeof(send_data);\r
-\r
-                // factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
-                //         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CAT1,\r
-                //         0x03,\r
-                //         &send_data,\r
-                //         len);\r
+                PRINT("111\r\n");\r
+                //查看sim卡插入状态\r
+                uint8_t send_data[2] = {0};\r
+                uint16_t len = sizeof(send_data);\r
+\r
+                cat1_getsignal();\r
+                char *tokbuf=NULL;\r
+                tokbuf=strtok(networkmsg,":");\r
+                if(strcmp(tokbuf,"imei")==0)\r
+                {\r
+                    tokbuf=strtok(NULL,",");\r
+                    tokbuf=strtok(NULL,":");\r
+                    tokbuf=strtok(NULL,",");\r
+                    send_data[1]=atoi(tokbuf);\r
+                    PRINT("sim status : %d \r\n",send_data[1]);\r
+                }\r
+\r
+                factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+                        BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CAT1,\r
+                        0x03,\r
+                        send_data,\r
+                        2);\r
             } else if(testitem == 0x04)\r
             {\r
-                //查看信号强度(未完成)\r
-                // uint8_t send_data = 0x00;\r
-                // uint16_t len = sizeof(send_data);\r
-\r
-                // factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
-                //         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CAT1,\r
-                //         0x04,\r
-                //         &send_data,\r
-                //         len);\r
+                //查看信号强度\r
+                uint8_t send_data[2] = {0};\r
+\r
+                cat1_getsignal();\r
+                char *tokbuf=NULL;\r
+                tokbuf=strtok(networkmsg,":");\r
+                if(strcmp(tokbuf,"imei")==0)\r
+                {\r
+                    tokbuf=strtok(NULL,",");\r
+                    tokbuf=strtok(NULL,":");\r
+                    tokbuf=strtok(NULL,",");\r
+                    tokbuf=strtok(NULL,"(");\r
+                    tokbuf=strtok(NULL,")");\r
+                    tokbuf=strtok(NULL,":");\r
+                    tokbuf=strtok(NULL,",");\r
+                    send_data[1]=atoi(tokbuf);\r
+                    PRINT("signal : %d \r\n",send_data[1]);\r
+                }\r
+\r
+\r
+                factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+                        BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CAT1,\r
+                        0x04,\r
+                        send_data,\r
+                        2);\r
             } else if(testitem == 0x05)\r
             {\r
-                //查看网络类型(未完成)\r
-                // uint8_t send_data = 0x00;\r
-                // uint16_t len = sizeof(send_data);\r
-\r
-                // factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
-                //         BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CAT1,\r
-                //         0x05,\r
-                //         &send_data,\r
-                //         len);\r
+                //查看网络类型\r
+                uint8_t send_data = 0x00;\r
+\r
+                cat1_getsignal();\r
+                char *tokbuf=NULL;\r
+                char *buf1=NULL;\r
+                char *buf2=NULL;\r
+\r
+                tokbuf=strtok(networkmsg,":");\r
+                if(strcmp(tokbuf,"imei")==0)\r
+                {\r
+                    //'CHN-CT', 'CT', '460', '11'\r
+                    tokbuf=strtok(NULL,",");\r
+                    tokbuf=strtok(NULL,":");\r
+                    tokbuf=strtok(NULL,",");\r
+                    tokbuf=strtok(NULL,"(");\r
+                    tokbuf=strtok(NULL,")");\r
+\r
+                    buf1=strtok(tokbuf+1,"-");\r
+                    buf2=strtok(NULL,"'");\r
+                    \r
+                    strcat(buf1,buf2);\r
+                    PRINT("send_buf : %s \r\n",buf1);\r
+                }\r
+\r
+                factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_SOFT_TEST,\r
+                        BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CAT1,\r
+                        0x05,\r
+                        (uint8_t *)buf1,\r
+                        5);\r
             } else if(testitem == 0x06)\r
             {\r
                 //拨打电话\r
index a68127b..136ea7f 100755 (executable)
@@ -2359,7 +2359,7 @@ static uint32_t mcu_get_time(uint8_t *para, uint32_t para_len)
 {\r
     unused(para);\r
     unused(para_len);\r
-    uint32_t timebuf;\r
+    char timebuf[64];\r
     return get_system_time(&timebuf);\r
 }\r
 \r
index 9bf5720..597d1ff 100755 (executable)
@@ -197,20 +197,20 @@ uint32_t get_system_time(char *timedata)
         wstp_print("%s", timebuf);
     }
 
-    //sprintf(timedata,"%s",timebuf);
+    sprintf(timedata,"%s",timebuf);
 
     uint32_t millisec = tv.tv_usec / USEC_TO_MILLI;
     wstp_print(":%03d\n", millisec);
 
-    char millisecdata[5] = {0};
-    millisecdata[0] = (char)((millisec & 0XFF000000)>> 24);
-    millisecdata[1] = (char)((millisec & 0X00FF0000)>> 16);
-    millisecdata[2] = (char)((millisec & 0X0000FF00)>> 8);
-    millisecdata[3] = (char)((millisec & 0X000000FF)>> 0);
+    // char millisecdata[4] = {0};
+    // millisecdata[0] = (char)((millisec & 0XFF000000)>> 24);
+    // millisecdata[1] = (char)((millisec & 0X00FF0000)>> 16);
+    // millisecdata[2] = (char)((millisec & 0X0000FF00)>> 8);
+    // millisecdata[3] = (char)((millisec & 0X000000FF)>> 0);
 
-    PRINT("mil %d %d %d %d \r\n",millisecdata[0],millisecdata[1],millisecdata[2],millisecdata[3]);
+    // PRINT("mil %d %d %d %d \r\n",millisecdata[0],millisecdata[1],millisecdata[2],millisecdata[3]);
 
-    sprintf(timedata,"%s%s",timebuf,millisecdata);
+    // sprintf(timedata,"%s%s",timebuf,millisecdata);
 
     return ERRCODE_SUCC;
 }
index 3032a0b..f672f39 100644 (file)
@@ -30,6 +30,8 @@ void cat1_reset_network(void);
 
 errcode_t cat1_server_init(void);
 
+extern char networkmsg[124];
+
 #ifdef __cplusplus
 #if __cplusplus
 }
index ae950c5..9548c9c 100644 (file)
@@ -769,7 +769,8 @@ void touch_getid(uint16_t *id)
         } else
         {
             PRINT("TOUCH CHIP ID = 0x%02x%02x \r\n",  chip_id[0], chip_id[1]);
-            sprintf(id,"0x%02x%02x",  chip_id[0], chip_id[1]);
+            *id = (chip_id[0] & 0XFF) << 8 | (chip_id[1] & 0XFF);
+            //sprintf(id,"0x%02x%02x",  chip_id[0], chip_id[1]);
         }
     }
 }