gengxin
author@CHENG <2393524978@qq.com>
Sat, 11 May 2024 01:42:58 +0000 (09:42 +0800)
committer@CHENG <2393524978@qq.com>
Sat, 11 May 2024 01:42:58 +0000 (09:42 +0800)
12 files changed:
2.sdk/sdk/gui/lv_watch/framework/language/lang_ch.c
2.sdk/sdk/gui/lv_watch/framework/language/lang_en.c
2.sdk/sdk/gui/lv_watch/include/ui_textid.h
2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_atrial_fibrillation.c
2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_atrial_fibrillation.h
2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_heart_rate.c
2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.c
2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.h
2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_spo2.c
2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_temperature.c
2.sdk/sdk/gui/lv_watch/mmi_sundry/mmi_common_task.c [new file with mode: 0644]
2.sdk/sdk/gui/lv_watch/mmi_sundry/mmi_common_task.h [new file with mode: 0644]

index b8e3bf5..510940f 100644 (file)
@@ -968,6 +968,11 @@ const void * lang_text_ch[] = {
     "目标步数", // WATCH_TEXT_ID_GOAL_STEP,
     "我需要你的帮助!", // WATCH_TEXT_ID_SOS_SMS_HELP_CONTENT,
     "确保设备联网\n点击获取APP二维码", // WATCH_TEXT_ID_APP_QRCODE_REFRESH,
+    "爱体检", // WATCH_TEXT_ID_PHYSICAL_EXAMINATION,
+    "房颤检测", // WATCH_TEXT_ID_ATRIAL_FIBRILLATION,
+    "有房颤风险", // WATCH_TEXT_ID_ATRIAL_FIBRILLATION_RISK,
+    "无房颤风险", // WATCH_TEXT_ID_ATRIAL_FIBRILLATION_NO_RISK,
+    "请重新测量", // WATCH_TEXT_ID_IN_MEASURE_AGAIN,
     //CHENG_MODIFY
     "确认是否跌倒?", // WATCH_TEXT_ID_falldown,
     "确认是否删除",
index 5d678ff..4435250 100644 (file)
@@ -969,6 +969,11 @@ const void * lang_text_en[] = {
     "Goal steps", // WATCH_TEXT_ID_GOAL_STEP,
     "I NEED YOUR HELP!", // WATCH_TEXT_ID_SOS_SMS_HELP_CONTENT,
     "Click to get qrcode", // WATCH_TEXT_ID_APP_QRCODE_REFRESH,
+    "Physical examination" , // WATCH_TEXT_ID_PHYSICAL_EXAMINATION,
+    "Atrial fibrillation", // WATCH_TEXT_ID_ATRIAL_FIBRILLATION,
+    "With risk", // WATCH_TEXT_ID_ATRIAL_FIBRILLATION_RISK,
+    "No risk", // WATCH_TEXT_ID_ATRIAL_FIBRILLATION_NO_RISK,
+    "Please try again", // WATCH_TEXT_ID_IN_MEASURE_AGAIN,
     //CHENG_MODIFY
     "Confirm a fall",
     "Confirm deletion",
index f1b6abf..9d69c09 100644 (file)
@@ -976,6 +976,11 @@ enum
     WATCH_TEXT_ID_GOAL_STEP,                            /* "目标步数"                      "Goal steps" */
     WATCH_TEXT_ID_SOS_SMS_HELP_CONTENT,                 /* "我需要你的帮助!"                      "I NEED YOUR HELP!" */
     WATCH_TEXT_ID_APP_QRCODE_REFRESH,                   /* "确保设备联网\n点击获取APP二维码"        "Click to get qrcode" */
+    WATCH_TEXT_ID_PHYSICAL_EXAMINATION,                 /* "爱体检"       "Physical examination" */
+    WATCH_TEXT_ID_ATRIAL_FIBRILLATION,                  /* "房颤检测"       "Atrial fibrillation" */
+    WATCH_TEXT_ID_ATRIAL_FIBRILLATION_RISK,             /* "有房颤风险"       "With risk" */
+    WATCH_TEXT_ID_ATRIAL_FIBRILLATION_NO_RISK,          /* "无房颤风险"       "No risk" */
+    WATCH_TEXT_ID_IN_MEASURE_AGAIN,                     /* "请重新测量"       "Please try again" */
     //CHENG_MODIFY
     WATCH_TEXT_ID_FALLDWON,                            /*确认是否跌倒*/
     WATCH_TEXT_ID_CONFIRM_DELETE,                        /*确认是否删除*/
index ff3feb4..5b652ad 100644 (file)
@@ -37,16 +37,12 @@ void health_atrial_fibrillation_display_update(void)
                        lv_obj_set_hidden(ext->img, TRUE);
 
                        lv_label_set_text_id(ext->label_info, WATCH_TEXT_ID_MEASURING);
-                       lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_INFO_Y);
-
-                       lv_label_set_text(ext->label_value, ext->heart_rate);
-                       lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y-10);
-                       lv_obj_set_hidden(ext->label_value, ((strlen(ext->heart_rate)) ? FALSE : TRUE));
-
-                       lv_label_set_text(ext->label_value_blood, ext->blood_low_high);
-                       lv_obj_align(ext->label_value_blood, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y+10);
-                       lv_obj_set_hidden(ext->label_value_blood,  TRUE);
+                       lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, ATRIAL_FIBRILLATION_LABEL_INFO_Y);
 
