Z5_HA_K18_NFC 体验界面 & 指令解析 & 幸福值获取 & 表盘展示
author@CHENG <2393524978@qq.com>
Thu, 27 Feb 2025 10:33:33 +0000 (18:33 +0800)
committer@CHENG <2393524978@qq.com>
Thu, 27 Feb 2025 10:33:33 +0000 (18:33 +0800)
13 files changed:
2.sdk/project/Z5_HA_K18_NFC/gui/lv_watch/resource/ext/png/poweron/img_poweron_logo.png
2.sdk/project/Z5_HA_K18_NFC/gui/lv_watch/resource/png/dial_style1/dial_style1.json
2.sdk/project/Z5_HA_K18_NFC/gui/lv_watch/resource/png/dial_style1/happiness.png [moved from 2.sdk/project/Z5_HA_K18_NFC/gui/lv_watch/resource/png/dial_style1/heart.png with 100% similarity]
2.sdk/project/Z5_HA_K18_NFC/product/craneg_modem/config/watch/lv_watch_conf_CUSTOM.h
2.sdk/sdk/gui/lv_watch/app_adaptor/app_adaptor.c
2.sdk/sdk/gui/lv_watch/include/ui_nvm_interface.h
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.c
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/heng_ai_http_protocol.h
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/k18_nfc_experience_ui.c
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/k18_nfc_experience_ui.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/mmi_protocol/mmi_protocol_api.c

index f8dd9b2..c4b292d 100644 (file)
Binary files a/2.sdk/project/Z5_HA_K18_NFC/gui/lv_watch/resource/ext/png/poweron/img_poweron_logo.png and b/2.sdk/project/Z5_HA_K18_NFC/gui/lv_watch/resource/ext/png/poweron/img_poweron_logo.png differ
index fa7d46e..6b3716b 100644 (file)
     },
          {
       "element_pos": {
-        "x": 280,
+        "x": 283,
         "y": 155
       },
       "element_cnt": 1,
         "y": 205
       },
       "element_cnt": 1,
