Z5_HA_K18_NFC
author@CHENG <2393524978@qq.com>
Tue, 25 Feb 2025 06:58:53 +0000 (14:58 +0800)
committer@CHENG <2393524978@qq.com>
Tue, 25 Feb 2025 06:58:53 +0000 (14:58 +0800)
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

index db44e49..1b4de63 100644 (file)
@@ -5,13 +5,52 @@
 
 #ifdef MMI_PROJECT_Z5_HA_K18_NFC
 
+#include "hal/dm/cJSON.h"
+
+
 #define TIMER_TIME_STR_LEN_MAX (16)
 
-static unsigned char *s_experience_title_str = "8DD16B65673A"; // NULL;
-static unsigned int s_experience_time_total = 60 * 3; // 0; // s
-static unsigned int s_experience_time_remain = 0; // s
-static unsigned int s_experience_value = 168; // 0;
+#define TIMER_CYCLE_DURATION (1000) // ms
+
+#define TIMER_GET_VALUE_COUNT (60) // s
+
+#define K18_NFC_EXPR_TASK_PRIORITY (221)
+#define K18_NFC_EXPR_TASK_STACK_SIZE (1024 * 8)
+#define K18_NFC_EXPR_MSG_QUEUE_SIZE (8)
+
+typedef enum
+{
+       MSG_HAPPINESS_VALUE_GET,
+       MSG_EXPERIENCE_FINISHED,
+       MSG_EXPERIENCE_INTERRUPT,
+       
+       K18_NFC_EXPR_MSG_MAX
+}k18_nfc_expr_msg_e;
+
+typedef struct
+{
+       char * name;
+       int total_duration;
+       int remain_duration;
+       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 void mmi_k18_nfc_experience_happiness_value_get(void);
+static int mmi_k18_nfc_experience_stop(char is_interrupt);
+
+void mmi_k18_nfc_experience_timer_deinit(void);
+void mmi_k18_nfc_experience_timer_init(void);
+
+static void mmi_k18_nfc_experience_task_msg_send(k18_nfc_expr_msg_e msg_id);
+static void mmi_k18_nfc_experience_task_deinit(void);
+static void mmi_k18_nfc_experience_task_init(void);
 
 
 bool mmi_k18_nfc_experience_screen_active(void)
@@ -43,34 +82,35 @@ void mmi_k18_nfc_experience_prepare_destory(lv_obj_t * activity_obj)
 
        watch_set_suspend_enable(true, ACT_ID_K18_NFC_EXPERIENCE, 0);
        watch_wakeup_time_reset();
-       
-    lv_watch_png_cache_all_free();
-
-       lv_ntc_experience_ext_t * ext = mmi_k18_nfc_experience_ext_get();
-       if(NULL == ext) 
-               return ;
 
-       if(NULL != ext->label_time_remaining)
+       if(NULL != s_experience_data.name)
        {
-               lv_anim_del(ext->label_time_remaining, NULL);
+               lv_mem_free(s_experience_data.name);
+               s_experience_data.name = NULL;
        }
 
+       mmi_k18_nfc_experience_timer_deinit();
+       mmi_k18_nfc_experience_task_deinit();
+       
+    lv_watch_png_cache_all_free();
+
+       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
        s_screen_is_active = false;
 }
 
 void mmi_k18_nfc_experience_screen_clean(void)
 {
-       mmi_k18_nfc_experience_prepare_destory(NULL);
-
-       lv_obj_t * obj = lv_watch_get_activity_obj(ACT_ID_K18_NFC_EXPERIENCE);
-       if(NULL != obj)
+       lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_K18_NFC_EXPERIENCE);
+       if(NULL != activity_obj)
        {
                K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-               lv_obj_del(obj);
+               mmi_k18_nfc_experience_prepare_destory(NULL);
+               lv_obj_del(activity_obj);
        }
 }
 
