#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
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
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
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
} 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
{\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
//停止老化\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
} 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
} 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
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