Z5_HA_K18 新需求修改 __MMI_Z5_HA_K18_REMIND__
author@CHENG <2393524978@qq.com>
Thu, 3 Apr 2025 10:35:25 +0000 (18:35 +0800)
committer@CHENG <2393524978@qq.com>
Thu, 3 Apr 2025 10:35:25 +0000 (18:35 +0800)
24 files changed:
2.sdk/project/Z5_HA_K18/gui/lv_watch/resource/audio/AUDIO_REMIND_CLOCK_IN.mp3 [new file with mode: 0644]
2.sdk/project/Z5_HA_K18/gui/lv_watch/resource/audio/AUDIO_REMIND_WAKE_UP.mp3 [new file with mode: 0644]
2.sdk/project/Z5_HA_K18/product/craneg_modem/config/watch/lv_watch_conf_CUSTOM.h
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/framework/message/mmi_msg_zhsx.h
2.sdk/sdk/gui/lv_watch/framework/message/watch_msg_handle.c
2.sdk/sdk/gui/lv_watch/framework/message/watch_msg_handle.h
2.sdk/sdk/gui/lv_watch/framework/nvm/ui_nvm.h
2.sdk/sdk/gui/lv_watch/framework/nvm/ui_nvm_api.c
2.sdk/sdk/gui/lv_watch/include/ui_activity_id.h
2.sdk/sdk/gui/lv_watch/include/ui_nvm_interface.h
2.sdk/sdk/gui/lv_watch/include/ui_textid.h
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/custom_function.c
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/custom_function.h
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/k18_remind.c [new file with mode: 0644]
2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/k18_remind.h [new file with mode: 0644]
2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.c
2.sdk/sdk/gui/lv_watch/lv_apps/mmi_remind/mmi_remind.c
2.sdk/sdk/gui/lv_watch/lv_apps/mmi_remind/mmi_remind.h
2.sdk/sdk/gui/lv_watch/lv_watch_res.h
2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_api.c
2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd.c