-static void mmi_k18_nfc_experience_timer_time_remain_str(unsigned int time_second, char *str, uint8_t size)
+static void mmi_k18_nfc_experience_time_remain_str(unsigned int time_second, char *str, uint8_t size)
 {
     if(NULL == str)
                return;
@@ -89,6 +129,9 @@ void mmi_k18_nfc_experience_stop_ok_btn_event_cb(lv_obj_t * obj, lv_event_t e)
        if(LV_EVENT_CLICKED != e)
                return;
 
+       mmi_k18_nfc_experience_timer_deinit();
+       mmi_k18_nfc_experience_task_msg_send(MSG_EXPERIENCE_INTERRUPT);
+
        mmi_k18_nfc_experience_screen_clean();
        lv_watch_go_home();
 }
@@ -183,13 +226,15 @@ void mmi_k18_nfc_experience_finish_screen(lv_obj_t * par)
        lv_label_set_align(label_title, LV_LABEL_ALIGN_CENTER);
        lv_label_set_long_mode(label_title, LV_LABEL_LONG_BREAK);
        lv_obj_set_width(label_title, 400);
-       lv_label_set_text(label_title, s_experience_title_str);
-       lv_obj_align(label_title, label_title, LV_ALIGN_IN_TOP_MID, 0, 85);
+       lv_label_set_text(label_title, s_experience_data.name);
+       lv_obj_align(label_title, NULL, LV_ALIGN_IN_TOP_MID, 0, 85);
 
+       /*
        lv_obj_t * img_title = lv_label_create(img, NULL);
        lv_img_set_src(img_title, ICON_NFC_EXPERIENCE_TITLE);
        lv_obj_set_click(img_title, false);
        lv_obj_align(img_title, NULL, LV_ALIGN_OUT_BOTTOM_MID, 0, 2);
+       */
 
        // timer text
        lv_obj_t * label_timer = lv_label_create(img, NULL);
@@ -202,7 +247,7 @@ void mmi_k18_nfc_experience_finish_screen(lv_obj_t * par)
 
        //time remaining
        char time_remain_str[TIMER_TIME_STR_LEN_MAX] = {0};
-       mmi_k18_nfc_experience_timer_time_remain_str(s_experience_time_total, time_remain_str, TIMER_TIME_STR_LEN_MAX);
+       mmi_k18_nfc_experience_time_remain_str(s_experience_data.total_duration, time_remain_str, TIMER_TIME_STR_LEN_MAX);
 
        lv_obj_t * label_time_remaining = lv_label_create(img, NULL);
        lv_obj_add_style(label_time_remaining, LV_LABEL_PART_MAIN, &lv_watch_font60);
@@ -218,9 +263,9 @@ void mmi_k18_nfc_experience_finish_screen(lv_obj_t * par)
        lv_obj_align(img_value, NULL, LV_ALIGN_IN_TOP_MID, 0, 315);
 
        lv_obj_t * label_value = lv_label_create(img_value, NULL);
-       lv_obj_add_style(label_value, LV_LABEL_PART_MAIN, &lv_watch_font20);
+       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_value);
+       snprintf(temp_value, 4, "%d", s_experience_data.happiness_value);
        lv_label_set_text(label_value, temp_value);
        lv_obj_align(label_value, NULL, LV_ALIGN_CENTER, 0, 0);
 
@@ -235,71 +280,51 @@ void mmi_k18_nfc_experience_finish_screen(lv_obj_t * par)
        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 * 3, LV_TASK_PRIO_HIGH, NULL);
-       lv_task_t * task_p = lv_task_create(mmi_k18_nfc_experience_finish_task_cb, 1000 * 120, LV_TASK_PRIO_HIGH, NULL);
+       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);
 }
 