-      "act_type": 13,
+      "act_type": 18,
       "layer": 0,
       "element_dsc_ll": [
         {
-          "element_type": 13,
-          "element_name": "å¿\83ç\8e\87",
+          "element_type": 18,
+          "element_name": "幸ç¦\8få\80¼",
           "img_cnt": 1,
           "img_ll": [
             {
-              "img_type": 130,
+              "img_type": 180,
               "img_pos": {
                 "x": 0,
                 "y": 0
               "sub_img_cnt": 1,
               "sub_img_ll": [
                 {
-                  "sub_img": "R:/png/dial_style1/heart.png"
+                  "sub_img": "R:/png/dial_style1/happiness.png"
                 }
               ]
             } 
           "label_cnt": 2,
           "label_ll": [
             {
-              "label_type": 24,
+              "label_type": 31,
               "text": "123",
               "text_color": {
                 "r": 255,
                 "b": 255
               },
               "text_pos": {
-                "x": 67,
-                "y": 28
+                "x": 40,
+                "y": 40
               },
-              "font_size": 60
+              "font_size": 40
             },
             {
               "label_type": 30,
index 698ecee..671bcce 100644 (file)
 //#define __MMI_SLEEP_FUNCTION_SUPPORT__
 //#define __MMI_CUSTOM_HENGAI_SLEEP__
 
-//#define __MMI_CUSTOM_HENGAI_HEALTH__
-//#define __MMI_CUSTOM_HENGAI_HEALTH_UPLOAD_USE_TCP__
+#define __MMI_CUSTOM_HENGAI_HEALTH__
+#define __MMI_CUSTOM_HENGAI_HEALTH_UPLOAD_USE_TCP__
 
 //#define __MMI_CUSTOM_HENGAI_TCMS__
 
index 6929b75..62077ee 100644 (file)
@@ -72,6 +72,7 @@ void mmi_health_info_get(nv_watch_health_info_t * health_info)
        health_info->blood_low_value = s_health_info.blood_low_value;
        health_info->spo2_value = s_health_info.spo2_value;
        health_info->body_value = s_health_info.body_value;
+       health_info->happiness_value = s_health_info.happiness_value;
        //memcpy(&(health_info->heart_time), &(s_health_info.heart_time), sizeof(hal_rtc_t));
 #endif
        _lv_memcpy(&(health_info->heart_time), &(s_health_info.heart_time), sizeof(hal_rtc_t));
@@ -84,6 +85,7 @@ void mmi_health_info_set(nv_watch_health_info_t * health_info)
        s_health_info.blood_low_value = health_info->blood_low_value;
        s_health_info.spo2_value = health_info->spo2_value;
        s_health_info.body_value = health_info->body_value;
+       s_health_info.happiness_value = health_info->happiness_value;
        //memcpy(&(s_health_info.heart_time), &(health_info->heart_time), sizeof(hal_rtc_t));
        _lv_memcpy(&(s_health_info.heart_time), &(health_info->heart_time), sizeof(hal_rtc_t));
 
index 4455123..8464845 100644 (file)
@@ -232,6 +232,7 @@ typedef struct
        uint16_t spo2_value;
        //float wrist_value;
        float body_value;
+       float happiness_value;
 } __packed nv_watch_health_info_t;
 
 #define NV_WATCH_SOS_NUMBER_MAX                (3)
index 1016093..2c90354 100644 (file)
@@ -17,6 +17,17 @@ static void * s_delay_timer_id = NULL;
 
 static void mmi_delay_timer_id_delete(void);
 
+void mmi_hengai_health_send_type_set(HENGAI_HEALTH_SEND_TYPE_ENUM send_type)
+{
+       s_hengai_bp_send_code = send_type;
+}
+
+HENGAI_HEALTH_SEND_TYPE_ENUM mmi_hengai_health_send_type_get(void)
+{
+       return s_hengai_bp_send_code;
+}
+
+
 #ifdef __PPG_DATA_TEST_SEND__
 void __hengai_tcp_bp_measure_raw_data_send(void)
 {
@@ -1393,7 +1404,8 @@ bool mmi_hengai_health_data_parse(unsigned char * next_buff, unsigned int next_b
        cJSON * json_recv = cJSON_Parse(t_decode_str);
        if(NULL != json_recv)
        {
-               switch(s_hengai_bp_send_code)
+               HENGAI_HEALTH_SEND_TYPE_ENUM send_type = mmi_hengai_health_send_type_get();
+               switch(send_type)
                {
                        case HENGAI_HEALTH_SEND_LOGIN:
                                if(cJSON_IsTrue(cJSON_GetObjectItem(json_recv, "status")))
@@ -1511,6 +1523,27 @@ bool mmi_hengai_health_data_parse(unsigned char * next_buff, unsigned int next_b
                                }
                                break;
 
+                       case HENGAI_HEALTH_SEND_HAPPINESS_DATA:
+                               if(cJSON_IsTrue(cJSON_GetObjectItem(json_recv, "status")))
+                               {
+                                       HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: true\n", __FUNCTION__, __LINE__);
+
+                                       cJSON * json_data = cJSON_GetObjectItem(json_recv, "data");
+                                       if (cJSON_IsNumber(cJSON_GetObjectItem(json_data, "happiness")))
+                                       {
+                                               float value_happiness = (cJSON_GetObjectItem(json_data, "happiness"))->valuedouble;
+
+                                       #ifdef MMI_PROJECT_Z5_HA_K18_NFC
+                                               mmi_hengai_happinss_value_set(value_happiness);
+                                       #endif
+                                       }
+                               }
+                               else
+                               {
+                                       HENGAI_HEALTH_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: false\n", __FUNCTION__, __LINE__);
+                               }
+                               break;
+
                        default:
                                break;
                }       
index f37d81c..ccfe9f7 100644 (file)
@@ -64,10 +64,13 @@ typedef enum
        HENGAI_HEALTH_SEND_MEASURE_DATA,
        HENGAI_HEALTH_SEND_BACK_MEASURE_DATA,
        HENGAI_HEALTH_SEND_CLEAN_MODEL,
+       HENGAI_HEALTH_SEND_HAPPINESS_DATA,
        
        HENGAI_HEALTH_SEND_MAX,
 }HENGAI_HEALTH_SEND_TYPE_ENUM;
 
+void mmi_hengai_health_send_type_set(HENGAI_HEALTH_SEND_TYPE_ENUM send_type);
+HENGAI_HEALTH_SEND_TYPE_ENUM mmi_hengai_health_send_type_get(void);
 
 void mmi_hengai_tcp_bp_back_measure_raw_data_send(void);
 void mmi_hengai_tcp_bp_measure_raw_data_send(void);
index 1b4de63..23f4148 100644 (file)
@@ -32,14 +32,18 @@ typedef struct
        char * name;
        int total_duration;
        int remain_duration;
-       int happiness_value;
+       float happiness_value; // int happiness_value;
        TIMER_ID cycle_timer_id;
        TASK_HANDLE * task_id;
 }k18_nfc_expr_data_t;
 
 static k18_nfc_expr_data_t s_experience_data = {0};
 static bool s_screen_is_active = false;
+
 static unsigned char s_get_value_count = 0;
+static char s_happiness_begin_time_str[24] = {0}, s_happiness_end_time_str[24] = {0};
+static int * s_happiness_raw_data_ptr = NULL;
+static int s_happiness_raw_data_len = 0;
 
 
 static void mmi_k18_nfc_experience_happiness_value_get(void);
@@ -80,8 +84,8 @@ void mmi_k18_nfc_experience_prepare_destory(lv_obj_t * activity_obj)
 {
        K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-       watch_set_suspend_enable(true, ACT_ID_K18_NFC_EXPERIENCE, 0);
-       watch_wakeup_time_reset();
+       //watch_set_suspend_enable(true, ACT_ID_K18_NFC_EXPERIENCE, 0);
+       //watch_wakeup_time_reset();
 
        if(NULL != s_experience_data.name)
        {
@@ -89,8 +93,9 @@ void mmi_k18_nfc_experience_prepare_destory(lv_obj_t * activity_obj)
                s_experience_data.name = NULL;
        }
 
-       mmi_k18_nfc_experience_timer_deinit();
-       mmi_k18_nfc_experience_task_deinit();
+       //mmi_k18_nfc_experience_timer_deinit();
+       //mmi_k18_nfc_experience_task_deinit();
+       //mmi_k18_nfc_experience_happiness_deinit();
        
     lv_watch_png_cache_all_free();
 
@@ -129,7 +134,12 @@ void mmi_k18_nfc_experience_stop_ok_btn_event_cb(lv_obj_t * obj, lv_event_t e)
        if(LV_EVENT_CLICKED != e)
                return;
 
+       watch_set_suspend_enable(true, ACT_ID_K18_NFC_EXPERIENCE, 0);
+       watch_wakeup_time_reset();
+
        mmi_k18_nfc_experience_timer_deinit();
+       mmi_k18_nfc_experience_happiness_deinit();
+
        mmi_k18_nfc_experience_task_msg_send(MSG_EXPERIENCE_INTERRUPT);
 
        mmi_k18_nfc_experience_screen_clean();
@@ -206,13 +216,13 @@ void mmi_k18_nfc_experience_stop_btn_event_cb(lv_obj_t * obj, lv_event_t e)
 }
 
 
-void mmi_k18_nfc_experience_finish_task_cb(lv_task_t * task)
-{
-       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
-       mmi_k18_nfc_experience_screen_clean();
-       lv_watch_go_home();
-}
+//void mmi_k18_nfc_experience_finish_task_cb(lv_task_t * task)
+//{
+//     K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+//
+//     mmi_k18_nfc_experience_screen_clean();
+//     lv_watch_go_home();
+//}
 
 void mmi_k18_nfc_experience_finish_screen(lv_obj_t * par)
 {
@@ -264,24 +274,38 @@ void mmi_k18_nfc_experience_finish_screen(lv_obj_t * par)
 
        lv_obj_t * label_value = lv_label_create(img_value, NULL);
        lv_obj_add_style(label_value, LV_LABEL_PART_MAIN, &lv_watch_font24);
-       char temp_value[4] = {0};
-       snprintf(temp_value, 4, "%d", s_experience_data.happiness_value);
+       char temp_value[16] = {0};
+       uint8_t value1 = 0, value2 = 0, value3 = 0;
+       value1 = (uint8_t)(s_experience_data.happiness_value);
+       value2 = (uint8_t)((s_experience_data.happiness_value - value1) * 10);
+       value3 = (uint8_t)(((s_experience_data.happiness_value - value1) * 10 - value2) * 10);
+       if(0 == value3)
+       {
+               if(0 == value2)
+                       sprintf(temp_value, "%d", value1);
+               else
+                       sprintf(temp_value, "%d.%d", value1, value2);
+       }
+       else
+       {
+               sprintf(temp_value, "%d.%d%d", value1, value2, value3);
+       }       
        lv_label_set_text(label_value, temp_value);
-       lv_obj_align(label_value, NULL, LV_ALIGN_CENTER, 0, 0);
+       lv_obj_align(label_value, NULL, LV_ALIGN_CENTER, 0, -10);
 
-       lv_obj_t * label_unit = lv_label_create(img, NULL);
-       lv_obj_add_style(label_unit, LV_LABEL_PART_MAIN, &lv_watch_font20);
-       snprintf(temp_value, 4, "bpm");
-       lv_label_set_text(label_unit, temp_value);
-       lv_obj_align(label_unit, img_value, LV_ALIGN_OUT_RIGHT_BOTTOM, 0, -5);
+       //lv_obj_t * label_unit = lv_label_create(img, NULL);
+       //lv_obj_add_style(label_unit, LV_LABEL_PART_MAIN, &lv_watch_font20);
+       //snprintf(temp_value, 4, "bpm");
+       //lv_label_set_text(label_unit, temp_value);
+       //lv_obj_align(label_unit, img_value, LV_ALIGN_OUT_RIGHT_BOTTOM, 0, -5);
        
        lv_obj_t * label_info = lv_label_create(img, NULL);
        lv_obj_add_style(label_info, LV_LABEL_PART_MAIN, &lv_watch_font36);
        lv_label_set_text_id(label_info, WATCH_TEXT_ID_HAPPINESS_VALUE);
        lv_obj_align(label_info, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -45);
 
-       lv_task_t * task_p = lv_task_create(mmi_k18_nfc_experience_finish_task_cb, 1000 * 5, LV_TASK_PRIO_HIGH, NULL);
-       lv_task_once(task_p);
+//     lv_task_t * task_p = lv_task_create(mmi_k18_nfc_experience_finish_task_cb, 1000 * 5, LV_TASK_PRIO_HIGH, NULL);
+//     lv_task_once(task_p);
 }
 
 static void mmi_k18_nfc_experience_timer_time_cb(void * para)
@@ -312,7 +336,12 @@ static void mmi_k18_nfc_experience_timer_time_cb(void * para)
        }
        else
        {
+               watch_set_suspend_enable(true, ACT_ID_K18_NFC_EXPERIENCE, 0);
+               watch_wakeup_time_reset();
+               
                mmi_k18_nfc_experience_timer_deinit();
+               mmi_k18_nfc_experience_happiness_deinit();
+
                mmi_k18_nfc_experience_task_msg_send(MSG_EXPERIENCE_FINISHED);
 
                lv_ntc_experience_ext_t * ext = mmi_k18_nfc_experience_ext_get();
@@ -324,6 +353,7 @@ static void mmi_k18_nfc_experience_timer_time_cb(void * para)
                        lv_obj_clean(ext->img);
                        mmi_k18_nfc_experience_finish_screen(ext->img);
                }
+               ext->old_ext.slide_enable = 1; /*able to slide to the right*/
        }
 }
 
@@ -452,7 +482,7 @@ void mmi_k18_nfc_experience_create_event_cb(lv_obj_t * btn, lv_event_t e)
        }
 
 
-#if 0 // __test__
+#if 0 // __now_test__
        char *project_name = (char *)lv_lang_get_text(WATCH_TEXT_ID_OUTDOOR_RUNNING); // "8DD16B65673A";
        int temp_len = strlen(project_name);
        char *temp_ptr = lv_mem_alloc(temp_len + 1);
@@ -466,7 +496,7 @@ void mmi_k18_nfc_experience_create_event_cb(lv_obj_t * btn, lv_event_t e)
        s_experience_data.name = temp_ptr;
        s_experience_data.total_duration = 60 * 3;
        s_experience_data.remain_duration = s_experience_data.total_duration;
-       s_experience_data.happiness_value = 168;
+       s_experience_data.happiness_value = 76.89; // 168;
 #endif
 
        
@@ -486,6 +516,7 @@ void mmi_k18_nfc_experience_create_event_cb(lv_obj_t * btn, lv_event_t e)
        s_get_value_count = 0;
        mmi_k18_nfc_experience_timer_init();    
        mmi_k18_nfc_experience_task_init();
+       mmi_k18_nfc_experience_happiness_init();
 }
 
 void mmi_ui_msg_update_k18_nfc_experience(void)
@@ -570,6 +601,7 @@ static void mmi_k18_nfc_experience_task_deinit(void)
        if(NULL != s_experience_data.task_id)
        {
                uos_delete_task(s_experience_data.task_id);
+               s_experience_data.task_id = NULL;
        }
 }
 
