gengxin
authorCCC <2393524978@qq.com>
Wed, 29 Nov 2023 09:49:20 +0000 (17:49 +0800)
committerCCC <2393524978@qq.com>
Wed, 29 Nov 2023 09:49:20 +0000 (17:49 +0800)
2.sdk/project/Z5_DS_Z12XW_QCB/gui/lv_watch/resource/png/signal/icon_signal_1.png
2.sdk/project/Z5_DS_Z12XW_QCB/gui/lv_watch/resource/png/signal/icon_signal_2.png
2.sdk/project/Z5_DS_Z12XW_QCB/gui/lv_watch/resource/png/signal/icon_signal_3.png
2.sdk/project/Z5_DS_Z12XW_QCB/gui/lv_watch/resource/png/signal/icon_signal_4.png
2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode.h
2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode_main.c
2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode_test.c

index 1120645..74e8193 100644 (file)
Binary files a/2.sdk/project/Z5_DS_Z12XW_QCB/gui/lv_watch/resource/png/signal/icon_signal_1.png and b/2.sdk/project/Z5_DS_Z12XW_QCB/gui/lv_watch/resource/png/signal/icon_signal_1.png differ
index a05b73a..ba173aa 100644 (file)
Binary files a/2.sdk/project/Z5_DS_Z12XW_QCB/gui/lv_watch/resource/png/signal/icon_signal_2.png and b/2.sdk/project/Z5_DS_Z12XW_QCB/gui/lv_watch/resource/png/signal/icon_signal_2.png differ
index 4c896cf..9033179 100644 (file)
Binary files a/2.sdk/project/Z5_DS_Z12XW_QCB/gui/lv_watch/resource/png/signal/icon_signal_3.png and b/2.sdk/project/Z5_DS_Z12XW_QCB/gui/lv_watch/resource/png/signal/icon_signal_3.png differ
index 603e351..58fa52b 100644 (file)
Binary files a/2.sdk/project/Z5_DS_Z12XW_QCB/gui/lv_watch/resource/png/signal/icon_signal_4.png and b/2.sdk/project/Z5_DS_Z12XW_QCB/gui/lv_watch/resource/png/signal/icon_signal_4.png differ
index e717476..3856acf 100644 (file)
@@ -182,12 +182,20 @@ void factorymode_wifi_create_btn_cb(lv_obj_t * btn,lv_event_t e);
 void factorymode_gps_create_btn_cb(lv_obj_t * btn,lv_event_t e);
 void factorymode_gsensor_create_btn_cb(lv_obj_t * btn,lv_event_t e);
 #ifdef __MMI_ZHSX_SUPPORT__
+#ifdef __MMI_HEALTH_MEASURE_TEMPERATURE_SUPPORT__
 void mmi_factorymode_temperature_test_create_btn_cb(lv_obj_t * btn,lv_event_t e);
+#endif
+#ifdef __MMI_HEALTH_MEASURE_HEART_SUPPORT__
+#if USE_HX3918
+void mmi_factorymode_live_calibration_create_btn_cb(lv_obj_t * btn,lv_event_t e);
+void mmi_factorymode_wear_test_create_btn_cb(lv_obj_t * btn,lv_event_t e);
+void mmi_factorymode_light_leak_test_create_btn_cb(lv_obj_t * btn,lv_event_t e);
+#endif
 void mmi_factorymode_heart_test_create_btn_cb(lv_obj_t * btn,lv_event_t e);
+#ifdef __MMI_HEALTH_MEASURE_SPO2_SUPPORT__
 void mmi_factorymode_spo2_test_create_btn_cb(lv_obj_t * btn,lv_event_t e);
-#if USE_HX3918
-void mmi_factorymode_hanging_cali_create_btn_cb(lv_obj_t * btn,lv_event_t e);
-#endif //end USE_HX3918
+#endif
+#endif
 #else
 void factorymode_hr_bp_bo_test_create_btn_cb(lv_obj_t * btn,lv_event_t e);
 void factorymode_sport_hr_test_create_btn_cb(lv_obj_t * btn,lv_event_t e);