-void mmi_k18_nfc_experience_timeout_task_cb(lv_task_t * task)
+static void mmi_k18_nfc_experience_timer_time_cb(void * para)
 {
-       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: remain=%d\n", __FUNCTION__, __LINE__, s_experience_data.remain_duration);
 
-       lv_ntc_experience_ext_t * ext = mmi_k18_nfc_experience_ext_get();
-       if(NULL == ext) 
-               return ;
-
-       if(NULL != ext->label_time_remaining)
-       {
-               lv_anim_del(ext->label_time_remaining, NULL);
-       }
-       if(NULL != ext->img)
+       s_get_value_count++;
+       if(TIMER_GET_VALUE_COUNT <= s_get_value_count)
        {
-               lv_obj_clean(ext->img);
+               s_get_value_count = 0;
+               mmi_k18_nfc_experience_task_msg_send(MSG_HAPPINESS_VALUE_GET);
        }
-       mmi_k18_nfc_experience_finish_screen(ext->img);
-}
-
-static void mmi_k18_nfc_experience_anim_cb(lv_anim_t * anim)
-{
-       if(0 != s_experience_time_remain)
+       
+       if(0 != s_experience_data.remain_duration)
        {
-               s_experience_time_remain--;
+               s_experience_data.remain_duration--;
        
-               char time_remain_str[TIMER_TIME_STR_LEN_MAX] = {0};
-               mmi_k18_nfc_experience_timer_time_remain_str(s_experience_time_remain, time_remain_str, TIMER_TIME_STR_LEN_MAX);
-
-           if(anim->var) 
+               lv_ntc_experience_ext_t * ext = mmi_k18_nfc_experience_ext_get();
+               if(NULL != ext && NULL != ext->label_time_remaining) 
                {
-               lv_label_set_text(anim->var, time_remain_str);
-               //lv_obj_align(anim->var, NULL, LV_ALIGN_CENTER, 0, 0);
-           }
+                       if(true == lv_obj_get_hidden(ext->img))
+                               return;
+                       
+                       char time_remain_str[TIMER_TIME_STR_LEN_MAX] = {0};
+                       mmi_k18_nfc_experience_time_remain_str(s_experience_data.remain_duration, time_remain_str, TIMER_TIME_STR_LEN_MAX);
+                       lv_label_set_text(ext->label_time_remaining, time_remain_str);
+               }
        }
        else
        {
-               lv_task_t * task_p = lv_task_create(mmi_k18_nfc_experience_timeout_task_cb, 1000, LV_TASK_PRIO_HIGH, NULL);
-               lv_task_once(task_p);
-       }
-}
+               mmi_k18_nfc_experience_timer_deinit();
+               mmi_k18_nfc_experience_task_msg_send(MSG_EXPERIENCE_FINISHED);
 
-static void mmi_k18_nfc_experience_label_time_anim(lv_obj_t * obj)
-{
-    lv_anim_t a;
-    lv_anim_path_t path;
-
-    lv_anim_path_init(&path);
-    lv_anim_path_set_cb(&path, lv_anim_path_step);
-
-    lv_anim_init(&a);
-    lv_anim_set_var(&a, obj);
-    lv_anim_set_start_cb(&a, (lv_anim_ready_cb_t)mmi_k18_nfc_experience_anim_cb);
-    lv_anim_set_path(&a, &path);
-    lv_anim_set_time(&a, 1);
-    lv_anim_set_playback_time(&a, 0);
-    lv_anim_set_playback_delay(&a, 0);
-    lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
-    lv_anim_set_repeat_delay(&a, 1000);
-
-    lv_anim_start(&a);
+               lv_ntc_experience_ext_t * ext = mmi_k18_nfc_experience_ext_get();
+               if(NULL == ext) 
+                       return ;
+               
+               if(NULL != ext->img)
+               {
+                       lv_obj_clean(ext->img);
+                       mmi_k18_nfc_experience_finish_screen(ext->img);
+               }
+       }
 }
 
 lv_obj_t * mmi_k18_nfc_experience_create(lv_obj_t * activity_obj)
@@ -326,11 +351,11 @@ lv_obj_t * mmi_k18_nfc_experience_create(lv_obj_t * activity_obj)
        if(NULL == ext)
                return NULL;
 
-       ext->slide_enable = 0; /*disable to slide to the right*/
+       ext->old_ext.slide_enable = 0; /*disable to slide to the right*/
        ext->cont = NULL;
        ext->img = NULL;
        ext->label_time_remaining = NULL;
-       ext->cont_stop = NULL;
+       ext->cont_stop = NULL;  
 
        lv_obj_t * cont = lv_cont_create(obj, NULL);
        lv_obj_set_size(cont, lv_obj_get_width(obj), lv_obj_get_height(obj));
@@ -351,22 +376,24 @@ lv_obj_t * mmi_k18_nfc_experience_create(lv_obj_t * activity_obj)
        lv_label_set_align(label_title, LV_LABEL_ALIGN_CENTER);
        lv_label_set_long_mode(label_title, LV_LABEL_LONG_BREAK);
        lv_obj_set_width(label_title, 400);
