Z5_HA_K18_NFC
author@CHENG <2393524978@qq.com>
Tue, 25 Feb 2025 06:52:33 +0000 (14:52 +0800)
committer@CHENG <2393524978@qq.com>
Tue, 25 Feb 2025 06:52:33 +0000 (14:52 +0800)
13 files changed:
2.sdk/sdk/gui/lv_watch/framework/language/lang_ch.c
2.sdk/sdk/gui/lv_watch/framework/language/lang_en.c
2.sdk/sdk/gui/lv_watch/framework/message/mmi_msg_zhsx.c
2.sdk/sdk/gui/lv_watch/include/ui_textid.h
2.sdk/sdk/gui/lv_watch/lv_apps/dial/dial.h
2.sdk/sdk/gui/lv_watch/lv_apps/dial/dial_element.c
2.sdk/sdk/gui/lv_watch/lv_apps/primary_menu/primary_menu.c
2.sdk/sdk/gui/lv_watch/lv_apps/primary_menu/primary_menu_data.c
2.sdk/sdk/gui/lv_watch/lv_theme_watch_night.c
2.sdk/sdk/gui/lv_watch/lv_theme_watch_night.h
2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd.c
2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd.h
2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd_content.c

index b5cb366..d2a5c82 100644 (file)
@@ -1004,6 +1004,8 @@ const void * lang_text_ch[] = {
     "浅睡", // WATCH_TEXT_ID_LIGHT_SLEEP,
     "快速眼动", // WATCH_TEXT_ID_REM_SLEEP,
     "幸福值", // WATCH_TEXT_ID_HAPPINESS_VALUE,
+    "幸福值开始测试", // WATCH_TEXT_ID_HAPPINESS_START,
+    "幸福值结束测试", // WATCH_TEXT_ID_HAPPINESS_STOP,
     "体验时间", // WATCH_TEXT_ID_EXPERIENCE_TIME,
     "终止", // WATCH_TEXT_ID_EXPERIENCE_STOP,
     "确定终止体验?", // WATCH_TEXT_ID_EXPERIENCE_STOP_Q,
index 8b735de..ef8df9b 100644 (file)
@@ -1005,6 +1005,8 @@ const void * lang_text_en[] = {
     "Light sleep", // WATCH_TEXT_ID_LIGHT_SLEEP,
     "REM", // WATCH_TEXT_ID_REM_SLEEP,
     "Happiness", // WATCH_TEXT_ID_HAPPINESS_VALUE,
+    "Happiness start", // WATCH_TEXT_ID_HAPPINESS_START,
+    "Happiness stop", // WATCH_TEXT_ID_HAPPINESS_STOP,
     "Time", // WATCH_TEXT_ID_EXPERIENCE_TIME,
     "Stop", // WATCH_TEXT_ID_EXPERIENCE_STOP,
     "Stop the experience?", // WATCH_TEXT_ID_EXPERIENCE_STOP_Q,
index 90fed25..274ca1d 100644 (file)
@@ -119,6 +119,13 @@ void mmi_ui_msg_action_charging_prompt(uint32_t chg_status)
                || (true == mmi_is_ACT_ID_WATCH_SEARCHING())
                )
                return;
+
+#ifdef MMI_PROJECT_Z5_HA_K18_NFC
+       if(true == mmi_k18_nfc_experience_screen_active())
+       {
+               return;
+       }
+#endif
        
        mmi_msg_charging_prompt_t * msg_info = (mmi_msg_charging_prompt_t *)Hal_Mem_Alloc(sizeof(mmi_msg_charging_prompt_t));
 
index eb7b5d9..2dcbb0a 100644 (file)
@@ -1012,6 +1012,8 @@ enum
     WATCH_TEXT_ID_LIGHT_SLEEP,                          /* "浅睡"                     "Light sleep" */
     WATCH_TEXT_ID_REM_SLEEP,                            /* "快速眼动"                     "REM" */
     WATCH_TEXT_ID_HAPPINESS_VALUE,                      /* "幸福值"                     "Happiness" */
+    WATCH_TEXT_ID_HAPPINESS_START,                      /* "幸福值开始测试"                     "Happiness start" */
+    WATCH_TEXT_ID_HAPPINESS_STOP,                       /* "幸福值结束测试"                     "Happiness stop" */
     WATCH_TEXT_ID_EXPERIENCE_TIME,                      /* "体验时间"                     "Time" */
     WATCH_TEXT_ID_EXPERIENCE_STOP,                      /* "终止"                     "Stop" */
     WATCH_TEXT_ID_EXPERIENCE_STOP_Q,                    /* "确定终止体验?"                     "Stop the experience?" */
index 752080d..4334a31 100644 (file)
@@ -73,6 +73,7 @@ enum {
     ELEMENT_TYPE_BLOOD_OXYGEN,      //14
        ELEMENT_TYPE_USER,                              //15
        ELEMENT_TYPE_SIGNAL,                    //16
+       ELEMENT_TYPE_TEMPERATURE,               //17
 
     ELEMENT_TYPE_BG_SWITCH,         //15  /*except when updating all elements, always at the last*/
     ELEMENT_TYPE_MAX
@@ -175,6 +176,8 @@ enum {
 
        IMG_TYPE_SIGNAL = ELEMENT_TYPE_SIGNAL *10,
 
+    IMG_TYPE_TEMPERATURE = ELEMENT_TYPE_TEMPERATURE * 10,  //170
+
     IMG_TYPE_BG = ELEMENT_TYPE_BG_SWITCH * 10, //150
 };
 typedef uint8_t watch_img_type_t;
@@ -209,6 +212,8 @@ enum {
     LABEL_TYPE_BLOOD_OXYGEN,        //26
        LABEL_TYPE_SIGNAL,                              //27
        LABEL_TYPE_SIGNAL_REGISTER_STATE, // 28
+       LABEL_TYPE_TEMPERATURE, // 29
+       LABEL_TYPE_USER_CUSTOM, // 30
 
 
 };
index 8b432da..e99fc53 100644 (file)
@@ -467,6 +467,7 @@ static bool dial_is_unchangeable_img(watch_img_type_t type)
             type == IMG_TYPE_BLOOD_OXYGEN
             || IMG_TYPE_USER_PNG == type
                        || IMG_TYPE_HEART_RATE_IMAGE == type
+                       || IMG_TYPE_TEMPERATURE == type
             )
         return true;
     else
@@ -480,7 +481,9 @@ static bool dial_is_unchangeable_label(watch_label_type_t type)
             type == LABEL_TYPE_CALORIE_KCAL ||
             type == LABEL_TYPE_STEP_STEPS ||
             type == LABEL_TYPE_DISTANCE_KM ||
-            type == LABEL_TYPE_HEART_RATE_BPM)
+            type == LABEL_TYPE_HEART_RATE_BPM
+                       || LABEL_TYPE_USER_CUSTOM == type
+                       )
         return true;
     else
         return false;