diff --git a/2.sdk/project/Z5_HA_K18/gui/lv_watch/resource/audio/AUDIO_REMIND_CLOCK_IN.mp3 b/2.sdk/project/Z5_HA_K18/gui/lv_watch/resource/audio/AUDIO_REMIND_CLOCK_IN.mp3
new file mode 100644 (file)
index 0000000..eb1b956
Binary files /dev/null and b/2.sdk/project/Z5_HA_K18/gui/lv_watch/resource/audio/AUDIO_REMIND_CLOCK_IN.mp3 differ
diff --git a/2.sdk/project/Z5_HA_K18/gui/lv_watch/resource/audio/AUDIO_REMIND_WAKE_UP.mp3 b/2.sdk/project/Z5_HA_K18/gui/lv_watch/resource/audio/AUDIO_REMIND_WAKE_UP.mp3
new file mode 100644 (file)
index 0000000..94d2c4d
Binary files /dev/null and b/2.sdk/project/Z5_HA_K18/gui/lv_watch/resource/audio/AUDIO_REMIND_WAKE_UP.mp3 differ
index f12aadd..cc69c9d 100644 (file)
@@ -903,6 +903,7 @@ const void * lang_text_ch[] = {
     "该回家了", // WATCH_TEXT_ID_HOME_PROMPT,
     "该吃药了", // WATCH_TEXT_ID_MEDICINE_PROMPT,
     "该喝水了", // WATCH_TEXT_ID_DRINK_PROMPT,
+    "该打卡了", // WATCH_TEXT_ID_CLOCK_IN_PROMPT,
     "上传照片?", // WATCH_TEXT_ID_UPLOAD_PHOTO_Q,
     "发送", // WATCH_TEXT_ID_COMMON_SEND,
     "发送中", // WATCH_TEXT_ID_COMMON_SENDING,
index 35bc04b..1ce6b6f 100644 (file)
@@ -904,6 +904,7 @@ const void * lang_text_en[] = {
     "time to go home", // WATCH_TEXT_ID_HOME_PROMPT,
     "time to take medicine", // WATCH_TEXT_ID_MEDICINE_PROMPT,
     "time to drink", // WATCH_TEXT_ID_DRINK_PROMPT,
+    "time to clock in", // WATCH_TEXT_ID_CLOCK_IN_PROMPT,
     "Upload photo?", // WATCH_TEXT_ID_UPLOAD_PHOTO_Q,
     "Send", // WATCH_TEXT_ID_COMMON_SEND,
     "Sending", // WATCH_TEXT_ID_COMMON_SENDING,
index 274ca1d..de57048 100644 (file)
@@ -227,6 +227,27 @@ void mmi_ui_msg_action_k18_nfc_experience(void)
 }
 #endif
 
+#ifdef __MMI_Z5_HA_K18_REMIND__
+void mmi_ui_msg_action_k18_wake_now(void)
+{
+       mmi_ui_msg_action_no_para_msg(MMI_MSG_K18_WAKE_NOW);
+}
+
+void mmi_ui_msg_action_k18_wake_timing(void)
+{
+       mmi_ui_msg_action_no_para_msg(MMI_MSG_K18_WAKE_TIMING);
+}
+
+void mmi_ui_msg_action_k18_clock_in(void)
+{
+       mmi_ui_msg_action_no_para_msg(MMI_MSG_K18_CLOCK_IN);
+}
+
+void mmi_ui_msg_action_k18_warning(void)
+{
+       mmi_ui_msg_action_no_para_msg(MMI_MSG_K18_WARNING);
+}
+#endif
 
 
 
index 2550a55..96a6d88 100644 (file)
@@ -91,6 +91,12 @@ void mmi_ui_msg_action_hengai_bp_measure_result(bool state, uint16_t bp_value_hi
 #ifdef MMI_PROJECT_Z5_HA_K18_NFC
 void mmi_ui_msg_action_k18_nfc_experience(void);
 #endif
+#ifdef __MMI_Z5_HA_K18_REMIND__
+void mmi_ui_msg_action_k18_wake_now(void);
+void mmi_ui_msg_action_k18_wake_timing(void);
+void mmi_ui_msg_action_k18_clock_in(void);
+void mmi_ui_msg_action_k18_warning(void);
+#endif
 
 void mmi_ui_falldown(void);
 
index 44739f3..b2fb1f5 100644 (file)
@@ -473,6 +473,24 @@ void watch_ui_message_handle(uint16_t msgid, void * msg)
                        break;
        #endif
 
+       #ifdef __MMI_Z5_HA_K18_REMIND__
+               case MMI_MSG_K18_WAKE_NOW:
+                       mmi_ui_msg_update_k18_wake_now();
+                       break;
+                       
+               case MMI_MSG_K18_WAKE_TIMING:
+                       mmi_ui_msg_update_k18_wake_timing();
+                       break;
+
+               case MMI_MSG_K18_CLOCK_IN:
+                       mmi_ui_msg_update_k18_clock_in();
+                       break;
+                       
+               case MMI_MSG_K18_WARNING:
+                       mmi_ui_msg_update_k18_warning();
+                       break;
+       #endif  
+
                        
        #endif
        
index b0d6168..5bdde89 100644 (file)
@@ -140,7 +140,12 @@ enum
 #ifdef MMI_PROJECT_Z5_HA_K18_NFC
        MMI_MSG_K18_NFC_EXPERIENCE,
 #endif
-       
+#ifdef __MMI_Z5_HA_K18_REMIND__
+       MMI_MSG_K18_WAKE_NOW,
+       MMI_MSG_K18_WAKE_TIMING,
+       MMI_MSG_K18_CLOCK_IN,
+       MMI_MSG_K18_WARNING,
+#endif 
        
 #endif
 
index 6690772..b9be263 100644 (file)
@@ -100,6 +100,9 @@ extern "C" {
 #ifdef __MMI_CUSTOM_HENGAI_SLEEP_K18__
 #define NV_SECTION_UI_HENGAI_SLEEP_DATA_LEN        (sizeof(nv_watch_hengai_sleep_data_t))
 #endif
+#ifdef __MMI_Z5_HA_K18_REMIND__
+#define NV_SECTION_UI_K18_WAKE_TIMING_LEN          (sizeof(nv_watch_k18_wake_timing_t))
+#endif
 
 
 #endif
@@ -247,6 +250,9 @@ typedef lv_fs_dir_t  ui_dir_t;
 #ifdef __MMI_CUSTOM_HENGAI_SLEEP_K18__
 #define NV_SECTION_UI_HENGAI_SLEEP_DATA_FILE   "ui_hengai_sleep_data.nv"
 #endif
+#ifdef __MMI_Z5_HA_K18_REMIND__
+#define NV_SECTION_UI_K18_WAKE_TIMING_FILE             "ui_k18_wake_timing.nv"
+#endif
 
 
 #endif
index acd1447..7aed6ca 100644 (file)
@@ -164,6 +164,10 @@ uint32_t UI_NV_Get_Section_Len(NV_UI_SECTION_ID SectionId)
                case NV_SECTION_UI_HENGAI_SLEEP_DATA:
                        return (NV_SECTION_LEN(NV_SECTION_UI_HENGAI_SLEEP_DATA));
        #endif
+       #ifdef __MMI_Z5_HA_K18_REMIND__
+               case NV_SECTION_UI_K18_WAKE_TIMING:
+                       return (NV_SECTION_LEN(NV_SECTION_UI_K18_WAKE_TIMING));
+       #endif
 
                        
        #endif
@@ -329,6 +333,10 @@ char * UI_NV_Get_Section_path(NV_UI_SECTION_ID SectionId)
                case NV_SECTION_UI_HENGAI_SLEEP_DATA:
                        return (NV_SECTION_FILE_PATH(NV_SECTION_UI_HENGAI_SLEEP_DATA));
        #endif
+       #ifdef __MMI_Z5_HA_K18_REMIND__
+               case NV_SECTION_UI_K18_WAKE_TIMING:
+                       return (NV_SECTION_FILE_PATH(NV_SECTION_UI_K18_WAKE_TIMING));
+       #endif
 
                        
        #endif
@@ -426,6 +434,9 @@ uint8_t UI_NV_Reset_Default(NV_UI_SECTION_ID SectionId)
 #ifdef __MMI_CUSTOM_HENGAI_SLEEP_K18__
        nv_watch_hengai_sleep_data_t * hengai_sleep_data;
 #endif
+#ifdef __MMI_Z5_HA_K18_REMIND__
+       nv_watch_k18_wake_timing_t * k18_wake_timing_data;
+#endif
 
 #endif
 
@@ -777,6 +788,13 @@ uint8_t UI_NV_Reset_Default(NV_UI_SECTION_ID SectionId)
                        TempData = (char *)hengai_sleep_data;
                        break;
        #endif
+       #ifdef __MMI_Z5_HA_K18_REMIND__
+               case NV_SECTION_UI_K18_WAKE_TIMING:
+                       k18_wake_timing_data = lv_mem_alloc(SectionLen);
+                       memset(k18_wake_timing_data, 0x0, SectionLen);
+                       TempData = (char *)k18_wake_timing_data;
+                       break;
+       #endif
                        
                        
        #endif
index 984fcb7..0babf05 100644 (file)
@@ -251,6 +251,9 @@ enum
 #endif
 #ifdef MMI_PROJECT_Z5_HA_K18_NFC
        ACT_ID_K18_NFC_EXPERIENCE,
+#endif
+#ifdef __MMI_Z5_HA_K18_REMIND__
+       ACT_ID_K18_WARNING,
 #endif
     ACT_ID_WATCH_FALLDWON,
 
index d3cfd1f..ef438b0 100644 (file)
@@ -453,6 +453,15 @@ typedef struct
 } __packed nv_watch_remind_drink_t;
 #endif
 
+#ifdef __MMI_Z5_HA_K18_REMIND__
+typedef struct
+{
+    unsigned char prompt_type; // 0-ring;1-vibrate
+    unsigned int interval; // second
+} __packed nv_watch_k18_wake_timing_t;
+#endif
+
+
 
 typedef struct
 {
@@ -779,6 +788,9 @@ enum
 #ifdef __MMI_CUSTOM_HENGAI_SLEEP_K18__
        NV_SECTION_UI_HENGAI_SLEEP_DATA,                // nv_watch_hengai_sleep_data_t
 #endif
+#ifdef __MMI_Z5_HA_K18_REMIND__
+       NV_SECTION_UI_K18_WAKE_TIMING, // nv_watch_k18_wake_timing_t
+#endif
 
 
 #endif
index 67a306b..f006019 100644 (file)
@@ -910,6 +910,7 @@ enum
     WATCH_TEXT_ID_HOME_PROMPT,                          /* "该回家了"                   "time to go home" */
     WATCH_TEXT_ID_MEDICINE_PROMPT,                      /* "该吃药了"                   "time to take medicine" */
     WATCH_TEXT_ID_DRINK_PROMPT,                         /* "该喝水了"                   "time to drink" */
+    WATCH_TEXT_ID_CLOCK_IN_PROMPT,                      /* "该打卡了"                   "time to clock in" */
     WATCH_TEXT_ID_UPLOAD_PHOTO_Q,                       /* "上传照片?"                   "Upload photo?" */
     WATCH_TEXT_ID_COMMON_SEND,                          /* "发送"                   "Send" */
     WATCH_TEXT_ID_COMMON_SENDING,                       /* "发送中"                    "Sending" */
index ed8a982..3f11767 100644 (file)
@@ -41,6 +41,9 @@
 #ifdef MMI_PROJECT_Z5_HA_K18_NFC
 #include "k18_nfc_experience_ui.c"
 #endif
+#ifdef __MMI_Z5_HA_K18_REMIND__
+#include "k18_remind.c"
+#endif
 
 
 
index ac8e77d..2ae252d 100644 (file)
@@ -53,6 +53,9 @@ extern "C" {
 #ifdef MMI_PROJECT_Z5_HA_K18_NFC
 #include "k18_nfc_experience_ui.h"
 #endif
+#ifdef __MMI_Z5_HA_K18_REMIND__
+#include "k18_remind.h"
+#endif
 
 
 
diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/k18_remind.c b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/k18_remind.c
new file mode 100644 (file)
index 0000000..506a099
--- /dev/null
@@ -0,0 +1,607 @@
+
+
+
+#include "lv_watch.h"
+
+#ifdef __MMI_Z5_HA_K18_REMIND__
+
+
+static void * s_clock_in_timer = NULL;
+
+static bool mmi_k18_wake_permit_check(void)
+{
+    if(true == mmi_active_screen_is_prohibit_interrupted()
+               #ifdef __MMI_ZHSX_SUPPORT_DO_NOT_DISTURB__
+               || true == mmi_watch_is_in_do_not_disturb_time()
+               #endif
+               )
+       {
+               K18_REMIND_LOG("[@CHENG_DEBUG][%s][%d]: not permit\n", __FUNCTION__, __LINE__);
+               return false;
+       }
+#ifdef __MMI_WECHAT_SUPPORT__
+       if(true == wechat_screen_is_prohibit_interrupted())
+       {
+               K18_REMIND_LOG("[@CHENG_DEBUG][%s][%d]: not permit\n", __FUNCTION__, __LINE__);
+               return false;
+       }
+#endif
+
+       if(true == mmi_remind_screen_is_active())
+       {
+               K18_REMIND_LOG("[@CHENG_DEBUG][%s][%d]: not permit\n", __FUNCTION__, __LINE__);
+               return false;
+       }
+
+       return true;    
+}
+
+/*
+{
+"code":"32003" // É豸´ò¿¨»Ø¸´
+"deviceID":"IMEI" // ÊÖ±íÉ豸ID
+}
+*/
+void mmi_k18_clock_in_close(void)
+{
+       int ret = 0;
+       char * data_ptr = NULL;
+       int data_len = 128;
+       int temp_len = 0;
+
+       data_ptr = lv_mem_alloc(data_len);
+       if(NULL == data_ptr)
+       {
+               K18_REMIND_LOG("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__);
+               ret = -1;
+               goto EXIT_FUNC;
+       }
+       _lv_memset_00(data_ptr, data_len);
+
+       temp_len = 0;
+       temp_len += sprintf(data_ptr + temp_len, "{\"code\":\"32003\",");
+
+       char imei[16 + 1] = {0};
+       app_adp_get_imei_req(imei);
+       temp_len += sprintf(data_ptr + temp_len, "\"deviceID\":\"%s\"}", imei);
+
+       mmi_protocol_fzd_action_common_msg_up(data_ptr, temp_len);
+       
+EXIT_FUNC:
+       if(NULL != data_ptr)
+       {
+               lv_mem_free(data_ptr);
+               data_ptr = NULL;
+       }
+
+       return ret;
+}
+
+void mmi_ui_msg_update_k18_clock_in(void)
+{
+       mmi_remind_clock_in_screen_active();
+}
+
+static void mmi_k18_wake_clock_in_timer_callback(uint32_t param)
+{
+       if(false == mmi_k18_wake_permit_check())
+       {
+               K18_REMIND_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return ;
+       }
+
+       // ui
+    mmi_watch_wake_up();
+       mmi_ui_msg_action_k18_clock_in();
+}
+
+static void mmi_k18_wake_clock_in_timer_start(unsigned int ms_interval)
+{
+       if(NULL != s_clock_in_timer)
+       {
+               uos_timer_stop(s_clock_in_timer);
+       }
+       else
+       {
+               uos_timer_create(&s_clock_in_timer);
+       }
+       uos_timer_start(s_clock_in_timer, 
+                                               MS_TO_TICKS(ms_interval), 
+                                               0, 
+                                               mmi_k18_wake_clock_in_timer_callback, 
+                                               NULL);
+}
+
+/*
+{
+"code":"32001" // ÊµÊ±»½Ðѻظ´
+"deviceID":"IMEI" // ÊÖ±íÉ豸ID
+}
+*/
+static int mmi_k18_wake_reply_server(void)
+{
+       int ret = 0;
+       char * data_ptr = NULL;
+       int data_len = 128;
+       int temp_len = 0;
+
+       data_ptr = lv_mem_alloc(data_len);
+       if(NULL == data_ptr)
+       {
+               K18_REMIND_LOG("[@CHENG_DEBUG][%s][%d]: memory alloc failed\n", __FUNCTION__, __LINE__);
+               ret = -1;
+               goto EXIT_FUNC;
+       }
+       _lv_memset_00(data_ptr, data_len);
+
+       temp_len = 0;
+       temp_len += sprintf(data_ptr + temp_len, "{\"code\":\"32001\",");
+
+       char imei[16 + 1] = {0};
+       app_adp_get_imei_req(imei);
+       temp_len += sprintf(data_ptr + temp_len, "\"deviceID\":\"%s\"}", imei);
+
+       mmi_protocol_fzd_action_common_msg_up(data_ptr, temp_len);
+       
+EXIT_FUNC:
+       if(NULL != data_ptr)
+       {
+               lv_mem_free(data_ptr);
+               data_ptr = NULL;
+       }
+
+       return ret;
+}
+
+
+static int s_wake_now_type = 0;
+static int s_wake_now_interval = 0;
+int mmi_k18_wake_now_info_type_get(void)
+{
+       return s_wake_now_type;
+}
+
+int mmi_k18_wake_now_info_interval_get(void)
+{
+       return s_wake_now_interval;
+}
+
+/*
+{
+"code":"31001" // ÊµÊ±»½ÐÑ
+"type":0, // 0-ÏìÁåÌáʾ£»1-Õð¶¯Ìáʾ
+"duration":600, // ¾­¹ý¸Ãʱ¼äºó£¬ÌáÐÑ´ò¿¨£¬µ¥Î» Ãë
+}
+*/
+void mmi_k18_wake_now_info_set(cJSON * root_json)
+{
+       K18_REMIND_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               
+       if(false == mmi_k18_wake_permit_check())
+       {
+               K18_REMIND_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return ;
+       }
+
+       // data
+       s_wake_now_type = cJSON_GetIntValue(cJSON_GetObjectItem(root_json, "type")); // 0-ring;1-vibrate
+       s_wake_now_interval = cJSON_GetIntValue(cJSON_GetObjectItem(root_json, "duration")); // second
+
+       // ui
+    mmi_watch_wake_up();
+       mmi_ui_msg_action_k18_wake_now();       
+}
+
+void mmi_k18_wake_now_close(unsigned char is_active)
+{
+       if(is_active)
+       {
+               mmi_k18_wake_reply_server();
+       }
+
+       // timer to create clock in screen
+       unsigned int ms_interval = mmi_k18_wake_now_info_interval_get() * 1000;
+       mmi_k18_wake_clock_in_timer_start(ms_interval);
+}
+
+void mmi_ui_msg_update_k18_wake_now(void)
+{
+       mmi_remind_wake_now_screen_active();
+}
+
+
+static nv_watch_k18_wake_timing_t s_k18_wake_timing_info = {0};
+int mmi_k18_wake_timing_info_type_get(void)
+{
+       return s_k18_wake_timing_info.prompt_type;
+}
+
+int mmi_k18_wake_timing_info_interval_get(void)
+{
+       return s_k18_wake_timing_info.interval;
+}
+
+static void mmi_k18_wake_timing_type_interval_nv_write(void)
+{
+       uint32_t nv_data_length = sizeof(nv_watch_k18_wake_timing_t);
+       
+       if(nv_data_length != UI_NV_Write_Req(NV_SECTION_UI_K18_WAKE_TIMING, 0, nv_data_length, (uint8_t *)&s_k18_wake_timing_info))
+       {
+               K18_REMIND_LOG("[@CHENG_DEBUG][%s][%d]: nv write fail\n", __FUNCTION__, __LINE__);
+       }
+}
+
+void mmi_k18_wake_timing_type_interval_nv_read(void)
+{
+       uint32_t nv_data_length = sizeof(nv_watch_k18_wake_timing_t);
+       
+       if(nv_data_length != UI_NV_Read_Req(NV_SECTION_UI_K18_WAKE_TIMING, 0, nv_data_length, (uint8_t *)&s_k18_wake_timing_info))
+       {
+               K18_REMIND_LOG("[@CHENG_DEBUG][%s][%d]: nv read fail\n", __FUNCTION__, __LINE__);
+       }
+}
+
+static void mmi_k18_wake_timing_info_detail(nv_watch_remind_item_t *data, char * alarm_str, unsigned char index)
+{
+       char * temp_ptr = NULL;
+
+       temp_ptr = km_strtok_r(NULL, ":", &alarm_str);
+       data->remind_info[index].hour = atoi(temp_ptr);
+       
+       temp_ptr = km_strtok_r(NULL, "-", &alarm_str);
+       data->remind_info[index].min = atoi(temp_ptr);
+
+       temp_ptr = km_strtok_r(NULL, "-", &alarm_str);
+       data->remind_info[index].is_valid = atoi(temp_ptr);
+       
+       temp_ptr = km_strtok_r(NULL, "-", &alarm_str);
+       if(1 == atoi(temp_ptr))
+       {
+               data->remind_info[index].repeat_bitmap = 0;
+       }
+       else if(2 == atoi(temp_ptr))
+       {
+               data->remind_info[index].repeat_bitmap = 0xff;
+       }
+       else
+       {
+               data->remind_info[index].repeat_bitmap = 0x80;
+               if(NULL != alarm_str)
+               {
+                       uint8_t j = 0;
+                       for(j = 0; j < 7; j++)
+                       {
+                               data->remind_info[index].repeat_bitmap |= ((('0' == *(alarm_str + j)) ? 0 : 1) << j);
+                       }
+               }
+       }
+}
+
+/*
+{
+"code":"31002" // »½ÐÑ
+"type":0, // 0-ÏìÁåÌáʾ£»1-Õð¶¯Ìáʾ
+"duration":600, // ¾­¹ý¸Ãʱ¼äºó£¬ÌáÐÑ´ò¿¨£¬µ¥Î» Ãë
+"alarm1":"08:10-1-1",
+"alarm2":"08:10-1-2",
+"alarm2":"08:10-1-3-0111110"
+}
+08:10-1-1£ºÄÖÖÓʱ¼ä 8:10£¬´ò¿ª£¬ÏìÁåÒ»´Î
+08:10-1-2£ºÄÖÖÓʱ¼ä 8:10£¬´ò¿ª£¬Ã¿ÌìÏìÁå
+08:10-1-3-0111110£ºÄÖÖÓʱ¼ä 8:10£¬´ò¿ª£¬×Ô¶¨ÒåÖÜÒ»ÖÁÖÜÎå´ò¿ª
+×î×ó±ßÊÇÖÜÈÕ£¬×îÓÒ±ßÊÇÖÜÁù£¬¼´ 0111110 µÄ˳ÐòÊÇ£ºÖÜÈÕ£¬ÖÜÒ»£¬Öܶþ£¬ÖÜÈý£¬ÖÜËÄ£¬ÖÜÎ壬ÖÜ
+Áù£¨1 Îª´ò¿ª£¬0 Îª¹Ø±Õ£©£¬ÆäÖÐÖÜÒ»ÖÁÖÜÎå´ò¿ªÄÖÖÓ
+*/
+void mmi_k18_wake_timing_info_set(cJSON * root_json)
+{
+       K18_REMIND_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       
+       s_k18_wake_timing_info.prompt_type = cJSON_GetIntValue(cJSON_GetObjectItem(root_json, "type")); // 0-ring;1-vibrate
+       s_k18_wake_timing_info.interval = cJSON_GetIntValue(cJSON_GetObjectItem(root_json, "duration")); // second
+       mmi_k18_wake_timing_type_interval_nv_write();
+
+       nv_watch_remind_item_t data = {0};
+       unsigned char i = 0;
+
+       char * alarm1_str = cJSON_GetStringValue(cJSON_GetObjectItem(root_json, "alarm1"));
+       if(NULL != alarm1_str)
+       {
+               mmi_k18_wake_timing_info_detail(&data, alarm1_str, i);
+               i++;
+       }
+
+       char * alarm2_str = cJSON_GetStringValue(cJSON_GetObjectItem(root_json, "alarm2"));
+       if(NULL != alarm2_str)
+       {
+               mmi_k18_wake_timing_info_detail(&data, alarm2_str, i);
+               i++;
+       }
+
+       char * alarm3_str = cJSON_GetStringValue(cJSON_GetObjectItem(root_json, "alarm3"));
+       if(NULL != alarm3_str)
+       {
+               mmi_k18_wake_timing_info_detail(&data, alarm3_str, i);
+               i++;
+       }
+       
+       mmi_remind_wake_up_data_set(&data);
+}
+
+void mmi_k18_wake_timing_close(unsigned char is_active)
+{
+       if(is_active)
+       {
+               mmi_k18_wake_reply_server();
+       }
+
+       // timer to create clock in screen
+       unsigned int ms_interval = mmi_k18_wake_timing_info_interval_get() * 1000;
+       mmi_k18_wake_clock_in_timer_start(ms_interval);
+}
+
+void mmi_ui_msg_update_k18_wake_timing(void)
+{
+       mmi_remind_wake_up_screen_active(); 
+}
+
+
+static mmi_k18_warning_info_s s_k18_warning_info = {0};
+static bool s_is_ACT_ID_K18_WARNING = false;
+static lv_remind_obj_ext_t * mmi_k18_warning_screen_ext_get(void)
+{
+       lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_K18_WARNING);
+       if(NULL == activity_obj) 
+               return NULL;
+       
+       lv_obj_t * watch_obj = NULL;
+       lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
+       if(NULL != watch_obj) 
+       {
+               void * ext = lv_obj_get_ext_attr(watch_obj);
+               return ext;
+       }
+
+       return NULL;
+}
+
+static void mmi_k18_warning_screen_prepare_destory(lv_obj_t * activity_obj)
+{
+    lv_watch_png_cache_all_free();
+
+       Hal_Vibrator_Play_End();
+
+    Hal_Tone_Play_End();
+    Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_REMIND);
+
+       printf("[@CHENG_DEBUG][%s][%d]: 0x%x\n", __FUNCTION__, __LINE__, s_k18_warning_info.prompt_str);
+       if(NULL != s_k18_warning_info.prompt_str)
+       {
+               lv_mem_free(s_k18_warning_info.prompt_str);
+               s_k18_warning_info.prompt_str = NULL;
+       }
+
+       lv_k18_warning_obj_ext_t * ext = mmi_k18_warning_screen_ext_get();
+    if(ext)
+       {
+        if(NULL != ext->timer_id)
+               {
+            Hal_Timer_Stop(ext->timer_id);
+                       ext->timer_id = NULL;
+        }
+    }
+
+       s_is_ACT_ID_K18_WARNING = false;
+    watch_set_suspend_enable(true, ACT_ID_K18_WARNING, 0);
+}
+
+void mmi_k18_warning_screen_clean(void)
+{      
+    lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_K18_WARNING);
+    if(NULL != activity_obj)
+       {
+               printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               mmi_k18_warning_screen_prepare_destory(NULL);
+        lv_obj_del(activity_obj);
+    }
+}
+
+void mmi_k18_warning_btn_event_cb(lv_obj_t * obj, lv_event_t e)
+{
+       if(LV_EVENT_CLICKED == e)
+       {
+               mmi_k18_warning_screen_clean();
+       }
+}
+
+static void mmi_k18_warning_screen_timeout(void * para)
+{
+       mmi_k18_warning_screen_clean();
+}
+
+static lv_obj_t * mmi_k18_warning_screen_create(lv_obj_t * activity_obj)
+{
+       printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       if(NULL == activity_obj)
+       {
+               lv_watch_activity_ext_t activity_ext = {0};
+
+               activity_ext.actId = ACT_ID_K18_WARNING;
+               activity_ext.create = mmi_k18_warning_screen_create;
+               activity_ext.prepare_destory = mmi_k18_warning_screen_prepare_destory;
+               activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+               if(NULL == activity_obj)
+                       return NULL;
+       }
+
+       /* watch obj */
+       lv_obj_t * obj = lv_watch_obj_create(activity_obj);
+       lv_watch_obj_set_anim_mode(obj, LV_WATCH_ANIM_HOR_RIGHT_HIDE);
+       lv_k18_warning_obj_ext_t * ext = (lv_k18_warning_obj_ext_t *)lv_obj_allocate_ext_attr(obj, sizeof(lv_k18_warning_obj_ext_t));
+
+       lv_obj_t * cont = lv_cont_create(obj, NULL);
+       lv_obj_set_size(cont, LV_HOR_RES, LV_VER_RES);
+       lv_obj_set_style_local_bg_color(cont, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+       //lv_obj_set_style_local_bg_color(cont, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+       lv_obj_set_click(cont, false);
+
+       hal_rtc_t cur_time;
+       char time_str[8] = {0};
+       
+       Hal_Rtc_Gettime(&cur_time);
+       sprintf(time_str, "%02d:%02d", cur_time.tm_hour, cur_time.tm_min);
+       
+#ifdef USE_LV_WATCH_UI_466_466
+       lv_obj_t * label_time = lv_label_create(cont, NULL);
+       lv_obj_add_style(label_time, LV_LABEL_PART_MAIN, &lv_watch_font40);
+       lv_label_set_text(label_time, time_str);
+       lv_label_set_align(label_time, LV_LABEL_ALIGN_CENTER);
+       lv_obj_align(label_time, NULL, LV_ALIGN_IN_TOP_MID, 0, LV_VER_RES / 5);
+
+       lv_obj_t * label_prompt = lv_label_create(cont, NULL);
+       lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font40);
+       lv_label_set_align(label_prompt, LV_LABEL_ALIGN_CENTER);
+       lv_label_set_long_mode(label_prompt, LV_LABEL_LONG_BREAK);
+       lv_obj_set_width(label_prompt, lv_obj_get_width(obj) - 20);
+       lv_label_set_text(label_prompt, s_k18_warning_info.prompt_str);
+       lv_obj_align(label_prompt, NULL, LV_ALIGN_CENTER, 0, -10);
+#else
+       lv_obj_t * label_time = lv_label_create(cont, NULL);
+       lv_obj_add_style(label_time, LV_LABEL_PART_MAIN, &lv_watch_font26);
+       lv_label_set_text(label_time, time_str);
+       lv_label_set_align(label_time, LV_LABEL_ALIGN_CENTER);
+       lv_obj_align(label_time, NULL, LV_ALIGN_IN_TOP_MID, 0, 50);
+
+       lv_obj_t * label_prompt = lv_label_create(cont, NULL);
+       lv_obj_add_style(label_prompt, LV_LABEL_PART_MAIN, &lv_watch_font26);
+       lv_label_set_align(label_prompt, LV_LABEL_ALIGN_CENTER);
+       lv_label_set_long_mode(label_prompt, LV_LABEL_LONG_BREAK);
+       lv_obj_set_width(label_prompt, lv_obj_get_width(obj) - 20);
+       lv_label_set_text(label_prompt, s_k18_warning_info.prompt_str);
+       lv_obj_align(label_prompt, label_time, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+#endif
+
+       lv_obj_t * btn = lv_btn_create(cont, NULL);
+#ifdef USE_LV_WATCH_UI_466_466
+       lv_obj_set_size(btn, 140, 70);
+#else
+       lv_obj_set_size(btn, 100, 56);
+#endif
+       lv_obj_set_style_local_bg_color(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(0x47, 0xA6, 0xFF));
+       lv_obj_set_style_local_radius(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 30);
+       lv_obj_set_style_local_bg_color(btn, LV_BTN_PART_MAIN, LV_STATE_PRESSED, lv_color_make(0x47, 0xA6, 0xFF));
+       lv_obj_set_style_local_radius(btn, LV_BTN_PART_MAIN, LV_STATE_PRESSED, 30);
+#ifdef USE_LV_WATCH_UI_466_466
+       lv_obj_align(btn, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -60);
+#else
+       lv_obj_align(btn, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -20);
+#endif
+       lv_obj_set_event_cb(btn, mmi_k18_warning_btn_event_cb);
+
+       lv_obj_t * label = lv_label_create(btn, NULL);
+#ifdef USE_LV_WATCH_UI_466_466
+       lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font40);
+#else
+       lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font26);
+#endif
+       lv_label_set_text_id(label, WATCH_TEXT_ID_OK);
+       
+       ext->timer_id = Hal_Timer_Start(1000 * 30, mmi_k18_warning_screen_timeout, NULL, false);
+
+       s_is_ACT_ID_K18_WARNING = true;
+       watch_set_suspend_enable(false, ACT_ID_K18_WARNING, 0);
+
+       return obj;
+}
+
+void mmi_k18_warning_audio_ctrl_callback(AUDIO_CTRL_PRIORITY priority)
+{
+       printf("[@CHENG_DEBUG][%s][%d]: priority=%d\n", __FUNCTION__, __LINE__, priority);
+
+    if(AUDIO_CTRL_PRIORITY_REMIND == priority)
+    {
+               //
+    }
+    else if(AUDIO_CTRL_PRIORITY_REMIND > priority)
+    {
+        mmi_k18_warning_screen_clean();
+    }
+}
+
+void mmi_ui_msg_update_k18_warning(void)
+{
+       printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       
+    if(AUDIO_CTRL_PRIORITY_REMIND == Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_REMIND, mmi_k18_warning_audio_ctrl_callback))
+    {
+               if(MMI_K18_WARNING_TYPE_SLEEP == s_k18_warning_info.type)
+               {
+                       uint8_t volume = 0;
+               #ifdef __MMI_USER_PROFILE_SUPPORT__
+                       volume = mmi_user_profile_current_mode_remind_volume_get();
+               #else
+               volume = query_current_volume();
+               #endif
+                       Hal_NFFS_File_Play_Repeat(AUDIO_REMIND_SLEEP, volume);
+               }
+               else
+               {
+                       if(true == mmi_watch_vibrate_is_permitted())
+                               Hal_Vibrator_Play_Repeat();
+               }
+               
+               mmi_k18_warning_screen_create(NULL);
+    }
+}
+
+/*
+{
+"code":"31004" // É豸Ԥ¾¯ÍÆËÍ
+"type":1, // ÀàÐÍ£¬ÐÄÂÊ£¨1£©£¬ÑªÑõ£¨2£©£¬ÌåΣ¨4£©£¬Ë¯Ãߣ¨8£©
+"status":1, // ×´Ì¬£¬0(Õý³£), 1(Æ«µÍ), 2(Æ«¸ß), 3(½ÏµÍ), 4(½Ï¸ß)£¬5(¹ýµÍ)£¬6(¹ý¸ß)£¬Ô¤Áô×Ö¶Î
+"description": "ÌáÐÑÎÄ×Ö£¬Ê¹Óàunicode ±àÂëµÄ×Ö·û´®±íʾ"
+}
+*/
+void mmi_k18_warning_info_set(cJSON * root_json)
+{
+       if(false == mmi_k18_wake_permit_check())
+       {
+               K18_REMIND_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return ;
+       }
+       if(true == s_is_ACT_ID_K18_WARNING)
+       {
+               K18_REMIND_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return ;
+       }
+
+       // data
+       s_k18_warning_info.type = cJSON_GetIntValue(cJSON_GetObjectItem(root_json, "type"));
+       s_k18_warning_info.state = cJSON_GetIntValue(cJSON_GetObjectItem(root_json, "status"));
+       char * unicode_description = cJSON_GetStringValue(cJSON_GetObjectItem(root_json, "description"));
+       unsigned int unicode_length = strlen(unicode_description);
+       unsigned int memory_size = unicode_length / 4 * 3 + 1;
+       unsigned int output_len = 0;
+       
+       if(NULL != s_k18_warning_info.prompt_str)
+       {
+               lv_mem_free(s_k18_warning_info.prompt_str);
+               s_k18_warning_info.prompt_str = NULL;
+       }       
+       s_k18_warning_info.prompt_str = lv_mem_alloc(memory_size);
+       if(NULL == s_k18_warning_info.prompt_str)
+       {
+               K18_REMIND_LOG("[@CHENG_DEBUG][%s][%d]: memory alloc error\n", __FUNCTION__, __LINE__);
+               return ;
+       }
+       _lv_memset_00(s_k18_warning_info.prompt_str, memory_size);
+       mmi_unicode_hex_str_to_utf8_str(unicode_description, unicode_length, s_k18_warning_info.prompt_str, &output_len);
+
+       //printf("[@CHENG_DEBUG][%s][%d]: unicode_length=%d,memory_size=%d,output_len=%d\n", __FUNCTION__, __LINE__, unicode_length, memory_size, output_len);
+
+       // ui
+       mmi_watch_wake_up();
+       mmi_ui_msg_action_k18_warning();
+}
+
+#endif
+
diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/k18_remind.h b/2.sdk/sdk/gui/lv_watch/lv_apps/custom_function/k18_remind.h
new file mode 100644 (file)
index 0000000..87d5386
--- /dev/null
@@ -0,0 +1,105 @@
+
+
+
+#ifndef __K18_REMIND_H__
+#define __K18_REMIND_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef LV_CONF_INCLUDE_SIMPLE
+#include "lvgl.h"
+#include "lv_ex_conf.h"
+#else
+#include "../../../lvgl/lvgl.h"
+#include "../../../lv_ex_conf.h"
+#endif
+
+#ifdef __MMI_Z5_HA_K18_REMIND__
+
+#include "hal/dm/cJSON.h"
+
+
+#define __K18_REMIND_DEBUG__
+#ifdef __K18_REMIND_DEBUG__
+#define K18_REMIND_LOG(fmt, ...)       printf("[K18_REMIND]"fmt, ##__VA_ARGS__)
+#else
+#define K18_REMIND_LOG(fmt, ...)
+#endif
+
+
+void mmi_k18_clock_in_close(void);
+void mmi_ui_msg_update_k18_clock_in(void);
+
+int mmi_k18_wake_now_info_type_get(void);
+void mmi_k18_wake_now_info_set(cJSON * root_json);
+void mmi_k18_wake_now_close(unsigned char is_active);
+void mmi_ui_msg_update_k18_wake_now(void);
+
+int mmi_k18_wake_timing_info_type_get(void);
+void mmi_k18_wake_timing_type_interval_nv_read(void);
+void mmi_k18_wake_timing_info_set(cJSON * root_json);
+void mmi_k18_wake_timing_close(unsigned char is_active);
+void mmi_ui_msg_update_k18_wake_timing(void);
+
+
+
+typedef enum
+{
+       MMI_K18_WARNING_TYPE_NONE,
+               
+       MMI_K18_WARNING_TYPE_HEART_RATE = 1,
+       MMI_K18_WARNING_TYPE_SPO2 = 2,
+       MMI_K18_WARNING_TYPE_3,
+       MMI_K18_WARNING_TYPE_TEMPERATURE = 4,
+       MMI_K18_WARNING_TYPE_5,
+       MMI_K18_WARNING_TYPE_6,
+       MMI_K18_WARNING_TYPE_7,
+       MMI_K18_WARNING_TYPE_SLEEP = 8,
+
+       MMI_K18_WARNING_TYPE_MAX
+} MMI_K18_WARNING_TYPE_E;
+
+typedef enum
+{
+       MMI_K18_WARNING_STATE_NONE,
+
+       MMI_K18_WARNING_STATE_NORMAL = MMI_K18_WARNING_STATE_NONE,
+       MMI_K18_WARNING_STATE_LOW,
+       MMI_K18_WARNING_STATE_HIGH,
+       MMI_K18_WARNING_STATE_LOWER,
+       MMI_K18_WARNING_STATE_HIGHER,
+       MMI_K18_WARNING_STATE_LOWEST,
+       MMI_K18_WARNING_STATE_HIGHEST,
+
+       MMI_K18_WARNING_STATE_MAX
+} MMI_K18_WARNING_STATE_E;
+
+typedef struct
+{
+       MMI_K18_WARNING_TYPE_E type;
+       MMI_K18_WARNING_STATE_E state;
+       void * prompt_str;
+} mmi_k18_warning_info_s;
+
+typedef struct 
+{
+    lv_watch_obj_ext_t lv_watch_obj;
+    /*New data for this type */
+    TIMER_ID timer_id;
+} lv_k18_warning_obj_ext_t;
+
+
+void mmi_ui_msg_update_k18_warning(void);
+void mmi_k18_warning_info_set(cJSON * root_json);
+
+
+#endif
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
+
index 0e3ac62..ddcadf6 100644 (file)
@@ -944,7 +944,17 @@ static void mmi_health_measure_process_timer_handle(uint32_t para)
                                break;
 
                        case MMI_HEALTH_MEASURE_BLOOD:
+                               #ifdef USE_HEART_RATE_MEASURE_TO_CHECK_WEAR_STATUS
+                               if(MMI_HR_MEASURE_CHECK_COUNT == s_measure_time_count)
+                               {
+                                       mmi_hsensor_close();
+
+                                       mmi_hengai_bp_back_measure_action();
+                                       mmi_hsensor_blood_open();
+                               }
+                               #else
                                mmi_health_measure_task_msg_send(MMI_HEALTH_MEASURE_MSG_BLOOD_PROCESS, NULL);
+                               #endif
                                break;
 
                        case MMI_HEALTH_MEASURE_SPO2:
@@ -1023,11 +1033,17 @@ static void mmi_health_measure_start(MMI_HEALTH_MEASURE_TYPE_E measure_type, uin
                                break;
 
                        case MMI_HEALTH_MEASURE_BLOOD:
+                               #ifdef USE_HEART_RATE_MEASURE_TO_CHECK_WEAR_STATUS
+                               s_measure_time_total = (MMI_BP_MEASURE_TOTAL_COUNT * 1000) / MMI_HEALTH_MEASURE_CYCLE_DURATION;
+                               mmi_hsensor_heart_open();
+                               
+                               #else                           
                                s_measure_time_total = MMI_HEALTH_MEASURE_BLOOD_DURATION / MMI_HEALTH_MEASURE_CYCLE_DURATION;
                                mmi_hsensor_blood_open();
                                #ifdef __MMI_CUSTOM_HENGAI_HEALTH__
                                mmi_hengai_bp_back_measure_action();
                                #endif
+                               #endif
                                break;
                                
                        case MMI_HEALTH_MEASURE_SPO2:
index d5951d5..82e6778 100644 (file)
@@ -13,6 +13,10 @@ static mmi_remind_screen_info_t s_remind_info[] =
 {
 #ifdef __MMI_REMIND_WAKE_UP_SUPPORT__
        { MMI_REMIND_TYPE_WAKE_UP, WATCH_TEXT_ID_WAKE_UP_PROMPT, AUDIO_REMIND_WAKE_UP, NULL},
+       { MMI_REMIND_TYPE_WAKE_NOW, WATCH_TEXT_ID_WAKE_UP_PROMPT, AUDIO_REMIND_WAKE_UP, NULL},
+#endif
+#ifdef __MMI_Z5_HA_K18_REMIND__
+       { MMI_REMIND_TYPE_CLOCK_IN, WATCH_TEXT_ID_CLOCK_IN_PROMPT, AUDIO_REMIND_CLOCK_IN, NULL},
 #endif
 #ifdef __MMI_REMIND_SLEEP_SUPPORT__
        { MMI_REMIND_TYPE_SLEEP, WATCH_TEXT_ID_SLEEP_PROMPT, AUDIO_REMIND_SLEEP, NULL},
@@ -123,8 +127,24 @@ void mmi_remind_wake_up_screen_active(void)
        s_remind_type = MMI_REMIND_TYPE_WAKE_UP;
        mmi_remind_screen_active();
 }
+
+void mmi_remind_wake_now_screen_active(void)
+{
+       s_remind_type = MMI_REMIND_TYPE_WAKE_NOW;
+       mmi_remind_screen_active();
+}
 #endif
 
+
+#ifdef __MMI_Z5_HA_K18_REMIND__
+void mmi_remind_clock_in_screen_active(void)
+{
+       s_remind_type = MMI_REMIND_TYPE_CLOCK_IN;
+       mmi_remind_screen_active();
+}
+#endif
+
+
 #ifdef __MMI_REMIND_SLEEP_SUPPORT__
 static nv_watch_remind_item_t s_remind_sleep_data = {0};
 
@@ -667,12 +687,37 @@ void mmi_remind_btn_event_cb(lv_obj_t * obj, lv_event_t e)
        #ifdef __MMI_CUSTOM_HENG_AI__
                mmi_heng_ai_camera_open();
        #endif
+
+       #ifdef __MMI_Z5_HA_K18_REMIND__
+               if(MMI_REMIND_TYPE_WAKE_NOW == s_remind_type) // real time
+               {
+                       mmi_k18_wake_now_close(1);
+               }
+               else if(MMI_REMIND_TYPE_WAKE_UP == s_remind_type) // timing
+               {
+                       mmi_k18_wake_timing_close(1);
+               }
+               else if(MMI_REMIND_TYPE_CLOCK_IN == s_remind_type) // punch
+               {
+                       mmi_k18_clock_in_close();
+               }
+       #endif
        }
 }
 
 static void mmi_remind_screen_timeout(void * para)
 {
        mmi_remind_screen_clean();
+#ifdef __MMI_Z5_HA_K18_REMIND__
+       if(MMI_REMIND_TYPE_WAKE_NOW == s_remind_type) // real time
+       {
+               mmi_k18_wake_now_close(0);
+       }
+       else if(MMI_REMIND_TYPE_WAKE_UP == s_remind_type) // timing
+       {
+               mmi_k18_wake_timing_close(0);
+       }
+#endif
 }
 
 static lv_obj_t * mmi_remind_screen_create(lv_obj_t * activity_obj)