+                       //lv_label_set_text(ext->label_value, ext->heart_rate);
+                       //lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, ATRIAL_FIBRILLATION_LABEL_VALUE_Y - 10);
+                       //lv_obj_set_hidden(ext->label_value, ((strlen(ext->heart_rate)) ? FALSE : TRUE));
+                       lv_obj_set_hidden(ext->label_value, TRUE);
                        break;
 
                case STATE_ATRIAL_FIBRILLATION_MEASURE_FAIL:
@@ -54,12 +50,12 @@ void health_atrial_fibrillation_display_update(void)
                        lv_obj_set_hidden(ext->img, FALSE);
 
                        lv_label_set_text_id(ext->label_info, WATCH_TEXT_ID_MEASURE_FAIL);
-                       lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_INFO_Y);
+                       lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, ATRIAL_FIBRILLATION_LABEL_INFO_Y);
 
                        lv_obj_remove_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font40);
                        lv_obj_add_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font30);
                        lv_label_set_text_id(ext->label_value, WATCH_TEXT_ID_NOT_WEAR);
-                       lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y);
+                       lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, ATRIAL_FIBRILLATION_LABEL_VALUE_Y);
                        lv_obj_set_hidden(ext->label_value, FALSE);
                        break;
 
@@ -68,28 +64,27 @@ void health_atrial_fibrillation_display_update(void)
                        lv_obj_set_hidden(ext->img, FALSE);
 
                        lv_label_set_text_id(ext->label_info, WATCH_TEXT_ID_MEASURE_DONE);
-                       lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_INFO_Y);
+                       lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, ATRIAL_FIBRILLATION_LABEL_INFO_Y);
 
-                       lv_label_set_text(ext->label_value, ext->heart_rate);
-                       lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y-10);
+                       lv_obj_remove_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font40);
+                       lv_obj_add_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font30);
+                       lv_label_set_text_id(ext->label_value, ((120 <= ext->heart_rate) ? WATCH_TEXT_ID_ATRIAL_FIBRILLATION_RISK : WATCH_TEXT_ID_ATRIAL_FIBRILLATION_NO_RISK));
+                       lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, ATRIAL_FIBRILLATION_LABEL_VALUE_Y);
                        lv_obj_set_hidden(ext->label_value, FALSE);
+                       break;
 
-                       uint16_t blood_high_value = 0, blood_low_value = 0;
-                       mmi_hsensor_blood_value_get(&blood_high_value,&blood_low_value);
-                       //HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d/%d\n", __FUNCTION__, __LINE__, blood_low_value, blood_low_value);
-                       
-                       sprintf(ext->blood_low_high, "%d / %d mmHg", blood_high_value, blood_low_value);
-
-                       mmi_protocol_action_send_blood(blood_high_value, blood_low_value);
-
-                       lv_label_set_text(ext->label_value_blood, ext->blood_low_high);
-               #ifdef USE_LV_WATCH_UI_240_280
-                       lv_obj_align(ext->label_value_blood, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y + 30);
-               #else
-                       lv_obj_align(ext->label_value_blood, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y+10);
-               #endif
-                       lv_obj_set_hidden(ext->label_value_blood, FALSE);
-                       
+               case STATE_ATRIAL_FIBRILLATION_MEASURE_NONE:
+                       lv_img_set_src(ext->img, ICON_HEART_RATE_MEASURE_FAIL);
+                       lv_obj_set_hidden(ext->img, FALSE);
+
+                       lv_label_set_text_id(ext->label_info, WATCH_TEXT_ID_MEASURE_FAIL);
+                       lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, ATRIAL_FIBRILLATION_LABEL_INFO_Y);
+
+                       lv_obj_remove_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font40);
+                       lv_obj_add_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font30);
+                       lv_label_set_text_id(ext->label_value, WATCH_TEXT_ID_IN_MEASURE_AGAIN);
+                       lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, ATRIAL_FIBRILLATION_LABEL_VALUE_Y);
+                       lv_obj_set_hidden(ext->label_value, FALSE);
                        break;
  
                default:  