@@ -591,11 +623,272 @@ static void mmi_k18_nfc_experience_task_init(void)
        K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: task_id=0x%x\n", __FUNCTION__, __LINE__, s_experience_data.task_id);
 }
 
+
+void mmi_hengai_happinss_value_set(float value_happiness)
+{
+       if(0 == s_experience_data.remain_duration)
+       {
+               K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: finished\n", __FUNCTION__, __LINE__);
+               return;
+       }
+       
+       uint8_t value1 = 0, value2 = 0, value3 = 0;
+       value1 = (uint8_t)(value_happiness);
+       value2 = (uint8_t)((value_happiness - value1) * 10);
+       value3 = (uint8_t)(((value_happiness - value1) * 10 - value2) * 10);
+       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: %d-%d-%d\n", __FUNCTION__, __LINE__, value1, value2, value3);
+       
+       s_experience_data.happiness_value = value_happiness;
+       
+       nv_watch_health_info_t health_info = {0};
+       mmi_health_info_get(&health_info);
+       health_info.happiness_value = value_happiness;
+       mmi_health_info_set(&health_info);
+}
+
+void mmi_happiness_raw_data_time_str_set(uint8_t is_begin)
+{
+       hal_rtc_t cur_time = {0};
+
+       Hal_Rtc_Gettime(&cur_time);
+       if(is_begin)
+       {
+               sprintf(s_happiness_begin_time_str, "%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);
+       }
+       else
+       {
+               sprintf(s_happiness_end_time_str, "%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_happiness_raw_data_fill(void)
+{
+       if(NULL != s_happiness_raw_data_ptr)
+       {
+               lv_mem_free(s_happiness_raw_data_ptr);
+               s_happiness_raw_data_ptr = NULL;
+       }
+       s_happiness_raw_data_len = 0;
+
+       int buff_len = MMI_HENGAI_BP_RAW_DATA_LEN * sizeof(int);
+       s_happiness_raw_data_ptr = (int *)lv_mem_alloc(buff_len);
+       if(NULL == s_happiness_raw_data_ptr)
+       {
+               K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: malloc fail\n", __FUNCTION__, __LINE__);
+               return;
+       }
+       _lv_memset_00(s_happiness_raw_data_ptr, buff_len);
+       _lv_memcpy(s_happiness_raw_data_ptr, fr8012haq_blood_data_get(&s_happiness_raw_data_len), buff_len);
+
+       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: raw_data_len=%d, buff_len=%d\n", __FUNCTION__, __LINE__, s_happiness_raw_data_len, buff_len);
+}
+
+void mmi_happiness_raw_data_send(void)
+{
+       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+       char * data_ptr = NULL;
+       uint32_t data_len = 0;
+       char * encode_str = NULL;
+       uint32_t encode_len = 0;
+       char * encode_header_str = NULL;
+       uint32_t encode_header_len = 0;
+       uint32_t output_len = 0;
+       uint32_t output_header_len = 0;
+       int temp_len = 0;
+       int json_data_len = MMI_HENGAI_BP_RAW_DATA_LEN * 11 + 256;
+       char * json_data = NULL;
+
+       if(NULL == s_happiness_raw_data_ptr || 0 == s_happiness_raw_data_len)
+       {
+               K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: no data\n", __FUNCTION__, __LINE__);
+               goto FREE_AND_EXIT;
+       }
+
+       // json body
+       json_data = lv_mem_alloc(json_data_len);
+       if(NULL == json_data)
+       {
+               K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__);
+               goto FREE_AND_EXIT;
+       }
+       _lv_memset_00(json_data, json_data_len);
+
+       temp_len = 0;
+       temp_len += sprintf(json_data + temp_len, "{\"app_key\":\"%s\",", HENGAI_HTTP_POST_APP_KEY);
+
+       char imei[16 + 1] = {0};
+       app_adp_get_imei_req(imei);
+       temp_len += sprintf(json_data + temp_len, "\"device_code\":\"%s\",", imei);
+       
+       temp_len += sprintf(json_data + temp_len, "\"begin_time\":\"%s\",", s_happiness_begin_time_str);
+
+       temp_len += sprintf(json_data + temp_len, "\"end_time\":\"%s\",", s_happiness_end_time_str);
+       
+       uint16_t i = 0;
+       temp_len += sprintf(json_data + temp_len, "\"ppg_data\":[");
+       for(i = 0; i < s_happiness_raw_data_len; i++)
+       {
+               if(i == (s_happiness_raw_data_len - 1))
+               {
+                       temp_len += sprintf(json_data + temp_len, "%d],", s_happiness_raw_data_ptr[i]);
+               }
+               else
+               {
+                       temp_len += sprintf(json_data + temp_len, "%d,", s_happiness_raw_data_ptr[i]);
+               }
+       }
+
+       temp_len += sprintf(json_data + temp_len, "\"ppg_fs\":%d,", MMI_HENGAI_BP_RAW_DATA_SAMPLE_RATE);
+
+       temp_len += sprintf(json_data + temp_len, "\"measure_mode\":1,"); /* ²âÁ¿Ä£Ê½(0:±»¶¯²âÁ¿/1:Ö÷¶¯²âÁ¿/2:Á¬Ðø²âÁ¿/3:ÆäËû²âÁ¿) */
+
+       temp_len += sprintf(json_data + temp_len, "\"measure_type\":7}"); /* ²âÁ¿ÀàÐÍ(2:ѪÑõÏà¹Ø²âÁ¿/6:ÇéÐ÷Ïà¹Ø²âÁ¿/7:ѪѹÏà
+                                                                                                                                                       ¹Ø²âÁ¿/8:ѪÌÇÏà¹Ø²âÁ¿/9:HRVÏà¹Ø²âÁ¿/10:Ѫѹ±ê¶¨
+                                                                                                                                                       ²âÁ¿/11:ѪÌDZ궨²âÁ¿/)
+                                                                                                                                               */
+
+       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, temp_len);
+
+       // base64 body
+       encode_len = temp_len * 3 / 2;
+       encode_str = lv_mem_alloc(encode_len);
+       if(NULL == encode_str)
+       {
+               K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__);
+               goto FREE_AND_EXIT;
+       }
+       _lv_memset_00(encode_str, encode_len);
+       if(0 != mbedtls_base64_encode(encode_str, encode_len, &output_len, json_data, temp_len))
+       {
+               K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: base64 encode failed\n", __FUNCTION__, __LINE__);
+               goto FREE_AND_EXIT;
+       }
+
+       // json header
+       _lv_memset_00(json_data, json_data_len);
+
+       temp_len = 0;
+       temp_len += sprintf(json_data + temp_len, "{\"headers\":[");
+
+       temp_len += sprintf(json_data + temp_len, "{\"key\":\"token\",");
+
+       char * token = mmi_hengai_health_token_get();
+       temp_len += sprintf(json_data + temp_len, "\"value\":\"%s\"}", token);
+
+       temp_len += sprintf(json_data + temp_len, "]}");
+       
+       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, temp_len);
+
+       // base64 header
+       encode_header_len = temp_len * 3 / 2;
+       encode_header_str = lv_mem_alloc(encode_header_len);
+       if(NULL == encode_header_str)
+       {
+               K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__);
+               goto FREE_AND_EXIT;
+       }
+       _lv_memset_00(encode_header_str, encode_header_len);
+       if(0 != mbedtls_base64_encode(encode_header_str, encode_header_len, &output_header_len, json_data, temp_len))
+       {
+               K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: base64 encode failed\n", __FUNCTION__, __LINE__);
+               goto FREE_AND_EXIT;
+       }       
+       
+       // content
+       data_len = output_len + output_header_len + 128;
+       data_ptr = lv_mem_alloc(data_len);
+       if(NULL == data_ptr)
+       {
+               K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__);
+               goto FREE_AND_EXIT;
+       }
+       _lv_memset_00(data_ptr, data_len);
+       
+       sprintf(data_ptr, ",POST,%s%s,%s,%s", HENGAI_HTTP_POST_URL_COMMON_PREFIX, "/health/synthesis/create", encode_header_str, encode_str);
+       data_len = strlen(data_ptr);
+       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, data_len);
+
+       mmi_hengai_health_send_type_set(HENGAI_HEALTH_SEND_HAPPINESS_DATA);
+       mmi_protocol_fzd_action_tcp_http(data_ptr, data_len);
+       
+FREE_AND_EXIT:
+       if(NULL != json_data)
+       {
+               lv_mem_free(json_data);
+               json_data = NULL;
+       }
+       if(NULL != encode_str)
+       {
+               lv_mem_free(encode_str);
+               encode_str = NULL;
+       }
+       if(NULL != encode_header_str)
+       {
+               lv_mem_free(encode_header_str);
+               encode_header_str = NULL;
+       }
+       if(NULL != data_ptr)
+       {
+               lv_mem_free(data_ptr);
+               data_ptr = NULL;
+       }
+
+       // next time str
+       mmi_happiness_raw_data_time_str_set(1);
+}
+
 static void mmi_k18_nfc_experience_happiness_value_get(void)
 {
+       //data
+       mmi_happiness_raw_data_fill();
+       //time
+       mmi_happiness_raw_data_time_str_set(0);
 
-//     s_experience_data.happiness_value
+       //send
+       mmi_happiness_raw_data_send();
+}
 