@@ -719,6 +764,17 @@ static lv_obj_t * mmi_remind_screen_create(lv_obj_t * activity_obj)
                Hal_Rtc_Gettime(&cur_time);
                sprintf(time_str, "%02d:%02d", cur_time.tm_hour, cur_time.tm_min);
                
+       #ifdef USE_LV_WATCH_UI_466_466
+               lv_obj_t * label_time = lv_label_create(cont, NULL);
+               lv_obj_add_style(label_time, LV_LABEL_PART_MAIN, &lv_watch_font40);
+               lv_label_set_text(label_time, time_str);
+               lv_label_set_align(label_time, LV_LABEL_ALIGN_CENTER);
+               lv_obj_align(label_time, NULL, LV_ALIGN_IN_TOP_MID, 0, LV_VER_RES / 5);
+
+               lv_obj_t * label_prompt = lv_label_create(cont, label_time);
+               lv_label_set_text_id(label_prompt, s_remind_info[s_remind_index].remind_txt_id);
+               lv_obj_align(label_prompt, NULL, LV_ALIGN_CENTER, 0, -10);
+       #else
                lv_obj_t * label_time = lv_label_create(cont, NULL);
                lv_obj_add_style(label_time, LV_LABEL_PART_MAIN, &lv_watch_font26);
                lv_label_set_text(label_time, time_str);