@@ -134,18 +129,8 @@ static void health_atrial_fibrillation_measure_cycle_timeout(void * para)
                                
                                mmi_health_measure_heart_data_ui_get(&value);
                                if(MMI_HEART_RATE_VALUE_MIN <= value) // (value)
-                               {
-                                       sprintf(ext->heart_rate, "%d bpm", value);
-                               }
-                               // uint16_t blood_high_value = 0;
-                               // uint16_t blood_low_value = 0;
-                               // mmi_hsensor_blood_value_get(&blood_high_value,&blood_low_value);
-                               // sprintf(ext->blood_low_high, "%d / %d mmhg", blood_low_value,blood_high_value);
-                       
-                               //else
-                               //{
-                               //      sprintf(ext->heart_rate, "-- bpm");
-                               //}
+                                       ext->heart_rate = value;
+                               
                                ext->measure_state = STATE_ATRIAL_FIBRILLATION_MEASURING;
                        }
                        else
@@ -161,7 +146,12 @@ static void health_atrial_fibrillation_measure_cycle_timeout(void * para)
                                        ext->gif_info = NULL;
                                }
                                lv_obj_del(ext->gif_cont);
-                               ext->measure_state = STATE_ATRIAL_FIBRILLATION_MEASURE_DONE;
+
+                               if(0 == ext->heart_rate)
+                                       ext->measure_state = STATE_ATRIAL_FIBRILLATION_MEASURE_NONE;
+                               else
+                                       ext->measure_state = STATE_ATRIAL_FIBRILLATION_MEASURE_DONE;
+                               
                                watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_ATRIAL_FIBRILLATION, 0);
                                watch_wakeup_time_reset();
                        }
@@ -234,7 +224,7 @@ lv_obj_t * health_atrial_fibrillation_create(lv_obj_t * activity_obj)
        ext->img = NULL;
        ext->gif_cont = NULL;
        ext->measure_state = STATE_ATRIAL_FIBRILLATION_MEASURE_NONE;
-       _lv_memset_00(ext->heart_rate, sizeof(ext->heart_rate));
+       ext->heart_rate = 0;
 
        lv_obj_t * cont = lv_cont_create(watch_obj, NULL);
        lv_obj_set_size(cont, LV_HOR_RES, LV_VER_RES);
@@ -251,7 +241,7 @@ lv_obj_t * health_atrial_fibrillation_create(lv_obj_t * activity_obj)
 
        lv_obj_t * img = lv_img_create(cont, NULL);
        lv_img_set_src(img, ICON_HEART_RATE_MEASURE_FAIL);
-    lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, HEART_MEASURE_IMAGE_Y);
+    lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, ATRIAL_FIBRILLATION_MEASURE_IMAGE_Y);
        lv_obj_set_hidden(img, true);
        ext->img = img;
 
@@ -260,28 +250,19 @@ lv_obj_t * health_atrial_fibrillation_create(lv_obj_t * activity_obj)
        lv_obj_add_style(label_info, LV_LABEL_PART_MAIN, &lv_watch_font20);
        lv_label_set_text_id(label_info, WATCH_TEXT_ID_MEASURING);
     //lv_label_set_align(label_info, LV_LABEL_ALIGN_CENTER);
-    lv_obj_align(label_info, cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_INFO_Y);
+    lv_obj_align(label_info, cont, LV_ALIGN_IN_TOP_MID, 0, ATRIAL_FIBRILLATION_LABEL_INFO_Y);
     lv_obj_set_click(label_info, false);
        ext->label_info = label_info;
 
        lv_obj_t * label_value = lv_label_create(cont, NULL);
     //lv_obj_set_size(label_value, LV_HOR_RES, 40);
        lv_obj_add_style(label_value, LV_LABEL_PART_MAIN, &lv_watch_font24);
-       lv_label_set_text(label_value, ext->heart_rate);
+       //lv_label_set_text(label_value, ext->heart_rate);
     //lv_label_set_align(label_value, LV_LABEL_ALIGN_CENTER);
-    lv_obj_align(label_value, cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y-10);
+    lv_obj_align(label_value, cont, LV_ALIGN_IN_TOP_MID, 0, ATRIAL_FIBRILLATION_LABEL_VALUE_Y - 10);
        lv_obj_set_click(label_value, false);
        ext->label_value = label_value;
 
