k18 pulse wave
author@CHENG <2393524978@qq.com>
Wed, 27 Nov 2024 08:53:33 +0000 (16:53 +0800)
committer@CHENG <2393524978@qq.com>
Wed, 27 Nov 2024 08:53:33 +0000 (16:53 +0800)
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_nvm_interface.h
2.sdk/sdk/gui/lv_watch/include/ui_textid.h
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.c
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
2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.c

index 1d0c4e3..eb3ee8a 100644 (file)
@@ -995,6 +995,8 @@ const void * lang_text_ch[] = {
     "暂无数据", // WATCH_TEXT_ID_NO_DATA_NOW,
     "更多详细信息请前往手机APP查看", // WATCH_TEXT_ID_DETAIL_INFO_IN_APP,
     "天线耦合", // WATCH_TEXT_ID_ANTENNA_COUPLING,
+    "脉搏波测试", // WATCH_TEXT_ID_PULSE_WAVE_TEST,
+    "测试时请保持静止", // WATCH_TEXT_ID_PULSE_WAVE_PROMPT,
 
     //CHENG_MODIFY
     "确认是否跌倒?", // WATCH_TEXT_ID_falldown,
index a692fb5..873e636 100644 (file)
@@ -996,6 +996,8 @@ const void * lang_text_en[] = {
     "No data", // WATCH_TEXT_ID_NO_DATA_NOW,
     "For more details, please view in the APP", // WATCH_TEXT_ID_DETAIL_INFO_IN_APP,
     "Antenna coupling", // WATCH_TEXT_ID_ANTENNA_COUPLING,
+    "pulse wave", // WATCH_TEXT_ID_PULSE_WAVE_TEST,
+    "Keep still", // WATCH_TEXT_ID_PULSE_WAVE_PROMPT,
 
     //CHENG_MODIFY
     "Confirm a fall",
index b8d0298..90c303b 100644 (file)
@@ -197,6 +197,10 @@ typedef struct
        uint32_t blood_timed_interval; // unit-second
        uint8_t spo2_timed_flag; // 0-close; 1-open
        uint32_t spo2_timed_interval; // unit-second
+#if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+       uint8_t micro_checkup_timed_flag; // 0-close; 1-open
+       uint32_t micro_checkup_timed_interval; // unit-second
+#endif
 } __packed nv_watch_health_measure_timed_t;
 #endif
 
index c1f559f..ed68a11 100644 (file)
@@ -1003,6 +1003,8 @@ enum
     WATCH_TEXT_ID_NO_DATA_NOW,                          /* "暂无数据"                 "No data" */
     WATCH_TEXT_ID_DETAIL_INFO_IN_APP,                   /* "更多详细信息请前往手机APP查看"      "For more details, please view in the APP" */
     WATCH_TEXT_ID_ANTENNA_COUPLING,                     /* "天线耦合"      "Antenna coupling" */
+    WATCH_TEXT_ID_PULSE_WAVE_TEST,                      /* "脉搏波测试"                     "pulse wave" */
+    WATCH_TEXT_ID_PULSE_WAVE_PROMPT,                    /* "测试时请保持静止"                  "Keep still" */
 
     //CHENG_MODIFY
     WATCH_TEXT_ID_FALLDWON,                            /*确认是否跌倒*/
index 78168ca..1b740e3 100644 (file)
@@ -374,12 +374,13 @@ static int mmi_hengai_bp_measure_line_update(lv_obj_t * line)
                //s_line_point_array[i].y = s_line_y_array_ptr[i] / y_step_value + BP_OBJ_LINE_CONT_H / 2;
                if(0 > s_line_y_array_ptr[i])
                {
-                       s_line_point_array[i].y = (BP_OBJ_LINE_CONT_H / 2) - (lv_coord_t)(BP_ABS(s_line_y_array_ptr[i]) / y_step_value);
+                       //s_line_point_array[i].y = (BP_OBJ_LINE_CONT_H / 2) - (lv_coord_t)(BP_ABS(s_line_y_array_ptr[i]) / y_step_value);
+                       s_line_point_array[i].y = (BP_OBJ_LINE_CONT_H / 2) + (lv_coord_t)(BP_ABS(s_line_y_array_ptr[i]) / y_step_value);
                }
                else
                {
-                       //s_line_point_array[i].y = (BP_OBJ_LINE_CONT_H / 4) + (s_line_y_array_ptr[i] / y_step_value);
-                       s_line_point_array[i].y = (BP_OBJ_LINE_CONT_H / 2) + (s_line_y_array_ptr[i] / y_step_value);
+                       //s_line_point_array[i].y = (BP_OBJ_LINE_CONT_H / 2) + (s_line_y_array_ptr[i] / y_step_value);
+                       s_line_point_array[i].y = (BP_OBJ_LINE_CONT_H / 2) - (s_line_y_array_ptr[i] / y_step_value);
                }
        }
     lv_line_set_points(line, s_line_point_array, temp_len);