@@ -728,23 +784,36 @@ static lv_obj_t * mmi_remind_screen_create(lv_obj_t * activity_obj)
                lv_obj_t * label_prompt = lv_label_create(cont, label_time);
                lv_label_set_text_id(label_prompt, s_remind_info[s_remind_index].remind_txt_id);
                lv_obj_align(label_prompt, label_time, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+       #endif
        }
 
        lv_obj_t * btn = lv_btn_create(cont, NULL);
+#ifdef USE_LV_WATCH_UI_466_466
+       lv_obj_set_size(btn, 140, 70);
+#else
        lv_obj_set_size(btn, 100, 56);
+#endif
        lv_obj_set_style_local_bg_color(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(0x47, 0xA6, 0xFF));
        lv_obj_set_style_local_radius(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 30);
        lv_obj_set_style_local_bg_color(btn, LV_BTN_PART_MAIN, LV_STATE_PRESSED, lv_color_make(0x47, 0xA6, 0xFF));
        lv_obj_set_style_local_radius(btn, LV_BTN_PART_MAIN, LV_STATE_PRESSED, 30);
 #ifdef USE_LV_WATCH_UI_CIRCLE
+       #ifdef USE_LV_WATCH_UI_466_466
+       lv_obj_align(btn, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -60);
+       #else
        lv_obj_align(btn, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -15);