-       lv_obj_t * label_value_blood = lv_label_create(cont, NULL);
-    //lv_obj_set_size(label_value, LV_HOR_RES, 40);
-       lv_obj_add_style(label_value_blood, LV_LABEL_PART_MAIN, &lv_watch_font24);
-       lv_label_set_text(label_value_blood, ext->heart_rate);
-    //lv_label_set_align(label_value, LV_LABEL_ALIGN_CENTER);
-    lv_obj_align(label_value_blood, cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y+10);
-       lv_obj_set_click(label_value_blood, false);
-       ext->label_value_blood = label_value_blood;
-
        if(false == mmi_health_measure_wear_state_get() ||  HAL_CHG_CONNECTED == Hal_Charger_Get_Status()) 
        {
                ext->measure_state = STATE_ATRIAL_FIBRILLATION_MEASURE_FAIL;
@@ -293,7 +274,7 @@ lv_obj_t * health_atrial_fibrillation_create(lv_obj_t * activity_obj)
                lv_obj_t * gif_cont = lv_cont_create(cont, NULL);
                lv_obj_set_size(gif_cont, LV_HOR_RES, 100);
                lv_obj_set_style_local_bg_color(gif_cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
-               lv_obj_align(gif_cont, cont, LV_ALIGN_IN_TOP_MID, 0, HEART_MEASURE_IMAGE_Y);
+               lv_obj_align(gif_cont, cont, LV_ALIGN_IN_TOP_MID, 0, ATRIAL_FIBRILLATION_MEASURE_IMAGE_Y);
                ext->gif_cont = gif_cont;
 
                ext->gif_info = gif_open(gif_cont, ANIM_HEART_RATE_MEASURING, 0);
@@ -302,7 +283,7 @@ lv_obj_t * health_atrial_fibrillation_create(lv_obj_t * activity_obj)
                        HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: gif open fail\n", __FUNCTION__, __LINE__);
                }
                
-               ext->cycle_timer_id = Hal_Timer_Start(HEALTH_HEART_MEASURE_CYCLE, health_atrial_fibrillation_measure_cycle_timeout, NULL, TRUE);
+               ext->cycle_timer_id = Hal_Timer_Start(HEALTH_ATRIAL_FIBRILLATION_MEASURE_CYCLE, health_atrial_fibrillation_measure_cycle_timeout, NULL, TRUE);
        
                ext->measure_state = STATE_ATRIAL_FIBRILLATION_MEASURING;
                watch_set_suspend_enable(false, ACT_ID_HEALTH_MEASURE_ATRIAL_FIBRILLATION, 0);
index 133a433..2eadea6 100644 (file)
@@ -19,74 +19,74 @@ extern "C" {
 #ifdef __MMI_HEALTH_MEASURE_ATRIAL_FIBRILLATION_SUPPORT__
 
 
-#define HEALTH_HEART_MEASURE_CYCLE             (1000 * 1)
+#define HEALTH_ATRIAL_FIBRILLATION_MEASURE_CYCLE               (1000 * 1)
 
 
 #ifdef USE_LV_WATCH_UI_CIRCLE
 
 #if USE_LV_WATCH_UI_240_240
-#define HEART_MEASURE_IMAGE_Y          (25)
-#define HEART_LABEL_INFO_X             (0)
-#define HEART_LABEL_INFO_Y             (135)
-#define HEART_LABEL_INFO_W             (LV_HOR_RES - HEART_LABEL_INFO_X)
-#define HEART_LABEL_INFO_H             (30)
+#define ATRIAL_FIBRILLATION_MEASURE_IMAGE_Y            (25)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_X               (0)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_Y               (135)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_W               (LV_HOR_RES - ATRIAL_FIBRILLATION_LABEL_INFO_X)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_H               (30)
 
-#define HEART_LABEL_VALUE_X            (0)
-#define HEART_LABEL_VALUE_Y            (165)
-#define HEART_LABEL_VALUE_W            (LV_HOR_RES - HEART_LABEL_VALUE_X)
-#define HEART_LABEL_VALUE_H            (50)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_X              (0)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_Y              (165)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_W              (LV_HOR_RES - ATRIAL_FIBRILLATION_LABEL_VALUE_X)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_H              (50)
 
 #else
-#define HEART_MEASURE_IMAGE_Y          (40)
-#define HEART_LABEL_INFO_X             (0)
-#define HEART_LABEL_INFO_Y             (180)
-#define HEART_LABEL_INFO_W             (LV_HOR_RES - HEART_LABEL_INFO_X)
-#define HEART_LABEL_INFO_H             (30)
+#define ATRIAL_FIBRILLATION_MEASURE_IMAGE_Y            (40)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_X               (0)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_Y               (180)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_W               (LV_HOR_RES - ATRIAL_FIBRILLATION_LABEL_INFO_X)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_H               (30)
 
-#define HEART_LABEL_VALUE_X            (0)
-#define HEART_LABEL_VALUE_Y            (220)
-#define HEART_LABEL_VALUE_W            (LV_HOR_RES - HEART_LABEL_VALUE_X)
-#define HEART_LABEL_VALUE_H            (50)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_X              (0)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_Y              (220)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_W              (LV_HOR_RES - ATRIAL_FIBRILLATION_LABEL_VALUE_X)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_H              (50)
 
 #endif
 
 #else
 
 #if USE_LV_WATCH_UI_240_320
-#define HEART_MEASURE_IMAGE_Y          (40)
-#define HEART_LABEL_INFO_X             (0)
-#define HEART_LABEL_INFO_Y             (180)
-#define HEART_LABEL_INFO_W             (LV_HOR_RES - HEART_LABEL_INFO_X)
-#define HEART_LABEL_INFO_H             (30)
+#define ATRIAL_FIBRILLATION_MEASURE_IMAGE_Y            (40)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_X               (0)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_Y               (180)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_W               (LV_HOR_RES - ATRIAL_FIBRILLATION_LABEL_INFO_X)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_H               (30)
 
-#define HEART_LABEL_VALUE_X            (0)
-#define HEART_LABEL_VALUE_Y            (220)
-#define HEART_LABEL_VALUE_W            (LV_HOR_RES - HEART_LABEL_VALUE_X)
-#define HEART_LABEL_VALUE_H            (50)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_X              (0)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_Y              (220)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_W              (LV_HOR_RES - ATRIAL_FIBRILLATION_LABEL_VALUE_X)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_H              (50)
 
 #elif USE_LV_WATCH_UI_240_280
-#define HEART_MEASURE_IMAGE_Y          (40)
-#define HEART_LABEL_INFO_X             (0)
-#define HEART_LABEL_INFO_Y             (155)
-#define HEART_LABEL_INFO_W             (LV_HOR_RES - HEART_LABEL_INFO_X)
-#define HEART_LABEL_INFO_H             (30)
+#define ATRIAL_FIBRILLATION_MEASURE_IMAGE_Y            (40)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_X               (0)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_Y               (155)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_W               (LV_HOR_RES - ATRIAL_FIBRILLATION_LABEL_INFO_X)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_H               (30)
 
-#define HEART_LABEL_VALUE_X            (0)
-#define HEART_LABEL_VALUE_Y            (195)
-#define HEART_LABEL_VALUE_W            (LV_HOR_RES - HEART_LABEL_VALUE_X)
-#define HEART_LABEL_VALUE_H            (50)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_X              (0)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_Y              (195)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_W              (LV_HOR_RES - ATRIAL_FIBRILLATION_LABEL_VALUE_X)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_H              (50)
 
 #else
-#define HEART_MEASURE_IMAGE_Y          (40)
-#define HEART_LABEL_INFO_X             (0)
-#define HEART_LABEL_INFO_Y             (180)
-#define HEART_LABEL_INFO_W             (LV_HOR_RES - HEART_LABEL_INFO_X)
-#define HEART_LABEL_INFO_H             (30)
+#define ATRIAL_FIBRILLATION_MEASURE_IMAGE_Y            (40)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_X               (0)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_Y               (180)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_W               (LV_HOR_RES - ATRIAL_FIBRILLATION_LABEL_INFO_X)
+#define ATRIAL_FIBRILLATION_LABEL_INFO_H               (30)
 
-#define HEART_LABEL_VALUE_X            (0)
-#define HEART_LABEL_VALUE_Y            (220)
-#define HEART_LABEL_VALUE_W            (LV_HOR_RES - HEART_LABEL_VALUE_X)
-#define HEART_LABEL_VALUE_H            (50)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_X              (0)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_Y              (220)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_W              (LV_HOR_RES - ATRIAL_FIBRILLATION_LABEL_VALUE_X)
+#define ATRIAL_FIBRILLATION_LABEL_VALUE_H              (50)
 
 #endif
 
@@ -112,11 +112,9 @@ typedef struct
        lv_obj_t * img;
        lv_obj_t * label_info;
        lv_obj_t * label_value;
-       lv_obj_t * label_value_blood;
        lv_obj_t * gif_cont;
        lv_atrial_fibrillation_state_e measure_state;
-       char heart_rate[8];
-       char blood_low_high[16];
+       uint16_t heart_rate;
 } lv_atrial_fibrillation_obj_ext_t;
 
 
index ab909a0..34bf44a 100644 (file)
@@ -86,10 +86,23 @@ void health_heart_rate_display_update(void)
                #ifdef USE_LV_WATCH_UI_240_280
                        lv_obj_align(ext->label_value_blood, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y + 30);
                #else
-                       lv_obj_align(ext->label_value_blood, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y+10);
+                       lv_obj_align(ext->label_value_blood, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y + 15);
                #endif
                        lv_obj_set_hidden(ext->label_value_blood, FALSE);
-                       
+                       break;
+
+               case STATE_HEART_RATE_MEASURE_NONE:
+                       lv_img_set_src(ext->img, ICON_HEART_RATE_MEASURE_FAIL);
+                       lv_obj_set_hidden(ext->img, FALSE);
+
+                       lv_label_set_text_id(ext->label_info, WATCH_TEXT_ID_MEASURE_FAIL);
+                       lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_INFO_Y);
+
+                       lv_obj_remove_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font40);
+                       lv_obj_add_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font30);
+                       lv_label_set_text_id(ext->label_value, WATCH_TEXT_ID_IN_MEASURE_AGAIN);
+                       lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, HEART_LABEL_VALUE_Y);
+                       lv_obj_set_hidden(ext->label_value, FALSE);
                        break;
  
                default:  
