gengxin
author@CHENG <2393524978@qq.com>
Wed, 24 Apr 2024 03:10:58 +0000 (11:10 +0800)
committer@CHENG <2393524978@qq.com>
Wed, 24 Apr 2024 03:10:58 +0000 (11:10 +0800)
40 files changed:
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/include/ui_nvm_interface.h
2.sdk/sdk/gui/lv_watch/lv_apps/alarm/alarm_set.c
2.sdk/sdk/gui/lv_watch/lv_apps/dial/dial.c
2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode.h
2.sdk/sdk/gui/lv_watch/lv_apps/factory_mode/factory_mode_main.c
2.sdk/sdk/gui/lv_watch/lv_apps/launcher/launcher.c
2.sdk/sdk/gui/lv_watch/lv_apps/lowbattery/lowbattery.c
2.sdk/sdk/gui/lv_watch/lv_apps/lowbattery/lowbattery.h
2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/jrtc_client.c [deleted file]
2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/video_call.c [deleted file]
2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/video_call.h [deleted file]
2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/bodyinfo.c
2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/pedometer.c
2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/pedometer.h
2.sdk/sdk/gui/lv_watch/lv_apps/phone/phone_api.c
2.sdk/sdk/gui/lv_watch/lv_apps/phonebook/phonebook.c
2.sdk/sdk/gui/lv_watch/lv_apps/primary_menu/primary_menu_data.c
2.sdk/sdk/gui/lv_watch/lv_apps/setting/setting.c
2.sdk/sdk/gui/lv_watch/lv_apps/setting/setting_ext.c
2.sdk/sdk/gui/lv_watch/lv_apps/setting/setting_ext.h
2.sdk/sdk/gui/lv_watch/lv_apps/shutdown/shutdown.c
2.sdk/sdk/gui/lv_watch/lv_apps/sos/sos.c
2.sdk/sdk/gui/lv_watch/lv_apps/sos/sos.h
2.sdk/sdk/gui/lv_watch/lv_apps/status_and_setting/status_and_setting.c
2.sdk/sdk/gui/lv_watch/lv_watch.c
2.sdk/sdk/gui/lv_watch/lv_watch_common.c
2.sdk/sdk/gui/lv_watch/mmi_location/mmi_location.c
2.sdk/sdk/gui/lv_watch/mmi_location/mmi_location.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
2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd.h
2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd_content.c
2.sdk/sdk/gui/lv_watch/mmi_sundry/mmi_common.c
2.sdk/sdk/gui/lv_watch/mmi_sundry/mmi_sundry.c
2.sdk/sdk/gui/lv_watch/mmi_sundry/mmi_sundry.h
2.sdk/sdk/gui/lv_watch/modem/mmi_modem_tcp/mmi_modem_tcp_msg_handler_impl.c

index 4d90969..ed3c002 100644 (file)
@@ -27,6 +27,11 @@ void mmi_ui_msg_action_watch_power_off(void)
        mmi_ui_msg_action_no_para_msg(MMI_MSG_WATCH_POWER_OFF);
 }
 
+void mmi_ui_msg_action_watch_reboot(void)
+{
+       mmi_ui_msg_action_no_para_msg(MMI_MSG_WATCH_REBOOT);
+}
+
 void mmi_ui_msg_action_watch_searching(void)
 {
        mmi_ui_msg_action_no_para_msg(MMI_MSG_WATCH_SEARCHING);
index 6ead1fd..f53cac6 100644 (file)
@@ -56,6 +56,7 @@ void mmi_watch_lv_ui_message_action(uint16_t msgid, void * msg);
 
 void mmi_ui_msg_action_watch_factory(void);
 void mmi_ui_msg_action_watch_power_off(void);
+void mmi_ui_msg_action_watch_reboot(void);
 void mmi_ui_msg_action_watch_searching(void);
 #ifdef __MMI_WECHAT_SUPPORT__
 void mmi_ui_msg_action_wechat_incoming(void);
index 56203c1..1840b4c 100644 (file)
@@ -367,14 +367,16 @@ void watch_ui_message_handle(uint16_t msgid, void * msg)
        #endif
 
                case MMI_MSG_WATCH_FACTORY:
-                       //printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                        mmi_ui_msg_update_watch_factory();
                        break;
                        
                case MMI_MSG_WATCH_POWER_OFF:
-                       //printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                        mmi_ui_msg_update_watch_power_off();
                        break;
+
+               case MMI_MSG_WATCH_REBOOT:
+                       mmi_ui_msg_update_watch_reboot();
+                       break;
                        
                case MMI_MSG_WATCH_SEARCHING:
                        //printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
index ce85c2a..1e0e9a5 100644 (file)
@@ -102,6 +102,7 @@ enum
 #endif
        MMI_MSG_WATCH_FACTORY,
        MMI_MSG_WATCH_POWER_OFF,
+       MMI_MSG_WATCH_REBOOT,
        MMI_MSG_WATCH_SEARCHING,
 #ifdef __MMI_WECHAT_SUPPORT__
        MMI_MSG_WECHAT_INCOMING,
@@ -554,6 +555,12 @@ typedef struct
     UI_Inter_Msg_Header_t header;
 } mmi_msg_no_para_t;
 
+typedef struct
+{
+    UI_Inter_Msg_Header_t header;
+       uint32_t flag;
+} mmi_msg_flag_para_t;
+
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
 typedef struct
 {
index 4fc5525..1f1f15b 100644 (file)
@@ -231,6 +231,9 @@ typedef struct
 typedef struct
 {
        char number[NV_WATCH_SOS_NUMBER_MAX][NV_CONTACTS_MAX_NUMBER_LEN];
+#ifdef __MMI_SOS_NUMBER_NAME_SUPPORT__
+    char name[NV_WATCH_SOS_NUMBER_MAX][NV_CONTACTS_MAX_NAME_LEN];
+#endif
 } __packed nv_watch_sos_number_t;
 
 
@@ -302,6 +305,7 @@ typedef struct
        //uint8_t media_volume;
        //uint8_t power_on_off_volume;
        uint8_t white_list_switch;
+       uint8_t timing_location_switch;
        uint8_t dial_pad_switch;
        uint8_t low_battery_switch;
        uint8_t fall_down_switch;
index bc1c340..cbe443b 100644 (file)
@@ -80,12 +80,9 @@ void alarm_create_event_cb(lv_obj_t * btn, lv_event_t e)
 
     if(LV_EVENT_CLICKED == e) {
        
-        
         alarm_list_create(NULL);
         //mmi_ui_falldown();
        
-        //mmi_protocol_action_take_on();
-       
     }
 }
 
index 4b2b576..c826b5a 100644 (file)
@@ -98,7 +98,8 @@ static void dial_update_display(lv_obj_t * clock_cont)
 #else
         dial_clean_canvas(false);
         uint8_t i = 0;
-        for(i = ELEMENT_TYPE_BLOOD_OXYGEN; i > ELEMENT_TYPE_INVILID; i--) {
+        //for(i = ELEMENT_TYPE_BLOOD_OXYGEN; i > ELEMENT_TYPE_INVILID; i--) {
+               for(i = ELEMENT_TYPE_MAX - 2; i > ELEMENT_TYPE_INVILID; i--) {
             dial_update_element(watch_dial, i);
         }
 
index a05d37d..08848e4 100644 (file)
@@ -254,6 +254,7 @@ void camera_preview_test_stop(void);
 
 
 #ifdef __MMI_ZHSX_SUPPORT__
+bool mmi_watch_is_in_factory_mode(void);
 void mmi_watch_reset(lv_obj_t * activity_obj);
 #endif
 
index f850086..656fb5c 100644 (file)
@@ -110,6 +110,11 @@ const struct {
 //#endif
 };
 
+
+#ifdef __MMI_ZHSX_SUPPORT__
+static bool s_is_in_factory_mode = false;
+#endif
+
 /**********************
  *      MACROS
  **********************/
@@ -201,6 +206,10 @@ lv_obj_t * factorymode_main_create(lv_obj_t * activity_obj)
 
     lv_obj_set_click(list, true);
 
+#ifdef __MMI_ZHSX_SUPPORT__
+       s_is_in_factory_mode = true;
+#endif
+       
     return obj;
 
 }
@@ -354,8 +363,20 @@ static void factorymode_main_prepare_destory(lv_obj_t * activity_obj)
     lv_watch_png_cache_all_free();
     watch_set_suspend_enable(true, ACT_ID_FACTORY_MODE_MAIN, 0);
     watch_set_suspend_enable(true, ACT_ID_FACTORY_MODE_TEST, 0);
+
+#ifdef __MMI_ZHSX_SUPPORT__
+       s_is_in_factory_mode = false;
+#endif
 }
 
+#ifdef __MMI_ZHSX_SUPPORT__
+bool mmi_watch_is_in_factory_mode(void)
+{
+       printf("[@CHENG_DEBUG][%s][%d]:%d\n", __FUNCTION__, __LINE__, (s_is_in_factory_mode ? 1 : 0));
+       return s_is_in_factory_mode;
+}
+#endif
+
 static void factorymode_autotest_create_btn_event_cb(lv_obj_t * btn, lv_event_t e)
 {
     if(LV_EVENT_CLICKED == e)
index f17cf4f..bf90e41 100644 (file)
@@ -847,8 +847,10 @@ static lv_obj_t * sport_create(lv_obj_t * activity_obj)
 {
     static lv_point_t pu_valid_pos[] = {
 #if USE_LV_WATCH_BODYINFO != 0
+#ifndef __MMI_PEDOMETER_STEP_AND_GOAL_STYLE__
         {0, 0},
 #endif
+#endif
 #if USE_LV_WATCH_PEDOMETER != 0
         {1, 0},
 #endif
@@ -890,11 +892,13 @@ static lv_obj_t * sport_create(lv_obj_t * activity_obj)
 
     //lv_obj_t * tab;
 #if USE_LV_WATCH_BODYINFO != 0
+#ifndef __MMI_PEDOMETER_STEP_AND_GOAL_STYLE__
        bodyinfo_create(tileview, 0);
     //tab = bodyinfo_create(tileview, 0);
     //LV_ASSERT_MEM(tab);
     //if(tab == NULL) return NULL;
 #endif
+#endif
 
 #if USE_LV_WATCH_PEDOMETER != 0
        pedometer_create(tileview, 1);
index 3afaef5..7cc1260 100644 (file)
@@ -52,6 +52,108 @@ lv_res_t lowbattery_create_btn_action(lv_obj_t * btn)
     return LV_RES_OK;
 }
 
+#ifdef __MMI_ZHSX_SUPPORT__
+
+#define MMI_LOW_BATTERY_SCREEN_DESTROY (0)
+#define MMI_LOW_BATTERY_SCREEN_CREATE  (1)
+#define MMI_LOW_BATTERY_SCREEN_UPDATE  (2)
+#define MMI_LOW_BATTERY_POWER_OFF      (3)
+
+static bool s_low_battery_upload_flag = true;
+
+void mmi_low_battery_screen_clean(void)
+{
+       s_low_battery_upload_flag = true;
+       lowbattery_destory();
+}
+
+void mmi_ui_msg_update_low_battery_screen(uint32_t flag)
+{
+       if(MMI_LOW_BATTERY_SCREEN_CREATE == flag) // create
+       {
+               lowbattery_create_btn_action(NULL);
+       #if USE_LV_WATCH_AUDIO_PLAYER != 0
+               audio_player_lowbattery_process();
+       #endif
+               voip_activity_destroy_req();
+       }
+       else if(MMI_LOW_BATTERY_SCREEN_UPDATE == flag) // update time
+       {
+               lv_lowbattery_ext_t * ext = lv_obj_get_ext_attr(lv_watch_get_activity_obj(ACT_ID_LOWBATTERY));
+               hal_rtc_t tm;
+               Hal_Rtc_Gettime(&tm);// get time
+               char * rtctime = lv_mem_alloc(6);
+               memset(rtctime, 0, 6);
+               snprintf(rtctime, 6, "%02d:%02d", tm.tm_hour, tm.tm_min);
+               lv_label_set_text(ext->timelabel, rtctime); //refresh the label
+               lv_mem_free(rtctime);
+       }
+       else if(MMI_LOW_BATTERY_POWER_OFF == flag) // power off
+       {
+               shutdown_confirm_btn_action(NULL, LV_EVENT_CLICKED);
+       }
+       else // destroy
+       {
+               lowbattery_destory();
+       }
+}
+
+void mmi_low_battery_check_mission(void)
+{
+    if(HAL_CHG_CONNECTED == Hal_Charger_Get_Status())
+       {
+               s_low_battery_upload_flag = true;
+               
+        if(NULL != lv_watch_get_activity_obj(ACT_ID_LOWBATTERY))
+               {
+            printf("[@CHENG_DEBUG]: power charging start and exit low battery mode\n");
+                       mmi_ui_msg_action_low_battery(MMI_LOW_BATTERY_SCREEN_DESTROY);
+        }
+    }
+       else
+       {
+        if(Hal_Battery_Get_Status() < ENTER_LOWBATTERY_MODE_LEVEL)
+               {
+                       if(true == s_low_battery_upload_flag)
+                       {
+                               mmi_protocol_action_low_battery();
+                               s_low_battery_upload_flag = false;
+                       }
+                       
+            if((NULL == lv_watch_get_activity_obj(ACT_ID_LOWBATTERY))
+                && (NULL == lv_watch_get_activity_obj(ACT_ID_PHONE))
+                )
+            {
+                printf("enter low battery mode\n");
+                               mmi_ui_msg_action_low_battery(MMI_LOW_BATTERY_SCREEN_CREATE);
+            }
+                       else
+                       {
+                // update time
+                if(NULL == lv_watch_get_activity_obj(ACT_ID_PHONE))
+                               {
+                                       mmi_ui_msg_action_low_battery(MMI_LOW_BATTERY_SCREEN_UPDATE);
+                }
+                if(Hal_Battery_Get_Status() == AUTO_POWER_OFF_LEVEL)
+                               {
+                    printf("power off in low battery mode\n");
+                                       mmi_ui_msg_action_low_battery(MMI_LOW_BATTERY_POWER_OFF);
+                }
+            }
+        } 
+               else
+               {
+                       s_low_battery_upload_flag = true;
+                       
+            if(NULL != lv_watch_get_activity_obj(ACT_ID_LOWBATTERY))
+                       {
+                printf("[@CHENG_DEBUG][%s][%d]: exit low battery mode\n", __FUNCTION__, __LINE__);
+                               mmi_ui_msg_action_low_battery(MMI_LOW_BATTERY_SCREEN_DESTROY);
+            }
+        }
+    }
+}
+#else
 void lowbattery_task(lv_task_t * task)
 {
     if(HAL_CHG_CONNECTED == Hal_Charger_Get_Status()) {
@@ -108,6 +210,7 @@ void lowbattery_task(lv_task_t * task)
         }
     }
 }
+#endif
 
 /**********************
  *   STATIC FUNCTIONS
@@ -125,6 +228,71 @@ static lv_obj_t * lowbattery_create(lv_obj_t * activity_obj)
         if(activity_obj == NULL) return NULL;
     }
 
+#ifdef __MMI_ZHSX_SUPPORT__
+
+    lv_obj_t * obj = lv_cont_create(activity_obj, NULL);
+    LV_ASSERT_MEM(obj);
+    if(obj == NULL) return NULL;
+    lv_obj_add_style(obj, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
+    lv_obj_set_style_local_bg_color(obj,LV_OBJ_PART_MAIN,LV_STATE_DEFAULT,LV_COLOR_BLACK);
+    lv_obj_set_style_local_bg_opa(obj,LV_OBJ_PART_MAIN,LV_STATE_DEFAULT,LV_OPA_COVER);
+    lv_obj_set_size(obj,  LV_HOR_RES, LV_VER_RES);
+    lv_obj_set_drag(obj, false);
+
+    lv_obj_t * content = lv_cont_create(obj, NULL);
+    if(content == NULL) return NULL;
+    lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
+    lv_cont_set_fit2(content, LV_FIT_NONE, LV_FIT_TIGHT);
+    lv_obj_set_width(content, LV_HOR_RES);
+    lv_obj_set_drag(content, false);
+    lv_cont_set_layout(content, LV_LAYOUT_COLUMN_MID);
+
+    lv_obj_t * label = lv_label_create(content, NULL);
+    lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
+#ifdef USE_LV_WATCH_UI_466_466
+    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26_gray);
+#else
+    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20_gray);
+#endif
+    hal_rtc_t tm;
+    Hal_Rtc_Gettime(&tm); // get time
+    char * rtctime = lv_mem_alloc(6);
+    memset(rtctime, 0, 6);
+    snprintf(rtctime, 6, "%02d:%02d", tm.tm_hour, tm.tm_min);
+    lv_label_set_text(label, rtctime);
+    lv_mem_free(rtctime);
+    lv_lowbattery_ext_t * ext =
+        lv_obj_allocate_ext_attr(activity_obj, sizeof(lv_lowbattery_ext_t));
+    LV_ASSERT_MEM(ext);
+    if(ext == NULL) return NULL;
+    ext->timelabel = label;// store the label obj
+
+    lv_obj_t * img = lv_img_create(content, NULL);
+    lv_img_set_src(img, ICON_LOWBATTERY_CHARGE);
+    //lv_obj_set_size(img, 52, 83);
+
+    label = lv_label_create(content, NULL);
+    lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
+#ifdef USE_LV_WATCH_UI_466_466
+    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26_gray);
+#else
+    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20_gray);
+#endif
+    lv_label_set_long_mode(label, LV_LABEL_LONG_BREAK);
+    lv_obj_set_size(label, LV_HOR_RES * 3 / 4/*200*/, 45);
+    lv_label_set_text_id(label, WATCH_TEXT_ID_LOWBATTERY);
+    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+
+    lv_obj_t * btn;
+    btn = lv_imgbtn_create(content, NULL);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_LOWBATTERY_DIAL);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_LOWBATTERY_DIAL);
+    lv_obj_set_event_cb(btn, phonebook_create_btn_event_cb);
+
+       lv_obj_align(content, NULL, LV_ALIGN_CENTER, 0, 0);
+
+#else
+
     lv_obj_t * content = lv_cont_create(activity_obj, NULL);
     LV_ASSERT_MEM(content);
     if(content == NULL) return NULL;
@@ -169,6 +337,8 @@ static lv_obj_t * lowbattery_create(lv_obj_t * activity_obj)
     lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_LOWBATTERY_DIAL);
     lv_obj_set_event_cb(btn, phonebook_create_btn_event_cb);
 
+#endif
+
     return activity_obj;
 }
 
index 47c290e..6ac4a60 100644 (file)
@@ -42,7 +42,12 @@ typedef struct
  * GLOBAL PROTOTYPES
  **********************/
 lv_res_t lowbattery_create_btn_action(lv_obj_t * btn);
+#ifdef __MMI_ZHSX_SUPPORT__
+void mmi_ui_msg_update_low_battery_screen(uint32_t flag);
+void mmi_low_battery_check_mission(void);
+#else
 void lowbattery_task(lv_task_t * task);
+#endif
 
 /**********************
  *      MACROS
diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/jrtc_client.c b/2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/jrtc_client.c
deleted file mode 100644 (file)
index bb204fa..0000000
+++ /dev/null
@@ -1,332 +0,0 @@
-/**
- * @file jrtc_client.c
- *
- */
-
-/*********************
- *      INCLUDES
- *********************/
-#include "lv_watch.h"
-
-#if USE_LV_WATCH_VIDEOCALL != 0
-#include <jrtc.h>
-/*********************
-*      DEFINES
-*********************/
-#define VIDEO_CALL_CFG_FILE         "C:/video_call_cfg"
-
-/**********************
-*      TYPEDEFS
-**********************/
-typedef enum jrtc_state voip_jrtc_state_t;
-typedef enum jrtc_error voip_jrtc_error_t;
-typedef struct jrtc_image_t  voip_jrtc_image_t;
-
-typedef struct {
-    void /*lv_task_t*/ *state_task;
-    voip_jrtc_image_t txframe;
-    voip_jrtc_image_t rxframe;
-    void* jrtc_ptr;
-    TIMER_ID closed_timer_id;
-    uint8_t closing;
-} voip_jrtc_t;
-
-typedef struct {
-    uint8_t valid;
-    char appkey[40];
-    char key[40];
-    char uid[40];
-    char roomid[40];
-    char srvURL[40];
-} voip_jrtc_cfg_t;
-
-/**********************
-*  STATIC VARIABLES
-**********************/
-extern voip_phone_call_params_t voipcall_params;
-static voip_jrtc_t voip_jrtc;
-static voip_jrtc_cfg_t voip_cfg;
-
-/**********************
-*  STATIC PROTOTYPES
-**********************/
-static void voip_jrtc_config(void);
-static int8_t voip_jrtc_open(const char* roomid, MODEM_VIDEO_CALL_TYPE calltype);
-static uint8_t voip_jrtc_get_image(void * preview_buf);
-static void voip_jrtc_on_state(lv_task_t * task);
-static void voip_jrtc_cleanup(void);
-static void voip_jrtc_timeout_cb(void * para);
-
-/**********************
- *   FUNCTIONS DECLARATION
- ***********************/
-extern UINT32  OsaGetTicks(void *pForFutureUse);
-
-/**********************
- *   GLOBAL FUNCTIONS
- ***********************/
-void voip_call_init(void)
-{
-    Hal_Mem_Set(&voip_jrtc, 0, sizeof(voip_jrtc_t));
-
-    voip_jrtc_config();
-}
-
-int8_t voip_call_dial_req(MODEM_VIDEO_CALL_TYPE calltype, char * pContactUri)
-{
-    printf("%s: calltype=%d, number=%s\n", __FUNCTION__, calltype, pContactUri);
-    int8_t ret = -1;
-
-#if VOIP_JUPHOON_TEST
-    voip_jrtc_config();
-
-    if (NULL == voip_jrtc.jrtc_ptr) {
-        ret = voip_jrtc_open(voip_cfg.roomid, calltype);
-    }
-
-#else
-    if (NULL == voip_jrtc.jrtc_ptr) {
-        ret = voip_jrtc_open(pContactUri, calltype);
-    }
-#endif
-
-    Hal_Mem_Free(pContactUri);
-    return ret;
-}
-
-void voip_call_hangup_req(BOOL bye)
-{
-    printf("%s: jrtc_ptr=%p, bye=%d\n", __FUNCTION__, voip_jrtc.jrtc_ptr, bye);
-
-    if (NULL != voip_jrtc.jrtc_ptr) {
-        voip_jrtc_error_t err;
-        if(TRUE == bye) {
-            err = JRTC_EBYE;
-        } else {
-            err = JRTC_EAUDIOCALL;
-        }
-
-        jrtc_close(voip_jrtc.jrtc_ptr, err);
-        voip_jrtc.closing = 1;
-    } else {
-        watch_voip_call_response_no_carrier(0, 0);
-    }
-}
-
-int8_t voip_call_answer_req(void)
-{
-    printf("%s: jrtc_ptr=%p\n", __FUNCTION__, voip_jrtc.jrtc_ptr);
-    int8_t ret = -1;
-
-    if (NULL == voip_jrtc.jrtc_ptr) {
-        ret = voip_jrtc_open(voipcall_params.number, voipcall_params.voip_call_type);
-    }
-    return ret;
-}
-
-void voip_call_reject_req(BOOL bye)
-{
-    printf("%s: jrtc_ptr=%p, bye=%d\n", __FUNCTION__, voip_jrtc.jrtc_ptr, bye);
-
-    if (NULL != voip_jrtc.jrtc_ptr) {
-        voip_jrtc_error_t err;
-        if(TRUE == bye) {
-            err = JRTC_EBYE;
-        } else {
-            err = JRTC_EAUDIOCALL;
-        }
-
-        jrtc_close(voip_jrtc.jrtc_ptr, err);
-        voip_jrtc.closing = 1;
-    } else {
-        watch_voip_call_response_no_carrier(0, 0);
-    }
-}
-
-/**********************
-*   STATIC FUNCTIONS
-**********************/
-static void voip_jrtc_config(void)
-{
-    lv_fs_file_t file;
-    uint32_t size;
-    char *buf = NULL;
-
-    printf("%s: voip_cfg.valid=%d\n", __FUNCTION__, voip_cfg.valid);
-
-    if(1 == voip_cfg.valid) {
-        return;
-    }
-
-    Hal_Mem_Set(&voip_cfg, 0, sizeof(voip_jrtc_cfg_t));
-
-    uint8_t res = lv_fs_open(&file, VIDEO_CALL_CFG_FILE, LV_FS_MODE_RD);
-    if(LV_FS_RES_OK == res) {
-        lv_fs_size(&file, &size);
-        buf = lv_mem_alloc(size + 1);
-        memset(buf, 0, size + 1);
-        lv_fs_read(&file, buf, size, NULL);
-        //printf("%s: %s\n", __FUNCTION__, buf);
-
-        sscanf(buf, "appkey=%s key=%s uid=%s roomid=%s srvURL=%s",
-            voip_cfg.appkey,
-            voip_cfg.key,
-            voip_cfg.uid,
-            voip_cfg.roomid,
-            voip_cfg.srvURL);
-
-        voip_cfg.valid = 1;
-
-        lv_mem_free(buf);
-        lv_fs_close(&file);
-    } else {
-        printf("%s: lv_fs_open fail, res=%d\n", __FUNCTION__, res);
-
-        strncpy(voip_cfg.appkey, "1234567890abcd1234567890", 40);
-        strncpy(voip_cfg.key, "abc123def4567890", 40);
-        strncpy(voip_cfg.uid, "user1", 40);
-        strncpy(voip_cfg.roomid, "user2", 40);
-        strncpy(voip_cfg.srvURL, "http:example.com:1234;1.1.1.1:1234", 40);
-    }
-
-    jrtc_config(voip_cfg.appkey, voip_cfg.uid, voip_cfg.srvURL, voip_cfg.key);
-}
-
-static int8_t voip_jrtc_open(const char* roomid, MODEM_VIDEO_CALL_TYPE calltype)
-{
-    printf("%s: roomid=%s, calltype=%d\n", __FUNCTION__, roomid, calltype);
-    Hal_Mem_Set(&voip_jrtc, 0, sizeof(voip_jrtc_t));
-
-    if (MODEM_VIDEO_CALL_TYPE_VIDEO == calltype) {
-        voip_jrtc.rxframe.width  = voip_jrtc.txframe.width  = 176;
-        voip_jrtc.rxframe.height = voip_jrtc.txframe.height = 144;
-        voip_jrtc.rxframe.fps    = voip_jrtc.txframe.fps    = 10;
-        voip_jrtc.rxframe.kbps   = voip_jrtc.txframe.kbps   = 240;
-
-        voip_jrtc.jrtc_ptr= jrtc_open(roomid, 0, &voip_jrtc.rxframe, &voip_jrtc.txframe);
-    } else {
-        voip_jrtc.jrtc_ptr= jrtc_open(roomid, 0, NULL, NULL);
-    }
-
-    if (!voip_jrtc.jrtc_ptr) {
-        printf("%s: jrtc_open fail\n", __FUNCTION__);
-        voip_jrtc_cleanup();
-        return -1;
-    }
-    jrtc_activate(voip_jrtc.jrtc_ptr, JRTC_AUDIO|JRTC_CAMERA);
-
-    voip_jrtc.state_task = lv_task_create(voip_jrtc_on_state, VIDEO_RENDER_PERIOD, LV_TASK_PRIO_HIGH, NULL);
-    return 0;
-}
-
-static uint8_t voip_jrtc_get_image(void * preview_buf)
-{
-    uint8_t ret = 0;
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
-    LV_ASSERT_MEM(ext);
-
-    voip_jrtc_image_t *frame = NULL;
-    if(ext->local_remote_switch_flag == VOIP_REMOTE_SWITCH_REMOTE) {
-        frame = &voip_jrtc.rxframe;
-    } else {
-        frame = &voip_jrtc.txframe;
-    }
-
-    if (frame->put != frame->get) {
-#if (ENABLE_VIDEO_SCALE == 0)
-        yuv420_2_rgb565(frame->width, frame->height, frame->data, preview_buf, frame->format);
-#else
-        Hal_Yuv420_Render(frame->width, frame->height, canvas_width, canvas_heigh, frame->data, preview_buf, frame->format);
-#endif
-
-        frame->get = frame->put;
-        ret = 1;
-        voip_fps_check(frame->fps);
-    }
-
-    return ret;
-}
-
-static void voip_jrtc_on_state(lv_task_t * task)
-{
-    voip_jrtc_error_t err;
-    static int8_t oldstate = -1;
-    voip_jrtc_state_t state = jrtc_state(voip_jrtc.jrtc_ptr);
-
-    if(state != oldstate) {
-        printf("%s: state=%d\n", __FUNCTION__, state);
-    }
-
-    switch(state) {
-    case JRTC_CLOSED:
-        if((NULL != voip_jrtc.jrtc_ptr) && (NULL == voip_jrtc.closed_timer_id)) {
-        err = jrtc_error(voip_jrtc.jrtc_ptr);
-        printf("%s: err=%d\n", __FUNCTION__, err);
-
-            if(!voip_jrtc.closing) {
-                jrtc_close(voip_jrtc.jrtc_ptr, JRTC_ENIL);
-                voip_jrtc.closing = 1;
-            }
-
-            printf("%s: start jrtc_closed_timer\n", __FUNCTION__);
-            voip_jrtc.closed_timer_id= Hal_Timer_Start(100, voip_jrtc_timeout_cb, NULL, 0);
-        }
-
-        if(MMI_VOIP_CALL_STATE_NULL != voipcall_params.state) {
-            watch_voip_call_response_no_carrier(0, 1);
-        }
-        break;
-
-    case JRTC_LEAVING:
-        break;
-
-    case JRTC_OPENED:
-        break;
-
-    case JRTC_JOINING:
-        break;
-
-    case JRTC_JOINED:
-        break;
-
-    case JRTC_TALKING:
-        if(MMI_VOIP_CALL_STATE_ACTIVE != voipcall_params.state) {
-            watch_voip_call_response_connect(0);
-        }
-
-        /* Get image */
-        if (MODEM_VIDEO_CALL_TYPE_VIDEO == voipcall_params.voip_call_type) {
-            void *buf = voip_phone_get_video_buffer();
-            if(voip_jrtc_get_image(buf)) {
-                lv_canvas_set_buffer(voip_phone_get_ext()->canvas, buf, canvas_width, canvas_heigh, LV_IMG_CF_TRUE_COLOR);
-            }
-        }
-        break;
-
-    default:
-        break;
-    }
-
-    oldstate = state;
-}
-
-static void voip_jrtc_cleanup(void)
-{
-    printf("%s\n", __FUNCTION__);
-
-    if(NULL != voip_jrtc.state_task) {
-        printf("%s: delete state_task\n", __FUNCTION__);
-        lv_task_del(voip_jrtc.state_task);
-    }
-
-    Hal_Mem_Set(&voip_jrtc, 0, sizeof(voip_jrtc_t));
-}
-
-static void voip_jrtc_timeout_cb(void * para)
-{
-    printf("%s\n", __FUNCTION__);
-
-    voip_jrtc_cleanup();
-}
-
-#endif // #if USE_LV_WATCH_VIDEOCALL != 0
diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/video_call.c b/2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/video_call.c
deleted file mode 100644 (file)
index 33bd51c..0000000
+++ /dev/null
@@ -1,2530 +0,0 @@
-/**
- * @file videocall.c
- *
- */
-
-/*********************
-*      INCLUDES
-*********************/
-#include "lv_watch.h"
-
-#if USE_LV_WATCH_VIDEOCALL != 0
-#include "video_call.h"
-#include <stdio.h>
-#include <stdlib.h>
-/*********************
-*      DEFINES
-*********************/
-
-/**********************
-*      TYPEDEFS
-**********************/
-
-/**********************
-*  STATIC VARIABLES
-**********************/
-static lv_signal_cb_t ancestor_signal;
-#if VIDEO_SIGNAL_CHECK
-static lv_task_t * signal_check_task = NULL;
-#endif
-static lv_task_t * rat_check_task = NULL;
-
-/**********************
-*      Global Variable
-**********************/
-voip_phone_call_params_t voipcall_params;
-lv_color_t g_cbuf[canvas_width * canvas_heigh + 8]  __attribute__((aligned(8)));
-
-/**********************
-*  STATIC PROTOTYPES
-**********************/
-static lv_obj_t * voip_phonebook_create(lv_obj_t * activity_obj);
-static lv_obj_t * voip_phone_cont_create(lv_obj_t * par, lv_align_t cont_layout, lv_style_t * style, lv_coord_t width);
-static lv_obj_t * voip_ring_off_content_create(lv_obj_t * par);
-static void voip_phone_dialing(lv_obj_t * content);
-static void voip_phone_ring(lv_obj_t * content);
-static void voip_phone_connected(lv_obj_t * content);
-static void voip_phone_left_slide_callback(lv_obj_t * obj);
-static void voip_phone_right_slide_callback(lv_obj_t * obj);
-static void voip_phone_down_slide_callback(lv_obj_t * obj);
-static void voip_dialing_animation(lv_obj_t * par);
-static void voip_ring_animation(lv_obj_t * par);
-static void voip_connected_animation(lv_obj_t * obj);
-static void voip_volume_btn_action(lv_obj_t * obj, lv_event_t e);
-static void voip_slider_action(lv_obj_t * slider, lv_event_t e);
-static void voip_ring_hook_action(lv_obj_t * btn, lv_event_t e);
-static void voip_phone_ring_off_timeout_cb(void * para);
-static void voip_phone_callreq_timeout_cb(void * para);
-static void voip_phone_cleanup(void);
-static void voip_phone_obj_hide_anim_end(lv_anim_t * anim);
-static void voip_anim_fp_dialing_ring(lv_obj_t * obj, int32_t x);
-static void voip_anim_fp_connected(lv_anim_t * anim);
-static void voip_phone_prepare_destory(lv_obj_t * activity_obj);
-static lv_obj_t * voip_phone_get_activity_obj(void);
-static lv_obj_t * voip_phone_get_obj(void);
-static void voip_get_time_elaps(uint32_t last_time, char * str, int8_t size);
-static voip_phonebook_contact_t * voip_phonebook_get_contact_info(char * number);
-static char * voip_phonebook_get_phone_number(uint8_t id); /*[0, NV_WATCH_MAX_CONTACT_NUM - 1]*/
-static void voip_phone_voice_call_req(char * number, MODEM_VIDEO_CALL_TYPE voip_call_type);
-static lv_obj_t * voip_phone_create(lv_obj_t * activity_obj, voip_phone_ui_e phone_ui_id);
-static lv_res_t voip_phone_ring_off_create(void);
-static void voip_ring_off_action(lv_obj_t * btn, lv_event_t e);
-static bool voip_check_mo_permission(void);
-static void voip_set_volume_when_slider_act(void);
-static lv_res_t voip_call_fail_ind(lv_obj_t * obj);
-static void voip_call_fail_message_cleanup(lv_anim_t * anim);
-static void voip_local_remote_switch_action(lv_obj_t * btn, lv_event_t e);
-static void canvas_button_hidden_event_cb(lv_obj_t * obj, lv_event_t e);
-static void video_call_add_element(lv_obj_t * element);
-static void voip_signal_check_start(void * ext);
-static void voip_signal_check_stop(void);
-static bool is_rat_gsm(void);
-static void voip_rat_check_start(void);
-static void voip_rat_check_stop(void);
-void voip_audio_ctrl_callback(AUDIO_CTRL_PRIORITY priority);
-
-#if VOIP_PHONE_TEST
-static void voip_phone_connected_cb(void * para);
-static void watch_voip_call_response_originating(int32_t index);
-#endif
-
-#if VOIP_PHONEBOOK_TEST != 0
-static void voip_phonebook_write_nvm_for_test(void);
-static void voip_phonebook_clear_nvm_for_test(void);
-#endif
-
-/**********************
- *   FUNCTIONS DECLARATION
- ***********************/
-
-/**********************
- *   GLOBAL FUNCTIONS
- ***********************/
-void videocallmain_create(lv_obj_t * btn, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED == e) {
-        lv_watch_png_cache_all_free();
-        voip_phonebook_create(NULL);
-    }
-}
-
-static nv_watch_phonebook_t * voip_phonebook_read_nvm(void)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-    uint32_t length = sizeof(nv_watch_phonebook_t);
-
-    nv_watch_phonebook_t * nvm = (nv_watch_phonebook_t *)lv_mem_alloc(length);
-
-    if(length != UI_NV_Read_Req(NV_SECTION_UI_PHONEBOOK, 0, length, (uint8_t *)nvm)) {
-        printf("read nvm error in voip_phonebook_read_nvm\n");
-        lv_mem_free(nvm);
-        return(NULL);
-    }
-    return(nvm);
-}
-
-static void voip_phonebook_get_img_src(uint8_t portrait_id, const void ** img_src, const void ** img_src_small)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-    switch(portrait_id) {
-        case WATCH_PORTRAIT_ID_FATHER:
-            if(img_src) {
-                *img_src = ICON_FATHER;
-            }
-            if(img_src_small) {
-                *img_src_small = ICON_FATHER_SMALL;
-            }
-            break;
-
-        case WATCH_PORTRAIT_ID_MOTHER:
-            if(img_src) {
-                *img_src = ICON_MOTHER;
-            }
-            if(img_src_small) {
-                *img_src_small = ICON_MOTHER_SMALL;
-            }
-            break;
-
-        case WATCH_PORTRAIT_ID_PATERNAL_GRADFATHER:
-            if(img_src) {
-                *img_src = ICON_PATERNAL_GRADFATHER;
-            }
-            if(img_src_small) {
-                *img_src_small = ICON_PATERNAL_GRADFATHER_SMALL;
-            }
-            break;
-
-        case WATCH_PORTRAIT_ID_PATERNAL_GRADMOTHER:
-            if(img_src) {
-                *img_src = ICON_PATERNAL_GRADMOTHER;
-            }
-            if(img_src_small) {
-                *img_src_small = ICON_PATERNAL_GRADMOTHER_SMALL;
-            }
-            break;
-
-        case WATCH_PORTRAIT_ID_MATERNAL_GRADFATHER:
-            if(img_src) {
-                *img_src = ICON_MATERNAL_GRADFATHER;
-            }
-            if(img_src_small) {
-                *img_src_small = ICON_MATERNAL_GRADFATHER_SMALL;
-            }
-            break;
-
-        case WATCH_PORTRAIT_ID_MATERNAL_GRADMOTHER:
-            if(img_src) {
-                *img_src = ICON_MATERNAL_GRADMOTHER;
-            }
-            if(img_src_small) {
-                *img_src_small = ICON_MATERNAL_GRADMOTHER_SMALL;
-            }
-            break;
-
-        case WATCH_PORTRAIT_ID_UNCLE:
-            if(img_src) {
-                *img_src = ICON_UNCLE;
-            }
-            if(img_src_small) {
-                *img_src_small = ICON_UNCLE_SMALL;
-            }
-            break;
-
-        case WATCH_PORTRAIT_ID_AUNT:
-            if(img_src) {
-                *img_src = ICON_AUNT;
-            }
-            if(img_src_small) {
-                *img_src_small = ICON_AUNT_SMALL;
-            }
-            break;
-
-        case WATCH_PORTRAIT_ID_BROTHER:
-        case WATCH_PORTRAIT_ID_BOY:
-            if(img_src) {
-                *img_src = ICON_BOY;
-            }
-            if(img_src_small) {
-                *img_src_small = ICON_BOY_SMALL;
-            }
-            break;
-
-        case WATCH_PORTRAIT_ID_SISTER:
-        case WATCH_PORTRAIT_ID_GIRL:
-            if(img_src) {
-                *img_src = ICON_GIRL;
-            }
-            if(img_src_small) {
-                *img_src_small = ICON_GIRL_SMALL;
-            }
-            break;
-
-        case WATCH_PORTRAIT_ID_FAMILY:
-        case WATCH_PORTRAIT_ID_OTHERS:
-            if(img_src) {
-                *img_src = ICON_FAMILY;
-            }
-            if(img_src_small) {
-                *img_src_small = ICON_FAMILY_SMALL;
-            }
-            break;
-
-        default:
-            printf("warning! no icon corresponding to portrait_id %d", portrait_id);
-            break;
-    } /* switch */
-} /* voip_phonebook_get_img_src */
-
-voip_phonebook_contact_t * voip_phonebook_get_contact_info(char * number)
-{
-    printf("%s: number %s\n", __FUNCTION__, number);
-    if(NULL == number) {
-        printf("error, number is NULL in voip_phonebook_get_contact_info\n");
-        return(NULL);
-    }
-
-    nv_watch_phonebook_t   *  nv_contact_list = voip_phonebook_read_nvm();
-    voip_phonebook_contact_t * contact         = NULL;
-
-    for(uint8_t i = 0; i < NV_WATCH_MAX_CONTACT_NUM; i++) {
-        if('\0' == nv_contact_list->info[i].number[0]) {
-            break;
-        }
-
-        if(0 == strncmp(number, nv_contact_list->info[i].number, strlen(number))) {
-            contact = (voip_phonebook_contact_t *)lv_mem_alloc(sizeof(voip_phonebook_contact_t));
-            memcpy(contact->contact_name, nv_contact_list->info[i].name, VOIP_PHONEBOOK_CONTACTS_MAX_NAME_LEN);
-            memcpy(contact->contact_number, number, strlen(number) + 1);
-            contact->contact_type = nv_contact_list->info[i].contact_type;
-            voip_phonebook_get_img_src(nv_contact_list->info[i].portrait_id, &contact->img_src, &contact->img_src_small);
-            printf("%s: find contact %s %s\n", __FUNCTION__, contact->contact_name, contact->contact_number);
-            break;
-        }
-    }
-
-    lv_mem_free(number);
-    lv_mem_free(nv_contact_list);
-
-    return(contact);
-}
-
-char * voip_phonebook_get_phone_number(uint8_t id)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    if((NV_WATCH_MAX_CONTACT_NUM - 1) < id) {
-        return(NULL);
-    }
-
-    uint32_t length = sizeof(nv_watch_phonebook_info_t);
-    nv_watch_phonebook_info_t * info = (nv_watch_phonebook_info_t *)lv_mem_alloc(length);
-    uint32_t offset = id * length;
-    if(length != UI_NV_Read_Req(NV_SECTION_UI_PHONEBOOK, offset, length, (uint8_t *)info)) {
-        printf("read nvm error in voip_phonebook_get_phone_number\n");
-        lv_mem_free(info);
-        return(NULL);
-    }
-
-    uint8_t name_length = strlen(info->number);
-    char * number = NULL;
-    if(0 != name_length) {
-        number = (char *)lv_mem_alloc(name_length + 1);
-        memcpy(number, info->number, (name_length + 1));
-        printf("%s: number %s in voipphonebook %d\n", __FUNCTION__, number, id);
-    }
-    lv_mem_free(info);
-
-    return(number);
-}
-
-/**********************
-*   STATIC FUNCTIONS
-**********************/
-void voip_audio_ctrl_callback(AUDIO_CTRL_PRIORITY priority)
-{
-    printf("%s,priority is %d\n", __FUNCTION__,priority);
-    if(AUDIO_CTRL_PRIORITY_2 > priority)
-    {
-        lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VOIPPHONE);
-        if(activity_obj == NULL) return;
-        voip_activity_destroy_req();
-        Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
-    }
-}
-
-static lv_voip_phonebook_obj_ext_t * voip_phonebook_get_ext(void)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-    lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VOIP_PHONEBOOK);
-
-    if(activity_obj == NULL) {
-        return(NULL);
-    }
-
-    lv_obj_t * watch_obj;
-    lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
-    if(watch_obj == NULL) {
-        return(NULL);
-    }
-
-    if(watch_obj) {
-        lv_voip_phonebook_obj_ext_t * ext = lv_obj_get_ext_attr(watch_obj);
-        return(ext);
-    }
-    return(NULL);
-}
-
-static void voip_phonebook_prepare_destory(lv_obj_t * activity_obj)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    lv_watch_png_cache_all_free();
-
-    if(1 == lv_obj_get_user_data(activity_obj).user_num) {
-        lv_voip_phonebook_obj_ext_t * ext = voip_phonebook_get_ext();
-        if(ext == NULL) {
-            return;
-        }
-        _lv_ll_clear(&ext->contact_list);
-    }
-
-#if VOIP_PHONEBOOK_TEST != 0
-    voip_phonebook_clear_nvm_for_test();
-#endif
-}
-
-static int voip_aligned_width(int val, lv_coord_t move_width)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    bool negative = (val < 0) ? true : false;
-    if(val < 0) {
-        val = -val;
-    }
-    int i       = (val + move_width - 1) / move_width - 1;
-    int new_val = i * move_width;
-
-    new_val = (val - new_val > move_width / 2) ? (new_val + move_width) : new_val;
-    new_val = negative ? -new_val : new_val;
-    return(new_val);
-}
-
-static lv_res_t voip_page_scrl_signal_handler(lv_obj_t * page_scrl, lv_signal_t sign, void * param)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-    lv_voip_phonebook_obj_ext_t * ext = voip_phonebook_get_ext();
-
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return(LV_RES_INV);
-    }
-
-    if((sign == LV_SIGNAL_DRAG_END) || (sign == LV_SIGNAL_RELEASED)) {
-        lv_coord_t new_x         = lv_obj_get_x(page_scrl);
-        lv_coord_t aligned_new_x = voip_aligned_width(new_x, ext->move_width);
-        lv_obj_set_x(page_scrl, aligned_new_x);
-
-        lv_bidi_dir_t dir = lv_obj_get_base_dir(page_scrl);
-
-        /* update image id */
-        ext->cur_img_id = (aligned_new_x < 0) ? -aligned_new_x / ext->move_width : aligned_new_x / ext->move_width;
-        voip_phonebook_t * contact;
-        if(LV_BIDI_DIR_RTL == dir) {
-            contact = _lv_ll_get_tail(&ext->contact_list);
-        } else {
-            contact = _lv_ll_get_head(&ext->contact_list);
-        }
-        uint8_t i = 0;
-        while(NULL != contact) {
-            if(ext->cur_img_id == i) {
-                ext->cur_contact = contact;
-                break;
-            }
-            i++;
-            if(LV_BIDI_DIR_RTL == dir) {
-                contact = _lv_ll_get_prev(&ext->contact_list, contact);
-            } else {
-                contact = _lv_ll_get_next(&ext->contact_list, contact);
-            }
-        }
-        if(NULL == contact) {
-            printf("error, contact not found in voip_page_scrl_signal_handler\n");
-            return(LV_RES_INV);
-        }
-        lv_label_set_text(ext->label_phone_contact, contact->name);
-        if(0 < strlen(contact->number)) {
-            uint32_t pos = LV_LABEL_POS_LAST;
-            if(LV_BIDI_DIR_RTL == dir) {
-                pos = 0;
-            }
-            if(0 < strlen(contact->name)) {
-                lv_label_ins_text(ext->label_phone_contact, pos, "  ");
-            }
-            lv_label_ins_text(ext->label_phone_contact, pos, contact->number);
-        }
-    }
-
-    return(LV_RES_OK);
-} /* voip_page_scrl_signal_handler */
-
-static lv_res_t voip_phonebook_page_scrl_signal(lv_obj_t * page_scrl, lv_signal_t sign, void * param)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-    lv_res_t res;
-
-    /* Include the ancient signal function */
-    res = ancestor_signal(page_scrl, sign, param);
-    if(res != LV_RES_OK) {
-        return(res);
-    }
-
-    if(sign == LV_SIGNAL_CLEANUP) {
-        /*when cleanup, can not invoke lv_indev_get_act */
-        return(LV_RES_OK);
-    }
-
-    res = voip_page_scrl_signal_handler(page_scrl, sign, param);
-    if(res != LV_RES_OK) {
-        return(res);
-    }
-
-    return(LV_RES_OK);
-}
-
-static lv_res_t voip_phonebook_element_signal_func(lv_obj_t * element, lv_signal_t sign, void * param)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_res_t res;
-
-    /* if not click signs, invoke ancient handler and return */
-    if(sign != LV_SIGNAL_PRESSING && sign != LV_SIGNAL_PRESSED && sign != LV_SIGNAL_RELEASED && sign != LV_SIGNAL_PRESS_LOST) {
-        /* Include the ancient signal function */
-        lv_signal_cb_t sign_func = (lv_signal_cb_t)(lv_obj_get_user_data(element).user_data);
-        res = sign_func(element, sign, param);
-        if(res != LV_RES_OK) {
-            return(res);
-        }
-        return(LV_RES_OK);
-    }
-
-    lv_obj_t * obj = lv_obj_get_parent(element);
-    while(obj) {
-        if(lv_obj_get_signal_cb(obj) != lv_watch_obj_signal) {
-            obj = lv_obj_get_parent(obj);
-        } else {
-            break;
-        }
-    }
-    if(obj == NULL) {
-        return(LV_RES_INV);
-    }
-
-    res = lv_watch_obj_signal(obj, sign, param);
-    if(res != LV_RES_OK) {
-        return(res);
-    }
-
-    lv_voip_phonebook_obj_ext_t * ext = lv_obj_get_ext_attr(obj);
-    if(ext == NULL) {
-        return(LV_RES_INV);
-    }
-    if(ext->page_scrl == NULL) {
-        return(LV_RES_INV);
-    }
-    res = voip_page_scrl_signal_handler(ext->page_scrl, sign, param);
-    if(res != LV_RES_OK) {
-        return(res);
-    }
-
-    /* Include the ancient signal function */
-    lv_signal_cb_t sign_func = (lv_signal_cb_t)(lv_obj_get_user_data(element).user_data);
-    res = sign_func(element, sign, param);
-    if(res != LV_RES_OK) {
-        return(res);
-    }
-
-    return(LV_RES_OK);
-} /* voip_phonebook_element_signal_func */
-
-static void voip_phonebook_add_element(lv_obj_t * element)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-    lv_watch_set_free_ptr(element, lv_obj_get_signal_cb(element));
-    lv_obj_set_signal_cb(element, voip_phonebook_element_signal_func);
-    lv_obj_add_protect(element, LV_PROTECT_PRESS_LOST | LV_PROTECT_CLICK_FOCUS);
-}
-
-static lv_obj_t * voipcall_number_add(lv_obj_t * page, const void * img_src)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_obj_t * img = NULL;
-
-    lv_obj_t * content = lv_cont_create(page, NULL);
-
-    lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-    lv_obj_set_size(content,  120, lv_obj_get_height(page));
-    lv_cont_set_layout(content, LV_LAYOUT_OFF);
-    LV_ASSERT_MEM(content);
-    if(content == NULL) {
-        return(NULL);
-    }
-    /*must set click enable for these content, If not, no pressed/pressing signals out*/
-    lv_obj_set_click(content, true);
-    voip_phonebook_add_element(content);
-    /*hor drag in page, must set glue*/
-    lv_page_glue_obj(content, true);
-
-    img = lv_img_create(content, NULL);
-    lv_img_set_src(img, img_src);
-    lv_obj_align(img, content, LV_ALIGN_IN_TOP_MID, 0, 20);
-
-    return(content);
-}
-
-static lv_obj_t * voip_append_obj(lv_obj_t * page)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_voip_phonebook_obj_ext_t * ext = voip_phonebook_get_ext();
-    lv_obj_t * voip_append_obj = lv_obj_create(page, NULL);
-
-    lv_obj_set_size(voip_append_obj, ext->append_width, lv_obj_get_height(page));
-    lv_obj_add_style(voip_append_obj, LV_OBJ_PART_MAIN, &lv_style_transp_tight);
-    voip_phonebook_add_element(voip_append_obj);
-    return(voip_append_obj);
-}
-
-static lv_obj_t * voip_phonebook_add(lv_obj_t * page)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_voip_phonebook_obj_ext_t * ext = voip_phonebook_get_ext();
-    voip_phonebook_t * contact = _lv_ll_get_head(&ext->contact_list);
-    const void * img_src;
-
-    voip_phonebook_get_img_src(contact->portrait_id, &img_src, NULL);
-
-    lv_img_header_t img_header;
-    lv_img_decoder_get_info(img_src, &img_header);
-    ext->append_width = (lv_obj_get_width(page) - img_header.w - 2 * ext->body_padding_inner) / 2;
-    voip_append_obj(page);
-
-    while(NULL != contact) {
-        voip_phonebook_get_img_src(contact->portrait_id, &img_src, NULL);
-        voipcall_number_add(page, (void *)img_src);
-        contact = _lv_ll_get_next(&ext->contact_list, contact);
-    }
-
-    voip_append_obj(page);
-
-    return(page);
-}
-
-static void voip_phonebook_voicecall_btn_action(lv_obj_t * btn, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED != e) {
-        return;
-    }
-
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    lv_voip_phonebook_obj_ext_t * ext = voip_phonebook_get_ext();
-    uint8_t length = strlen(ext->cur_contact->number) + 1;
-    char * number = (char *)lv_mem_alloc(length);
-
-    memcpy(number, ext->cur_contact->number, length);
-
-    if(voip_check_mo_permission()) {
-        voip_phone_voice_call_req(number, MODEM_VIDEO_CALL_TYPE_VOICE);
-    } else {
-        voip_call_fail_ind(lv_watch_get_activity_obj(ACT_ID_VOIP_PHONEBOOK));
-    }
-}
-
-static void voip_phonebook_voideocall_btn_action(lv_obj_t * btn, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED != e) {
-        return;
-    }
-
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_voip_phonebook_obj_ext_t * ext = voip_phonebook_get_ext();
-    uint8_t length = strlen(ext->cur_contact->number) + 1;
-    char * number = (char *)lv_mem_alloc(length);
-    memcpy(number, ext->cur_contact->number, length);
-
-    if(voip_check_mo_permission()) {
-        voip_phone_voice_call_req(number, MODEM_VIDEO_CALL_TYPE_VIDEO);
-    } else {
-        voip_call_fail_ind(lv_watch_get_activity_obj(ACT_ID_VOIP_PHONEBOOK));
-    }
-}
-
-static void voip_phonebook_add_btn(lv_obj_t * obj, char * phone_name, char * phone_number, lv_event_cb_t voiceaction, lv_event_cb_t videoaction)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_obj_t * content = lv_cont_create(obj, NULL);
-    LV_ASSERT_MEM(content);
-    if(content == NULL) {
-        return;
-    }
-    printf("voip_phonebook_add_btn width: %d, height: %d\n", lv_obj_get_width(content), lv_obj_get_height(content));
-    lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-    lv_cont_set_fit2(content, LV_FIT_TIGHT, LV_FIT_TIGHT);
-    lv_cont_set_layout(content, LV_LAYOUT_ROW_BOTTOM);
-    lv_obj_set_click(content, false);
-    lv_obj_align(content, obj, LV_ALIGN_CENTER, 0, 40);
-
-    lv_obj_t * voicebtn;
-    voicebtn = lv_imgbtn_create(content, NULL);
-    lv_imgbtn_set_src(voicebtn, LV_BTN_STATE_RELEASED, ICON_CALL_PNG);
-    lv_imgbtn_set_src(voicebtn, LV_BTN_STATE_PRESSED, ICON_CALL_PNG);
-    lv_obj_align(voicebtn, content, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
-    lv_obj_set_event_cb(voicebtn, voiceaction);
-    voip_phonebook_add_element(voicebtn);
-
-    lv_obj_t * videobtn;
-    videobtn = lv_imgbtn_create(content, voicebtn);
-    lv_obj_align(videobtn, content, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
-    lv_obj_set_event_cb(videobtn, videoaction);
-    voip_phonebook_add_element(videobtn);
-
-    lv_voip_phonebook_obj_ext_t * ext = voip_phonebook_get_ext();;
-    lv_obj_t * label = lv_label_create(obj, NULL);
-    lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-    lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL_CIRC);
-    lv_obj_set_width(label, lv_obj_get_width(obj) - 20);
-    lv_label_set_text(label, phone_name);
-    if(0 < strlen(phone_number)) {
-        uint32_t pos = LV_LABEL_POS_LAST;
-        if(LV_BIDI_DIR_RTL == lv_obj_get_base_dir(label)) {
-            lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
-            pos = 0;
-        }
-        if(0 < strlen(phone_name)) {
-            lv_label_ins_text(label, pos, "  ");
-        }
-        lv_label_ins_text(label, pos, phone_number);
-    }
-    lv_obj_align(label, obj, LV_ALIGN_IN_BOTTOM_MID, 0, -20);
-    ext->label_phone_contact = label;
-} /* voip_phonebook_add_btn */
-
-static void phonebook_no_contacts_or_network_create(lv_obj_t * obj)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_obj_t * label = lv_label_create(obj, NULL);
-
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-    lv_obj_set_click(label, false);
-    lv_label_set_text_id(label, WATCH_TEXT_ID_NO_CONTACTS_OR_NETWORK);
-    lv_obj_align(label, obj, LV_ALIGN_CENTER, 0, 0);
-}
-
-static void voip_phonebook_add_contact(lv_obj_t * obj)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_voip_phonebook_obj_ext_t * ext = lv_obj_get_ext_attr(obj);
-
-    lv_obj_t * page = lv_page_create(obj, NULL);
-    LV_ASSERT_MEM(page);
-    if(page == NULL) {
-        return;
-    }
-    lv_obj_set_size(page, lv_obj_get_width(obj), lv_obj_get_height(obj));
-    lv_page_set_scrollbar_mode(page, LV_SCROLLBAR_MODE_OFF);
-
-    lv_obj_add_style(page, LV_PAGE_PART_BG, &lv_style_transp_tight);
-    lv_obj_add_style(page, LV_PAGE_PART_SCROLLABLE, &lv_style_transp_tight);
-    lv_obj_add_style(page, LV_PAGE_PART_SCROLLBAR, &lv_style_transp_tight);
-    lv_page_set_scrollable_fit(page, LV_FIT_TIGHT);
-
-    ext->page_scrl = lv_page_get_scrl(page);
-    ancestor_signal = lv_obj_get_signal_cb(ext->page_scrl);
-    lv_obj_set_signal_cb(ext->page_scrl, voip_phonebook_page_scrl_signal);
-    /*the lv_page disable use acceleration, so sinal LV_SIGNAL_DRAG_END is same as LV_SIGNAL_RELEASED */
-    lv_obj_set_drag_throw(ext->page_scrl, false);
-
-    lv_page_set_scrl_layout(page, LV_LAYOUT_ROW_MID);
-    voip_phonebook_add(page);
-    voip_phonebook_add_element(ext->page_scrl);
-    if(LV_BIDI_DIR_RTL == lv_obj_get_base_dir(ext->page_scrl)) {
-        uint8_t child_num = 0;
-        lv_obj_t * child = lv_obj_get_child_back(ext->page_scrl, NULL);
-        while(child) {
-            child_num++;
-            child = lv_obj_get_child_back(ext->page_scrl, child);
-        }
-        if(1 < child_num) {
-            ext->cur_img_id = child_num - 1;
-        }
-    }
-    lv_obj_set_x(ext->page_scrl, ((-1) * ext->move_width * ext->cur_img_id));
-
-    voip_phonebook_add_btn(obj, ext->cur_contact->name, ext->cur_contact->number, voip_phonebook_voicecall_btn_action, voip_phonebook_voideocall_btn_action);
-}
-
-static void voip_phonebook_contacts_create(lv_obj_t * obj, lv_ll_t * contact_list)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    /*when pressing, y is not updated. When press lost  */
-    lv_watch_obj_set_anim_mode(obj, LV_WATCH_ANIM_VER_UP_HIDE);
-    lv_watch_obj_ext_t * watch_obj_ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_watch_obj_ext_t));
-    if(watch_obj_ext == NULL) {
-        return;
-    }
-
-    /*Allocate the object type specific extended data*/
-    lv_voip_phonebook_obj_ext_t * ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_voip_phonebook_obj_ext_t));
-    /*ext realloc based on watch_obj_ext, do not memeset it*/
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return;
-    }
-    ext->contact_list.n_size = contact_list->n_size;
-    ext->contact_list.head   = contact_list->head;
-    ext->contact_list.tail   = contact_list->tail;
-    ext->body_padding_inner  = 1;
-    ext->append_width        = 50;
-    ext->cur_img_id          = 0;
-    ext->cur_contact         = _lv_ll_get_head(&ext->contact_list);
-    ext->label_phone_contact = NULL;
-    ext->move_width          = ext->body_padding_inner + ext->append_width + (lv_obj_get_width(obj) / 2 - ext->append_width); // 130;
-
-    voip_phonebook_add_contact(obj);
-}
-
-#if VOIP_PHONEBOOK_TEST != 0
-
-static void voip_phonebook_write_nvm(nv_watch_phonebook_t * nvm)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    if(NULL == nvm) {
-        return;
-    }
-
-    uint32_t length = sizeof(nv_watch_phonebook_t);
-    if(length != UI_NV_Write_Req(NV_SECTION_UI_PHONEBOOK, 0, length, (uint8_t *)nvm)) {
-        printf("write contacts to nvm error in voip_phonebook_write_nvm\n");
-        return;
-    }
-}
-
-static void voip_phonebook_write_nvm_for_test(void)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    /*clear nvm*/
-    uint32_t length = sizeof(nv_watch_phonebook_t);
-
-    nv_watch_phonebook_t * nvm_clear = (nv_watch_phonebook_t *)lv_mem_alloc(length);
-    memset(nvm_clear, 0, length);
-    voip_phonebook_write_nvm(nvm_clear);
-    lv_mem_free(nvm_clear);
-
-    nv_watch_phonebook_t nvm_list = {     {
-            {"test1", "JU234", 0, WATCH_PORTRAIT_ID_MOTHER},
-            {"test2", "JU456", 1, WATCH_PORTRAIT_ID_FATHER},
-            {"test3", "JU678", 1, WATCH_PORTRAIT_ID_GIRL},
-            //{"test4", "xu2", 1, WATCH_PORTRAIT_ID_BOY},
-        }
-    };
-    length = sizeof(nvm_list);
-    if(length != UI_NV_Write_Req(NV_SECTION_UI_PHONEBOOK, 0, length, (uint8_t *)(&nvm_list))) {
-        printf("write nvm error in voip_phonebook_write_nvm_for_test\n");
-    }
-}
-
-static void voip_phonebook_clear_nvm_for_test(void)
-{
-    printf("%s\n", __FUNCTION__);
-
-    uint32_t len = sizeof(nv_watch_phonebook_t);
-    nv_watch_phonebook_t * nvm_pb = (nv_watch_phonebook_t *)lv_mem_alloc(len);
-    memset(nvm_pb, 0, len);
-    len = UI_NV_Write_Req(NV_SECTION_UI_PHONEBOOK, 0, len, (uint8_t *)nvm_pb);
-    lv_mem_free(nvm_pb);
-}
-#endif
-
-static lv_obj_t * voip_phonebook_create(lv_obj_t * activity_obj)
-{
-    // printf("%s %d\n", __FUNCTION__, __LINE__);
-#if VOIP_PHONEBOOK_TEST != 0
-    voip_phonebook_write_nvm_for_test();
-#endif
-    nv_watch_phonebook_t * nvm_contact_list = voip_phonebook_read_nvm();
-
-    if(activity_obj == NULL) {
-        lv_watch_activity_ext_t activity_ext;
-        memset(&activity_ext, 0, sizeof(lv_watch_activity_ext_t));
-        activity_ext.actId = ACT_ID_VOIP_PHONEBOOK;
-        activity_ext.create = voip_phonebook_create;
-        activity_ext.prepare_destory = voip_phonebook_prepare_destory;
-        activity_obj = lv_watch_creat_activity_obj(&activity_ext);
-        LV_ASSERT_MEM(activity_obj);
-        if(activity_obj == NULL) {
-            return(NULL);
-        }
-    }
-
-    lv_obj_t * obj = lv_watch_obj_create(activity_obj);
-    LV_ASSERT_MEM(obj);
-    if(obj == NULL) {
-        return(NULL);
-    }
-
-    if('\0' == nvm_contact_list->info[0].number[0]) {
-        /*no contacts or network*/
-        phonebook_no_contacts_or_network_create(obj);
-        lv_watch_set_free_num(activity_obj, 0);
-    } else {
-        lv_ll_t contact_list;
-        _lv_ll_init(&contact_list, sizeof(voip_phonebook_t));
-        voip_phonebook_t * contact;
-        uint32_t contact_length = sizeof(nv_watch_phonebook_info_t);
-        for(uint8_t i = 0; i < NV_WATCH_MAX_CONTACT_NUM; i++) {
-            if('\0' == nvm_contact_list->info[i].number[0]) {
-                break;
-            }
-            contact = _lv_ll_ins_tail(&contact_list);
-            memcpy(contact, &nvm_contact_list->info[i], contact_length);
-        }
-        voip_phonebook_contacts_create(obj, &contact_list);
-        lv_watch_set_free_num(activity_obj, 1);
-    }
-#if VOIP_PHONEBOOK_TEST != 0
-    /* not free because in heap*/
-#else
-    lv_mem_free(nvm_contact_list);
-#endif
-    return(obj);
-} /* voip_phonebook_create */
-
-static lv_obj_t * voip_phone_create(lv_obj_t * activity_obj, voip_phone_ui_e phone_ui_id)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    if(VOIP_PHONE_UI_CONNECTED == phone_ui_id) {
-        /* set speaker volume to nv when leaving activiry's slider */
-        voip_set_volume_when_slider_act();
-    }
-
-    /* cleanup phone first */
-    voip_phone_cleanup();
-
-    if(activity_obj == NULL) {
-        lv_watch_activity_ext_t activity_ext;
-        memset(&activity_ext, 0, sizeof(lv_watch_activity_ext_t));
-        activity_ext.actId           = ACT_ID_VOIPPHONE;
-        activity_ext.create          = NULL;
-        activity_ext.prepare_destory = voip_phone_prepare_destory;
-        activity_obj                 = lv_watch_creat_activity_obj(&activity_ext);
-        LV_ASSERT_MEM(activity_obj);
-        if(activity_obj == NULL) {
-            return(NULL);
-        }
-    }
-
-    lv_obj_t * obj = lv_watch_obj_create(activity_obj);
-    LV_ASSERT_MEM(obj);
-    if(obj == NULL) {
-        return(NULL);
-    }
-    lv_watch_obj_set_anim_mode(obj, LV_WATCH_LEFT_OR_RIGHT_SLIDE_CALLBACK);
-    lv_watch_obj_set_left_slide_cb(obj, voip_phone_left_slide_callback);
-    lv_watch_obj_set_right_slide_cb(obj, voip_phone_right_slide_callback);
-
-    lv_voip_phone_obj_ext_t * ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_voip_phone_obj_ext_t));
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return(NULL);
-    }
-
-    ext->phone_status_label       = NULL;
-    ext->phone_animation_obj      = NULL;
-    ext->phone_ui_t               = phone_ui_id;
-    ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_NULL;
-#if ENABLE_VIDEO_SCALE == 0
-    ext->voiph263fmt = VOIP_H263_FMT_QCIF;
-#else
-    ext->voiph263fmt = VOIP_H263_FMT_OTHER;
-#endif
-
-    hal_rtc_t rtc_curr;            // current rtc time
-    Hal_Rtc_Gettime(&rtc_curr);
-    ext->connect_start_time = time_to_seconds(&rtc_curr);
-    ext->connect_time = NULL;
-    ext->ring_value_button = NULL;
-    ext->view_switch_button = NULL;
-    ext->ring_off_button = NULL;
-    ext->canvas_button_hidden_flag = NOT_HIDDEN;
-
-    /* content */
-    lv_obj_t * content = lv_cont_create(obj, NULL);
-    lv_obj_set_size(content, lv_obj_get_width(obj), lv_obj_get_height(obj) - 20);
-    lv_cont_set_layout(content, LV_LAYOUT_COLUMN_MID);
-    LV_ASSERT_MEM(content);
-    if(content == NULL) {
-        return(NULL);
-    }
-    lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-    /* must click false */
-    lv_obj_set_click(content, false);
-    lv_obj_align(content, obj, LV_ALIGN_CENTER, 0, 0);
-
-    if(ext->phone_ui_t == VOIP_PHONE_UI_DIALING) {
-        voip_phone_dialing(content);
-        voip_dialing_animation(ext->phone_status_label);
-    } else if(ext->phone_ui_t == VOIP_PHONE_UI_INCOMING) {
-        voip_phone_ring(content);
-        voip_ring_animation(ext->phone_status_label);
-    } else if(ext->phone_ui_t == PHONE_UI_CONNECTED) {
-        voip_phone_connected(content);
-        voip_connected_animation(ext->phone_status_label);
-    }
-
-    return(obj);
-} /* voip_phone_create */
-
-lv_res_t voip_phone_ring_off_create()
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return(LV_RES_INV);
-    }
-
-    // stop callreq timer
-    if(NULL != voipcall_params.callreq_timer_id) {
-        Hal_Timer_Stop(voipcall_params.callreq_timer_id);
-        voipcall_params.callreq_timer_id = NULL;
-    }
-
-    if(ext->phone_ui_t == VOIP_PHONE_UI_INCOMING || ext->phone_ui_t == VOIP_PHONE_UI_DIALING) {
-        if(ext->phone_status_label) {
-            lv_label_set_text(ext->phone_status_label, "");
-        }
-
-        voip_ring_off_content_create(voip_phone_get_obj());
-    } else if(ext->phone_ui_t == PHONE_UI_CONNECTED) {
-        voip_ring_off_content_create(voip_phone_get_obj());
-    }
-
-    if(ext->phone_animation_obj) {
-        lv_obj_del(ext->phone_animation_obj);
-        ext->phone_animation_obj = NULL;
-    }
-
-    /* set speaker volume to nv when leaving activiry's slider */
-    voip_set_volume_when_slider_act();
-
-    /* phone cleanup when anim end*/
-    lv_anim_t a;
-    lv_anim_init(&a);
-    lv_anim_set_var(&a, voip_phone_get_obj());
-    lv_anim_set_ready_cb(&a, (lv_anim_ready_cb_t)voip_phone_obj_hide_anim_end);
-    lv_anim_set_time(&a, VOIP_PHONE_RING_OFF_CONTINUE_TIME);
-    lv_anim_start(&a);
-
-    voip_signal_check_stop();
-    voip_rat_check_stop();
-
-    return(LV_RES_OK);
-} /* voip_phone_ring_off_create */
-
-void voip_ring_off_action(lv_obj_t * btn, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED != e) {
-        return;
-    }
-
-    printf("%s:  %d, state=%d\n", __FUNCTION__, __LINE__, voipcall_params.state);
-
-    if(false == voipcall_params.ring_off) {
-        voipcall_params.ring_off = true;
-
-        if(NULL == voipcall_params.ring_off_timer_id) {
-            voipcall_params.ring_off_timer_id = Hal_Timer_Start(VOIP_RING_OFF_TIMER_LEN, voip_phone_ring_off_timeout_cb, NULL, 0);
-        }
-        // stop callreq timer
-        if(NULL != voipcall_params.callreq_timer_id) {
-            Hal_Timer_Stop(voipcall_params.callreq_timer_id);
-            voipcall_params.callreq_timer_id = NULL;
-        }
-    }
-
-    switch(voipcall_params.state) {
-        case MMI_VOIP_CALL_STATE_NULL:
-        case MMI_VOIP_CALL_STATE_INVALID:
-            // do noting
-            break;
-
-        case MMI_VOIP_CALL_STATE_ACTIVE:
-            voip_call_hangup_req(TRUE);
-            break;
-
-        case MMI_VOIP_CALL_STATE_INCOMING:
-            Hal_Tone_Play_End();
-            voip_call_reject_req(TRUE);
-            break;
-
-        default:
-            voip_call_hangup_req(TRUE);
-            break;
-    } /* switch */
-
-    voip_signal_check_stop();
-    voip_rat_check_stop();
-
-#if VOIP_PHONE_TEST
-    watch_voip_call_response_no_carrier(voipcall_params.index, 0);
-#endif
-} /* voip_ring_off_action */
-
-lv_voip_phone_obj_ext_t * voip_phone_get_ext(void)
-{
-    lv_voip_phone_obj_ext_t * ext = NULL;
-
-    lv_obj_t        *        watch_obj = voip_phone_get_obj();
-
-    if(watch_obj) {
-        ext = lv_obj_get_ext_attr(watch_obj);
-    }
-
-    return(ext);
-}
-
-void * voip_phone_get_video_buffer()
-{
-    return g_cbuf;
-}
-
-/**********************
-*   STATIC FUNCTIONS
-**********************/
-static lv_obj_t * voip_phone_get_activity_obj(void)
-{
-    lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VOIPPHONE);
-
-    return(activity_obj);
-}
-
-static lv_obj_t * voip_phone_get_obj(void)
-{
-    lv_obj_t * watch_obj = NULL;
-
-    lv_obj_t * activity_obj = voip_phone_get_activity_obj();
-
-    if(activity_obj) {
-        lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
-    }
-
-    return(watch_obj);
-}
-
-#if VOIP_PHONE_TEST
-
-static void voip_phone_connected_cb(void * para)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    watch_voip_call_response_connect(voipcall_params.index);
-}
-#endif
-
-static void voip_phone_left_slide_callback(lv_obj_t * obj)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-#if VOIP_PHONE_TEST
-    if((MMI_VOIP_CALL_STATE_INCOMING == voipcall_params.state)) {   // MT call
-        int32_t index = 1;
-
-        watch_voip_call_response_originating(index);
-        watch_voip_call_response_alerting(index);
-
-        Hal_Timer_Start(60, voip_phone_connected_cb, NULL, 0);
-    }
-
-    else if(MMI_VOIP_CALL_STATE_DIALING == voipcall_params.state) {    // MO call
-        int32_t index = 1;
-
-        watch_voip_call_response_originating(index);
-        watch_voip_call_response_alerting(index);
-
-        Hal_Timer_Start(60, voip_phone_connected_cb, NULL, 0);
-    } else
-#endif
-        if((MMI_VOIP_CALL_STATE_ACTIVE == voipcall_params.state)
-                && (MODEM_VIDEO_CALL_TYPE_VIDEO == voipcall_params.voip_call_type)) {
-            voip_local_remote_switch_action(NULL, LV_EVENT_CLICKED);
-        }
-}
-
-static void voip_phone_right_slide_callback(lv_obj_t * obj)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    voip_ring_off_action(NULL, LV_EVENT_CLICKED);
-}
-
-static void voip_phone_down_slide_callback(lv_obj_t * obj)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    voip_volume_btn_action(NULL, LV_EVENT_CLICKED);
-}
-
-static lv_obj_t * voip_phone_cont_create(lv_obj_t * par, lv_align_t cont_layout, lv_style_t * style, lv_coord_t width)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_obj_t * content = lv_cont_create(par, NULL);
-
-    if(width > 0) {
-        lv_cont_set_fit2(content, LV_FIT_NONE, LV_FIT_TIGHT);
-        lv_obj_set_width(content, width);
-    } else {
-        lv_cont_set_fit2(content, LV_FIT_TIGHT, LV_FIT_TIGHT);
-    }
-    lv_obj_add_style(content, LV_OBJ_PART_MAIN, style);
-    lv_cont_set_layout(content, cont_layout);
-    lv_obj_set_click(content, false);
-    return(content);
-}
-
-static void voip_slider_action(lv_obj_t * slider, lv_event_t e)
-{
-    if(e == LV_EVENT_VALUE_CHANGED)
-    {
-        printf("%s %d\n", __FUNCTION__, __LINE__);
-
-        uint8_t v = lv_slider_get_value(slider);
-
-        // set speaker volume
-        if(!Hal_Set_BT_Audio_Path((HAL_SPEAKER_GAIN)v))
-            Hal_Call_Speaker(HAL_CALL_SPK_ON, (HAL_SPEAKER_GAIN)v);
-        voipcall_params.speaker_volume = v;
-    }
-}
-
-static void voip_volume_btn_action(lv_obj_t * obj, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED != e) {
-        return;
-    }
-
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    slider_create(NULL, SETTING_VOIP_SPEAKER, 40, voip_slider_action);
-}
-
-static void voip_phone_obj_hide_anim_end(lv_anim_t * anim)
-{
-    (void)anim;
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    voip_phone_cleanup();
-}
-
-static lv_obj_t * voip_ring_off_content_create(lv_obj_t * par)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    if(par == NULL) {
-        par = lv_scr_act();
-    }
-
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return(NULL);
-    }
-
-    lv_obj_t * obj = lv_obj_create(par, NULL);
-    LV_ASSERT_MEM(obj);
-    if(obj == NULL) {
-        return(NULL);
-    }
-    lv_obj_set_size(obj, lv_obj_get_width(par), lv_obj_get_height(par));
-    lv_obj_add_style(obj, LV_OBJ_PART_MAIN, &lv_style_transp_tight);
-
-    lv_obj_t * content = lv_cont_create(obj, NULL);
-    LV_ASSERT_MEM(content);
-    if(content == NULL) {
-        return(NULL);
-    }
-
-    lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_cont_opa1);
-    lv_obj_set_size(content, 204, 44);
-    if(ext->phone_ui_t == VOIP_PHONE_UI_INCOMING || ext->phone_ui_t == VOIP_PHONE_UI_DIALING) {
-        lv_obj_align(content, obj, LV_ALIGN_IN_TOP_MID, 0, 10);
-    } else {
-        lv_obj_align(content, obj, LV_ALIGN_CENTER, 0, -12);
-    }
-    lv_cont_set_layout(content, LV_LAYOUT_CENTER);
-    lv_obj_set_click(content, false);
-
-    lv_obj_t * label = lv_label_create(content, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-
-    if(is_rat_gsm()) {
-        lv_label_set_text_id(label, WATCH_TEXT_ID_NETWORK_WRONG);
-    } else {
-        if(ext->phone_ui_t == PHONE_UI_CONNECTED) {
-            char tmp[20] = "";
-            char str[30] = "";
-            voip_get_time_elaps(ext->connect_start_time, tmp, 20);
-            snprintf(str, 30, "%s(%s)", (char *)lv_lang_get_text(WATCH_TEXT_ID_RING_OFF), tmp);
-            lv_label_set_text(label, str);
-        } else {
-            lv_label_set_text_id(label, WATCH_TEXT_ID_RING_OFF);
-        }
-    }
-
-    lv_obj_set_click(label, false);
-
-    return(obj);
-} /* voip_ring_off_content_create */
-
-static void voip_phone_ring_off_timeout_cb(void * para)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    voipcall_params.ring_off_timer_id = NULL;
-    voipcall_params.ring_off_timeout  = true;
-    watch_voip_call_response_no_carrier(voipcall_params.index, 0);
-}
-
-static void voip_phone_callreq_timeout_cb(void * para)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    voipcall_params.callreq_timer_id = NULL;
-    voip_call_hangup_req(TRUE);
-}
-
-static void voip_ring_hook_action(lv_obj_t * btn, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED != e) {
-        return;
-    }
-
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    if(btn) {
-        lv_obj_set_click(btn, false);
-    }
-
-    Hal_Tone_Play_End();
-
-    int8_t ret = voip_call_answer_req();
-    if(ret < 0) {
-        watch_voip_call_response_no_carrier(voipcall_params.index, 0);
-    }
-}
-
-static void voip_phone_cleanup(void)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_obj_t * slider_activit_obj = lv_watch_get_activity_obj(ACT_ID_SLIDER);
-
-    if(slider_activit_obj) {
-        lv_obj_del(slider_activit_obj);
-    }
-
-    lv_obj_t * activity_obj = voip_phone_get_activity_obj();
-    if(activity_obj) {
-        lv_obj_del(activity_obj);
-    }
-}
-
-static void voip_anim_fp_dialing_ring(lv_obj_t * obj, int32_t x)
-{
-    if(obj != NULL) {
-        lv_obj_set_x(obj, x);
-    }
-}
-
-static void voip_dialing_animation(lv_obj_t * par)
-{
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
-
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return;
-    }
-
-    lv_obj_t * img = lv_img_create(voip_phone_get_obj(), NULL);
-    lv_img_set_src(img, LV_SYMBOL_RIGHT);
-    lv_obj_add_style(img, LV_OBJ_PART_MAIN, &lv_watch_image);
-    lv_obj_set_style_local_text_font(img, LV_IMG_PART_MAIN, LV_STATE_DEFAULT, LV_THEME_WATCH_NIGHT_SYMBOL_NORMAL);
-    lv_obj_set_y(img, lv_obj_get_y(par) + lv_obj_get_y(lv_obj_get_parent(par)));
-    ext->phone_animation_obj = img;
-
-    /*Create an animation to move the button continuously left to right*/
-    lv_anim_t a;
-    lv_anim_path_t path;
-    lv_anim_value_t start = lv_obj_get_x(par) + lv_obj_get_width(par) + 6;
-    lv_anim_value_t end = start + 30;
-
-    lv_anim_path_init(&path);
-    lv_anim_path_set_cb(&path, lv_anim_path_linear);
-
-    lv_anim_init(&a);
-    lv_anim_set_var(&a, img);
-    lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)voip_anim_fp_dialing_ring);
-    lv_anim_set_path(&a, &path);
-    lv_anim_set_values(&a, start, end);
-    lv_anim_set_time(&a, 400);
-    lv_anim_set_playback_time(&a, 400);
-    lv_anim_set_playback_delay(&a, 0);
-    lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
-    lv_anim_set_repeat_delay(&a, 500);
-
-    lv_anim_start(&a);
-}
-
-static void voip_ring_animation(lv_obj_t * par)
-{
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
-
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return;
-    }
-
-    lv_obj_t * img = lv_img_create(voip_phone_get_obj(), NULL);
-    lv_img_set_src(img, LV_SYMBOL_LEFT);
-    lv_obj_add_style(img, LV_OBJ_PART_MAIN, &lv_watch_image);
-    lv_obj_set_style_local_text_font(img, LV_IMG_PART_MAIN, LV_STATE_DEFAULT, LV_THEME_WATCH_NIGHT_SYMBOL_NORMAL);
-    lv_obj_set_y(img, lv_obj_get_y(par) + lv_obj_get_y(lv_obj_get_parent(par)));
-    ext->phone_animation_obj = img;
-
-    /*Create an animation to move the button continuously left to right*/
-    lv_anim_t a;
-    lv_anim_path_t path;
-    lv_anim_value_t start = lv_obj_get_x(par) - 20;
-    lv_anim_value_t end = start - 30;
-
-    lv_anim_path_init(&path);
-    lv_anim_path_set_cb(&path, lv_anim_path_linear);
-
-    lv_anim_init(&a);
-    lv_anim_set_var(&a, img);
-    lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t)voip_anim_fp_dialing_ring);
-    lv_anim_set_path(&a, &path);
-    lv_anim_set_values(&a, start, end);
-    lv_anim_set_time(&a, 400);
-    lv_anim_set_playback_time(&a, 400);
-    lv_anim_set_playback_delay(&a, 0);
-    lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
-    lv_anim_set_repeat_delay(&a, 500);
-
-    lv_anim_start(&a);
-}
-
-static void voip_connected_animation(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)voip_anim_fp_connected);
-    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);
-}
-
-static void voip_anim_fp_connected(lv_anim_t * anim)
-{
-    lv_obj_t        *        obj = (lv_obj_t *)anim->var;
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
-
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return;
-    }
-
-    char str[20] = "";
-    voip_get_time_elaps(ext->connect_start_time, str, 20);
-    if(obj) {
-        lv_label_set_text(obj, str);
-    }
-}
-
-static void voip_phone_dialing(lv_obj_t * content)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
-
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return;
-    }
-
-    lv_obj_t * cont;
-
-    // label dialing
-    lv_obj_t * label = lv_label_create(content, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-    lv_label_set_text_id(label, WATCH_TEXT_ID_DAILING);
-    lv_obj_set_click(label, false);
-    ext->phone_status_label = label;
-
-    // img small
-    lv_obj_t * img = lv_img_create(content, NULL);
-    if(voipcall_params.img_src_small) {
-        lv_img_set_src(img, voipcall_params.img_src_small);
-    }
-
-    cont = voip_phone_cont_create(content, LV_LAYOUT_ROW_MID, &lv_watch_style_transp, -1);
-
-    // name
-    label = lv_label_create(cont, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-    if(strlen(voipcall_params.name) > 0) {
-        lv_label_set_text(label, voipcall_params.name);
-    } else {
-        lv_label_set_text(label, "");
-    }
-    lv_obj_set_click(label, false);
-
-    // number
-    label = lv_label_create(cont, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-    lv_label_set_text(label, voipcall_params.number);
-    lv_obj_set_click(label, false);
-
-    cont = voip_phone_cont_create(content, LV_LAYOUT_OFF, &lv_watch_style_transp, lv_obj_get_width(content) - 40);
-
-    // btn volume
-    lv_obj_t * btn;
-    btn = lv_imgbtn_create(cont, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_VOLUME);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_VOLUME);
-    lv_obj_set_event_cb(btn, voip_volume_btn_action);
-    lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
-
-    // btn ring off
-    btn = lv_imgbtn_create(cont, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_OFF);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_OFF);
-    lv_obj_set_event_cb(btn, voip_ring_off_action);
-    lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
-} /* voip_phone_dialing */
-
-static void voip_phone_ring(lv_obj_t * content)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
-
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return;
-    }
-    lv_obj_t * label;
-
-    // label ringing
-    label = lv_label_create(content, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-    lv_label_set_text_id(label, WATCH_TEXT_ID_RINGING);
-    lv_obj_set_click(label, false);
-    ext->phone_status_label = label;
-
-    // img small
-    lv_obj_t * img = lv_img_create(content, NULL);
-    if(voipcall_params.img_src_small) {
-        lv_img_set_src(img, voipcall_params.img_src_small);
-    }
-
-    lv_obj_t * cont = voip_phone_cont_create(content, LV_LAYOUT_ROW_MID, &lv_watch_style_transp, -1);
-
-    // name
-    label = lv_label_create(cont, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-    if(strlen(voipcall_params.name) > 0) {
-        lv_label_set_text(label, voipcall_params.name);
-    } else {
-        lv_label_set_text(label, "");
-    }
-    lv_obj_set_click(label, false);
-
-    // number
-    label = lv_label_create(cont, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-    lv_label_set_text(label, voipcall_params.number);
-
-    lv_obj_set_click(label, false);
-
-    cont = voip_phone_cont_create(content, LV_LAYOUT_OFF, &lv_watch_style_transp, lv_obj_get_width(content) - 40);
-
-    // btn ring off
-    lv_obj_t * btn;
-    btn = lv_imgbtn_create(cont, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_OFF);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_OFF);
-    lv_obj_set_event_cb(btn, voip_ring_off_action);
-    lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
-
-    // btn ring hook
-    btn = lv_imgbtn_create(cont, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_HOOK);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_HOOK);
-    lv_obj_set_event_cb(btn, voip_ring_hook_action);
-    lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
-} /* voip_phone_ring */
-
-static void voip_phone_connected(lv_obj_t * content)
-{
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
-
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) {
-        return;
-    }
-
-    if(voipcall_params.voip_call_type == MODEM_VIDEO_CALL_TYPE_VOICE) {
-        printf("voice call connected %s %d\n", __FUNCTION__, __LINE__);
-        ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_NULL;
-        // img small
-        lv_obj_t * img = lv_img_create(content, NULL);
-
-        printf("%s: img_src_small %p\n", __FUNCTION__, voipcall_params.img_src_small);
-        if(voipcall_params.img_src_small) {
-            lv_img_set_src(img, voipcall_params.img_src_small);
-        }
-        hal_rtc_t rtc_curr;                    // current rtc time
-        Hal_Rtc_Gettime(&rtc_curr);
-        ext->connect_start_time = time_to_seconds(&rtc_curr);
-
-        lv_obj_t * cont = voip_phone_cont_create(content, LV_LAYOUT_ROW_MID, &lv_watch_style_transp, -1);
-        lv_obj_set_width(cont, lv_obj_get_width(content));
-        lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-        // name
-        lv_obj_t * label = lv_label_create(cont, NULL);
-        lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-        if(strlen(voipcall_params.name) > 0) {
-            lv_label_set_text(label, voipcall_params.name);
-        } else {
-            lv_label_set_text(label, "");
-        }
-        lv_obj_set_click(label, false);
-        lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-
-        // number
-        label = lv_label_create(cont, NULL);
-        lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-        lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-        lv_label_set_text(label, voipcall_params.number);
-        lv_obj_set_click(label, false);
-
-        // duration
-        label = lv_label_create(content, NULL);
-        lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-        lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-        lv_label_set_text(label, "0:0");
-        lv_obj_set_click(label, false);
-        lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
-        ext->phone_status_label = label;
-
-        cont = voip_phone_cont_create(content, LV_LAYOUT_OFF, &lv_watch_style_transp, lv_obj_get_width(content) - 40);
-
-        // btn volume
-        lv_obj_t * btn;
-        btn = lv_imgbtn_create(cont, NULL);
-        lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_VOLUME);
-        lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_VOLUME);
-        lv_obj_set_event_cb(btn, voip_volume_btn_action);
-        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
-
-        // btn ring off
-        btn = lv_imgbtn_create(cont, NULL);
-        lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_OFF);
-        lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_OFF);
-        lv_obj_set_event_cb(btn, voip_ring_off_action);
-        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
-    } else {
-        lv_obj_t * canvas;
-        lv_obj_t * label;
-        lv_obj_t * btn;
-
-        printf("video call connected %s %d\n", __FUNCTION__, __LINE__);
-
-        ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_REMOTE;
-        if((ext->voiph263fmt == VOIP_H263_FMT_SQCIF) || (ext->voiph263fmt == VOIP_H263_FMT_QCIF)) {
-            hal_rtc_t rtc_curr;                        // current rtc time
-            Hal_Rtc_Gettime(&rtc_curr);
-            ext->connect_start_time = time_to_seconds(&rtc_curr);
-
-            lv_obj_t * cont = voip_phone_cont_create(content, LV_LAYOUT_OFF, &lv_watch_style_transp, -1);
-            lv_obj_set_width(cont, lv_obj_get_width(content));
-            lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-
-            /*Create the canvas object*/
-            canvas = lv_canvas_create(cont, NULL);
-            lv_obj_set_click(canvas, true);
-            lv_obj_set_event_cb(canvas, canvas_button_hidden_event_cb);
-            video_call_add_element(canvas);
-            ext->canvas = canvas;
-
-            lv_obj_align(canvas, cont, LV_ALIGN_IN_TOP_MID, 0, 0);
-            /*Assign the buffer to the canvas*/
-            lv_img_set_src(canvas, ICON_VIDEO_CALL);
-            voip_signal_check_start(ext);
-
-            // duration
-            label = lv_label_create(canvas, NULL);
-            lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-            lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-            lv_label_set_text(label, "0:0");
-            lv_obj_set_click(label, false);
-            lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
-            if(LV_BIDI_DIR_RTL == lv_obj_get_base_dir(content)) {
-                lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_RIGHT, -lv_obj_get_width(label), 0);
-            }
-            ext->phone_status_label = label;
-
-            // signal weak notification
-            label = lv_label_create(canvas, NULL);
-            lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font30);
-            lv_label_set_text_id(label, WATCH_TEXT_ID_SIGNAL_WEAK);
-            lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-            lv_obj_align(label, canvas, LV_ALIGN_CENTER, 0, -10);
-            lv_obj_set_click(label, false);
-            lv_obj_set_hidden(label, true);
-            ext->signal_weak_label = label;
-
-            cont = voip_phone_cont_create(content, LV_LAYOUT_OFF, &lv_watch_style_transp, lv_obj_get_width(content) - 40);
-            // btn volume
-            btn = lv_imgbtn_create(cont, NULL);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_VOLUME);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_VOLUME);
-            lv_obj_set_event_cb(btn, voip_volume_btn_action);
-            lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
-
-            // btn switch video
-            btn = lv_imgbtn_create(cont, NULL);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_SETTING_VOLTE);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_SETTING_VOLTE);
-            lv_obj_set_event_cb(btn, voip_local_remote_switch_action);
-            lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
-
-            // btn ring off
-            btn = lv_imgbtn_create(cont, NULL);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_OFF);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_OFF);
-            lv_obj_set_event_cb(btn, voip_ring_off_action);
-            lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
-        } else if((ext->voiph263fmt == VOIP_H263_FMT_CIF)
-                  || (ext->voiph263fmt == VOIP_H263_FMT_4CIF)
-                  || (ext->voiph263fmt == VOIP_H263_FMT_16CIF)
-                  || (ext->voiph263fmt == VOIP_H263_FMT_OTHER)) {
-            /*Create the canvas object*/
-            canvas = lv_canvas_create(content, NULL);
-            lv_obj_set_click(canvas, true);
-            lv_obj_set_event_cb(canvas, canvas_button_hidden_event_cb);
-            video_call_add_element(canvas);
-            ext->canvas = canvas;
-
-            /*Assign the buffer to the canvas*/
-            lv_img_set_src(canvas, ICON_VIDEO_CALL);
-            voip_signal_check_start(ext);
-
-            // duration
-            label = lv_label_create(canvas, NULL);
-            lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-            lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-            lv_label_set_text(label, "0:0");
-            lv_obj_set_click(label, false);
-            lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
-            if(LV_BIDI_DIR_RTL == lv_obj_get_base_dir(content)) {
-                lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_RIGHT, -lv_obj_get_width(label), 0);
-            }
-            ext->phone_status_label = label;
-            ext->connect_time       = label;
-
-            // signal weak notification
-            label = lv_label_create(canvas, NULL);
-            lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font30);
-            lv_label_set_text_id(label, WATCH_TEXT_ID_SIGNAL_WEAK);
-            lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-            lv_obj_align(label, canvas, LV_ALIGN_CENTER, 0, -10);
-            lv_obj_set_click(label, false);
-            lv_obj_set_hidden(label, true);
-            ext->signal_weak_label = label;
-
-            // btn volume
-            btn = lv_imgbtn_create(canvas, NULL);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_VOLUME);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_VOLUME);
-            lv_obj_set_event_cb(btn, voip_volume_btn_action);
-            lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_LEFT, 0, -20);
-            lv_obj_add_style(btn, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-            ext->ring_value_button = btn;
-
-            // btn switch video
-            btn = lv_imgbtn_create(canvas, NULL);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_SETTING_VOLTE);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_SETTING_VOLTE);
-            lv_obj_set_event_cb(btn, voip_local_remote_switch_action);
-            lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_MID, 0, -20);
-            lv_obj_add_style(btn, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-            ext->view_switch_button = btn;
-
-            // btn ring off
-            btn = lv_imgbtn_create(canvas, NULL);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_OFF);
-            lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_OFF);
-            lv_obj_set_event_cb(btn, voip_ring_off_action);
-            lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_RIGHT, 0, -20);
-            lv_obj_add_style(btn, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
-            ext->ring_off_button = btn;
-
-            lv_obj_set_hidden(ext->connect_time, ext->canvas_button_hidden_flag);
-            lv_obj_set_hidden(ext->ring_value_button, ext->canvas_button_hidden_flag);
-            lv_obj_set_hidden(ext->view_switch_button, ext->canvas_button_hidden_flag);
-            lv_obj_set_hidden(ext->ring_off_button, ext->canvas_button_hidden_flag);
-        }
-
-        if(voip_phone_get_obj()) {
-            lv_watch_obj_set_down_slide_cb(voip_phone_get_obj(), voip_phone_down_slide_callback);
-        }
-    }
-} /* voip_phone_connected */
-
-static void voip_phone_prepare_destory(lv_obj_t * activity_obj)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    lv_watch_png_cache_all_free();
-
-    // stop playing tone
-    Hal_Tone_Play_End();
-
-    // ring off
-    voip_ring_off_action(NULL, LV_EVENT_CLICKED);
-
-    // stop ring off timer
-    if(NULL != voipcall_params.ring_off_timer_id) {
-        Hal_Timer_Stop(voipcall_params.ring_off_timer_id);
-        voipcall_params.ring_off_timer_id = NULL;
-    }
-
-    // stop callreq timer
-    if(NULL != voipcall_params.callreq_timer_id) {
-        Hal_Timer_Stop(voipcall_params.callreq_timer_id);
-        voipcall_params.callreq_timer_id = NULL;
-    }
-
-    Hal_Mem_Set(&voipcall_params, 0, sizeof(voip_phone_call_params_t));
-    voipcall_params.state = MMI_VOIP_CALL_STATE_NULL;
-}
-
-static void voip_get_time_elaps(uint32_t last_time, char * str, int8_t size)
-{
-    hal_rtc_t rtc_curr;            // current rtc time
-    uint32_t  second_curr = 0;     // seconds of current time
-
-    Hal_Rtc_Gettime(&rtc_curr);
-    second_curr = time_to_seconds(&rtc_curr);
-
-    uint32_t elaps   = second_curr - last_time;
-    uint32_t seconds = elaps % 60;
-    uint32_t minutes = elaps / 60;
-    uint32_t hours   = minutes / 60;
-    minutes = minutes % 60;
-
-    if(hours == 0) {
-        if(lv_lang_act() == LANG_CH) {
-            snprintf(str, size, "%.2d:%.2d", minutes, seconds);
-        } else {
-            snprintf(str, size, "%.2d:%.2d", minutes, seconds);
-        }
-    } else {
-        if(lv_lang_act() == LANG_CH) {
-            snprintf(str, size, "%.2d:%.2d:%.2d", hours, minutes, seconds);
-        } else {
-            snprintf(str, size, "%.2d:%.2d:%.2d", hours, minutes, seconds);
-        }
-    }
-}
-
-#if VOIP_PHONE_TEST != 0
-
-static void watch_voip_call_response_originating(int32_t index)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    if(MMI_VOIP_CALL_STATE_DIALING == voipcall_params.state) {
-        return;
-    }
-
-    printf("%s: %d\n", __func__, index);
-    voipcall_params.index = index;
-
-    // state: NULL -> DIALLING
-    voipcall_params.state = MMI_VOIP_CALL_STATE_DIALING;
-}
-#endif
-
-void watch_voip_call_response_alerting(int32_t index)
-{
-    printf("%s %d index is %d\n", __FUNCTION__, __LINE__, index);
-    if(MMI_VOIP_CALL_STATE_ALERTING == voipcall_params.state) {
-        return;
-    }
-
-    uint8_t volume;
-
-    // state: DIALLING -> ALERTING
-    voipcall_params.state = MMI_VOIP_CALL_STATE_ALERTING;
-
-    // set speaker volume
-    UI_NV_Read_Req(NV_SECTION_UI_PHONE, VOIP_PHONE_NV_VOLUME_OFFSET, 1, &volume);
-    if(!Hal_Set_BT_Audio_Path((HAL_SPEAKER_GAIN)volume))
-        Hal_Call_Speaker(HAL_CALL_SPK_ON, (HAL_SPEAKER_GAIN)volume);
-}
-
-void watch_voip_call_response_ring(int32_t index)
-{
-    printf("%s: %d\n", __func__, index);
-    Hal_NFFS_File_Play_Repeat(AUDIO_INCOMING_CALL, query_current_volume());
-
-    voipcall_params.state = MMI_VOIP_CALL_STATE_ALERTING;
-}
-
-void watch_voip_call_response_connect(int32_t index)
-{
-    printf("%s %d index is %d\n", __FUNCTION__, __LINE__, index);
-    if(MMI_VOIP_CALL_STATE_ACTIVE == voipcall_params.state) {
-        return;
-    }
-
-    voipcall_params.state = MMI_VOIP_CALL_STATE_ACTIVE;
-
-    // stop callreq timer
-    if(NULL != voipcall_params.callreq_timer_id) {
-        Hal_Timer_Stop(voipcall_params.callreq_timer_id);
-        voipcall_params.callreq_timer_id = NULL;
-    }
-
-    // stop playing tone
-    Hal_Tone_Play_End();
-
-    Hal_Set_Voice_Call_Status(VOICE_CALL_START);
-
-    // create connected UI
-    voip_phone_create(NULL, VOIP_PHONE_UI_CONNECTED);
-}
-
-void watch_voip_call_response_disconnect(int32_t index)
-{
-    // not used
-    (void)index;
-    printf("%s: %d\n", __func__, index);
-    Hal_Tone_Play_End();
-
-    // create ring off UI
-    if(voip_phone_get_activity_obj()) {
-        voip_phone_ring_off_create();
-        // remove donw slider handle
-        lv_watch_obj_set_down_slide_cb(voip_phone_get_obj(), NULL);
-    }
-    Hal_Mem_Set(&voipcall_params, 0, sizeof(voip_phone_call_params_t));
-    voipcall_params.state = MMI_VOIP_CALL_STATE_NULL;
-}
-
-void watch_voip_call_response_no_carrier(int32_t index, uint8_t isNoCarrier)
-{
-    printf("%s: %d\n", __func__, __LINE__);
-
-    if((false == voipcall_params.ring_off_timeout)
-            && (1 == isNoCarrier)
-            && (MMI_VOIP_CALL_STATE_NULL == voipcall_params.state)) {
-        printf("%s: ignore no carrier in state NULL\n", __func__);
-        return;
-    }
-
-    printf("%s: %d\n", __func__, index);
-
-    // stop playing tone
-    Hal_Tone_Play_End();
-
-    // stop ring off timer
-    if(NULL != voipcall_params.ring_off_timer_id) {
-        Hal_Timer_Stop(voipcall_params.ring_off_timer_id);
-        voipcall_params.ring_off_timer_id = NULL;
-    }
-
-    // stop callreq timer
-    if(NULL != voipcall_params.callreq_timer_id) {
-        Hal_Timer_Stop(voipcall_params.callreq_timer_id);
-        voipcall_params.callreq_timer_id = NULL;
-    }
-
-    // create ring off UI
-    lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VOIPPHONE);
-    if(activity_obj) {
-        voip_phone_ring_off_create();
-    }
-#if 0
-    // display alarm if it is buffered
-    if(voipcall_params.buffer_alarm) {
-        Hal_NFFS_File_Play_Repeat(AUDIO_ALARM, query_current_volume());
-        alarm_create(NULL);
-    } else {
-        // indicate voice msg
-        voice_msg_call_end();
-    }
-#endif
-    if(MMI_MODEM_CALL_STATE_NULL != phone_get_call_state()) {
-        printf("%s tele call is on going, keep para of audio\n", __FUNCTION__);
-        Hal_Set_Voice_Call_Status(VOICE_CALL_END);
-        Hal_Disconnect_BT_Audio_Path();
-    }
-    Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
-    watch_wakeup_time_reset();
-
-    Hal_Mem_Set(&voipcall_params, 0, sizeof(voip_phone_call_params_t));
-    voipcall_params.state = MMI_VOIP_CALL_STATE_NULL;
-} /* watch_voip_call_response_no_carrier */
-
-void watch_voip_call_response_state_change(MMI_Modem_Call_Response_State_Change_t * state)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    for(uint8_t i = 0; i < state->count; i++) {
-        Hal_Mem_Free(state->calls[i].number);
-        Hal_Mem_Free(state->calls[i].name);
-    }
-    Hal_Mem_Free(state->calls);
-    Hal_Mem_Free(state);
-}
-
-void voip_phone_voice_call_req(char * number, MODEM_VIDEO_CALL_TYPE voip_call_type)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-
-    char * dial_number = NULL;
-
-    // check call state
-    if(MMI_VOIP_CALL_STATE_NULL != voipcall_params.state) {
-        printf("%s: only support one call, state=%d\n", __func__, voipcall_params.state);
-        Hal_Mem_Free(number);
-        return;
-    }
-
-    // stop ring off timer
-    if(NULL != call_params.ring_off_timer_id) {
-        Hal_Timer_Stop(call_params.ring_off_timer_id);
-        call_params.ring_off_timer_id = NULL;
-    }
-
-    // stop callreq timer
-    if(NULL != voipcall_params.callreq_timer_id) {
-        Hal_Timer_Stop(voipcall_params.callreq_timer_id);
-        voipcall_params.callreq_timer_id = NULL;
-    }
-
-    // set call parameters
-    Hal_Mem_Set(&voipcall_params, 0, sizeof(voip_phone_call_params_t));
-    voipcall_params.is_mt          = false;
-    voipcall_params.state          = MMI_VOIP_CALL_STATE_DIALING;
-    voipcall_params.voip_call_type = voip_call_type;
-
-    strncpy(voipcall_params.number, number, NV_CONTACTS_MAX_NUMBER_LEN);
-
-    voip_phonebook_contact_t * contact_info = voip_phonebook_get_contact_info(number);
-    if(NULL != contact_info) {
-        Hal_Mem_Copy(voipcall_params.name, contact_info->contact_name, NV_CONTACTS_MAX_NAME_LEN);
-        voipcall_params.img_src       = contact_info->img_src;
-        voipcall_params.img_src_small = contact_info->img_src_small;
-
-        Hal_Mem_Free(contact_info);
-    } else {
-        voipcall_params.img_src       = ICON_FAMILY;
-        voipcall_params.img_src_small = ICON_FAMILY_SMALL;
-    }
-
-    // Initiate voice call
-    dial_number = (char *)Hal_Mem_Alloc(strlen(voipcall_params.number) + 1);
-    strncpy(dial_number, voipcall_params.number, strlen(voipcall_params.number) + 1);
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    int8_t ret = voip_call_dial_req(voip_call_type, dial_number);
-    UINT32 timeout;
-    if(NULL == voipcall_params.callreq_timer_id) {
-        if(ret >= 0) {
-            timeout = VOIP_CALLREQ_TIMER_LEN;
-        } else {
-            timeout = 1000; //ms
-        }
-        voipcall_params.callreq_timer_id = Hal_Timer_Start(timeout, voip_phone_callreq_timeout_cb, NULL, 0);
-    }
-    // create dialing UI
-    voip_rat_check_start();
-    voip_phone_create(NULL, VOIP_PHONE_UI_DIALING);
-    Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_2,voip_audio_ctrl_callback);
-    Hal_Set_Voice_Call_Status(VOICE_CALL_START);
-} /* voip_phone_voice_call_req */
-
-void watch_voip_call_response_bottom_error(void)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    voip_phone_cleanup();
-    Hal_Mem_Set(&voipcall_params, 0, sizeof(voip_phone_call_params_t));
-}
-
-void watch_voip_call_response_bottom_need_redail(void)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    //voip_call_dial_req(voipcall_params.voip_call_type, voipcall_params.number);
-}
-
-int get_voipcall_params_index()
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    return(voipcall_params.index);
-}
-
-void watch_voip_incomingcall_response(char * number, int32_t calltype)
-{
-    char           *          pNumber = NULL;
-    uint8_t                  volume;
-    voip_phonebook_contact_t * contact_info = NULL;
-
-    printf("%s: number=%s, calltype %d\n", __FUNCTION__, number, calltype);
-
-    if((MMI_MODEM_CALL_STATE_NULL != phone_get_call_state()) || is_rat_gsm()) {
-        printf("tele call is on going  %d or in gsm mode, reject voip call\n", phone_get_call_state());
-        voip_call_reject_req(TRUE);
-        return;
-    }
-
-    Hal_Mem_Set(&voipcall_params, 0, sizeof(voip_phone_call_params_t));
-    voipcall_params.voip_call_type = (MODEM_VIDEO_CALL_TYPE)calltype;
-//    voipcall_params.index          = index;
-    voipcall_params.is_mt          = true;
-    voipcall_params.state          = MMI_VOIP_CALL_STATE_INCOMING;
-    strncpy(voipcall_params.number, number, NV_CONTACTS_MAX_NUMBER_LEN);
-
-    pNumber = voip_phonebook_get_phone_number(0);
-    if(NULL == pNumber) {     // no contact
-        contact_info = (voip_phonebook_contact_t *)Hal_Mem_Alloc(sizeof(voip_phonebook_contact_t));
-        Hal_Mem_Set(contact_info, 0, sizeof(voip_phonebook_contact_t));
-        contact_info->img_src       = ICON_FAMILY;
-        contact_info->img_src_small = ICON_FAMILY_SMALL;
-        printf("%s: img_src_small %p\n", __FUNCTION__, contact_info->img_src_small);
-        contact_info->contact_type = 2;
-        Hal_Mem_Free(number);
-    } else {
-        Hal_Mem_Free(pNumber);
-        contact_info = voip_phonebook_get_contact_info(number);
-    }
-
-    if(NULL != contact_info) {
-        Hal_Mem_Copy(voipcall_params.name, contact_info->contact_name, NV_CONTACTS_MAX_NAME_LEN);
-        voipcall_params.img_src       = contact_info->img_src;
-        voipcall_params.img_src_small = contact_info->img_src_small;
-        Hal_Mem_Free(contact_info);
-
-#if 0
-        // clean up alarm if any
-        alarm_cleanup();
-
-        // inform speech recog & voice msg
-        speech_recog_mt_call_ind();
-        voice_msg_mt_call_ind();
-#endif
-        if(AUDIO_CTRL_PRIORITY_2 == Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_2,voip_audio_ctrl_callback))
-        {
-            watch_set_lcd_status(true);
-            // set speaker volume
-
-            UI_NV_Read_Req(NV_SECTION_UI_PHONE, VOIP_PHONE_NV_VOLUME_OFFSET, 1, &volume);
-            if(!Hal_Set_BT_Audio_Path((HAL_SPEAKER_GAIN)volume))
-                Hal_Call_Speaker(HAL_CALL_SPK_ON, (HAL_SPEAKER_GAIN)volume);
-
-            // play tone
-            Hal_NFFS_File_Play_Repeat(AUDIO_INCOMING_CALL, query_current_volume());
-
-            // start rat checking
-            voip_rat_check_start();
-
-            // create ring UI
-            voip_phone_create(NULL, VOIP_PHONE_UI_INCOMING);
-        }
-        else
-        { // AUDIO_CTRL_PRIORITY_1
-            printf("%s: phone call has been run, auto reject\n", __func__);
-            // auto reject
-            voip_call_reject_req(FALSE);
-            voip_signal_check_stop();
-            voip_rat_check_stop();
-
-            // stop ring off timer
-            if(NULL != voipcall_params.ring_off_timer_id) {
-                Hal_Timer_Stop(voipcall_params.ring_off_timer_id);
-                voipcall_params.ring_off_timer_id = NULL;
-            }
-
-            // stop callreq timer
-            if(NULL != voipcall_params.callreq_timer_id) {
-                Hal_Timer_Stop(voipcall_params.callreq_timer_id);
-                voipcall_params.callreq_timer_id = NULL;
-            }
-
-            Hal_Mem_Set(&voipcall_params, 0, sizeof(voip_phone_call_params_t));
-            voipcall_params.state = MMI_VOIP_CALL_STATE_NULL;
-            voip_set_volume_when_slider_act();
-            voip_phone_cleanup();
-            lv_watch_png_cache_all_free();
-            Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
-        }
-    } else {
-        printf("%s: not a contact, auto reject\n", __func__);
-        // auto reject
-        voip_call_reject_req(TRUE);
-
-#if VOIP_PHONE_TEST
-        watch_voip_call_response_no_carrier(voipcall_params.index, 0);
-#endif
-    }
-} /* watch_voip_incomingcall_response */
-
-static lv_res_t voip_call_fail_ind(lv_obj_t * obj)
-{
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    lv_obj_t * call_fail_obj = lv_obj_create(obj, NULL);
-    LV_ASSERT_MEM(call_fail_obj);
-    if(call_fail_obj == NULL) {
-        return(LV_RES_INV);
-    }
-
-    lv_obj_set_size(call_fail_obj, lv_obj_get_width(obj), lv_obj_get_height(obj));
-    lv_obj_add_style(call_fail_obj, LV_OBJ_PART_MAIN, &lv_style_transp_tight);
-    lv_obj_t * content = lv_cont_create(call_fail_obj, NULL);
-    LV_ASSERT_MEM(content);
-
-    if(content == NULL) {
-        return(LV_RES_INV);
-    }
-    lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_cont_opa1);
-    lv_obj_set_size(content, 204, 44);
-    lv_obj_align(content, call_fail_obj, LV_ALIGN_CENTER, 0, 30);
-    lv_cont_set_layout(content, LV_LAYOUT_CENTER);
-    lv_obj_set_click(content, false);
-
-    lv_obj_t * label = lv_label_create(content, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-
-    if(is_rat_gsm())
-        lv_label_set_text_id(label, WATCH_TEXT_ID_NETWORK_WRONG);
-    else
-        lv_label_set_text_id(label, WATCH_TEXT_ID_NO_SIM_OR_NETWORK);
-    lv_obj_set_click(label, false);
-
-    lv_anim_t a;
-    lv_anim_init(&a);
-    lv_anim_set_var(&a, call_fail_obj);
-    lv_anim_set_ready_cb(&a, (lv_anim_ready_cb_t)voip_call_fail_message_cleanup);
-    lv_anim_set_time(&a, 2000);
-    lv_anim_start(&a);
-
-    return(LV_RES_OK);
-}
-
-static void voip_call_fail_message_cleanup(lv_anim_t * anim)
-{
-    lv_obj_del(anim->var);
-}
-
-void watch_ui_voip_message_handle(void * msg)
-{
-}
-
-void watch_voip_autotest_handle(void * testmsg)
-{
-}
-
-static bool voip_check_mo_permission(void)
-{
-    if((!watch_modem_sim_present_check_req())
-       || (MMI_MODEM_SIGNAL_BAR_0 == watch_modem_get_signal_bar_req())
-//       || (MODEM_VIDEO_CALL_REG_OK != watch_modem_video_call_get_reg_stat_req())
-       || (is_rat_gsm())) {
-        return(false);
-    }
-    return(true);
-}
-
-static void voip_local_remote_switch_action(lv_obj_t * btn, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED != e) {
-        return;
-    }
-
-    printf("%s %d\n", __FUNCTION__, __LINE__);
-    lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VOIPPHONE);
-    if(!activity_obj) {
-        return;
-    }
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
-    if(!ext) {
-        return;
-    }
-    if(ext->local_remote_switch_flag == VOIP_REMOTE_SWITCH_NULL) {
-        return;
-    }
-    if(ext->local_remote_switch_flag == VOIP_REMOTE_SWITCH_REMOTE) {
-        ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_LOCAL;
-    } else {
-        ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_REMOTE;
-    }
-}
-
-static lv_res_t video_call_element_signal_func(lv_obj_t * element, lv_signal_t sign, void * param)
-{
-    lv_res_t res;
-
-    //printf("%s, sign=%d\n", __FUNCTION__, sign);
-    /* if not click signs, invoke ancient handler and return */
-    if(sign != LV_SIGNAL_PRESSING && sign != LV_SIGNAL_PRESSED && sign != LV_SIGNAL_RELEASED && sign != LV_SIGNAL_PRESS_LOST) {
-        /* Include the ancient signal function */
-        lv_signal_cb_t sign_func = (lv_signal_cb_t)(lv_obj_get_user_data(element).user_data);
-        res = sign_func(element, sign, param);
-        if(res != LV_RES_OK) {
-            return(res);
-        }
-
-        return(LV_RES_OK);
-    }
-
-    lv_obj_t * obj = lv_obj_get_parent(element);
-    while(obj) {
-        if(lv_obj_get_signal_cb(obj) != lv_watch_obj_signal) {
-            obj = lv_obj_get_parent(obj);
-        } else {
-            break;
-        }
-    }
-    if(obj == NULL) {
-        return(LV_RES_INV);
-    }
-
-    res = lv_watch_obj_signal(obj, sign, param);
-    if(res != LV_RES_OK) {
-        return(res);
-    }
-
-    /* Include the ancient signal function */
-    lv_signal_cb_t sign_func = (lv_signal_cb_t)(lv_obj_get_user_data(element).user_data);
-    res = sign_func(element, sign, param);
-    if(res != LV_RES_OK) {
-        return(res);
-    }
-
-    return(LV_RES_OK);
-} /* video_call_element_signal_func */
-
-static void video_call_add_element(lv_obj_t * element)
-{
-    lv_watch_set_free_ptr(element, lv_obj_get_signal_cb(element));
-    lv_obj_set_signal_cb(element, video_call_element_signal_func);
-    lv_obj_add_protect(element, LV_PROTECT_PRESS_LOST | LV_PROTECT_CLICK_FOCUS);
-}
-
-static void canvas_button_hidden_event_cb(lv_obj_t * obj, lv_event_t e)
-{
-    if(LV_EVENT_CLICKED == e) {
-        printf("%s %d\n", __FUNCTION__, __LINE__);
-        lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
-        if(!ext) {
-            return;
-        }
-        if(ext->canvas_button_hidden_flag == NOT_HIDDEN) {
-            ext->canvas_button_hidden_flag = HIDDEN;
-        } else {
-            ext->canvas_button_hidden_flag = NOT_HIDDEN;
-        }
-
-        lv_obj_set_hidden(ext->connect_time, ext->canvas_button_hidden_flag);
-        lv_obj_set_hidden(ext->ring_value_button, ext->canvas_button_hidden_flag);
-        lv_obj_set_hidden(ext->view_switch_button, ext->canvas_button_hidden_flag);
-        lv_obj_set_hidden(ext->ring_off_button, ext->canvas_button_hidden_flag);
-    }
-}
-
-static void voip_set_volume_when_slider_act(void)
-{
-    printf("%s\n", __FUNCTION__);
-    if(lv_watch_get_activity_obj(ACT_ID_SLIDER)) {
-        if(MMI_VOIP_CALL_STATE_NULL != voipcall_params.state) {
-            uint8_t volume = voip_get_call_volume();
-            printf("set nv, speaker volume is %d.\n", volume);
-            UI_NV_Write_Req(NV_SECTION_UI_PHONE, 0, 1, &volume);
-        }
-    }
-}
-
-#if VIDEO_SIGNAL_CHECK
-static void signal_check(lv_task_t *task)
-{
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
-    if(!ext) return;
-
-    if((false == is_rat_gsm()) &&
-       (watch_modem_get_signal_bar_req() < MMI_MODEM_SIGNAL_BAR_3)) {
-        lv_obj_set_hidden(ext->signal_weak_label, false);
-    } else {
-        lv_obj_set_hidden(ext->signal_weak_label, true);
-    }
-}
-#endif
-
-static void voip_signal_check_start(void * ext)
-{
-#if VIDEO_SIGNAL_CHECK
-    if(NULL == signal_check_task)
-        signal_check_task = lv_task_create(signal_check, VIDEO_SIGNAL_CHECK_PERIOD, LV_TASK_PRIO_HIGH, NULL);
-#endif
-}
-
-static void voip_signal_check_stop(void)
-{
-#if VIDEO_SIGNAL_CHECK
-    if(signal_check_task) {
-        lv_task_del(signal_check_task);
-        signal_check_task = NULL;
-    }
-#endif
-}
-
-static bool is_rat_gsm(void)
-{
-    MMI_MODEM_PLMN_RAT rat;
-
-    watch_modem_get_operator_req(&rat);
-    if(MMI_MODEM_PLMN_RAT_GSM == rat)
-        return true;
-    else
-        return false;
-}
-
-static void rat_check(lv_task_t *task)
-{
-    if(is_rat_gsm()) {
-        voip_ring_off_action(NULL, LV_EVENT_CLICKED);
-    }
-}
-
-static void voip_rat_check_start(void)
-{
-    if(NULL == rat_check_task)
-        rat_check_task = lv_task_create(rat_check, VIDEO_RAT_CHECK_PERIOD, LV_TASK_PRIO_HIGH, NULL);
-}
-
-static void voip_rat_check_stop(void)
-{
-    if(rat_check_task) {
-        lv_task_del(rat_check_task);
-        rat_check_task = NULL;
-    }
-}
-
-void voip_fps_check(int8_t fps)
-{
-    lv_voip_phone_obj_ext_t * ext = voip_phone_get_ext();
-    if(NULL != ext) {
-        if((VIDEO_CALL_FPS_CHECK_LIMIT >= fps) && (0 != fps)) {
-            printf("%s %d\n", __FUNCTION__, fps);
-            if(lv_obj_get_hidden(ext->signal_weak_label) == false) return;
-            lv_obj_set_hidden(ext->signal_weak_label, false);
-        } else {
-            if(lv_obj_get_hidden(ext->signal_weak_label) == true) return;
-            lv_obj_set_hidden(ext->signal_weak_label, true);
-        }
-    }
-}
-
-#endif // #if USE_LV_WATCH_VIDEOCALL != 0
-
-//interface
-uint8_t voip_get_call_volume(void)
-{
-#if USE_LV_WATCH_VIDEOCALL != 0
-    return(voipcall_params.speaker_volume);
-#else
-    return 0;
-#endif
-}
-
-bool watch_voip_suspend_check(void)
-{
-#if USE_LV_WATCH_VIDEOCALL != 0
-    if(voipcall_params.voip_call_type == MODEM_VIDEO_CALL_TYPE_VIDEO) {
-        return(false);
-    }
-
-    if((MMI_VOIP_CALL_STATE_INCOMING == voipcall_params.state)
-            || (MMI_VOIP_CALL_STATE_DIALING == voipcall_params.state)) {
-        return(false);
-    }
-#endif
-    return(true);
-}
-
-#if 0
-void voip_alarm_ind(void)
-{
-#if USE_LV_WATCH_VIDEOCALL != 0
-    voipcall_params.buffer_alarm = true;
-#endif
-}
-#endif
-
-bool voip_connect_check_req(void)
-{
-#if USE_LV_WATCH_VIDEOCALL != 0
-    if(voip_phone_get_activity_obj()) {
-        return(true);
-    }
-#endif
-    return(false);
-}
-
-void voip_activity_destroy_req(void)
-{
-#if USE_LV_WATCH_VIDEOCALL != 0
-    printf("%s\n", __FUNCTION__);
-
-    lv_obj_t * activity_obj = voip_phone_get_activity_obj();
-
-    if(!activity_obj) {
-        return;
-    }
-
-    switch(voipcall_params.state) {
-        case MMI_VOIP_CALL_STATE_NULL:
-        case MMI_VOIP_CALL_STATE_INVALID:
-            // do noting
-            break;
-
-        case MMI_VOIP_CALL_STATE_ACTIVE:
-            voip_call_hangup_req(FALSE);
-            break;
-
-        case MMI_VOIP_CALL_STATE_INCOMING:
-            Hal_Tone_Play_End();
-            voip_call_reject_req(FALSE);
-            break;
-
-        default:
-            voip_call_hangup_req(FALSE);
-            break;
-    } /* switch */
-
-    voip_signal_check_stop();
-    voip_rat_check_stop();
-
-    // stop ring off timer
-    if(NULL != voipcall_params.ring_off_timer_id) {
-        Hal_Timer_Stop(voipcall_params.ring_off_timer_id);
-        voipcall_params.ring_off_timer_id = NULL;
-    }
-
-    // stop callreq timer
-    if(NULL != voipcall_params.callreq_timer_id) {
-        Hal_Timer_Stop(voipcall_params.callreq_timer_id);
-        voipcall_params.callreq_timer_id = NULL;
-    }
-
-    Hal_Mem_Set(&voipcall_params, 0, sizeof(voip_phone_call_params_t));
-    voipcall_params.state = MMI_VOIP_CALL_STATE_NULL;
-    voip_set_volume_when_slider_act();
-    voip_phone_cleanup();
-    lv_watch_png_cache_all_free();
-#endif
-} /* voip_activity_destroy_req */
diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/video_call.h b/2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/video_call.h
deleted file mode 100644 (file)
index 0f8f96b..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-/**
- * @file videocall.h
- *
- */
-
-#ifndef VIDEOCALL_H
-#define VIDEOCALL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*********************
- *      INCLUDES
- *********************/
-#ifdef LV_CONF_INCLUDE_SIMPLE
-#include "lvgl.h"
-#include "lv_ex_conf.h"
-#else
-#include "../../../lvgl/lvgl.h"
-#include "../../../lv_ex_conf.h"
-#endif
-
-#if 0
-void voip_alarm_ind(void);
-#endif
-bool voip_connect_check_req(void);
-bool watch_voip_suspend_check(void);
-void voip_activity_destroy_req(void);
-uint8_t voip_get_call_volume(void);
-
-#if USE_LV_WATCH_VIDEOCALL !=0
-/*********************
- *      DEFINES
- *********************/
-#define ENABLE_VIDEO_SCALE  1
-#define VOIP_PHONE_TEST  0
-#define VOIP_PHONEBOOK_TEST 0
-#define VOIP_JUPHOON_TEST 1
-#define VOIP_PHONE_RING_OFF_ANIMATION_TIME 0
-#define VOIP_PHONE_RING_OFF_CONTINUE_TIME 1500   /*ms*/
-#define VOIP_PHONE_NV_VOLUME_OFFSET          0
-#define VOIP_PHONE_NV_EMERGENCY_NUM_OFFSET   1
-#define VOIP_PHONEBOOK_CONTACTS_MAX_NAME_LEN    NV_CONTACTS_MAX_NAME_LEN
-#define VOIP_PHONEBOOK_CONTACTS_MAX_NUMBER_LEN  NV_CONTACTS_MAX_NUMBER_LEN
-#define LV_COLOR_HEX3(c) LV_COLOR_MAKE((uint8_t) (((c >> 4) & 0xF0) | ((c >> 8) & 0xF)),   \
-                                (uint8_t) ((uint32_t)(c & 0xF0)     | ((c & 0xF0) >> 4)), \
-                                (uint8_t) ((uint32_t)(c & 0xF)      | ((c & 0xF) << 4)))
-#define H263_FMT_QCIF 1
-#if H263_FMT_QCIF == 1
-#define VIDEO_SOURCE_WIDTH   176
-#define VIDEO_SOURCE_HEIGHT  144
-#endif
-
-#if (ENABLE_VIDEO_SCALE==0)
-#define canvas_width  VIDEO_SOURCE_WIDTH
-#define canvas_heigh  VIDEO_SOURCE_HEIGHT
-#else
-#define canvas_width  LV_HOR_RES   /* 240 */
-#define canvas_heigh  LV_VER_RES   /* 240 */
-#endif
-
-#define VIDEO_RENDER_PERIOD  50   /* 1000/50=20fps */
-#define VIDEO_SIGNAL_CHECK  0
-#define VIDEO_SIGNAL_CHECK_PERIOD  1000
-#define VIDEO_RAT_CHECK_PERIOD  200
-#define VIDEO_CALL_FPS_CHECK_LIMIT 5
-/**********************
- *      TYPEDEFS
- **********************/
-
-typedef enum {
-    VOIP_PHONE_UI_INCOMING = 0,
-    VOIP_PHONE_UI_DIALING,
-    VOIP_PHONE_UI_CONNECTED,
-} voip_phone_ui_e;
-
-typedef enum
-{
-    MMI_VOIP_CALL_STATE_NULL     = 0,
-    MMI_VOIP_CALL_STATE_ACTIVE   = 1,
-    MMI_VOIP_CALL_STATE_HOLDING  = 2,
-    MMI_VOIP_CALL_STATE_DIALING  = 3,                                           /* MO call only */
-    MMI_VOIP_CALL_STATE_ALERTING = 4,                                           /* MO call only */
-    MMI_VOIP_CALL_STATE_INCOMING = 5,                                           /* MT call only */
-    MMI_VOIP_CALL_STATE_WAITING  = 6,                                           /* MT call only */
-    MMI_VOIP_CALL_STATE_INVALID  = 0xFF
-} MMI_VOIP_CALL_STATE_E;
-
-enum voipregisterstate
-{
-    VOIP_REGISTER_OK = 0,
-    VOIP_UNREGISTERING,
-    VOIP_REGISTER_FAIL
-};
-
-/** H.263 picture size format */
-enum voip_h263_fmt {
-    VOIP_H263_FMT_SQCIF = 1, /**<  128 x 96  */
-    VOIP_H263_FMT_QCIF  = 2, /**<  176 x 144  */
-    VOIP_H263_FMT_CIF   = 3, /**<  352 x 288  */
-    VOIP_H263_FMT_4CIF  = 4, /**<  704 x 576  */
-    VOIP_H263_FMT_16CIF = 5, /**< 1408 x 1152 */
-    VOIP_H263_FMT_OTHER = 7,
-};
-
-enum local_remote_switch_e {
-    VOIP_REMOTE_SWITCH_REMOTE = 0,
-    VOIP_REMOTE_SWITCH_LOCAL,
-    VOIP_REMOTE_SWITCH_NULL,
-};
-
-enum enum_canvas_button_hidden_flag
-{
-    NOT_HIDDEN,
-    HIDDEN
-};
-
-typedef struct {
-    char contact_name[VOIP_PHONEBOOK_CONTACTS_MAX_NAME_LEN];
-    char contact_number[VOIP_PHONEBOOK_CONTACTS_MAX_NUMBER_LEN];
-    const void * img_src;
-    const void * img_src_small;
-    uint8_t contact_type; /*0:administrator, 1:standby administrator, 2: others*/
-} voip_phonebook_contact_t;
-
-typedef nv_watch_phonebook_info_t voip_phonebook_t;
-
-typedef struct {
-    lv_watch_obj_ext_t lv_watch_obj;
-    /*New data for this type */
-    uint8_t body_padding_inner;
-    uint8_t append_width;
-    uint8_t cur_img_id;
-    voip_phonebook_t * cur_contact;
-    lv_ll_t contact_list;
-    lv_obj_t * label_phone_contact;
-    lv_obj_t * page_scrl;
-    lv_coord_t move_width;
-} lv_voip_phonebook_obj_ext_t;
-
-typedef struct {
-    MMI_VOIP_CALL_STATE_E state;
-    int32_t              index;                    /* Connection Index for use with, eg, AT+CHLD */
-    bool                 is_mt;                    /* true if MT call */
-    bool                 ring_off;                 /* true if ring off by user */
-    bool                 ring_off_timeout;         /* true if ring off timeout */
-    bool                 buffer_alarm;
-#define VOIP_RING_OFF_TIMER_LEN    1000
-    TIMER_ID             ring_off_timer_id;        /* ring off timer */
-    char                 number[NV_CONTACTS_MAX_NUMBER_LEN];   /* phone number */
-    char                 name[NV_CONTACTS_MAX_NAME_LEN];       /* contact name */
-    const void * img_src;
-    const void * img_src_small;
-    MODEM_VIDEO_CALL_TYPE    voip_call_type;
-#define VOIP_CALLREQ_TIMER_LEN    60*1000
-    TIMER_ID             callreq_timer_id;         /* callreq timer */
-    uint8_t              speaker_volume;           /* speaker volume during call procedure */
-} voip_phone_call_params_t;
-
-typedef struct {
-    lv_watch_obj_ext_t lv_watch_obj;
-    /*New data for this type */
-    lv_obj_t * phone_status_label;
-    lv_obj_t * phone_animation_obj;
-    uint32_t connect_start_time;
-    voip_phone_ui_e phone_ui_t;
-    enum local_remote_switch_e local_remote_switch_flag;
-    enum voip_h263_fmt voiph263fmt;
-    lv_obj_t * connect_time;
-    lv_obj_t * ring_value_button;
-    lv_obj_t * view_switch_button;
-    lv_obj_t * ring_off_button;
-    enum enum_canvas_button_hidden_flag canvas_button_hidden_flag;
-    lv_obj_t * signal_weak_label;
-    lv_obj_t * canvas;
-} lv_voip_phone_obj_ext_t;
-
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-lv_voip_phone_obj_ext_t * voip_phone_get_ext(void);
-void * voip_phone_get_video_buffer(void);
-void watch_voip_call_response_connect(int32_t index);
-int get_voipcall_params_index(void);
-void watch_voip_call_response_no_carrier(int32_t index, uint8_t isNoCarrier);
-void watch_voip_call_response_alerting(int32_t index);
-void watch_voip_incomingcall_response(char * number, int32_t calltype);
-void watch_voip_call_response_bottom_error(void);
-void watch_voip_call_response_bottom_need_redail(void);
-bool check_voipcall_enter_pm_ind(void);
-void watch_voip_message_handle_init(void);
-void watch_ui_voip_message_handle(void * voipmsg);
-void watch_voip_autotest_handle(void * testmsg);
-
-void voip_call_init(void);
-int8_t voip_call_dial_req(MODEM_VIDEO_CALL_TYPE calltype, char * pContactUri);
-void voip_call_hangup_req(BOOL bye);
-int8_t voip_call_answer_req(void);
-void voip_call_reject_req(BOOL bye);
-void voip_fps_check(int8_t fps);
-
-/****************************
- * Create a demo application
- ****************************/
-void videocallmain_create(lv_obj_t *btn, lv_event_t e);
-
-/**********************
- *      MACROS
- **********************/
-#endif //#if USE_LV_WATCH_VIDEOCALL !=0
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /*VIDEOCALL_H*/
index db95b05..b7a1f6e 100644 (file)
@@ -30,7 +30,7 @@ static void ok_btn_event_cb(lv_obj_t * obj, lv_event_t e);
 static void cancel_btn_event_cb(lv_obj_t * obj, lv_event_t e);
 static lv_obj_t * setting_opt_create(lv_obj_t * par);
 static lv_obj_t * roller_create(lv_obj_t * par, uint8_t type, uint16_t sel_value);
-static void bodyinfo_set(nv_watch_pedometer_setting_t * pedo_set);
+//static void bodyinfo_set(nv_watch_pedometer_setting_t * pedo_set);
 static lv_obj_t  * bodyinfo_setting_create(lv_obj_t * activity_obj);
 static void bodyinfo_prepare_destory(lv_obj_t * activity_obj);
 static void get_optstr_from_num(uint16_t num, char * stropt, uint8_t type);
@@ -160,7 +160,8 @@ void bodyinfo_init(nv_watch_pedometer_setting_t * pedo_set)
  *   STATIC FUNCTIONS
  **********************/
 
-static void bodyinfo_set(nv_watch_pedometer_setting_t * pedo_set)
+//static void bodyinfo_set(nv_watch_pedometer_setting_t * pedo_set)
+void bodyinfo_set(nv_watch_pedometer_setting_t * pedo_set)
 {
     //write to nv
     UI_NV_Write_Req(NV_SECTION_UI_PEDOMETER, NV_PEDOMETER_SETTING_OFFSET, NV_PEDOMETER_SETTING_LEN, (uint8_t *)pedo_set);
index 8cde3c8..633414c 100644 (file)
 
 static uint16_t pedometer_goalsteps = 10000;
 
+#ifdef __MMI_PEDOMETER_STEP_AND_GOAL_STYLE__
+uint16_t pedometer_get_steps(void)
+{
+    return asl_pedometer_steps_get();
+}
+
+void pedometer_set_goalsteps(uint16_t goal)
+{
+    pedometer_goalsteps = goal;
+}
+
+uint16_t pedometer_get_goalsteps(void)
+{
+    return pedometer_goalsteps;
+}
+
+static lv_obj_t * digital_content_create(lv_obj_t * par, int16_t level, uint8_t first_time)
+{
+    lv_obj_t * par_obj = NULL;
+       
+    if(first_time) 
+       {
+        lv_obj_t * content = lv_watch_cont_create(par, LV_LAYOUT_ROW_MID, &lv_style_transp_fit, lv_obj_get_width(par));
+        lv_cont_set_fit2(content, LV_FIT_TIGHT, LV_FIT_TIGHT);
+        lv_obj_align(content, par, LV_ALIGN_CENTER, 0, 0);
+        par_obj = content;
+    } 
+       else 
+       {
+        par_obj = par;
+    }
+    lv_cont_set_layout(par_obj, LV_LAYOUT_OFF);
+
+    char str[10] = "";
+    snprintf(str, sizeof(str), "%d", level);
+
+    const void * digitalSrcList[] = {
+        ICON_PEDOMETER_DIGITAL_0,
+        ICON_PEDOMETER_DIGITAL_1,
+        ICON_PEDOMETER_DIGITAL_2,
+        ICON_PEDOMETER_DIGITAL_3,
+        ICON_PEDOMETER_DIGITAL_4,
+        ICON_PEDOMETER_DIGITAL_5,
+        ICON_PEDOMETER_DIGITAL_6,
+        ICON_PEDOMETER_DIGITAL_7,
+        ICON_PEDOMETER_DIGITAL_8,
+        ICON_PEDOMETER_DIGITAL_9,
+    };
+
+    for(int8_t i = 0; i < strlen(str); i++) {
+        lv_obj_t * img = lv_img_create(par_obj, NULL);
+        LV_ASSERT_MEM(img);
+        if(img == NULL) return NULL;
+        lv_img_set_src(img, digitalSrcList[str[i] - '0']);
+        lv_obj_align(img, NULL, LV_ALIGN_IN_TOP_LEFT, i * (lv_obj_get_width(img) + 5), 0);
+    }
+       
+    return par_obj;
+}
+
+void pedometer_update_screen(void)
+{
+       lv_drop_pull_obj_ext_t * ext = NULL;
+
+#if USE_LV_WATCH_LAUNCHER != 0
+       ext = launcher_get_pull_ext();
+#endif
+       if(NULL == ext) 
+               return;
+
+       printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+    lv_obj_t * label = ext->pedometer_goal;
+    char str[10] = "";
+    snprintf(str, sizeof(str), "%d", pedometer_get_goalsteps());
+    lv_label_set_text(label, str);
+
+       lv_obj_t * pedometer_cont = ext->pedometer_cont;
+       lv_obj_clean(pedometer_cont);
+       digital_content_create(pedometer_cont, pedometer_get_steps(), 0);
+}
+
+void mmi_ui_msg_update_pedometer_screen(void)
+{
+       pedometer_update_screen();
+}
+
+void pedometer_update_goal(uint16_t goal)
+{
+    pedometer_set_goalsteps(goal);
+}
+
+static lv_obj_t * s_step_cont_main = NULL;
+static lv_obj_t * s_step_cont_goal = NULL;
+static lv_obj_t * s_step_label_goal_set = NULL;
+static uint32_t s_step_goal_temp_value = 0;
+
+static void mmi_step_goal_set_btn_event_cb(lv_obj_t * btn, lv_event_t e)
+{
+    if(LV_EVENT_CLICKED != e)
+               return;
+
+       uint32_t index = lv_watch_get_free_num(btn);
+       if(1 == index)
+    {
+               if(500 < s_step_goal_temp_value)
+                       s_step_goal_temp_value -= 500;
+
+               char str[8] = "";
+               sprintf(str, "%d", s_step_goal_temp_value);
+               lv_label_set_text(s_step_label_goal_set, str);
+               lv_label_set_align(s_step_label_goal_set, LV_LABEL_ALIGN_CENTER);
+               lv_obj_align(s_step_label_goal_set, NULL, LV_ALIGN_CENTER, 0, -LV_VER_RES / 8);
+    }
+       else if(2 == index)
+    {
+               if(50000 > s_step_goal_temp_value)
+                       s_step_goal_temp_value += 500;
+
+               char str[8] = "";
+               sprintf(str, "%d", s_step_goal_temp_value);
+               lv_label_set_text(s_step_label_goal_set, str);
+               lv_label_set_align(s_step_label_goal_set, LV_LABEL_ALIGN_CENTER);
+               lv_obj_align(s_step_label_goal_set, NULL, LV_ALIGN_CENTER, 0, -LV_VER_RES / 8);
+    }
+       else if(4 == index)
+    {
+       #if USE_LV_WATCH_BODYINFO != 0
+               nv_watch_pedometer_setting_t pedo;
+               memset(&pedo, 0, sizeof(nv_watch_pedometer_setting_t));
+               bodyinfo_init(&pedo);
+               pedo.goal = s_step_goal_temp_value;
+               bodyinfo_set(&pedo);
+       #endif
+               pedometer_set_goalsteps(s_step_goal_temp_value);
+               pedometer_update_screen();
+       
+               lv_obj_set_hidden(s_step_cont_main, false);
+               lv_obj_set_hidden(s_step_cont_goal, true);
+    }
+       else
+       {
+               lv_obj_set_hidden(s_step_cont_main, false);
+               lv_obj_set_hidden(s_step_cont_goal, true);
+       }
+}
+
+lv_obj_t * mmi_step_goal_set_cont_create(lv_obj_t * tab, lv_obj_t * tileview)
+{
+       lv_obj_t * cont = lv_cont_create(tab, NULL);
+       if(NULL == cont)
+               return 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_tileview_add_element(tileview, cont);
+       lv_obj_set_click(cont, false);
+
+       lv_obj_t * btn_decrease = lv_imgbtn_create(cont, NULL);
+    lv_imgbtn_set_src(btn_decrease, LV_BTN_STATE_RELEASED, ICON_DECREASE);
+    lv_imgbtn_set_src(btn_decrease, LV_BTN_STATE_PRESSED, ICON_DECREASE);
+    lv_obj_set_event_cb(btn_decrease, mmi_step_goal_set_btn_event_cb);
+#ifdef USE_LV_WATCH_UI_466_466
+       lv_obj_align(btn_decrease, NULL, LV_ALIGN_IN_LEFT_MID, LV_HOR_RES / 8, -LV_VER_RES / 8);
+#else
+       lv_obj_align(btn_decrease, NULL, LV_ALIGN_IN_LEFT_MID, LV_HOR_RES / 12, -LV_VER_RES / 8);
+#endif
+       lv_watch_set_free_num(btn_decrease, 1);
+
+    lv_obj_t * btn_increase = lv_imgbtn_create(cont, NULL);
+    lv_imgbtn_set_src(btn_increase, LV_BTN_STATE_RELEASED, ICON_INCREASE);
+    lv_imgbtn_set_src(btn_increase, LV_BTN_STATE_PRESSED, ICON_INCREASE);
+    lv_obj_set_event_cb(btn_increase, mmi_step_goal_set_btn_event_cb);
+#ifdef USE_LV_WATCH_UI_466_466
+       lv_obj_align(btn_increase, NULL, LV_ALIGN_IN_RIGHT_MID, -LV_HOR_RES / 8, -LV_VER_RES / 8);
+#else
+       lv_obj_align(btn_increase, NULL, LV_ALIGN_IN_RIGHT_MID, -LV_HOR_RES / 12, -LV_VER_RES / 8);
+#endif
+       lv_watch_set_free_num(btn_increase, 2);
+
+       lv_obj_t * label_goal = lv_label_create(cont, NULL);
+#ifdef USE_LV_WATCH_UI_466_466
+       lv_obj_add_style(label_goal, LV_LABEL_PART_MAIN, &lv_watch_font40);
+#else
+       lv_obj_add_style(label_goal, LV_LABEL_PART_MAIN, &lv_watch_font26);
+#endif
+    char str[8] = "";
+       s_step_goal_temp_value = pedometer_get_goalsteps();
+    sprintf(str, "%d", s_step_goal_temp_value);
+    lv_label_set_text(label_goal, str);
+       lv_label_set_align(label_goal, LV_LABEL_ALIGN_CENTER);
+       lv_obj_align(label_goal, NULL, LV_ALIGN_CENTER, 0, -LV_VER_RES / 8);
+    lv_obj_set_click(label_goal, false);
+       s_step_label_goal_set = label_goal;
+
+       lv_obj_t * btn_cancel = lv_btn_create(cont, NULL);
+#ifdef USE_LV_WATCH_UI_466_466
+       lv_obj_set_size(btn_cancel, 140, 70);
+#else
+       lv_obj_set_size(btn_cancel, 100, 56);
+#endif
+       lv_obj_set_style_local_bg_color(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x47, 0xA6, 0xFF));
+       lv_obj_set_style_local_radius(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 30);
+       lv_obj_set_style_local_bg_color(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_PRESSED, LV_COLOR_MAKE(0x47, 0xA6, 0xFF));
+       lv_obj_set_style_local_radius(btn_cancel, LV_BTN_PART_MAIN, LV_STATE_PRESSED, 30);
+#ifdef USE_LV_WATCH_UI_466_466
+       lv_obj_align(btn_cancel, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 70, -60);
+#else
+       lv_obj_align(btn_cancel, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 10, -20);
+#endif
+       lv_obj_set_event_cb(btn_cancel, mmi_step_goal_set_btn_event_cb);
+       lv_watch_set_free_num(btn_cancel, 3);
+       lv_obj_t * label_cancel = lv_label_create(btn_cancel, NULL);
+       lv_label_set_text_id(label_cancel, WATCH_TEXT_ID_CANCEL);
+#ifdef USE_LV_WATCH_UI_466_466
+       lv_obj_add_style(label_cancel, LV_LABEL_PART_MAIN, &lv_watch_font40_black);
+#else
+       lv_obj_add_style(label_cancel, LV_LABEL_PART_MAIN, &lv_watch_font26_black);
+#endif
+
+       lv_obj_t * btn_ok = lv_btn_create(cont, btn_cancel);
+       lv_obj_set_style_local_bg_color(btn_ok, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xFF, 0x6F, 0x91));
+       lv_obj_set_style_local_radius(btn_ok, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 30);
+       lv_obj_set_style_local_bg_color(btn_ok, LV_BTN_PART_MAIN, LV_STATE_PRESSED, LV_COLOR_MAKE(0xFF, 0x6F, 0x91));
+       lv_obj_set_style_local_radius(btn_ok, LV_BTN_PART_MAIN, LV_STATE_PRESSED, 30);
+#ifdef USE_LV_WATCH_UI_466_466
+       lv_obj_align(btn_ok, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -70, -60);
+#else
+       lv_obj_align(btn_ok, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -10, -20);
+#endif
+       lv_obj_set_event_cb(btn_ok, mmi_step_goal_set_btn_event_cb);
+       lv_watch_set_free_num(btn_ok, 4);
+       lv_obj_t * label_ok = lv_label_create(btn_ok, label_cancel);
+       lv_label_set_text_id(label_ok, WATCH_TEXT_ID_OK);
+
+       return cont;
+}
+
+static void mmi_step_goal_btn_event_cb(lv_obj_t * btn, lv_event_t e)
+{
+    if(LV_EVENT_CLICKED == e)
+    {
+               lv_obj_set_hidden(s_step_cont_main, true);
+               lv_obj_set_hidden(s_step_cont_goal, false);
+    }
+}
+
+lv_obj_t * pedometer_create(lv_obj_t * tileview, uint16_t id)
+{
+    lv_obj_t * tab;
+    if(id == 0xFF) {
+        tab = tileview;
+    } else {
+        tab = launcher_tileview_add_tile(tileview, id);
+        LV_ASSERT_MEM(tab);
+        if(tab == NULL) return NULL;
+    }
+
+    lv_obj_t * cont = lv_cont_create(tab, NULL);
+    if(NULL == cont)
+               return 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_tileview_add_element(tileview, cont);
+    lv_obj_set_click(cont, false);
+
+       //
+    lv_obj_t * cont_today = lv_watch_cont_create(cont, LV_LAYOUT_COLUMN_MID, &lv_style_transp_fit, lv_obj_get_width(cont));
+    lv_tileview_add_element(tileview, cont_today);
+    lv_obj_set_click(cont_today, false);
+
+    lv_obj_t * label = lv_label_create(cont_today, 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_TODAY_STEP);
+    lv_obj_set_click(label, false);
+
+#if USE_LV_WATCH_BODYINFO != 0
+    nv_watch_pedometer_setting_t pedo;
+    memset(&pedo, 0, sizeof(nv_watch_pedometer_setting_t));
+    bodyinfo_init(&pedo);
+    pedometer_set_goalsteps(pedo.goal);
+#endif
+
+    lv_obj_t * digital_content = digital_content_create(cont_today, pedometer_get_steps(), 1);
+
+    lv_obj_align(cont_today, NULL, LV_ALIGN_IN_TOP_MID, 0, LV_VER_RES / 6);
+       
+       //
+    lv_obj_t * cont_goal = lv_watch_cont_create(cont, LV_LAYOUT_COLUMN_MID, &lv_style_transp_fit, lv_obj_get_width(cont));
+    lv_tileview_add_element(tileview, cont_goal);
+    lv_obj_set_click(cont_goal, false);
+       
+    label = lv_label_create(cont_goal, 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_GOAL_STEP);
+    lv_obj_set_click(label, false);
+
+       lv_obj_t * btn_goal = lv_btn_create(cont_goal, NULL);
+#ifdef USE_LV_WATCH_UI_466_466
+       lv_obj_set_size(btn_goal, 200, 70);
+#else
+       lv_obj_set_size(btn_goal, 150, 56);
+#endif
+       lv_obj_set_style_local_bg_color(btn_goal, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x47, 0xA6, 0xFF));
+       lv_obj_set_style_local_radius(btn_goal, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 30);
+       lv_obj_set_style_local_bg_color(btn_goal, LV_BTN_PART_MAIN, LV_STATE_PRESSED, LV_COLOR_MAKE(0x47, 0xA6, 0xFF));
+       lv_obj_set_style_local_radius(btn_goal, LV_BTN_PART_MAIN, LV_STATE_PRESSED, 30);
+       lv_obj_set_event_cb(btn_goal, mmi_step_goal_btn_event_cb);
+       
+    label = lv_label_create(btn_goal, 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
+    char str[10] = "";
+    snprintf(str, sizeof(str), "%d", pedometer_get_goalsteps());
+    lv_label_set_text(label, str);
+    lv_obj_set_click(label, false);
+
+       lv_obj_align(cont_goal, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, -LV_VER_RES / 8);
+       
+#if USE_LV_WATCH_LAUNCHER != 0
+    lv_drop_pull_obj_ext_t * ext = launcher_get_pull_ext();
+    if(NULL != ext) 
+       {
+        ext->pedometer_dot = NULL;
+        ext->pedometer_cont = digital_content;
+        ext->pedometer_goal = label;
+    }
+#endif
+
+       s_step_cont_main = cont;
+       lv_obj_set_hidden(s_step_cont_main, false);
+       
+       lv_obj_t * cont_set = mmi_step_goal_set_cont_create(tab, tileview);
+       if(NULL != cont_set)
+       {
+               s_step_cont_goal = cont_set;
+               lv_obj_set_hidden(s_step_cont_goal, true);
+       }
+       
+       printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       
+    return tab;
+}
+
+#else
 
 #define PEDOMETER_DEF_ANGLE              5000
 #define PEDOMETER_CIRCLE_START           340
@@ -246,6 +601,8 @@ lv_obj_t * pedometer_create(lv_obj_t * tileview, uint16_t id)
     return tab;
 }
 
+#endif
+
 #else
 
 #include <stdio.h>
index fb415af..969705f 100644 (file)
@@ -61,6 +61,7 @@ void mmi_watch_pedometer_data_nv_default(nv_watch_pedometer_t * pedometer);
 lv_obj_t * record_create(lv_obj_t * tileview, uint16_t id);
 #endif
 void bodyinfo_init(nv_watch_pedometer_setting_t* pedo_set);
+void bodyinfo_set(nv_watch_pedometer_setting_t * pedo_set);
 uint16_t pedometer_get_goalsteps(void);
 uint16_t pedometer_get_steps(void);
 void pedometer_update_goal(uint16_t goal);
index c2f09f2..5c2d1f7 100644 (file)
@@ -556,7 +556,6 @@ void phone_voice_call_req(char * number)
 
     strncpy(call_params.number, number, NV_CONTACTS_MAX_NUMBER_LEN);
 
-#ifndef __MMI_ZHSX_SUPPORT__
     phonebook_contact_t * contact_info = phonebook_get_contact_info(number);
     if(NULL != contact_info) {
         Hal_Mem_Copy(call_params.name, contact_info->contact_name, NV_CONTACTS_MAX_NAME_LEN);
@@ -564,7 +563,20 @@ void phone_voice_call_req(char * number)
         call_params.img_src_small = contact_info->img_src_small;
 
         Hal_Mem_Free(contact_info);
-    } else {
+    }
+#ifdef __MMI_ZHSX_SUPPORT__
+       else
+       {
+       #ifdef __MMI_SOS_NUMBER_NAME_SUPPORT__
+               mmi_sos_get_name_by_number(number, call_params.name);
+
+       #else
+
+       #endif
+       }
+#else
+       else
+       {
         call_params.img_src = ICON_FAMILY;
         call_params.img_src_small = ICON_FAMILY_SMALL;
     }
index e68e026..bf6eacd 100644 (file)
@@ -74,11 +74,6 @@ void phonebook_init(void)
 
 void phonebook_create_btn_event_cb(lv_obj_t * btn, lv_event_t e)
 {
-#ifdef __MMI_CUSTOM_HENGAI_HEALTH__
-
-       mmi_heng_ai_blood_pressure_create_event_cb(btn, e);
-#else
-
 #ifdef __MMI_ZHSX_SUPPORT_PHONEBOOK_LIST_STYLE__
        #ifdef __MMI_PHONEBOOK_CALLLOG_IN_ONE_MENU__
        mmi_phonebook_calllog_create_event_cb(btn, e);
@@ -93,8 +88,6 @@ void phonebook_create_btn_event_cb(lv_obj_t * btn, lv_event_t e)
         phonebook_create(NULL);
     }
 #endif
-
-#endif
 }
 
 void app_adaptor_update_phonebook_ind(app_adaptor_contact_t * contact_list, uint8_t count)
index 9d04cbe..33165aa 100644 (file)
@@ -49,12 +49,6 @@ static watch_app_info_t s_main_menu_four_grid[] =
 #if USE_LV_WATCH_ALIPAY != 0
        { ICON_ALIPAY, WATCH_TEXT_ID_ALIPAY, upay_create_event_cb },
 #endif
-#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
-       { ICON_VIDEOCALL, WATCH_TEXT_ID_VIDEOCALL, mmi_video_call_create_event_cb },
-#endif
-#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
-       { ICON_VIDEOCALL, WATCH_TEXT_ID_VIDEOCALL, mmi_video_call_create_event_cb },
-#endif  
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
        { ICON_VIDEOCALL, WATCH_TEXT_ID_VIDEOCALL, mmi_video_call_create_event_cb },
 #endif
index 43b2570..db58717 100644 (file)
@@ -64,8 +64,12 @@ static mmi_watch_list_item_t settingList[] =
        { ICON_SETTING_APP_QRCODE, WATCH_TEXT_ID_APP_QRCODE, app_qrcode_create_event_cb },
 #endif
 #if USE_LV_WATCH_QRCODE != 0
+#ifdef __MMI_APP_QRCODE_AND_DEVICE_QRCODE_IN_ONE_SUPPORT__
+       { ICON_SETTING_QRCODE, WATCH_TEXT_ID_APP_DEVICE_QRCODE, mmi_app_and_device_qrcode_create_event_cb },
+#else
     { ICON_SETTING_QRCODE, WATCH_TEXT_ID_DEVICE_QRCODE, qrcode_create_event_cb },
 #endif
+#endif
 #if USE_LV_WATCH_RESTART_AND_RESET != 0
     { ICON_SETTING_RESET, WATCH_TEXT_ID_RESTART_AND_RESET, restart_and_reset_create_btn_action },
 #endif
@@ -76,9 +80,6 @@ static mmi_watch_list_item_t settingList[] =
        { ICON_SETTING_ABOUT, WATCH_TEXT_ID_ABOUT_WATCH, setting_about_create_btn_action },
 #endif
 
-
-
-
 #else // __MMI_ZHSX_SUPPORT__
 
 #if USE_LV_BLUETOOTH != 0
@@ -222,8 +223,6 @@ void setting_init(void)
 #ifdef __MMI_ZHSX_SUPPORT__
        mmi_watch_setting_ext_data_nv_read();
 #endif
-
-
 }
 
 lv_obj_t * setting_create(lv_obj_t * par)
index 0816b67..936f188 100644 (file)
@@ -10,6 +10,7 @@ static nv_watch_setting_ext_t s_watch_setting_ext_value = {0};
 void mmi_watch_setting_ext_data_nv_default(nv_watch_setting_ext_t * watch_settings)
 {
        watch_settings->white_list_switch = MMI_WHITE_LIST_SWITCH_DEFAULT;
+       watch_settings->timing_location_switch = MMI_TIMING_LOCATION_SWITCH_DEFAULT;
        watch_settings->dial_pad_switch = MMI_DIAL_PAD_SWITCH_DEFAULT;
        watch_settings->low_battery_switch = MMI_LOW_BATTERY_SWITCH_DEFAULT;
        watch_settings->fall_down_switch = MMI_FALL_DOWN_SWITCH_DEFAULT;
@@ -40,9 +41,7 @@ void mmi_watch_setting_ext_data_nv_read(void)
        {
                printf("[@CHENG_DEBUG][%s][%d]: nv read fail\n", __FUNCTION__, __LINE__);
                mmi_watch_setting_ext_data_nv_default(&s_watch_setting_ext_value);
-               
        }
-       
 }
 
 void mmi_watch_setting_ext_data_nv_write(void)
@@ -71,6 +70,21 @@ void mmi_white_list_switch_set(uint8_t value)
        }
 }
 
+// 0-close; 1-open
+uint8_t mmi_timing_location_switch_get(void)
+{
+       return (s_watch_setting_ext_value.timing_location_switch);
+}
+
+void mmi_timing_location_switch_set(uint8_t value)
+{
+       if(0 == value || 1 == value)
+       {
+               s_watch_setting_ext_value.timing_location_switch = value;
+               mmi_watch_setting_ext_data_nv_write();
+       }
+}
+
 // 0-close; 1-open
 uint8_t mmi_dial_pad_switch_get(void)
 {
index 291630c..4d6f268 100644 (file)
@@ -25,6 +25,9 @@ void mmi_watch_setting_ext_data_nv_read(void);
 uint8_t mmi_white_list_switch_get(void);
 void mmi_white_list_switch_set(uint8_t value);
 
+uint8_t mmi_timing_location_switch_get(void);
+void mmi_timing_location_switch_set(uint8_t value);
+
 uint8_t mmi_dial_pad_switch_get(void);
 void mmi_dial_pad_switch_set(uint8_t value);
 
index 68d643f..34438b4 100644 (file)
@@ -181,8 +181,10 @@ void shutdown_confirm_btn_action(lv_obj_t * btn, lv_event_t event)
         return;
     }
 
+#ifndef __MMI_ZHSX_SUPPORT__
     lv_task_del(lowbattery_task_p);
     lowbattery_task_p = NULL;
+#endif
 #if USE_LV_WATCH_SIMCHECK
     lv_task_del(checksim_task_p);
     checksim_task_p = NULL;
@@ -225,7 +227,9 @@ void shutdown_confirm_btn_action(lv_obj_t * btn, lv_event_t event)
 #else
     printf("shutdown without power off gif.\n");
     Hal_Backlight_Off();
+       #ifndef __MMI_ZHSX_SUPPORT__
     lv_task_del(lowbattery_task_p);
+       #endif
     Hal_Power_Off(HAL_TYPE_POWER_OFF);
 #endif
     return;
index 2b648b2..d1edebc 100644 (file)
@@ -64,6 +64,24 @@ bool mmi_sos_number_is_empty(void)
        return true;
 }
 
+#ifdef __MMI_SOS_NUMBER_NAME_SUPPORT__
+bool mmi_sos_get_name_by_number(char * number, char * name)
+{
+       uint8_t i = 0;
+
+       for(i = 0; i < NV_WATCH_SOS_NUMBER_MAX; i++)
+       {
+               if(0 == strcmp(number, s_sos_number.number[i]))
+               {
+                       Hal_Mem_Copy(name, s_sos_number.name[i], NV_CONTACTS_MAX_NAME_LEN);
+                       return true;
+               }
+       }
+
+       return false;
+}
+#endif
+
 uint8_t get_sos_status(void)
 {
     return s_sos_state;
index de79438..2f7434b 100644 (file)
@@ -70,6 +70,10 @@ lv_obj_t * sos_create(lv_obj_t * activity_obj);
 #ifdef __MMI_ZHSX_SUPPORT__
 void mmi_sos_number_nv_read(void);
 void mmi_sos_number_set(nv_watch_sos_number_t * sos_number);
+#ifdef __MMI_SOS_NUMBER_NAME_SUPPORT__
+bool mmi_sos_get_name_by_number(char * number, char * name);
+#endif
+
 lv_res_t mmi_key_back_sos_btn_action(void);
 lv_obj_t * sos_confirm_create(lv_obj_t * activity_obj);
 void sos_create_event_cb(lv_obj_t * btn, lv_event_t e);
index 0c6493e..4f7217a 100644 (file)
@@ -229,11 +229,12 @@ static void status_update(lv_anim_t * anim)
         lv_obj_set_click(label, false);
 
     } else {
-        img = lv_img_create(status_ext->network_status_cont, NULL);
-        LV_ASSERT_MEM(img);
-        if(img == NULL) return;
-        lv_img_set_src(img, ICON_STATUS_NO_SIM_CARD);
-        lv_img_set_src(status_ext->phone_signal_img, phone_signal_img[0]);
+        //img = lv_img_create(status_ext->network_status_cont, NULL);
+        //LV_ASSERT_MEM(img);
+        //if(img == NULL) return;
+        //lv_img_set_src(img, ICON_STATUS_NO_SIM_CARD);
+        //lv_img_set_src(status_ext->phone_signal_img, phone_signal_img[0]);
+        lv_img_set_src(status_ext->phone_signal_img, ICON_STATUS_NO_SIM_CARD);
     }
 
     // update charging status
@@ -382,7 +383,7 @@ static lv_obj_t * status_content_create(lv_obj_t * par)
             lv_obj_set_click(battery_label, false);
             lv_obj_align(battery_label, NULL, LV_ALIGN_CENTER, 0, 0);
         }
- 
+
         status_ext->charging_img = lv_img_create(content_2, NULL);
         LV_ASSERT_MEM(status_ext->charging_img);
         if(status_ext->charging_img == NULL) return NULL;
index b086ae4..7b65f7f 100644 (file)
@@ -23,7 +23,7 @@
  *      TYPEDEFS
  **********************/
 static watch_info_t * watch_info;
-lv_task_t * lowbattery_task_p;
+lv_task_t * lowbattery_task_p = NULL;
 #if USE_LV_WATCH_SIMCHECK
 lv_task_t * checksim_task_p = NULL;
 #endif
@@ -536,7 +536,9 @@ static lv_obj_t * watch_create(bool silentReset)
     }
 #endif
 
+#ifndef __MMI_ZHSX_SUPPORT__
     lowbattery_task_p = lv_task_create(lowbattery_task, 5000, LV_TASK_PRIO_MID, NULL);
+#endif
 
 #if USE_LV_WATCH_SIMCHECK
     checksim_task_p = lv_task_create(simcheck_task, WATCH_CHECK_SIM_STATUS_PERIOD, LV_TASK_PRIO_MID, NULL);
index e9e4b95..0ca7cbf 100644 (file)
@@ -526,7 +526,9 @@ void lv_watch_go_home(void)
 
         if(ext->actId > ACT_ID_ONE_LEVEL_MAX) {
             if(ext->actId == ACT_ID_ALBUM) {
+                       #if USE_LV_WATCH_ALBUM
                 album_destory(false);
+                       #endif
             } else if(NULL != ext->prepare_destory) {
                 ext->prepare_destory(obj);
             }
index bc78793..cdd6225 100644 (file)
@@ -25,9 +25,15 @@ static void mmi_watch_location_mission_timer_cb(uint32_t para);
 void mmi_watch_location_mission_list_init(void)
 {
        s_watch_location_mission_ll_locked = 0;
+       _lv_ll_clear(&s_watch_location_mission_ll);
        _lv_ll_init(&s_watch_location_mission_ll, sizeof(MMI_WATCH_LOCATION_TYPE_E));
 }
 
+void mmi_watch_location_mission_list_clear(void)
+{
+       _lv_ll_clear(&s_watch_location_mission_ll);
+}
+
 /*
 void mmi_watch_location_mission_list_node_remove(MMI_WATCH_LOCATION_TYPE_E location_type)
 {
index fc96c85..4a9e526 100644 (file)
@@ -111,6 +111,7 @@ typedef enum
 
 
 void mmi_watch_location_mission_list_init(void);
+void mmi_watch_location_mission_list_clear(void);
 
 void mmi_watch_location_mission_timed_location_action(void);
 void mmi_watch_location_mission_current_location_action(void);
index e8f6421..617f322 100644 (file)
@@ -451,6 +451,9 @@ bool mmi_protocol_action_send_location(MMI_WATCH_LOCATION_DATA_T * location_data
 
 bool mmi_protocol_action_location(void)
 {
+       if(0 == mmi_timing_location_switch_get())
+               return false;
+       
     mmi_watch_location_mission_timed_location_action();
        return true;
 }
index cfe752d..8ee2146 100644 (file)
@@ -842,7 +842,7 @@ bool mmi_protocol_fzd_parse_SERVER_SET_REBOOT(unsigned char * next_buff, unsigne
        result = true;
        mmi_protocol_fzd_send_without_data(action);
 
-       //mmi_watch_reboot_aciton();
+       mmi_watch_reboot_aciton();
 
        return result;
 }
@@ -956,15 +956,15 @@ bool mmi_protocol_fzd_parse_SERVER_SET_CALL(unsigned char * next_buff, unsigned
        mmi_protocol_fzd_send_without_data(action);
        uos_sleep(10);
 
-    char * number = (char *)lv_mem_alloc(next_buff_len + 1);
+    char * number = (char *)lv_mem_alloc(NV_CONTACTS_MAX_NUMBER_LEN);
        if(NULL == number)
        {
                PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                return false;
        }
-       _lv_memset_00(number, next_buff_len + 1);
-       _lv_memcpy(number, next_buff, next_buff_len + 1);
-    //phone_voice_call_req(number);
+       _lv_memset_00(number, NV_CONTACTS_MAX_NUMBER_LEN);
+       _lv_memcpy(number, next_buff, ((NV_CONTACTS_MAX_NUMBER_LEN > next_buff_len) ? next_buff_len : NV_CONTACTS_MAX_NUMBER_LEN - 1));
+    phone_voice_call_req(number);
 
        return result;
 }
@@ -2004,6 +2004,55 @@ bool mmi_protocol_fzd_parse_ACTION_GET_WEATHER(unsigned char * next_buff, unsign
        return result;
 }
 
+#ifdef __MMI_SOS_NUMBER_NAME_SUPPORT__
+bool mmi_protocol_fzd_parse_SERVER_SET_SOS_NUMBER_NAME(unsigned char * next_buff, unsigned int next_buff_len)
+{
+       bool result = false;
+       MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_SERVER_SET_SOS_NUMBER_NAME;
+
+       if(NULL == next_buff || 0 == next_buff_len)
+       {
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return false;
+       }
+
+       result = true;
+       mmi_protocol_fzd_send_without_data(action);
+
+       uint8_t i = 0;
+       unsigned char * temp_ptr = NULL;
+       nv_watch_sos_number_t sos_number = {0};
+
+       while (NULL != next_buff)
+       {
+               temp_ptr = km_strtok_r(NULL, ",", &next_buff);
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%s\n", __FUNCTION__, __LINE__, temp_ptr, next_buff);
+               
+               if (NULL != temp_ptr)
+               {
+                       strncpy(sos_number.number[i], temp_ptr, FZD_MIN(strlen(temp_ptr), (WATCH_CONTACTS_MAX_NUMBER_LEN - 1)));
+               }
+
+               temp_ptr = km_strtok_r(NULL, ",", &next_buff);
+               if (NULL != temp_ptr)
+               {
+                       uint8_t t_len = 0;
+               
+                       mmi_unicode_hex_str_to_utf8_str(temp_ptr, strlen(temp_ptr), sos_number.name[i], &t_len);
+               }
+
+               i++;
+               if(NV_WATCH_SOS_NUMBER_MAX <= i)
+               {
+                       break;
+               }
+       }
+
+       mmi_sos_number_set(&sos_number);
+
+       return result;
+}
+#else
 bool mmi_protocol_fzd_parse_SERVER_SET_SOS_NUMBER(unsigned char * next_buff, unsigned int next_buff_len)
 {
        bool result = false;
@@ -2043,6 +2092,7 @@ bool mmi_protocol_fzd_parse_SERVER_SET_SOS_NUMBER(unsigned char * next_buff, uns
 
        return result;
 }
+#endif
 
 bool mmi_protocol_fzd_parse_SERVER_SET_CENTER_NUMBER(unsigned char * next_buff, unsigned int next_buff_len)
 {
@@ -2211,6 +2261,42 @@ bool mmi_protocol_fzd_action_unbind(void)
        return mmi_protocol_fzd_send_without_data(MMI_FZD_ACTION_UNBIND);
 }
 
+bool mmi_protocol_fzd_action_get_app_qrcode(void)
+{
+#ifdef __MMI_APP_QRCODE_FROM_SERVER_SUPPORT__
+       if(0 == mmi_app_qrcode_get_flag_get())
+               return mmi_protocol_fzd_send_without_data(MMI_FZD_ACTION_GET_APP_QRCODE);
+       else
+               return false;
+#else
+       return false;
+#endif
+}
+
+bool mmi_protocol_fzd_parse_ACTION_GET_APP_QRCODE(unsigned char * next_buff, unsigned int next_buff_len)
+{
+       bool result = false;
+       MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_ACTION_GET_APP_QRCODE;
+
+#ifdef __MMI_APP_QRCODE_FROM_SERVER_SUPPORT__
+       if(NULL == next_buff || 0 == next_buff_len)
+       {
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return false;
+       }
+
+       result = true;
+
+       unsigned int next_buff_len_new = 0;
+       
+       next_buff_len_new = mmi_protocol_fzd_voice_data_decrypt(next_buff, next_buff_len);
+       PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d, %d\n", __FUNCTION__, __LINE__, next_buff_len, next_buff_len_new);
+       mmi_app_qrcode_content_buffer_set(next_buff, next_buff_len_new);
+#endif
+
+       return result;
+}
+
 
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__
@@ -3092,6 +3178,27 @@ bool mmi_protocol_fzd_parse_SERVER_SET_SLEEPTIME(unsigned char * next_buff, unsi
 }
 #endif
 
+// 0-off; 1-on
+bool mmi_protocol_fzd_parse_SERVER_SET_UD_SWITCH(unsigned char * next_buff, unsigned int next_buff_len)
+{
+       bool result = false;
+       MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_SERVER_SET_UD_SWITCH;
+
+       if(NULL == next_buff || 0 == next_buff_len)
+       {
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return false;
+       }
+       
+       result = true;
+       mmi_protocol_fzd_send_without_data(action);
+
+       uint32_t value = atoi(next_buff);
+       mmi_timing_location_switch_set(value);
+       
+       return result;
+}
+       
 bool mmi_protocol_fzd_parse_SERVER_SET_DIAL_PAD_SWITCH(unsigned char * next_buff, unsigned int next_buff_len)
 {
        bool result = false;
@@ -3189,12 +3296,12 @@ bool mmi_protocol_fzd_parse_SERVER_SET_TAKE_OFF_SWITCH(unsigned char * next_buff
        
        result = true;
        mmi_protocol_fzd_send_without_data(action);
-       
+
        uint32_t value = atoi(next_buff);
        mmi_take_off_switch_set(value);
        
        #ifdef __MMI_REMIND_take_off_SUPPORT__
-       if(value)       
+       if(value)
        {
                mmi_take_off_remind_init();
        }
index 53c59d4..185af1a 100644 (file)
@@ -134,11 +134,16 @@ typedef enum
 #endif
        MMI_FZD_ACTION_GET_WEATHER,
 
+#ifdef __MMI_SOS_NUMBER_NAME_SUPPORT__
+       MMI_FZD_SERVER_SET_SOS_NUMBER_NAME,
+#else
        MMI_FZD_SERVER_SET_SOS_NUMBER,
+#endif
        MMI_FZD_SERVER_SET_CENTER_NUMBER,
        MMI_FZD_SERVER_SET_MONITOR,     
        MMI_FZD_ACTION_UNBIND,
        MMI_FZD_SERVER_SET_REBOOT,
+       MMI_FZD_ACTION_GET_APP_QRCODE,
 
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
 #if defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__)
@@ -157,6 +162,7 @@ typedef enum
 #ifdef __MMI_SLEEP_FUNCTION_SUPPORT__
        MMI_FZD_SERVER_SET_SLEEPTIME,
 #endif
+       MMI_FZD_SERVER_SET_UD_SWITCH,
        MMI_FZD_SERVER_SET_DIAL_PAD_SWITCH, 
        MMI_FZD_SERVER_SET_WHITE_LIST_SWITCH, 
        MMI_FZD_SERVER_SET_LOW_BATTERY_SWITCH,
@@ -212,6 +218,7 @@ typedef enum
        MMI_FZD_WARNING_TYPE_TAKE_OFF,
        MMI_FZD_WARNING_TYPE_TAKE_ON,
        MMI_FZD_WARNING_TYPE_FALL_DOWN,
+
        MMI_FZD_WARNING_TYPE_MAX
 }MMI_PROTOCOL_FZD_WARNING_TYPE_ENUM;
 
@@ -252,7 +259,6 @@ bool mmi_protocol_fzd_parse_SERVER_GET_CUR_LOCATION(unsigned char * next_buff, u
 bool mmi_protocol_fzd_parse_SERVER_SET_UD_INTERVAL(unsigned char * next_buff, unsigned int next_buff_len);
 
 bool mmi_protocol_fzd_parse_SERVER_SET_FACTORY(unsigned char * next_buff, unsigned int next_buff_len);
-
 bool mmi_protocol_fzd_parse_SERVER_SET_POWEROFF(unsigned char * next_buff, unsigned int next_buff_len);
 bool mmi_protocol_fzd_parse_SERVER_SET_REBOOT(unsigned char * next_buff, unsigned int next_buff_len);
 
@@ -293,7 +299,11 @@ bool mmi_protocol_fzd_action_send_cur_location(MMI_WATCH_LOCATION_DATA_T * locat
 bool mmi_protocol_fzd_action_send_get_weather(MMI_WATCH_LOCATION_DATA_T * location_data);
 bool mmi_protocol_fzd_parse_ACTION_GET_WEATHER(unsigned char * next_buff, unsigned int next_buff_len);
 
+#ifdef __MMI_SOS_NUMBER_NAME_SUPPORT__
+bool mmi_protocol_fzd_parse_SERVER_SET_SOS_NUMBER_NAME(unsigned char * next_buff, unsigned int next_buff_len);
+#else
 bool mmi_protocol_fzd_parse_SERVER_SET_SOS_NUMBER(unsigned char * next_buff, unsigned int next_buff_len);
+#endif
 
 bool mmi_protocol_fzd_parse_SERVER_SET_CENTER_NUMBER(unsigned char * next_buff, unsigned int next_buff_len);
 
@@ -302,6 +312,9 @@ bool mmi_protocol_fzd_action_send_warning_info(MMI_WATCH_LOCATION_DATA_T * locat
 
 bool mmi_protocol_fzd_action_unbind(void);
 
+bool mmi_protocol_fzd_action_get_app_qrcode(void);
+bool mmi_protocol_fzd_parse_ACTION_GET_APP_QRCODE(unsigned char * next_buff, unsigned int next_buff_len);
+
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
 bool mmi_protocol_fzd_action_get_vc_config(void);
 bool mmi_protocol_fzd_action_VC_CALL_REQUEST(char * number, uint8_t call_type);
@@ -310,6 +323,7 @@ bool mmi_protocol_fzd_action_VC_CALL_REQUEST(char * number, uint8_t call_type);
 #ifdef __MMI_ZHSX_SUPPORT_DO_NOT_DISTURB__
 bool mmi_protocol_fzd_parse_SERVER_SET_NOT_DISTURB(unsigned char * next_buff, unsigned int next_buff_len);
 #endif
+bool mmi_protocol_fzd_parse_SERVER_SET_UD_SWITCH(unsigned char * next_buff, unsigned int next_buff_len);
 bool mmi_protocol_fzd_parse_SERVER_SET_DIAL_PAD_SWITCH(unsigned char * next_buff, unsigned int next_buff_len);
 bool mmi_protocol_fzd_parse_SERVER_SET_WHITE_LIST_SWITCH(unsigned char * next_buff, unsigned int next_buff_len);
 bool mmi_protocol_fzd_parse_SERVER_SET_LOW_BATTERY_SWITCH(unsigned char * next_buff, unsigned int next_buff_len);
@@ -348,6 +362,8 @@ bool mmi_protocol_fzd_action_hengai_sleep_data(char * file_buf, uint32_t file_si
 #endif
 
 
+
+
 #endif
 
 #ifdef __cplusplus
index cb5cc2c..39e7164 100644 (file)
@@ -56,11 +56,16 @@ static unsigned char * mmi_protocol_fzd_action_string_get(MMI_PROTOCOL_FZD_ACTIO
                        {MMI_FZD_ACTION_SEND_PHOTO, "img"},
                #endif
                        {MMI_FZD_ACTION_GET_WEATHER, "WT"},     
+               #ifdef __MMI_SOS_NUMBER_NAME_SUPPORT__
+                       {MMI_FZD_SERVER_SET_SOS_NUMBER_NAME, "SOS2"}, 
+               #else
                        {MMI_FZD_SERVER_SET_SOS_NUMBER, "SOS"}, 
+               #endif
                        {MMI_FZD_SERVER_SET_CENTER_NUMBER, "CENTER"},
                        {MMI_FZD_SERVER_SET_MONITOR, "MONITOR"},
                        {MMI_FZD_ACTION_UNBIND, "DLT"},
                        {MMI_FZD_SERVER_SET_REBOOT, "REBOOT"},
+                       {MMI_FZD_ACTION_GET_APP_QRCODE, "CID"},
 
                #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
                #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__
@@ -88,6 +93,7 @@ static unsigned char * mmi_protocol_fzd_action_string_get(MMI_PROTOCOL_FZD_ACTIO
                #ifdef __MMI_SLEEP_FUNCTION_SUPPORT__
                        {MMI_FZD_SERVER_SET_SLEEPTIME, "SLEEPTIME"},
                #endif
+                       {MMI_FZD_SERVER_SET_UD_SWITCH, "LOC_SWITCH"},
                        {MMI_FZD_SERVER_SET_DIAL_PAD_SWITCH, "KEYBRD"},
                        {MMI_FZD_SERVER_SET_WHITE_LIST_SWITCH, "WLKEY"}, 
                        {MMI_FZD_SERVER_SET_LOW_BATTERY_SWITCH, "LOWBAT"},
@@ -260,7 +266,6 @@ static bool mmi_protocol_fzd_content_parse(unsigned char * content_ptr, unsigned
                        break;
                        
                case MMI_FZD_ACTION_SEND_BLOOD:
-                       
                        break;
 
                case MMI_FZD_SERVER_SET_SPO2_INTERVAL:
@@ -296,9 +301,15 @@ static bool mmi_protocol_fzd_content_parse(unsigned char * content_ptr, unsigned
                        mmi_protocol_fzd_parse_ACTION_GET_WEATHER(next_buff, next_buff_len);
                        break;
 
+       #ifdef __MMI_SOS_NUMBER_NAME_SUPPORT__
+               case MMI_FZD_SERVER_SET_SOS_NUMBER_NAME:
+                       mmi_protocol_fzd_parse_SERVER_SET_SOS_NUMBER_NAME(next_buff, next_buff_len);
+                       break;
+       #else
                case MMI_FZD_SERVER_SET_SOS_NUMBER:
                        mmi_protocol_fzd_parse_SERVER_SET_SOS_NUMBER(next_buff, next_buff_len);
                        break;
+       #endif
                        
                case MMI_FZD_SERVER_SET_CENTER_NUMBER:
                        mmi_protocol_fzd_parse_SERVER_SET_CENTER_NUMBER(next_buff, next_buff_len);
@@ -315,6 +326,10 @@ static bool mmi_protocol_fzd_content_parse(unsigned char * content_ptr, unsigned
                        mmi_protocol_fzd_parse_SERVER_SET_REBOOT(next_buff, next_buff_len);
                        break;
 
+               case MMI_FZD_ACTION_GET_APP_QRCODE:
+                       mmi_protocol_fzd_parse_ACTION_GET_APP_QRCODE(next_buff, next_buff_len);
+                       break;
+
        #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
        #if defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__) || defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__)
                case MMI_FZD_WATCH_GET_VC_CONFIG:
@@ -354,6 +369,10 @@ static bool mmi_protocol_fzd_content_parse(unsigned char * content_ptr, unsigned
                        break;
        #endif
                        
+               case MMI_FZD_SERVER_SET_UD_SWITCH:
+                       mmi_protocol_fzd_parse_SERVER_SET_UD_SWITCH(next_buff, next_buff_len);
+                       break;
+                       
                case MMI_FZD_SERVER_SET_DIAL_PAD_SWITCH:
                        mmi_protocol_fzd_parse_SERVER_SET_DIAL_PAD_SWITCH(next_buff, next_buff_len);
                        break;
index 13d021c..7baf3f5 100644 (file)
@@ -257,7 +257,7 @@ bool mmi_debug_info_write_to_file(char * info_buf)
        char str_time[24] = {0};
        
        Hal_Rtc_Gettime(&cur_time);
-       sprintf(str_time, "\n[%04d%02d%02d_%02d%02d%02d]", 
+       sprintf(str_time, "\n[%04d%02d%02d_%02d%02d%02d]:", 
                        cur_time.tm_year,
                        cur_time.tm_mon,
                        cur_time.tm_mday,
index c352039..9dea052 100644 (file)
@@ -149,6 +149,19 @@ void mmi_watch_power_off_aciton(void)
        mmi_ui_msg_action_watch_power_off();
 }
 
+void mmi_ui_msg_update_watch_reboot(void)
+{
+       mmi_watch_restart();
+}
+
+void mmi_watch_reboot_aciton(void)
+{
+       SUNDRY_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+    mmi_watch_wake_up();
+       mmi_ui_msg_action_watch_reboot();
+}
+
 
 static TIMER_ID s_watch_search_timer_id = NULL;
 static TIMER_ID s_watch_falldwon_id = NULL;
index e487706..ca4d1af 100644 (file)
@@ -46,6 +46,8 @@ void mmi_ui_msg_update_watch_factory(void);
 void mmi_watch_factory_aciton(void);
 void mmi_ui_msg_update_watch_power_off(void);
 void mmi_watch_power_off_aciton(void);
+void mmi_ui_msg_update_watch_reboot(void);
+void mmi_watch_reboot_aciton(void);
 
 
 #define MMI_WATCH_SEARCH_DURATION      (1000 * 60) // ms
index 5a5f393..505eaf5 100644 (file)
@@ -37,11 +37,7 @@ void cmdmsg_handler_login_impl(void *param)
 #ifdef __MMI_ZHSX_SUPPORT__
        printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__);
 
-       //#ifdef __MMI_ZHSX_SUPPORT_WULIAN_SERVER__
        mmi_protocol_watch_link_action();
-       //#else
-       //mmi_protocol_watch_heartbeat_action();
-       //#endif
 
 #else