+       #endif
 #else
        lv_obj_align(btn, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -20);
 #endif
        lv_obj_set_event_cb(btn, mmi_remind_btn_event_cb);
 
        lv_obj_t * label = lv_label_create(btn, NULL);
+#ifdef USE_LV_WATCH_UI_466_466
+       lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font40);
+#else
        lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font26);
+#endif
        lv_label_set_text_id(label, WATCH_TEXT_ID_OK);
 
        /* start timer (30 s) */
@@ -782,7 +851,44 @@ void mmi_ui_msg_update_remind(void)
                volume = query_current_volume();
        #endif
        
-       #ifdef __MMI_CUSTOM_HENG_AI__
+       #ifdef __MMI_Z5_HA_K18_REMIND__
+               if(MMI_REMIND_TYPE_WAKE_UP == s_remind_type) // timing
+               {
+                       if(0 == mmi_k18_wake_timing_info_type_get())
+                       {
+                       Hal_NFFS_File_Play_Repeat(ring_path, volume);
+                       }
+                       else
+                       {
+                               if(true == mmi_watch_vibrate_is_permitted())
+                               {
+                                       Hal_Vibrator_Play_Repeat();
+                               }
+                       }
+               }
+               else if(MMI_REMIND_TYPE_WAKE_NOW == s_remind_type) // real time
+               {
+                       if(0 == mmi_k18_wake_now_info_type_get())
+                       {
+                               Hal_NFFS_File_Play_Repeat(ring_path, volume);
+                       }
+                       else
+                       {
+                               if(true == mmi_watch_vibrate_is_permitted())
+                               {
+                                       Hal_Vibrator_Play_Repeat();
+                               }
+                       }
+               }
+               else
+               {
+                       Hal_NFFS_File_Play_Repeat(ring_path, volume);
+                       if(true == mmi_watch_vibrate_is_permitted())
+                       {
+                               Hal_Vibrator_Play_Repeat();
+                       }
+               }
+       #elif defined(__MMI_CUSTOM_HENG_AI__)
                if(0 == mmi_heng_ai_wake_ring_type_get())
                {
                Hal_NFFS_File_Play_Repeat(ring_path, volume);
@@ -918,7 +1024,9 @@ void mmi_remind_data_init(void)
 #ifdef __MMI_REMIND_CUSTOM_MEDICINE_SUPPORT__
        mmi_remind_custom_medicine_nv_read();
 #endif
-
+#ifdef __MMI_Z5_HA_K18_REMIND__
+       mmi_k18_wake_timing_type_interval_nv_read();
+#endif
 
 }
 #endif 