@@ -137,15 +150,6 @@ static void health_heart_rate_measure_cycle_timeout(void * para)
                                {
                                        sprintf(ext->heart_rate, "%d bpm", value);
                                }
-                               // uint16_t blood_high_value = 0;
-                               // uint16_t blood_low_value = 0;
-                               // mmi_hsensor_blood_value_get(&blood_high_value,&blood_low_value);
-                               // sprintf(ext->blood_low_high, "%d / %d mmhg", blood_low_value,blood_high_value);
-                       
-                               //else
-                               //{
-                               //      sprintf(ext->heart_rate, "-- bpm");
-                               //}
                                ext->measure_state = STATE_HEART_RATE_MEASURING;
                        }
                        else
@@ -161,7 +165,12 @@ static void health_heart_rate_measure_cycle_timeout(void * para)
                                        ext->gif_info = NULL;
                                }
                                lv_obj_del(ext->gif_cont);
-                               ext->measure_state = STATE_HEART_RATE_MEASURE_DONE;
+
+                               if(0 == strlen(ext->heart_rate))
+                                       ext->measure_state = STATE_HEART_RATE_MEASURE_NONE;
+                               else
+                                       ext->measure_state = STATE_HEART_RATE_MEASURE_DONE;
+                               
                                watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_HEART, 0);
                                watch_wakeup_time_reset();
                        }