index fd4ea99..c353fd3 100644 (file)
@@ -82,17 +82,19 @@ const struct {
 #endif
 #if 1 // def __MMI_ZHSX_SUPPORT__
        #ifdef __MMI_ZHSX_SUPPORT_HEALTH_SENSOR__
-       #ifdef __MMI_HEALTH_MEASURE_TEMPERATURE_SUPPORT__
-       { WATCH_TEXT_ID_TEMPERATURE_TEST, mmi_factorymode_temperature_test_create_btn_cb },
-       #endif
        #ifdef __MMI_HEALTH_MEASURE_HEART_SUPPORT__
+       #if USE_HX3918
+       { WATCH_TEXT_ID_LIVE_CALIBRATION, mmi_factorymode_live_calibration_create_btn_cb },
+    { WATCH_TEXT_ID_WEAR_TEST, mmi_factorymode_wear_test_create_btn_cb },
+       { WATCH_TEXT_ID_LIGHT_LEAK_TEST, mmi_factorymode_light_leak_test_create_btn_cb },
+       #endif
        { WATCH_TEXT_ID_HEART_TEST, mmi_factorymode_heart_test_create_btn_cb },
        #ifdef __MMI_HEALTH_MEASURE_SPO2_SUPPORT__
        { WATCH_TEXT_ID_SPO2_TEST, mmi_factorymode_spo2_test_create_btn_cb },
        #endif
-    #if USE_HX3918
-    { WATCH_TEXT_ID_HANGING_CALI, mmi_factorymode_hanging_cali_create_btn_cb },
-    #endif
+       #endif
+       #ifdef __MMI_HEALTH_MEASURE_TEMPERATURE_SUPPORT__
+       { WATCH_TEXT_ID_TEMPERATURE_TEST, mmi_factorymode_temperature_test_create_btn_cb },
        #endif
        #endif
 #else
index 1c58b9b..2b19dd8 100644 (file)
@@ -1682,7 +1682,9 @@ static void mmi_factorymode_temperature_update(lv_anim_t * anim)
        float body_temp_value = 0.0;
        
        mmi_tsensor_body_value_get(&body_temp_value);
-    sprintf(str, "body temp:\n    %.2f %s", body_temp_value, (char *)lv_lang_get_text(WATCH_TEXT_ID_TEMPERATURE_UNIT));
+    sprintf(str, "%s:\n    %.2f %s", (char *)lv_lang_get_text(WATCH_TEXT_ID_TEMPERATURE), 
+                                                                       body_temp_value,
+                                                                       (char *)lv_lang_get_text(WATCH_TEXT_ID_TEMPERATURE_UNIT));
     lv_label_set_text(anim->var,str);
 }
 
