From: CCC <2393524978@qq.com> Date: Fri, 29 Dec 2023 03:12:35 +0000 (+0800) Subject: gengxin X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=9b255f8ae87c5a9f5807ed09f9d1e2fc07eca277;p=mirrors%2FASR3603_Z5.git gengxin --- 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 b1f3998a..ed245c14 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 @@ -841,6 +841,7 @@ const void * lang_text_ch[] = { "正在测量", "测量完成", "测量失败", + "测量成功", // WATCH_TEXT_ID_MEASURE_SUCCESS, "未正确佩戴", "请保持佩戴", "当前体温", @@ -934,17 +935,21 @@ const void * lang_text_ch[] = { "精准模式", // WATCH_TEXT_ID_BP_MEASURE_MODE, "校准模式", // WATCH_TEXT_ID_BP_CALIBRATION_MODE, "体验模式", // WATCH_TEXT_ID_BP_ATTEMPT_MODE, + "结果分析中", // WATCH_TEXT_ID_WAIT_RESULT, "开始测量", // WATCH_TEXT_ID_START_MEASURE, "停止测量", // WATCH_TEXT_ID_STOP_MEASURE, "测量说明", // WATCH_TEXT_ID_MEASURE_PROMPT, "开始校准", // WATCH_TEXT_ID_START_CALIBRATE, + "校准中", // WATCH_TEXT_ID_CALIBRATING, "停止校准", // WATCH_TEXT_ID_STOP_CALIBRATE, "校准完成", // WATCH_TEXT_ID_CALIBRATE_SUCCESS, "校准失败", // WATCH_TEXT_ID_CALIBRATE_FAILED, "校准说明", // WATCH_TEXT_ID_CALIBRATE_PROMPT, "双脚着地,端坐在椅子上。双手手背朝上,手臂平放在桌子上", // WATCH_TEXT_ID_CALIBRATE_PROMPT_0, "手表和手腕之间仅限一指距离,手表偏紧佩戴", // WATCH_TEXT_ID_CALIBRATE_PROMPT_1, - "1.建立血压模型需进行2次校准\n2.高血压患者需要进行2轮校准\n3.建议每个月进行重新校准\n4.校准过程和实际血压测量使用同一只手", // WATCH_TEXT_ID_CALIBRATE_PROMPT_2, + "1.建立血压模型需进行2次校准\n2.建议每个月进行重新校准\n3.校准过程和实际血压测量使用同一只手", // WATCH_TEXT_ID_CALIBRATE_PROMPT_2, + "请使用传统血压计测量手腕同一位置", // WATCH_TEXT_ID_CALIBRATE_PROMPT_3, + "需用时约1分钟", // WATCH_TEXT_ID_NEED_ONE_MINUTE, "首次校准中,请保持静止", // WATCH_TEXT_ID_IN_CALIBRATE_PROMPT_FIRST, "再次校准中,请保持静止", // WATCH_TEXT_ID_IN_CALIBRATE_PROMPT_SECOND, "测量中,请保持静止", // WATCH_TEXT_ID_IN_CALIBRATE_PROMPT, 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 d3150e8b..e7800eb6 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 @@ -842,6 +842,7 @@ const void * lang_text_en[] = { "Measuring", "Measure done", "Measure fail", + "Measure success", // WATCH_TEXT_ID_MEASURE_SUCCESS, "Not wear", "Please keep wearing", "Body temperature", @@ -935,10 +936,12 @@ const void * lang_text_en[] = { "Measure mode", // WATCH_TEXT_ID_BP_MEASURE_MODE, "Calibration mode", // WATCH_TEXT_ID_BP_CALIBRATION_MODE, "Attempt mode", // WATCH_TEXT_ID_BP_ATTEMPT_MODE, + "Wait result", // WATCH_TEXT_ID_WAIT_RESULT, "Start test", // WATCH_TEXT_ID_START_MEASURE, "Stop test", // WATCH_TEXT_ID_STOP_MEASURE, "Measure prompt", // WATCH_TEXT_ID_MEASURE_PROMPT, "Start calibrate", // WATCH_TEXT_ID_START_CALIBRATE, + "Calibrating", // WATCH_TEXT_ID_CALIBRATING, "Stop calibrate", // WATCH_TEXT_ID_STOP_CALIBRATE, "Calibrate success", // WATCH_TEXT_ID_CALIBRATE_SUCCESS, "Calibrate failed", // WATCH_TEXT_ID_CALIBRATE_FAILED, @@ -946,6 +949,8 @@ const void * lang_text_en[] = { "Calibrate prompt", // WATCH_TEXT_ID_CALIBRATE_PROMPT_0, "Calibrate prompt", // WATCH_TEXT_ID_CALIBRATE_PROMPT_1, "Calibrate prompt", // WATCH_TEXT_ID_CALIBRATE_PROMPT_2, + "Calibrate prompt", // WATCH_TEXT_ID_CALIBRATE_PROMPT_3, + "Takes about 1 minute", // WATCH_TEXT_ID_NEED_ONE_MINUTE, "Calibrating,keep still", // WATCH_TEXT_ID_IN_CALIBRATE_PROMPT_FIRST, "Calibrating,keep still", // WATCH_TEXT_ID_IN_CALIBRATE_PROMPT_SECOND, "Measuring,keep still", // WATCH_TEXT_ID_IN_CALIBRATE_PROMPT, diff --git a/2.sdk/sdk/gui/lv_watch/framework/nvm/ui_nvm.h b/2.sdk/sdk/gui/lv_watch/framework/nvm/ui_nvm.h index fa787139..2fa0ae5a 100644 --- a/2.sdk/sdk/gui/lv_watch/framework/nvm/ui_nvm.h +++ b/2.sdk/sdk/gui/lv_watch/framework/nvm/ui_nvm.h @@ -89,6 +89,10 @@ extern "C" { #define NV_SECTION_UI_HENG_AI_WAKE_RING_TYPE_LEN (sizeof(nv_watch_switch_t)) #define NV_SECTION_UI_HENG_AI_SLEEP_ACTIVATION_LEN (sizeof(nv_watch_heng_ai_sleep_activation_t)) #endif +#ifdef __MMI_CUSTOM_HENG_AI_BLOOD_PRESSURE__ +#define NV_SECTION_UI_HENG_AI_BLOOD_PRESSURE_LEN (sizeof(nv_watch_heng_ai_blood_pressure_t)) +#endif + #endif @@ -224,6 +228,9 @@ typedef lv_fs_dir_t ui_dir_t; #define NV_SECTION_UI_HENG_AI_WAKE_RING_TYPE_FILE "ui_heng_ai_wake_ring_type.nv" #define NV_SECTION_UI_HENG_AI_SLEEP_ACTIVATION_FILE "ui_heng_ai_sleep_activation.nv" #endif +#ifdef __MMI_CUSTOM_HENG_AI_BLOOD_PRESSURE__ +#define NV_SECTION_UI_HENG_AI_BLOOD_PRESSURE_FILE "ui_heng_ai_blood_pressure.nv" +#endif #endif diff --git a/2.sdk/sdk/gui/lv_watch/framework/nvm/ui_nvm_api.c b/2.sdk/sdk/gui/lv_watch/framework/nvm/ui_nvm_api.c index 8688953a..df2fff26 100644 --- a/2.sdk/sdk/gui/lv_watch/framework/nvm/ui_nvm_api.c +++ b/2.sdk/sdk/gui/lv_watch/framework/nvm/ui_nvm_api.c @@ -150,6 +150,10 @@ uint32_t UI_NV_Get_Section_Len(NV_UI_SECTION_ID SectionId) case NV_SECTION_UI_HENG_AI_SLEEP_ACTIVATION: return (NV_SECTION_LEN(NV_SECTION_UI_HENG_AI_SLEEP_ACTIVATION)); #endif + #ifdef __MMI_CUSTOM_HENG_AI_BLOOD_PRESSURE__ + case NV_SECTION_UI_HENG_AI_BLOOD_PRESSURE: + return (NV_SECTION_LEN(NV_SECTION_UI_HENG_AI_BLOOD_PRESSURE)); + #endif #endif @@ -301,6 +305,10 @@ char * UI_NV_Get_Section_path(NV_UI_SECTION_ID SectionId) case NV_SECTION_UI_HENG_AI_SLEEP_ACTIVATION: return (NV_SECTION_FILE_PATH(NV_SECTION_UI_HENG_AI_SLEEP_ACTIVATION)); #endif + #ifdef __MMI_CUSTOM_HENG_AI_BLOOD_PRESSURE__ + case NV_SECTION_UI_HENG_AI_BLOOD_PRESSURE: + return (NV_SECTION_FILE_PATH(NV_SECTION_UI_HENG_AI_BLOOD_PRESSURE)); + #endif #endif @@ -392,6 +400,9 @@ uint8_t UI_NV_Reset_Default(NV_UI_SECTION_ID SectionId) #ifdef __MMI_CUSTOM_HENG_AI__ nv_watch_heng_ai_sleep_activation_t * heng_ai_sleep_activation; #endif +#ifdef __MMI_CUSTOM_HENG_AI_BLOOD_PRESSURE__ + nv_watch_heng_ai_blood_pressure_t * heng_ai_blood_pressure; +#endif #endif @@ -718,6 +729,14 @@ uint8_t UI_NV_Reset_Default(NV_UI_SECTION_ID SectionId) TempData = (char *)heng_ai_sleep_activation; break; #endif + + #ifdef __MMI_CUSTOM_HENG_AI_BLOOD_PRESSURE__ + case NV_SECTION_UI_HENG_AI_BLOOD_PRESSURE: + heng_ai_blood_pressure = lv_mem_alloc(SectionLen); + memset(heng_ai_blood_pressure, 0x0, SectionLen); + TempData = (char *)heng_ai_blood_pressure; + break; + #endif #endif 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 fdaca54f..504cbbb8 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 @@ -452,6 +452,20 @@ typedef struct } __packed nv_watch_heng_ai_sleep_activation_t; #endif +#ifdef __MMI_CUSTOM_HENG_AI_BLOOD_PRESSURE__ +typedef struct +{ +#if 0 + uint8_t is_activated; // 0-not activated; 1-activated + char req_code[128]; + char act_code[128]; +#endif + uint8_t is_calibrated; // 0-not calibrated; 1-calibrated + hal_rtc_t calibrate_time; +} __packed nv_watch_heng_ai_blood_pressure_t; +#endif + + #endif @@ -686,6 +700,10 @@ enum NV_SECTION_UI_HENG_AI_WAKE_RING_TYPE, // nv_watch_switch_t NV_SECTION_UI_HENG_AI_SLEEP_ACTIVATION, // nv_watch_heng_ai_sleep_activation_t #endif +#ifdef __MMI_CUSTOM_HENG_AI_BLOOD_PRESSURE__ + NV_SECTION_UI_HENG_AI_BLOOD_PRESSURE, // nv_watch_heng_ai_blood_pressure_t +#endif + #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 855a0af0..65db4ad3 100644 --- a/2.sdk/sdk/gui/lv_watch/include/ui_textid.h +++ b/2.sdk/sdk/gui/lv_watch/include/ui_textid.h @@ -848,6 +848,7 @@ enum WATCH_TEXT_ID_MEASURING, /*"正在测量" "Measuring"*/ WATCH_TEXT_ID_MEASURE_DONE, /*"测量完成" "Measure done"*/ WATCH_TEXT_ID_MEASURE_FAIL, /*"测量失败" "Measure fail"*/ + WATCH_TEXT_ID_MEASURE_SUCCESS, /*"测量成功" "Measure success"*/ WATCH_TEXT_ID_NOT_WEAR, /*"未正确佩戴" "Not wear"*/ WATCH_TEXT_ID_KEEP_WEAR, /*"请保持佩戴" "Please keep wearing"*/ WATCH_TEXT_ID_CURRENT_BODY_TEMPERATURE, // 当前体温 @@ -941,18 +942,22 @@ enum WATCH_TEXT_ID_BP_MEASURE_MODE, /* "精准模式" "Measure mode" */ WATCH_TEXT_ID_BP_CALIBRATION_MODE, /* "校准模式" "Calibration mode" */ WATCH_TEXT_ID_BP_ATTEMPT_MODE, /* "体验模式" "Attempt mode" */ + WATCH_TEXT_ID_WAIT_RESULT, /* "结果分析中" "Wait result" */ WATCH_TEXT_ID_START_MEASURE, /* "开始测量" "Start test" */ WATCH_TEXT_ID_STOP_MEASURE, /* "停止测量" "Stop test" */ WATCH_TEXT_ID_MEASURE_PROMPT, /* "测量说明" "Measure prompt" */ WATCH_TEXT_ID_START_CALIBRATE, /* "开始校准" "Start calibrate" */ + WATCH_TEXT_ID_CALIBRATING, /* "校准中" "Calibrating" */ WATCH_TEXT_ID_STOP_CALIBRATE, /* "停止校准" "Stop calibrate" */ WATCH_TEXT_ID_CALIBRATE_SUCCESS, /* "校准完成" "Calibrate success" */ WATCH_TEXT_ID_CALIBRATE_FAILED, /* "校准失败" "Calibrate failed" */ WATCH_TEXT_ID_CALIBRATE_PROMPT, /* "校准说明" "Calibrate prompt" */ WATCH_TEXT_ID_CALIBRATE_PROMPT_0, /* "双脚着地,端坐在椅子上。双手手背朝上,手臂平放在桌子上" "Calibrate prompt" */ WATCH_TEXT_ID_CALIBRATE_PROMPT_1, /* "手表和手腕之间仅限一指距离,手表偏紧佩戴" "Calibrate prompt" */ - WATCH_TEXT_ID_CALIBRATE_PROMPT_2, /* "1.建立血压模型需进行2次校准\n2.高血压患者需要进行2轮校准\n3.建议每个月进行重新校准\n4.校准过程和实际血压测量使用同一只手" + WATCH_TEXT_ID_CALIBRATE_PROMPT_2, /* "1.建立血压模型需进行2次校准\n2.建议每个月进行重新校准\n3.校准过程和实际血压测量使用同一只手" "Calibrate prompt" */ + WATCH_TEXT_ID_CALIBRATE_PROMPT_3, /* "请使用传统血压计测量手腕同一位置" "Calibrate prompt" */ + WATCH_TEXT_ID_NEED_ONE_MINUTE, /* "需用时约1分钟" "Takes about 1 minute" */ WATCH_TEXT_ID_IN_CALIBRATE_PROMPT_FIRST, /* "首次校准中,请保持静止" "Calibrating,keep still" */ WATCH_TEXT_ID_IN_CALIBRATE_PROMPT_SECOND, /* "再次校准中,请保持静止" "Calibrating,keep still" */ WATCH_TEXT_ID_IN_MEASURE_PROMPT, /* "测量中,请保持静止" "Measuring,keep still" */ 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 494f1b75..7a0b468d 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 @@ -5,128 +5,79 @@ #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){} +static nv_watch_heng_ai_blood_pressure_t s_hengai_blood_pressure_data = {0}; - - -// 0-ring; 1-vibrator -void mmi_heng_ai_wake_ring_type_set(uint8_t ring_type) +void mmi_hengai_blood_pressure_nv_write(void) { - nv_watch_switch_t ring_type_data = {0}; - uint32_t nv_data_length = sizeof(nv_watch_switch_t); + uint32_t nv_data_length = sizeof(nv_watch_heng_ai_blood_pressure_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)) + if(nv_data_length != UI_NV_Write_Req(NV_SECTION_UI_HENG_AI_BLOOD_PRESSURE, 0, nv_data_length, (uint8_t *)&s_hengai_blood_pressure_data)) { printf("[@CHENG_DEBUG][%s][%d]: nv write fail\n", __FUNCTION__, __LINE__); } } -uint8_t mmi_heng_ai_wake_ring_type_get(void) +void mmi_hengai_blood_pressure_nv_read(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)) + uint32_t nv_data_length = sizeof(nv_watch_heng_ai_blood_pressure_t); + + if(nv_data_length != UI_NV_Read_Req(NV_SECTION_UI_HENG_AI_BLOOD_PRESSURE, 0, nv_data_length, (uint8_t *)&s_hengai_blood_pressure_data)) { printf("[@CHENG_DEBUG][%s][%d]: nv read fail\n", __FUNCTION__, __LINE__); + _lv_memset_00(&s_hengai_blood_pressure_data, sizeof(nv_watch_heng_ai_blood_pressure_t)); } - - 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) +void mmi_hengai_blood_pressure_data_set(nv_watch_heng_ai_blood_pressure_t * data) { - 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) + if(NULL != data) { - void * ext = lv_obj_get_ext_attr(watch_obj); - return ext; + _lv_memset_00(&s_hengai_blood_pressure_data, sizeof(nv_watch_heng_ai_blood_pressure_t)); + _lv_memcpy(&s_hengai_blood_pressure_data, data, sizeof(nv_watch_heng_ai_blood_pressure_t)); + mmi_hengai_blood_pressure_nv_write(); } - - return NULL; } -static void mmi_heng_ai_warning_screen_prepare_destory(lv_obj_t * activity_obj) +uint8_t mmi_hengai_bp_is_calibrated(void) { - lv_watch_png_cache_all_free(); - - Hal_Vibrator_Play_End(); - - Hal_Tone_Play_End(); - Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_REMIND); + return (s_hengai_blood_pressure_data.is_calibrated); +} - 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; - } +#if 0 +uint8_t mmi_hengai_bp_is_activated(void) +{ + return (s_hengai_blood_pressure_data.is_activated); +} - 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; - } - } +char * mmi_hengai_bp_req_code_get(void) +{ + return (s_hengai_blood_pressure_data.req_code); +} - watch_set_suspend_enable(true, ACT_ID_HENG_AI_WARNING, 0); +void mmi_hengai_bp_req_code_set(char * req_code) +{ + _lv_memcpy(s_hengai_blood_pressure_data.req_code, req_code, strlen(req_code)); } -void mmi_heng_ai_warning_screen_clean(void) +char * mmi_hengai_bp_act_code_get(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); - } + return (s_hengai_blood_pressure_data.act_code); } -void mmi_heng_ai_warning_btn_event_cb(lv_obj_t * obj, lv_event_t e) +void mmi_hengai_bp_act_code_set(char * act_code) { - if(LV_EVENT_CLICKED == e) - { - mmi_heng_ai_warning_screen_clean(); - } + _lv_memcpy(s_hengai_blood_pressure_data.act_code, act_code, strlen(act_code)); } -static void mmi_heng_ai_warning_screen_timeout(void * para) +void mmi_hengai_bp_activated_finish(void) { - mmi_heng_ai_warning_screen_clean(); + s_hengai_blood_pressure_data.is_activated = 1; + mmi_hengai_blood_pressure_nv_write(); } +#endif + +#if 0 static lv_obj_t * mmi_heng_ai_warning_screen_create(lv_obj_t * activity_obj) { printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); @@ -195,9 +146,6 @@ static lv_obj_t * mmi_heng_ai_warning_screen_create(lv_obj_t * activity_obj) 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); @@ -267,9 +215,119 @@ void health_heart_rate_display_update(void) break; } } +#endif + + +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; +static uint8_t s_hengai_bp_measuring = 0; +static char s_hengai_bp_begin_time_str[24] = {0}, s_hengai_bp_end_time_str[24] = {0}; +static int * s_hengai_bp_raw_data_ptr = NULL; +static int s_hengai_bp_raw_data_len = 0; + + +uint8_t mmi_hengai_bp_is_measuring(void) +{ + return (s_hengai_bp_measuring); +} + +char * mmi_hengai_bp_measure_action_time_string_get(uint8_t is_begin) +{ + return ((1 == is_begin) ? s_hengai_bp_begin_time_str : s_hengai_bp_end_time_str); +} + +void mmi_hengai_bp_measure_action_time_string_set(uint8_t is_begin) +{ + hal_rtc_t cur_time = {0}; + char * temp_ptr = mmi_hengai_bp_measure_action_time_string_get(is_begin); + + Hal_Rtc_Gettime(&cur_time); + sprintf(temp_ptr, "%04d-%02d-%02d %02d:%02d:%02d", + cur_time.tm_year, + cur_time.tm_mon, + cur_time.tm_mday, + cur_time.tm_hour, + cur_time.tm_min, + cur_time.tm_sec); +} + +void mmi_hengai_bp_raw_data_fill(void) +{ + if(NULL != s_hengai_bp_raw_data_ptr) + { + lv_mem_free(s_hengai_bp_raw_data_ptr); + s_hengai_bp_raw_data_ptr = NULL; + } + s_hengai_bp_raw_data_ptr = (int *)lv_mem_alloc(MMI_HENGAI_BP_RAW_DATA_SAMPLE_RATE * MMI_BP_MEASURE_TOTAL_COUNT * sizeof(int)); + _lv_memset_00(s_hengai_bp_raw_data_ptr, sizeof(s_hengai_bp_raw_data_ptr)); + + _lv_memcpy(s_hengai_bp_raw_data_ptr, fr8012haq_blood_data_get(&s_hengai_bp_raw_data_len), sizeof(s_hengai_bp_raw_data_ptr)); + + printf("[@CHENG_DEBUG][%s][%d]: raw_data_len=%d\n", __FUNCTION__, __LINE__, s_hengai_bp_raw_data_len); +} + +int * mmi_hengai_bp_raw_data_ptr_get(void) +{ + return s_hengai_bp_raw_data_ptr; +} + +int mmi_hengai_bp_raw_data_len_get(void) +{ + return s_hengai_bp_raw_data_len; +} + +void mmi_hengai_bp_raw_data_free(void) +{ + if(NULL != s_hengai_bp_raw_data_ptr) + { + lv_mem_free(s_hengai_bp_raw_data_ptr); + s_hengai_bp_raw_data_ptr = NULL; + } +} + + +static lv_obj_t * mmi_bp_screen_common_bottom_button_create(lv_obj_t * par, uint32_t text_id, lv_event_cb_t event_cb) +{ + lv_obj_t * imgbtn = lv_imgbtn_create(par, 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, 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, text_id); + lv_obj_align(btn_label, NULL, LV_ALIGN_CENTER, 0, 0); + + return imgbtn; +} + +static lv_obj_t * mmi_bp_screen_common_left_button_create(lv_obj_t * par, int16_t x_offset, int16_t y_offset,lv_event_cb_t event_cb) +{ + lv_obj_t * imgbtn = lv_imgbtn_create(par, NULL); + lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_RELEASED, ICON_HENGAI_BP_LEFT_ARROW); + lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_PRESSED, ICON_HENGAI_BP_LEFT_ARROW); + lv_obj_align(imgbtn, NULL, LV_ALIGN_IN_LEFT_MID, x_offset, y_offset); + lv_obj_set_event_cb(imgbtn, event_cb); + + return imgbtn; +} + +static lv_obj_t * mmi_bp_screen_common_right_button_create(lv_obj_t * par, int16_t x_offset, int16_t y_offset,lv_event_cb_t event_cb) +{ + lv_obj_t * imgbtn = lv_imgbtn_create(par, NULL); + lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_RELEASED, ICON_HENGAI_BP_RIGHT_ARROW); + lv_imgbtn_set_src(imgbtn, LV_BTN_STATE_PRESSED, ICON_HENGAI_BP_RIGHT_ARROW); + lv_obj_align(imgbtn, NULL, LV_ALIGN_IN_RIGHT_MID, x_offset, y_offset); + lv_obj_set_event_cb(imgbtn, event_cb); + return imgbtn; +} -lv_heng_ai_bp_obj_ext_t * mmi_heng_ai_bp_ext_get(void) +static lv_heng_ai_bp_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) @@ -280,59 +338,37 @@ lv_heng_ai_bp_obj_ext_t * mmi_heng_ai_bp_ext_get(void) if(NULL == watch_obj) return NULL; - lv_heng_ai_bp_obj_ext_t * ext = NULL; + lv_heng_ai_bp_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) +static void mmi_heng_ai_bp_screen_prepare_destory(lv_obj_t * activity_obj) { - HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); - - mmi_hengai_http_tcp_disconnect_msg(NULL); + printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); + + mmi_hengai_bp_raw_data_free(); - watch_set_suspend_enable(true, ACT_ID_HENG_AI_BP, 0); + //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(); - } + mmi_heng_ai_bp_measure_screen_clean(); + mmi_heng_ai_bp_calibrate_screen_clean(); - HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); - } } -void mmi_heng_ai_blood_pressure_screen_clean(void) +void mmi_heng_ai_bp_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); + mmi_heng_ai_bp_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); @@ -401,7 +437,7 @@ void mmi_heng_ai_bp_measure_screen_clean(void) } } -void mmi_heng_ai_bp_measure_result_screen_event_cb(lv_obj_t * obj, lv_event_t e) +void mmi_hengai_bp_measure_result_screen_event_cb(lv_obj_t * obj, lv_event_t e) { if(LV_EVENT_CLICKED != e) return; @@ -412,8 +448,10 @@ void mmi_heng_ai_bp_measure_result_screen_event_cb(lv_obj_t * obj, lv_event_t e) // 0-ok; 1-high; 2-low; 3-fail -void mmi_heng_ai_bp_measure_result_screen(uint8_t result) +void mmi_hengai_bp_measure_result_screen(uint8_t result) { + mmi_hengai_bp_raw_data_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) return; @@ -433,12 +471,13 @@ void mmi_heng_ai_bp_measure_result_screen(uint8_t result) gif_close(watch_ext->gif_info); watch_ext->gif_info = NULL; } + watch_ext->is_watting_result = false; lv_obj_clean(watch_ext->cont); - uint32_t label_title_text_id[] = {WATCH_TEXT_ID_CALIBRATE_SUCCESS, + uint32_t label_title_text_id[] = {WATCH_TEXT_ID_MEASURE_SUCCESS, WATCH_TEXT_ID_BLOOD_PRESSURE_HIGH, WATCH_TEXT_ID_BLOOD_PRESSURE_LOW, - WATCH_TEXT_ID_CALIBRATE_FAILED}; + WATCH_TEXT_ID_MEASURE_FAIL}; 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); @@ -452,13 +491,13 @@ void mmi_heng_ai_bp_measure_result_screen(uint8_t 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_label_set_text_id(label_prompt, WATCH_TEXT_ID_MEASURE_FAIL); lv_obj_align(label_prompt, NULL, LV_ALIGN_IN_TOP_MID, 0, 292); } else @@ -513,92 +552,136 @@ void mmi_heng_ai_bp_measure_result_screen(uint8_t result) 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); + mmi_bp_screen_common_bottom_button_create(watch_ext->cont, WATCH_TEXT_ID_OK, mmi_hengai_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_hengai_bp_measure_result_timeout(void * para) +{ + mmi_hengai_bp_measure_result_screen(3); } -void mmi_heng_ai_bp_measure_result_timeout(void * para) +void mmi_hengai_bp_measure_update_result(bool state, uint16_t bp_value_high, uint16_t bp_value_low, char * description) { 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) + if(true != watch_ext->is_watting_result) + return; + + if(true == state) { - Hal_Timer_Stop(watch_ext->result_timer_id); - watch_ext->result_timer_id = NULL; + s_bp_value_high = bp_value_high; + s_bp_value_low = bp_value_low; + if(NULL != description) + { + + } + + mmi_hengai_bp_measure_result_screen(0); + } + else + { + mmi_hengai_bp_measure_result_screen(3); + } +} + +void mmi_hengai_bp_measure_finish_screen(void) +{ + mmi_hsensor_close(); + mmi_hengai_bp_measure_action_time_string_set(0); + + 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->gif_info) { gif_close(watch_ext->gif_info); watch_ext->gif_info = NULL; } + watch_ext->is_watting_result = true; + lv_obj_clean(watch_ext->cont); + +#if 1 + gif_info_t * gif_info = gif_open(watch_ext->cont, ANIM_HENGAI_BP_WAITTING, 0); + if(NULL == gif_info) + return; + lv_obj_set_style_local_bg_color(gif_info->container, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_obj_align(gif_info->container, NULL, LV_ALIGN_CENTER, 0, 0); + watch_ext->gif_info = gif_info; - mmi_heng_ai_bp_measure_result_screen(3); + lv_obj_t * label_prompt = lv_label_create(gif_info->container, 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_WAIT_RESULT); + lv_obj_align(label_prompt, NULL, LV_ALIGN_CENTER, 0, 0); +#else + + 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, WATCH_TEXT_ID_WAIT_RESULT); + lv_obj_align(label_prompt, NULL, LV_ALIGN_IN_TOP_MID, 0, 292); +#endif + + watch_ext->result_timer_id = Hal_Timer_Start(MMI_BP_WAIT_RESULT_TIMEOUT, mmi_hengai_bp_measure_result_timeout, NULL, false); } -void mmi_heng_ai_bp_measure_cycle_timeout(void * para) +void mmi_hengai_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 + if(MMI_BP_MEASURE_TOTAL_COUNT < s_hengai_bp_measure_count) // stop action when 60s { - mmi_heng_ai_bp_raw_data_send(); + mmi_hengai_bp_raw_data_fill(); + mmi_hengai_bp_measure_raw_data_send(); + mmi_hengai_bp_measure_finish_screen(); } - - if(MMI_BP_MEASURE_TOTAL_COUNT == s_hengai_bp_measure_count) // stop action when 60s + else { - // 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); + lv_label_set_align(watch_ext->label_time, LV_LABEL_ALIGN_CENTER); + char time_str[16] = {0}; + sprintf(time_str, "%02d:%02d/%02d:%02d", s_hengai_bp_measure_count / 60, + s_hengai_bp_measure_count % 60, + MMI_BP_MEASURE_TOTAL_COUNT / 60, + MMI_BP_MEASURE_TOTAL_COUNT % 60); + lv_label_set_text(watch_ext->label_time, time_str); + lv_obj_align(watch_ext->label_time, NULL, LV_ALIGN_IN_TOP_MID, 0, 292); } } -void mmi_heng_ai_bp_measure_start_btn_event_cb(lv_obj_t * obj, lv_event_t e) +void mmi_hengai_bp_measure_start_btn_event_cb(lv_obj_t * obj, lv_event_t e) { if(LV_EVENT_CLICKED != e) return; + printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); 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; + lv_obj_set_hidden(watch_ext->cont, false); + lv_obj_set_hidden(watch_ext->cont_prompt_0, true); + lv_obj_set_hidden(watch_ext->cont_prompt_1, true); + lv_obj_t * cont = watch_ext->cont; if(false == mmi_health_measure_wear_state_get()) { + printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); 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); @@ -612,45 +695,83 @@ void mmi_heng_ai_bp_measure_start_btn_event_cb(lv_obj_t * obj, lv_event_t e) } else { - mmi_open_sensor(); + printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); + mmi_hsensor_bp_open(); + mmi_hengai_bp_measure_action_time_string_set(1); + + s_hengai_bp_measure_count = 0; gif_info_t * gif_info = gif_open(cont, ANIM_HENGAI_BP_MEASURE, 0); if(NULL == gif_info) return; + lv_obj_set_style_local_bg_color(gif_info->container, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); lv_obj_align(gif_info->container, NULL, LV_ALIGN_IN_TOP_MID, 0, 104); watch_ext->gif_info = gif_info; + lv_obj_t * label_time = lv_label_create(cont, NULL); + lv_obj_add_style(label_time, LV_LABEL_PART_MAIN, &lv_watch_font36); + lv_label_set_align(label_time, LV_LABEL_ALIGN_CENTER); + char time_str[16] = {0}; + sprintf(time_str, "%02d:%02d/%02d:%02d", s_hengai_bp_measure_count / 60, + s_hengai_bp_measure_count % 60, + MMI_BP_MEASURE_TOTAL_COUNT / 60, + MMI_BP_MEASURE_TOTAL_COUNT % 60); + lv_label_set_text(label_time, time_str); + lv_obj_align(label_time, NULL, LV_ALIGN_IN_TOP_MID, 0, 292); + lv_obj_set_click(label_time, false); + watch_ext->label_time = label_time; + 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_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 324 + 30); 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); + watch_ext->measure_timer_id = Hal_Timer_Start(1000, mmi_hengai_bp_measure_cycle_timeout, NULL, true); } } -lv_obj_t * mmi_heng_ai_bp_measure_tab_0(lv_obj_t * tileview, uint16_t id) +void mmi_hengai_bp_measure_prompt_switch_event_cb(lv_obj_t * obj, lv_event_t e) { - lv_obj_t * tab = mmi_heng_ai_bp_tileview_add_tile(tileview, id); - if(NULL == tab) - return NULL; + if(LV_EVENT_CLICKED != e) + return; + + printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); + + 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; - lv_obj_t * label_title = lv_label_create(tab, NULL); + lv_obj_set_hidden(watch_ext->cont, true); + uint8_t free_num = lv_watch_get_free_num(obj); + if(0 == free_num) + { + lv_obj_set_hidden(watch_ext->cont_prompt_0, true); + lv_obj_set_hidden(watch_ext->cont_prompt_1, false); + } + else + { + lv_obj_set_hidden(watch_ext->cont_prompt_0, false); + lv_obj_set_hidden(watch_ext->cont_prompt_1, true); + } +} + +void mmi_hengai_bp_measure_prompt_0(lv_obj_t * cont) +{ + lv_obj_t * label_title = lv_label_create(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_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_obj_t * img = lv_img_create(cont, 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_t * label_prompt = lv_label_create(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); @@ -658,27 +779,26 @@ lv_obj_t * mmi_heng_ai_bp_measure_tab_0(lv_obj_t * tileview, uint16_t id) 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 * imgbtn = mmi_bp_screen_common_right_button_create(cont, 0, 0, mmi_hengai_bp_measure_prompt_switch_event_cb); + lv_watch_set_free_num(imgbtn, 0); + + mmi_bp_screen_common_bottom_button_create(cont, WATCH_TEXT_ID_START_MEASURE, mmi_hengai_bp_measure_start_btn_event_cb); } -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); +void mmi_hengai_bp_measure_prompt_1(lv_obj_t * cont) +{ + lv_obj_t * label_title = lv_label_create(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_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_obj_t * img = lv_img_create(cont, 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_t * label_prompt = lv_label_create(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); @@ -686,69 +806,17 @@ lv_obj_t * mmi_heng_ai_bp_measure_tab_1(lv_obj_t * tileview, uint16_t id) 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); + lv_obj_t * imgbtn = mmi_bp_screen_common_left_button_create(cont, 0, 0, mmi_hengai_bp_measure_prompt_switch_event_cb); + lv_watch_set_free_num(imgbtn, 1); - return tab; + mmi_bp_screen_common_bottom_button_create(cont, WATCH_TEXT_ID_START_MEASURE, mmi_hengai_bp_measure_start_btn_event_cb); } -void mmi_heng_ai_bp_measure_screen_tileview_led(lv_obj_t * tileview) +lv_obj_t * mmi_heng_ai_bp_measure_screen_create(lv_obj_t * activity_obj) { - lv_heng_ai_bp_tileview_ext_t * ext = lv_obj_get_ext_attr(tileview); - if(NULL == ext) - return NULL; - - if(NULL == ext->led_cont) + if(NULL == activity_obj) { - 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}; + 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; @@ -762,55 +830,42 @@ lv_obj_t * mmi_heng_ai_bp_measure_screen_create(lv_obj_t * 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_watch_obj_set_anim_mode(watch_obj, LV_WATCH_ANIM_HOR_RIGHT_HIDE); 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) + if(NULL == watch_ext) return NULL; - watch_ext->tileview = NULL; watch_ext->cont = NULL; + watch_ext->cont_prompt_0 = NULL; + watch_ext->cont_prompt_1 = 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_obj_t * cont = NULL; + cont = lv_cont_create(watch_obj, NULL); + lv_obj_set_size(cont, LV_HOR_RES, LV_VER_RES); + //lv_obj_add_style(cont, LV_CONT_PART_MAIN, &lv_style_transp_tight); + 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; - 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); + 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_prompt_0 = cont; + mmi_hengai_bp_measure_prompt_0(cont); + + 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_prompt_1 = cont; + mmi_hengai_bp_measure_prompt_1(cont); - mmi_heng_ai_bp_measure_screen_tileview_led(tileview); + lv_obj_set_hidden(watch_ext->cont, true); + lv_obj_set_hidden(watch_ext->cont_prompt_0, false); + lv_obj_set_hidden(watch_ext->cont_prompt_1, true); // watch_set_suspend_enable(false, ACT_ID_HENG_AI_BP_MEASURE, 0); @@ -851,7 +906,7 @@ lv_obj_t * mmi_heng_ai_bp_measure_mode_create(lv_obj_t * tileview, uint16_t id) 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_label_set_text_id(btn_label, WATCH_TEXT_ID_MEASURE_PROMPT); lv_obj_align(btn_label, NULL, LV_ALIGN_CENTER, 0, 0); return tab; @@ -912,9 +967,150 @@ void mmi_heng_ai_bp_calibrate_screen_clean(void) } } +void mmi_heng_ai_bp_calibrate_result_event_cb(lv_obj_t * obj, lv_event_t e) +{ + if(LV_EVENT_CLICKED != e) + return; + + mmi_heng_ai_bp_calibrate_screen_clean(); +} + +void mmi_hengai_bp_calibrate_result_screen(bool result) +{ + mmi_hengai_bp_raw_data_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; + + // 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; + } + watch_ext->is_watting_result = false; + lv_obj_clean(watch_ext->cont); + + // display + uint32_t label_title_text_id[] = {WATCH_TEXT_ID_CALIBRATE_SUCCESS, WATCH_TEXT_ID_CALIBRATE_FAILED}; + void * img_src_path[] = {ICON_HENGAI_BP_SUCCESS, ICON_HENGAI_BP_ALERT}; + uint32_t label_prompt_text_id[] = {WATCH_TEXT_ID_BLOOD_PRESSURE_NORMAL_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 ? 0 : 1)]); + 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 ? 0 : 1)]); + 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 ? 0 : 1)]); + lv_obj_align(label_prompt, NULL, LV_ALIGN_IN_TOP_MID, 0, 292); + + mmi_bp_screen_common_bottom_button_create(watch_ext->cont, WATCH_TEXT_ID_OK, mmi_heng_ai_bp_calibrate_result_event_cb); +} + +void mmi_hengai_bp_calibrate_result_timeout(void * para) +{ + mmi_hengai_bp_calibrate_result_screen(false); +} + +void mmi_hengai_bp_calibrate_update_result(bool is_success) +{ + 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(true != watch_ext->is_watting_result) + return; + + if(is_success) + { + nv_watch_heng_ai_blood_pressure_t data = {0}; + + data.is_calibrated = 1; + mmi_hengai_blood_pressure_data_set(&data); + } + mmi_hengai_bp_calibrate_result_screen(is_success); +} + +void mmi_hengai_bp_calibrate_finish_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); + watch_ext->is_watting_result = true; + +#if 1 + gif_info_t * gif_info = gif_open(watch_ext->cont, ANIM_HENGAI_BP_WAITTING, 0); + if(NULL == gif_info) + return; + lv_obj_set_style_local_bg_color(gif_info->container, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_obj_align(gif_info->container, NULL, LV_ALIGN_CENTER, 0, 0); + watch_ext->gif_info = gif_info; + + lv_obj_t * label_prompt = lv_label_create(gif_info->container, 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_WAIT_RESULT); + lv_obj_align(label_prompt, NULL, LV_ALIGN_CENTER, 0, 0); +#else + 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, WATCH_TEXT_ID_WAIT_RESULT); + lv_obj_align(label_prompt, NULL, LV_ALIGN_IN_TOP_MID, 0, 292); +#endif + + watch_ext->result_timer_id = Hal_Timer_Start(MMI_BP_WAIT_RESULT_TIMEOUT, mmi_hengai_bp_calibrate_result_timeout, NULL, false); +} + +void mmi_hengai_bp_calibrate_end_input_event_cb(lv_obj_t * obj, lv_event_t e) +{ + if(LV_EVENT_CLICKED != e) + return; + + // send vaule + mmi_hengai_bp_calibrate_raw_data_send(s_hengai_bp_calibrate_times, s_bp_value_high, s_bp_value_low); + + if(1 == s_hengai_bp_calibrate_times) + { + // once again + mmi_heng_ai_bp_calibrate_start_screen(); + } + else + { + mmi_hengai_bp_calibrate_finish_screen(); + } +} + 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; @@ -923,7 +1119,7 @@ void mmi_bp_roller_get_optstr_from_num(uint16_t sel_value, char * stropt, uint32 if(0 == user_num) // high { - min = 80 + min = 80; max = 200; count = 121; } @@ -946,7 +1142,6 @@ void mmi_bp_roller_get_optstr_from_num(uint16_t sel_value, char * stropt, uint32 stropt[pos++] = 0x0A; } stropt [pos - 1] = 0; -*/ } void mmi_bp_roller_action(lv_obj_t * roller, lv_event_t event) @@ -957,7 +1152,7 @@ void mmi_bp_roller_action(lv_obj_t * roller, lv_event_t event) uint32_t user_num = lv_watch_get_free_num(roller); uint16_t sel_value = 0; char sel_str[4] = {0}; - char stropt[40] = {0}; + char stropt[16] = {0}; lv_roller_get_selected_str(roller, sel_str, 4); sel_value = atoi(sel_str); @@ -976,16 +1171,15 @@ lv_obj_t * mmi_bp_roller_create(lv_obj_t * par, uint32_t user_num) //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_add_style(roller, LV_ROLLER_PART_BG, &lv_watch_font28_gray); //&lv_watch_font36_gray); + lv_obj_set_style_local_text_line_space(roller, LV_ROLLER_PART_BG, LV_STATE_DEFAULT, 28); //36); 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_text_line_space(roller, LV_ROLLER_PART_SELECTED, LV_STATE_DEFAULT, 60); 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}; + uint16_t sel_value = 90; + char stropt[16] = {0}; mmi_bp_roller_get_optstr_from_num(sel_value, stropt, user_num); @@ -1001,113 +1195,12 @@ lv_obj_t * mmi_bp_roller_create(lv_obj_t * par, uint32_t user_num) 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(); - +void mmi_hengai_bp_calibrate_input_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; - 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); @@ -1125,7 +1218,7 @@ void mmi_heng_ai_bp_calibrate_end_screen(void) 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_align(roller_cont_0, NULL, LV_ALIGN_IN_TOP_LEFT, 96, 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); @@ -1135,36 +1228,69 @@ void mmi_heng_ai_bp_calibrate_end_screen(void) 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_align(roller_cont_1, NULL, LV_ALIGN_IN_TOP_LEFT, 276, 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); + s_bp_value_high = 0; + s_bp_value_low = 0; + mmi_bp_screen_common_bottom_button_create(watch_ext->cont, WATCH_TEXT_ID_OK, mmi_hengai_bp_calibrate_end_input_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_hengai_bp_calibrate_end_btn_event_cb(lv_obj_t * obj, lv_event_t e) +{ + if(LV_EVENT_CLICKED != e) + return; + + mmi_hengai_bp_calibrate_input_screen(); } -void mmi_heng_ai_bp_calibrate_cycle_timeout(void * para) +void mmi_hengai_bp_calibrate_end_screen(void) { - mmi_heng_ai_bp_raw_data_save(); + mmi_hsensor_close(); + mmi_hengai_bp_measure_action_time_string_set(0); - s_hengai_bp_measure_count++; + 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(0 == (s_hengai_bp_measure_count % MMI_BP_MEASURE_SEND_DATA_COUNT)) // send raw data per 10s + if(NULL != watch_ext->measure_timer_id) { - mmi_heng_ai_bp_raw_data_send(); + Hal_Timer_Stop(watch_ext->measure_timer_id); + watch_ext->measure_timer_id = NULL; } - - if(MMI_BP_MEASURE_TOTAL_COUNT <= s_hengai_bp_measure_count) // stop action when 60s + if(NULL != watch_ext->gif_info) + { + 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_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(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, 360); // 400); + lv_label_set_text_id(label_prompt, WATCH_TEXT_ID_CALIBRATE_PROMPT_3); + lv_obj_align(label_prompt, NULL, LV_ALIGN_IN_TOP_MID, 0, 200); // 104); + + mmi_bp_screen_common_bottom_button_create(watch_ext->cont, WATCH_TEXT_ID_OK, mmi_hengai_bp_calibrate_end_btn_event_cb); +} + +void mmi_hengai_bp_calibrate_cycle_timeout(void * para) +{ + s_hengai_bp_measure_count++; + + 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(); + mmi_hengai_bp_raw_data_fill(); + mmi_hengai_bp_calibrate_end_screen(); } } @@ -1190,11 +1316,20 @@ void mmi_heng_ai_bp_calibrate_start_screen(void) } else { - mmi_open_sensor(); + mmi_hsensor_bp_open(); + mmi_hengai_bp_measure_action_time_string_set(1); + 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_CALIBRATING); + lv_obj_align(label_title, NULL, LV_ALIGN_IN_TOP_MID, 0, 48); + lv_obj_set_click(label_title, false); + gif_info_t * gif_info = gif_open(watch_ext->cont, ANIM_HENGAI_BP_CALIBRATE, 0); if(NULL == gif_info) return; + lv_obj_set_style_local_bg_color(gif_info->container, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); lv_obj_align(gif_info->container, NULL, LV_ALIGN_IN_TOP_MID, 0, 104); watch_ext->gif_info = gif_info; @@ -1205,13 +1340,20 @@ void mmi_heng_ai_bp_calibrate_start_screen(void) lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 292); lv_obj_set_click(label, false); + 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, WATCH_TEXT_ID_NEED_ONE_MINUTE); + lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 348); + 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); + watch_ext->measure_timer_id = Hal_Timer_Start(1000, mmi_hengai_bp_calibrate_cycle_timeout, NULL, true); } } -void mmi_heng_ai_bp_calibrate_start_btn_event_cb(lv_obj_t * obj, lv_event_t e) +void mmi_hengai_bp_calibrate_start_btn_event_cb(lv_obj_t * obj, lv_event_t e) { if(LV_EVENT_CLICKED != e) return; @@ -1222,40 +1364,64 @@ void mmi_heng_ai_bp_calibrate_start_btn_event_cb(lv_obj_t * obj, lv_event_t e) 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; + lv_obj_set_hidden(watch_ext->cont, false); + lv_obj_set_hidden(watch_ext->cont_prompt_0, true); + lv_obj_set_hidden(watch_ext->cont_prompt_1, true); + lv_obj_set_hidden(watch_ext->cont_prompt_2, true); + //lv_obj_del(watch_ext->cont_prompt_0); + //lv_obj_del(watch_ext->cont_prompt_1); + //lv_obj_del(watch_ext->cont_prompt_2); mmi_heng_ai_bp_calibrate_start_screen(); } -lv_obj_t * mmi_heng_ai_bp_calibrate_tab_0(lv_obj_t * tileview, uint16_t id) +void mmi_hengai_bp_calibrate_prompt_switch_event_cb(lv_obj_t * obj, lv_event_t e) { - lv_obj_t * tab = mmi_heng_ai_bp_tileview_add_tile(tileview, id); - if(NULL == tab) - return NULL; + if(LV_EVENT_CLICKED != e) + return; + + printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); + + 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_t * label_title = lv_label_create(tab, NULL); + lv_obj_set_hidden(watch_ext->cont, true); + uint8_t free_num = lv_watch_get_free_num(obj); + if((0 == free_num) || (3 == free_num)) + { + lv_obj_set_hidden(watch_ext->cont_prompt_0, true); + lv_obj_set_hidden(watch_ext->cont_prompt_1, false); + lv_obj_set_hidden(watch_ext->cont_prompt_2, true); + } + else if(1 == free_num) + { + lv_obj_set_hidden(watch_ext->cont_prompt_0, false); + lv_obj_set_hidden(watch_ext->cont_prompt_1, true); + lv_obj_set_hidden(watch_ext->cont_prompt_2, true); + } + else if(2 == free_num) + { + lv_obj_set_hidden(watch_ext->cont_prompt_0, true); + lv_obj_set_hidden(watch_ext->cont_prompt_1, true); + lv_obj_set_hidden(watch_ext->cont_prompt_2, false); + } +} + +void mmi_hengai_bp_calibrate_prompt_0(lv_obj_t * cont) +{ + lv_obj_t * label_title = lv_label_create(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_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_obj_t * img = lv_img_create(cont, 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_t * label_prompt = lv_label_create(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); @@ -1263,27 +1429,26 @@ lv_obj_t * mmi_heng_ai_bp_calibrate_tab_0(lv_obj_t * tileview, uint16_t id) 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 * imgbtn = mmi_bp_screen_common_right_button_create(cont, 0, 0, mmi_hengai_bp_calibrate_prompt_switch_event_cb); + lv_watch_set_free_num(imgbtn, 0); + + mmi_bp_screen_common_bottom_button_create(cont, WATCH_TEXT_ID_START_CALIBRATE, mmi_hengai_bp_calibrate_start_btn_event_cb); } -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); +void mmi_hengai_bp_calibrate_prompt_1(lv_obj_t * cont) +{ + lv_obj_t * label_title = lv_label_create(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_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_obj_t * img = lv_img_create(cont, 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_t * label_prompt = lv_label_create(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); @@ -1291,23 +1456,26 @@ lv_obj_t * mmi_heng_ai_bp_calibrate_tab_1(lv_obj_t * tileview, uint16_t id) 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 * imgbtn = NULL; + imgbtn = mmi_bp_screen_common_left_button_create(cont, 0, 0, mmi_hengai_bp_calibrate_prompt_switch_event_cb); + lv_watch_set_free_num(imgbtn, 1); + + imgbtn = mmi_bp_screen_common_right_button_create(cont, 0, 0, mmi_hengai_bp_calibrate_prompt_switch_event_cb); + lv_watch_set_free_num(imgbtn, 2); + + mmi_bp_screen_common_bottom_button_create(cont, WATCH_TEXT_ID_START_CALIBRATE, mmi_hengai_bp_calibrate_start_btn_event_cb); } -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); +void mmi_hengai_bp_calibrate_prompt_2(lv_obj_t * cont) +{ + lv_obj_t * label_title = lv_label_create(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_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_t * label_prompt = lv_label_create(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); @@ -1315,62 +1483,10 @@ lv_obj_t * mmi_heng_ai_bp_calibrate_tab_2(lv_obj_t * tileview, uint16_t id) 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 * imgbtn = mmi_bp_screen_common_left_button_create(cont, 0, 0, mmi_hengai_bp_calibrate_prompt_switch_event_cb); + lv_watch_set_free_num(imgbtn, 3); + + mmi_bp_screen_common_bottom_button_create(cont, WATCH_TEXT_ID_START_CALIBRATE, mmi_hengai_bp_calibrate_start_btn_event_cb); } lv_obj_t * mmi_heng_ai_bp_calibrate_screen_create(lv_obj_t * activity_obj) @@ -1391,60 +1507,51 @@ lv_obj_t * mmi_heng_ai_bp_calibrate_screen_create(lv_obj_t * 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_watch_obj_set_anim_mode(watch_obj, LV_WATCH_ANIM_HOR_RIGHT_HIDE); 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) + if(NULL == watch_ext) return NULL; - watch_ext->tileview = NULL; watch_ext->cont = NULL; + watch_ext->cont_prompt_0 = NULL; + watch_ext->cont_prompt_1 = NULL; + watch_ext->cont_prompt_2 = 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; + lv_obj_t * cont = NULL; + cont = lv_cont_create(watch_obj, NULL); + lv_obj_set_size(cont, LV_HOR_RES, LV_VER_RES); + //lv_obj_add_style(cont, LV_CONT_PART_MAIN, &lv_style_transp_tight); + 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; - 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; + 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_prompt_0 = cont; + mmi_hengai_bp_calibrate_prompt_0(cont); - 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; + 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_prompt_1 = cont; + mmi_hengai_bp_calibrate_prompt_1(cont); - 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); + 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_prompt_2 = cont; + mmi_hengai_bp_calibrate_prompt_2(cont); - mmi_heng_ai_bp_calibrate_screen_tileview_led(tileview); + lv_obj_set_hidden(watch_ext->cont, true); + lv_obj_set_hidden(watch_ext->cont_prompt_0, false); + lv_obj_set_hidden(watch_ext->cont_prompt_1, true); + lv_obj_set_hidden(watch_ext->cont_prompt_2, true); // watch_set_suspend_enable(false, ACT_ID_HENG_AI_BP_CALIBRATE, 0); @@ -1491,6 +1598,7 @@ lv_obj_t * mmi_heng_ai_bp_calibration_mode_create(lv_obj_t * tileview, uint16_t } +// void mmi_heng_ai_bp_attempt_mode_btn_event_cb(lv_obj_t * obj, lv_event_t e) { if(LV_EVENT_CLICKED != e) @@ -1525,7 +1633,7 @@ lv_obj_t * mmi_heng_ai_bp_attempt_mode_create(lv_obj_t * tileview, uint16_t id) 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_label_set_text_id(btn_label, WATCH_TEXT_ID_MEASURE_PROMPT); lv_obj_align(btn_label, NULL, LV_ALIGN_CENTER, 0, 0); return tab; @@ -1534,7 +1642,8 @@ lv_obj_t * mmi_heng_ai_bp_attempt_mode_create(lv_obj_t * tileview, uint16_t id) 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 0 + lv_heng_ai_bp_ext_t * ext = mmi_heng_ai_bp_ext_get(); if(NULL == ext) return NULL; @@ -1569,6 +1678,7 @@ void mmi_heng_ai_bp_tileview_led(lv_obj_t * tileview) 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); +#endif } void mmi_heng_ai_bp_tileview_event_cb(lv_obj_t * tileview, lv_event_t e) @@ -1576,18 +1686,18 @@ 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); + //mmi_heng_ai_bp_tileview_led(tileview); } -lv_obj_t * mmi_heng_ai_blood_pressure_screen_create(lv_obj_t * activity_obj) +lv_obj_t * mmi_heng_ai_bp_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_ext.create = mmi_heng_ai_bp_screen_create; + activity_ext.prepare_destory = mmi_heng_ai_bp_screen_prepare_destory; activity_obj = lv_watch_creat_activity_obj(&activity_ext); LV_ASSERT_MEM(activity_obj); @@ -1599,6 +1709,7 @@ lv_obj_t * mmi_heng_ai_blood_pressure_screen_create(lv_obj_t * activity_obj) if(NULL == watch_obj) return NULL; +#if 0 if(false == watch_modem_sim_present_check_req()) { lv_watch_obj_set_anim_mode(watch_obj, LV_WATCH_ANIM_HOR_RIGHT_HIDE); @@ -1650,10 +1761,11 @@ lv_obj_t * mmi_heng_ai_blood_pressure_screen_create(lv_obj_t * activity_obj) lv_obj_set_click(label_1, false); } else +#endif { 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)); + lv_heng_ai_bp_ext_t * ext = lv_obj_allocate_ext_attr(watch_obj, sizeof(lv_heng_ai_bp_ext_t)); if(NULL == ext) return NULL; @@ -1690,88 +1802,81 @@ lv_obj_t * mmi_heng_ai_blood_pressure_screen_create(lv_obj_t * activity_obj) if(NULL == ext->tab_attempt_mode) return NULL; - if(1 == s_hengai_bp_calibrated) + if(1 == mmi_hengai_bp_is_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); + //lv_obj_set_event_cb(tileview, mmi_heng_ai_bp_tileview_event_cb); - mmi_heng_ai_bp_tileview_led(tileview); + //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); +void mmi_heng_ai_blood_pressure_create_event_cb(lv_obj_t * btn, lv_event_t e) +{ + if(LV_EVENT_CLICKED == e) + { + lv_obj_t * obj = mmi_heng_ai_bp_screen_create(NULL); + LV_ASSERT_MEM(obj); + } +} - lv_obj_t * gif_cont = lv_cont_create(cont, NULL); - lv_obj_set_size(gif_cont, LV_HOR_RES, 100); - lv_obj_set_style_local_bg_color(gif_cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_obj_align(gif_cont, cont, LV_ALIGN_IN_TOP_MID, 0, HEART_MEASURE_IMAGE_Y); - 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); + + + +static void * __s_debug_timer_id = NULL; +//TIMER_ID measure_timer_id; + +void __debug_timer_start(void); + +void __debug_timer_cb(void * param) +{ + char temp_buff[128] = {0}; - ext->measure_state = STATE_HEART_RATE_MEASURING; - watch_set_suspend_enable(false, ACT_ID_HENG_AI_BP, 0); - } + //»ñÈ¡48×Ö½ÚaslccÂëµÄÊ®Áù½øÖÆÑªÑ¹Êý¾Ýµ½blood_buf£¬×¢Òâ:blood_buf³¤¶ÈÒª´óÓÚµÈÓÚ48*2×Ö½Ú + //void fr8012haq_blood_data_get(char *blood_buf) + fr8012haq_blood_data_get(temp_buff); - health_heart_rate_display_update(); + printf("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, temp_buff); + printf("[@CHENG_DEBUG][%d]: %s\n", __LINE__, temp_buff + 31); + printf("[@CHENG_DEBUG][%d]: %s\n", __LINE__, temp_buff + 63); - return watch_obj; + __debug_timer_start(); } -*/ -void mmi_heng_ai_blood_pressure_create_event_cb(lv_obj_t * btn, lv_event_t e) +void __debug_timer_start(void) { - (void)btn; - if(LV_EVENT_CLICKED == e) + if(NULL == __s_debug_timer_id) + uos_timer_create(&__s_debug_timer_id); + else + uos_timer_stop(__s_debug_timer_id); + + uos_timer_start(__s_debug_timer_id, MS_TO_TICKS(1000), 0, __debug_timer_cb, NULL); +} + +void __debug_stop(void) +{ + mmi_hsensor_close(); + + if(NULL != __s_debug_timer_id) { - mmi_hengai_http_tcp_connect_msg(NULL); - - lv_obj_t * obj = mmi_heng_ai_blood_pressure_screen_create(NULL); - LV_ASSERT_MEM(obj); - } + uos_timer_stop(__s_debug_timer_id); + uos_timer_delete(__s_debug_timer_id); + __s_debug_timer_id = NULL; + } +} + +void __debug_start(void) +{ + mmi_hsensor_bp_open(); + + __debug_timer_start(); } #endif diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.h b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.h index 9489dbd6..720f372e 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.h +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_blood_pressure.h @@ -21,8 +21,11 @@ extern "C" { #define MMI_HENGAI_BP_TAB_COUNT (3) #define MMI_BP_MEASURE_TOTAL_COUNT (60) // times -#define MMI_BP_MEASURE_SEND_DATA_COUNT (10) // times -#define MMI_BP_WAIT_RESULT_TIMEOUT (1000 * 5) // ms + +#define MMI_BP_WAIT_RESULT_TIMEOUT (1000 * 10) // ms + +#define MMI_HENGAI_BP_RAW_DATA_SAMPLE_RATE (81) + @@ -43,36 +46,31 @@ typedef struct { lv_watch_obj_ext_t lv_watch_obj; /*New data for this type */ - lv_obj_t * tileview; lv_obj_t * cont; + lv_obj_t * cont_prompt_0; + lv_obj_t * cont_prompt_1; gif_info_t * gif_info; + lv_obj_t * label_time; TIMER_ID measure_timer_id; TIMER_ID result_timer_id; + bool is_watting_result; } lv_heng_ai_bp_measure_ext_t; - typedef struct { lv_watch_obj_ext_t lv_watch_obj; /*New data for this type */ - lv_obj_t * tileview; lv_obj_t * cont; + lv_obj_t * cont_prompt_0; + lv_obj_t * cont_prompt_1; + lv_obj_t * cont_prompt_2; gif_info_t * gif_info; TIMER_ID measure_timer_id; TIMER_ID result_timer_id; + bool is_watting_result; } lv_heng_ai_bp_calibrate_ext_t; -typedef struct -{ - lv_watch_obj_ext_t lv_watch_obj; - /*New data for this type */ - lv_obj_t * tab_0; - lv_obj_t * tab_1; - lv_obj_t * tab_2; - lv_obj_t * led_cont; - lv_obj_t * led[MMI_HENGAI_BP_TAB_COUNT]; -} lv_heng_ai_bp_tileview_ext_t; @@ -82,22 +80,19 @@ typedef struct -typedef struct -{ - MMI_HENG_AI_WARNING_TYPE_E type; - MMI_HENG_AI_WARNING_STATE_E state; - void * prompt_str; -} mmi_heng_ai_warning_info_s; +void mmi_hengai_blood_pressure_nv_read(void); -typedef struct -{ - lv_watch_obj_ext_t lv_watch_obj; - /*New data for this type */ - TIMER_ID timer_id; -} lv_heng_ai_warning_obj_ext_t; +#if 0 +uint8_t mmi_hengai_bp_is_activated(void); +char * mmi_hengai_bp_req_code_get(void); +void mmi_hengai_bp_req_code_set(char * req_code); +char * mmi_hengai_bp_act_code_get(void); +void mmi_hengai_bp_act_code_set(char * act_code); +void mmi_hengai_bp_activated_finish(void); +#endif +uint8_t mmi_hengai_bp_is_measuring(void); -void mmi_heng_ai_warning_info_set(uint8_t type_value, uint8_t state_value, char * unicode_description); #endif diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.c b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.c index 0f70f159..23275ec9 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.c +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.c @@ -3,472 +3,575 @@ #include "lv_watch.h" -#ifdef __MMI_CUSTOM_HENG_AI__ +#ifdef __MMI_CUSTOM_HENG_AI_BLOOD_PRESSURE__ -#define MMI_HENGAI_HTTP_R_TASK_PRIORITY 221 -#define MMI_HENGAI_HTTP_S_TASK_PRIORITY 221 -#define MMI_HENGAI_HTTP_R_TASK_STACK_SIZE (8 * 1024) -#define MMI_HENGAI_HTTP_S_TASK_STACK_SIZE (4 * 1024) - -static TASK_HANDLE * s_hengai_http_r_task_id = NULL; -static TASK_HANDLE * s_hengai_http_s_task_id = NULL; +#include "hal/dm/cJSON.h" +#include "hal/dm/libhttpclient.h" -static mmi_hengai_http_tcp_info_t s_hengai_http_tcp_info = {0}; +static struct http_client * s_hengai_http_client = NULL; +static struct http_client_list * s_hengai_http_client_list_header = NULL; +static uint8_t s_hengai_http_post_try_count = 0; +static char * s_hengai_http_revceive_buf = NULL; -void mmi_hengai_http_r_task_msg_send(MMI_HENGAI_HTTP_TCP_MSG_ID_E msg_id, void * param) -{ - printf("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n",__FUNCTION__,__LINE__, msg_id); - - if(NULL != s_hengai_http_r_task_id) - { - if((64 - 1) < Hal_Get_Message_Count(s_hengai_http_r_task_id)) - { - printf("[@CHENG_DEBUG][%s][%d]: msg queue full\n",__FUNCTION__,__LINE__); - return; - } - - printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__); - - mmi_hengai_http_task_msg_t * msg = Hal_Mem_Alloc(sizeof(mmi_hengai_http_task_msg_t)); - msg->cmd_type = msg_id; - msg->cmd_param = param; - - Hal_Send_Message((TASK_ID)s_hengai_http_r_task_id, (void *)msg); - } -} +static char * response_data = NULL; +static int response_len = 0; -void mmi_hengai_http_tcp_connect_msg(void * param) +/* +data: the data is received http context data +len: the length of http context data +num: the http response header "Content-Length" value +cbdata: user private data +*/ +static void response_cb(char * data, int len, int num, void *cbdata) { - mmi_hengai_http_r_task_msg_send(MMI_HENGAI_HTTP_TCP_MSG_CONNECT, param); -} + char * temp; -void mmi_hengai_http_tcp_reconnect_msg(void * param) -{ - mmi_hengai_http_r_task_msg_send(MMI_HENGAI_HTTP_TCP_MSG_RECONNECT, param); -} + printf("[@CHENG_DEBUG][%s][%d]: data_len=%d\n", __FUNCTION__, __LINE__, len); -void mmi_hengai_http_tcp_disconnect_msg(void * param) -{ - mmi_hengai_http_r_task_msg_send(MMI_HENGAI_HTTP_TCP_MSG_DISCONNECT, param); -} + temp = (void*)malloc(response_len + len); + if (!temp) { + printf("Malloc failed...\n"); + return; + } + memset(temp, 0, response_len + len); + if (response_data) { + memcpy(temp, response_data, response_len); + free(response_data); + } + memcpy(&temp[response_len], data, len); + response_data = temp; + response_len += len; -void mmi_hengai_http_tcp_read_msg(void * param) -{ - mmi_hengai_http_r_task_msg_send(MMI_HENGAI_HTTP_TCP_MSG_READ, param); + printf("[@CHENG_DEBUG][%s][%d]: response_len=%d\n", __FUNCTION__, __LINE__, response_len); } -static void mmi_hengai_http_socket_callback(int sfd, int event, unsigned int len) +void mmi_hengai_http_post_resource_free(void) { - printf("[@CHENG_DEBUG][%s][%d]: sfd=%d, event=0x%x, len=%d\n",__FUNCTION__, __LINE__, sfd, event, len); - - switch (event) + if(NULL != s_hengai_http_client_list_header) { - case NETCONN_EVT_CONNECTED: - printf("[@CHENG_DEBUG][%s][%d]: socket connected\n",__FUNCTION__,__LINE__); - break; - - case NETCONN_EVT_CLOSE_NORMAL: - printf("[@CHENG_DEBUG][%s][%d]: socket close normal\n",__FUNCTION__,__LINE__); - break; - - case NETCONN_EVT_RCVPLUS: - printf("[@CHENG_DEBUG][%s][%d]: socket rcv plus\n",__FUNCTION__,__LINE__); - ValSetDataTransFlag(1); - if(len > 0) - { - mmi_hengai_http_socket_fd_t * data_info = (mmi_hengai_http_socket_fd_t *)Hal_Mem_Alloc(sizeof(mmi_hengai_http_socket_fd_t)); - data_info->socket_fd = sfd; - data_info->len = len; - mmi_hengai_http_tcp_read_msg(data_info); - } - break; - - case NETCONN_EVT_RCVMINUS: - printf("dt rcv minus event\n"); - break; - - case NETCONN_EVT_SENDPLUS: - ValSetDataTransFlag(1); - printf("[@CHENG_DEBUG][%s][%d]: socket send plus\n",__FUNCTION__,__LINE__); - break; - - case NETCONN_EVT_SENDACKED: - printf("[@CHENG_DEBUG][%s][%d]: socket send ack\n",__FUNCTION__,__LINE__); - break; - - case NETCONN_EVT_ERROR_RST: - case NETCONN_EVT_ERROR_ABRT: - case NETCONN_EVT_CLOSE_WAIT: - ValSetDataTransFlag(1); - printf("dt socket error or close event = %02x\n",event); - //printf("LH reconnect\n"); - //if(Hal_Get_Message_Count((TASK_ID)modem_tcp_task_id) < UOS_TCP_TASK_MSG_QSIZE) - //{ - // send_task_msg_tcp_reconnect(NULL); - //} - break; - - default: - printf("dt other event\n"); - break; + http_client_list_destroy(s_hengai_http_client_list_header); + s_hengai_http_client_list_header = NULL; } -} - -void mmi_hengai_http_tcp_connect(void * param) -{ - int res = -1; - if(FALSE == watch_modem_sim_present_check_req()) + + if(NULL != s_hengai_http_client) { - printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__); - goto go_reconnect; + http_client_shutdown(s_hengai_http_client); + s_hengai_http_client = NULL; } - - if(s_hengai_http_tcp_info.first_connect_flag == false) - { - s_hengai_http_tcp_info.first_connect_flag = true; - printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__); - } - if(s_hengai_http_tcp_info.connect_flag == true) - { - printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__); - return; - } - - if(s_hengai_http_tcp_info.connecting_flag) - { - printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__); - return; - } - else - { - s_hengai_http_tcp_info.connecting_flag = true; - } - - res = ValNetworkSocketInit_with_callback(NULL, MMI_HENGAI_HTTP_IP_ADDRESS, MMI_HENGAI_HTTP_IP_PORT, (socket_callback)mmi_hengai_http_socket_callback); - printf("[@CHENG_DEBUG][%s][%d]: socket init connect res = %d\n",__FUNCTION__,__LINE__, res); - -go_reconnect : - if(res < 0) - { - int relink_time = 0; - int randnum = 0; - unsigned int time = 0; - - Hal_Rtc_Gettime_Count(&time); - srand(time); - randnum = rand() % 50 + 10; - relink_time = randnum * 1000 / 5; - - uos_timer_stop(s_hengai_http_tcp_info.relink_timer); - uos_timer_start(s_hengai_http_tcp_info.relink_timer, relink_time, - 0, (void (*)(uint32_t))mmi_hengai_http_tcp_reconnect_msg, NULL); - printf("reconnect time = %d\n",(relink_time / 1000 * 5)); - } - else - { - s_hengai_http_tcp_info.sock_fd = res; - mmi_hengai_http_tcp_connected(param); - } -} - -void mmi_hengai_http_tcp_connected(void *param) -{ - printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__); + if (response_data) + free(response_data); - s_hengai_http_tcp_info.connect_flag = true; - s_hengai_http_tcp_info.connecting_flag = false; + response_data = NULL; + response_len = 0; } -void mmi_hengai_http_tcp_disconnect(void *param) +int mmi_hengai_http_post_json_data(char * url, char * post_data, char * token) { - if(s_hengai_http_tcp_info.relink_timer != NULL) + int response_code= 0; + int ret = 0; + struct http_client_list * header = NULL; + if (s_hengai_http_client != NULL) + return -2; + + s_hengai_http_client = http_client_init(); + http_client_setopt(s_hengai_http_client, HTTPCLIENT_OPT_URL, url); /*set URL:support http/https and ip4/ip6*/ + http_client_setopt(s_hengai_http_client, HTTPCLIENT_OPT_HTTP1_0, 0); /*"0" is HTTP 1.1, "1" is HTTP 1.0*/ + http_client_setopt(s_hengai_http_client, HTTPCLIENT_OPT_RESPONSECB, response_cb); /*response callback*/ + //http_client_setopt(s_hengai_http_client, HTTPCLIENT_OPT_RESPONSECB_DATA, private_data); /*set user private data,*/ + http_client_setopt(s_hengai_http_client, HTTPCLIENT_OPT_METHOD, HTTPCLIENT_REQUEST_POST); /*set method,support GET/POST/PUT*/ + http_client_setopt(s_hengai_http_client, HTTPCLIENT_OPT_POSTDATA, post_data); /*post data is http context*/ + http_client_setopt(s_hengai_http_client, HTTPCLIENT_OPT_POSTLENGTH, strlen(post_data)); /*http context length*/ + + if(NULL != token) { - uos_timer_stop(s_hengai_http_tcp_info.relink_timer); - //s_hengai_http_tcp_info.relink_timer = NULL; + char temp_str[64] = {0}; + sprintf(temp_str, "token: %s\r\n", token); + s_hengai_http_client_list_header = http_client_list_append(s_hengai_http_client_list_header, temp_str); } + // "dc5aed59e2fce3060cd1118b41b19552" + s_hengai_http_client_list_header = http_client_list_append(s_hengai_http_client_list_header, "Content-Type: application/json\r\n"); + s_hengai_http_client_list_header = http_client_list_append(s_hengai_http_client_list_header, "Accept: */*\r\n"); + http_client_setopt(s_hengai_http_client, HTTPCLIENT_OPT_HTTPHEADER, s_hengai_http_client_list_header); - s_hengai_http_tcp_info.reconnect_count = 5; - s_hengai_http_tcp_info.connect_flag = false; - s_hengai_http_tcp_info.first_connect_flag = false; - s_hengai_http_tcp_info.connecting_flag = false; - - printf("[@CHENG_DEBUG][%s][%d]: sock_fd=%d\n",__FUNCTION__,__LINE__, s_hengai_http_tcp_info.sock_fd); - if(s_hengai_http_tcp_info.sock_fd > 0) + http_client_getinfo(s_hengai_http_client, HTTPCLIENT_GETINFO_TCP_STATE, &response_code); + if(response_code != HTTP_TCP_ESTABLISHED) { - int ret = ValSocketClose(s_hengai_http_tcp_info.sock_fd); - s_hengai_http_tcp_info.sock_fd = -1; - } -} - -void mmi_hengai_http_tcp_reconnect(void *param) -{ - if(false == watch_modem_sim_present_check_req()) - { - return; + printf("http tcp not connecting\n"); + ret = -1; + goto EXIT; } - - mmi_hengai_http_tcp_disconnect(NULL); - - long reconnect_time = (5 * 1000) / 5; - s_hengai_http_tcp_info.reconnect_count--; - if(s_hengai_http_tcp_info.reconnect_count < 0) - { - s_hengai_http_tcp_info.reconnect_count = 5; - } - else - { - reconnect_time = 10 * 1000 / 5; - } - uos_timer_stop(s_hengai_http_tcp_info.relink_timer); - uos_timer_start(s_hengai_http_tcp_info.relink_timer, reconnect_time , 0, (void (*)(uint32_t))mmi_hengai_http_tcp_connect_msg, NULL); -} - -void mmi_hengai_http_tcp_read_data(void *param) -{ - mmi_hengai_http_socket_fd_t * data_info = (mmi_hengai_http_socket_fd_t *)param; - if((NULL == data_info) || (data_info->socket_fd < 0)) + response_code = http_client_perform(s_hengai_http_client); /*execute http send and recv*/ + if(response_code != HTTP_CLIENT_OK) { - printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__); - return; + printf("http perform have some wrong=%d\n", response_code); + ret = -3; + goto EXIT; } - - int recv_ret = -1; - int recv_len = 0; - char * recv_buf = (char *)Hal_Mem_Alloc(HENGAI_HTTP_RECEIVE_BUFF_LEN); - if(NULL == recv_buf) + + http_client_getinfo(s_hengai_http_client, HTTPCLIENT_GETINFO_RESPONSE_CODE, &response_code); + if (response_code != 200 && response_code != 204) { - printf("[@CHENG_DEBUG][%s][%d]: recv_buf alloc fail\n",__FUNCTION__,__LINE__); - return; - } - Hal_Mem_Set(recv_buf , 0x00, HENGAI_HTTP_RECEIVE_BUFF_LEN); - recv_ret = ValRecvEx(data_info->socket_fd, HENGAI_HTTP_SOCKET_REV_TIMEOUT, recv_buf, HENGAI_HTTP_RECEIVE_BUFF_LEN, &recv_len); - printf("[@CHENG_DEBUG][%s][%d]: ret=%d,len=%d,buf=0x%x\n", __FUNCTION__, __LINE__, recv_ret, recv_len, recv_buf); - //printf("[@CHENG_DEBUG][%d]: str=%s\n", __LINE__, recv_buf); - if(0 <= recv_ret) + printf("response is not 'HTTP OK'=%d\n", response_code); + } + + if(NULL != s_hengai_http_revceive_buf) { - mmi_hengai_http_data_receive(recv_buf, recv_len); + lv_mem_free(s_hengai_http_revceive_buf); + s_hengai_http_revceive_buf = NULL; } + s_hengai_http_revceive_buf = lv_mem_alloc(response_len + 1); + _lv_memset_00(s_hengai_http_revceive_buf, response_len + 1); + _lv_memcpy(s_hengai_http_revceive_buf, response_data, response_len); + printf("[@CHENG_DEBUG][%s][%d]: data_len=%d\n", __FUNCTION__, __LINE__, response_len); - if(NULL != recv_buf) - { - printf("[@CHENG_DEBUG][%s][%d]: recv_buf free\n",__FUNCTION__,__LINE__); - Hal_Mem_Free(recv_buf); - recv_buf = NULL; - } +EXIT: + mmi_hengai_http_post_resource_free(); + + return ret; } -static void mm_hengai_http_r_task_entry(void * para) +int mmi_hengai_http_post_data(char * url, char * post_data, char * token) { - while(s_hengai_http_r_task_id == NULL) - { - uos_sleep(10); - } - - while(1) + int ret_value = 0; + + s_hengai_http_post_try_count = 0; + + while(1) { - // receive message - mmi_hengai_http_task_msg_t * msg = (mmi_hengai_http_task_msg_t *)Hal_Receive_Message((TASK_ID)s_hengai_http_r_task_id, TRUE); - MMI_HENGAI_HTTP_TCP_MSG_ID_E msg_id = msg->cmd_type; - void * msg_param = msg->cmd_param; + s_hengai_http_post_try_count++; - printf("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n",__FUNCTION__,__LINE__, msg_id); - switch(msg_id) + int ret = mmi_hengai_http_post_json_data(url, post_data, token); + printf("[@CHENG_DEBUG][%s][%d]: ret=%d\n", __FUNCTION__, __LINE__, ret); + if(0 == ret) { - case MMI_HENGAI_HTTP_TCP_MSG_CONNECT: - mmi_hengai_http_tcp_connect(msg_param); - break; - - case MMI_HENGAI_HTTP_TCP_MSG_CONNECTED: - mmi_hengai_http_tcp_connected(msg_param); - break; - - case MMI_HENGAI_HTTP_TCP_MSG_DISCONNECT: - mmi_hengai_http_tcp_disconnect(msg_param); - break; - - case MMI_HENGAI_HTTP_TCP_MSG_RECONNECT: - mmi_hengai_http_tcp_reconnect(msg_param); - break; - - case MMI_HENGAI_HTTP_TCP_MSG_READ: - mmi_hengai_http_tcp_read_data(msg_param); + printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); + ret_value = 0; + break; + } + else + { + if(HENGAI_HTTP_POST_TRY_COUNT_MAX <= s_hengai_http_post_try_count) + { + printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); + mmi_hengai_http_post_resource_free(); + ret_value = -1; break; + } - default: - break; + uos_sleep(10); } - - Hal_Mem_Free(msg->cmd_param); - Hal_Mem_Free(msg); - } -} + } -static void mm_hengai_http_r_task_init(void) -{ - s_hengai_http_r_task_id = uos_create_task(mm_hengai_http_r_task_entry, - NULL, - 64, - MMI_HENGAI_HTTP_R_TASK_STACK_SIZE, - MMI_HENGAI_HTTP_R_TASK_PRIORITY, - "mm_hengai_http_r_task"); - - printf("[@CHENG_DEBUG][%s][%d]: task_id=0x%x\n",__FUNCTION__,__LINE__, s_hengai_http_r_task_id); + return ret_value; } -// send task -void mm_hengai_http_s_task_msg_send(MMI_AI_TALK_ACTION_CMD_E action_cmd) +// measure data +void mmi_hengai_bp_measure_raw_data_send(void) { - if(NULL != s_hengai_http_s_task_id) + char imei[16 + 1] = {0}; + app_adp_get_imei_req(imei); + + char * begin_time_str = mmi_hengai_bp_measure_action_time_string_get(1); + char * end_time_str = mmi_hengai_bp_measure_action_time_string_get(0); + char * token = "dc5aed59e2fce3060cd1118b41b19552"; + //int test_number_array[] = {1012744,864594,698914,532908,402542,317532,235462,168856,142664,109818,42654}; + + cJSON * json_send = cJSON_CreateObject(); + cJSON_AddItemToObject(json_send, "app_key", cJSON_CreateString(HENGAI_HTTP_POST_APP_KEY)); + cJSON_AddItemToObject(json_send, "mac", cJSON_CreateString(imei)); + cJSON_AddItemToObject(json_send, "begin_time", cJSON_CreateString(begin_time_str)); + cJSON_AddItemToObject(json_send, "end_time", cJSON_CreateString(end_time_str)); + cJSON_AddItemToObject(json_send, "pulse_wave", cJSON_CreateIntArray(mmi_hengai_bp_raw_data_ptr_get(), mmi_hengai_bp_raw_data_len_get()));//cJSON_CreateString("HENGAI")); + cJSON_AddItemToObject(json_send, "sample_rate", cJSON_CreateNumber(MMI_HENGAI_BP_RAW_DATA_SAMPLE_RATE)); + char * post_data = cJSON_Print(json_send); + cJSON_Delete(json_send); + json_send = NULL; + + char url[256] = {0}; + char * url_suffix = "/health/bp/measurement"; + sprintf(url, "%s%s", HENGAI_HTTP_POST_URL_COMMON_PREFIX, url_suffix); + int ret = mmi_hengai_http_post_data(url, post_data, token); + if(0 == ret) { - mmi_hengai_http_task_msg_t * msg = Hal_Mem_Alloc(sizeof(mmi_hengai_http_task_msg_t)); - msg->cmd_type = action_cmd; - msg->cmd_param = NULL; + printf("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, strlen(s_hengai_http_revceive_buf)); + printf("[@CHENG_DEBUG][%d]: %s\n", __LINE__, s_hengai_http_revceive_buf); + printf("[@CHENG_DEBUG][%d]: %s\n", __LINE__, s_hengai_http_revceive_buf + 63); - Hal_Send_Message((TASK_ID)s_hengai_http_s_task_id, (void *)msg); - } - else + cJSON * json_recv = cJSON_Parse(s_hengai_http_revceive_buf); + if(NULL != json_recv) + { + if(cJSON_GetIntValue(cJSON_GetObjectItem(json_recv, "status"))) + { + // true + printf("[@CHENG_DEBUG][%s][%d]: true\n", __FUNCTION__, __LINE__); + + cJSON * json_data = cJSON_GetObjectItem(json_recv, "data"); + uint16_t bp_value_high = cJSON_GetIntValue(cJSON_GetObjectItem(json_data, "sbp")); + uint16_t bp_value_low = cJSON_GetIntValue(cJSON_GetObjectItem(json_data, "dbp")); + char * description = cJSON_GetStringValue(cJSON_GetObjectItem(json_data, "description")); + + // update + mmi_hengai_bp_measure_update_result(true, bp_value_high, bp_value_low, description); + } + else + { + // false + printf("[@CHENG_DEBUG][%s][%d]: fail\n", __FUNCTION__, __LINE__); + // update + mmi_hengai_bp_measure_update_result(false, 0, 0, NULL); + } + } + else + { + printf("[@CHENG_DEBUG][%s][%d]: not json file\n", __FUNCTION__, __LINE__); + } + + if(NULL != json_recv) + { + printf("[@CHENG_DEBUG][%s][%d]: free json root\n", __FUNCTION__, __LINE__); + cJSON_Delete(json_recv); + json_recv = NULL; + } + } + + if(NULL != s_hengai_http_revceive_buf) { - printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__, __LINE__); - mm_hengai_http_send_space_free(action_cmd); + lv_mem_free(s_hengai_http_revceive_buf); + s_hengai_http_revceive_buf = NULL; } } -static void mm_hengai_http_s_task_handle(void *param) +// calibrate mode +void mmi_hengai_bp_calibrate_model_send(void) { - MMI_AI_TALK_ACTION_CMD_E action_cmd = ((mmi_hengai_http_task_msg_t *)param)->cmd_type; + char * token = "dc5aed59e2fce3060cd1118b41b19552"; + char imei[16 + 1] = {0}; + app_adp_get_imei_req(imei); - if((false == watch_modem_sim_present_check_req()) - || (MMI_MODEM_SIGNAL_BAR_0 == watch_modem_get_signal_bar_req()) - ) + cJSON * json_send = cJSON_CreateObject(); + cJSON_AddItemToObject(json_send, "app_key", cJSON_CreateString(HENGAI_HTTP_POST_APP_KEY)); + cJSON_AddItemToObject(json_send, "mac", cJSON_CreateString(imei)); + char * post_data = cJSON_Print(json_send); + cJSON_Delete(json_send); + json_send = NULL; + + char url[256] = {0}; + char * url_suffix = "/health/bp/model"; + sprintf(url, "%s%s", HENGAI_HTTP_POST_URL_COMMON_PREFIX, url_suffix); + int ret = mmi_hengai_http_post_data(url, post_data, token); + if(0 == ret) { - printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__); - mm_hengai_http_send_space_free(action_cmd); - return; + printf("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, strlen(s_hengai_http_revceive_buf)); + printf("[@CHENG_DEBUG][%d]: %s\n", __LINE__, s_hengai_http_revceive_buf); + + cJSON * json_recv = cJSON_Parse(s_hengai_http_revceive_buf); + if(NULL != json_recv) + { + printf("[@CHENG_DEBUG][%s][%d]: json file\n", __FUNCTION__, __LINE__); + + bool status_value = cJSON_GetIntValue(cJSON_GetObjectItem(json_recv, "status")); + mmi_hengai_bp_calibrate_update_result(status_value); + } + else + { + printf("[@CHENG_DEBUG][%s][%d]: not json file\n", __FUNCTION__, __LINE__); + } + + if(NULL != json_recv) + { + printf("[@CHENG_DEBUG][%s][%d]: free json root\n", __FUNCTION__, __LINE__); + cJSON_Delete(json_recv); + json_recv = NULL; + } } - unsigned char * send_buff = (unsigned char *)mm_hengai_http_send_space_ptr_get(action_cmd); - int send_size = mm_hengai_http_send_space_size_get(action_cmd); - printf("[@CHENG_DEBUG][%s][%d]: len=%d\n", __FUNCTION__, __LINE__, send_size); - printf("[@CHENG_DEBUG][%d]: str=%s\n", __LINE__, send_buff); + if(NULL != s_hengai_http_revceive_buf) + { + lv_mem_free(s_hengai_http_revceive_buf); + s_hengai_http_revceive_buf = NULL; + } +} + +void mmi_hengai_bp_calibrate_raw_data_send(uint8_t calibrate_times, uint16_t bp_value_high, uint16_t bp_value_low) +{ + char * token = "dc5aed59e2fce3060cd1118b41b19552"; + char imei[16 + 1] = {0}; + app_adp_get_imei_req(imei); + + char * begin_time_str = mmi_hengai_bp_measure_action_time_string_get(1); + char * end_time_str = mmi_hengai_bp_measure_action_time_string_get(0); - if((NULL != send_buff) && (0 < send_size)) + cJSON * json_send = cJSON_CreateObject(); + cJSON_AddItemToObject(json_send, "app_key", cJSON_CreateString(HENGAI_HTTP_POST_APP_KEY)); + cJSON_AddItemToObject(json_send, "mac", cJSON_CreateString(imei)); + cJSON_AddItemToObject(json_send, "begin_time", cJSON_CreateString(begin_time_str)); + cJSON_AddItemToObject(json_send, "end_time", cJSON_CreateString(end_time_str)); + cJSON_AddItemToObject(json_send, "pulse_wave", cJSON_CreateString("HENGAI")); + cJSON_AddItemToObject(json_send, "sample_rate", cJSON_CreateNumber(MMI_HENGAI_BP_RAW_DATA_SAMPLE_RATE)); + cJSON_AddItemToObject(json_send, "sbp", cJSON_CreateNumber(bp_value_high)); + cJSON_AddItemToObject(json_send, "dbp", cJSON_CreateNumber(bp_value_low)); + char * post_data = cJSON_Print(json_send); + cJSON_Delete(json_send); + json_send = NULL; + + char url[256] = {0}; + char * url_suffix = "/health/bp/calibration"; + sprintf(url, "%s%s", HENGAI_HTTP_POST_URL_COMMON_PREFIX, url_suffix); + int ret = mmi_hengai_http_post_data(url, post_data, token); + if(0 == ret) { - int sockfd = s_hengai_http_tcp_info.sock_fd; + printf("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, strlen(s_hengai_http_revceive_buf)); + printf("[@CHENG_DEBUG][%d]: %s\n", __LINE__, s_hengai_http_revceive_buf); - if(sockfd > 0) + cJSON * json_recv = cJSON_Parse(s_hengai_http_revceive_buf); + if(NULL != json_recv) { - int ret = -1; - ret = ValSend(sockfd, HENGAI_HTTP_SOCKET_REV_TIMEOUT, send_buff, send_size); - printf("[@CHENG_DEBUG][%s][%d]: sock_fd=%d,ret=%d\n", __FUNCTION__, __LINE__, sockfd, ret); - if(ret < 0) + printf("[@CHENG_DEBUG][%s][%d]: json file\n", __FUNCTION__, __LINE__); + + if(cJSON_GetIntValue(cJSON_GetObjectItem(json_recv, "status"))) + { + // true + if(2 <= calibrate_times) + { + mmi_hengai_bp_calibrate_model_send(); + } + } + else { - printf("[@CHENG_DEBUG][%s][%d]: ValSend fail\n", __FUNCTION__, __LINE__); + // false + printf("[@CHENG_DEBUG][%s][%d]: fail\n", __FUNCTION__, __LINE__); } } else { - printf("[@CHENG_DEBUG][%s][%d]: sock_fd=%d\n", __FUNCTION__, __LINE__, sockfd); - mmi_hengai_http_tcp_reconnect_msg(NULL); + printf("[@CHENG_DEBUG][%s][%d]: not json file\n", __FUNCTION__, __LINE__); + } + + if(NULL != json_recv) + { + printf("[@CHENG_DEBUG][%s][%d]: free json root\n", __FUNCTION__, __LINE__); + cJSON_Delete(json_recv); + json_recv = NULL; } } - - mm_hengai_http_send_space_free(action_cmd); -} - -static void mm_hengai_http_s_task_entry(void *param) -{ - while(NULL == s_hengai_http_s_task_id) - { - uos_sleep(10); - } - - while(1) - { - mmi_hengai_http_task_msg_t * msg = (mmi_hengai_http_task_msg_t *)Hal_Receive_Message((TASK_ID)s_hengai_http_s_task_id, TRUE); - if(!msg) - continue; - mm_hengai_http_s_task_handle((void *)msg); - Hal_Mem_Free(msg); - } + if(NULL != s_hengai_http_revceive_buf) + { + lv_mem_free(s_hengai_http_revceive_buf); + s_hengai_http_revceive_buf = NULL; + } } -static void mm_hengai_http_s_task_init(void) -{ - s_hengai_http_s_task_id = uos_create_task(mm_hengai_http_s_task_entry, - NULL, - 64, - MMI_HENGAI_HTTP_S_TASK_STACK_SIZE, - MMI_HENGAI_HTTP_S_TASK_PRIORITY, - "mm_hengai_http_s_task"); - - printf("[@CHENG_DEBUG][%s][%d]: task_id=0x%x\n",__FUNCTION__,__LINE__, s_hengai_http_s_task_id); -} -void mmi_hengai_http_tcp_info_init(void) +#if 0 +void mmi_hengai_bp_activation_feedback(void) { - s_hengai_http_tcp_info.sock_fd = -1; - s_hengai_http_tcp_info.connect_flag = false; - s_hengai_http_tcp_info.connecting_flag = false; - s_hengai_http_tcp_info.first_connect_flag = false; - s_hengai_http_tcp_info.reconnect_count = 5; + char * post_data = NULL; + cJSON * json_send = NULL; + char imei[16 + 1] = {0}; + app_adp_get_imei_req(imei); - if(NULL != s_hengai_http_tcp_info.relink_timer) + json_send = cJSON_CreateObject(); + cJSON_AddItemToObject(json_send, "app_key", cJSON_CreateString(HENGAI_HTTP_POST_APP_KEY)); + cJSON_AddItemToObject(json_send, "firm", cJSON_CreateString("HENGAI")); + cJSON_AddItemToObject(json_send, "mac", cJSON_CreateString(imei)); + post_data = cJSON_Print(json_send); + cJSON_Delete(json_send); + json_send = NULL; + + char url[256] = {0}; + char * url_suffix = "/sinklib/activation/feedback"; + sprintf(url, "%s%s", HENGAI_HTTP_POST_URL_COMMON_PREFIX, url_suffix); + int ret = mmi_hengai_http_post_data(url, post_data); + if(0 == ret) { - uos_timer_stop(s_hengai_http_tcp_info.relink_timer); - uos_timer_delete(s_hengai_http_tcp_info.relink_timer); - s_hengai_http_tcp_info.relink_timer = NULL; + cJSON * json_recv = NULL; + + json_recv = cJSON_Parse(s_hengai_http_revceive_buf); + if(NULL != json_recv) + { + printf("[@CHENG_DEBUG][%s][%d]: json file\n", __FUNCTION__, __LINE__); + + if(cJSON_GetIntValue(cJSON_GetObjectItem(json_recv, "status"))) + { + // true + mmi_hengai_bp_activated_finish(); + } + else + { + // false + } + } + else + { + printf("[@CHENG_DEBUG][%s][%d]: not json file\n", __FUNCTION__, __LINE__); + } + + if(NULL != json_recv) + { + printf("[@CHENG_DEBUG][%s][%d]: free json root\n", __FUNCTION__, __LINE__); + cJSON_Delete(json_recv); + json_recv = NULL; + } } - uos_timer_create(&s_hengai_http_tcp_info.relink_timer); -} -void mm_hengai_http_task_init(void) -{ - if(false == watch_modem_sim_present_check_req() - //|| (MMI_MODEM_SIGNAL_BAR_0 == watch_modem_get_signal_bar_req()) - ) + if(NULL != s_hengai_http_revceive_buf) { - return; + lv_mem_free(s_hengai_http_revceive_buf); + s_hengai_http_revceive_buf = NULL; } - - mmi_hengai_http_tcp_info_init(); - mm_hengai_http_r_task_init(); - mm_hengai_http_s_task_init(); } - - -#include "hal/dm/cJSON.h" - -void mmi_hengai_http_data_receive(char * recv_buf, int recv_len) +void mmi_hengai_bp_activation_check_action(void) { - cJSON * json_root = NULL; - - json_root = cJSON_Parse(recv_buf); - if(NULL != json_root) + printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); + + if(0 == mmi_hengai_bp_is_activated()) { - printf("[@CHENG_DEBUG][%s][%d]: json file\n", __FUNCTION__, __LINE__); + char * post_data = NULL; + cJSON * json_send = NULL; + char * req_code = mmi_hengai_bp_req_code_get(); + char imei[16 + 1] = {0}; + app_adp_get_imei_req(imei); + json_send = cJSON_CreateObject(); + cJSON_AddItemToObject(json_send, "app_key", cJSON_CreateString(HENGAI_HTTP_POST_APP_KEY)); + cJSON_AddItemToObject(json_send, "name", cJSON_CreateString("Z5_HA_K18")); + cJSON_AddItemToObject(json_send, "firm", cJSON_CreateString("HENGAI")); + cJSON_AddItemToObject(json_send, "mac", cJSON_CreateString(imei)); + cJSON_AddItemToObject(json_send, "model", cJSON_CreateString("RH303")); + cJSON_AddItemToObject(json_send, "sensor", cJSON_CreateString("VP60")); + cJSON_AddItemToObject(json_send, "sinklib_version", cJSON_CreateString("v0.3.0.072522")); + cJSON_AddItemToObject(json_send, "request_code", cJSON_CreateString(req_code)); + post_data = cJSON_Print(json_send); + cJSON_Delete(json_send); + json_send = NULL; + + char url[256] = {0}; + char * url_suffix = "/sinklib/activation"; + sprintf(url, "%s%s", HENGAI_HTTP_POST_URL_COMMON_PREFIX, url_suffix); + int ret = mmi_hengai_http_post_data(url, post_data); + if(0 == ret) + { + cJSON * json_recv = NULL; + + json_recv = cJSON_Parse(s_hengai_http_revceive_buf); + if(NULL != json_recv) + { + printf("[@CHENG_DEBUG][%s][%d]: json file\n", __FUNCTION__, __LINE__); + + // true + if(cJSON_GetIntValue(cJSON_GetObjectItem(json_recv, "status"))) + { + cJSON * json_data = cJSON_GetObjectItem(json_recv, "data"); + char * act_code = cJSON_GetStringValue(cJSON_GetObjectItem(json_data, "activation_code")); + + mmi_hengai_bp_act_code_set(act_code); + + // »ñµÃÁ˼¤»îÂ룬·¢Ë͸øÏ³Á¿â£¬²¢µÃµ½ÕýÈ··µ»ØºóÇëÇó + // if() + { + mmi_hengai_bp_activation_feedback(); + } + } + else // false + { + + } + } + else + { + printf("[@CHENG_DEBUG][%s][%d]: not json file\n", __FUNCTION__, __LINE__); + } + + if(NULL != json_recv) + { + printf("[@CHENG_DEBUG][%s][%d]: free json root\n", __FUNCTION__, __LINE__); + cJSON_Delete(json_recv); + json_recv = NULL; + } + } + if(NULL != s_hengai_http_revceive_buf) + { + lv_mem_free(s_hengai_http_revceive_buf); + s_hengai_http_revceive_buf = NULL; + } } - else - { - printf("[@CHENG_DEBUG][%s][%d]: not json file\n", __FUNCTION__, __LINE__); - } +} +#endif - if(NULL != json_root) + +void mmi_hengai_algorithm_interface_login_action(void) +{ + printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); + + //if(0 == mmi_hengai_bp_is_activated()) { - printf("[@CHENG_DEBUG][%s][%d]: free json root\n", __FUNCTION__, __LINE__); - cJSON_Delete(json_root); - json_root = NULL; + cJSON * json_send = json_send = cJSON_CreateObject(); + cJSON_AddItemToObject(json_send, "app_key", cJSON_CreateString(HENGAI_HTTP_POST_APP_KEY)); + cJSON_AddItemToObject(json_send, "account_type", cJSON_CreateNumber(0)); + cJSON_AddItemToObject(json_send, "account", cJSON_CreateString("18912345678")); + cJSON_AddItemToObject(json_send, "name", cJSON_CreateString("18912345678")); + cJSON_AddItemToObject(json_send, "password", cJSON_CreateString("123456")); + cJSON_AddItemToObject(json_send, "gender", cJSON_CreateNumber(3)); + cJSON_AddItemToObject(json_send, "birthday", cJSON_CreateString("2000-10-01")); + cJSON_AddItemToObject(json_send, "height", cJSON_CreateNumber(180)); + cJSON_AddItemToObject(json_send, "weight", cJSON_CreateNumber(80)); + char * post_data = cJSON_Print(json_send); + cJSON_Delete(json_send); + json_send = NULL; + + char url[256] = {0}; + char * url_suffix = "/entrance/user/login"; + sprintf(url, "%s%s", HENGAI_HTTP_POST_URL_COMMON_PREFIX, url_suffix); + int ret = mmi_hengai_http_post_data(url, post_data, NULL); + if(0 == ret) + { + cJSON * json_recv = cJSON_Parse(s_hengai_http_revceive_buf); + if(NULL != json_recv) + { + if(cJSON_GetIntValue(cJSON_GetObjectItem(json_recv, "status"))) + { + printf("[@CHENG_DEBUG][%s][%d]: true\n", __FUNCTION__, __LINE__); + + cJSON * json_data = cJSON_GetObjectItem(json_recv, "data"); + char * token = cJSON_GetStringValue(cJSON_GetObjectItem(json_data, "token")); + // save token + + } + else + { + printf("[@CHENG_DEBUG][%s][%d]: false\n", __FUNCTION__, __LINE__); + } + } + else + { + printf("[@CHENG_DEBUG][%s][%d]: not json file\n", __FUNCTION__, __LINE__); + } + + if(NULL != json_recv) + { + printf("[@CHENG_DEBUG][%s][%d]: free json root\n", __FUNCTION__, __LINE__); + cJSON_Delete(json_recv); + json_recv = NULL; + } + } + + if(NULL != s_hengai_http_revceive_buf) + { + lv_mem_free(s_hengai_http_revceive_buf); + s_hengai_http_revceive_buf = NULL; + } } } + #endif diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.h b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.h index 18982b0f..5d02a111 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.h +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.h @@ -16,66 +16,38 @@ extern "C" { #include "../../../lv_ex_conf.h" #endif -#ifdef __MMI_CUSTOM_HENG_AI__ +#ifdef __MMI_CUSTOM_HENG_AI_BLOOD_PRESSURE__ -// http://test.aicaring.com/ +// ½Ó¿Úǰ׺£º +// Õýʽǰ׺£ºhttp://api.aicaring.com/api/v0 +// Õýʽapp_key£ºÔÝÎÞ +// ²âÊÔǰ׺£ºhttp://test.aicaring.com/api/v0 +// ²âÊÔapp_key£º5d3ef21f0cbf966505c3d5137740be77 -#include "../../../../product/craneg_modem/cust/fit/inc/sdknet.h" -#define MMI_HENGAI_HTTP_IP_ADDRESS ("ability.raisound.com") // http://test.aicaring.com/ -#define MMI_HENGAI_HTTP_IP_PORT (8899) +// #include "../../../../product/craneg_modem/cust/fit/inc/sdknet.h" -#define HENGAI_HTTP_SOCKET_SEND_TIMEOUT 3 -#define HENGAI_HTTP_SOCKET_REV_TIMEOUT 3 +#if 0 +#define HENGAI_HTTP_POST_URL_COMMON_PREFIX ("http://api.aicaring.com/api/v0") +#define HENGAI_HTTP_POST_APP_KEY ("5d3ef21f0cbf966505c3d5137740be77") +#else +#define HENGAI_HTTP_POST_URL_COMMON_PREFIX ("http://test.aicaring.com/api/v0") +#define HENGAI_HTTP_POST_APP_KEY ("5d3ef21f0cbf966505c3d5137740be77") +#endif -#define HENGAI_HTTP_RECEIVE_BUFF_LEN (1024 * 2) +#define HENGAI_HTTP_POST_TRY_COUNT_MAX (3) -typedef enum -{ - MMI_HENGAI_HTTP_TCP_MSG_ID_START, - - MMI_HENGAI_HTTP_TCP_MSG_CONNECT, - MMI_HENGAI_HTTP_TCP_MSG_CONNECTED, - MMI_HENGAI_HTTP_TCP_MSG_DISCONNECT, - MMI_HENGAI_HTTP_TCP_MSG_RECONNECT, - MMI_HENGAI_HTTP_TCP_MSG_SEND, - MMI_HENGAI_HTTP_TCP_MSG_READ, - - MMI_HENGAI_HTTP_TCP_MSG_ID_END -}MMI_HENGAI_HTTP_TCP_MSG_ID_E; -typedef struct { - signed long sock_fd; - unsigned char connect_flag; - unsigned char connecting_flag; - unsigned char first_connect_flag; - char reconnect_count; - - void *relink_timer; -}mmi_hengai_http_tcp_info_t; -typedef struct -{ - uint16_t cmd_type; - void * cmd_param; -}mmi_hengai_http_task_msg_t; -typedef struct -{ - int socket_fd; - int len; -} mmi_hengai_http_socket_fd_t; -void mmi_hengai_http_tcp_connect_msg(void * param); -void mmi_hengai_http_tcp_disconnect_msg(void * param); -void mm_hengai_http_task_init(void); 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 f48dfc17..6f373b77 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 @@ -41,6 +41,12 @@ void mmi_hsensor_spo2_open(void) mmi_hsensor_spo2_measure_start(); } +void mmi_hsensor_bp_open(void) +{ + HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); + mmi_hsensor_bp_measure_start(); +} + bool mmi_hsensor_is_open(void) { return true; @@ -778,6 +784,13 @@ bool mmi_health_measure_timed_measure_start(MMI_HEALTH_MEASURE_TYPE_E measure_ty if(NULL != lv_watch_get_activity_obj(ACT_ID_FACTORY_MODE_TEST)) return false; + +#ifdef __MMI_CUSTOM_HENG_AI_BLOOD_PRESSURE__ + if(mmi_hengai_bp_is_measuring()) + { + return false; + } +#endif if(MMI_HEALTH_MEASURE_STATE_UI == s_health_measure_run_data.measure_state || MMI_HEALTH_MEASURE_STATE_APP == s_health_measure_run_data.measure_state @@ -814,6 +827,13 @@ void mmi_health_measure_app_measure_start(MMI_HEALTH_MEASURE_TYPE_E measure_type { return; } + +#ifdef __MMI_CUSTOM_HENG_AI_BLOOD_PRESSURE__ + if(mmi_hengai_bp_is_measuring()) + { + return; + } +#endif if(MMI_HEALTH_MEASURE_STATE_TIMED == s_health_measure_run_data.measure_state) { diff --git a/2.sdk/sdk/gui/lv_watch/lv_watch.c b/2.sdk/sdk/gui/lv_watch/lv_watch.c index 8f6451e8..f77fbce4 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_watch.c +++ b/2.sdk/sdk/gui/lv_watch/lv_watch.c @@ -136,6 +136,9 @@ static void mmi_data_init_after_watch_create(void) #ifdef __MMI_SEDENTARY_REMIND_SUPPORT__ mmi_sedentary_remind_mission_power_on_check(); #endif +#ifdef __MMI_CUSTOM_HENG_AI_BLOOD_PRESSURE__ + mmi_hengai_blood_pressure_nv_read(); +#endif diff --git a/2.sdk/sdk/gui/lv_watch/lv_watch_res.h b/2.sdk/sdk/gui/lv_watch/lv_watch_res.h index 5f455601..d55d832f 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_watch_res.h +++ b/2.sdk/sdk/gui/lv_watch/lv_watch_res.h @@ -1018,9 +1018,13 @@ LV_IMG_DECLARE(img_poweron_logo); #define ICON_HENGAI_BP_PROMPT_0 "R:/png/custom_function/ICON_HENGAI_BP_PROMPT_0.png" #define ICON_HENGAI_BP_PROMPT_1 "R:/png/custom_function/ICON_HENGAI_BP_PROMPT_1.png" -#define ANIM_HENGAI_BP_MEASURE "R:/gif/ANIM_HENGAI_BP_MEASURE.gif" -#define ANIM_HENGAI_BP_CALIBRATE "R:/gif/ANIM_HENGAI_BP_CALIBRATE.gif" -#define ANIM_HENGAI_BP_ATTEMPT "R:/gif/ANIM_HENGAI_BP_ATTEMPT.gif" +#define ICON_HENGAI_BP_LEFT_ARROW "R:/png/custom_function/ICON_HENGAI_BP_LEFT_ARROW.png" +#define ICON_HENGAI_BP_RIGHT_ARROW "R:/png/custom_function/ICON_HENGAI_BP_RIGHT_ARROW.png" + +#define ANIM_HENGAI_BP_MEASURE "R:/gif/custom_function/ANIM_HENGAI_BP_MEASURE.gif" +#define ANIM_HENGAI_BP_CALIBRATE "R:/gif/custom_function/ANIM_HENGAI_BP_CALIBRATE.gif" +#define ANIM_HENGAI_BP_ATTEMPT "R:/gif/custom_function/ANIM_HENGAI_BP_ATTEMPT.gif" +#define ANIM_HENGAI_BP_WAITTING "R:/gif/custom_function/ANIM_HENGAI_BP_WAITTING.gif" #endif