index 31178ca..da69303 100644 (file)
@@ -949,13 +949,6 @@ bool mmi_health_measure_timed_measure_start(MMI_HEALTH_MEASURE_TYPE_E measure_ty
        
        if(NULL != lv_watch_get_activity_obj(ACT_ID_FACTORY_MODE_TEST))
                return false;
-
-#ifdef __MMI_CUSTOM_HENGAI_HEALTH__
-       if(mmi_hengai_bp_measuring_flag_get())
-       {
-               return false;
-       }
-#endif
        
        if(true == mmi_health_measure_state_is_in_measure())
        {
@@ -991,17 +984,8 @@ void mmi_health_measure_app_measure_start(MMI_HEALTH_MEASURE_TYPE_E measure_type
        if(NULL != lv_watch_get_activity_obj(ACT_ID_FACTORY_MODE_TEST))
                return;
        
-       if(MMI_HEALTH_MEASURE_STATE_UI == s_health_measure_run_data.measure_state)
-       {
+       if(true == mmi_health_measure_state_is_ui_measure())
                return;
-       }
-
-#ifdef __MMI_CUSTOM_HENGAI_HEALTH__
-       if(mmi_hengai_bp_measuring_flag_get())
-       {
-               return;
-       }
-#endif
        
        if(MMI_HEALTH_MEASURE_STATE_TIMED == s_health_measure_run_data.measure_state)
        {
index fa62eab..67fa9dd 100644 (file)
@@ -32,6 +32,7 @@ extern "C" {
 #define MMI_HEALTH_MEASURE_CYCLE_DURATION      (1 * 1000) // ms
 
 #define MMI_HEART_RATE_VALUE_MIN       (45)
+#define MMI_HEART_RATE_VALUE_MAX       (220)
 
 #define DEFAULT_BP_HIGH_VALUE_MAX      (180)
 #define DEFAULT_BP_HIGH_VALUE_MIN      (95)
index 93600c0..681a777 100644 (file)
@@ -72,6 +72,20 @@ void health_spo2_display_update(void)
                        lv_obj_set_hidden(ext->label_value, FALSE);
                        break;
 
+               case STATE_SPO2_MEASURE_NONE:
+                       lv_img_set_src(ext->img, ICON_SPO2_MEASURE_FAIL);
+                       lv_obj_set_hidden(ext->img, FALSE);
+
+                       lv_label_set_text_id(ext->label_info, WATCH_TEXT_ID_MEASURE_FAIL);
+                       lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, SPO2_LABEL_INFO_Y);
+
+                       lv_obj_remove_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font40);
+                       lv_obj_add_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font30);
+                       lv_label_set_text_id(ext->label_value, WATCH_TEXT_ID_IN_MEASURE_AGAIN);
+                       lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, SPO2_LABEL_VALUE_Y);
+                       lv_obj_set_hidden(ext->label_value, FALSE);
+                       break;
+
                default:
                        break;
        }