@@ -2840,9 +2841,15 @@ void mmi_hengai_micro_health_checkup_start(void)
 void mmi_hengai_micro_health_checkup_set(uint8_t state_value)
 {
        if(0 == state_value)
-               mmi_health_measure_interrupt();
+       {
+               //mmi_health_measure_interrupt();
+               mmi_health_measure_server_set_action(MMI_HEALTH_MEASURE_MICRO_CHECKUP, 0);
+       }
        else
-               mmi_health_measure_server_set_action(MMI_HEALTH_MEASURE_MICRO_CHECKUP, 1);
+       {
+               //mmi_health_measure_server_set_action(MMI_HEALTH_MEASURE_MICRO_CHECKUP, 1);
+               mmi_health_measure_server_set_action(MMI_HEALTH_MEASURE_MICRO_CHECKUP, 3600);
+       }
 }
 #endif
 
index c1234c3..733cb7b 100644 (file)
@@ -88,11 +88,12 @@ typedef struct {
     uint8_t module;
     bool istest[AUTOTEST_ITEM_NUM];
     lv_obj_t *label_key_state;  //valid when 'module' is AUTOTEST_PRESS_KEY
-#ifdef __MMI_ZHSX_SUPPORT__
+#if 1 // def __MMI_ZHSX_SUPPORT__
        lv_obj_t * cont_key_power;
     lv_obj_t * cont_key_back;
        lv_obj_t * label_prompt;
        TIMER_ID cycle_timer_id;
+       lv_obj_t * line;
 #endif
     uint8_t * buffer;
     uint32_t buffer_size;
@@ -213,6 +214,13 @@ void mmi_factorymode_light_leak_test_create_btn_cb(lv_obj_t * btn,lv_event_t e);
 #if USE_FR8012HAQ
 void mmi_factorymode_light_leak_test_create_btn_cb(lv_obj_t * btn,lv_event_t e);
 void mmi_factorymode_bt_ota_mode_create_btn_cb(lv_obj_t * btn,lv_event_t e);
+
+#ifndef __PULSE_WAVE_REAL_TIME_UI__
+#define __PULSE_WAVE_REAL_TIME_UI__
+#endif
+#ifdef __PULSE_WAVE_REAL_TIME_UI__
+void mmi_factorymode_pulse_wave_test_create_btn_cb(lv_obj_t * btn,lv_event_t e);
+#endif
 #endif
 void mmi_factorymode_heart_test_create_btn_cb(lv_obj_t * btn,lv_event_t e);
 #ifdef __MMI_HEALTH_MEASURE_SPO2_SUPPORT__
index ddca9bf..7db04ee 100644 (file)
@@ -93,6 +93,9 @@ const struct {
        #endif
        #if USE_FR8012HAQ
        { WATCH_TEXT_ID_LIGHT_LEAK_TEST, mmi_factorymode_light_leak_test_create_btn_cb },
+       #ifdef __PULSE_WAVE_REAL_TIME_UI__
+       { WATCH_TEXT_ID_PULSE_WAVE_TEST, mmi_factorymode_pulse_wave_test_create_btn_cb },
+       #endif
        #endif
        { WATCH_TEXT_ID_HEART_TEST, mmi_factorymode_heart_test_create_btn_cb },
        #ifdef __MMI_HEALTH_MEASURE_SPO2_SUPPORT__
index 9118383..8842788 100644 (file)
@@ -35,6 +35,9 @@ enum {
     FAC_SPO2,
        #endif
        #endif
+       #ifdef __PULSE_WAVE_REAL_TIME_UI__
+       FAC_PULSE_WAVE,
+       #endif
 #endif
 #else
     HEART_RATE,
@@ -126,6 +129,10 @@ static lv_obj_t * factorymode_agetest_create(lv_obj_t * activity_obj);
 static void factorymode_agetest_lcd_test_create(void *param);
 static void factory_agetest_lcdcolor_timer_func(void * param);
 static void factorymode_antenna_coupling_test_stop(void);
+#ifdef __PULSE_WAVE_REAL_TIME_UI__             
+static void mmi_factorymode_pulse_wave_test_ui_data_deinit(void);
+static void mmi_factorymode_pulse_wave_event_cb(lv_obj_t * btn, lv_event_t e);
+#endif
 
 /**********************
  *  STATIC VARIABLES
@@ -180,6 +187,12 @@ static void factorymode_test_prepare_destory(lv_obj_t * activity_obj)
                        break;
                #endif
                #endif
+               #ifdef __PULSE_WAVE_REAL_TIME_UI__              
+               case FAC_PULSE_WAVE:
+                       mmi_hsensor_close();
+                       mmi_factorymode_pulse_wave_test_ui_data_deinit();
+                       break;
+               #endif
        #endif
 #else
         case HEART_RATE:
@@ -225,6 +238,11 @@ static void factorymode_test_prepare_destory(lv_obj_t * activity_obj)
             Hal_Timer_Stop(fac_ext->timer);
             fac_ext->timer = NULL;
         }
+        if(NULL != fac_ext->cycle_timer_id)
+               {
+            Hal_Timer_Stop(fac_ext->cycle_timer_id);
+            fac_ext->cycle_timer_id = NULL;
+        }
     }
 }
 
@@ -2354,6 +2372,325 @@ void mmi_factorymode_bt_ota_mode_create_btn_cb(lv_obj_t * btn,lv_event_t e)
     }
 }
 
+
+
+#ifdef __PULSE_WAVE_REAL_TIME_UI__
+
+#define PULSE_WAVE_ABS(x) (((x) < 0) ? (-(x)) : (x))
+#define PULSE_WAVE_TOTAL_COUNT (56)
+#define PULSE_WAVE_DATA_SECOND_NUM (2)
+#define PULSE_WAVE_POINT_NUM_MAX (MMI_HENGAI_BP_RAW_DATA_SAMPLE_RATE * PULSE_WAVE_DATA_SECOND_NUM)
+#define PULSE_WAVE_LINE_CONT_W (340)
+#define PULSE_WAVE_LINE_CONT_H (360) // (400)
+
+static lv_point_t s_line_point_array[PULSE_WAVE_POINT_NUM_MAX] = {0};
+static int s_last_raw_data_len = 0;
+static int * s_line_y_array_ptr = NULL;
+static int s_current_raw_data_len = 0;
+static unsigned char s_update_counter = 0;
+static unsigned char s_total_counter = 0;
+
+static void mmi_factorymode_pulse_wave_test_ui_data_init(void)
+{
+       _lv_memset_00(s_line_point_array, sizeof(lv_point_t) * PULSE_WAVE_POINT_NUM_MAX);
+
+       s_last_raw_data_len = 0;
+       s_current_raw_data_len = 0;
+       s_update_counter = 0;
+       
+       if(NULL != s_line_y_array_ptr)
+       {
+               lv_mem_free(s_line_y_array_ptr);
+               s_line_y_array_ptr = NULL;
+       }
+       s_line_y_array_ptr = (int *)lv_mem_alloc(sizeof(int) * PULSE_WAVE_POINT_NUM_MAX);
+       _lv_memset_00(s_line_y_array_ptr, sizeof(int) * PULSE_WAVE_POINT_NUM_MAX);
+}
+
+static void mmi_factorymode_pulse_wave_test_ui_data_deinit(void)
+{
+       if(NULL != s_line_y_array_ptr)
+       {
+               lv_mem_free(s_line_y_array_ptr);
+               s_line_y_array_ptr = NULL;
+       }
+}
+
+static int mmi_factorymode_pulse_wave_test_line_update(lv_obj_t * line)
+{
+       int * temp_ptr = NULL;
+       int temp_len = 0;
+       unsigned int i = 0;
+       int temp_value = 0;
+       unsigned int x_step_value = 0;
+       unsigned int y_step_value = 0;
+
+       if(NULL == line)
+       {
+               return -1;
+       }
+
+       if(NULL == s_line_y_array_ptr)
+       {
+               s_line_y_array_ptr = (int *)lv_mem_alloc(sizeof(int) * PULSE_WAVE_POINT_NUM_MAX);
+       }
+       _lv_memset_00(s_line_y_array_ptr, sizeof(int) * PULSE_WAVE_POINT_NUM_MAX);
+
+       temp_ptr = fr8012haq_blood_data_get(&s_current_raw_data_len);
+       temp_len = s_current_raw_data_len - s_last_raw_data_len;
+       if(0 >= temp_len)
+               return -2;
+       if(PULSE_WAVE_POINT_NUM_MAX < temp_len)
+               temp_len = PULSE_WAVE_POINT_NUM_MAX;
+       _lv_memcpy(s_line_y_array_ptr, temp_ptr + s_last_raw_data_len, sizeof(int) * temp_len);
+       s_last_raw_data_len = s_current_raw_data_len;
+
+       temp_value = s_line_y_array_ptr[0];
+       for(i = 0; i < temp_len; i++)
+       {
+               if(PULSE_WAVE_ABS(temp_value) < PULSE_WAVE_ABS(s_line_y_array_ptr[i]))
+               {
+                       temp_value = s_line_y_array_ptr[i];
+               }
+       }
+       y_step_value = PULSE_WAVE_ABS(temp_value) / (PULSE_WAVE_LINE_CONT_H / 2 - 10);
+       x_step_value = PULSE_WAVE_LINE_CONT_W / temp_len;
+       for(i = 0; i < temp_len; i++)
+       {
+               if(0 < i)
+                       s_line_point_array[i].x = s_line_point_array[i-1].x + x_step_value;
+               else
+                       s_line_point_array[i].x = 5;
+               
+               if(0 > s_line_y_array_ptr[i])
+               {
+                       //s_line_point_array[i].y = (PULSE_WAVE_LINE_CONT_H / 2) - (lv_coord_t)(PULSE_WAVE_ABS(s_line_y_array_ptr[i]) / y_step_value);
+                       s_line_point_array[i].y = (PULSE_WAVE_LINE_CONT_H / 2) + (lv_coord_t)(PULSE_WAVE_ABS(s_line_y_array_ptr[i]) / y_step_value);
+               }
+               else
+               {
+                       //s_line_point_array[i].y = (PULSE_WAVE_LINE_CONT_H / 2) + (s_line_y_array_ptr[i] / y_step_value);
+                       s_line_point_array[i].y = (PULSE_WAVE_LINE_CONT_H / 2) - (s_line_y_array_ptr[i] / y_step_value);
+               }
+       }
+    lv_line_set_points(line, s_line_point_array, temp_len);
+
+       return 0;
+}
+
+static lv_obj_t * mmi_factorymode_pulse_wave_test_line_create(lv_obj_t * par)
+{      
+       lv_obj_t * cont = lv_chart_create(par, NULL);
+       lv_obj_set_style_local_bg_color(cont, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); // LV_COLOR_WHITE);
+
+       lv_obj_set_size(cont, PULSE_WAVE_LINE_CONT_W, PULSE_WAVE_LINE_CONT_H);
+       lv_obj_set_click(cont, false);
+
+       lv_obj_align(cont, NULL, LV_ALIGN_CENTER, 0, 0);
+
+       lv_obj_t * line = lv_line_create(cont, NULL);
+    lv_obj_set_style_local_line_color(line, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_RED);
+    lv_obj_set_style_local_line_width(line, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 2); // 1);
+    lv_obj_set_style_local_line_opa(line, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_100); // LV_OPA_50);
+    lv_line_set_points(line, s_line_point_array, PULSE_WAVE_POINT_NUM_MAX);
+
+       return line;
+}
+
+void mmi_factorymode_pulse_wave_test_auto_finish(void)
+{
+       mmi_hsensor_close();
+
+       mmi_factorymode_pulse_wave_test_ui_data_deinit();
+
+       lv_factory_obj_ext_t * ext = factorymode_get_ext();
+       if(NULL == ext)
+               return;
+
+    if(NULL != ext->cycle_timer_id)
+       {
+        Hal_Timer_Stop(ext->cycle_timer_id);
+        ext->cycle_timer_id = NULL;
+    }
+       
+       //lv_watch_del_top_interface();
+
+       lv_obj_t * par_line = lv_obj_get_parent(ext->line);
+       if(NULL == par_line)
+               return;
+       lv_obj_t * par_cont = lv_obj_get_parent(par_line);
+       if(NULL == par_cont)
+               return;
+       lv_obj_clean(par_cont);
+
+       lv_obj_t * label_prompt = lv_label_create(par_cont, NULL);
+       lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &FACTORY_MODE_TEST_ITEM_TEXT_FONT_BIG);
+       lv_label_set_align(label_prompt, LV_LABEL_ALIGN_CENTER);
+       lv_label_set_text_id(label_prompt, WATCH_TEXT_ID_MEASURE_DONE);
+       lv_obj_align(label_prompt, NULL, LV_ALIGN_CENTER, 0, -25);
+       lv_obj_set_click(label_prompt, false);
+       
+       lv_obj_t * btn_start = lv_btn_create(par_cont, NULL);
+       lv_obj_set_size(btn_start, LV_HOR_RES / 2, LV_HOR_RES / 6);
+       lv_obj_set_event_cb(btn_start, mmi_factorymode_pulse_wave_event_cb);
+       lv_obj_align(btn_start, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -LV_VER_RES / 8);
+       
+       lv_obj_t * label_start = lv_label_create(btn_start, NULL);
+       lv_label_set_text_id(label_start, WATCH_TEXT_ID_RETEST);
+       lv_obj_add_style(label_start,LV_OBJ_PART_MAIN, &FACTORY_MODE_TEST_ITEM_TEXT_FONT);
+       lv_label_set_align(label_start, LV_LABEL_ALIGN_CENTER);
+       lv_obj_align(label_start, NULL, LV_ALIGN_CENTER, 0, 0);
+}
+
+void mmi_factorymode_pulse_wave_test_cb(void * para)
+{
+       s_total_counter++;
+       if(PULSE_WAVE_TOTAL_COUNT <= s_total_counter) // stop action
+       {
+               mmi_factorymode_pulse_wave_test_auto_finish();
+       }
+       else
+       {
+               s_update_counter++;
+               if(PULSE_WAVE_DATA_SECOND_NUM <= s_update_counter)
+               {
+                       s_update_counter = 0;
+                       
+                       lv_factory_obj_ext_t * ext = factorymode_get_ext();
+                       if(NULL == ext)
+                               return;
+
+                       int ret = mmi_factorymode_pulse_wave_test_line_update(ext->line);
+                       if(0 == ret && NULL != ext->label_prompt)
+                       {
+                               lv_obj_del(ext->label_prompt);
+                               ext->label_prompt = NULL;
+                       }
+               }
+       }
+}
+
+static void mmi_factorymode_pulse_wave_event_cb(lv_obj_t * btn, lv_event_t e)
+{
+       if(LV_EVENT_CLICKED != e)
+               return;
+
+    lv_factory_obj_ext_t * ext = factorymode_get_ext();
+    if(NULL == ext)
+               return;
+       
+       if(NULL == btn)
+               return;
+       
+       lv_obj_t * par = lv_obj_get_parent((lv_obj_t*)btn);
+       if(NULL == par)
+               return;
+       lv_obj_clean(par);
+
+       testing_st = FAC_PULSE_WAVE;
+       mmi_hsensor_blood_open();
+
+       mmi_factorymode_pulse_wave_test_ui_data_init();
+
+       lv_obj_t * line = mmi_factorymode_pulse_wave_test_line_create(par);
+       ext->line = line;
+
+       lv_obj_t * label_prompt = lv_label_create(par, NULL);
+       lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &FACTORY_MODE_TEST_ITEM_TEXT_FONT_BIG);
+       lv_label_set_align(label_prompt, LV_LABEL_ALIGN_CENTER);
+       lv_label_set_text_id(label_prompt, WATCH_TEXT_ID_IN_MEASURE_PROMPT);
+       lv_obj_align(label_prompt, NULL, LV_ALIGN_CENTER, 0, -10);
+       lv_obj_set_click(label_prompt, false);
+       ext->label_prompt = label_prompt;
+
+       s_total_counter = 0;
+    if(NULL != ext->cycle_timer_id)
+       {
+        Hal_Timer_Stop(ext->cycle_timer_id);
+        ext->cycle_timer_id = NULL;
+    }
+       ext->cycle_timer_id = Hal_Timer_Start(1000, mmi_factorymode_pulse_wave_test_cb, NULL, true);
+}
+       
+static lv_obj_t * mmi_factorymode_pulse_wave_test_create(lv_obj_t * activity_obj)
+{
+       if(NULL == activity_obj)
+       {
+               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_pulse_wave_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_HOR_RES, LV_VER_RES); // 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);
+
+#if 1
+       lv_obj_t * label_prompt = lv_label_create(content, NULL);
+       lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &FACTORY_MODE_TEST_ITEM_TEXT_FONT);
+       lv_label_set_align(label_prompt, LV_LABEL_ALIGN_CENTER);
+       lv_label_set_long_mode(label_prompt, LV_LABEL_LONG_BREAK);
+       lv_obj_set_width(label_prompt, LV_HOR_RES * 2 / 3);
+       lv_label_set_text_id(label_prompt, WATCH_TEXT_ID_CALIBRATE_PROMPT_0);
+       lv_obj_align(label_prompt, NULL, LV_ALIGN_IN_TOP_MID, 0, LV_VER_RES / 4);
+
+       lv_obj_t * btn_start = lv_btn_create(content, NULL);
+       lv_obj_set_size(btn_start, LV_HOR_RES / 2, LV_HOR_RES / 6);
+       lv_obj_set_event_cb(btn_start, mmi_factorymode_pulse_wave_event_cb);
+       lv_obj_align(btn_start, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -LV_VER_RES / 8);
+
+       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, &FACTORY_MODE_TEST_ITEM_TEXT_FONT);
+       lv_label_set_align(label_start, LV_LABEL_ALIGN_CENTER);
+       lv_obj_align(label_start, NULL, LV_ALIGN_CENTER, 0, 0);
+
+#else
+       lv_obj_t * btn_start = lv_btn_create(content, NULL);
+       lv_obj_set_size(btn_start, LV_HOR_RES / 2, LV_HOR_RES / 6);
+       lv_obj_set_event_cb(btn_start, mmi_factorymode_pulse_wave_event_cb);
+       lv_obj_align(btn_start, NULL, LV_ALIGN_CENTER, 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, &FACTORY_MODE_TEST_ITEM_TEXT_FONT);
+       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, &FACTORY_MODE_TEST_ITEM_TEXT_FONT_BIG);
+    lv_label_set_long_mode(label_prompt, LV_LABEL_LONG_SROLL);
+    lv_obj_set_width(label_prompt, LV_HOR_RES * 5 / 6);
+       lv_label_set_text_id(label_prompt, WATCH_TEXT_ID_PULSE_WAVE_PROMPT);
+       lv_label_set_align(label_prompt, LV_LABEL_ALIGN_CENTER);
+       lv_obj_align(label_prompt, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -LV_VER_RES / 8);
+#endif
+
+       return obj;
+}
+
+void mmi_factorymode_pulse_wave_test_create_btn_cb(lv_obj_t * btn,lv_event_t e)
+{
+       if(LV_EVENT_CLICKED != e)
+               return;
+
+       mmi_factorymode_pulse_wave_test_create(NULL);
+}
+#endif
+
 #endif
 
 
index 9f1c0b2..8090dac 100644 (file)
@@ -15,6 +15,9 @@ 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;
 static uint32_t s_health_measure_spo2_timed_time_stamp = 0;
+#if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+static uint32_t s_health_measure_micro_checkup_timed_time_stamp = 0;
+#endif
 
 
 void mmi_hsensor_close(void)
@@ -292,6 +295,10 @@ void mmi_health_measure_timed_info_nv_default(nv_watch_health_measure_timed_t *
        data->blood_timed_interval = MMI_HEALTH_BLOOD_TIMED_INTERVAL;
        data->spo2_timed_flag = MMI_HEALTH_SPO2_TIMED_FLAG;
        data->spo2_timed_interval = MMI_HEALTH_SPO2_TIMED_INTERVAL;     
+#if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+       data->micro_checkup_timed_flag = 0;
+       data->micro_checkup_timed_interval = 0;
+#endif
 }
 
 void mmi_health_measure_timed_list_clear(void)
@@ -375,6 +382,12 @@ void mmi_health_measure_timed_time_stamp_set(MMI_HEALTH_MEASURE_TYPE_E measure_t
                        s_health_measure_spo2_timed_time_stamp = time_stamp;
                        break;
 
+       #if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+               case MMI_HEALTH_MEASURE_MICRO_CHECKUP:
+                       s_health_measure_micro_checkup_timed_time_stamp = time_stamp;
+                       break;
+       #endif
+
                default:
                        break;
        }
@@ -489,12 +502,43 @@ bool mmi_health_measure_spo2_timed_action(bool direct_trigger, uint32_t cur_time
        return false;
 }
 
+#if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+bool mmi_health_measure_micro_checkup_timed_action(bool direct_trigger, uint32_t cur_time_stamp)
+{
+       if(0 != s_health_measure_timed_data.micro_checkup_timed_flag)
+       {
+               if(true == direct_trigger 
+                       || s_health_measure_timed_data.micro_checkup_timed_interval <= (cur_time_stamp - s_health_measure_micro_checkup_timed_time_stamp)
+                       )
+               {
+                       if(true == direct_trigger)
+                       {
+                               s_health_measure_micro_checkup_timed_time_stamp = 0;
+                       }
+                       
+                       mmi_health_measure_timed_list_node_add(MMI_HEALTH_MEASURE_MICRO_CHECKUP);
+                       if(true == mmi_health_measure_timed_list_trigger(MMI_HEALTH_MEASURE_MICRO_CHECKUP))
+                       {
+                               mmi_health_measure_timed_time_stamp_set(MMI_HEALTH_MEASURE_MICRO_CHECKUP, cur_time_stamp);
+                       }
+
+                       return true;
+               }
+       }
+
+       return false;
+}
+#endif
+
 bool mmi_health_measure_timed_mission_action(uint32_t cur_time_stamp)
 {
        mmi_health_measure_heart_timed_action(false, cur_time_stamp);
        mmi_health_measure_temperature_timed_action(false, cur_time_stamp);
        mmi_health_measure_blood_timed_action(false, cur_time_stamp);
        mmi_health_measure_spo2_timed_action(false, cur_time_stamp);
+#if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+       mmi_health_measure_micro_checkup_timed_action(false, cur_time_stamp);
+#endif
        
        return true;
 }
@@ -505,6 +549,9 @@ bool mmi_health_measure_first_mission_action(uint32_t cur_time_stamp)
        mmi_health_measure_temperature_timed_action(true, cur_time_stamp);
        mmi_health_measure_blood_timed_action(true, cur_time_stamp);
        mmi_health_measure_spo2_timed_action(true, cur_time_stamp);
+#if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+       mmi_health_measure_micro_checkup_timed_action(true, cur_time_stamp);
+#endif
        
        return true;
 }
@@ -554,6 +601,17 @@ void mmi_health_measure_server_set_save(MMI_HEALTH_MEASURE_TYPE_E measure_type,
                        }
                        break;
 
+       #if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
+               case MMI_HEALTH_MEASURE_MICRO_CHECKUP:
+                       s_health_measure_timed_data.micro_checkup_timed_flag = flag;
+                       if(1 == flag)
+                       {
+                               s_health_measure_timed_data.micro_checkup_timed_interval = value_interval;
+                               mmi_health_measure_timed_time_stamp_set(MMI_HEALTH_MEASURE_MICRO_CHECKUP, cur_time_stamp);
+                       }
+                       break;
+       #endif
+
                default:
                        break;
        }
@@ -944,7 +1002,7 @@ static void mmi_health_measure_start(MMI_HEALTH_MEASURE_TYPE_E measure_type, uin
 
                #if defined(__MMI_CUSTOM_HENGAI_MICRO_HEALTH_CHECKUP__)
                        case MMI_HEALTH_MEASURE_MICRO_CHECKUP:
-                               s_measure_time_total = 0xffff;
+                               s_measure_time_total = 20 / MMI_HEALTH_MEASURE_CYCLE_DURATION; // 0xffff;
                                mmi_hsensor_blood_open();
                                mmi_hengai_micro_health_checkup_start();
                                break;