//#define __MMI_CUSTOM_HENGAI_SLEEP__
#define __MMI_CUSTOM_HENGAI_SLEEP_K18__
+#define __MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__
#endif
printf("fr8012haq_parse_returned_data:bp_data:%d",s_FR8012HAQ_blood_data_len);
return s_FR8012HAQ_blood_data;
}
+
+#if 1 // defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+// for micro health checkup feather
+void mmi_hengai_micro_health_checkup_data_len_reset(int reset_len)
+{
+ if(s_FR8012HAQ_blood_data_len < reset_len)
+ s_FR8012HAQ_blood_data_len = 0;
+ else
+ s_FR8012HAQ_blood_data_len -= reset_len;
+}
+#endif
+
//获取1分钟情绪数据,返回数据数组,已封装好string,可当参数返回给服务器,len:长度返回
char *fr8012haq_emo_data_get(int *len)
{
void FR8012HAQ_close(void);
void fr8012haq_measure_stop(void);
int *fr8012haq_blood_data_get(int *len);
+#if 1 // defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+// for micro health checkup feather
+void mmi_hengai_micro_health_checkup_data_len_reset(int reset_len);
+#endif
char* fr8012haq_YYL_data_get(int *yyl_data_len);
uint8_t fr8012haq_is_measure_YYL_mode(void);
uint8_t fr8012haq_is_not_measure_mode(void);
}
+#if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+
+#define MICRO_CHECKUP_COUNT_INTERVAL (2)//(3) // 3s
+#define MICRO_PPG_DATA_SINGLE_SEND_COUNT (MMI_HENGAI_BP_RAW_DATA_SAMPLE_RATE * MICRO_CHECKUP_COUNT_INTERVAL)
+#define MICRO_PPG_DATA_BUFFER_LEN ((MICRO_PPG_DATA_SINGLE_SEND_COUNT + 10) * sizeof(int))
+
+static int * s_hengai_ppg_data_ptr = NULL;
+static int s_hengai_ppg_data_len = 0;
+static uint8_t s_hengai_micro_checkup_count = 0;
+
+static void mmi_hengai_micro_health_checkup_data_send(void)
+{
+ uint16_t i = 0;
+ char * data_ptr = NULL;
+ uint32_t data_len = MICRO_PPG_DATA_BUFFER_LEN * 11;
+
+ if(NULL == s_hengai_ppg_data_ptr || 0 == s_hengai_ppg_data_len)
+ {
+ HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return;
+ }
+
+ data_ptr = lv_mem_alloc(data_len);
+ if(NULL == data_ptr)
+ {
+ HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__);
+ return;
+ }
+ _lv_memset_00(data_ptr, data_len);
+
+ data_len = sprintf(data_ptr, "%d,", s_hengai_ppg_data_len);
+
+ for(i = 0; i < s_hengai_ppg_data_len - 1; i++)
+ {
+ data_len += sprintf(data_ptr + data_len, "%d,", s_hengai_ppg_data_ptr[i]);
+ }
+ data_len += sprintf(data_ptr + data_len, "%d", s_hengai_ppg_data_ptr[i]);
+
+ cplog_printf("[@CHENG_DEBUG][%s][%d]: s_hengai_ppg_data_len=%d,data_len=%d\n", __FUNCTION__, __LINE__, s_hengai_ppg_data_len, data_len);
+
+ mmi_protocol_fzd_action_ppg_data(data_ptr, data_len);
+ if(NULL != data_ptr)
+ {
+ lv_mem_free(data_ptr);
+ data_ptr = NULL;
+ }
+}
+
+static void mmi_hengai_micro_health_checkup_data_get(void)
+{
+ if(NULL == s_hengai_ppg_data_ptr)
+ {
+ HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory empty\n", __FUNCTION__, __LINE__);
+ return;
+ }
+ _lv_memset_00(s_hengai_ppg_data_ptr, MICRO_PPG_DATA_BUFFER_LEN);
+ s_hengai_ppg_data_len = 0;
+
+ int * total_data = fr8012haq_blood_data_get(&s_hengai_ppg_data_len);
+ if(NULL != total_data && 0 != s_hengai_ppg_data_len)
+ {
+ if(MICRO_PPG_DATA_SINGLE_SEND_COUNT < s_hengai_ppg_data_len)
+ s_hengai_ppg_data_len = MICRO_PPG_DATA_SINGLE_SEND_COUNT;
+
+ _lv_memcpy(s_hengai_ppg_data_ptr, total_data, sizeof(int) * s_hengai_ppg_data_len);
+ mmi_hengai_micro_health_checkup_data_len_reset(s_hengai_ppg_data_len);
+ }
+}
+
+void mmi_hengai_micro_health_checkup_process(void)
+{
+ s_hengai_micro_checkup_count++;
+ if(MICRO_CHECKUP_COUNT_INTERVAL <= s_hengai_micro_checkup_count)
+ {
+ s_hengai_micro_checkup_count = 0;
+ mmi_hengai_micro_health_checkup_data_get();
+ mmi_hengai_micro_health_checkup_data_send();
+ }
+}
+
+void mmi_hengai_micro_health_checkup_stop(void)
+{
+ cplog_printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ if(NULL != s_hengai_ppg_data_ptr)
+ {
+ lv_mem_free(s_hengai_ppg_data_ptr);
+ s_hengai_ppg_data_ptr = NULL;
+ }
+
+ s_hengai_ppg_data_len = 0;
+ s_hengai_micro_checkup_count = 0;
+}
+
+void mmi_hengai_micro_health_checkup_start(void)
+{
+ cplog_printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ if(NULL != s_hengai_ppg_data_ptr)
+ {
+ lv_mem_free(s_hengai_ppg_data_ptr);
+ s_hengai_ppg_data_ptr = NULL;
+ }
+ s_hengai_ppg_data_ptr = (int *)lv_mem_alloc(MICRO_PPG_DATA_BUFFER_LEN);
+ if(NULL == s_hengai_ppg_data_ptr)
+ {
+ HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__);
+ return;
+ }
+ _lv_memset_00(s_hengai_ppg_data_ptr, MICRO_PPG_DATA_BUFFER_LEN);
+
+ s_hengai_ppg_data_len = 0;
+ s_hengai_micro_checkup_count = 0;
+}
+
+void mmi_hengai_micro_health_checkup_set(uint8_t state_value)
+{
+ if(0 == state_value)
+ mmi_health_measure_interrupt();
+ else
+ mmi_health_measure_server_set_action(MMI_HEALTH_MEASURE_MICRO_CHECKUP, 1);
+}
+#endif
+
#endif
void mmi_heng_ai_blood_pressure_create_event_cb(lv_obj_t * btn, lv_event_t e);
+#if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+void mmi_hengai_mirco_health_checkup_start(void);
+void mmi_hengai_micro_health_checkup_stop(void);
+void mmi_hengai_micro_health_checkup_process(void);
+void mmi_hengai_micro_health_checkup_set(uint8_t state_value);
+#endif
+
#endif
#ifdef __cplusplus
static lv_ll_t s_health_measure_timed_ll = {0};
static lv_health_measure_run_t s_health_measure_run_data = {0};
static void * s_health_measure_process_timer_id = NULL;
-static uint8_t s_measure_time_total = 0, s_measure_time_count = 0;
+static uint16_t s_measure_time_total = 0, s_measure_time_count = 0;
static uint32_t s_health_measure_heart_timed_time_stamp = 0;
static uint32_t s_health_measure_temperature_timed_time_stamp = 0;
static uint32_t s_health_measure_blood_timed_time_stamp = 0;
void mmi_health_measure_send_heart(void * param)
{
+ if(NULL == param)
+ {
+ HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return;
+ }
+
uint16_t heart_value = ((mmi_health_measure_msg_param_t *)param)->heart_value;
-
if(0 == heart_value)
{
HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
void mmi_health_measure_send_temperature(void * param)
{
+ if(NULL == param)
+ {
+ HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return;
+ }
+
float body_value = ((mmi_health_measure_msg_param_t *)param)->body_value;
-
if(0.0 == body_value)
{
HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
void mmi_health_measure_send_blood(void * param)
{
+ if(NULL == param)
+ {
+ HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return;
+ }
+
uint16_t blood_high_value = ((mmi_health_measure_msg_param_t *)param)->blood_high_value;
uint16_t blood_low_value = ((mmi_health_measure_msg_param_t *)param)->blood_low_value;
-
if(0 == blood_high_value || 0 == blood_low_value)
{
HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
void mmi_health_measure_send_spo2(void * param)
{
+ if(NULL == param)
+ {
+ HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return;
+ }
+
uint16_t spo2_value = ((mmi_health_measure_msg_param_t *)param)->spo2_value;
-
if(0 == spo2_value)
{
HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
mmi_health_measure_task_msg_send(MMI_HEALTH_MEASURE_MSG_SPO2_FINISHED, param);
}
break;
+
+ #if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+ case MMI_HEALTH_MEASURE_MICRO_CHECKUP:
+ mmi_health_measure_task_msg_send(MMI_HEALTH_MEASURE_MSG_MICRO_CHECKUP_FINISHED, param);
+ break;
+ #endif
default:
break;
switch(s_health_measure_run_data.measure_type)
{
case MMI_HEALTH_MEASURE_HEART:
- mmi_health_measure_heart_data_process(&(s_health_measure_run_data.heart_value));
+ mmi_health_measure_task_msg_send(MMI_HEALTH_MEASURE_MSG_HEART_PROCESS, NULL);
break;
case MMI_HEALTH_MEASURE_TEMPERATURE:
- mmi_health_measure_temperature_data_process(&(s_health_measure_run_data.body_value), &(s_health_measure_run_data.wrist_value));
+ mmi_health_measure_task_msg_send(MMI_HEALTH_MEASURE_MSG_TEMPERATURE_PROCESS, NULL);
break;
case MMI_HEALTH_MEASURE_BLOOD:
- mmi_health_measure_blood_data_process(&(s_health_measure_run_data.blood_high_value), &(s_health_measure_run_data.blood_low_value));
+ mmi_health_measure_task_msg_send(MMI_HEALTH_MEASURE_MSG_BLOOD_PROCESS, NULL);
break;
case MMI_HEALTH_MEASURE_SPO2:
- mmi_health_measure_spo2_data_process(&(s_health_measure_run_data.spo2_value));
+ mmi_health_measure_task_msg_send(MMI_HEALTH_MEASURE_MSG_SPO2_PROCESS, NULL);
break;
+ #if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+ case MMI_HEALTH_MEASURE_MICRO_CHECKUP:
+ mmi_health_measure_task_msg_send(MMI_HEALTH_MEASURE_MSG_MICRO_CHECKUP_PROCESS, NULL);
+ break;
+ #endif
+
default:
break;
}
-
- uos_timer_stop(s_health_measure_process_timer_id);
- uos_timer_start(s_health_measure_process_timer_id, MS_TO_TICKS(MMI_HEALTH_MEASURE_CYCLE_DURATION), 0, mmi_health_measure_process_timer_handle, NULL);
}
}
mmi_hengai_tcms_action();
#endif
break;
+
+ #if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+ case MMI_HEALTH_MEASURE_MICRO_CHECKUP:
+ mmi_hsensor_close();
+ mmi_hengai_micro_health_checkup_stop();
+ break;
+ #endif
default:
break;
mmi_hsensor_spo2_open();
break;
+ #if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+ case MMI_HEALTH_MEASURE_MICRO_CHECKUP:
+ s_measure_time_total = 0xffff;
+ mmi_hsensor_blood_open();
+ mmi_hengai_micro_health_checkup_start();
+ break;
+ #endif
+
default:
break;
}
mmi_health_measure_process_timer_stop();
uos_timer_create(&s_health_measure_process_timer_id);
- uos_timer_start(s_health_measure_process_timer_id, MS_TO_TICKS(MMI_HEALTH_MEASURE_CYCLE_DURATION), 0, mmi_health_measure_process_timer_handle, NULL);
+ uos_timer_start(s_health_measure_process_timer_id,
+ MS_TO_TICKS(MMI_HEALTH_MEASURE_CYCLE_DURATION),
+ MS_TO_TICKS(MMI_HEALTH_MEASURE_CYCLE_DURATION),
+ mmi_health_measure_process_timer_handle,
+ NULL);
}
bool mmi_health_measure_timed_measure_start(MMI_HEALTH_MEASURE_TYPE_E measure_type)
HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n",__FUNCTION__,__LINE__, msg_id);
switch(msg_id)
{
+ case MMI_HEALTH_MEASURE_MSG_HEART_PROCESS:
+ mmi_health_measure_heart_data_process(&(s_health_measure_run_data.heart_value));
+ break;
+
+ case MMI_HEALTH_MEASURE_MSG_TEMPERATURE_PROCESS:
+ mmi_health_measure_temperature_data_process(&(s_health_measure_run_data.body_value), &(s_health_measure_run_data.wrist_value));
+ break;
+
+ case MMI_HEALTH_MEASURE_MSG_BLOOD_PROCESS:
+ mmi_health_measure_blood_data_process(&(s_health_measure_run_data.blood_high_value), &(s_health_measure_run_data.blood_low_value));
+ break;
+
+ case MMI_HEALTH_MEASURE_MSG_SPO2_PROCESS:
+ mmi_health_measure_spo2_data_process(&(s_health_measure_run_data.spo2_value));
+ break;
+
case MMI_HEALTH_MEASURE_MSG_HEART_FINISHED:
mmi_health_measure_send_heart(msg_param);
break;
mmi_health_measure_send_spo2(msg_param);
break;
+ #if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+ case MMI_HEALTH_MEASURE_MSG_MICRO_CHECKUP_PROCESS:
+ mmi_hengai_micro_health_checkup_process();
+ break;
+
+ case MMI_HEALTH_MEASURE_MSG_MICRO_CHECKUP_FINISHED:
+ mmi_hsensor_close();
+ mmi_hengai_micro_health_checkup_stop();
+ break;
+ #endif
+
default:
break;
}
MMI_HEALTH_MEASURE_TEMPERATURE,
MMI_HEALTH_MEASURE_BLOOD,
MMI_HEALTH_MEASURE_SPO2,
+#if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+ MMI_HEALTH_MEASURE_MICRO_CHECKUP,
+#endif
MMI_HEALTH_MEASURE_MAX,
}MMI_HEALTH_MEASURE_TYPE_E;
{
MMI_HEALTH_MEASURE_MSG_ID_START,
+ MMI_HEALTH_MEASURE_MSG_HEART_PROCESS,
MMI_HEALTH_MEASURE_MSG_HEART_FINISHED,
+
+ MMI_HEALTH_MEASURE_MSG_TEMPERATURE_PROCESS,
MMI_HEALTH_MEASURE_MSG_TEMPERATURE_FINISHED,
+
+ MMI_HEALTH_MEASURE_MSG_BLOOD_PROCESS,
MMI_HEALTH_MEASURE_MSG_BLOOD_FINISHED,
+
+ MMI_HEALTH_MEASURE_MSG_SPO2_PROCESS,
MMI_HEALTH_MEASURE_MSG_SPO2_FINISHED,
+#if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+ MMI_HEALTH_MEASURE_MSG_MICRO_CHECKUP_PROCESS,
+ MMI_HEALTH_MEASURE_MSG_MICRO_CHECKUP_FINISHED,
+#endif
+
MMI_HEALTH_MEASURE_MSG_ID_END
}MMI_HEALTH_MEASURE_MSG_ID_E;
{
uos_timer_stop(s_login_timer_id);
uos_timer_delete(s_login_timer_id);
+ s_login_timer_id = NULL;
}
}
return result;
}
+bool mmi_protocol_fzd_parse_SERVER_PPG_TEST(unsigned char * next_buff, unsigned int next_buff_len)
+{
+ bool result = false;
+ MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_SERVER_PPG_TEST;
+
+ if(NULL == next_buff || 0 == next_buff_len)
+ {
+ PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return false;
+ }
+
+ result = true;
+ mmi_protocol_fzd_send_without_data(action);
+
+ uint8_t state_value = 0;
+ state_value = atoi(next_buff);
+
+ PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+#if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+ mmi_hengai_micro_health_checkup_set(state_value);
+#endif
+
+ return result;
+}
+
+bool mmi_protocol_fzd_action_ppg_data(char * data_ptr, uint32_t data_len)
+{
+ bool result = false;
+ MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_ACTION_PPG_DATA;
+ unsigned char * content_buff = NULL;
+ unsigned int content_lenth = 0;
+
+ content_buff = (unsigned char *)lv_mem_alloc(data_len + 2);
+ if(NULL == content_buff)
+ {
+ PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return false;
+ }
+ _lv_memset_00(content_buff, data_len + 2);
+ sprintf(content_buff, ",");
+ _lv_memcpy(content_buff + 1, data_ptr, data_len);
+ content_lenth = strlen(content_buff);
+
+ result = mmi_protocol_fzd_send_with_data(action, content_buff, content_lenth);
+ lv_mem_free(content_buff);
+
+ return result;
+}
+
#endif
#ifdef __MMI_CUSTOM_HENGAI_SLEEP__
MMI_FZD_ACTION_HENGAI_ACTIVATION,
MMI_FZD_ACTION_HENGAI_ACTIVATION_FEEDBACK,
-#endif
-#if defined(__MMI_CUSTOM_HENGAI_SLEEP__)
MMI_FZD_ACTION_HENGAI_SLEEP_DATA,
#endif
#ifdef __hengai_sleep_test__
MMI_FZD_ACTION_TCP_HTTP,
MMI_FZD_ACTION_SEND_ICCID,
MMI_FZD_ACTION_SLEEP_DATA,
+ MMI_FZD_SERVER_PPG_TEST,
+ MMI_FZD_ACTION_PPG_DATA,
MMI_FZD_SERVER_SET_BOOTOFF,
MMI_FZD_SEND_UP_REMIND,
bool mmi_protocol_fzd_action_hengai_activation(char * req_code);
bool mmi_protocol_fzd_parse_ACTION_HENGAI_ACTIVATION(unsigned char * next_buff, unsigned int next_buff_len);
bool mmi_protocol_fzd_action_hengai_activation_feedback(void);
-#endif
-#if defined(__MMI_CUSTOM_HENGAI_SLEEP__)
bool mmi_protocol_fzd_action_hengai_sleep_data(char * file_buf, uint32_t file_size);
#endif
#ifdef __MMI_CUSTOM_HENGAI_TCMS__
bool mmi_protocol_fzd_action_send_iccid(void);
bool mmi_protocol_fzd_action_sleep_data(char * data_ptr, uint32_t data_len);
+bool mmi_protocol_fzd_parse_SERVER_PPG_TEST(unsigned char * next_buff, unsigned int next_buff_len);
+bool mmi_protocol_fzd_action_ppg_data(char * data_ptr, uint32_t data_len);
#endif
{MMI_FZD_ACTION_TCP_HTTP, "TCP_HTTP"},
{MMI_FZD_ACTION_SEND_ICCID, "ICCID"},
{MMI_FZD_ACTION_SLEEP_DATA, "SLEEP_DATA"},
+ {MMI_FZD_SERVER_PPG_TEST, "PPG"},
+ {MMI_FZD_ACTION_PPG_DATA, "PPG_DATA"},
{MMI_FZD_SERVER_SET_BOOTOFF, "BOOTOFF"},
{MMI_FZD_SEND_UP_REMIND, "UP_REMIND"},
break;
case MMI_FZD_ACTION_SEND_ICCID:
+ case MMI_FZD_ACTION_SLEEP_DATA:
+ case MMI_FZD_ACTION_PPG_DATA:
break;
- case MMI_FZD_ACTION_SLEEP_DATA:
+ case MMI_FZD_SERVER_PPG_TEST:
+ mmi_protocol_fzd_parse_SERVER_PPG_TEST(next_buff, next_buff_len);
break;
case MMI_FZD_SERVER_SET_BOOTOFF: