* @Author: penglei 1624952103@qq.com\r
* @Date: 2024-06-17 14:31:08\r
* @LastEditors: penglei 1624952103@qq.com\r
- * @LastEditTime: 2024-10-20 18:54:23\r
+ * @LastEditTime: 2024-10-22 16:21:43\r
* @FilePath: /FD230/code/sdk/application/wearable/service/factorytest_service/factorytest_protocol.c\r
* @Description: \r
* \r
\r
typedef struct\r
{\r
- uint8_t send_data;//填充字节\r
uint32_t flag; //老化测试状态 (完成 - 0xfdfd0000, 停止 - 0xfdfd0001, 开始-0xfdfd0002, 结束-0xfdfd0003)\r
+ uint32_t target_time; //目标时间\r
+ uint32_t left_time; //剩余时间\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 fail_num; //总失败次数\r
+ uint32_t display_error; //LCD失败次数\r
uint32_t tp_error; //tp失败次数\r
- uint32_t gsensor_error; //A+G sensor失败次数\r
+ uint32_t gsensor_error; //gsensor失败次数\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
+ uint32_t mag_error; //磁力计失败次数 \r
+ uint32_t motor_error; //马达失败次数 \r
+ uint32_t mic_error; //mic失败次数 \r
+ uint32_t speaker_error; //spk失败次数 \r
+ uint32_t charge_error; //充电失败次数 \r
}ble_aging_t;\r
\r
#pragma pack()\r
\r
static int factorytest_mode_flag = 0;\r
\r
-ble_aging_t aging_t;\r
+ble_aging_t aging_t = {0};\r
\r
static osTimerId_t g_ble_vibrator_timer = NULL;\r
\r
6);\r
}\r
\r
+\r
+ uint32_t executions_num;//执行次数 \r
+ uint32_t fail_num; //失败次数\r
+ uint32_t target_hour; //目标时间\r
+ uint32_t enter_age_time; //进入老化时间\r
+ uint32_t age_time; //每轮老化结束时间\r
+\r
+\r
void aging_task(void)\r
{\r
+ errcode_t ret = 0;\r
+ uint32_t enter_age_time = 0;\r
+ uint32_t exit_age_time = 0;\r
+ int cmd = 0;\r
while(aging_t.flag == 0xfdfd0002 && aging_time)\r
//while(aging_t.flag == 0xfdfd0002)\r
{\r
- int cmd = 0;\r
- uint32_t msc;\r
- uapi_get_timestampe_ss(&msc);\r
- aging_t.enter_age_time = msc;\r
- PRINT("aging_t.enter_age_time : %d \r\n",aging_t.enter_age_time);\r
+\r
+ uapi_get_timestampe_ss(&enter_age_time);\r
+ PRINT("老化目标时间 : %d \r\n",aging_t.target_time);\r
+ PRINT("老化剩余时间 : %d \r\n",aging_t.left_time);\r
+\r
+\r
+ \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 = 0;\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
+ PRINT("老化执行次数 : %d \r\n",aging_t.executions_num);\r
+ PRINT("总失败次数 : %d \r\n",aging_t.fail_num);\r
+\r
\r
/*********************LCD 老化测试*****************************/\r
\r
aging_t.display_error++;\r
aging_t.fail_num++;\r
}\r
- PRINT("aging_t.display_error : %d \r\n",aging_t.display_error);\r
+ PRINT("LCD 失败次数 : %d \r\n",aging_t.display_error);\r
\r
- //单色屏测试\r
+ //单色屏测试 2min\r
cmd = 1;\r
do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_LCD_TEST,&cmd,sizeof(cmd));\r
- for(cmd = 1; cmd < 6 ; cmd++)\r
+ for(cmd = 1; cmd < 120 ; cmd++)\r
{\r
do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_LCD_COLOR_TEST,&cmd,sizeof(cmd));\r
LOS_Msleep(1000);\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
+ PRINT("TP 失败次数 : %d \r\n",aging_t.tp_error);\r
\r
/********************* 马达 老化测试*****************************/\r
- //震6秒\r
- for(cmd = 0; cmd < 2 ; cmd++)\r
+ //2min 震2s 停2s\r
+ uint32_t total_time = 2 * 60;\r
+ uint32_t enter_time = 0;\r
+ uint32_t age_time = 0;\r
+ while(total_time)\r
{\r
- // ui_api_vibrate_once_func(3);\r
- ui_api_vibrate_once_func();\r
- LOS_Msleep(1000);\r
+ uapi_get_timestampe_ss(&enter_time);\r
+ custom_VibratorFunc_int(4);\r
+ LOS_Msleep(4000);\r
+ uapi_get_timestampe_ss(&age_time);\r
+ total_time -= (age_time - enter_time);\r
+ PRINT("total_time[%d]\n",total_time);\r
}\r
- PRINT("aging_t.motor_error : %d \r\n",aging_t.motor_error);\r
-/********************* spk 老化测试*****************************/\r
- uapi_check_spk(1);\r
- LOS_Msleep(2000);\r
- uapi_check_spk(0);\r
- aging_t.speaker_error = 0;\r
- PRINT("aging_t.speaker_error : %d \r\n",aging_t.speaker_error);\r
-/*********************ppg 老化测试*****************************/\r
- //漏光测试\r
- send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_GRAYCARD_TEST);\r
- FT_RESULTS_t ft_result = hx3695_factroy_test(LEAK_LIGHT_TEST);\r
- send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST);\r
- \r
- if(ft_result.gr_data_final > 5000 || ft_result.red_data_final > 5000 || ft_result.ir_data_final > 5000)\r
+ uapi_vibrator_test();\r
+ PRINT("马达失败次数 : %d \r\n",aging_t.motor_error);\r
+\r
+/********************* mic 老化测试*****************************/\r
+ ret = uapi_microhone_switch(1);\r
+ LOS_Msleep(2000 * 60);\r
+ ret = uapi_microhone_switch(0);\r
+ if(ret != 0)\r
{\r
- aging_t.ppg_error++;\r
+ aging_t.mic_error++;\r
aging_t.fail_num++;\r
}\r
- PRINT("aging_t.ppg_error : %d \r\n",aging_t.ppg_error);\r
-\r
-/*********************gsensor 老化测试*****************************/\r
- gsenson_t g;\r
- get_gsonsen_xyz(&g);\r
- if(g.x == 0 && g.y == 0 && g.z == 0)\r
+ PRINT("mic失败次数 : %d \r\n",aging_t.mic_error);\r
+/********************* spk 老化测试*****************************/\r
+ total_time = 2 * 60;\r
+ enter_time = 0;\r
+ age_time = 0;\r
+ while(total_time)\r
{\r
- aging_t.gsensor_error++;\r
- aging_t.fail_num++;\r
+ uapi_get_timestampe_ss(&enter_time);\r
+ uapi_check_spk(1);\r
+ LOS_Msleep(2000);\r
+ uapi_check_spk(0);\r
+ aging_t.speaker_error = 0;\r
+ uapi_get_timestampe_ss(&age_time);\r
+ total_time -= (age_time - enter_time);\r
+ PRINT("total_time[%d]\n",total_time);\r
}\r
- PRINT("aging_t.gsensor_error : %d \r\n",aging_t.gsensor_error);\r
+ PRINT("spk失败次数 : %d \r\n",aging_t.speaker_error);\r
+/*********************ppg 老化测试*****************************/\r
\r
-/*********************磁力计 老化测试*****************************/\r
- float fAzimuth,fPitch,fRoll;\r
- mmc5603_getdata(&fAzimuth,&fPitch,&fRoll);\r
- if(fAzimuth < 0)\r
+ total_time = 2 * 60;\r
+ enter_time = 0;\r
+ age_time = 0;\r
+ while(total_time)\r
{\r
- aging_t.mag_error++;\r
- aging_t.fail_num++;\r
+ uapi_get_timestampe_ss(&enter_time);\r
+ send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_SINGLE_CHECK_MODE_TEST);\r
+ LOS_Msleep(200);\r
+ FT_RESULTS_t ft_result = hx3695_factroy_test(SINGLE_CHECK_TEST);\r
+ send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST);\r
+ PRINT("ft_result.gr_data_final : %d , ft_result.red_data_final : %d , ft_result.ir_data_final : %d\r\n",ft_result.gr_data_final,ft_result.red_data_final,ft_result.ir_data_final);\r
+ uapi_get_timestampe_ss(&age_time);\r
+ total_time -= (age_time - enter_time);\r
+ PRINT("total_time[%d]\n",total_time);\r
}\r
- PRINT("aging_t.mag_error : %d \r\n",aging_t.mag_error);\r
\r
\r
- uint32_t flash_id;\r
- flash_getid(&flash_id);\r
- if(flash_id == 0)\r
+ // if(ft_result.gr_data_final > 5000 || ft_result.red_data_final > 5000 || ft_result.ir_data_final > 5000)\r
+ // {\r
+ // aging_t.ppg_error++;\r
+ // aging_t.fail_num++;\r
+ // }\r
+ // PRINT("aging_t.ppg_error : %d \r\n",aging_t.ppg_error);\r
+\r
+/*********************gsensor 老化测试*****************************/\r
+ gsenson_t g;\r
+ total_time = 2 * 60;\r
+ enter_time = 0;\r
+ age_time = 0;\r
+ while(total_time)\r
{\r
- aging_t.flash_res_error++;\r
- aging_t.fail_num++;\r
+ uapi_get_timestampe_ss(&enter_time);\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
+ uapi_get_timestampe_ss(&age_time);\r
+ total_time -= (age_time - enter_time);\r
+ PRINT("total_time[%d]\n",total_time);\r
+ LOS_Msleep(1000);\r
}\r
- PRINT("aging_t.flash_res_error : %d \r\n",aging_t.flash_res_error);\r
+ PRINT("gsensor失败次数 : %d \r\n",aging_t.gsensor_error);\r
\r
- uint16_t after_block_num = 0;\r
- nandflash_driver = get_nand_flash();\r
- for (uint32_t i = 0; i < nandflash_driver->total_block; i++) \r
+/*********************磁力计 老化测试*****************************/\r
+ float fAzimuth,fPitch,fRoll;\r
+\r
+ total_time = 2 * 60;\r
+ enter_time = 0;\r
+ age_time = 0;\r
+ while(total_time)\r
{\r
- if (nandflash_driver->check_bad_block(i) == 1) \r
+ uapi_get_timestampe_ss(&enter_time);\r
+ mmc5603_getdata(&fAzimuth,&fPitch,&fRoll);\r
+ if(fAzimuth < 0)\r
{\r
- after_block_num++;\r
+ aging_t.mag_error++;\r
+ aging_t.fail_num++;\r
}\r
+ uapi_get_timestampe_ss(&age_time);\r
+ total_time -= (age_time - enter_time);\r
+ PRINT("total_time[%d]\n",total_time);\r
+ LOS_Msleep(1000);\r
}\r
\r
- aging_t.flash_bad_block_num = after_block_num - before_block_num;\r
+ PRINT("磁力计失败次数 : %d \r\n",aging_t.mag_error);\r
\r
- uapi_get_timestampe_ss(&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
+ uapi_get_timestampe_ss(&exit_age_time);\r
+ aging_time -= (exit_age_time - enter_age_time);\r
if(aging_time == 0)\r
{\r
aging_t.flag = 0xfdfd0000;\r
return;\r
}\r
- msleep(60000);\r
}\r
}\r
\r
factorytest_mode_flag = 1;\r
ChargerEventPublish(TOPIC_EVENT_CHARGE_UNPLUG,0); //进入产测模式 关闭充电弹窗\r
uapi_dev_runtime_set_factory_test_status(1); //设置产测模式runtime\r
+ svr_ble_adv_factory_test_start_param(); //设置蓝牙广播 避免出现连接问题\r
factorytest_protocol_replymsg(BLE_TEST_CMD_MODE_COMMON,\r
BLE_TEST_CMD_COMMON_SUB_MODE_SWITCH_MODE,\r
0x01,\r
{\r
//进入老化命令\r
uint8_t send_data = 0x00;\r
- aging_time = (*data) * 60 * 60;\r
+ aging_t.target_time = 6 * 60 * 60; //老化时间6小时\r
+ aging_time = aging_t.target_time;\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
static char day[12] = {0};
static char dir_path[64] = {0};
+static uint8_t ephemeral_flag = 0; //临时数据
+
+static uint8_t wear_status = 0;//佩戴状态
#ifdef CYWEE_MAC_ACTIVE
int cm__hs1__mac_c1_init(void);
void cywee_save_sleep_time_data(cywee_inactivity_accumulate_time_t sleep_time)
{
- uint8_t flag = 0; //临时数据标志
-
if (access(time_file_path, 0) == -1)
{
memset(time_file_path, 0, sizeof(time_file_path));
if (wake_up_timestamp == 0)
{
uapi_get_timestampe_ss(&wake_up_timestamp);
- flag = 1;
}
fwrite(&wake_up_timestamp, 1, 4, fp);
total_time_minute = (total_wake_time % 60);
fwrite(&total_time_minute, 1, 1, fp);
-
- CWM_OS_dbgPrintf("total_time[%d], total_deep_sleep_time[%d], total_mild_sleep_time[%d], total_rem_sleep_time[%d], total_wake_time[%d] \n",
- total_time,total_deep_sleep_time,total_mild_sleep_time,total_rem_sleep_time,total_wake_time);
fclose(fp);
- if (flag) // 临时数据清掉
+ if (ephemeral_flag) // 临时数据清掉
{
- total_deep_sleep_time -= sleep_time.total_deep_sleep_time;
- total_mild_sleep_time -= sleep_time.total_mild_sleep_time;
- total_rem_sleep_time -= sleep_time.total_rem_sleep_time;
+ total_deep_sleep_time -= sleep_time.total_deep_sleep_time;
+ total_mild_sleep_time -= sleep_time.total_mild_sleep_time;
+ total_rem_sleep_time -= sleep_time.total_rem_sleep_time;
+ ephemeral_flag = 0;
}
+
+ CWM_OS_dbgPrintf("wake_up_timestamp : %d ,fall_asleep_timestamp : %d \n",wake_up_timestamp,fall_asleep_timestamp);
+ CWM_OS_dbgPrintf("total_time[%d], total_deep_sleep_time[%d], total_mild_sleep_time[%d], total_rem_sleep_time[%d], total_wake_time[%d] \n",
+ total_time,total_deep_sleep_time,total_mild_sleep_time,total_rem_sleep_time,total_wake_time);
+
+
}
void cywee_save_sleep_stat_data(void)
void cywee_wearstatus_update(int wearstatus)
{
#if 1
+ uapi_dev_runtime_set_wear_status(wearstatus);
memset(&csd, 0, sizeof(CUSTOM_OFFBODY_DETECT));
csd.sensorType = CUSTOM_OFFBODY_DETECT;
csd.fData[0] = wearstatus;
// sleep_flag_t.stat = c_inactivity_result_t.status;
// // uapi_save_sleep_flag(&sleep_flag_t,sizeof(SLEEP_FLAG_T));
// }
-
+ CWM_OS_dbgPrintf("c_inactivity_result_t.status : %d \n", c_inactivity_result_t.status);
//0进入睡眠 1潜睡 2深睡 3清醒 4结束睡眠 6入睡 7出睡最后一笔输出 9未出睡最后一笔输出 12快速动眼 13取消入睡
if(c_inactivity_result_t.status >= 6 && c_inactivity_result_t.status <= 9)
{
uapi_dev_runtime_set_sleep_status(1);
uapi_get_timestampe_ss(&asleep_timestampe);
}
+ else if(c_inactivity_result_t.status == 9)
+ {
+ ephemeral_flag = 1; //临时数据
+ }
break; //只要是通知都不发消息,直接退出
}
else if(c_inactivity_result_t.status == 4 || c_inactivity_result_t.status == 13)