extern "C" {\r
#endif\r
\r
-#define MAX_UNWEAR_COUNT 30\r
+#define MAX_UNWEAR_COUNT 10\r
#define MAX_VALID_HRS_COUNT 60\r
#define MAX_DISVALID_HRS_COUNT 70\r
#define MIN_DISPLAY_HEART 60\r
heartstate = false;\r
// 复原检测状态\r
checkstate = HeartCheck::RESTSTSTE;\r
+ LOS_Msleep(500);\r
+ uapi_dev_runtime_set_hrs_passivity(0);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_dev_runtime_set_hrs_passivity(0)");\r
} else if (state == HeartState::Start && heartstate == false) {\r
/*充电状态下不进行检测*/\r
bool isCharging = get_charge_stat(); // 获取充电状态\r
send_ppg_cmd_msg(md);\r
heartstate = true;\r
checkstate = check;\r
+ //被动\r
+ if(checkstate==HeartCheck::PASSIVITY)\r
+ {\r
+ uapi_dev_runtime_set_hrs_passivity(1);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_dev_runtime_set_hrs_passivity(1)");\r
+ }\r
+ \r
}\r
}\r
// 开始检测\r
//设置抬腕功能
memset(&scl, 0, sizeof(scl));
scl.iData[0] = 1;
- scl.iData[1] = 6; //调小抬手反应范围
- scl.iData[2] = 5;
- scl.iData[3] = 5;
- scl.iData[4] = 6; //调小抬手反应范围
+ // scl.iData[1] = 5;
+ // scl.iData[2] = 5;
+ // scl.iData[3] = 5;
+ // scl.iData[4] = 5;
CWM_SettingControl(SCL_HAND_UPDOWN_CONFIG, &scl);
//配置跑步机模式相关参数(进入跑步机模式自动生效)
ppg_sensor_data_t ppg_s_data;\r
\r
static int cywee_data = 0;\r
-static int wear_status = -1;\r
+static int history_wear_status = -1;\r
+static int cywee_wear_status = 0;\r
\r
static uint8_t hx3695_chip_id = 0;\r
\r
\r
void hx3695_wearstatus_update(void)\r
{\r
- if(wear_status != hrsresult.wearstatus)\r
+ if(history_wear_status != cywee_wear_status)\r
{\r
- wear_status = hrsresult.wearstatus;\r
- cywee_data = wear_status;\r
+ history_wear_status = cywee_wear_status;\r
+ cywee_data = history_wear_status;\r
do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&cywee_data);\r
}\r
}\r
hrsresult.hr_living_std = alg_results.hr_result_std;\r
hrsresult.wearstatus = hrs_wear_status;\r
\r
- if(hrs_wear_status == MSG_HRS_WEAR && hrsresult.hr_living == MSG_LIVING_TRUE)\r
+ if(hrsresult.wearstatus == MSG_HRS_WEAR)\r
{\r
- if(hrsresult.lastesthrs > 30 && hrsresult.lastesthrs < 220)\r
- get_avg_hrs(hrsresult.lastesthrs);\r
-\r
- hrsresult.wearstatus = MSG_HRS_WEAR;\r
+ if(hrsresult.hr_living == MSG_LIVING_TRUE)\r
+ {\r
+ if(hrsresult.lastesthrs > 30 && hrsresult.lastesthrs < 220)\r
+ get_avg_hrs(hrsresult.lastesthrs);\r
+ cywee_wear_status = 1;\r
+ }\r
+ else\r
+ {\r
+ cywee_wear_status = 0;\r
+ }\r
}\r
else\r
{\r
hrsresult.wearstatus = MSG_HRS_NO_WEAR;\r
hrsresult.lastesthrs = 0;\r
+ cywee_wear_status = 0;\r
}\r
+ // PRINT("hrsresult.wearstatus : %d , cywee_wear_status : %d , hr_living : %d \n",hrsresult.wearstatus,cywee_wear_status,hrsresult.hr_living);\r
+ // if(hrs_wear_status == MSG_HRS_WEAR && hrsresult.hr_living == MSG_LIVING_TRUE)\r
+ // {\r
+ // if(hrsresult.lastesthrs > 30 && hrsresult.lastesthrs < 220)\r
+ // get_avg_hrs(hrsresult.lastesthrs);\r
+\r
+ // hrsresult.wearstatus = MSG_HRS_WEAR;\r
+ // }\r
+ // else\r
+ // {\r
+ // hrsresult.wearstatus = MSG_HRS_NO_WEAR;\r
+ // hrsresult.lastesthrs = 0;\r
+ // }\r
hx3695_msg_callback_t func = hx3695_get_send_msg_callback_func();\r
if(func != NULL)\r
{\r
hx3695_check_touch_read(&ppg_s_data);\r
hx3695_wear_status = hx3695_check_touch_send_data(ir_buf,*count);\r
// PRINT("hx3695_wear_status : %d \r\n",hx3695_wear_status);\r
- if(wear_status != hx3695_wear_status)\r
+ if(history_wear_status != hx3695_wear_status)\r
{\r
- wear_status = hx3695_wear_status;\r
- cywee_data = wear_status;\r
+ history_wear_status = hx3695_wear_status;\r
+ cywee_data = history_wear_status;\r
do_cywee_service_check_msg(CYWEE_SERVICE_CMD_WEAR_STATUS_CHANGE,&cywee_data);\r
}\r
\r
//do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OPEN_GET_ACC,NULL);
cmd = "hrs";
enable = 1;
- uapi_pm_add_sleep_veto(PM_ID_HEART);
+ uint8_t cnt = pm_veto_get_id_cnt(PM_ID_HEART);
+ if (cnt == 0)
+ {
+ uapi_pm_add_sleep_veto(PM_ID_HEART);
+ }
+
}else if (mail == PPG_SERVICE_CMD_TYPE_DO_HRV_TEST){
cmd = "hrv";
enable = 1;
wear_mode_state = 0;
}else if (mail == PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST){
//do_cywee_service_check_msg(CYWEE_SERVICE_CMD_CLOSE_GET_ACC,NULL);
- if(uapi_dev_runtime_get_sleep_monitoring_status())//处于睡眠监测 上报活体佩戴
+ //PRINT("uapi_dev_runtime_get_sleep_monitoring_status : %d \n",uapi_dev_runtime_get_sleep_monitoring_status());
+ //PRINT("uapi_dev_runtime_get_hrs_passivity_flag : %d \n",uapi_dev_runtime_get_hrs_passivity_flag());
+ if(uapi_dev_runtime_get_sleep_monitoring_status() && uapi_dev_runtime_get_hrs_passivity_flag())//处于睡眠监测 且在心率周期检测期间 上报活体佩戴
{
hx3695_wearstatus_update();
}
cmd = "hrs";
enable = 0;
- uapi_pm_remove_sleep_veto(PM_ID_HEART);
+ uint8_t cnt = pm_veto_get_id_cnt(PM_ID_HEART);
+ if (cnt == 1)
+ {
+ uapi_pm_remove_sleep_veto(PM_ID_HEART);
+ }
}else if (mail == PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST){
cmd = "spo2";
uint8_t absolute_static_state; // 绝对静止状态
uint8_t checkres_status;//校验文件状态
uint8_t repair_download_status;//升级下载状态
+ uint8_t hrs_passivity_status;//获取被动心率检测状态
} runtime_status_t;
uint8_t uapi_dev_runtime_get_safemode_flag(void)
{
return g_runtime.enter_safemode;
+}
+
+// 设置被动心率检测状态
+void uapi_dev_runtime_set_hrs_passivity(uint8_t status)
+{
+ g_runtime.hrs_passivity_status = status;
+}
+// 获取被动心率检测状态
+uint8_t uapi_dev_runtime_get_hrs_passivity_flag(void)
+{
+ return g_runtime.hrs_passivity_status;
}
\ No newline at end of file
// 安全模式
uint8_t uapi_dev_runtime_get_safemode_flag(void);
+
+void uapi_dev_runtime_set_hrs_passivity(uint8_t status);
+// 获取被动心率检测状态
+uint8_t uapi_dev_runtime_get_hrs_passivity_flag(void);
+
#ifdef __cplusplus
#if __cplusplus
}
errcode_t custom_i2c_read_regs(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *readData, int readDataSize, int busIndex)
{
-
- uapi_pm_add_sleep_veto(PM_ID_GSENSOR);
+ uint8_t cnt = pm_veto_get_id_cnt(PM_ID_GSENSOR);
+ if (cnt == 0)
+ {
+ uapi_pm_add_sleep_veto(PM_ID_GSENSOR);
+ }
errcode_t ret;
uint32_t retry;
osal_kfree(write_data);
error:
- uapi_pm_remove_sleep_veto(PM_ID_GSENSOR);
-
+ cnt = pm_veto_get_id_cnt(PM_ID_GSENSOR);
+ if (cnt == 1)
+ {
+ uapi_pm_remove_sleep_veto(PM_ID_GSENSOR);
+ }
+
return (ret>0) ? ret*-1: ret;
}
errcode_t custom_i2c_write_reg(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *writeData, int writeDataSize, int busIndex)
{
- uapi_pm_add_sleep_veto(PM_ID_GSENSOR);
+ uint8_t cnt = pm_veto_get_id_cnt(PM_ID_GSENSOR);
+ if (cnt == 0)
+ {
+ uapi_pm_add_sleep_veto(PM_ID_GSENSOR);
+ }
+
errcode_t ret;
uint32_t retry;
i2c_data_t data;
free_mem:
osal_kfree(write_data);
error:
- uapi_pm_remove_sleep_veto(PM_ID_GSENSOR);
+ cnt = pm_veto_get_id_cnt(PM_ID_GSENSOR);
+ if (cnt == 1)
+ {
+ uapi_pm_remove_sleep_veto(PM_ID_GSENSOR);
+ }
return (ret>0) ? ret*-1: ret;
}