index dd21b82..a403b77 100644 (file)
@@ -28,7 +28,9 @@ extern "C" {
 
 typedef enum
 {
-       MMI_REMIND_TYPE_WAKE_UP,
+       MMI_REMIND_TYPE_WAKE_UP, // timing
+       MMI_REMIND_TYPE_WAKE_NOW, // real time
+       MMI_REMIND_TYPE_CLOCK_IN, // punch
        MMI_REMIND_TYPE_SLEEP,
        MMI_REMIND_TYPE_REST_BEGIN,
        MMI_REMIND_TYPE_REST_END,
@@ -61,6 +63,7 @@ typedef struct
 #ifdef __MMI_REMIND_WAKE_UP_SUPPORT__
 void mmi_remind_wake_up_data_set(nv_watch_remind_item_t * data);
 void mmi_remind_wake_up_screen_active(void);
+void mmi_remind_wake_now_screen_active(void);
 #endif
 #ifdef __MMI_REMIND_SLEEP_SUPPORT__
 void mmi_remind_sleep_data_set(nv_watch_remind_item_t * data);
index 8fcef33..ecb33b5 100644 (file)
@@ -48,7 +48,7 @@ extern "C" {
 #ifdef __MMI_REMIND_WAKE_UP_SUPPORT__
 #define AUDIO_REMIND_WAKE_UP                 "R:/audio/AUDIO_REMIND_WAKE_UP.mp3"
 #endif
-#if defined(__MMI_REMIND_SLEEP_SUPPORT__) || defined(__MMI_CUSTOM_HENGAI_SLEEP__)
+#if defined(__MMI_REMIND_SLEEP_SUPPORT__) || defined(__MMI_CUSTOM_HENGAI_SLEEP__) || defined(__MMI_Z5_HA_K18_REMIND__)
 #define AUDIO_REMIND_SLEEP                   "R:/audio/AUDIO_REMIND_SLEEP.mp3"
 #endif
 #ifdef __MMI_REMIND_REST_SUPPORT__
@@ -64,6 +64,9 @@ extern "C" {
 #ifdef __MMI_REMIND_DRINK_SUPPORT__
 #define AUDIO_REMIND_DRINK                   "R:/audio/AUDIO_REMIND_DRINK.mp3"
 #endif
+#ifdef __MMI_Z5_HA_K18_REMIND__
+#define AUDIO_REMIND_CLOCK_IN                 "R:/audio/AUDIO_REMIND_CLOCK_IN.mp3"
+#endif
 
 #ifdef __MMI_SEDENTARY_REMIND_SUPPORT__
 #define AUDIO_REMIND_SEDENTARY                  "R:/audio/AUDIO_REMIND_SEDENTARY.mp3"
index 1a78ac6..9129b57 100644 (file)
@@ -613,7 +613,7 @@ static void mmi_protocol_location_move_state_check_cb(uint32_t param)
                int16_t chip_x = 0, chip_y = 0, chip_z = 0;
                
                xMotion_Chip_Read_XYZ(&chip_x, &chip_y, &chip_z);
-               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%d,%d/%d,%d,%d\n", __FUNCTION__, __LINE__,
+               //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%d,%d/%d,%d,%d\n", __FUNCTION__, __LINE__,
                                                                chip_x, chip_y, chip_z, s_gsensor_chip_x, s_gsensor_chip_y, s_gsensor_chip_z);
                if((100 < abs(s_gsensor_chip_x - chip_x)) || (100 < abs(s_gsensor_chip_y - chip_y)) || (100 < abs(s_gsensor_chip_z - chip_z)))
                {
index bd9ffd0..ff236a6 100644 (file)
@@ -9,6 +9,7 @@
 //#include "mbedtls/md5.h"
 #include "../../../../product/craneg_modem/pcac/mbedtls/include/mbedtls/md5.h"
 #endif
+#include "hal/dm/cJSON.h"
 
 // action key string & action case parse
 #include "mmi_protocol_fzd_content.c"
@@ -4063,6 +4064,49 @@ bool mmi_protocol_fzd_parse_SERVER_COMMON_MSG_DOWN(unsigned char * next_buff, un
        
 #ifdef MMI_PROJECT_Z5_HA_K18_NFC
        mmi_k18_nfc_experience_trigger(decode_str, output_len);
+#else
+       cJSON * json_recv = cJSON_Parse(decode_str);
+       if(NULL != json_recv)
+       {
+               char * cmd_code = cJSON_GetStringValue(cJSON_GetObjectItem(json_recv, "code"));
+               if(0 == strcmp("31000", cmd_code))
+               {
+               
+               }               
+               else if(0 == strcmp("31001", cmd_code))
+               {
+               #ifdef __MMI_Z5_HA_K18_REMIND__
+                       mmi_k18_wake_now_info_set(json_recv);
+               #endif
+               }
+               else if(0 == strcmp("31002", cmd_code))
+               {
+               #ifdef __MMI_Z5_HA_K18_REMIND__
+                       mmi_k18_wake_timing_info_set(json_recv);
+               #endif
+               }
+               else if(0 == strcmp("31003", cmd_code))
+               {
+
+               }
+               else if(0 == strcmp("31004", cmd_code))
+               {
+               #ifdef __MMI_Z5_HA_K18_REMIND__
+                       mmi_k18_warning_info_set(json_recv);
+               #endif
+               }
+               else
+               {
+                       PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: code=%s\n", __FUNCTION__, __LINE__, cmd_code);
+               }
+       }
+       else
+       {
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: not json file\n", __FUNCTION__, __LINE__);
+       }
+       
+       cJSON_Delete(json_recv);
+       json_recv = NULL;
 #endif
 
        lv_mem_free(decode_str);