@@ -523,7 +526,7 @@ static void dial_update_canvas_label(watch_element_base_t * base)
         app_adaptor_get_pedometer_info_req(&record);
     }
     if(ELEMENT_TYPE_HEART_RATE == base->element_type || ELEMENT_TYPE_SLEEP_QUALITY == base->element_type || ELEMENT_TYPE_BLOOD_OXYGEN == base->element_type
-            || ELEMENT_TYPE_PRESSURE == base->element_type) {
+        || ELEMENT_TYPE_PRESSURE == base->element_type || ELEMENT_TYPE_TEMPERATURE == base->element_type) {
         //app_adaptor_get_health_info_req(&health);
                mmi_health_info_get(&health_info);
     }
@@ -641,6 +644,25 @@ static void dial_update_canvas_label(watch_element_base_t * base)
                                else
                        sprintf(infotxt, "--");
                 dial_create_canvas_text(infotxt, label_dsc->label_font, label_dsc->text_color, pos.x + label_dsc->text_pos.x, pos.y + label_dsc->text_pos.y);
+                break;
+                       case LABEL_TYPE_TEMPERATURE:
+                               if(health_info.body_value)
+                               {
+                                       uint8_t value1 = 0, value2 = 0;
+
+                                       value1 = (uint8_t)health_info.body_value;
+                                       value2 = (uint8_t)((health_info.body_value - value1) * 10);
+
+                                       char * uincode_str = "2103"; // \u2103
+                                       char utf8_str[8] = {0};
+                                       uint8_t output_len = 0;
+                                       
+                                       mmi_unicode_hex_str_to_utf8_str(uincode_str, strlen(uincode_str), utf8_str, &output_len);
+                                       sprintf(infotxt, "%d.%d %s", value1, value2, utf8_str);
+                               }
+                               else
+                       sprintf(infotxt, "--");
+                dial_create_canvas_text(infotxt, label_dsc->label_font, label_dsc->text_color, pos.x + label_dsc->text_pos.x, pos.y + label_dsc->text_pos.y);
                 break;
             case LABEL_TYPE_SLEEP_QUALITY:
                 //snprintf(infotxt, len, "%d", health.sleep);