-       lv_label_set_text(label_title, s_experience_title_str);
+       lv_label_set_text(label_title, s_experience_data.name);
        lv_obj_align(label_title, NULL, LV_ALIGN_IN_TOP_MID, 0, 85);
 
+       /*
        lv_obj_t * img_title = lv_label_create(img, NULL);
        lv_img_set_src(img_title, ICON_NFC_EXPERIENCE_TITLE);
        lv_obj_set_click(img_title, false);
        lv_obj_align(img_title, label_title, LV_ALIGN_OUT_BOTTOM_MID, 0, 2);
+       */
 
        //time remaining
        lv_obj_t * label_time_remaining = lv_label_create(img, NULL);
-       lv_obj_add_style(label_time_remaining, LV_LABEL_PART_MAIN, &lv_watch_font60);
+       lv_obj_add_style(label_time_remaining, LV_LABEL_PART_MAIN, &lv_watch_font60_red); // lv_watch_font60);
        lv_label_set_align(label_time_remaining, LV_LABEL_ALIGN_CENTER);
        char time_remain_str[TIMER_TIME_STR_LEN_MAX] = {0};
-       mmi_k18_nfc_experience_timer_time_remain_str(s_experience_time_remain, time_remain_str, TIMER_TIME_STR_LEN_MAX);
+       mmi_k18_nfc_experience_time_remain_str(s_experience_data.remain_duration, time_remain_str, TIMER_TIME_STR_LEN_MAX);
        lv_label_set_text(label_time_remaining, time_remain_str);
-       lv_obj_align(label_time_remaining, NULL, LV_ALIGN_CENTER, 0, -25);
+       lv_obj_align(label_time_remaining, NULL, LV_ALIGN_CENTER, 0, -30);
        //lv_obj_set_base_dir(label_time_remaining, LV_BIDI_DIR_LTR);
        ext->label_time_remaining = label_time_remaining;
 
@@ -409,10 +436,6 @@ lv_obj_t * mmi_k18_nfc_experience_create(lv_obj_t * activity_obj)
        lv_obj_add_style(label_stop, LV_LABEL_PART_MAIN, &lv_watch_font36);
     lv_label_set_text_id(label_stop, WATCH_TEXT_ID_EXPERIENCE_STOP);
 
-
-       //create label anim to update time remaining.
-       mmi_k18_nfc_experience_label_time_anim(ext->label_time_remaining);
-
        watch_set_suspend_enable(false, ACT_ID_K18_NFC_EXPERIENCE, 0);
 
        s_screen_is_active = true;
@@ -422,23 +445,47 @@ lv_obj_t * mmi_k18_nfc_experience_create(lv_obj_t * activity_obj)
 
 void mmi_k18_nfc_experience_create_event_cb(lv_obj_t * btn, lv_event_t e)
 {
-       if(NULL == s_experience_title_str)
+       //K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: event=%d\n", __FUNCTION__, __LINE__, e);
+    if(LV_EVENT_CLICKED != e) 
        {
                return;
        }
-       if(0 == s_experience_time_total)
+
+
+#if 0 // __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);
+       if(NULL == temp_ptr)
        {
                return;
        }
-       //s_experience_time_remain = s_experience_time_total;
-       s_experience_time_remain = s_experience_time_total + 1;
+       _lv_memset_00(temp_ptr, temp_len + 1);
+       _lv_memcpy(temp_ptr, project_name, temp_len);                   
+       
+       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;
+#endif
 
-    if(LV_EVENT_CLICKED == e) 
+       
+       if(NULL == s_experience_data.name)
        {
-        lv_watch_png_cache_all_free();
-        lv_obj_t * obj = mmi_k18_nfc_experience_create(NULL);
-        LV_ASSERT_MEM(obj);
-    }
+               return;
+       }
+       if(0 == s_experience_data.total_duration)
+       {
+               return;
+       }
+
+    lv_watch_png_cache_all_free();
+    lv_obj_t * obj = mmi_k18_nfc_experience_create(NULL);
+    LV_ASSERT_MEM(obj);
+
+       s_get_value_count = 0;
+       mmi_k18_nfc_experience_timer_init();    
+       mmi_k18_nfc_experience_task_init();
 }
 
 void mmi_ui_msg_update_k18_nfc_experience(void)
@@ -447,81 +494,229 @@ void mmi_ui_msg_update_k18_nfc_experience(void)
        mmi_k18_nfc_experience_create_event_cb(NULL, LV_EVENT_CLICKED);
 }
 
-bool mmi_k18_nfc_experience_cmd_trigger(unsigned char * next_buff, unsigned int next_buff_len)
+
+void mmi_k18_nfc_experience_timer_deinit(void)
 {
-#if 0
-       if(NULL == next_buff || 0 == next_buff_len)
+       if(NULL != s_experience_data.cycle_timer_id)
        {
-               K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-               return false;
+               Hal_Timer_Stop(s_experience_data.cycle_timer_id);
+               s_experience_data.cycle_timer_id =  NULL;
        }
-       //K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, next_buff_len);
-       //K18_NFC_LOG("[@CHENG_DEBUG]: %s\n", next_buff);
+}
 
-       uint32_t output_len = 0;
-       char * t_decode_str = lv_mem_alloc(next_buff_len);
-       if(NULL == t_decode_str)
+void mmi_k18_nfc_experience_timer_init(void)
+{
+       if(NULL != s_experience_data.cycle_timer_id)
        {
-               K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: memory alloc fail\n", __FUNCTION__, __LINE__);
-               return false;
+               Hal_Timer_Stop(s_experience_data.cycle_timer_id);
+               s_experience_data.cycle_timer_id =  NULL;
        }
-       _lv_memset_00(t_decode_str, next_buff_len);     
 
-       int ret_value = mbedtls_base64_decode(t_decode_str, next_buff_len, &output_len, next_buff, next_buff_len);
-       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, ret_value);
-       if(0 != ret_value)
+       s_experience_data.cycle_timer_id = Hal_Timer_Start(TIMER_CYCLE_DURATION, mmi_k18_nfc_experience_timer_time_cb, NULL, true);
+}
+
+static void mmi_k18_nfc_experience_task_msg_send(k18_nfc_expr_msg_e msg_id)
+{
+       if((K18_NFC_EXPR_MSG_QUEUE_SIZE - 1) < Hal_Get_Message_Count(s_experience_data.task_id))
+       {
+               K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: msg queue full\n", __FUNCTION__, __LINE__);
+               return;
+       }
+
+       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n", __FUNCTION__, __LINE__, msg_id);
+    k18_nfc_expr_msg_e * msg = Hal_Mem_Alloc(sizeof(k18_nfc_expr_msg_e));
+       *msg = msg_id;
+   
+    Hal_Send_Message((TASK_ID)s_experience_data.task_id, (void *)msg);
+}
+
+static void mmi_k18_nfc_experience_task_entry(void * para)
+{
+    while(NULL == s_experience_data.task_id)
+       {
+        uos_sleep(10);
+    }
+
+    while(1)
+       {
+        k18_nfc_expr_msg_e * msg = (k18_nfc_expr_msg_e *)Hal_Receive_Message((TASK_ID)s_experience_data.task_id, TRUE);
+               k18_nfc_expr_msg_e msg_id = *msg;
+
+               K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n", __FUNCTION__, __LINE__, msg_id);
+           switch(msg_id)
+               {
+                       case MSG_HAPPINESS_VALUE_GET:
+                               mmi_k18_nfc_experience_happiness_value_get();
+                   break;
+
+                       case MSG_EXPERIENCE_FINISHED:
+                               mmi_k18_nfc_experience_stop(0);
+                               break;
+
+                       case MSG_EXPERIENCE_INTERRUPT:
+                               mmi_k18_nfc_experience_stop(1);
+                               break;                  
+
+                       default:
+                               break;
+           }
+
+        Hal_Mem_Free(msg);
+    }
+}
+
+static void mmi_k18_nfc_experience_task_deinit(void)
+{
+       if(NULL != s_experience_data.task_id)
+       {
+               uos_delete_task(s_experience_data.task_id);
+       }
+}
+
+static void mmi_k18_nfc_experience_task_init(void)
+{
+       if(NULL != s_experience_data.task_id)
+       {
+               K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: task_id=0x%x exist\n", __FUNCTION__, __LINE__, s_experience_data.task_id);
+               return;
+       }
+
+       s_experience_data.task_id = uos_create_task(mmi_k18_nfc_experience_task_entry,
+                                                                                               NULL,
+                                                                                               K18_NFC_EXPR_MSG_QUEUE_SIZE,
+                                                                                               K18_NFC_EXPR_TASK_STACK_SIZE,
+                                                                                               K18_NFC_EXPR_TASK_PRIORITY,
+                                                                                               "k18_nfc_exp");
+
+       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: task_id=0x%x\n", __FUNCTION__, __LINE__, s_experience_data.task_id);
+}
+
+static void mmi_k18_nfc_experience_happiness_value_get(void)
+{
+
+//     s_experience_data.happiness_value
+
+}
+
+
+/*
+¿ªÊ¼ÌåÑé
+{? ? "code":"31000" // ¸æËßÉ豸¿ªÊ¼ÌåÑé? ? "name":"Ãû³Æ", // ¸æËßÉ豸ÌåÑéµÄÏîÄ¿£¬UTF8? ? "duration":600 // ¸æËßÉ豸ÌåÑéµÄʱ³¤£¬µ¥Î» Ãë}
+*/
+int mmi_k18_nfc_experience_trigger(char * data_ptr, int data_len)
+{
+       int ret = 0;
+       cJSON * json_recv = NULL;
+       
+       if(NULL == data_ptr || 0 == data_len)
        {
                K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-               lv_mem_free(t_decode_str);
-               return false;
+               ret = -1;
+               goto EXIT_FUNC;
+       }
+       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, data_len);
+       K18_NFC_LOG("[@CHENG_DEBUG]: %s\n", data_ptr);
+       
+       if(true == mmi_k18_nfc_experience_screen_active())
+       {
+               ret = -9;
+               goto EXIT_FUNC;
        }
-       //K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, strlen(t_decode_str));
-       K18_NFC_LOG("[@CHENG_DEBUG][%d]: %s\n", __LINE__, t_decode_str);
        
-       cJSON * json_recv = cJSON_Parse(t_decode_str);
+       json_recv = cJSON_Parse(data_ptr);
        if(NULL != json_recv)
        {
-               if(cJSON_IsTrue(cJSON_GetObjectItem(json_recv, "status")))
+               char * cmd_code = cJSON_GetStringValue(cJSON_GetObjectItem(json_recv, "code"));
+               if(0 == strcmp("31000", cmd_code))
                {
-                       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: true\n", __FUNCTION__, __LINE__);
-                       
-                       cJSON * json_data = cJSON_GetObjectItem(json_recv, "data");
-                       uint16_t bp_value_high = cJSON_GetIntValue(cJSON_GetObjectItem(json_data, "sbp"));
-                       uint16_t bp_value_low = cJSON_GetIntValue(cJSON_GetObjectItem(json_data, "dbp"));
-                       //char * description = cJSON_GetStringValue(cJSON_GetObjectItem(json_data, "description"));
-
-                       s_experience_title_str;
-                       s_experience_time_total;
-
+                       char * project_name = cJSON_GetStringValue(cJSON_GetObjectItem(json_recv, "name"));
+                       if(NULL == project_name)
+                       {
+                               ret = -2;
+                               goto EXIT_FUNC;
+                       }
+                       int temp_len = strlen(project_name);
+                       char *temp_ptr = lv_mem_alloc(temp_len + 1);
+                       if(NULL == temp_ptr)
+                       {
+                               ret = -3;
+                               goto EXIT_FUNC;
+                       }
+                       _lv_memset_00(temp_ptr, temp_len + 1);
+                       _lv_memcpy(temp_ptr, project_name, temp_len);                   
+
+                       s_experience_data.name = temp_ptr;
+                       s_experience_data.total_duration = cJSON_GetIntValue(cJSON_GetObjectItem(json_recv, "duration"));
+                       s_experience_data.remain_duration = s_experience_data.total_duration;
+                       s_experience_data.happiness_value = 0;
+
+                       mmi_watch_wake_up();
                        mmi_ui_msg_action_k18_nfc_experience();
-               }
+               }               
                else
                {
-                       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: false\n", __FUNCTION__, __LINE__);
+                       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: code=%s\n", __FUNCTION__, __LINE__, cmd_code);
                }
-
        }
        else
        {
                K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: not json file\n", __FUNCTION__, __LINE__);
        }
        
+EXIT_FUNC:
        if(NULL != json_recv)
        {
                K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: free json root\n", __FUNCTION__, __LINE__);
                cJSON_Delete(json_recv);
                json_recv = NULL;
-       }       
-       if(NULL != t_decode_str)
-       {
-               lv_mem_free(t_decode_str);
-               t_decode_str = NULL;
        }
-#endif
 
-       return true;
+       return 0;
 }
 
+/*
+½áÊøÌåÑé
+{? ? "code":"32000" // Í¨ÖªÔ¶¶ËÊÖ±íÌåÑé½áÊø? ? "deviceID":"IMEI", // ÌåÑéµÄÊÖ±íÉ豸ID? ? "interrupt":0/1 // 0 ±íʾÕý³£ÌåÑé½áÊø£»1 ±íʾÓû§ÖÐ;ȡÏûÌåÑé}
+*/
+static int mmi_k18_nfc_experience_stop(char is_interrupt)
+{
+       int ret = 0;
+       char * data_ptr = NULL;
+       int data_len = 512;
+       int temp_len = 0;
+
+       data_ptr = lv_mem_alloc(data_len);
+       if(NULL == data_ptr)
+       {
+               K18_NFC_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\":\"32000\","); // "code":"32000"
+
+       char imei[16 + 1] = {0};
+       app_adp_get_imei_req(imei);
+       temp_len += sprintf(data_ptr + temp_len, "\"deviceID\":\"%s\",", imei);
+       
+       temp_len += sprintf(data_ptr + temp_len, "\"interrupt\":%d}", is_interrupt);
+       
+       K18_NFC_LOG("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, temp_len);
+       K18_NFC_LOG("[@CHENG_DEBUG]: %s\n", __FUNCTION__, __LINE__, data_ptr);
+
+       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;
+}
 
 #endif
 
index f997651..84268e5 100644 (file)
@@ -19,11 +19,11 @@ extern "C" {
 #ifdef MMI_PROJECT_Z5_HA_K18_NFC
 
 
-#define __MMI_AIGC_DEBUG__
-#ifdef __MMI_AIGC_DEBUG__
-#define K18_NFC_LOG(fmt, ...)  printf("[AIGC]"fmt, ##__VA_ARGS__)
-//#define K18_NFC_LOG(fmt, ...)        CPUartLogPrintf("[AIGC]"fmt, ##__VA_ARGS__)
-//#define K18_NFC_LOG(fmt, ...)        cplog_printf("[AIGC]"fmt, ##__VA_ARGS__)
+#define __K18_NFC_DEBUG__
+#ifdef __K18_NFC_DEBUG__
+#define K18_NFC_LOG(fmt, ...)  printf("[EXPR]"fmt, ##__VA_ARGS__)
+//#define K18_NFC_LOG(fmt, ...)        CPUartLogPrintf("[EXPR]"fmt, ##__VA_ARGS__)
+//#define K18_NFC_LOG(fmt, ...)        cplog_printf("[EXPR]"fmt, ##__VA_ARGS__)
 #else
 #define K18_NFC_LOG(fmt, ...)
 #endif
@@ -36,9 +36,7 @@ typedef struct
        lv_obj_t * cont;
        lv_obj_t * img;
     lv_obj_t * label_time_remaining;
-    //lv_obj_t * btn_stop;
        lv_obj_t * cont_stop;
-       TIMER_ID cycle_timer_id;
 }lv_ntc_experience_ext_t;
 
 
@@ -49,7 +47,7 @@ void mmi_k18_nfc_experience_create_event_cb(lv_obj_t * btn, lv_event_t e);
 
 void mmi_ui_msg_update_k18_nfc_experience(void);
 
-bool mmi_k18_nfc_experience_cmd_trigger(unsigned char * next_buff, unsigned int next_buff_len);
+int mmi_k18_nfc_experience_trigger(char * data_ptr, int data_len);
 
 
 #endif