@@ -1728,7 +1730,7 @@ static lv_obj_t * mmi_factorymode_temperature_test_create(lv_obj_t * activity_ob
 #endif
 
     char str[32]= {0};
-    sprintf(str, "body temp: ");
+    sprintf(str, "%s:", (char *)lv_lang_get_text(WATCH_TEXT_ID_TEMPERATURE));
     lv_label_set_text(label,str);
 
     lv_anim_path_t path;
@@ -1758,24 +1760,173 @@ void mmi_factorymode_temperature_test_create_btn_cb(lv_obj_t * btn,lv_event_t e)
 
 // heart
 #ifdef __MMI_HEALTH_MEASURE_HEART_SUPPORT__
-static void mmi_factorymode_heart_test_status_update(lv_anim_t * anim)
+
+#if USE_HX3918
+
+#include "../../..//lv_drivers/indev/HX3918/hx3918.h"
+#include "../../../lv_drivers/indev/HX3918/hx3918_factory_test.h"
+
+extern factory_result_t factory_reslts;
+#ifdef  SAR_ALG_LIB
+extern int16_t nv_wear_offset[2] ;
+extern int16_t nv_base_data[2];
+#else
+int16_t nv_wear_offset[2] ;
+int16_t nv_base_data[2];
+#endif
+static uint32_t s_sensor_counter = 0;
+
+static void mmi_factorymode_live_calibration_status_update(lv_anim_t * anim)
+{
+    char str[64]= {0};
+       
+    sprintf(str, "%s: %d,%d,%d,%d", (char *)lv_lang_get_text(WATCH_TEXT_ID_CALIBRATION_DATA), 
+                                                       nv_wear_offset[0],
+                                                       nv_wear_offset[1],
+                                                       nv_base_data[0],
+                                                       nv_base_data[1]);
+    lv_label_set_text(anim->var, str);
+
+       s_sensor_counter++;
+       if(3 > s_sensor_counter)
+       {
+               // this function need called many times
+               HX3918_test(255);
+       }
+       else if(9 == s_sensor_counter)
+       {
+               mmi_hsensor_close();
+       
+               lv_obj_t * par = lv_obj_get_parent(anim->var);
+               lv_obj_t * label_result = lv_label_create(par, anim->var);
+               if((nv_wear_offset[0] || nv_wear_offset[1]) && (nv_base_data[0] || nv_base_data[1]))
+                       sprintf(str, "%s%s", (char *)lv_lang_get_text(WATCH_TEXT_ID_LIVE_CALIBRATION), (char *)lv_lang_get_text(WATCH_TEXT_ID_SUCCESS));
+               else
+                       sprintf(str, "%s%s", (char *)lv_lang_get_text(WATCH_TEXT_ID_LIVE_CALIBRATION), (char *)lv_lang_get_text(WATCH_TEXT_ID_FAIL));
+               
+               lv_label_set_text(label_result, str);
+               lv_obj_align(label_result, anim->var, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+       }
+}
+
+static void mmi_factorymode_live_calibration_event_cb(lv_obj_t * btn, lv_event_t e)
+{
+    if(LV_EVENT_CLICKED != e)
+       return;
+
+    if(NULL == btn)
+               return;
+       
+    lv_obj_t * par = lv_obj_get_parent((lv_obj_t*)btn);
+    if(NULL == par)
+               return;
+
+       lv_obj_del(btn);
+
+    testing_st = FAC_HEART;
+       HX3918_test(255);
+       s_sensor_counter = 0;
+
+       lv_obj_t * label = lv_label_create(par, NULL);
+       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
+       lv_label_set_long_mode(label, LV_LABEL_LONG_BREAK);
+       lv_obj_set_width(label, LV_HOR_RES - 40);
+       lv_obj_set_pos(label, 20, LV_VER_RES / 4);
+
+       char str[64]= {0};
+       sprintf(str, "%s: ", (char *)lv_lang_get_text(WATCH_TEXT_ID_CALIBRATION_DATA));
+       lv_label_set_text(label,str);
+
+       lv_anim_path_t path;
+       lv_anim_path_init(&path);
+       lv_anim_path_set_cb(&path, lv_anim_path_step);
+
+       lv_anim_t a;
+       lv_anim_init(&a);
+       lv_anim_set_var(&a, label);
+       lv_anim_set_start_cb(&a, (lv_anim_ready_cb_t)mmi_factorymode_live_calibration_status_update);
+       lv_anim_set_time(&a, 1);
+       lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
+       lv_anim_set_delay(&a,1000);
+       lv_anim_set_repeat_delay(&a, 1000);
+       lv_anim_start(&a);
+}
+
+static lv_obj_t * mmi_factorymode_live_calibration_create(lv_obj_t * activity_obj)
+{
+    if(activity_obj == NULL) {
+        lv_watch_activity_ext_t activity_ext;
+        memset(&activity_ext, 0, sizeof(lv_watch_activity_ext_t));
+        activity_ext.actId = ACT_ID_FACTORY_MODE_TEST;
+        activity_ext.create = mmi_factorymode_live_calibration_create;
+        activity_ext.prepare_destory = factorymode_test_prepare_destory;
+        activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+        LV_ASSERT_MEM(activity_obj);
+        if(NULL == activity_obj) {
+            return NULL;
+        }
+    }
+
+    lv_obj_t * obj = lv_watch_obj_create(activity_obj);
+    LV_ASSERT_MEM(obj);
+    if(NULL == obj)
+        return NULL;
+
+    lv_obj_t * content = lv_cont_create(obj, NULL);
+    lv_obj_set_size(content, lv_obj_get_width(obj), lv_obj_get_height(obj));
+    lv_obj_add_style(content,LV_OBJ_PART_MAIN, &lv_watch_style_transp);
+    lv_obj_align(content, NULL, LV_ALIGN_CENTER, 0, 0);
+    lv_obj_set_click(content, false);
+
+       lv_obj_t * btn_start = lv_btn_create(content, NULL);
+       lv_obj_set_size(btn_start, LV_HOR_RES * 2 / 3, 40);
+       lv_obj_set_event_cb(btn_start, mmi_factorymode_live_calibration_event_cb);
+       lv_obj_align(btn_start, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -10);
+       
+       lv_obj_t * label_start = lv_label_create(btn_start, NULL);
+       lv_label_set_text_id(label_start, WATCH_TEXT_ID_START_TEST);
+       lv_obj_add_style(label_start,LV_OBJ_PART_MAIN, &lv_watch_font20);
+       lv_label_set_align(label_start, LV_LABEL_ALIGN_CENTER);
+       lv_obj_align(label_start, NULL, LV_ALIGN_CENTER, 0, 0);
+
+
+       lv_obj_t * label_prompt = lv_label_create(content, NULL);
+       lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font26);
+       lv_label_set_text_id(label_prompt, WATCH_TEXT_ID_LIVE_CALIBRATION_PROMPT);
+    lv_obj_set_width(label_prompt, LV_HOR_RES - 40);
+       lv_obj_align(label_prompt, btn_start, LV_ALIGN_OUT_TOP_MID, 0, -10);
+
+    return obj;
+}
+
+void mmi_factorymode_live_calibration_create_btn_cb(lv_obj_t * btn,lv_event_t e)
+{
+    if(e == LV_EVENT_CLICKED)
+       {
+        mmi_factorymode_live_calibration_create(NULL);
+    }
+}
+
+//
+static void mmi_factorymode_wear_test_status_update(lv_anim_t * anim)
 {
     char str[32]= {0};
-    uint16_t hr_value = 0;
+    bool wear_state = false;
        
-       mmi_hsensor_heart_value_get(&hr_value);
-    sprintf(str, "%s: %d bpm", (char *)lv_lang_get_text(WATCH_TEXT_ID_HEART_RATE), hr_value);
+       wear_state = mmi_health_measure_wear_state_get();
+    sprintf(str, "%s: %s", (char *)lv_lang_get_text(WATCH_TEXT_ID_WEAR_STATE),
+                                               (wear_state ? (char *)lv_lang_get_text(WATCH_TEXT_ID_WEARING) : (char *)lv_lang_get_text(WATCH_TEXT_ID_NO_WEAR)));
     lv_label_set_text(anim->var, str);
 }
 
-static lv_obj_t * mmi_factorymode_heart_test_create(lv_obj_t * activity_obj)
+static lv_obj_t * mmi_factorymode_wear_test_create(lv_obj_t * activity_obj)
 {
     lv_obj_t * obj;
     if(activity_obj == NULL) {
         lv_watch_activity_ext_t activity_ext;
         memset(&activity_ext, 0, sizeof(lv_watch_activity_ext_t));
         activity_ext.actId = ACT_ID_FACTORY_MODE_TEST;
-        activity_ext.create = mmi_factorymode_heart_test_create;
+        activity_ext.create = mmi_factorymode_wear_test_create;
         activity_ext.prepare_destory = factorymode_test_prepare_destory;
         activity_obj = lv_watch_creat_activity_obj(&activity_ext);
         LV_ASSERT_MEM(activity_obj);
@@ -1795,23 +1946,14 @@ static lv_obj_t * mmi_factorymode_heart_test_create(lv_obj_t * activity_obj)
     lv_obj_align(content, NULL, LV_ALIGN_CENTER, 0, 0);
     lv_obj_set_click(content, false);
 
-    testing_st = FAC_HEART;
-       mmi_hsensor_heart_open();
-
     lv_obj_t * label = lv_label_create(content, NULL);
-#if USE_LV_WATCH_UI_360_360
-    lv_obj_add_style(label,LV_OBJ_PART_MAIN, &lv_watch_font30);
-    lv_obj_set_width(label,LV_HOR_RES-60);
-    lv_obj_set_pos(label, 30, 105);
-#else
-    lv_obj_add_style(label,LV_OBJ_PART_MAIN, &lv_watch_font26);
-    lv_obj_set_width(label,LV_HOR_RES-40);
-    lv_obj_set_pos(label, 20, 70);
-#endif
+    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
+    lv_obj_set_width(label, LV_HOR_RES-40);
+    lv_obj_set_pos(label, 20, LV_VER_RES / 4);
 
     char str[32]= {0};
 
-    sprintf(str, "%s: ", (char *)lv_lang_get_text(WATCH_TEXT_ID_HEART_RATE));
+    sprintf(str, "%s: ", (char *)lv_lang_get_text(WATCH_TEXT_ID_WEAR_STATE));
     lv_label_set_text(label,str);
 
     lv_anim_path_t path;
@@ -1821,7 +1963,7 @@ static lv_obj_t * mmi_factorymode_heart_test_create(lv_obj_t * activity_obj)
     lv_anim_t a;
     lv_anim_init(&a);
     lv_anim_set_var(&a, label);
-    lv_anim_set_start_cb(&a, (lv_anim_ready_cb_t)mmi_factorymode_heart_test_status_update);
+    lv_anim_set_start_cb(&a, (lv_anim_ready_cb_t)mmi_factorymode_wear_test_status_update);
     lv_anim_set_time(&a, 1);
     lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
     lv_anim_set_delay(&a,1000);
@@ -1831,33 +1973,162 @@ static lv_obj_t * mmi_factorymode_heart_test_create(lv_obj_t * activity_obj)
     return obj;
 }
 
-void mmi_factorymode_heart_test_create_btn_cb(lv_obj_t * btn,lv_event_t e)
+void mmi_factorymode_wear_test_create_btn_cb(lv_obj_t * btn,lv_event_t e)
 {
-    if(e == LV_EVENT_CLICKED) {
-        mmi_factorymode_heart_test_create(NULL);
+    if(e == LV_EVENT_CLICKED)
+       {
+        mmi_factorymode_wear_test_create(NULL);
     }
 }
 
-// spo2
-#ifdef __MMI_HEALTH_MEASURE_SPO2_SUPPORT__
-static void mmi_factorymode_spo2_test_status_update(lv_anim_t * anim)
+//
+static void mmi_factorymode_light_leak_test_status_update(lv_anim_t * anim)
+{
+    char str[64]= {0};
+       
+    sprintf(str, "%s: %d,%d,%d", (char *)lv_lang_get_text(WATCH_TEXT_ID_LIGHT_LEAK_DATA),
+                                                               factory_reslts.green_data_final,
+                                                               factory_reslts.red_data_final,
+                                                               factory_reslts.ir_data_final);
+    lv_label_set_text(anim->var, str);
+
+       s_sensor_counter++;
+       if(4 == s_sensor_counter)
+       {
+               mmi_hsensor_close();
+       
+               lv_obj_t * par = lv_obj_get_parent(anim->var);
+               lv_obj_t * label_result = lv_label_create(par, anim->var);
+               if((0 < factory_reslts.green_data_final && 3000 > factory_reslts.green_data_final)
+                       && (0 < factory_reslts.red_data_final && 3000 > factory_reslts.red_data_final)
+                       && (0 < factory_reslts.ir_data_final && 3000 > factory_reslts.ir_data_final)
+                       )
+                       sprintf(str, "%s%s", (char *)lv_lang_get_text(WATCH_TEXT_ID_LIGHT_LEAK_TEST), (char *)lv_lang_get_text(WATCH_TEXT_ID_SUCCESS));
+               else
+                       sprintf(str, "%s%s", (char *)lv_lang_get_text(WATCH_TEXT_ID_LIGHT_LEAK_TEST), (char *)lv_lang_get_text(WATCH_TEXT_ID_FAIL));
+               
+               lv_label_set_text(label_result, str);
+               lv_obj_align(label_result, anim->var, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+       }
+}
+
+static void mmi_factorymode_light_leak_event_cb(lv_obj_t * btn, lv_event_t e)
+{
+       if(LV_EVENT_CLICKED != e)
+               return;
+
+       if(NULL == btn)
+               return;
+       
+       lv_obj_t * par = lv_obj_get_parent((lv_obj_t*)btn);
+       if(NULL == par)
+               return;
+
+       lv_obj_del(btn);
+
+       testing_st = FAC_HEART;
+       HX3918_test(FT_LEAK_LIGHT_MODE);
+       s_sensor_counter = 0;
+
+       lv_obj_t * label = lv_label_create(par, NULL);
+       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
+       lv_label_set_long_mode(label, LV_LABEL_LONG_BREAK);
+       lv_obj_set_width(label, LV_HOR_RES - 40);
+       lv_obj_set_pos(label, 20, LV_VER_RES / 4);
+
+       char str[64]= {0};
+       sprintf(str, "%s: ", (char *)lv_lang_get_text(WATCH_TEXT_ID_LIGHT_LEAK_DATA));
+       lv_label_set_text(label,str);
+
+       lv_anim_path_t path;
+       lv_anim_path_init(&path);
+       lv_anim_path_set_cb(&path, lv_anim_path_step);
+
+       lv_anim_t a;
+       lv_anim_init(&a);
+       lv_anim_set_var(&a, label);
+       lv_anim_set_start_cb(&a, (lv_anim_ready_cb_t)mmi_factorymode_light_leak_test_status_update);
+       lv_anim_set_time(&a, 1);
+       lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
+       lv_anim_set_delay(&a,1000);
+       lv_anim_set_repeat_delay(&a, 1000);
+       lv_anim_start(&a);
+}
+       
+static lv_obj_t * mmi_factorymode_light_leak_test_create(lv_obj_t * activity_obj)
+{
+       if(activity_obj == NULL) {
+               lv_watch_activity_ext_t activity_ext;
+               memset(&activity_ext, 0, sizeof(lv_watch_activity_ext_t));
+               activity_ext.actId = ACT_ID_FACTORY_MODE_TEST;
+               activity_ext.create = mmi_factorymode_light_leak_test_create;
+               activity_ext.prepare_destory = factorymode_test_prepare_destory;
+               activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+               LV_ASSERT_MEM(activity_obj);
+               if(NULL == activity_obj) {
+                       return NULL;
+               }
+       }
+
+       lv_obj_t * obj = lv_watch_obj_create(activity_obj);
+       LV_ASSERT_MEM(obj);
+       if(NULL == obj)
+               return NULL;
+
+       lv_obj_t * content = lv_cont_create(obj, NULL);
+       lv_obj_set_size(content, lv_obj_get_width(obj), lv_obj_get_height(obj));
+       lv_obj_add_style(content,LV_OBJ_PART_MAIN, &lv_watch_style_transp);
+       lv_obj_align(content, NULL, LV_ALIGN_CENTER, 0, 0);
+       lv_obj_set_click(content, false);
+
+       lv_obj_t * btn_start = lv_btn_create(content, NULL);
+       lv_obj_set_size(btn_start, LV_HOR_RES * 2 / 3, 40);
+       lv_obj_set_event_cb(btn_start, mmi_factorymode_light_leak_event_cb);
+       lv_obj_align(btn_start, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -10);
+       
+       lv_obj_t * label_start = lv_label_create(btn_start, NULL);
+       lv_label_set_text_id(label_start, WATCH_TEXT_ID_START_TEST);
+       lv_obj_add_style(label_start,LV_OBJ_PART_MAIN, &lv_watch_font20);
+       lv_label_set_align(label_start, LV_LABEL_ALIGN_CENTER);
+       lv_obj_align(label_start, NULL, LV_ALIGN_CENTER, 0, 0);
+
+       
+       lv_obj_t * label_prompt = lv_label_create(content, NULL);
+       lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font26);
+       lv_label_set_text_id(label_prompt, WATCH_TEXT_ID_LIVE_CALIBRATION_PROMPT);
+       lv_obj_set_width(label_prompt, LV_HOR_RES - 40);
+       lv_obj_align(label_prompt, btn_start, LV_ALIGN_OUT_TOP_MID, 0, -10);
+
+       return obj;
+}
+
+void mmi_factorymode_light_leak_test_create_btn_cb(lv_obj_t * btn,lv_event_t e)
+{
+    if(e == LV_EVENT_CLICKED)
+       {
+        mmi_factorymode_light_leak_test_create(NULL);
+    }
+}
+#endif
+
+static void mmi_factorymode_heart_test_status_update(lv_anim_t * anim)
 {
     char str[32]= {0};
-    uint16_t spo2_value = 0;
+    uint16_t hr_value = 0;
        
-       mmi_hsensor_spo2_value_get(&spo2_value);
-    sprintf(str, "%s: %d%%", (char *)lv_lang_get_text(WATCH_TEXT_ID_BLOOD_OXYGEN), spo2_value);
+       mmi_hsensor_heart_value_get(&hr_value);
+    sprintf(str, "%s:\n    %d bpm", (char *)lv_lang_get_text(WATCH_TEXT_ID_HEART_RATE), hr_value);
     lv_label_set_text(anim->var, str);
 }
 
-static lv_obj_t * mmi_factorymode_spo2_test_create(lv_obj_t * activity_obj)
+static lv_obj_t * mmi_factorymode_heart_test_create(lv_obj_t * activity_obj)
 {
     lv_obj_t * obj;
     if(activity_obj == NULL) {
         lv_watch_activity_ext_t activity_ext;
         memset(&activity_ext, 0, sizeof(lv_watch_activity_ext_t));
         activity_ext.actId = ACT_ID_FACTORY_MODE_TEST;
-        activity_ext.create = mmi_factorymode_spo2_test_create;
+        activity_ext.create = mmi_factorymode_heart_test_create;
         activity_ext.prepare_destory = factorymode_test_prepare_destory;
         activity_obj = lv_watch_creat_activity_obj(&activity_ext);
         LV_ASSERT_MEM(activity_obj);
@@ -1877,8 +2148,8 @@ static lv_obj_t * mmi_factorymode_spo2_test_create(lv_obj_t * activity_obj)
     lv_obj_align(content, NULL, LV_ALIGN_CENTER, 0, 0);
     lv_obj_set_click(content, false);
 
-    testing_st = FAC_SPO2;
-       mmi_hsensor_spo2_open();
+    testing_st = FAC_HEART;
+       mmi_hsensor_heart_open();
 
     lv_obj_t * label = lv_label_create(content, NULL);
 #if USE_LV_WATCH_UI_360_360
@@ -1887,14 +2158,14 @@ static lv_obj_t * mmi_factorymode_spo2_test_create(lv_obj_t * activity_obj)
     lv_obj_set_pos(label, 30, 105);
 #else
     lv_obj_add_style(label,LV_OBJ_PART_MAIN, &lv_watch_font26);
-    lv_obj_set_width(label,LV_HOR_RES - 40);
+    lv_obj_set_width(label,LV_HOR_RES-40);
     lv_obj_set_pos(label, 20, 70);
 #endif
 
     char str[32]= {0};
 
-    sprintf(str, "%s: ", (char *)lv_lang_get_text(WATCH_TEXT_ID_BLOOD_OXYGEN));
-    lv_label_set_text(label, str);
+    sprintf(str, "%s: ", (char *)lv_lang_get_text(WATCH_TEXT_ID_HEART_RATE));
+    lv_label_set_text(label,str);
 
     lv_anim_path_t path;
     lv_anim_path_init(&path);
@@ -1903,7 +2174,7 @@ static lv_obj_t * mmi_factorymode_spo2_test_create(lv_obj_t * activity_obj)
     lv_anim_t a;
     lv_anim_init(&a);
     lv_anim_set_var(&a, label);
-    lv_anim_set_start_cb(&a, (lv_anim_ready_cb_t)mmi_factorymode_spo2_test_status_update);
+    lv_anim_set_start_cb(&a, (lv_anim_ready_cb_t)mmi_factorymode_heart_test_status_update);
     lv_anim_set_time(&a, 1);
     lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
     lv_anim_set_delay(&a,1000);
@@ -1913,82 +2184,33 @@ static lv_obj_t * mmi_factorymode_spo2_test_create(lv_obj_t * activity_obj)
     return obj;
 }
 
-void mmi_factorymode_spo2_test_create_btn_cb(lv_obj_t * btn,lv_event_t e)
+void mmi_factorymode_heart_test_create_btn_cb(lv_obj_t * btn,lv_event_t e)
 {
     if(e == LV_EVENT_CLICKED) {
-        mmi_factorymode_spo2_test_create(NULL);
+        mmi_factorymode_heart_test_create(NULL);
     }
 }
-#endif
-
-#if USE_HX3918
-
-#include "../../..//lv_drivers/indev/HX3918/hx3918.h"
-
-#include "../../../lv_drivers/indev/HX3918/hx3918_factory_test.h"
-extern factory_result_t factory_reslts;
-extern int ir_wear ;//红外佩戴状态
-extern int cap_wear ;//电容佩戴状态
-extern unsigned char s_HX3918_wear_status ;//佩戴状态
-#ifdef  SAR_ALG_LIB
-extern int16_t nv_wear_offset[2] ;    // 芯片产测校准的两个通道的OFFSET值, 值记录在fash里面
-extern int16_t nv_base_data[2];     // 芯片产测校准的两个通道的对空LP值, 值记录在flash里面
-//lp[0],bl[0],lp[1],bl[1],gdiff[0]
-extern int16_t glp[2] ;
-extern int16_t gbl[2];
-extern int16_t gdiff[2];
-#else
- int16_t nv_wear_offset[2] ;    // 芯片产测校准的两个通道的OFFSET值, 值记录在fash里面
- int16_t nv_base_data[2];     // 芯片产测校准的两个通道的对空LP值, 值记录在flash里面
-//lp[0],bl[0],lp[1],bl[1],gdiff[0]
- int16_t glp[2] ;
- int16_t gbl[2];
- int16_t gdiff[2];
-#endif
 
-char HX3918_close_count = 0;
-static void mmi_factorymode_hanging_cali_status_update(lv_anim_t * anim)
+// spo2
+#ifdef __MMI_HEALTH_MEASURE_SPO2_SUPPORT__
+static void mmi_factorymode_spo2_test_status_update(lv_anim_t * anim)
 {
-    char str[320]= {0};
+    char str[32]= {0};
     uint16_t spo2_value = 0;
-       int HX3918_wear_status = 
-    //mmi_hsensor_measure_value_get(NULL, NULL, NULL, &spo2_value);
-    //sprintf(str, "%s : %d%%", (char *)lv_lang_get_text(WATCH_TEXT_ID_BLOOD_OXYGEN), spo2_value);
-    sprintf(str, "佩戴状态 :\n红外:%d活体:%d佩戴:%d\ngdiff:%d,%d\n校准数据:\n%d,%d,%d,%d\n漏光数据:\n%d,%d,%d",  
-                        ir_wear,cap_wear,s_HX3918_wear_status,gdiff[0],gdiff[1],nv_wear_offset[0],nv_wear_offset[1],
-                        nv_base_data[0],nv_base_data[1],factory_reslts.green_data_final,factory_reslts.red_data_final,factory_reslts.ir_data_final);
+       
+       mmi_hsensor_spo2_value_get(&spo2_value);
+    sprintf(str, "%s:\n    %d%%", (char *)lv_lang_get_text(WATCH_TEXT_ID_BLOOD_OXYGEN), spo2_value);
     lv_label_set_text(anim->var, str);
-    if(HX3918_close_count)
-    {
-        HX3918_close_count -- ;
-        if(HX3918_close_count == 0)
-            hx3918_measure_stop();
-    }
-}
-static void factorymode_hanging_cali_btn_event_cb(lv_obj_t * btn, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED == e)
-    {
-        HX3918_test(255);
-        HX3918_close_count = 3;
-    }
-}
-static void factorymode_reslts_label_btn_event_cb(lv_obj_t * btn, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED == e)
-    {
-        HX3918_test(FT_LEAK_LIGHT_MODE);
-        HX3918_close_count = 3;
-    }
 }
-static lv_obj_t * mmi_factorymode_hanging_cali_create(lv_obj_t * activity_obj)
+
+static lv_obj_t * mmi_factorymode_spo2_test_create(lv_obj_t * activity_obj)
 {
     lv_obj_t * obj;
     if(activity_obj == NULL) {
         lv_watch_activity_ext_t activity_ext;
         memset(&activity_ext, 0, sizeof(lv_watch_activity_ext_t));
         activity_ext.actId = ACT_ID_FACTORY_MODE_TEST;
-        activity_ext.create = mmi_factorymode_hanging_cali_create;
+        activity_ext.create = mmi_factorymode_spo2_test_create;
         activity_ext.prepare_destory = factorymode_test_prepare_destory;
         activity_obj = lv_watch_creat_activity_obj(&activity_ext);
         LV_ASSERT_MEM(activity_obj);
@@ -2003,50 +2225,28 @@ static lv_obj_t * mmi_factorymode_hanging_cali_create(lv_obj_t * activity_obj)
         return NULL;
     }
     lv_obj_t * content = lv_cont_create(obj, NULL);
-    //lv_obj_set_size(content, lv_obj_get_width(obj), lv_obj_get_height(obj));
-    lv_obj_set_size(content, LV_HOR_RES, LV_VER_RES);
+    lv_obj_set_size(content, lv_obj_get_width(obj), lv_obj_get_height(obj));
     lv_obj_add_style(content,LV_OBJ_PART_MAIN, &lv_watch_style_transp);
     lv_obj_align(content, NULL, LV_ALIGN_CENTER, 0, 0);
     lv_obj_set_click(content, false);
 
     testing_st = FAC_SPO2;
-    // mmi_hsensor_measure_stop();
-       // mmi_hsensor_spo2_measure_start();
-    
-    lv_obj_t * SAR_btn = lv_btn_create(content, NULL);
-    lv_obj_set_pos(SAR_btn, 0, LV_VER_RES-50);
-    lv_obj_set_size(SAR_btn, LV_HOR_RES / 2, 40);
-    //lv_watch_set_free_num(start_btn, num);
-    lv_obj_t * SAR_label = lv_label_create(SAR_btn, NULL);
-    //lv_label_set_text_id(SAR_label, WATCH_TEXT_ID_START_TEST);
-    lv_label_set_text(SAR_label, "活体校准");
-    lv_obj_add_style(SAR_label, LV_LABEL_PART_MAIN, &lv_watch_font26); // &lv_watch_font30);
-    //lv_obj_align(SAR_btn, NULL, LV_ALIGN_IN_TOP_MID, 0, 80);
-    lv_obj_set_event_cb(SAR_btn, factorymode_hanging_cali_btn_event_cb);
-
-    lv_obj_t * reslts_btn = lv_btn_create(content, NULL);
-    lv_obj_set_pos(reslts_btn, LV_HOR_RES / 2, LV_VER_RES-50);
-    lv_obj_set_size(reslts_btn, LV_HOR_RES / 2, 40);
-    //lv_watch_set_free_num(start_btn, num);
-    lv_obj_t * reslts_label = lv_label_create(reslts_btn, NULL);
-    //lv_label_set_text_id(reslts_label, WATCH_TEXT_ID_START_TEST ;
-    lv_label_set_text(reslts_label, "漏光测试" );
-    lv_obj_add_style(reslts_label, LV_LABEL_PART_MAIN, &lv_watch_font26); // &lv_watch_font30 );
-    //lv_obj_align(reslts_btn, NULL, LV_ALIGN_IN_TOP_MID, 0, 80);
-    lv_obj_set_event_cb(reslts_btn, factorymode_reslts_label_btn_event_cb);
+       mmi_hsensor_spo2_open();
 
     lv_obj_t * label = lv_label_create(content, NULL);
-    lv_obj_add_style(label,LV_OBJ_PART_MAIN, &lv_watch_font20); // &lv_watch_font26);
-    //lv_obj_set_width(label,240 - 10);
-    lv_obj_set_size(label, LV_HOR_RES - 10, 240);
-    lv_obj_set_pos(label, 5, 10);
+#if USE_LV_WATCH_UI_360_360
+    lv_obj_add_style(label,LV_OBJ_PART_MAIN, &lv_watch_font30);
+    lv_obj_set_width(label,LV_HOR_RES-60);
+    lv_obj_set_pos(label, 30, 105);
+#else
+    lv_obj_add_style(label,LV_OBJ_PART_MAIN, &lv_watch_font26);
+    lv_obj_set_width(label,LV_HOR_RES - 40);
+    lv_obj_set_pos(label, 20, 70);
+#endif
 
-     //lv_label_set_long_mode(label, LV_LABEL_LONG_BREAK);
-    char str[320]= {0};
-    uint16_t spo2_value = 0;
-    mmi_hsensor_measure_value_get(NULL, NULL, NULL, &spo2_value);
-    sprintf(str, "佩戴状态 :\n 红外:0活体:0佩戴:0\n0,0\n校准数据:0,0,0,0\n漏光数据:0,0,0,0" 
-                        );
+    char str[32]= {0};
+
+    sprintf(str, "%s: ", (char *)lv_lang_get_text(WATCH_TEXT_ID_BLOOD_OXYGEN));
     lv_label_set_text(label, str);
 
     lv_anim_path_t path;
@@ -2056,24 +2256,24 @@ static lv_obj_t * mmi_factorymode_hanging_cali_create(lv_obj_t * activity_obj)
     lv_anim_t a;
     lv_anim_init(&a);
     lv_anim_set_var(&a, label);
-    lv_anim_set_start_cb(&a, (lv_anim_ready_cb_t)mmi_factorymode_hanging_cali_status_update);
+    lv_anim_set_start_cb(&a, (lv_anim_ready_cb_t)mmi_factorymode_spo2_test_status_update);
     lv_anim_set_time(&a, 1);
     lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
     lv_anim_set_delay(&a,1000);
     lv_anim_set_repeat_delay(&a, 1000);
     lv_anim_start(&a);
 
-    
-
     return obj;
 }
-void mmi_factorymode_hanging_cali_create_btn_cb(lv_obj_t * btn,lv_event_t e)
+
+void mmi_factorymode_spo2_test_create_btn_cb(lv_obj_t * btn,lv_event_t e)
 {
     if(e == LV_EVENT_CLICKED) {
-        mmi_factorymode_hanging_cali_create(NULL);
+        mmi_factorymode_spo2_test_create(NULL);
     }
 }
 #endif
+
 #endif
 #endif