--- /dev/null
+
+
+
+#include "lv_watch.h"
+
+#ifdef __MMI_CUSTOM_HENG_AI_BLOOD_PRESSURE__
+
+static uint8_t s_hengai_bp_calibrated = 0; // 0-not calibrated; 1-calibrated
+static const lv_point_t s_hengai_bp_valid_pos[] = {{0, 0}, {1, 0}, {2, 0}};
+static uint8_t s_hengai_bp_measure_count = 0;
+static uint8_t s_hengai_bp_calibrate_times = 0;
+static uint16_t s_bp_value_high = 0, s_bp_value_low = 0;
+
+
+void mmi_heng_ai_bp_raw_data_save(void){}
+
+void mmi_heng_ai_bp_raw_data_send(void){}
+
+void mmi_heng_ai_bp_calibrate_input_value_send(void){}
+
+
+
+// 0-ring; 1-vibrator
+void mmi_heng_ai_wake_ring_type_set(uint8_t ring_type)
+{
+ nv_watch_switch_t ring_type_data = {0};
+ uint32_t nv_data_length = sizeof(nv_watch_switch_t);
+
+ ring_type_data.switch_flag = ring_type;
+ if(nv_data_length != UI_NV_Write_Req(NV_SECTION_UI_HENG_AI_WAKE_RING_TYPE, 0, nv_data_length, (uint8_t *)&ring_type_data))
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: nv write fail\n", __FUNCTION__, __LINE__);
+ }
+}
+
+uint8_t mmi_heng_ai_wake_ring_type_get(void)
+{
+ nv_watch_switch_t ring_type_data = {0};
+ uint32_t nv_data_length = sizeof(nv_watch_switch_t);
+
+ if(nv_data_length != UI_NV_Read_Req(NV_SECTION_UI_HENG_AI_WAKE_RING_TYPE, 0, nv_data_length, (uint8_t *)&ring_type_data))
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: nv read fail\n", __FUNCTION__, __LINE__);
+ }
+
+ return (ring_type_data.switch_flag);
+}
+
+
+bool mmi_heng_ai_warning_screen_is_active(void)
+{
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_HENG_AI_WARNING);
+ if(NULL != activity_obj)
+ return true;
+
+ return false;
+}
+
+static lv_remind_obj_ext_t * mmi_heng_ai_warning_screen_ext_get(void)
+{
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_HENG_AI_WARNING);
+ if(NULL == activity_obj)
+ return NULL;
+
+ lv_obj_t * watch_obj = NULL;
+ lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
+ if(NULL != watch_obj)
+ {
+ void * ext = lv_obj_get_ext_attr(watch_obj);
+ return ext;
+ }
+
+ return NULL;
+}
+
+static void mmi_heng_ai_warning_screen_prepare_destory(lv_obj_t * activity_obj)
+{
+ lv_watch_png_cache_all_free();
+
+ Hal_Vibrator_Play_End();
+
+ Hal_Tone_Play_End();
+ Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_REMIND);
+
+ printf("[@CHENG_DEBUG][%s][%d]: 0x%x\n", __FUNCTION__, __LINE__, s_heng_ai_warning_info.prompt_str);
+ if(NULL != s_heng_ai_warning_info.prompt_str)
+ {
+ lv_mem_free(s_heng_ai_warning_info.prompt_str);
+ s_heng_ai_warning_info.prompt_str = NULL;
+ }
+
+ lv_heng_ai_warning_obj_ext_t * ext = mmi_heng_ai_warning_screen_ext_get();
+ if(ext)
+ {
+ if(NULL != ext->timer_id)
+ {
+ Hal_Timer_Stop(ext->timer_id);
+ ext->timer_id = NULL;
+ }
+ }
+
+ watch_set_suspend_enable(true, ACT_ID_HENG_AI_WARNING, 0);
+}
+
+void mmi_heng_ai_warning_screen_clean(void)
+{
+ mmi_heng_ai_warning_screen_prepare_destory(NULL);
+
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_HENG_AI_WARNING);
+ if(NULL != activity_obj)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ lv_obj_del(activity_obj);
+ }
+}
+
+void mmi_heng_ai_warning_btn_event_cb(lv_obj_t * obj, lv_event_t e)
+{
+ if(LV_EVENT_CLICKED == e)
+ {
+ mmi_heng_ai_warning_screen_clean();
+ }
+}
+
+static void mmi_heng_ai_warning_screen_timeout(void * para)
+{
+ mmi_heng_ai_warning_screen_clean();
+}
+
+static lv_obj_t * mmi_heng_ai_warning_screen_create(lv_obj_t * activity_obj)
+{
+ printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ if(NULL == activity_obj)
+ {
+ lv_watch_activity_ext_t activity_ext = {0};
+
+ activity_ext.actId = ACT_ID_HENG_AI_WARNING;
+ activity_ext.create = mmi_heng_ai_warning_screen_create;
+ activity_ext.prepare_destory = mmi_heng_ai_warning_screen_prepare_destory;
+ activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+ if(NULL == activity_obj)
+ return NULL;
+ }
+
+ /* watch obj */
+ lv_obj_t * obj = lv_watch_obj_create(activity_obj);
+ lv_watch_obj_set_anim_mode(obj, LV_WATCH_ANIM_HOR_RIGHT_HIDE);
+ lv_heng_ai_warning_obj_ext_t * ext = (lv_heng_ai_warning_obj_ext_t *)lv_obj_allocate_ext_attr(obj, sizeof(lv_heng_ai_warning_obj_ext_t));
+
+ lv_obj_t * cont = lv_cont_create(obj, NULL);
+ lv_obj_set_size(cont, LV_HOR_RES, LV_VER_RES);
+ lv_obj_set_style_local_bg_color(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ //lv_obj_set_style_local_bg_color(cont, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_obj_set_click(cont, false);
+
+ hal_rtc_t cur_time;
+ char time_str[8] = {0};
+
+ Hal_Rtc_Gettime(&cur_time);
+ sprintf(time_str, "%02d:%02d", cur_time.tm_hour, cur_time.tm_min);
+
+ lv_obj_t * label_time = lv_label_create(cont, NULL);
+ lv_obj_add_style(label_time, LV_LABEL_PART_MAIN, &lv_watch_font26);
+ lv_label_set_text(label_time, time_str);
+ lv_label_set_align(label_time, LV_LABEL_ALIGN_CENTER);
+ lv_obj_align(label_time, NULL, LV_ALIGN_IN_TOP_MID, 0, 50);
+
+ lv_obj_t * label_prompt = lv_label_create(cont, NULL);
+ lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font26);
+ 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_obj_get_width(obj) - 20);
+ lv_label_set_text(label_prompt, s_heng_ai_warning_info.prompt_str);
+ lv_obj_align(label_prompt, label_time, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+
+
+ lv_obj_t * btn = lv_btn_create(cont, NULL);
+ lv_obj_set_size(btn, 100, 56);
+ lv_obj_set_style_local_bg_color(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(0x47, 0xA6, 0xFF));
+ lv_obj_set_style_local_radius(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 30);
+ lv_obj_set_style_local_bg_color(btn, LV_BTN_PART_MAIN, LV_STATE_PRESSED, lv_color_make(0x47, 0xA6, 0xFF));
+ lv_obj_set_style_local_radius(btn, LV_BTN_PART_MAIN, LV_STATE_PRESSED, 30);
+ lv_obj_align(btn, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -20);
+ lv_obj_set_event_cb(btn, mmi_heng_ai_warning_btn_event_cb);
+
+ lv_obj_t * label = lv_label_create(btn, NULL);
+ lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font26);
+ lv_label_set_text_id(label, WATCH_TEXT_ID_OK);
+
+ /* start timer (1 min) */
+ ext->timer_id = Hal_Timer_Start(1000 * 60, mmi_heng_ai_warning_screen_timeout, NULL, false);
+
+ watch_set_suspend_enable(false, ACT_ID_HENG_AI_WARNING, 0);
+
+ return obj;
+}
+
+
+
+
+lv_heart_rate_obj_ext_t * health_heart_rate_get_ext(void)
+{
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_HEALTH_MEASURE_HEART);
+ if(NULL == activity_obj)
+ {
+ return NULL;
+ }
+
+ lv_obj_t * watch_obj;
+ lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
+ if(NULL != watch_obj)
+ {
+ lv_heart_rate_obj_ext_t * ext = lv_obj_get_ext_attr(watch_obj);
+ return ext;
+ }
+ return NULL;
+}
+
+void health_heart_rate_display_update(void)
+{
+ lv_heart_rate_obj_ext_t * ext = health_heart_rate_get_ext();
+ if(NULL == ext)
+ {
+ return;
+ }
+
+ switch(ext->measure_state)
+ {
+ case STATE_HEART_RATE_MEASURING:
+ 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);
+ lv_obj_set_hidden(ext->label_value, ((strlen(ext->heart_rate)) ? FALSE : TRUE));
+ break;
+
+ case STATE_HEART_RATE_MEASURE_FAIL:
+ 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_NOT_WEAR);
+ 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;
+
+ case STATE_HEART_RATE_MEASURE_DONE:
+ lv_img_set_src(ext->img, ICON_HEART_RATE_MEASURE_DONE);
+ 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_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);
+ lv_obj_set_hidden(ext->label_value, FALSE);
+ break;
+
+ default:
+ break;
+ }
+}
+
+
+lv_heng_ai_bp_obj_ext_t * mmi_heng_ai_bp_ext_get(void)
+{
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_HENG_AI_BP);
+ if(activity_obj == NULL)
+ return NULL;
+
+ lv_obj_t * watch_obj = NULL;
+ lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
+ if(NULL == watch_obj)
+ return NULL;
+
+ lv_heng_ai_bp_obj_ext_t * ext = NULL;
+ ext = lv_obj_get_ext_attr(watch_obj);
+
+ return ext;
+}
+
+static void mmi_heng_ai_blood_pressure_screen_prepare_destory(lv_obj_t * activity_obj)
+{
+ HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ watch_set_suspend_enable(true, ACT_ID_HENG_AI_BP, 0);
+ lv_watch_png_cache_all_free();
+
+ //lv_obj_t * watch_obj = NULL;
+ //lv_watch_get_child_obj(act, lv_watch_obj_signal, &watch_obj);
+ //lv_obj_t * cont = lv_obj_get_child(watch_obj, NULL);
+
+ lv_heart_rate_obj_ext_t * ext = health_heart_rate_get_ext();
+ if(NULL != ext)
+ {
+ if(NULL != ext->cycle_timer_id)
+ {
+ Hal_Timer_Stop(ext->cycle_timer_id);
+ ext->cycle_timer_id = NULL;
+ }
+ if(NULL != ext->gif_info)
+ {
+ gif_close(ext->gif_info);
+ ext->gif_info = NULL;
+ }
+ if(STATE_HEART_RATE_MEASURING == ext->measure_state)
+ {
+ mmi_health_measure_interrupt();
+ }
+
+ HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ }
+}
+
+void mmi_heng_ai_blood_pressure_screen_clean(void)
+{
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_HENG_AI_BP);
+ if(NULL != activity_obj)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ mmi_heng_ai_blood_pressure_screen_prepare_destory(NULL);
+ lv_obj_del(activity_obj);
+ }
+}
+
+
+lv_obj_t * mmi_heng_ai_bp_tileview_add_tile(lv_obj_t * tileview, uint16_t id)
+{
+ lv_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
+ lv_obj_t * cont = lv_cont_create(tileview, NULL);
+ lv_obj_add_style(cont, LV_CONT_PART_MAIN, &lv_style_transp_tight);
+ lv_obj_set_size(cont, LV_HOR_RES, LV_VER_RES);
+ lv_obj_set_x(cont, LV_HOR_RES * ext->valid_pos[id].x);
+ lv_tileview_add_element(tileview, cont);
+ lv_obj_set_click(cont, false);
+ return cont;
+}
+
+
+
+// measure mode
+void * mmi_heng_ai_bp_measure_screen_ext_get(void)
+{
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_HENG_AI_BP_MEASURE);
+ if(activity_obj == NULL)
+ return NULL;
+
+ lv_obj_t * watch_obj = NULL;
+ lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
+ if(NULL == watch_obj)
+ return NULL;
+
+ void * ext = lv_obj_get_ext_attr(watch_obj);
+
+ return ext;
+}
+
+void mmi_heng_ai_bp_measure_screen_prepare_destory(lv_obj_t * activity_obj)
+{
+ watch_set_suspend_enable(true, ACT_ID_HENG_AI_BP_MEASURE, 0);
+ lv_watch_png_cache_all_free();
+
+ lv_heng_ai_bp_measure_ext_t * watch_ext = (lv_heng_ai_bp_measure_ext_t *)mmi_heng_ai_bp_measure_screen_ext_get();
+ if(NULL != watch_ext)
+ {
+ if(NULL != watch_ext->measure_timer_id)
+ {
+ Hal_Timer_Stop(watch_ext->measure_timer_id);
+ watch_ext->measure_timer_id = NULL;
+ }
+ if(NULL != watch_ext->result_timer_id)
+ {
+ Hal_Timer_Stop(watch_ext->result_timer_id);
+ watch_ext->result_timer_id = NULL;
+ }
+ if(NULL != watch_ext->gif_info)
+ {
+ gif_close(watch_ext->gif_info);
+ watch_ext->gif_info = NULL;
+ }
+ }
+}
+
+void mmi_heng_ai_bp_measure_screen_clean(void)
+{
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_HENG_AI_BP_MEASURE);
+ if(NULL != activity_obj)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ mmi_heng_ai_bp_measure_screen_prepare_destory(NULL);
+ lv_obj_del(activity_obj);
+ }
+}
+
+void mmi_heng_ai_bp_measure_result_screen_event_cb(lv_obj_t * obj, lv_event_t e)
+{
+ if(LV_EVENT_CLICKED != e)
+ return;
+
+ printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ mmi_heng_ai_bp_measure_screen_clean();
+}
+
+
+// 0-ok; 1-high; 2-low; 3-fail
+void mmi_heng_ai_bp_measure_result_screen(uint8_t result)
+{
+ lv_heng_ai_bp_measure_ext_t * watch_ext = (lv_heng_ai_bp_measure_ext_t *)mmi_heng_ai_bp_measure_screen_ext_get();
+ if(NULL == watch_ext)
+ return;
+
+ if(NULL != watch_ext->measure_timer_id)
+ {
+ Hal_Timer_Stop(watch_ext->measure_timer_id);
+ watch_ext->measure_timer_id = NULL;
+ }
+ if(NULL != watch_ext->result_timer_id)
+ {
+ Hal_Timer_Stop(watch_ext->result_timer_id);
+ watch_ext->result_timer_id = NULL;
+ }
+ if(NULL != watch_ext->gif_info)
+ {
+ gif_close(watch_ext->gif_info);
+ watch_ext->gif_info = NULL;
+ }
+ lv_obj_clean(watch_ext->cont);
+
+ uint32_t label_title_text_id[] = {WATCH_TEXT_ID_CALIBRATE_SUCCESS,
+ WATCH_TEXT_ID_BLOOD_PRESSURE_HIGH,
+ WATCH_TEXT_ID_BLOOD_PRESSURE_LOW,
+ WATCH_TEXT_ID_CALIBRATE_FAILED};
+
+ lv_obj_t * label_title = lv_label_create(watch_ext->cont, NULL);
+ lv_obj_add_style(label_title, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(label_title, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label_title, label_title_text_id[result]);
+ lv_obj_align(label_title, NULL, LV_ALIGN_IN_TOP_MID, 0, 48);
+ lv_obj_set_click(label_title, false);
+
+ if(3 == result)
+ {
+ lv_obj_t * img = lv_img_create(watch_ext->cont, NULL);
+ lv_img_set_src(img, ICON_HENGAI_BP_ALERT);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 104);
+
+ lv_obj_t * label_prompt = lv_label_create(watch_ext->cont, NULL);
+ lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font28);
+ 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, 400);
+ lv_label_set_text_id(label_prompt, label_prompt_text_id);
+ lv_obj_align(label_prompt, NULL, LV_ALIGN_IN_TOP_MID, 0, 292);
+ }
+ else
+ {
+ lv_obj_t * label_title_high = lv_label_create(watch_ext->cont, NULL);
+ lv_obj_add_style(label_title_high, LV_LABEL_PART_MAIN, &lv_watch_font24);
+ lv_label_set_align(label_title_high, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label_title_high, WATCH_TEXT_ID_SYSTOLIC_BP);
+ lv_obj_align(label_title_high, NULL, LV_ALIGN_IN_TOP_LEFT, 103, 104);
+ lv_obj_set_click(label_title_high, false);
+
+ lv_obj_t * label_value_high = lv_label_create(watch_ext->cont, NULL);
+ lv_obj_add_style(label_value_high, LV_LABEL_PART_MAIN, &lv_watch_font60);
+ lv_label_set_align(label_value_high, LV_LABEL_ALIGN_CENTER);
+ char value_str[4] = {0};
+ sprintf(value_str, "%d", s_bp_value_high);
+ lv_label_set_text(label_value_high, value_str);
+ lv_obj_align(label_value_high, label_title_high, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+ lv_obj_set_click(label_value_high, false);
+
+ lv_obj_t * label_uint_high = lv_label_create(watch_ext->cont, NULL);
+ lv_obj_add_style(label_uint_high, LV_LABEL_PART_MAIN, &lv_watch_font24);
+ lv_label_set_align(label_uint_high, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text(label_uint_high, "mmHg");
+ lv_obj_align(label_uint_high, label_value_high, LV_ALIGN_OUT_BOTTOM_MID, 0, 15);
+ lv_obj_set_click(label_uint_high, false);
+
+ lv_obj_t * label_title_low = lv_label_create(watch_ext->cont, label_title_high);
+ lv_label_set_text_id(label_title_low, WATCH_TEXT_ID_DIASTOLIC_BP);
+ lv_obj_align(label_title_low, NULL, LV_ALIGN_IN_TOP_LEFT, 280, 104);
+
+ lv_obj_t * label_value_low = lv_label_create(watch_ext->cont, label_value_high);
+ sprintf(value_str, "%d", s_bp_value_low);
+ lv_label_set_text(label_value_low, value_str);
+ lv_obj_align(label_value_low, label_title_low, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+
+ lv_obj_t * label_uint_low = lv_label_create(watch_ext->cont, label_uint_high);
+ lv_label_set_text(label_uint_low, "mmHg");
+ lv_obj_align(label_uint_low, label_value_low, LV_ALIGN_OUT_BOTTOM_MID, 0, 15);
+
+ hal_rtc_t cur_time = {0};
+ char time_str[24] = {0};
+
+ Hal_Rtc_Gettime(&cur_time);
+ sprintf(time_str, "%02d/%02d/%04d %02d:%02d", cur_time.tm_mon, cur_time.tm_mday, cur_time.tm_year, cur_time.tm_hour, cur_time.tm_min);
+
+ lv_obj_t * label_time = lv_label_create(watch_ext->cont, NULL);
+ lv_obj_add_style(label_time, LV_LABEL_PART_MAIN, &lv_watch_font28);
+ lv_label_set_align(label_time, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text(label_time, time_str);
+ lv_obj_align(label_time, NULL, LV_ALIGN_IN_TOP_MID, 0, 304);
+ lv_obj_set_click(label_time, false);
+ }
+
+ lv_obj_t * imgbtn = lv_imgbtn_create(watch_ext->cont, NULL);
+ lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_RELEASED, ICON_HENGAI_BP_BOTTOM_BTN_BG);
+ lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_PRESSED, ICON_HENGAI_BP_BOTTOM_BTN_BG);
+ lv_obj_align(imgbtn, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
+ lv_obj_set_event_cb(imgbtn, mmi_heng_ai_bp_measure_result_screen_event_cb);
+
+ lv_obj_t * btn_label = lv_label_create(imgbtn, NULL);
+ lv_obj_add_style(btn_label, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(btn_label, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(btn_label, WATCH_TEXT_ID_OK);
+ lv_obj_align(btn_label, NULL, LV_ALIGN_CENTER, 0, 0);
+}
+
+void mmi_heng_ai_bp_measure_result_timeout(void * para)
+{
+ lv_heng_ai_bp_measure_ext_t * watch_ext = (lv_heng_ai_bp_measure_ext_t *)mmi_heng_ai_bp_measure_screen_ext_get();
+ if(NULL == watch_ext)
+ return;
+
+ if(NULL != watch_ext->result_timer_id)
+ {
+ Hal_Timer_Stop(watch_ext->result_timer_id);
+ watch_ext->result_timer_id = NULL;
+ }
+ if(NULL != watch_ext->gif_info)
+ {
+ gif_close(watch_ext->gif_info);
+ watch_ext->gif_info = NULL;
+ }
+
+ mmi_heng_ai_bp_measure_result_screen(3);
+}
+
+void mmi_heng_ai_bp_measure_cycle_timeout(void * para)
+{
+ s_hengai_bp_measure_count++;
+
+ mmi_heng_ai_bp_raw_data_save();
+
+ if(0 == (s_hengai_bp_measure_count % MMI_BP_MEASURE_SEND_DATA_COUNT)) // send raw data per 10s
+ {
+ mmi_heng_ai_bp_raw_data_send();
+ }
+
+ if(MMI_BP_MEASURE_TOTAL_COUNT == s_hengai_bp_measure_count) // stop action when 60s
+ {
+ // close sensor
+ mmi_close_sensor();
+
+ lv_heng_ai_bp_measure_ext_t * watch_ext = (lv_heng_ai_bp_measure_ext_t *)mmi_heng_ai_bp_measure_screen_ext_get();
+ if(NULL == watch_ext)
+ return;
+
+ if(NULL != watch_ext->measure_timer_id)
+ {
+ Hal_Timer_Stop(watch_ext->measure_timer_id);
+ watch_ext->measure_timer_id = NULL;
+ }
+ watch_ext->result_timer_id = Hal_Timer_Start(MMI_BP_WAIT_RESULT_TIMEOUT, mmi_heng_ai_bp_measure_result_timeout, NULL, false);
+ }
+}
+
+void mmi_heng_ai_bp_measure_start_btn_event_cb(lv_obj_t * obj, lv_event_t e)
+{
+ if(LV_EVENT_CLICKED != e)
+ return;
+
+ lv_heng_ai_bp_measure_ext_t * watch_ext = (lv_heng_ai_bp_measure_ext_t *)mmi_heng_ai_bp_measure_screen_ext_get();
+ if(NULL == watch_ext)
+ return;
+
+ if(NULL == watch_ext->tileview)
+ return;
+
+ lv_obj_t * watch_obj = lv_obj_get_parent(watch_ext->tileview);
+ lv_obj_del(watch_ext->tileview);
+ lv_watch_obj_set_anim_mode(watch_obj, LV_WATCH_ANIM_HOR_RIGHT_HIDE);
+
+ lv_obj_t * cont = lv_cont_create(watch_obj, NULL);
+ lv_obj_set_size(cont, LV_HOR_RES, LV_VER_RES);
+ lv_obj_set_style_local_bg_color(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_obj_set_click(cont, false);
+ watch_ext->cont = cont;
+
+ if(false == mmi_health_measure_wear_state_get())
+ {
+ lv_obj_t * img = lv_img_create(cont, NULL);
+ lv_img_set_src(img, ICON_HENGAI_BP_ALERT);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 90);
+
+ lv_obj_t * label_1 = lv_label_create(cont, NULL);
+ lv_obj_add_style(label_1, LV_LABEL_PART_MAIN, &lv_watch_font36);
+ lv_label_set_text_id(label_1, WATCH_TEXT_ID_DEVICE_NOT_WEAR);
+ lv_label_set_align(label_1, LV_LABEL_ALIGN_CENTER);
+ lv_obj_align(label_1, NULL, LV_ALIGN_IN_TOP_MID, 0, 278);
+ lv_obj_set_click(label_1, false);
+ }
+ else
+ {
+ mmi_open_sensor();
+
+ gif_info_t * gif_info = gif_open(cont, ANIM_HENGAI_BP_MEASURE, 0);
+ if(NULL == gif_info)
+ return;
+ lv_obj_align(gif_info->container, NULL, LV_ALIGN_IN_TOP_MID, 0, 104);
+ watch_ext->gif_info = gif_info;
+
+ lv_obj_t * label = lv_label_create(cont, NULL);
+ lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font28);
+ lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label, WATCH_TEXT_ID_IN_MEASURE_PROMPT);
+ lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 292);
+ lv_obj_set_click(label, false);
+
+ /* start timer (1 min) */
+ s_hengai_bp_measure_count = 0;
+ watch_ext->measure_timer_id = Hal_Timer_Start(1000, mmi_heng_ai_bp_measure_cycle_timeout, NULL, true);
+ }
+}
+
+lv_obj_t * mmi_heng_ai_bp_measure_tab_0(lv_obj_t * tileview, uint16_t id)
+{
+ lv_obj_t * tab = mmi_heng_ai_bp_tileview_add_tile(tileview, id);
+ if(NULL == tab)
+ return NULL;
+
+ lv_obj_t * label_title = lv_label_create(tab, NULL);
+ lv_obj_add_style(label_title, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(label_title, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label_title, WATCH_TEXT_ID_MEASURE_PROMPT);
+ lv_obj_align(label_title, NULL, LV_ALIGN_IN_TOP_MID, 0, 48);
+ lv_obj_set_click(label_title, false);
+
+ lv_obj_t * img = lv_img_create(tab, NULL);
+ lv_img_set_src(img, ICON_HENGAI_BP_PROMPT_0);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 104);
+
+ lv_obj_t * label_prompt = lv_label_create(tab, NULL);
+ lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font28);
+ 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, 400);
+ 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, 292);
+
+ return tab;
+}
+
+lv_obj_t * mmi_heng_ai_bp_measure_tab_1(lv_obj_t * tileview, uint16_t id)
+{
+ lv_obj_t * tab = mmi_heng_ai_bp_tileview_add_tile(tileview, id);
+ if(NULL == tab)
+ return NULL;
+
+ lv_obj_t * label_title = lv_label_create(tab, NULL);
+ lv_obj_add_style(label_title, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(label_title, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label_title, WATCH_TEXT_ID_MEASURE_PROMPT);
+ lv_obj_align(label_title, NULL, LV_ALIGN_IN_TOP_MID, 0, 48);
+ lv_obj_set_click(label_title, false);
+
+ lv_obj_t * img = lv_img_create(tab, NULL);
+ lv_img_set_src(img, ICON_HENGAI_BP_PROMPT_1);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 104);
+
+ lv_obj_t * label_prompt = lv_label_create(tab, NULL);
+ lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font28);
+ 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, 400);
+ lv_label_set_text_id(label_prompt, WATCH_TEXT_ID_CALIBRATE_PROMPT_1);
+ lv_obj_align(label_prompt, NULL, LV_ALIGN_IN_TOP_MID, 0, 292);
+
+ lv_obj_t * imgbtn = lv_imgbtn_create(tab, NULL);
+ lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_RELEASED, ICON_HENGAI_BP_BOTTOM_BTN_BG);
+ lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_PRESSED, ICON_HENGAI_BP_BOTTOM_BTN_BG);
+ lv_obj_align(imgbtn, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
+ lv_obj_set_event_cb(imgbtn, mmi_heng_ai_bp_measure_start_btn_event_cb);
+
+ lv_obj_t * btn_label = lv_label_create(imgbtn, NULL);
+ lv_obj_add_style(btn_label, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(btn_label, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(btn_label, WATCH_TEXT_ID_START_MEASURE);
+ lv_obj_align(btn_label, NULL, LV_ALIGN_CENTER, 0, 0);
+
+ return tab;
+}
+
+void mmi_heng_ai_bp_measure_screen_tileview_led(lv_obj_t * tileview)
+{
+ lv_heng_ai_bp_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
+ if(NULL == ext)
+ return NULL;
+
+ if(NULL == ext->led_cont)
+ {
+ ext->led_cont = lv_cont_create(tileview, NULL);
+ lv_obj_set_base_dir(ext->led_cont, LV_BIDI_DIR_LTR);
+ lv_cont_set_fit(ext->led_cont, LV_FIT_TIGHT);
+ lv_cont_set_layout(ext->led_cont, LV_LAYOUT_ROW_MID);
+ lv_obj_add_style(ext->led_cont, LV_CONT_PART_MAIN, &lv_watch_style_transp);
+ lv_obj_set_click(ext->led_cont, false);
+ }
+
+ uint8_t i = 0;
+ for(i = 0; i < 2; i++)
+ {
+ if(NULL == ext->led[i])
+ {
+ ext->led[i] = lv_led_create(ext->led_cont, NULL);
+ }
+
+ lv_led_off(ext->led[i]);
+ lv_obj_set_size(ext->led[i], 6, 6);
+ }
+
+ lv_coord_t x = -1, y = -1;
+ lv_tileview_get_tile_act(tileview, &x, &y);
+ lv_led_on(ext->led[x]);
+ lv_obj_set_size(ext->led[x], 10, 10);
+ lv_obj_set_pos(ext->led_cont, LV_HOR_RES * x + (LV_HOR_RES - lv_obj_get_width(ext->led_cont)) / 2, 100);
+}
+
+void mmi_heng_ai_bp_measure_screen_tileview_event_cb(lv_obj_t * tileview, lv_event_t e)
+{
+ if(LV_EVENT_VALUE_CHANGED != e)
+ return;
+
+ mmi_heng_ai_bp_measure_screen_tileview_led(tileview);
+}
+
+lv_obj_t * mmi_heng_ai_bp_measure_screen_create(lv_obj_t * activity_obj)
+{
+ if(NULL == activity_obj)
+ {
+ lv_watch_activity_ext_t activity_ext = {0};
+
+ activity_ext.actId = ACT_ID_HENG_AI_BP_MEASURE;
+ activity_ext.create = mmi_heng_ai_bp_measure_screen_create;
+ activity_ext.prepare_destory = mmi_heng_ai_bp_measure_screen_prepare_destory;
+ activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+ if(NULL == activity_obj)
+ return NULL;
+ }
+
+ lv_obj_t * watch_obj = lv_watch_obj_create(activity_obj);
+ LV_ASSERT_MEM(watch_obj);
+ if(NULL == watch_obj)
+ return NULL;
+ lv_watch_obj_set_anim_mode(watch_obj, LV_WATCH_ANIM_NO);
+ lv_heng_ai_bp_measure_ext_t * watch_ext = lv_obj_allocate_ext_attr(watch_obj, sizeof(lv_heng_ai_bp_measure_ext_t));
+ if(NULL == ext)
+ return NULL;
+ watch_ext->tileview = NULL;
+ watch_ext->cont = NULL;
+ watch_ext->gif_info = NULL;
+ watch_ext->measure_timer_id = NULL;
+ watch_ext->result_timer_id = NULL;
+
+ lv_obj_t * tileview = lv_tileview_create(watch_obj, NULL);
+ if(NULL == tileview)
+ return NULL;
+ lv_heng_ai_bp_tileview_ext_t * ext = lv_obj_allocate_ext_attr(tileview, sizeof(lv_heng_ai_bp_tileview_ext_t));
+ if(NULL == ext)
+ return NULL;
+
+ watch_ext->tileview = tileview;
+ ext->tab_0 = NULL;
+ ext->tab_1 = NULL;
+ ext->tab_2 = NULL;
+ ext->led_cont= NULL;
+ ext->led[0] = NULL;
+ ext->led[1] = NULL;
+ ext->led[2] = NULL;
+
+ lv_tileview_set_valid_positions(tileview, s_hengai_bp_valid_pos, 2);
+ lv_tileview_set_edge_flash(tileview, true);
+ lv_tileview_set_anim_time(tileview, 60);
+ lv_page_set_scrollbar_mode(tileview, LV_SCROLLBAR_MODE_OFF);
+ lv_obj_add_style(tileview, LV_TILEVIEW_PART_EDGE_FLASH, &lv_watch_cont_opa1);
+ ext->tileview = tileview;
+
+ ext->tab_0 = mmi_heng_ai_bp_measure_tab_0(tileview, 0);
+ LV_ASSERT_MEM(ext->tab_0);
+ if(NULL == ext->tab_0)
+ return NULL;
+
+ ext->tab_1 = mmi_heng_ai_bp_measure_tab_1(tileview, 1);
+ LV_ASSERT_MEM(ext->tab_1);
+ if(NULL == ext->tab_1)
+ return NULL;
+
+ lv_tileview_set_tile_act(tileview, 0, 0, LV_ANIM_OFF);
+ lv_watch_obj_add_element(tileview);
+ lv_watch_obj_add_element(lv_page_get_scrl(tileview));
+ lv_obj_set_event_cb(tileview, mmi_heng_ai_bp_measure_screen_tileview_event_cb);
+
+ mmi_heng_ai_bp_measure_screen_tileview_led(tileview);
+
+ //
+ watch_set_suspend_enable(false, ACT_ID_HENG_AI_BP_MEASURE, 0);
+}
+
+void mmi_heng_ai_bp_measure_mode_btn_event_cb(lv_obj_t * obj, lv_event_t e)
+{
+ if(LV_EVENT_CLICKED != e)
+ return;
+
+ mmi_heng_ai_bp_measure_screen_create(NULL);
+}
+
+lv_obj_t * mmi_heng_ai_bp_measure_mode_create(lv_obj_t * tileview, uint16_t id)
+{
+ lv_obj_t * tab = mmi_heng_ai_bp_tileview_add_tile(tileview, id);
+ if(NULL == tab)
+ return NULL;
+
+ lv_obj_t * label_title = lv_label_create(tab, NULL);
+ //lv_obj_set_size(label_title, LV_HOR_RES, 40);
+ lv_obj_add_style(label_title, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(label_title, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label_title, WATCH_TEXT_ID_BP_MEASURE_MODE);
+ lv_obj_align(label_title, NULL, LV_ALIGN_IN_TOP_MID, 0, 48);
+ lv_obj_set_click(label_title, false);
+
+ lv_obj_t * img = lv_img_create(tab, NULL);
+ lv_img_set_src(img, ICON_HENGAI_BP_MEASURE_MODE);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 104);
+
+ lv_obj_t * imgbtn = lv_imgbtn_create(tab, NULL);
+ lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_RELEASED, ICON_HENGAI_BP_BTN_BG);
+ lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_PRESSED, ICON_HENGAI_BP_BTN_BG);
+ lv_obj_align(imgbtn, NULL, LV_ALIGN_IN_TOP_MID, 0, 300);
+ lv_obj_set_event_cb(imgbtn, mmi_heng_ai_bp_measure_mode_btn_event_cb);
+
+ lv_obj_t * btn_label = lv_label_create(imgbtn, NULL);
+ lv_obj_add_style(btn_label, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(btn_label, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(btn_label, WATCH_TEXT_ID_START_MEASURE);
+ lv_obj_align(btn_label, NULL, LV_ALIGN_CENTER, 0, 0);
+
+ return tab;
+}
+
+
+// calibrate mode
+void * mmi_heng_ai_bp_calibrate_screen_ext_get(void)
+{
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_HENG_AI_BP_CALIBRATE);
+ if(activity_obj == NULL)
+ return NULL;
+
+ lv_obj_t * watch_obj = NULL;
+ lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
+ if(NULL == watch_obj)
+ return NULL;
+
+ void * ext = lv_obj_get_ext_attr(watch_obj);
+
+ return ext;
+}
+
+void mmi_heng_ai_bp_calibrate_screen_prepare_destory(lv_obj_t * activity_obj)
+{
+ watch_set_suspend_enable(true, ACT_ID_HENG_AI_BP_CALIBRATE, 0);
+ lv_watch_png_cache_all_free();
+
+ lv_heng_ai_bp_calibrate_ext_t * watch_ext = (lv_heng_ai_bp_calibrate_ext_t *)mmi_heng_ai_bp_calibrate_screen_ext_get();
+ if(NULL == watch_ext)
+ return;
+
+ if(NULL != watch_ext->gif_info)
+ {
+ gif_close(watch_ext->gif_info);
+ watch_ext->gif_info = NULL;
+ }
+ if(NULL != watch_ext->measure_timer_id)
+ {
+ Hal_Timer_Stop(watch_ext->measure_timer_id);
+ watch_ext->measure_timer_id = NULL;
+ }
+ if(NULL != watch_ext->result_timer_id)
+ {
+ Hal_Timer_Stop(watch_ext->result_timer_id);
+ watch_ext->result_timer_id = NULL;
+ }
+}
+
+void mmi_heng_ai_bp_calibrate_screen_clean(void)
+{
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_HENG_AI_BP_CALIBRATE);
+ if(NULL != activity_obj)
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ mmi_heng_ai_bp_calibrate_screen_prepare_destory(NULL);
+ lv_obj_del(activity_obj);
+ }
+}
+
+void mmi_bp_roller_get_optstr_from_num(uint16_t sel_value, char * stropt, uint32_t user_num)
+{
+/*
+ uint8_t opt_display[5];
+ uint8_t i, pos = 0;
+ uint8_t min = 0;
+ uint8_t max = 0;
+ uint8_t count = 0;
+
+ if(0 == user_num) // high
+ {
+ min = 80
+ max = 200;
+ count = 121;
+ }
+ else // low
+ {
+ min = 60;
+ max = 120;
+ count = 61;
+ }
+
+ opt_display[0] = ((sel_value - min + count) - 2) % count + min;
+ opt_display[1] = ((sel_value - min + count) - 1) % count + min;
+ opt_display[2] = sel_value;
+ opt_display[3] = (sel_value + 1 - min) % count + min;
+ opt_display[4] = (sel_value + 2 - min) % count + min;
+
+ for(i = 0; i < 5; i++) {
+ stropt[pos++] = (opt_display[i] % 100) / 10 + 0x30;
+ stropt[pos++] = opt_display[i] % 10 + 0x30;
+ stropt[pos++] = 0x0A;
+ }
+ stropt [pos - 1] = 0;
+*/
+}
+
+void mmi_bp_roller_action(lv_obj_t * roller, lv_event_t event)
+{
+ if(LV_EVENT_VALUE_CHANGED != event)
+ return;
+
+ uint32_t user_num = lv_watch_get_free_num(roller);
+ uint16_t sel_value = 0;
+ char sel_str[4] = {0};
+ char stropt[40] = {0};
+
+ lv_roller_get_selected_str(roller, sel_str, 4);
+ sel_value = atoi(sel_str);
+ mmi_bp_roller_get_optstr_from_num(sel_value, stropt, user_num);
+ lv_roller_set_options(roller, stropt, LV_ROLLER_MODE_NORMAL);
+ lv_roller_set_selected(roller, 2, LV_ANIM_OFF);
+ lv_roller_set_auto_fit(roller, true);
+}
+
+lv_obj_t * mmi_bp_roller_create(lv_obj_t * par, uint32_t user_num)
+{
+ lv_obj_t * roller_cont = lv_cont_create(par, NULL);
+ lv_obj_set_size(roller_cont, 100, 180);
+ lv_cont_set_layout(roller_cont, LV_LAYOUT_OFF);
+ lv_obj_add_style(roller_cont, LV_CONT_PART_MAIN, &lv_watch_style_transp);
+ //lv_obj_align(roller_cont, NULL, LV_ALIGN_IN_TOP_LEFT, 90, 140);
+
+ lv_obj_t * roller = lv_roller_create(roller_cont, NULL);
+ lv_obj_add_style(roller, LV_ROLLER_PART_BG, &lv_watch_font36_gray);
+ lv_obj_set_style_local_text_line_space(roller, LV_ROLLER_PART_BG, LV_STATE_DEFAULT, 20);
+ lv_obj_set_style_local_bg_opa(roller, LV_ROLLER_PART_BG, LV_STATE_DEFAULT, LV_OPA_TRANSP);
+ lv_obj_add_style(roller, LV_ROLLER_PART_SELECTED, &lv_watch_font60);
+ lv_obj_set_style_local_text_line_space(roller, LV_ROLLER_PART_SELECTED, LV_STATE_DEFAULT, 20);
+ lv_obj_set_style_local_bg_opa(roller, LV_ROLLER_PART_SELECTED, LV_STATE_DEFAULT, LV_OPA_TRANSP);
+
+
+ uint16_t sel_value = 0;
+ char stropt[40] = {0};
+
+ mmi_bp_roller_get_optstr_from_num(sel_value, stropt, user_num);
+
+ lv_roller_set_auto_fit(roller, true);
+ lv_roller_set_options(roller, stropt, LV_ROLLER_MODE_NORMAL);
+ lv_roller_set_visible_row_count(roller, 3);
+ lv_roller_set_selected(roller, 2, LV_ANIM_OFF);
+ lv_obj_set_event_cb(roller, mmi_bp_roller_action);
+ lv_watch_set_free_num(roller, user_num);
+
+ //lv_watch_roller_set_sel_style(roller, ext->sel_str);
+
+ return roller_cont;
+}
+
+// 0-ok; 1-high; 2-low; 3-fail
+void mmi_heng_ai_bp_calibrate_result_screen(uint8_t result)
+{
+ lv_heng_ai_bp_calibrate_ext_t * watch_ext = (lv_heng_ai_bp_calibrate_ext_t *)mmi_heng_ai_bp_calibrate_screen_ext_get();
+ if(NULL == watch_ext)
+ return;
+
+ // clean
+ if(NULL != watch_ext->measure_timer_id)
+ {
+ Hal_Timer_Stop(watch_ext->measure_timer_id);
+ watch_ext->measure_timer_id = NULL;
+ }
+ if(NULL != watch_ext->result_timer_id)
+ {
+ Hal_Timer_Stop(watch_ext->result_timer_id);
+ watch_ext->result_timer_id = NULL;
+ }
+ if(NULL != watch_ext->gif_info)
+ {
+ gif_close(watch_ext->gif_info);
+ watch_ext->gif_info = NULL;
+ }
+ lv_obj_clean(watch_ext->cont);
+
+ // display
+ uint32_t label_title_text_id[] = {WATCH_TEXT_ID_CALIBRATE_SUCCESS,
+ WATCH_TEXT_ID_BLOOD_PRESSURE_HIGH,
+ WATCH_TEXT_ID_BLOOD_PRESSURE_LOW,
+ WATCH_TEXT_ID_CALIBRATE_FAILED};
+ void * img_src_path[] = {ICON_HENGAI_BP_SUCCESS, ICON_HENGAI_BP_ALERT, ICON_HENGAI_BP_ALERT, ICON_HENGAI_BP_ALERT};
+ uint32_t label_prompt_text_id[] = {WATCH_TEXT_ID_BLOOD_PRESSURE_NORMAL_PROMPT,
+ WATCH_TEXT_ID_BLOOD_PRESSURE_HIGH_PROMPT,
+ WATCH_TEXT_ID_BLOOD_PRESSURE_LOW_PROMPT,
+ WATCH_TEXT_ID_BLOOD_PRESSURE_FAILED_PROMPT};
+
+ lv_obj_t * label_title = lv_label_create(watch_ext->cont, NULL);
+ lv_obj_add_style(label_title, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(label_title, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label_title, label_title_text_id[result]);
+ lv_obj_align(label_title, NULL, LV_ALIGN_IN_TOP_MID, 0, 48);
+ lv_obj_set_click(label_title, false);
+
+ lv_obj_t * img = lv_img_create(watch_ext->cont, NULL);
+ lv_img_set_src(img, img_src_path[result]);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 104);
+
+ lv_obj_t * label_prompt = lv_label_create(watch_ext->cont, NULL);
+ lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font28);
+ 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, 400);
+ lv_label_set_text_id(label_prompt, label_prompt_text_id[result]);
+ lv_obj_align(label_prompt, NULL, LV_ALIGN_IN_TOP_MID, 0, 292);
+}
+
+void mmi_heng_ai_bp_calibrate_result_timeout(void * para)
+{
+ lv_heng_ai_bp_calibrate_ext_t * watch_ext = (lv_heng_ai_bp_calibrate_ext_t *)mmi_heng_ai_bp_calibrate_screen_ext_get();
+ if(NULL == watch_ext)
+ return;
+
+ if(NULL != watch_ext->result_timer_id)
+ {
+ Hal_Timer_Stop(watch_ext->result_timer_id);
+ watch_ext->result_timer_id = NULL;
+ }
+
+ mmi_heng_ai_bp_calibrate_result_screen(3);
+}
+
+void mmi_heng_ai_bp_calibrate_end_btn_event_cb(lv_obj_t * obj, lv_event_t e)
+{
+ if(LV_EVENT_CLICKED != e)
+ return;
+
+ // send vaule
+ mmi_heng_ai_bp_calibrate_input_value_send();
+
+ if(1 == s_hengai_bp_calibrate_times)
+ {
+ // once again
+ mmi_heng_ai_bp_calibrate_start_screen();
+ }
+ else
+ {
+ // finish
+ lv_heng_ai_bp_calibrate_ext_t * watch_ext = (lv_heng_ai_bp_calibrate_ext_t *)mmi_heng_ai_bp_calibrate_screen_ext_get();
+ if(NULL == watch_ext)
+ return;
+
+ watch_ext->result_timer_id = Hal_Timer_Start(MMI_BP_WAIT_RESULT_TIMEOUT, mmi_heng_ai_bp_calibrate_result_timeout, NULL, false);
+ }
+}
+
+void mmi_heng_ai_bp_calibrate_end_screen(void)
+{
+ mmi_close_sensor();
+
+ lv_heng_ai_bp_calibrate_ext_t * watch_ext = (lv_heng_ai_bp_calibrate_ext_t *)mmi_heng_ai_bp_calibrate_screen_ext_get();
+ if(NULL == watch_ext)
+ return;
+
+ Hal_Timer_Stop(watch_ext->measure_timer_id);
+ watch_ext->measure_timer_id = NULL;
+ gif_close(watch_ext->gif_info);
+ watch_ext->gif_info = NULL;
+ lv_obj_clean(watch_ext->cont);
+
+ lv_obj_t * label_title = lv_label_create(watch_ext->cont, NULL);
+ lv_obj_add_style(label_title, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(label_title, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label_title, WATCH_TEXT_ID_INPUT_CALIBRATE_VALUE);
+ lv_obj_align(label_title, NULL, LV_ALIGN_IN_TOP_MID, 0, 48);
+ lv_obj_set_click(label_title, false);
+
+ lv_obj_t * label_0 = lv_label_create(watch_ext->cont, NULL);
+ lv_obj_add_style(label_0, LV_LABEL_PART_MAIN, &lv_watch_font24);
+ lv_label_set_align(label_0, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label_0, WATCH_TEXT_ID_SYSTOLIC_BP);
+ lv_obj_align(label_0, NULL, LV_ALIGN_IN_TOP_LEFT, 103, 104);
+ lv_obj_set_click(label_0, false);
+
+ lv_obj_t * roller_cont_0 = mmi_bp_roller_create(watch_ext->cont, 0);
+ lv_obj_align(roller_cont_0, NULL, LV_ALIGN_IN_TOP_LEFT, 90, 140);
+
+ lv_obj_t * label_1 = lv_label_create(watch_ext->cont, NULL);
+ lv_obj_add_style(label_1, LV_LABEL_PART_MAIN, &lv_watch_font24);
+ lv_label_set_align(label_1, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label_1, WATCH_TEXT_ID_DIASTOLIC_BP);
+ lv_obj_align(label_1, NULL, LV_ALIGN_IN_TOP_LEFT, 280, 104);
+ lv_obj_set_click(label_1, false);
+
+ lv_obj_t * roller_cont_1 = mmi_bp_roller_create(watch_ext->cont, 1);
+ lv_obj_align(roller_cont_1, NULL, LV_ALIGN_IN_TOP_LEFT, 270, 140);
+
+ lv_obj_t * imgbtn = lv_imgbtn_create(watch_ext->cont, NULL);
+ lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_RELEASED, ICON_HENGAI_BP_BOTTOM_BTN_BG);
+ lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_PRESSED, ICON_HENGAI_BP_BOTTOM_BTN_BG);
+ lv_obj_align(imgbtn, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
+ lv_obj_set_event_cb(imgbtn, mmi_heng_ai_bp_calibrate_end_btn_event_cb);
+
+ lv_obj_t * btn_label = lv_label_create(imgbtn, NULL);
+ lv_obj_add_style(btn_label, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(btn_label, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(btn_label, WATCH_TEXT_ID_OK);
+ lv_obj_align(btn_label, NULL, LV_ALIGN_CENTER, 0, 0);
+}
+
+void mmi_heng_ai_bp_calibrate_cycle_timeout(void * para)
+{
+ mmi_heng_ai_bp_raw_data_save();
+
+ s_hengai_bp_measure_count++;
+
+ if(0 == (s_hengai_bp_measure_count % MMI_BP_MEASURE_SEND_DATA_COUNT)) // send raw data per 10s
+ {
+ mmi_heng_ai_bp_raw_data_send();
+ }
+
+ if(MMI_BP_MEASURE_TOTAL_COUNT <= s_hengai_bp_measure_count) // stop action when 60s
+ {
+ s_hengai_bp_calibrate_times++;
+ mmi_heng_ai_bp_calibrate_end_screen();
+ }
+}
+
+void mmi_heng_ai_bp_calibrate_start_screen(void)
+{
+ lv_heng_ai_bp_calibrate_ext_t * watch_ext = (lv_heng_ai_bp_calibrate_ext_t *)mmi_heng_ai_bp_calibrate_screen_ext_get();
+ if(NULL == watch_ext)
+ return;
+
+ lv_obj_clean(watch_ext->cont);
+ if(false == mmi_health_measure_wear_state_get())
+ {
+ lv_obj_t * img = lv_img_create(watch_ext->cont, NULL);
+ lv_img_set_src(img, ICON_HENGAI_BP_ALERT);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 90);
+
+ lv_obj_t * label_1 = lv_label_create(watch_ext->cont, NULL);
+ lv_obj_add_style(label_1, LV_LABEL_PART_MAIN, &lv_watch_font36);
+ lv_label_set_text_id(label_1, WATCH_TEXT_ID_DEVICE_NOT_WEAR);
+ lv_label_set_align(label_1, LV_LABEL_ALIGN_CENTER);
+ lv_obj_align(label_1, NULL, LV_ALIGN_IN_TOP_MID, 0, 278);
+ lv_obj_set_click(label_1, false);
+ }
+ else
+ {
+ mmi_open_sensor();
+
+ gif_info_t * gif_info = gif_open(watch_ext->cont, ANIM_HENGAI_BP_CALIBRATE, 0);
+ if(NULL == gif_info)
+ return;
+ lv_obj_align(gif_info->container, NULL, LV_ALIGN_IN_TOP_MID, 0, 104);
+ watch_ext->gif_info = gif_info;
+
+ lv_obj_t * label = lv_label_create(watch_ext->cont, NULL);
+ lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font28);
+ lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label, (0 == s_hengai_bp_calibrate_times) ? WATCH_TEXT_ID_IN_CALIBRATE_PROMPT_FIRST : WATCH_TEXT_ID_IN_CALIBRATE_PROMPT_SECOND);
+ lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 292);
+ lv_obj_set_click(label, false);
+
+ /* start timer (1 min) */
+ s_hengai_bp_measure_count = 0;
+ watch_ext->measure_timer_id = Hal_Timer_Start(1000, mmi_heng_ai_bp_calibrate_cycle_timeout, NULL, true);
+ }
+}
+
+void mmi_heng_ai_bp_calibrate_start_btn_event_cb(lv_obj_t * obj, lv_event_t e)
+{
+ if(LV_EVENT_CLICKED != e)
+ return;
+
+ s_hengai_bp_calibrate_times = 0;
+
+ lv_heng_ai_bp_calibrate_ext_t * watch_ext = (lv_heng_ai_bp_calibrate_ext_t *)mmi_heng_ai_bp_calibrate_screen_ext_get();
+ if(NULL == watch_ext)
+ return;
+
+ if(NULL == watch_ext->tileview)
+ return;
+
+ lv_obj_t * watch_obj = lv_obj_get_parent(watch_ext->tileview);
+ lv_obj_del(watch_ext->tileview);
+ lv_watch_obj_set_anim_mode(watch_obj, LV_WATCH_ANIM_HOR_RIGHT_HIDE);
+
+ lv_obj_t * cont = lv_cont_create(watch_obj, NULL);
+ lv_obj_set_size(cont, LV_HOR_RES, LV_VER_RES);
+ lv_obj_set_style_local_bg_color(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_obj_set_click(cont, false);
+ watch_ext->cont = cont;
+
+ mmi_heng_ai_bp_calibrate_start_screen();
+}
+
+lv_obj_t * mmi_heng_ai_bp_calibrate_tab_0(lv_obj_t * tileview, uint16_t id)
+{
+ lv_obj_t * tab = mmi_heng_ai_bp_tileview_add_tile(tileview, id);
+ if(NULL == tab)
+ return NULL;
+
+ lv_obj_t * label_title = lv_label_create(tab, NULL);
+ lv_obj_add_style(label_title, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(label_title, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label_title, WATCH_TEXT_ID_CALIBRATE_PROMPT);
+ lv_obj_align(label_title, NULL, LV_ALIGN_IN_TOP_MID, 0, 48);
+ lv_obj_set_click(label_title, false);
+
+ lv_obj_t * img = lv_img_create(tab, NULL);
+ lv_img_set_src(img, ICON_HENGAI_BP_PROMPT_0);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 104);
+
+ lv_obj_t * label_prompt = lv_label_create(tab, NULL);
+ lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font28);
+ 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, 400);
+ 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, 292);
+
+ return tab;
+}
+
+lv_obj_t * mmi_heng_ai_bp_calibrate_tab_1(lv_obj_t * tileview, uint16_t id)
+{
+ lv_obj_t * tab = mmi_heng_ai_bp_tileview_add_tile(tileview, id);
+ if(NULL == tab)
+ return NULL;
+
+ lv_obj_t * label_title = lv_label_create(tab, NULL);
+ lv_obj_add_style(label_title, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(label_title, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label_title, WATCH_TEXT_ID_CALIBRATE_PROMPT);
+ lv_obj_align(label_title, NULL, LV_ALIGN_IN_TOP_MID, 0, 48);
+ lv_obj_set_click(label_title, false);
+
+ lv_obj_t * img = lv_img_create(tab, NULL);
+ lv_img_set_src(img, ICON_HENGAI_BP_PROMPT_1);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 104);
+
+ lv_obj_t * label_prompt = lv_label_create(tab, NULL);
+ lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font28);
+ 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, 400);
+ lv_label_set_text_id(label_prompt, WATCH_TEXT_ID_CALIBRATE_PROMPT_1);
+ lv_obj_align(label_prompt, NULL, LV_ALIGN_IN_TOP_MID, 0, 292);
+
+ return tab;
+}
+
+lv_obj_t * mmi_heng_ai_bp_calibrate_tab_2(lv_obj_t * tileview, uint16_t id)
+{
+ lv_obj_t * tab = mmi_heng_ai_bp_tileview_add_tile(tileview, id);
+ if(NULL == tab)
+ return NULL;
+
+ lv_obj_t * label_title = lv_label_create(tab, NULL);
+ lv_obj_add_style(label_title, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(label_title, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label_title, WATCH_TEXT_ID_CALIBRATE_PROMPT);
+ lv_obj_align(label_title, NULL, LV_ALIGN_IN_TOP_MID, 0, 48);
+ lv_obj_set_click(label_title, false);
+
+ lv_obj_t * label_prompt = lv_label_create(tab, NULL);
+ lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font28);
+ 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, 400);
+ lv_label_set_text_id(label_prompt, WATCH_TEXT_ID_CALIBRATE_PROMPT_2);
+ lv_obj_align(label_prompt, NULL, LV_ALIGN_IN_TOP_MID, 0, 104);
+
+ lv_obj_t * imgbtn = lv_imgbtn_create(tab, NULL);
+ lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_RELEASED, ICON_HENGAI_BP_BOTTOM_BTN_BG);
+ lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_PRESSED, ICON_HENGAI_BP_BOTTOM_BTN_BG);
+ lv_obj_align(imgbtn, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
+ lv_obj_set_event_cb(imgbtn, mmi_heng_ai_bp_calibrate_start_btn_event_cb);
+
+ lv_obj_t * btn_label = lv_label_create(imgbtn, NULL);
+ lv_obj_add_style(btn_label, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(btn_label, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(btn_label, WATCH_TEXT_ID_START_CALIBRATE);
+ lv_obj_align(btn_label, NULL, LV_ALIGN_CENTER, 0, 0);
+
+ return tab;
+}
+
+void mmi_heng_ai_bp_calibrate_screen_tileview_led(lv_obj_t * tileview)
+{
+ lv_heng_ai_bp_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview);
+ if(NULL == ext)
+ return NULL;
+
+ if(NULL == ext->led_cont)
+ {
+ ext->led_cont = lv_cont_create(tileview, NULL);
+ lv_obj_set_base_dir(ext->led_cont, LV_BIDI_DIR_LTR);
+ lv_cont_set_fit(ext->led_cont, LV_FIT_TIGHT);
+ lv_cont_set_layout(ext->led_cont, LV_LAYOUT_ROW_MID);
+ lv_obj_add_style(ext->led_cont, LV_CONT_PART_MAIN, &lv_watch_style_transp);
+ lv_obj_set_click(ext->led_cont, false);
+ }
+
+ uint8_t i = 0;
+ for(i = 0; i < MMI_HENGAI_BP_TAB_COUNT; i++)
+ {
+ if(NULL == ext->led[i])
+ {
+ ext->led[i] = lv_led_create(ext->led_cont, NULL);
+ }
+
+ lv_led_off(ext->led[i]);
+ lv_obj_set_size(ext->led[i], 6, 6);
+ }
+
+ lv_coord_t x = -1, y = -1;
+ lv_tileview_get_tile_act(tileview, &x, &y);
+ lv_led_on(ext->led[x]);
+ lv_obj_set_size(ext->led[x], 10, 10);
+ lv_obj_set_pos(ext->led_cont, LV_HOR_RES * x + (LV_HOR_RES - lv_obj_get_width(ext->led_cont)) / 2, 100);
+}
+
+void mmi_heng_ai_bp_calibrate_screen_tileview_event_cb(lv_obj_t * tileview, lv_event_t e)
+{
+ if(LV_EVENT_VALUE_CHANGED != e)
+ return;
+
+ mmi_heng_ai_bp_calibrate_screen_tileview_led(tileview);
+}
+
+lv_obj_t * mmi_heng_ai_bp_calibrate_screen_create(lv_obj_t * activity_obj)
+{
+ if(NULL == activity_obj)
+ {
+ lv_watch_activity_ext_t activity_ext = {0};
+
+ activity_ext.actId = ACT_ID_HENG_AI_BP_CALIBRATE;
+ activity_ext.create = mmi_heng_ai_bp_calibrate_screen_create;
+ activity_ext.prepare_destory = mmi_heng_ai_bp_calibrate_screen_prepare_destory;
+ activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+ if(NULL == activity_obj)
+ return NULL;
+ }
+
+ lv_obj_t * watch_obj = lv_watch_obj_create(activity_obj);
+ LV_ASSERT_MEM(watch_obj);
+ if(NULL == watch_obj)
+ return NULL;
+ lv_watch_obj_set_anim_mode(watch_obj, LV_WATCH_ANIM_NO);
+ lv_heng_ai_bp_calibrate_ext_t * watch_ext = lv_obj_allocate_ext_attr(watch_obj, sizeof(lv_heng_ai_bp_calibrate_ext_t));
+ if(NULL == ext)
+ return NULL;
+ watch_ext->tileview = NULL;
+ watch_ext->cont = NULL;
+ watch_ext->gif_info = NULL;
+ watch_ext->measure_timer_id = NULL;
+ watch_ext->result_timer_id = NULL;
+
+ lv_obj_t * tileview = lv_tileview_create(watch_obj, NULL);
+ if(NULL == tileview)
+ return NULL;
+ lv_heng_ai_bp_tileview_ext_t * ext = lv_obj_allocate_ext_attr(tileview, sizeof(lv_heng_ai_bp_tileview_ext_t));
+ if(NULL == ext)
+ return NULL;
+
+ watch_ext->tileview = tileview;
+ ext->tab_0 = NULL;
+ ext->tab_1 = NULL;
+ ext->tab_2 = NULL;
+ ext->led_cont= NULL;
+ ext->led[0] = NULL;
+ ext->led[1] = NULL;
+ ext->led[2] = NULL;
+
+ lv_tileview_set_valid_positions(tileview, s_hengai_bp_valid_pos, MMI_HENGAI_BP_TAB_COUNT);
+ lv_tileview_set_edge_flash(tileview, true);
+ lv_tileview_set_anim_time(tileview, 60);
+ lv_page_set_scrollbar_mode(tileview, LV_SCROLLBAR_MODE_OFF);
+ lv_obj_add_style(tileview, LV_TILEVIEW_PART_EDGE_FLASH, &lv_watch_cont_opa1);
+ ext->tileview = tileview;
+
+ ext->tab_0 = mmi_heng_ai_bp_calibrate_tab_0(tileview, 0);
+ LV_ASSERT_MEM(ext->tab_0);
+ if(NULL == ext->tab_0)
+ return NULL;
+
+ ext->tab_1 = mmi_heng_ai_bp_calibrate_tab_1(tileview, 1);
+ LV_ASSERT_MEM(ext->tab_1);
+ if(NULL == ext->tab_1)
+ return NULL;
+
+ ext->tab_2 = mmi_heng_ai_bp_calibrate_tab_2(tileview, 2);
+ LV_ASSERT_MEM(ext->tab_2);
+ if(NULL == ext->tab_2)
+ return NULL;
+
+ lv_tileview_set_tile_act(tileview, 0, 0, LV_ANIM_OFF);
+ lv_watch_obj_add_element(tileview);
+ lv_watch_obj_add_element(lv_page_get_scrl(tileview));
+ lv_obj_set_event_cb(tileview, mmi_heng_ai_bp_calibrate_screen_tileview_event_cb);
+
+ mmi_heng_ai_bp_calibrate_screen_tileview_led(tileview);
+
+ //
+ watch_set_suspend_enable(false, ACT_ID_HENG_AI_BP_CALIBRATE, 0);
+}
+
+void mmi_heng_ai_bp_calibration_mode_btn_event_cb(lv_obj_t * obj, lv_event_t e)
+{
+ if(LV_EVENT_CLICKED != e)
+ return;
+
+ mmi_heng_ai_bp_calibrate_screen_create(NULL);
+}
+
+lv_obj_t * mmi_heng_ai_bp_calibration_mode_create(lv_obj_t * tileview, uint16_t id)
+{
+ lv_obj_t * tab = mmi_heng_ai_bp_tileview_add_tile(tileview, id);
+ if(NULL == tab)
+ return NULL;
+
+ lv_obj_t * label_title = lv_label_create(tab, NULL);
+ lv_obj_add_style(label_title, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(label_title, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label_title, WATCH_TEXT_ID_BP_CALIBRATION_MODE);
+ lv_obj_align(label_title, NULL, LV_ALIGN_IN_TOP_MID, 0, 48);
+ lv_obj_set_click(label_title, false);
+
+ lv_obj_t * img = lv_img_create(tab, NULL);
+ lv_img_set_src(img, ICON_HENGAI_BP_CALIBRATION_MODE);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 104);
+
+ lv_obj_t * imgbtn = lv_imgbtn_create(tab, NULL);
+ lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_RELEASED, ICON_HENGAI_BP_BTN_BG);
+ lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_PRESSED, ICON_HENGAI_BP_BTN_BG);
+ lv_obj_align(imgbtn, NULL, LV_ALIGN_IN_TOP_MID, 0, 300);
+ lv_obj_set_event_cb(imgbtn, mmi_heng_ai_bp_calibration_mode_btn_event_cb);
+
+ lv_obj_t * btn_label = lv_label_create(imgbtn, NULL);
+ lv_obj_add_style(btn_label, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(btn_label, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(btn_label, WATCH_TEXT_ID_CALIBRATE_PROMPT);
+ lv_obj_align(btn_label, NULL, LV_ALIGN_CENTER, 0, 0);
+
+ return tab;
+}
+
+
+void mmi_heng_ai_bp_attempt_mode_btn_event_cb(lv_obj_t * obj, lv_event_t e)
+{
+ if(LV_EVENT_CLICKED != e)
+ return;
+
+
+}
+
+lv_obj_t * mmi_heng_ai_bp_attempt_mode_create(lv_obj_t * tileview, uint16_t id)
+{
+ lv_obj_t * tab = mmi_heng_ai_bp_tileview_add_tile(tileview, id);
+ if(NULL == tab)
+ return NULL;
+
+ lv_obj_t * label_title = lv_label_create(tab, NULL);
+ lv_obj_add_style(label_title, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(label_title, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label_title, WATCH_TEXT_ID_BP_ATTEMPT_MODE);
+ lv_obj_align(label_title, NULL, LV_ALIGN_IN_TOP_MID, 0, 48);
+ lv_obj_set_click(label_title, false);
+
+ lv_obj_t * img = lv_img_create(tab, NULL);
+ lv_img_set_src(img, ICON_HENGAI_BP_ATTEMPT_MODE);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 104);
+
+ lv_obj_t * imgbtn = lv_imgbtn_create(tab, NULL);
+ lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_RELEASED, ICON_HENGAI_BP_BTN_BG);
+ lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_PRESSED, ICON_HENGAI_BP_BTN_BG);
+ lv_obj_align(imgbtn, NULL, LV_ALIGN_IN_TOP_MID, 0, 300);
+ lv_obj_set_event_cb(imgbtn, mmi_heng_ai_bp_attempt_mode_btn_event_cb);
+
+ lv_obj_t * btn_label = lv_label_create(imgbtn, NULL);
+ lv_obj_add_style(btn_label, LV_LABEL_PART_MAIN, &lv_watch_font32);
+ lv_label_set_align(btn_label, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(btn_label, WATCH_TEXT_ID_START_MEASURE);
+ lv_obj_align(btn_label, NULL, LV_ALIGN_CENTER, 0, 0);
+
+ return tab;
+}
+
+
+void mmi_heng_ai_bp_tileview_led(lv_obj_t * tileview)
+{
+ lv_heng_ai_bp_obj_ext_t * ext = mmi_heng_ai_bp_ext_get();
+ if(NULL == ext)
+ return NULL;
+
+ if(NULL == ext->led_cont)
+ {
+ ext->led_cont = lv_cont_create(tileview, NULL);
+ lv_obj_set_base_dir(ext->led_cont, LV_BIDI_DIR_LTR);
+ lv_cont_set_fit(ext->led_cont, LV_FIT_TIGHT);
+ lv_cont_set_layout(ext->led_cont, LV_LAYOUT_ROW_MID);
+ lv_obj_add_style(ext->led_cont, LV_CONT_PART_MAIN, &lv_watch_style_transp);
+ lv_obj_set_click(ext->led_cont, false);
+ }
+
+ uint8_t i = 0;
+ for(i = 0; i < MMI_HENGAI_BP_TAB_COUNT; i++)
+ {
+ if(NULL == ext->led[i])
+ {
+ ext->led[i] = lv_led_create(ext->led_cont, NULL);
+ }
+
+ lv_led_off(ext->led[i]);
+ lv_obj_set_size(ext->led[i], 6, 6);
+ }
+
+ lv_coord_t x = -1, y = -1;
+ lv_tileview_get_tile_act(tileview, &x, &y);
+ lv_led_on(ext->led[x]);
+ lv_obj_set_size(ext->led[x], 10, 10);
+
+ PHONEBOOK_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: x=%d\n", __FUNCTION__, __LINE__, x);
+
+ lv_obj_set_pos(ext->led_cont, LV_HOR_RES * x + (LV_HOR_RES - lv_obj_get_width(ext->led_cont)) / 2,
+ LV_VER_RES - lv_obj_get_width(ext->led_cont) - 10);
+}
+
+void mmi_heng_ai_bp_tileview_event_cb(lv_obj_t * tileview, lv_event_t e)
+{
+ if(LV_EVENT_VALUE_CHANGED != e)
+ return;
+
+ mmi_heng_ai_bp_tileview_led(tileview);
+}
+
+lv_obj_t * mmi_heng_ai_blood_pressure_screen_create(lv_obj_t * activity_obj)
+{
+ if(NULL == activity_obj)
+ {
+ lv_watch_activity_ext_t activity_ext = {0};
+
+ activity_ext.actId = ACT_ID_HENG_AI_BP;
+ activity_ext.create = mmi_heng_ai_blood_pressure_screen_create;
+ activity_ext.prepare_destory = mmi_heng_ai_blood_pressure_screen_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 * watch_obj = lv_watch_obj_create(activity_obj);
+ if(NULL == watch_obj)
+ return NULL;
+
+ if(false == watch_modem_sim_present_check_req())
+ {
+ lv_watch_obj_set_anim_mode(watch_obj, LV_WATCH_ANIM_HOR_RIGHT_HIDE);
+
+ lv_obj_t * img = lv_img_create(watch_obj, NULL);
+ lv_img_set_src(img, ICON_HENGAI_BP_ALERT);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 90);
+
+ lv_obj_t * label_1 = lv_label_create(watch_obj, NULL);
+ //lv_obj_set_size(label_1, LV_HOR_RES, 30);
+ lv_obj_add_style(label_1, LV_LABEL_PART_MAIN, &lv_watch_font36);
+ lv_label_set_text_id(label_1, WATCH_TEXT_ID_DEVICE_NO_NETWORK);
+ lv_label_set_align(label_1, LV_LABEL_ALIGN_CENTER);
+ lv_obj_align(label_1, NULL, LV_ALIGN_IN_TOP_MID, 0, 278);
+ lv_obj_set_click(label_1, false);
+ }
+ else if(true != mmi_watch_tcp_connect_state_get()
+ || true != mmi_protocol_watch_bind_state_get()
+ )
+ {
+ lv_watch_obj_set_anim_mode(watch_obj, LV_WATCH_ANIM_HOR_RIGHT_HIDE);
+
+ lv_obj_t * img = lv_img_create(watch_obj, NULL);
+ lv_img_set_src(img, ICON_HENGAI_BP_ALERT);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 90);
+
+ lv_obj_t * label_1 = lv_label_create(watch_obj, NULL);
+ //lv_obj_set_size(label_1, LV_HOR_RES, 30);
+ lv_obj_add_style(label_1, LV_LABEL_PART_MAIN, &lv_watch_font36);
+ lv_label_set_text_id(label_1, WATCH_TEXT_ID_DEVICE_NOT_BIND);
+ lv_label_set_align(label_1, LV_LABEL_ALIGN_CENTER);
+ lv_obj_align(label_1, NULL, LV_ALIGN_IN_TOP_MID, 0, 278);
+ lv_obj_set_click(label_1, false);
+ }
+ else if(false == mmi_health_measure_wear_state_get())
+ {
+ lv_watch_obj_set_anim_mode(watch_obj, LV_WATCH_ANIM_HOR_RIGHT_HIDE);
+
+ lv_obj_t * img = lv_img_create(watch_obj, NULL);
+ lv_img_set_src(img, ICON_HENGAI_BP_ALERT);
+ lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_MID, 0, 90);
+
+ lv_obj_t * label_1 = lv_label_create(watch_obj, NULL);
+ //lv_obj_set_size(label_1, LV_HOR_RES, 30);
+ lv_obj_add_style(label_1, LV_LABEL_PART_MAIN, &lv_watch_font36);
+ lv_label_set_text_id(label_1, WATCH_TEXT_ID_DEVICE_NOT_WEAR);
+ lv_label_set_align(label_1, LV_LABEL_ALIGN_CENTER);
+ lv_obj_align(label_1, NULL, LV_ALIGN_IN_TOP_MID, 0, 278);
+ lv_obj_set_click(label_1, false);
+ }
+ else
+ {
+ lv_watch_obj_set_anim_mode(watch_obj, LV_WATCH_ANIM_NO);
+
+ lv_heng_ai_bp_obj_ext_t * ext = lv_obj_allocate_ext_attr(watch_obj, sizeof(lv_heng_ai_bp_obj_ext_t));
+ if(NULL == ext)
+ return NULL;
+
+ ext->tab_measure_mdoe = NULL;
+ ext->tab_calibration_mode = NULL;
+ ext->tab_attempt_mode = NULL;
+ ext->led_cont= NULL;
+ ext->led[0] = NULL;
+ ext->led[1] = NULL;
+ ext->led[2] = NULL;
+
+ lv_obj_t * tileview = lv_tileview_create(watch_obj, NULL);
+ if(NULL == tileview)
+ return NULL;
+ lv_tileview_set_valid_positions(tileview, s_hengai_bp_valid_pos, MMI_HENGAI_BP_TAB_COUNT);
+ lv_tileview_set_edge_flash(tileview, true);
+ lv_tileview_set_anim_time(tileview, 60);
+ lv_page_set_scrollbar_mode(tileview, LV_SCROLLBAR_MODE_OFF);
+ lv_obj_add_style(tileview, LV_TILEVIEW_PART_EDGE_FLASH, &lv_watch_cont_opa1);
+ ext->tileview = tileview;
+
+ ext->tab_measure_mdoe = mmi_heng_ai_bp_measure_mode_create(tileview, 0);
+ LV_ASSERT_MEM(ext->tab_measure_mdoe);
+ if(NULL == ext->tab_measure_mdoe)
+ return NULL;
+
+ ext->tab_calibration_mode = mmi_heng_ai_bp_calibration_mode_create(tileview, 1);
+ LV_ASSERT_MEM(ext->tab_calibration_mode);
+ if(NULL == ext->tab_calibration_mode)
+ return NULL;
+
+ ext->tab_attempt_mode = mmi_heng_ai_bp_attempt_mode_create(tileview, 2);
+ LV_ASSERT_MEM(ext->tab_attempt_mode);
+ if(NULL == ext->tab_attempt_mode)
+ return NULL;
+
+ if(1 == s_hengai_bp_calibrated)
+ lv_tileview_set_tile_act(tileview, 1, 0, LV_ANIM_OFF);
+ else
+ lv_tileview_set_tile_act(tileview, 0, 0, LV_ANIM_OFF);
+
+ lv_watch_obj_add_element(tileview);
+ lv_watch_obj_add_element(lv_page_get_scrl(tileview));
+ lv_obj_set_event_cb(tileview, mmi_heng_ai_bp_tileview_event_cb);
+
+ mmi_heng_ai_bp_tileview_led(tileview);
+ }
+
+ return watch_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_set_hidden(img, true);
+ ext->img = img;
+
+ lv_obj_t * label_info = lv_label_create(cont, NULL);
+ //lv_obj_set_size(label_info, LV_HOR_RES, 30);
+ 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_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_font40);
+ 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);
+ lv_obj_set_click(label_value, false);
+ ext->label_value = label_value;
+
+ if(false == mmi_health_measure_wear_state_get())
+ {
+ ext->measure_state = STATE_HEART_RATE_MEASURE_FAIL;
+ }
+ else
+ {
+ mmi_health_measure_ui_measure_start(MMI_HEALTH_MEASURE_HEART);
+
+ 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);
+ ext->gif_cont = gif_cont;
+
+ ext->gif_info = gif_open(gif_cont, ANIM_HEART_RATE_MEASURING, 0);
+ if(!ext->gif_info)
+ {
+ 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_heart_rate_measure_cycle_timeout, NULL, TRUE);
+
+ ext->measure_state = STATE_HEART_RATE_MEASURING;
+ watch_set_suspend_enable(false, ACT_ID_HENG_AI_BP, 0);
+ }
+
+ health_heart_rate_display_update();
+
+ return watch_obj;
+}
+*/
+
+void mmi_heng_ai_blood_pressure_create_event_cb(lv_obj_t * btn, lv_event_t e)
+{
+ (void)btn;
+ if(LV_EVENT_CLICKED == e)
+ {
+ lv_obj_t * obj = mmi_heng_ai_blood_pressure_screen_create(NULL);
+ LV_ASSERT_MEM(obj);
+ }
+}
+
+#endif