@@ -137,7 +151,11 @@ static void health_spo2_measure_cycle_timeout(void * para)
                                }
                                lv_obj_del(ext->gif_cont);
                
-                               ext->measure_state = STATE_SPO2_MEASURE_DONE;
+                               if(0 == strlen(ext->spo2))
+                                       ext->measure_state = STATE_SPO2_MEASURE_NONE;
+                               else
+                                       ext->measure_state = STATE_SPO2_MEASURE_DONE;
+                               
                                watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_SPO2, 0);
                                watch_wakeup_time_reset();
                        }
index af6dedc..756a418 100644 (file)
@@ -72,6 +72,20 @@ void health_temperature_display_update(void)
                        lv_obj_set_hidden(ext->label_value, FALSE);
                        break;
 
+               case STATE_TEMPERATURE_MEASURE_NONE:
+                       lv_img_set_src(ext->img, ICON_TEMPERATURE_MEASURE_FAIL);
+                       lv_obj_set_hidden(ext->img, FALSE);
+
+                       lv_label_set_text_id(ext->label_info, WATCH_TEXT_ID_MEASURE_FAIL);
+                       lv_obj_align(ext->label_info, ext->cont, LV_ALIGN_IN_TOP_MID, 0, TEMPERATURE_LABEL_INFO_Y);
+
+                       lv_obj_remove_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font40);
+                       lv_obj_add_style(ext->label_value, LV_LABEL_PART_MAIN, &lv_watch_font30);
+                       lv_label_set_text_id(ext->label_value, WATCH_TEXT_ID_IN_MEASURE_AGAIN);
+                       lv_obj_align(ext->label_value, ext->cont, LV_ALIGN_IN_TOP_MID, 0, TEMPERATURE_LABEL_VALUE_Y);
+                       lv_obj_set_hidden(ext->label_value, FALSE);
+                       break;
+
                default:
                        break;
        }
@@ -136,7 +150,12 @@ static void health_temperature_measure_cycle_timeout(void * para)
                                        ext->gif_info = NULL;
                                }
                                lv_obj_del(ext->gif_cont);
-                               ext->measure_state = STATE_TEMPERATURE_MEASURE_DONE;
+
+                               if(0 == strlen(ext->body_value))
+                                       ext->measure_state = STATE_TEMPERATURE_MEASURE_NONE;
+                               else
+                                       ext->measure_state = STATE_TEMPERATURE_MEASURE_DONE;
+                               
                                watch_set_suspend_enable(true, ACT_ID_HEALTH_MEASURE_TEMPERATURE, 0);
                                watch_wakeup_time_reset();
                        }