+void mmi_k18_nfc_experience_happiness_deinit(void)
+{
+       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+       //sensor
+       mmi_hsensor_close();
+       //flag
+       mmi_hengai_bp_measuring_flag_set(false);
+
+       //free
+       if(NULL != s_happiness_raw_data_ptr)
+       {
+               lv_mem_free(s_happiness_raw_data_ptr);
+               s_happiness_raw_data_ptr = NULL;
+       }
+       s_happiness_raw_data_len = 0;
+}
+
+void mmi_k18_nfc_experience_happiness_init(void)
+{
+       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       mmi_health_measure_factory_mode_clean();
+       //sensor
+       mmi_hsensor_blood_open();
+       //time
+       mmi_happiness_raw_data_time_str_set(1);
+       //flag
+       mmi_hengai_bp_measuring_flag_set(true);
 }
 
 
index 84268e5..9fbf82b 100644 (file)
@@ -49,6 +49,7 @@ void mmi_ui_msg_update_k18_nfc_experience(void);
 
 int mmi_k18_nfc_experience_trigger(char * data_ptr, int data_len);
 
+void mmi_hengai_happinss_value_set(float value_happiness);
 
 #endif 
 
index 4334a31..1e189be 100644 (file)
@@ -74,6 +74,7 @@ enum {
        ELEMENT_TYPE_USER,                              //15
        ELEMENT_TYPE_SIGNAL,                    //16
        ELEMENT_TYPE_TEMPERATURE,               //17
+       ELEMENT_TYPE_HAPPINESS,                 //18
 
     ELEMENT_TYPE_BG_SWITCH,         //15  /*except when updating all elements, always at the last*/
     ELEMENT_TYPE_MAX
@@ -178,6 +179,8 @@ enum {
 
     IMG_TYPE_TEMPERATURE = ELEMENT_TYPE_TEMPERATURE * 10,  //170
 
+       IMG_TYPE_HAPPINESS = ELEMENT_TYPE_HAPPINESS * 10, // 180
+
     IMG_TYPE_BG = ELEMENT_TYPE_BG_SWITCH * 10, //150
 };
 typedef uint8_t watch_img_type_t;
@@ -214,7 +217,7 @@ enum {
        LABEL_TYPE_SIGNAL_REGISTER_STATE, // 28
        LABEL_TYPE_TEMPERATURE, // 29
        LABEL_TYPE_USER_CUSTOM, // 30
-
+       LABEL_TYPE_HAPPINESS, // 31
 
 };
 typedef uint8_t watch_label_type_t;
index e99fc53..a64e7f2 100644 (file)
@@ -468,6 +468,7 @@ static bool dial_is_unchangeable_img(watch_img_type_t type)
             || IMG_TYPE_USER_PNG == type
                        || IMG_TYPE_HEART_RATE_IMAGE == type
                        || IMG_TYPE_TEMPERATURE == type
+                       || IMG_TYPE_HAPPINESS == type
             )
         return true;
     else