@@ -734,7 +756,7 @@ static void dial_update_canvas_img(watch_element_base_t * base)
         app_adaptor_get_pedometer_info_req(&record);
     }
     if(ELEMENT_TYPE_HEART_RATE == base->element_type || ELEMENT_TYPE_SLEEP_QUALITY == base->element_type || ELEMENT_TYPE_BLOOD_OXYGEN == base->element_type
-            || ELEMENT_TYPE_PRESSURE == base->element_type) {
+        || ELEMENT_TYPE_PRESSURE == base->element_type || ELEMENT_TYPE_TEMPERATURE == base->element_type) {
         //app_adaptor_get_health_info_req(&health);
                //mmi_health_info_get(&health_info);
     }
index f457ece..0bda987 100644 (file)
@@ -239,6 +239,39 @@ static lv_obj_t * mmi_main_menu_style_four_grid_display(lv_obj_t * tab, int8_t b
 #endif
 
 #ifdef __MMI_MAIN_MENU_ONE_PAGE_STYLE__
+#ifdef MMI_PROJECT_Z5_HA_K18_NFC
+static lv_obj_t * mmi_main_menu_style_one_page_display(lv_obj_t * tab, void * btn_src, watchLangTxtId_t txtId, lv_event_cb_t event_cb)
+{
+    lv_obj_t * cont = lv_obj_get_child(tab, NULL);
+    LV_ASSERT_MEM(cont);
+    if(cont == NULL)
+               return NULL;
+       
+    lv_obj_t * img_bg = lv_img_create(cont, NULL);
+       lv_img_set_src(img_bg, ICON_K18_NFC_EXPERIENCE_BG);
+       lv_obj_align(img_bg, NULL, LV_ALIGN_CENTER, 0, 0);
+    //lv_tileview_add_element(lv_obj_get_parent(tab), btn);
+       
+    lv_obj_t * btn = lv_imgbtn_create(cont, NULL);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, btn_src);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, btn_src);
+    lv_btn_set_checkable(btn, false);
+    lv_obj_set_event_cb(btn, event_cb);
+    lv_tileview_add_element(lv_obj_get_parent(tab), btn);
+       lv_obj_align(btn, cont, LV_ALIGN_CENTER, 0, -20);
+
+    lv_obj_t * label = lv_label_create(cont, NULL);
+       lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font40);
+    lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL_CIRC);
+    lv_obj_set_size(label, LV_HOR_RES / 2, 60);
+    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+    lv_label_set_text_id(label, txtId);
+    lv_obj_set_click(label, false);
+       lv_obj_align(label, cont, LV_ALIGN_IN_BOTTOM_MID, 0, -70);
+
+       return btn;
+}
+#else
 static lv_obj_t * mmi_main_menu_style_one_page_display(lv_obj_t * tab, void * btn_src, watchLangTxtId_t txtId, lv_event_cb_t event_cb)
 {
     lv_obj_t * cont = lv_obj_get_child(tab, NULL);
@@ -268,6 +301,7 @@ static lv_obj_t * mmi_main_menu_style_one_page_display(lv_obj_t * tab, void * bt
        return btn;
 }
 #endif
+#endif
 
 #ifdef __MMI_MAIN_MENU_LIST_STYLE__
 static lv_obj_t * mmi_main_menu_style_list_display(lv_obj_t * tab)
index 8ff41d1..f03332b 100644 (file)
@@ -92,7 +92,8 @@ static mmi_page_main_menu_info_t s_main_menu_one_page[] =
 #ifdef __MMI_HEALTH_MEASURE_TEMPERATURE_SUPPORT__
        {{ ICON_TEMPERATURE_ONE_PAGE, WATCH_TEXT_ID_TEMPERATURE, health_temperature_create_event_cb}, NULL},
 #endif
-       {{ ICON_SETTING_ONE_PAGE, WATCH_TEXT_ID_SETTINGS, setting_create_event_cb}, NULL},
+
+       //{{ ICON_SETTING_ONE_PAGE, WATCH_TEXT_ID_SETTINGS, mmi_k18_nfc_experience_create_event_cb}, NULL},
 };
 
 #else