diff --git a/2.sdk/sdk/gui/lv_watch/mmi_sundry/mmi_common_task.c b/2.sdk/sdk/gui/lv_watch/mmi_sundry/mmi_common_task.c
new file mode 100644 (file)
index 0000000..fa051d1
--- /dev/null
@@ -0,0 +1,96 @@
+
+
+
+#include "lv_watch.h"
+
+#ifdef __MMI_ZHSX_SUPPORT__
+
+static TASK_HANDLE * s_watch_common_task_id = NULL;
+
+void mmi_watch_common_task_msg_send(MMI_TASK_MSG_ID_E msg_id, void * msg_param)
+{
+       if(NULL == s_watch_common_task_id)
+       {
+               COMMON_TASK_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: task not exist\n", __FUNCTION__, __LINE__);
+               if(NULL != msg_param)
+                       Hal_Mem_Free(msg_param);
+               
+               return;
+       }
+       
+       if((MMI_COMMON_TASK_MSG_QUEUE_SIZE - 1) < Hal_Get_Message_Count(s_watch_common_task_id))
+       {
+               COMMON_TASK_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg queue full\n", __FUNCTION__, __LINE__);
+               if(NULL != msg_param)
+                       Hal_Mem_Free(msg_param);
+               
+               return;
+       }
+
+       COMMON_TASK_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n", __FUNCTION__, __LINE__, msg_id);
+    mmi_common_task_msg_t * msg = Hal_Mem_Alloc(sizeof(mmi_common_task_msg_t));
+       if(NULL == msg)
+       {
+               COMMON_TASK_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc fail\n", __FUNCTION__, __LINE__);
+               if(NULL != msg_param)
+                       Hal_Mem_Free(msg_param);
+               
+               return;
+       }
+       msg->msg_id = msg_id;
+       msg->msg_param = msg_param;
+
+    Hal_Send_Message((TASK_ID)s_watch_common_task_id, (void *)msg);
+}
+
+static void mmi_watch_common_task_handle(void * param)
+{
+       mmi_common_task_msg_t * msg = (mmi_common_task_msg_t *)param;
+       MMI_GUI_TIMING_MSG_ID_E msg_id = msg->msg_id;
+       void * msg_param = msg->msg_param;
+
+       COMMON_TASK_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n", __FUNCTION__, __LINE__, msg_id);
+    switch(msg_id)
+       {
+               case MMI_TASK_MSG_CHECK_SOMETHING:
+                       //mmi_gui_timing_task_3_second_mission(msg_param);
+                       break;
+
+               default:
+                       break;
+    }
+}
+
+static void mmi_watch_common_task_entry(void * para)
+{
+    while(NULL == s_watch_common_task_id)
+       {
+        uos_sleep(10);
+    }
+
+    while(1)
+       {
+        mmi_common_task_msg_t * msg = (mmi_common_task_msg_t *)Hal_Receive_Message((TASK_ID)s_watch_common_task_id, TRUE);
+
+               mmi_watch_common_task_handle(msg);
+
+        Hal_Mem_Free(msg->msg_param);
+        Hal_Mem_Free(msg);
+    }
+}
+
+void mmi_watch_common_task_create(void)
+{
+       s_watch_common_task_id = uos_create_task(mmi_watch_common_task_entry,
+                                                                                               NULL,
+                                                                                               MMI_COMMON_TASK_MSG_QUEUE_SIZE,
+                                                                                               MMI_COMMON_TASK_STACK_SIZE,
+                                                                                               MMI_COMMON_TASK_PRIORITY,
+                                                                                               "mmi_watch_common_task");
+
+       COMMON_TASK_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: task_id=0x%x\n", __FUNCTION__, __LINE__, s_watch_common_task_id);
+}
+
+#endif
+
+
diff --git a/2.sdk/sdk/gui/lv_watch/mmi_sundry/mmi_common_task.h b/2.sdk/sdk/gui/lv_watch/mmi_sundry/mmi_common_task.h
new file mode 100644 (file)
index 0000000..b1bae68
--- /dev/null
@@ -0,0 +1,66 @@
+
+
+
+#ifndef __MMI_COMMON_TASK_H__
+#define __MMI_COMMON_TASK_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif //__cplusplus
+
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lvgl.h"
+#include "lv_watch_conf.h"
+#else
+#include "../../../lvgl/lvgl.h"
+#include "../../../lv_watch_conf.h"
+#endif
+
+#ifdef __MMI_ZHSX_SUPPORT__
+
+#define __MMI_COMMON_TASK_DEBUG__
+#ifdef __MMI_COMMON_TASK_DEBUG__
+#define COMMON_TASK_DEBUG_PRINTF(fmt, ...)     printf("[COMMON_TASK]"fmt, ##__VA_ARGS__)
+#else
+#define COMMON_TASK_DEBUG_PRINTF(fmt, ...)
+#endif
+
+
+#define MMI_COMMON_TASK_PRIORITY (219)
+#define MMI_COMMON_TASK_STACK_SIZE (8 * 1024)
+#define MMI_COMMON_TASK_MSG_QUEUE_SIZE (64)
+
+
+typedef enum
+{
+       MMI_TASK_MSG_ID_START,
+
+    MMI_TASK_MSG_CHECK_SOMETHING = MMI_TASK_MSG_ID_START,
+       MMI_TASK_MSG_XXX,
+
+    MMI_TASK_MSG_ID_END
+}MMI_TASK_MSG_ID_E;
+
+typedef struct
+{
+       uint16_t msg_id;
+       void * msg_param;
+}mmi_common_task_msg_t;
+
+
+void mmi_watch_common_task_msg_send(MMI_TASK_MSG_ID_E msg_id, void * msg_param);
+void mmi_watch_common_task_create(void);
+
+
+
+#endif
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif //__cplusplus
+
+#endif
+
+