@@ -514,6 +515,7 @@ static void dial_update_canvas_label(watch_element_base_t * base)
     //app_adaptor_health_info_t health;
        nv_watch_health_info_t health_info = {0};
     lv_point_t pos;
+       int x_offset = 0;
 
     if(ELEMENT_TYPE_WEEK == base->element_type || ELEMENT_TYPE_DATE == base->element_type
             || ELEMENT_TYPE_TIME_DIGIT == base->element_type || ELEMENT_TYPE_AM_PM == base->element_type) {
@@ -526,7 +528,8 @@ 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_TEMPERATURE == base->element_type) {
+        || ELEMENT_TYPE_PRESSURE == base->element_type || ELEMENT_TYPE_TEMPERATURE == base->element_type || ELEMENT_TYPE_HAPPINESS == base->element_type)
+    {
         //app_adaptor_get_health_info_req(&health);
                mmi_health_info_get(&health_info);
     }
@@ -664,6 +667,41 @@ static void dial_update_canvas_label(watch_element_base_t * base)
                        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_HAPPINESS:
+                               if(health_info.happiness_value)
+                               {
+                                       uint8_t value1 = 0, value2 = 0, value3 = 0;
+                                       
+                                       value1 = (uint8_t)health_info.happiness_value;
+                                       value2 = (uint8_t)((health_info.happiness_value - value1) * 10);
+                                       value3 = (uint8_t)(((health_info.happiness_value - value1) * 10 - value2) * 10);
+                                       
+                                       if(0 == value3)
+                                       {
+                                               if(0 == value2)
+                                               {
+                                                       sprintf(infotxt, "%d", value1);
+                                                       x_offset = 26;
+                                               }
+                                               else
+                                               {
+                                                       sprintf(infotxt, "%d.%d", value1, value2);
+                                                       x_offset = 12;
+                                               }
+                                       }
+                                       else
+                                       {
+                                               sprintf(infotxt, "%d.%d%d", value1, value2, value3);
+                                               x_offset = 0;
+                                       }                                       
+                               }
+                               else
+                               {
+                       sprintf(infotxt, "--");
+                                       x_offset = 35;
+                               }
+                dial_create_canvas_text(infotxt, label_dsc->label_font, label_dsc->text_color, pos.x + label_dsc->text_pos.x + x_offset, pos.y + label_dsc->text_pos.y);
+                break;
             case LABEL_TYPE_SLEEP_QUALITY:
                 //snprintf(infotxt, len, "%d", health.sleep);
                 //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);
@@ -756,7 +794,8 @@ 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_TEMPERATURE == base->element_type) {
+        || ELEMENT_TYPE_PRESSURE == base->element_type || ELEMENT_TYPE_TEMPERATURE == base->element_type || ELEMENT_TYPE_HAPPINESS == base->element_type)
+    {
         //app_adaptor_get_health_info_req(&health);
                //mmi_health_info_get(&health_info);
     }
index 71c8c23..1a78ac6 100644 (file)
@@ -606,7 +606,7 @@ static void mmi_protocol_location_move_state_set(uint8_t flag)
 
 static void mmi_protocol_location_move_state_check_cb(uint32_t param)
 {
-       PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
        if(0 == mmi_protocol_location_move_state_get())
        {