#define MAX_UNWARE_COUNT 10
#define MAX_VALID_SPO2_COUNT 30
-#define MAX_DISVALID_SPO2_COUNT 100
+#define MAX_DISVALID_SPO2_COUNT 60
#define BLOOD_TIMER_DATA 1
namespace OHOS {
{
if(!timeout)
{
+ // printf("cywee_restart_acc\n");
cywee_restart_acc();
}
else
// cywee_func(CYWEE_MSG_TYPE_ACTIVITY_EXTRA_INFO_UPDATE,&c_act_ext_result_t,sizeof(act_ext_result_t));
//CustomEventPublish(TOPIC_EVENT_ACTIVITY_EXTRA_INFO_UPDATE, &c_act_ext_result_t, sizeof(act_ext_result_t));
+ // CWM_OS_dbgPrintf("PAH:avg_step_freq[%d], avg_step_len[%f],avg_pace[%d], max_step_freq[%d], max_pace[%d]\n",
+ // c_act_ext_result_t.avg_step_freq, c_act_ext_result_t.avg_step_len, c_act_ext_result_t.avg_pace,
+ // c_act_ext_result_t.max_step_freq,c_act_ext_result_t.max_pace);
}else if((int)sensorEVT->fData[0] == 5001)
{
// cywee_func(CYWEE_MSG_TYPE_ACTIVITY_UPDATE,&c_act_result_t,sizeof(act_result_t));
//CustomEventPublish(TOPIC_EVENT_ACTIVITY_UPDATE, &c_act_result_t, sizeof(act_result_t));
//CustomEventPublish(TOPIC_EVENT_STEPDATA_UPDATE,&stepcount,sizeof(int));
- // CWM_OS_dbgPrintf("normal mode activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%.2f], pace[%d]\n",
+ // CWM_OS_dbgPrintf("PAH:normal mode activit_mode[%d], steps[%d], distance[%d], calories[%d], step frequency[%d], step length[%.2f], pace[%d]\n",
// c_act_result_t.activity_mode, c_act_result_t.steps, c_act_result_t.distance, c_act_result_t.calories,
// c_act_result_t.step_frequency,c_act_result_t.step_length, c_act_result_t.pace);
}
{
if(data == NULL)
return;
- memcpy_s(data,sizeof(act_ext_result_t),&c_act_result_t,sizeof(act_ext_result_t));
+ memcpy_s(data,sizeof(act_ext_result_t),&c_act_ext_result_t,sizeof(act_ext_result_t));
}
//uint8_t alg_ram[10] = {0};\r
ppg_sensor_data_t ppg_s_data;\r
\r
-static uint8_t hrs_result = 0;\r
static int history_wear_status = -1;\r
static uint8_t wear_status = 0;\r
static uint8_t spo2_result = 0;\r
#endif\r
}\r
\r
+#define HRS_WINDOW_SIZE 5\r
static uint8_t hrs_num = 0;\r
static int32_t sum_hrs = 0;\r
static int32_t hrs_data[7] = {0};\r
static uint8_t left = 0;\r
-static uint8_t right = -1;\r
+static uint8_t right = 0;\r
+static uint8_t avg_hrs = 0;\r
\r
-static void get_avg_hrs(int32_t hrs)\r
+static void get_avg_hrs(uint8_t hrs)\r
{\r
- int32_t min_hrs = 0;\r
- int32_t max_hrs = 0;\r
- int32_t avg_hrs = 0;\r
- if(hrs_num == 7)\r
- {\r
+\r
+\r
+ if (hrs_num >= HRS_WINDOW_SIZE) {\r
sum_hrs -= hrs_data[left];\r
- hrs_data[left] = 0;\r
- left++;\r
- left = left % 7;\r
+ left = (left + 1) % HRS_WINDOW_SIZE;\r
hrs_num--;\r
}\r
\r
+ hrs_data[right] = hrs;\r
+ sum_hrs += hrs;\r
+ right = (right + 1) % HRS_WINDOW_SIZE;\r
hrs_num++;\r
- right++;\r
- right = right % 7;\r
\r
- hrs_data[right] = hrs;\r
- sum_hrs += hrs_data[right]; \r
\r
- if(hrs_num > 2)\r
+ if (hrs_num > 2) \r
{\r
- min_hrs = hrs_data[0];\r
- max_hrs = hrs_data[0];\r
- for (int i = 0;i < hrs_num; i++)\r
- {\r
- if (hrs_data[i] < min_hrs)\r
- min_hrs = hrs_data[i];\r
- if (hrs_data[i] > max_hrs)\r
- max_hrs = hrs_data[i];\r
+\r
+ uint8_t first_idx = left;\r
+ int32_t min_hrs = hrs_data[first_idx];\r
+ int32_t max_hrs = hrs_data[first_idx];\r
+\r
+\r
+ for (uint8_t i = 0; i < hrs_num; i++) {\r
+ uint8_t current_idx = (left + i) % HRS_WINDOW_SIZE;\r
+ uint8_t current_hrs = hrs_data[current_idx];\r
+\r
+ if (current_hrs < min_hrs) {\r
+ min_hrs = current_hrs;\r
+ }\r
+ if (current_hrs > max_hrs) {\r
+ max_hrs = current_hrs;\r
+ }\r
}\r
- avg_hrs = (sum_hrs - max_hrs - min_hrs) / (hrs_num - 2);\r
- //PRINT("max_hrs[%d],min_hrs[%d],avg_hrs[%d]\n",max_hrs,min_hrs,avg_hrs);\r
- hrsresult.lastesthrs = avg_hrs;\r
+\r
+ uint8_t valid_count = hrs_num - 2;\r
+ avg_hrs = (sum_hrs - max_hrs - min_hrs) / valid_count;\r
+\r
+ // printf("max_hrs[%d],min_hrs[%d],avg_hrs[%d]\n",max_hrs,min_hrs,avg_hrs);\r
}\r
}\r
\r
+\r
uint8_t hx3695_get_hrs(void)\r
{\r
- return hrs_result;\r
+ return avg_hrs;\r
}\r
\r
uint8_t hx3695_get_spo2(void)\r
{\r
wear_status = 0;\r
hx3695_wearstatus_update();\r
- hrs_result = 0;\r
+ avg_hrs = 0;\r
\r
}\r
} \r
// }\r
\r
// PRINT("hrs : %d , wear_status : %d \n",hrsresult.lastesthrs,wear_status);\r
- hrs_result = hrsresult.lastesthrs;\r
+ avg_hrs = hrsresult.lastesthrs;\r
\r
msg_count++;\r
if(msg_count >= 3)\r
#ifdef SUPPORT_PPG_BLE_SERVICE\r
if(uapi_dev_runtime_get_hrs_ble_status())\r
{\r
- ble_ppgtest_server_send_input_report(&hrs_result,1);\r
+ ble_ppgtest_server_send_input_report(&avg_hrs,1);\r
}\r
#endif\r
\r
if(uapi_dev_runtime_get_train_status())\r
{\r
hx3695_wearstatus_update();\r
- // hrs_result = hrsresult.lastesthrs;\r
+ // avg_hrs = hrsresult.lastesthrs;\r
// do_cywee_service_check_msg(CYWEE_SERVICE_CMD_HRS_CHANGE,&cywee_data);\r
}\r
}\r
hx3695_wearstatus_update(); \r
uapi_dev_runtime_set_hrs_passivity(0);//清除被动检测runtime \r
}\r
+\r
+ hrs_num = 0;\r
+ sum_hrs = 0;\r
+ memset(hrs_data,0,7);\r
+\r
+ left = 0;\r
+ right = 0;\r
+ avg_hrs = 0;\r
+ wear_cnt = 0;\r
#endif\r
}else if(md == HRV_MODE)\r
{\r
#ifdef SUPPORT_PPG_BLE_SERVICE\r
#include "ppgBleService.h"\r
#endif\r
+\r
+#define HRS_WINDOW_SIZE 5\r
//============================================================================\r
// Static Global Variable\r
//============================================================================\r
\r
static uint8_t time_cnt = 0;\r
static uint8_t wear_cnt = 0;\r
-static uint8_t wear_cnt = 0;\r
\r
static int history_wear_status = -1;\r
\r
static int32_t sum_hrs = 0;\r
static int8_t hrs_data[7] = {0};\r
static uint8_t left = 0;\r
-static uint8_t right = -1;\r
+static uint8_t right = 0;\r
static uint8_t avg_hrs = 0;\r
\r
static uint8_t timeout = 0;\r
memset(hrs_data,0,7);\r
\r
left = 0;\r
- right = -1;\r
+ right = 0;\r
avg_hrs = 0;\r
wear_cnt = 0;\r
}\r
\r
static void get_avg_hrs(uint8_t hrs)\r
{\r
- int32_t min_hrs = 0;\r
- int32_t max_hrs = 0;\r
- if(hrs_num == 5)\r
- {\r
+\r
+\r
+ if (hrs_num >= HRS_WINDOW_SIZE) {\r
sum_hrs -= hrs_data[left];\r
- hrs_data[left] = 0;\r
- left++;\r
- left = left % 5;\r
+ left = (left + 1) % HRS_WINDOW_SIZE;\r
hrs_num--;\r
}\r
\r
+ hrs_data[right] = hrs;\r
+ sum_hrs += hrs;\r
+ right = (right + 1) % HRS_WINDOW_SIZE;\r
hrs_num++;\r
- right++;\r
- right = right % 5;\r
\r
- hrs_data[right] = hrs;\r
- sum_hrs += hrs_data[right]; \r
\r
- if(hrs_num > 2)\r
+ if (hrs_num > 2) \r
{\r
- min_hrs = hrs_data[0];\r
- max_hrs = hrs_data[0];\r
- for (int i = 0;i < hrs_num; i++)\r
- {\r
- if (hrs_data[i] < min_hrs)\r
- min_hrs = hrs_data[i];\r
- if (hrs_data[i] > max_hrs)\r
- max_hrs = hrs_data[i];\r
+\r
+ uint8_t first_idx = left;\r
+ int32_t min_hrs = hrs_data[first_idx];\r
+ int32_t max_hrs = hrs_data[first_idx];\r
+\r
+\r
+ for (uint8_t i = 0; i < hrs_num; i++) {\r
+ uint8_t current_idx = (left + i) % HRS_WINDOW_SIZE;\r
+ uint8_t current_hrs = hrs_data[current_idx];\r
+\r
+ if (current_hrs < min_hrs) {\r
+ min_hrs = current_hrs;\r
+ }\r
+ if (current_hrs > max_hrs) {\r
+ max_hrs = current_hrs;\r
+ }\r
}\r
- avg_hrs = (sum_hrs - max_hrs - min_hrs) / (hrs_num - 2);\r
+\r
+ uint8_t valid_count = hrs_num - 2;\r
+ avg_hrs = (sum_hrs - max_hrs - min_hrs) / valid_count;\r
+\r
// printf("max_hrs[%d],min_hrs[%d],avg_hrs[%d]\n",max_hrs,min_hrs,avg_hrs);\r
}\r
}\r
\r
+\r
void hr_alg_task(void)\r
{\r
if(Check_alg_enable())\r
#ifdef SUPPORT_PPG_SERVICE\r
time_cnt++;\r
\r
- if(time_cnt > 13)\r
- {\r
-#ifdef SUPPORT_CYWEE_SERVICE\r
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_CHECK_ACC, NULL); // 检查gsensor是否停止\r
-#endif\r
- }\r
+// if(time_cnt > 15)\r
+// {\r
+// #ifdef SUPPORT_CYWEE_SERVICE\r
+// do_cywee_service_check_msg(CYWEE_SERVICE_CMD_CHECK_ACC, NULL); // 检查gsensor是否停止\r
+// #endif\r
+// }\r
\r
\r
if(time_cnt >= 20) \r
{\r
+ time_cnt = 0;\r
// ppg_msg_callback_t func = ppg_get_send_msg_callback_func();\r
-\r
+#ifdef SUPPORT_CYWEE_SERVICE\r
+ // if(uapi_dev_runtime_get_train_status())\r
+ {\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_CHECK_ACC, NULL); // 检查gsensor是否停止\r
+ }\r
+#endif\r
uint8_t data = (uint8_t)hr;\r
\r
if(data > 30 && data < 220)\r
\r
// data = cywee_wear_status;\r
// func(PPG_MSG_TYPE_WEARSTAT_UPDATE, &data, 1);\r
- time_cnt = 0;\r
\r
#ifdef SUPPORT_PPG_BLE_SERVICE\r
if(uapi_dev_runtime_get_hrs_ble_status())\r
}\r
#endif\r
\r
-#ifdef SUPPORT_CYWEE_SERVICE\r
- // if(uapi_dev_runtime_get_train_status())\r
- {\r
- do_cywee_service_check_msg(CYWEE_SERVICE_CMD_CHECK_ACC, NULL); // 检查gsensor是否停止\r
- }\r
-#endif\r
}\r
\r
\r
#ifdef SUPPORT_PPG_SERVICE\r
time_cnt++;\r
\r
+ if(time_cnt >= 20) \r
+ {\r
+ time_cnt = 0;\r
+ // ppg_msg_callback_t func = ppg_get_send_msg_callback_func();\r
+#ifdef SUPPORT_CYWEE_SERVICE\r
+ // if(uapi_dev_runtime_get_train_status())\r
+ {\r
+ do_cywee_service_check_msg(CYWEE_SERVICE_CMD_CHECK_ACC, NULL); // 检查gsensor是否停止\r
+ }\r
+#endif\r
+ }\r
// ppg_msg_callback_t func = ppg_get_send_msg_callback_func();\r
\r
// if(func != NULL && time_cnt >= 25)\r
ppg_mems_data.duration = duration;\r
\r
ppg_mems_data.ppg_data = ppg_data ;\r
- ppg_mems_data.touch_flag = touch_flag ;\r
+\r
+ ppg_mems_data.touch_flag = history_wear_status ;\r
ppg_mems_data.ppg_frame_count = _main.ppg_frame_count; //SD-revise-20200320\r
- \r
+ \r
pah_push(&ppg_mems_data);\r
\r
#ifdef PPG_MEMS_Synchronize \r
\r
if (_main.is_Auto_mode || _main.touch_is_enabled)//SD-reivse-20191205\r
{\r
- if ( _main.touch_last_is_touched != touch_flag)\r
+ if ( _main.touch_last_is_touched != history_wear_status)\r
{\r
- _main.touch_last_is_touched = touch_flag; \r
+ _main.touch_last_is_touched = history_wear_status; \r
\r
- report_touch_data(timestamp, &touch_flag);\r
+ report_touch_data(timestamp, &history_wear_status);\r
\r
- bool is_touched = (touch_flag >= 1);\r
+ bool is_touched = (history_wear_status >= 1);\r
\r
if (_main.is_Auto_mode && is_touched)//SD-revise-20191205\r
{ \r
\r
void pah8009_check_int(void)\r
{\r
- if(work_mode != 1)\r
+ if(work_mode > 3 || work_mode < 1)\r
{\r
- // printf("work_mode != 1\n");\r
return;\r
}\r
\r