index ad05475..28c27f9 100644 (file)
@@ -256,6 +256,10 @@ lv_style_t lv_watch_font60;
 lv_style_t lv_watch_font60_black;
 #endif
 
+#ifdef MMI_FONT60_RED_SUPPORT
+lv_style_t lv_watch_font60_red;
+#endif
+
 #ifdef USE_FONT_TTF
 lv_font_t lv_font_ttf_20;
 lv_font_t lv_font_ttf_30;
@@ -1166,6 +1170,12 @@ static void lv_theme_watch_set_private_style(void)
        lv_style_set_text_font(&lv_watch_font60_black, LV_STATE_DEFAULT, &lv_font_ttf_60);
 #endif
 
+#ifdef MMI_FONT60_RED_SUPPORT
+       style_init_reset(&lv_watch_font60_red);
+       lv_style_set_text_color(&lv_watch_font60_red, LV_STATE_DEFAULT, LV_COLOR_RED);
+       lv_style_set_text_font(&lv_watch_font60_red, LV_STATE_DEFAULT, &lv_font_ttf_60);
+#endif
+
     /*lv_watch_style_transp*/
     style_init_reset(&lv_watch_style_transp);
     lv_style_copy(&lv_watch_style_transp, &lv_style_transp);
index fb8a959..098bb96 100644 (file)
@@ -161,6 +161,11 @@ extern lv_style_t lv_watch_font60;
 extern lv_style_t lv_watch_font60_black;
 #endif
 
+#ifdef MMI_FONT60_RED_SUPPORT
+extern lv_style_t lv_watch_font60_red;
+#endif
+
+
 extern lv_style_t lv_watch_image;
 extern lv_style_t lv_watch_image_opa1;
 extern lv_style_t lv_watch_black_tight;
index 39dbb6c..f168f5a 100644 (file)
@@ -3978,12 +3978,97 @@ bool mmi_protocol_fzd_parse_ACTION_TCP_HTTP(unsigned char * next_buff, unsigned
                mmi_hengai_health_data_parse(next_buff, strlen(next_buff));
        #else
 
-       #ifdef MMI_PROJECT_Z5_HA_K18_NFC
-               mmi_k18_nfc_experience_cmd_trigger(next_buff, strlen(next_buff));
        #endif
+       }
+       
+       return result;
+}
 
-       #endif
+bool mmi_protocol_fzd_parse_SERVER_COMMON_MSG_DOWN(unsigned char * next_buff, unsigned int next_buff_len)
+{
+       bool result = false;
+       MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_SERVER_COMMON_MSG_DOWN;
+
+       if(NULL == next_buff || 0 == next_buff_len)
+       {
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return false;
+       }
+       
+       result = true;
+       mmi_protocol_fzd_send_without_data(action);
+
+       int decode_len = next_buff_len;
+       char * decode_str = NULL;
+       uint32_t output_len = 0;
+
+       decode_str = lv_mem_alloc(decode_len);
+       if(NULL == decode_str)
+       {
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc fail\n", __FUNCTION__, __LINE__);
+               return false;
+       }
+       _lv_memset_00(decode_str, decode_len);  
+
+       int ret_value = mbedtls_base64_decode(decode_str, decode_len, &output_len, next_buff, next_buff_len);
+       if(0 != ret_value)
+       {
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: base64 decode failed\n", __FUNCTION__, __LINE__);
+               lv_mem_free(decode_str);
+               return false;
+       }
+       PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       
+#ifdef MMI_PROJECT_Z5_HA_K18_NFC
+       mmi_k18_nfc_experience_trigger(decode_str, output_len);
+#endif
+
+       lv_mem_free(decode_str);
+       
+       return result;
+}
+
+bool mmi_protocol_fzd_action_common_msg_up(char * data_ptr, uint32_t data_len)
+{
+       bool result = false;
+       MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_ACTION_COMMON_MSG_UP;
+       unsigned char * content_buff = NULL;
+       unsigned int content_lenth = 0;
+       int encode_len = 0;
+       char * encode_str = NULL;
+       int output_len = 0;
+
+       // base64 encode
+       encode_len = data_len * 3 / 2;
+       encode_str = lv_mem_alloc(encode_len);
+       if(NULL == encode_str)
+       {
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__);
+               return false;
        }
