if(nv_data_length != UI_NV_Read_Req(NV_SECTION_UI_HEALTH_MEASURE, 0, nv_data_length, (uint8_t *)&s_health_measure_timed_data))
{
HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: nv read fail\n", __FUNCTION__, __LINE__);
+ _lv_memset_00(&s_health_measure_timed_data, nv_data_length);
}
//_lv_ll_clear(&s_health_measure_timed_ll);
return true;
}
-void mmi_health_measure_send_heart(void)
+void mmi_health_measure_send_heart(void * param)
{
- uint16_t heart_value = s_health_measure_run_data.heart_value;
+ uint16_t heart_value = ((mmi_health_measure_msg_param_t *)param)->heart_value;
if(0 == heart_value)
{
mmi_health_info_set(&health_info);
}
-void mmi_health_measure_send_temperature(void)
+void mmi_health_measure_send_temperature(void * param)
{
- float body_value = s_health_measure_run_data.body_value;
+ float body_value = ((mmi_health_measure_msg_param_t *)param)->body_value;
if(0.0 == body_value)
{
mmi_health_info_set(&health_info);
}
-void mmi_health_measure_send_blood(void)
+void mmi_health_measure_send_blood(void * param)
{
- uint16_t blood_high_value = s_health_measure_run_data.blood_high_value;
- uint16_t blood_low_value = s_health_measure_run_data.blood_low_value;
+ 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)
{
mmi_health_info_set(&health_info);
}
-void mmi_health_measure_send_spo2(void)
+void mmi_health_measure_send_spo2(void * param)
{
- uint16_t spo2_value = s_health_measure_run_data.spo2_value;
+ uint16_t spo2_value = ((mmi_health_measure_msg_param_t *)param)->spo2_value;
if(0 == spo2_value)
{
mmi_health_measure_process_timer_stop();
mmi_health_measure_timed_list_node_remove(s_health_measure_run_data.measure_type);
+ mmi_health_measure_msg_param_t * param = NULL;
+
switch(s_health_measure_run_data.measure_type)
{
case MMI_HEALTH_MEASURE_HEART:
#ifdef __MMI_CUSTOM_HENGAI_TCMS__
mmi_hengai_tcms_action();
#endif
- mmi_health_measure_send_heart();
+
+ param = Hal_Mem_Alloc(sizeof(mmi_health_measure_msg_param_t));
+ if(NULL != param)
+ {
+ Hal_Mem_Set(param, 0x0, sizeof(mmi_health_measure_msg_param_t));
+ param->heart_value = s_health_measure_run_data.heart_value;
+
+ mmi_health_measure_task_msg_send(MMI_HEALTH_MEASURE_MSG_HEART_FINISHED, param);
+ }
break;
case MMI_HEALTH_MEASURE_TEMPERATURE:
#ifdef __MMI_CUSTOM_HENGAI_TCMS__
mmi_hengai_tcms_action();
#endif
- mmi_health_measure_send_temperature();
+
+ param = Hal_Mem_Alloc(sizeof(mmi_health_measure_msg_param_t));
+ if(NULL != param)
+ {
+ Hal_Mem_Set(param, 0x0, sizeof(mmi_health_measure_msg_param_t));
+ param->body_value = s_health_measure_run_data.body_value;
+
+ mmi_health_measure_task_msg_send(MMI_HEALTH_MEASURE_MSG_TEMPERATURE_FINISHED, param);
+ }
break;
case MMI_HEALTH_MEASURE_BLOOD:
+
+ #ifdef __MMI_CUSTOM_HENGAI_HEALTH__
+ mmi_health_measure_task_msg_send(MMI_HEALTH_MEASURE_MSG_BLOOD_FINISHED, NULL);
+ #else
mmi_hsensor_close();
#ifdef __MMI_CUSTOM_HENGAI_TCMS__
mmi_hengai_tcms_action();
#endif
- #ifdef __MMI_CUSTOM_HENGAI_HEALTH__
- mmi_hengai_bp_back_measure_finish();
- #else
- mmi_health_measure_send_blood();
- #endif
+
+ param = Hal_Mem_Alloc(sizeof(mmi_health_measure_msg_param_t));
+ if(NULL != param)
+ {
+ Hal_Mem_Set(param, 0x0, sizeof(mmi_health_measure_msg_param_t));
+ param->blood_high_value = s_health_measure_run_data.blood_high_value;
+ param->blood_low_value = s_health_measure_run_data.blood_low_value;
+
+ mmi_health_measure_task_msg_send(MMI_HEALTH_MEASURE_MSG_BLOOD_FINISHED, param);
+ }
+ #endif
break;
case MMI_HEALTH_MEASURE_SPO2:
#ifdef __MMI_CUSTOM_HENGAI_TCMS__
mmi_hengai_tcms_action();
#endif
- mmi_health_measure_send_spo2();
+
+ param = Hal_Mem_Alloc(sizeof(mmi_health_measure_msg_param_t));
+ if(NULL != param)
+ {
+ Hal_Mem_Set(param, 0x0, sizeof(mmi_health_measure_msg_param_t));
+ param->spo2_value = s_health_measure_run_data.spo2_value;
+
+ mmi_health_measure_task_msg_send(MMI_HEALTH_MEASURE_MSG_SPO2_FINISHED, param);
+ }
break;
default:
mmi_health_measure_interrupt();
}
}
+
+
+
+#define MMI_HEALTH_MEASURE_TASK_PRIORITY 221
+#define MMI_HEALTH_MEASURE_TASK_STACK_SIZE (8 * 1024)
+#define MMI_HEALTH_MEASURE_MSG_QUEUE_SIZE (16)
+
+TASK_HANDLE * s_health_measure_task_id = NULL;
+
+
+void mmi_health_measure_task_msg_send(MMI_HEALTH_MEASURE_MSG_ID_E msg_id, void * param)
+{
+ if(NULL == s_health_measure_task_id)
+ {
+ HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: task not exist\n",__FUNCTION__,__LINE__);
+ if(NULL != param)
+ Hal_Mem_Free(param);
+
+ return;
+ }
+
+ if((MMI_HEALTH_MEASURE_MSG_QUEUE_SIZE - 1) < Hal_Get_Message_Count(s_health_measure_task_id))
+ {
+ HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg queue full\n",__FUNCTION__,__LINE__);
+ if(NULL != param)
+ Hal_Mem_Free(param);
+
+ return;
+ }
+
+ HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n",__FUNCTION__,__LINE__, msg_id);
+ mmi_health_measure_task_msg_t * msg = Hal_Mem_Alloc(sizeof(mmi_health_measure_task_msg_t));
+ msg->msg_id = msg_id;
+ msg->msg_param = param;
+
+ Hal_Send_Message((TASK_ID)s_health_measure_task_id, (void *)msg);
+}
+
+static void mmi_health_measure_task_handle(void * param)
+{
+ mmi_health_measure_task_msg_t * msg = (mmi_health_measure_task_msg_t *)param;
+ MMI_HEALTH_MEASURE_MSG_ID_E msg_id = msg->msg_id;
+ void * msg_param = msg->msg_param;
+
+ 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_FINISHED:
+ mmi_health_measure_send_heart(msg_param);
+ break;
+
+ case MMI_HEALTH_MEASURE_MSG_TEMPERATURE_FINISHED:
+ mmi_health_measure_send_temperature(msg_param);
+ break;
+
+ case MMI_HEALTH_MEASURE_MSG_BLOOD_FINISHED:
+ #ifdef __MMI_CUSTOM_HENGAI_HEALTH__
+ mmi_hengai_bp_back_measure_finish();
+ mmi_hsensor_close();
+ #ifdef __MMI_CUSTOM_HENGAI_TCMS__
+ mmi_hengai_tcms_action();
+ #endif
+
+ #else
+ mmi_health_measure_send_blood(msg_param);
+ #endif
+ break;
+
+ case MMI_HEALTH_MEASURE_MSG_SPO2_FINISHED:
+ mmi_health_measure_send_spo2(msg_param);
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void mmi_health_measure_task_entry(void * para)
+{
+ while(NULL == s_health_measure_task_id)
+ {
+ uos_sleep(10);
+ }
+
+ while(1)
+ {
+ mmi_health_measure_task_msg_t * msg = (mmi_health_measure_task_msg_t *)Hal_Receive_Message((TASK_ID)s_health_measure_task_id, TRUE);
+
+ mmi_health_measure_task_handle(msg);
+
+ Hal_Mem_Free(msg->msg_param);
+ Hal_Mem_Free(msg);
+ }
+}
+
+void mmi_health_measure_task_init(void)
+{
+ s_health_measure_task_id = uos_create_task(mmi_health_measure_task_entry,
+ NULL,
+ MMI_HEALTH_MEASURE_MSG_QUEUE_SIZE,
+ MMI_HEALTH_MEASURE_TASK_STACK_SIZE,
+ MMI_HEALTH_MEASURE_TASK_PRIORITY,
+ "mmi_health_measure_task");
+
+ HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: task_id=0x%x\n",__FUNCTION__,__LINE__, s_health_measure_task_id);
+}
+
+
#endif