From: @CHENG <2393524978@qq.com> Date: Wed, 27 Nov 2024 08:53:33 +0000 (+0800) Subject: k18 pulse wave X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=20106857ff2b340a4ed4b6c3836fc430e27b3296;p=mirrors%2FASR3603_Z5.git k18 pulse wave --- diff --git a/2.sdk/sdk/gui/lv_watch/framework/language/lang_ch.c b/2.sdk/sdk/gui/lv_watch/framework/language/lang_ch.c index 1d0c4e3d..eb3ee8a4 100644 --- a/2.sdk/sdk/gui/lv_watch/framework/language/lang_ch.c +++ b/2.sdk/sdk/gui/lv_watch/framework/language/lang_ch.c @@ -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, diff --git a/2.sdk/sdk/gui/lv_watch/framework/language/lang_en.c b/2.sdk/sdk/gui/lv_watch/framework/language/lang_en.c index a692fb50..873e6361 100644 --- a/2.sdk/sdk/gui/lv_watch/framework/language/lang_en.c +++ b/2.sdk/sdk/gui/lv_watch/framework/language/lang_en.c @@ -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", diff --git a/2.sdk/sdk/gui/lv_watch/include/ui_nvm_interface.h b/2.sdk/sdk/gui/lv_watch/include/ui_nvm_interface.h index b8d02982..90c303bb 100644 --- a/2.sdk/sdk/gui/lv_watch/include/ui_nvm_interface.h +++ b/2.sdk/sdk/gui/lv_watch/include/ui_nvm_interface.h @@ -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 diff --git a/2.sdk/sdk/gui/lv_watch/include/ui_textid.h b/2.sdk/sdk/gui/lv_watch/include/ui_textid.h index c1f559fa..ed68a11c 100644 --- a/2.sdk/sdk/gui/lv_watch/include/ui_textid.h +++ b/2.sdk/sdk/gui/lv_watch/include/ui_textid.h @@ -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, /*确认是否跌倒*/ diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.c b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.c index 78168ca9..1b740e39 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.c +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.c @@ -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 diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode.h b/2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode.h index c1234c38..733cb7b5 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode.h +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode.h @@ -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__ diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode_main.c b/2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode_main.c index ddca9bf6..7db04ee8 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode_main.c +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode_main.c @@ -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__ diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode_test.c b/2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode_test.c index 91183835..8842788f 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode_test.c +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode_test.c @@ -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 diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.c b/2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.c index 9f1c0b2b..8090dacf 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.c +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.c @@ -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;