+       _lv_memset_00(encode_str, encode_len);
+       if(0 != mbedtls_base64_encode(encode_str, encode_len, &output_len, data_ptr, data_len))
+       {
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: base64 encode failed\n", __FUNCTION__, __LINE__);
+               lv_mem_free(encode_str);
+               return false;
+       }       
+
+       content_buff = (unsigned char *)lv_mem_alloc(output_len + 2);
+       if(NULL == content_buff)
+       {
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               lv_mem_free(encode_str);
+               return false;
+       }
+       _lv_memset_00(content_buff, output_len + 2);
+       sprintf(content_buff, ",");
+       _lv_memcpy(content_buff + 1, encode_str, output_len);
+       lv_mem_free(encode_str);
+       content_lenth = strlen(content_buff);
+       
+       result = mmi_protocol_fzd_send_with_data(action, content_buff, content_lenth);
+       lv_mem_free(content_buff);
        
        return result;
 }
index 8d3676d..57c8621 100644 (file)
@@ -206,6 +206,8 @@ typedef enum
        MMI_FZD_ACTION_HENGAI_TCMS_DATA,
 #endif
        MMI_FZD_ACTION_TCP_HTTP,
+       MMI_FZD_SERVER_COMMON_MSG_DOWN,
+       MMI_FZD_ACTION_COMMON_MSG_UP,
        MMI_FZD_ACTION_SEND_ICCID,
        MMI_FZD_ACTION_SLEEP_DATA,
        MMI_FZD_SERVER_PPG_TEST,
@@ -378,6 +380,9 @@ bool mmi_protocol_fzd_action_hengai_tcms_data(char * data_ptr, uint32_t data_len
 bool mmi_protocol_fzd_action_tcp_http(char * data_ptr, uint32_t data_len);
 bool mmi_protocol_fzd_parse_ACTION_TCP_HTTP(unsigned char * next_buff, unsigned int next_buff_len);
 
+bool mmi_protocol_fzd_parse_SERVER_COMMON_MSG_DOWN(unsigned char * next_buff, unsigned int next_buff_len);
+bool mmi_protocol_fzd_action_common_msg_up(char * data_ptr, uint32_t data_len);
+
 bool mmi_protocol_fzd_action_send_iccid(void);
 bool mmi_protocol_fzd_action_sleep_data(char * data_ptr, uint32_t data_len);
 bool mmi_protocol_fzd_parse_SERVER_PPG_TEST(unsigned char * next_buff, unsigned int next_buff_len);
index 42103b3..37cfd62 100644 (file)
@@ -140,6 +140,8 @@ static unsigned char * mmi_protocol_fzd_action_string_get(MMI_PROTOCOL_FZD_ACTIO
                        {MMI_FZD_ACTION_HENGAI_TCMS_DATA, "CNDOCD"},                    
                #endif
                        {MMI_FZD_ACTION_TCP_HTTP, "TCP_HTTP"},
+                       {MMI_FZD_SERVER_COMMON_MSG_DOWN, "GEN_MSG_DOWN"},
+                       {MMI_FZD_ACTION_COMMON_MSG_UP, "GEN_MSG_UP"},
                        {MMI_FZD_ACTION_SEND_ICCID, "ICCID"},
                        {MMI_FZD_ACTION_SLEEP_DATA, "SLEEP_DATA"},
                        {MMI_FZD_SERVER_PPG_TEST, "PPG"},
@@ -482,6 +484,12 @@ static bool mmi_protocol_fzd_content_parse(unsigned char * content_ptr, unsigned
                        mmi_protocol_fzd_parse_ACTION_TCP_HTTP(next_buff, next_buff_len);
                        break;
 
+               case MMI_FZD_SERVER_COMMON_MSG_DOWN:
+                       mmi_protocol_fzd_parse_SERVER_COMMON_MSG_DOWN(next_buff, next_buff_len);
+                       break;
+               case MMI_FZD_ACTION_COMMON_MSG_UP:
+                       break;
+
                case MMI_FZD_ACTION_SEND_ICCID:
                case MMI_FZD_ACTION_SLEEP_DATA:
                case MMI_FZD_ACTION_PPG_DATA: