__MMI_ZHSX_SUPPORT_VIDEO_CALL__
authorCCC <2393524978@qq.com>
Sat, 8 Jul 2023 06:22:05 +0000 (14:22 +0800)
committerCCC <2393524978@qq.com>
Sat, 8 Jul 2023 06:22:05 +0000 (14:22 +0800)
2.sdk/sdk/gui/lv_watch/framework/nvm/ui_nvm.h
2.sdk/sdk/gui/lv_watch/framework/nvm/ui_nvm_api.c
2.sdk/sdk/gui/lv_watch/include/ui_nvm_interface.h
2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/mmi_jrtc_client.c
2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/mmi_video_call.c
2.sdk/sdk/gui/lv_watch/lv_apps/mmi_video_call/mmi_video_call.h
2.sdk/sdk/gui/lv_watch/lv_watch.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

index 458757d..c323d29 100644 (file)
@@ -40,6 +40,7 @@ extern "C" {
 #define NV_SECTION_UI_PROTOCOL_DATA_LEN                     (sizeof(nv_watch_protocol_data_t))
 #define NV_SECTION_UI_HEALTH_INFO_LEN               (sizeof(nv_watch_health_info_t))
 #define NV_SECTION_UI_SOS_NUMBER_LEN                (sizeof(nv_watch_sos_number_t))
+#define NV_SECTION_UI_VC_CONTACT_LEN                   (sizeof(nv_watch_vc_contact_t))
 
 //#endif
 #define NV_SECTION_LEN(sectionid)    (sectionid ## _LEN)
@@ -125,6 +126,7 @@ typedef lv_fs_dir_t  ui_dir_t;
 #define NV_SECTION_UI_PROTOCOL_DATA_FILE            "ui_protocol_data.nv"
 #define NV_SECTION_UI_HEALTH_INFO_FILE              "ui_health_info.nv"
 #define NV_SECTION_UI_SOS_NUMBER_FILE               "ui_sos_number.nv"
+#define NV_SECTION_UI_VC_CONTACT_FILE                  "ui_vc_contact.nv"
 
 //#endif
 #define NV_SECTION_FILE_PATH(sectionid)    (sectionid ## _FILE)
index f223357..fac92ed 100644 (file)
@@ -83,6 +83,9 @@ uint32_t UI_NV_Get_Section_Len(NV_UI_SECTION_ID SectionId)
                        return (NV_SECTION_LEN(NV_SECTION_UI_HEALTH_INFO));
                case NV_SECTION_UI_SOS_NUMBER:
                        return (NV_SECTION_LEN(NV_SECTION_UI_SOS_NUMBER));
+               case NV_SECTION_UI_VC_CONTACT:
+                       return (NV_SECTION_LEN(NV_SECTION_UI_VC_CONTACT));
+                       
        //#endif
 
         default:
@@ -165,6 +168,9 @@ char * UI_NV_Get_Section_path(NV_UI_SECTION_ID SectionId)
                        return (NV_SECTION_FILE_PATH(NV_SECTION_UI_HEALTH_INFO));
                case NV_SECTION_UI_SOS_NUMBER:
                        return (NV_SECTION_FILE_PATH(NV_SECTION_UI_SOS_NUMBER));
+               case NV_SECTION_UI_VC_CONTACT:
+                       return (NV_SECTION_FILE_PATH(NV_SECTION_UI_VC_CONTACT));
+                       
        //#endif
 
         default:
@@ -208,6 +214,7 @@ uint8_t UI_NV_Reset_Default(NV_UI_SECTION_ID SectionId)
        nv_watch_protocol_data_t * protocol_data;
        nv_watch_health_info_t * health_info;
        nv_watch_sos_number_t * sos_number;
+       nv_watch_vc_contact_t * vc_contact;
 //#endif
 
     switch(SectionId) {
@@ -391,6 +398,13 @@ uint8_t UI_NV_Reset_Default(NV_UI_SECTION_ID SectionId)
                        memset(sos_number, 0x0, SectionLen);
                        TempData = (char *)sos_number;
                        break;
+
+               case NV_SECTION_UI_VC_CONTACT:
+                       vc_contact = lv_mem_alloc(SectionLen);
+                       memset(vc_contact, 0x0, SectionLen);
+                       TempData = (char *)vc_contact;
+                       break;
+                       
        //#endif
         default:
             TempData = NULL;
index da1af35..f497e30 100644 (file)
@@ -213,6 +213,18 @@ typedef struct
        char number[NV_WATCH_SOS_NUMBER_MAX][NV_CONTACTS_MAX_NUMBER_LEN];
 } __packed nv_watch_sos_number_t;
 
+#define NV_WATCH_VC_CONTACT_TOTAL              (10)
+#define NV_WATCH_VC_CONTACT_NAME_LEN      (10+1)
+#define NV_WATCH_VC_CONTACT_NUMBER_LEN    (20+1)
+
+typedef struct
+{
+       uint8_t total;
+    char name[NV_WATCH_VC_CONTACT_TOTAL][NV_WATCH_VC_CONTACT_NAME_LEN];                 // ::string
+    char number[NV_WATCH_VC_CONTACT_TOTAL][NV_WATCH_VC_CONTACT_NUMBER_LEN];             // ::string
+} __packed nv_watch_vc_contact_t;
+
+
 //#endif
 
 typedef struct
@@ -396,6 +408,7 @@ enum
        NV_SECTION_UI_PROTOCOL_DATA,                                    // nv_watch_protocol_data_t
        NV_SECTION_UI_HEALTH_INFO,                                              // nv_watch_health_info_t
        NV_SECTION_UI_SOS_NUMBER,                                               // nv_watch_sos_number_t
+       NV_SECTION_UI_VC_CONTACT,                                               // nv_watch_vc_contact_t
 
 //#endif
     NV_SECTION_UI_MAX_NUM
index af03d8b..869091a 100644 (file)
@@ -11,7 +11,7 @@
 
 typedef enum jrtc_state video_call_jrtc_state_e;
 typedef enum jrtc_error video_call_jrtc_error_e;
-typedef struct jrtc_image_t  video_call_jrtc_image_t;
+typedef struct jrtc_image_t video_call_jrtc_image_t;
 
 typedef struct 
 {
@@ -21,11 +21,10 @@ typedef struct
     void* jrtc_ptr;
     TIMER_ID closed_timer_id;
     uint8_t closing;
-} video_call_jrtc_t;
+} MMI_VIDEO_CALL_JRTC_T;
 
 
-extern MMI_VIDEO_CALL_PARAMS_T voipcall_params;
-static video_call_jrtc_t voip_jrtc;
+static MMI_VIDEO_CALL_JRTC_T s_video_call_jrtc;
 
 
 static uint8_t voip_jrtc_get_image(void * preview_buf);
@@ -33,8 +32,9 @@ static uint8_t voip_jrtc_get_image(void * preview_buf);
 extern UINT32  OsaGetTicks(void *pForFutureUse);
 
 
-void mmi_video_call_jrtc_config_init(void)
+void mmi_video_call_jrtc_config_init_00(void)
 {
+#ifdef __VIDEO_CALL_TEST__
        char appkey[24+1] = "dc1db81c19d1da4f5fb4a197";
        char key[16+1] = "K75A1vS562671d38";
        char uid[64+1] = {0};
@@ -47,20 +47,46 @@ void mmi_video_call_jrtc_config_init(void)
        VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
        
        jrtc_config(appkey, uid, key, tokens);
+    Hal_Mem_Set(&s_video_call_jrtc, 0x0, sizeof(MMI_VIDEO_CALL_JRTC_T));
+#endif
+}
+
+void mmi_video_call_jrtc_config_init_01(char * t_appkey, char * t_key, char * t_tokens)
+{
+       char appkey[24+1] = {0};
+       char key[16+1] = {0};
+       char uid[64+1] = {0};
+       char tokens[128+1] = {0};
+       
+       char imei[16] = {0};
+       app_adp_get_imei_req(imei);
+       strncpy(uid, imei, 16);
+
+       memcpy(appkey, t_appkey, 24);
+       memcpy(key, t_key, 16);
+       memcpy(tokens, t_tokens, 128);
+
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s\n", __FUNCTION__, __LINE__, appkey);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s\n", __FUNCTION__, __LINE__, uid);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s\n", __FUNCTION__, __LINE__, key);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s\n", __FUNCTION__, __LINE__, tokens);
+       
+       jrtc_config(appkey, uid, key, tokens);
+       Hal_Mem_Set(&s_video_call_jrtc, 0x0, sizeof(MMI_VIDEO_CALL_JRTC_T));
 }
 
 static void mmi_video_call_jrtc_clean_up(void)
 {
        VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-    if(NULL != voip_jrtc.state_task) 
+    if(NULL != s_video_call_jrtc.state_task) 
        {
                VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
                
-        lv_task_del(voip_jrtc.state_task);
+        lv_task_del(s_video_call_jrtc.state_task);
     }
 
-    Hal_Mem_Set(&voip_jrtc, 0, sizeof(video_call_jrtc_t));
+    Hal_Mem_Set(&s_video_call_jrtc, 0x0, sizeof(MMI_VIDEO_CALL_JRTC_T));
 }
 
 static void mmi_video_call_jrtc_timeout_cb(void * para)
@@ -73,7 +99,7 @@ static void mmi_video_call_jrtc_timeout_cb(void * para)
 static void mmi_video_call_jrtc_on_state(lv_task_t * task)
 {
     static int8_t oldstate = -1;
-    video_call_jrtc_state_e state = jrtc_state(voip_jrtc.jrtc_ptr);
+    video_call_jrtc_state_e state = jrtc_state(s_video_call_jrtc.jrtc_ptr);
 
     if(state != oldstate) 
        {
@@ -83,22 +109,22 @@ static void mmi_video_call_jrtc_on_state(lv_task_t * task)
     switch(state) 
        {
            case JRTC_CLOSED:
-               if((NULL != voip_jrtc.jrtc_ptr) && (NULL == voip_jrtc.closed_timer_id)) 
+               if((NULL != s_video_call_jrtc.jrtc_ptr) && (NULL == s_video_call_jrtc.closed_timer_id)) 
                        {
-                       video_call_jrtc_error_e err = jrtc_error(voip_jrtc.jrtc_ptr);
+                       video_call_jrtc_error_e err = jrtc_error(s_video_call_jrtc.jrtc_ptr);
                                
                                VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: error=%d\n", __FUNCTION__, __LINE__, err);
 
-                   if(!voip_jrtc.closing) 
+                   if(!s_video_call_jrtc.closing) 
                                {
-                       jrtc_close(voip_jrtc.jrtc_ptr, JRTC_ENIL);
-                       voip_jrtc.closing = 1;
+                       jrtc_close(s_video_call_jrtc.jrtc_ptr, JRTC_ENIL);
+                       s_video_call_jrtc.closing = 1;
                    }
 
-                   voip_jrtc.closed_timer_id = Hal_Timer_Start(100, mmi_video_call_jrtc_timeout_cb, NULL, 0);
+                   s_video_call_jrtc.closed_timer_id = Hal_Timer_Start(100, mmi_video_call_jrtc_timeout_cb, NULL, 0);
                }
 
-               if(MMI_VOIP_CALL_STATE_NULL != voipcall_params.state) 
+               if(MMI_VOIP_CALL_STATE_NULL != mmi_video_call_params_state_get()) 
                        {
                    watch_voip_call_response_no_carrier(0, 1);
                }
@@ -117,15 +143,15 @@ static void mmi_video_call_jrtc_on_state(lv_task_t * task)
                break;
 
            case JRTC_TALKING:
-               if(MMI_VOIP_CALL_STATE_ACTIVE != voipcall_params.state) 
+               if(MMI_VOIP_CALL_STATE_ACTIVE != mmi_video_call_params_state_get()) 
                        {
                    watch_voip_call_response_connect(0);
                }
 
                /* Get image */
-               if (MODEM_VIDEO_CALL_TYPE_VIDEO == voipcall_params.voip_call_type) 
+               if (MODEM_VIDEO_CALL_TYPE_VIDEO == mmi_video_call_params_type_get()) 
                        {
-                   void *buf = voip_phone_get_video_buffer();
+                   void *buf = mmi_video_call_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);
@@ -145,33 +171,33 @@ static int8_t mmi_video_call_jrtc_open(const char* roomid, MODEM_VIDEO_CALL_TYPE
 {
        VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, roomid, calltype);
 
-    Hal_Mem_Set(&voip_jrtc, 0, sizeof(video_call_jrtc_t));
+    Hal_Mem_Set(&s_video_call_jrtc, 0, sizeof(MMI_VIDEO_CALL_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    = 8; // 10;
-        voip_jrtc.rxframe.kbps   = voip_jrtc.txframe.kbps   = 120; // 240;
+        s_video_call_jrtc.rxframe.width  = s_video_call_jrtc.txframe.width  = 176;
+        s_video_call_jrtc.rxframe.height = s_video_call_jrtc.txframe.height = 144;
+        s_video_call_jrtc.rxframe.fps    = s_video_call_jrtc.txframe.fps    = 8; // 10;
+        s_video_call_jrtc.rxframe.kbps   = s_video_call_jrtc.txframe.kbps   = 120; // 240;
 
                mci_videocall_camera_set_sensor(1); // 0:rear camera; 1:front camera
                
-        voip_jrtc.jrtc_ptr= jrtc_open(roomid, 0, &voip_jrtc.rxframe, &voip_jrtc.txframe);
+        s_video_call_jrtc.jrtc_ptr= jrtc_open(roomid, 0, &s_video_call_jrtc.rxframe, &s_video_call_jrtc.txframe);
     } 
        else 
        {
-        voip_jrtc.jrtc_ptr= jrtc_open(roomid, 0, NULL, NULL);
+        s_video_call_jrtc.jrtc_ptr= jrtc_open(roomid, 0, NULL, NULL);
     }
 
-    if (!voip_jrtc.jrtc_ptr) 
+    if (!s_video_call_jrtc.jrtc_ptr) 
        {
                VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
         mmi_video_call_jrtc_clean_up();
         return -1;
     }
-    jrtc_activate(voip_jrtc.jrtc_ptr, JRTC_AUDIO|JRTC_CAMERA);
+    jrtc_activate(s_video_call_jrtc.jrtc_ptr, JRTC_AUDIO|JRTC_CAMERA);
 
-    voip_jrtc.state_task = lv_task_create(mmi_video_call_jrtc_on_state, VIDEO_RENDER_PERIOD, LV_TASK_PRIO_HIGH, NULL);
+    s_video_call_jrtc.state_task = lv_task_create(mmi_video_call_jrtc_on_state, VIDEO_RENDER_PERIOD, LV_TASK_PRIO_HIGH, NULL);
     return 0;
 }
 
@@ -180,7 +206,7 @@ int8_t mmi_video_call_dial_req(MODEM_VIDEO_CALL_TYPE calltype, char * pContactUr
     int8_t ret = -1;
 
        VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, pContactUri, calltype);
-    if (NULL == voip_jrtc.jrtc_ptr)
+    if (NULL == s_video_call_jrtc.jrtc_ptr)
         ret = mmi_video_call_jrtc_open(pContactUri, calltype);
 
     return ret;
@@ -188,14 +214,14 @@ int8_t mmi_video_call_dial_req(MODEM_VIDEO_CALL_TYPE calltype, char * pContactUr
 
 void mmi_video_call_hangup_req(BOOL bye)
 {
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %p,%d\n", __FUNCTION__, __LINE__, voip_jrtc.jrtc_ptr, bye);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %p,%d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, bye);
 
-    if (NULL != voip_jrtc.jrtc_ptr) 
+    if (NULL != s_video_call_jrtc.jrtc_ptr) 
        {
         video_call_jrtc_error_e err = (TRUE == bye) ? JRTC_EBYE : JRTC_EAUDIOCALL;
 
-        jrtc_close(voip_jrtc.jrtc_ptr, err);
-        voip_jrtc.closing = 1;
+        jrtc_close(s_video_call_jrtc.jrtc_ptr, err);
+        s_video_call_jrtc.closing = 1;
     } 
        else
        {
@@ -207,23 +233,23 @@ int8_t mmi_video_call_answer_req(void)
 {
     int8_t ret = -1;
 
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %p\n", __FUNCTION__, __LINE__, voip_jrtc.jrtc_ptr);
-    if (NULL == voip_jrtc.jrtc_ptr)
-        ret = mmi_video_call_jrtc_open(voipcall_params.number, voipcall_params.voip_call_type);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %p\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr);
+    if (NULL == s_video_call_jrtc.jrtc_ptr)
+        ret = mmi_video_call_jrtc_open(mmi_video_call_params_number_get(), mmi_video_call_params_type_get());
 
     return ret;
 }
 
 void mmi_video_call_reject_req(BOOL bye)
 {
-       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %p,%d\n", __FUNCTION__, __LINE__, voip_jrtc.jrtc_ptr, bye);
+       VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %p,%d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, bye);
 
-    if (NULL != voip_jrtc.jrtc_ptr) 
+    if (NULL != s_video_call_jrtc.jrtc_ptr) 
        {
         video_call_jrtc_error_e err = (TRUE == bye) ? JRTC_EBYE : JRTC_EAUDIOCALL;
 
-        jrtc_close(voip_jrtc.jrtc_ptr, err);
-        voip_jrtc.closing = 1;
+        jrtc_close(s_video_call_jrtc.jrtc_ptr, err);
+        s_video_call_jrtc.closing = 1;
     } 
        else 
        {
@@ -244,9 +270,9 @@ static uint8_t voip_jrtc_get_image(void * preview_buf)
 
     video_call_jrtc_image_t * frame = NULL;
     if(ext->local_remote_switch_flag == VOIP_REMOTE_SWITCH_REMOTE)
-        frame = &voip_jrtc.rxframe;
+        frame = &s_video_call_jrtc.rxframe;
     else
-        frame = &voip_jrtc.txframe;
+        frame = &s_video_call_jrtc.txframe;
 
     if (frame->put != frame->get) {
 #if (ENABLE_VIDEO_SCALE == 0)
index 0bdb272..9ddf737 100644 (file)
@@ -17,10 +17,7 @@ static lv_task_t * signal_check_task = NULL;
 #endif
 static lv_task_t * rat_check_task = NULL;
 
-/**********************
-*      Global Variable
-**********************/
-MMI_VIDEO_CALL_PARAMS_T voipcall_params;
+static MMI_VIDEO_CALL_PARAMS_T s_video_call_params;
 lv_color_t g_cbuf[canvas_width * canvas_heigh + 8]  __attribute__((aligned(8)));
 
 /**********************
@@ -50,9 +47,6 @@ 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 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 void voip_set_volume_when_slider_act(void);
 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);
@@ -306,7 +300,7 @@ static lv_obj_t * voip_append_obj(lv_obj_t * page)
     return(voip_append_obj);
 }
 
-static lv_obj_t * voip_phone_create(lv_obj_t * activity_obj, voip_phone_ui_e phone_ui_id)
+static lv_obj_t * mmi_video_call_phone_create(lv_obj_t * activity_obj, voip_phone_ui_e phone_ui_id)
 {
     printf("%s %d\n", __FUNCTION__, __LINE__);
 
@@ -393,7 +387,7 @@ static lv_obj_t * voip_phone_create(lv_obj_t * activity_obj, voip_phone_ui_e pho
     return(obj);
 }
 
-lv_res_t voip_phone_ring_off_create()
+lv_res_t mmi_video_call_phone_ring_off_create()
 {
     printf("%s %d\n", __FUNCTION__, __LINE__);
 
@@ -404,9 +398,9 @@ lv_res_t voip_phone_ring_off_create()
     }
 
     // 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(NULL != s_video_call_params.callreq_timer_id) {
+        Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
+        s_video_call_params.callreq_timer_id = NULL;
     }
 
     if(ext->phone_ui_t == VOIP_PHONE_UI_INCOMING || ext->phone_ui_t == VOIP_PHONE_UI_DIALING) {
@@ -439,30 +433,30 @@ lv_res_t voip_phone_ring_off_create()
     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)
+void mmi_video_call_phone_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);
+    printf("%s:  %d, state=%d\n", __FUNCTION__, __LINE__, s_video_call_params.state);
 
-    if(false == voipcall_params.ring_off) {
-        voipcall_params.ring_off = true;
+    if(false == s_video_call_params.ring_off) {
+        s_video_call_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);
+        if(NULL == s_video_call_params.ring_off_timer_id) {
+            s_video_call_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;
+        if(NULL != s_video_call_params.callreq_timer_id) {
+            Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
+            s_video_call_params.callreq_timer_id = NULL;
         }
     }
 
-    switch(voipcall_params.state) {
+    switch(s_video_call_params.state) {
         case MMI_VOIP_CALL_STATE_NULL:
         case MMI_VOIP_CALL_STATE_INVALID:
             // do noting
@@ -486,9 +480,9 @@ void voip_ring_off_action(lv_obj_t * btn, lv_event_t e)
     voip_rat_check_stop();
 
 #if VOIP_PHONE_TEST
-    watch_voip_call_response_no_carrier(voipcall_params.index, 0);
+    watch_voip_call_response_no_carrier(s_video_call_params.index, 0);
 #endif
-} /* voip_ring_off_action */
+}
 
 lv_voip_phone_obj_ext_t * voip_phone_get_ext(void)
 {
@@ -502,7 +496,7 @@ lv_voip_phone_obj_ext_t * voip_phone_get_ext(void)
     return(ext);
 }
 
-void * voip_phone_get_video_buffer()
+void * mmi_video_call_phone_get_video_buffer()
 {
     return g_cbuf;
 }
@@ -535,7 +529,7 @@ static lv_obj_t * voip_phone_get_obj(void)
 static void voip_phone_connected_cb(void * para)
 {
     printf("%s %d\n", __FUNCTION__, __LINE__);
-    watch_voip_call_response_connect(voipcall_params.index);
+    watch_voip_call_response_connect(s_video_call_params.index);
 }
 #endif
 
@@ -543,7 +537,7 @@ 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
+    if((MMI_VOIP_CALL_STATE_INCOMING == s_video_call_params.state)) {   // MT call
         int32_t index = 1;
 
         watch_voip_call_response_originating(index);
@@ -552,7 +546,7 @@ static void voip_phone_left_slide_callback(lv_obj_t * obj)
         Hal_Timer_Start(60, voip_phone_connected_cb, NULL, 0);
     }
 
-    else if(MMI_VOIP_CALL_STATE_DIALING == voipcall_params.state) {    // MO call
+    else if(MMI_VOIP_CALL_STATE_DIALING == s_video_call_params.state) {    // MO call
         int32_t index = 1;
 
         watch_voip_call_response_originating(index);
@@ -561,8 +555,8 @@ static void voip_phone_left_slide_callback(lv_obj_t * obj)
         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)) {
+        if((MMI_VOIP_CALL_STATE_ACTIVE == s_video_call_params.state)
+                && (MODEM_VIDEO_CALL_TYPE_VIDEO == s_video_call_params.voip_call_type)) {
             voip_local_remote_switch_action(NULL, LV_EVENT_CLICKED);
         }
 }
@@ -570,7 +564,7 @@ static void voip_phone_left_slide_callback(lv_obj_t * obj)
 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);
+    mmi_video_call_phone_ring_off_action(NULL, LV_EVENT_CLICKED);
 }
 
 static void voip_phone_down_slide_callback(lv_obj_t * obj)
@@ -608,7 +602,7 @@ static void voip_slider_action(lv_obj_t * slider, lv_event_t e)
         // 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;
+        s_video_call_params.speaker_volume = v;
     }
 }
 
@@ -693,9 +687,9 @@ static lv_obj_t * voip_ring_off_content_create(lv_obj_t * par)
 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);
+    s_video_call_params.ring_off_timer_id = NULL;
+    s_video_call_params.ring_off_timeout  = true;
+    watch_voip_call_response_no_carrier(s_video_call_params.index, 0);
 }
 
 static void voip_ring_hook_action(lv_obj_t * btn, lv_event_t e)
@@ -714,7 +708,7 @@ static void voip_ring_hook_action(lv_obj_t * btn, lv_event_t e)
 
     int8_t ret = mmi_video_call_answer_req();
     if(ret < 0) {
-        watch_voip_call_response_no_carrier(voipcall_params.index, 0);
+        watch_voip_call_response_no_carrier(s_video_call_params.index, 0);
     }
 }
 
@@ -889,13 +883,13 @@ static void mmi_video_call_phone_dialing(lv_obj_t * content)
     lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
        lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL);
        lv_obj_set_width(label, lv_obj_get_width(content) - 20);
-    if(strlen(voipcall_params.name) > 0) 
+    if(strlen(s_video_call_params.name) > 0) 
        {
-        lv_label_set_text(label, voipcall_params.name);
+        lv_label_set_text(label, s_video_call_params.name);
     } 
        else 
        {
-        lv_label_set_text(label, voipcall_params.number);
+        lv_label_set_text(label, s_video_call_params.number);
     }
        lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
     lv_obj_set_click(label, false);
@@ -914,7 +908,7 @@ static void mmi_video_call_phone_dialing(lv_obj_t * content)
     lv_obj_t * btn = lv_imgbtn_create(content, NULL);
     lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_HANGUP_BTN);
     lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_HANGUP_BTN);
-    lv_obj_set_event_cb(btn, voip_ring_off_action);
+    lv_obj_set_event_cb(btn, mmi_video_call_phone_ring_off_action);
     lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_MID, 0, -30);
 }
 
@@ -950,13 +944,13 @@ static void mmi_video_call_phone_ring(lv_obj_t * content)
     lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
        lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL);
        lv_obj_set_width(label, lv_obj_get_width(content) - 20);
-    if(strlen(voipcall_params.name) > 0) 
+    if(strlen(s_video_call_params.name) > 0) 
        {
-        lv_label_set_text(label, voipcall_params.name);
+        lv_label_set_text(label, s_video_call_params.name);
     } 
        else 
        {
-        lv_label_set_text(label, voipcall_params.number);
+        lv_label_set_text(label, s_video_call_params.number);
     }
        lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
     lv_obj_set_click(label, false);
@@ -966,7 +960,7 @@ static void mmi_video_call_phone_ring(lv_obj_t * content)
     btn = lv_imgbtn_create(content, NULL);
     lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_HANGUP_BTN);
     lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_HANGUP_BTN);
-    lv_obj_set_event_cb(btn, voip_ring_off_action);
+    lv_obj_set_event_cb(btn, mmi_video_call_phone_ring_off_action);
     lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_LEFT, 20, -30);
 
     // btn ring hook
@@ -988,7 +982,7 @@ static void mmi_video_call_phone_connected(lv_obj_t * content)
         return;
     }
 
-    if(voipcall_params.voip_call_type == MODEM_VIDEO_CALL_TYPE_VOICE) 
+    if(s_video_call_params.voip_call_type == MODEM_VIDEO_CALL_TYPE_VOICE) 
        {
                VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
                
@@ -1010,13 +1004,13 @@ static void mmi_video_call_phone_connected(lv_obj_t * content)
                lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
                lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL);
                lv_obj_set_width(label, lv_obj_get_width(content) - 20);
-               if(strlen(voipcall_params.name) > 0) 
+               if(strlen(s_video_call_params.name) > 0) 
                {
-                       lv_label_set_text(label, voipcall_params.name);
+                       lv_label_set_text(label, s_video_call_params.name);
                } 
                else 
                {
-                       lv_label_set_text(label, voipcall_params.number);
+                       lv_label_set_text(label, s_video_call_params.number);
                }
                lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
                lv_obj_set_click(label, false);
@@ -1043,7 +1037,7 @@ static void mmi_video_call_phone_connected(lv_obj_t * content)
                btn = lv_imgbtn_create(content, 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_set_event_cb(btn, mmi_video_call_phone_ring_off_action);
                lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_RIGHT, -20, -50);
     } 
        else
@@ -1118,7 +1112,7 @@ static void mmi_video_call_phone_connected(lv_obj_t * content)
             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_set_event_cb(btn, mmi_video_call_phone_ring_off_action);
             lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
         } 
                else if((ext->voiph263fmt == VOIP_H263_FMT_CIF)
@@ -1182,7 +1176,7 @@ static void mmi_video_call_phone_connected(lv_obj_t * content)
             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_set_event_cb(btn, mmi_video_call_phone_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;
@@ -1209,22 +1203,22 @@ static void voip_phone_prepare_destory(lv_obj_t * activity_obj)
     Hal_Tone_Play_End();
 
     // ring off
-    voip_ring_off_action(NULL, LV_EVENT_CLICKED);
+    mmi_video_call_phone_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;
+    if(NULL != s_video_call_params.ring_off_timer_id) {
+        Hal_Timer_Stop(s_video_call_params.ring_off_timer_id);
+        s_video_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;
+    if(NULL != s_video_call_params.callreq_timer_id) {
+        Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
+        s_video_call_params.callreq_timer_id = NULL;
     }
 
-    Hal_Mem_Set(&voipcall_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
-    voipcall_params.state = MMI_VOIP_CALL_STATE_NULL;
+    Hal_Mem_Set(&s_video_call_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+    s_video_call_params.state = MMI_VOIP_CALL_STATE_NULL;
 }
 
 static void voip_get_time_elaps(uint32_t last_time, char * str, int8_t size)
@@ -1262,29 +1256,29 @@ 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) {
+    if(MMI_VOIP_CALL_STATE_DIALING == s_video_call_params.state) {
         return;
     }
 
     printf("%s: %d\n", __func__, index);
-    voipcall_params.index = index;
+    s_video_call_params.index = index;
 
     // state: NULL -> DIALLING
-    voipcall_params.state = MMI_VOIP_CALL_STATE_DIALING;
+    s_video_call_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) {
+    if(MMI_VOIP_CALL_STATE_ALERTING == s_video_call_params.state) {
         return;
     }
 
     uint8_t volume;
 
     // state: DIALLING -> ALERTING
-    voipcall_params.state = MMI_VOIP_CALL_STATE_ALERTING;
+    s_video_call_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);
@@ -1297,22 +1291,22 @@ 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;
+    s_video_call_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) {
+    if(MMI_VOIP_CALL_STATE_ACTIVE == s_video_call_params.state) {
         return;
     }
 
-    voipcall_params.state = MMI_VOIP_CALL_STATE_ACTIVE;
+    s_video_call_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;
+    if(NULL != s_video_call_params.callreq_timer_id) {
+        Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
+        s_video_call_params.callreq_timer_id = NULL;
     }
 
     // stop playing tone
@@ -1321,7 +1315,7 @@ void watch_voip_call_response_connect(int32_t index)
     Hal_Set_Voice_Call_Status(VOICE_CALL_START);
 
     // create connected UI
-    voip_phone_create(NULL, VOIP_PHONE_UI_CONNECTED);
+    mmi_video_call_phone_create(NULL, VOIP_PHONE_UI_CONNECTED);
 }
 
 void watch_voip_call_response_disconnect(int32_t index)
@@ -1333,21 +1327,21 @@ void watch_voip_call_response_disconnect(int32_t index)
 
     // create ring off UI
     if(voip_phone_get_activity_obj()) {
-        voip_phone_ring_off_create();
+        mmi_video_call_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(MMI_VIDEO_CALL_PARAMS_T));
-    voipcall_params.state = MMI_VOIP_CALL_STATE_NULL;
+    Hal_Mem_Set(&s_video_call_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+    s_video_call_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)
+    if((false == s_video_call_params.ring_off_timeout)
             && (1 == isNoCarrier)
-            && (MMI_VOIP_CALL_STATE_NULL == voipcall_params.state)) {
+            && (MMI_VOIP_CALL_STATE_NULL == s_video_call_params.state)) {
         printf("%s: ignore no carrier in state NULL\n", __func__);
         return;
     }
@@ -1358,21 +1352,21 @@ void watch_voip_call_response_no_carrier(int32_t index, uint8_t isNoCarrier)
     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;
+    if(NULL != s_video_call_params.ring_off_timer_id) {
+        Hal_Timer_Stop(s_video_call_params.ring_off_timer_id);
+        s_video_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;
+    if(NULL != s_video_call_params.callreq_timer_id) {
+        Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
+        s_video_call_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();
+        mmi_video_call_phone_ring_off_create();
     }
 
     if(MMI_MODEM_CALL_STATE_NULL != phone_get_call_state()) {
@@ -1383,8 +1377,8 @@ void watch_voip_call_response_no_carrier(int32_t index, uint8_t isNoCarrier)
     Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
     watch_wakeup_time_reset();
 
-    Hal_Mem_Set(&voipcall_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
-    voipcall_params.state = MMI_VOIP_CALL_STATE_NULL;
+    Hal_Mem_Set(&s_video_call_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+    s_video_call_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)
@@ -1403,13 +1397,13 @@ void watch_voip_call_response_bottom_error(void)
 {
     printf("%s %d\n", __FUNCTION__, __LINE__);
     voip_phone_cleanup();
-    Hal_Mem_Set(&voipcall_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+    Hal_Mem_Set(&s_video_call_params, 0, sizeof(MMI_VIDEO_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);
+    //voip_call_dial_req(s_video_call_params.voip_call_type, s_video_call_params.number);
 }
 
 void watch_voip_incomingcall_response(char * number, int32_t calltype)
@@ -1425,11 +1419,11 @@ void watch_voip_incomingcall_response(char * number, int32_t calltype)
         return;
     }
 
-    Hal_Mem_Set(&voipcall_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
-    voipcall_params.voip_call_type = (MODEM_VIDEO_CALL_TYPE)calltype;
-    voipcall_params.is_mt          = true;
-    voipcall_params.state          = MMI_VOIP_CALL_STATE_INCOMING;
-    strncpy(voipcall_params.number, number, NV_CONTACTS_MAX_NUMBER_LEN);
+    Hal_Mem_Set(&s_video_call_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+    s_video_call_params.voip_call_type = (MODEM_VIDEO_CALL_TYPE)calltype;
+    s_video_call_params.is_mt          = true;
+    s_video_call_params.state          = MMI_VOIP_CALL_STATE_INCOMING;
+    strncpy(s_video_call_params.number, number, NV_CONTACTS_MAX_NUMBER_LEN);
        
     //Hal_Mem_Free(number);
 
@@ -1451,7 +1445,7 @@ void watch_voip_incomingcall_response(char * number, int32_t calltype)
             voip_rat_check_start();
 
             // create ring UI
-            voip_phone_create(NULL, VOIP_PHONE_UI_INCOMING);
+            mmi_video_call_phone_create(NULL, VOIP_PHONE_UI_INCOMING);
         }
         else
         { // AUDIO_CTRL_PRIORITY_1
@@ -1462,19 +1456,19 @@ void watch_voip_incomingcall_response(char * number, int32_t calltype)
             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;
+            if(NULL != s_video_call_params.ring_off_timer_id) {
+                Hal_Timer_Stop(s_video_call_params.ring_off_timer_id);
+                s_video_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;
+            if(NULL != s_video_call_params.callreq_timer_id) {
+                Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
+                s_video_call_params.callreq_timer_id = NULL;
             }
 
-            Hal_Mem_Set(&voipcall_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
-            voipcall_params.state = MMI_VOIP_CALL_STATE_NULL;
+            Hal_Mem_Set(&s_video_call_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+            s_video_call_params.state = MMI_VOIP_CALL_STATE_NULL;
             voip_set_volume_when_slider_act();
             voip_phone_cleanup();
             lv_watch_png_cache_all_free();
@@ -1486,7 +1480,7 @@ void watch_voip_incomingcall_response(char * number, int32_t calltype)
         mmi_video_call_reject_req(TRUE);
 
 #if VOIP_PHONE_TEST
-        watch_voip_call_response_no_carrier(voipcall_params.index, 0);
+        watch_voip_call_response_no_carrier(s_video_call_params.index, 0);
 #endif
     }
 } /* watch_voip_incomingcall_response */
@@ -1615,7 +1609,7 @@ 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) {
+        if(MMI_VOIP_CALL_STATE_NULL != s_video_call_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);
@@ -1670,7 +1664,7 @@ static bool is_rat_gsm(void)
 static void rat_check(lv_task_t *task)
 {
     if(is_rat_gsm()) {
-        voip_ring_off_action(NULL, LV_EVENT_CLICKED);
+        mmi_video_call_phone_ring_off_action(NULL, LV_EVENT_CLICKED);
     }
 }
 
@@ -1705,16 +1699,74 @@ void voip_fps_check(int8_t fps)
 
 
 
-#define VOIP_ROOM_ID "jrtc012" // "104799"
+#ifdef __VIDEO_CALL_TEST__
+#define MMI_VC_ROOM_ID "jrtc001" // "104799"
+#endif
 
-static uint8_t s_video_call_init_flag = 0;
+static nv_watch_vc_contact_t s_vc_contact = {0};
 static TIMER_ID fail_timer_id = NULL;
 
+char * mmi_video_call_params_number_get(void)
+{
+       return (s_video_call_params.number);
+}
+
+MMI_VOIP_CALL_STATE_E mmi_video_call_params_state_get(void)
+{
+       return (s_video_call_params.state);
+}
+
+MODEM_VIDEO_CALL_TYPE mmi_video_call_params_type_get(void)
+{
+       return (s_video_call_params.voip_call_type);
+}
+
+
+
+void mmi_video_call_contact_nv_write(void)
+{
+       uint32_t nv_data_length = sizeof(nv_watch_vc_contact_t);
+       
+       if(nv_data_length != UI_NV_Write_Req(NV_SECTION_UI_VC_CONTACT, 0, nv_data_length, (uint8_t *)&s_vc_contact))
+       {
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: nv write fail\n", __FUNCTION__, __LINE__);
+       }
+}
+
+void mmi_video_call_contact_nv_read(void)
+{
+       uint32_t nv_data_length = sizeof(nv_watch_vc_contact_t);
+       
+       if(nv_data_length != UI_NV_Read_Req(NV_SECTION_UI_VC_CONTACT, 0, nv_data_length, (uint8_t *)&s_vc_contact))
+       {
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: nv read fail\n", __FUNCTION__, __LINE__);
+       }
+}
+
+void mmi_video_call_contact_set(nv_watch_vc_contact_t * contact_list)
+{
+    if(NULL == contact_list) 
+       {
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
+        return;
+    }
+
+       _lv_memcpy(&s_vc_contact, contact_list, sizeof(nv_watch_vc_contact_t));
+       mmi_video_call_contact_nv_write();
+
+
+    //phonebook_update_ui(contact_list, count, 0, 0);
+
+}
+
+
+
+
 static void mmi_video_call_req_timeout_cb(void * para)
 {
        VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
-    voipcall_params.callreq_timer_id = NULL;
+    s_video_call_params.callreq_timer_id = NULL;
     mmi_video_call_hangup_req(TRUE);
 }
 
@@ -1723,9 +1775,9 @@ void mmi_video_call_req(char * number, MODEM_VIDEO_CALL_TYPE voip_call_type)
        VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, number, voip_call_type);
 
     // check call state
-    if(MMI_VOIP_CALL_STATE_NULL != voipcall_params.state)
+    if(MMI_VOIP_CALL_STATE_NULL != s_video_call_params.state)
        {
-               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %d\n", __FUNCTION__, __LINE__, voipcall_params.state);
+               VIDEO_CALL_DEBUG_PRINTF("[@CHENG][%s][%d]: %d\n", __FUNCTION__, __LINE__, s_video_call_params.state);
         return;
     }
 
@@ -1737,29 +1789,29 @@ void mmi_video_call_req(char * number, MODEM_VIDEO_CALL_TYPE voip_call_type)
     }
 
     // stop callreq timer
-    if(NULL != voipcall_params.callreq_timer_id) 
+    if(NULL != s_video_call_params.callreq_timer_id) 
        {
-        Hal_Timer_Stop(voipcall_params.callreq_timer_id);
-        voipcall_params.callreq_timer_id = NULL;
+        Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
+        s_video_call_params.callreq_timer_id = NULL;
     }
 
     // set call parameters
-    Hal_Mem_Set(&voipcall_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
-    voipcall_params.is_mt          = false;
-    voipcall_params.state          = MMI_VOIP_CALL_STATE_DIALING;
-    voipcall_params.voip_call_type = voip_call_type;
-    strcpy(voipcall_params.number, number);
-
-    int8_t ret = mmi_video_call_dial_req(voip_call_type, voipcall_params.number);
-    if(NULL == voipcall_params.callreq_timer_id) 
+    Hal_Mem_Set(&s_video_call_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+    s_video_call_params.is_mt          = false;
+    s_video_call_params.state          = MMI_VOIP_CALL_STATE_DIALING;
+    s_video_call_params.voip_call_type = voip_call_type;
+    strcpy(s_video_call_params.number, number);
+
+    int8_t ret = mmi_video_call_dial_req(voip_call_type, s_video_call_params.number);
+    if(NULL == s_video_call_params.callreq_timer_id) 
        {
                UINT32 timeout = (ret >= 0) ? VOIP_CALLREQ_TIME_OUT : 1*1000;
                
-        voipcall_params.callreq_timer_id = Hal_Timer_Start(timeout, mmi_video_call_req_timeout_cb, NULL, 0);
+        s_video_call_params.callreq_timer_id = Hal_Timer_Start(timeout, mmi_video_call_req_timeout_cb, NULL, 0);
     }
     // create dialing UI
     voip_rat_check_start();
-    voip_phone_create(NULL, VOIP_PHONE_UI_DIALING);
+    mmi_video_call_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);
 }
@@ -1812,7 +1864,11 @@ static void mmi_video_call_voice_btn_action(lv_obj_t * btn, lv_event_t e)
 
     if(mmi_video_call_check_mo_permission())
        {
-        mmi_video_call_req(VOIP_ROOM_ID, MODEM_VIDEO_CALL_TYPE_VOICE);
+       #ifdef __VIDEO_CALL_TEST__
+        mmi_video_call_req(MMI_VC_ROOM_ID, MODEM_VIDEO_CALL_TYPE_VOICE);
+       #else
+               mmi_video_call_req(, MODEM_VIDEO_CALL_TYPE_VOICE);
+       #endif
     } 
        else 
        {
@@ -1820,7 +1876,7 @@ static void mmi_video_call_voice_btn_action(lv_obj_t * btn, lv_event_t e)
     }
 }
 
-static void mmi_video_call_voideo_btn_action(lv_obj_t * btn, lv_event_t e)
+static void mmi_video_call_video_btn_action(lv_obj_t * btn, lv_event_t e)
 {
     if(LV_EVENT_CLICKED != e)
        {
@@ -1829,7 +1885,11 @@ static void mmi_video_call_voideo_btn_action(lv_obj_t * btn, lv_event_t e)
 
     if(mmi_video_call_check_mo_permission()) 
        {
-        mmi_video_call_req(VOIP_ROOM_ID, MODEM_VIDEO_CALL_TYPE_VIDEO);
+       #ifdef __VIDEO_CALL_TEST__
+        mmi_video_call_req(MMI_VC_ROOM_ID, MODEM_VIDEO_CALL_TYPE_VIDEO);
+       #else
+               mmi_video_call_req(, MODEM_VIDEO_CALL_TYPE_VIDEO);
+       #endif
     } 
        else 
        {
@@ -1890,7 +1950,7 @@ static lv_obj_t * mmi_video_call_main_create(lv_obj_t * activity_obj)
                lv_imgbtn_set_src(videobtn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_VIDEO_BTN);
                lv_imgbtn_set_src(videobtn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_VIDEO_BTN);
                lv_obj_align(videobtn, cont, LV_ALIGN_IN_BOTTOM_MID, 0, -10);
-               lv_obj_set_event_cb(videobtn, mmi_video_call_voideo_btn_action);
+               lv_obj_set_event_cb(videobtn, mmi_video_call_video_btn_action);
 
                //lv_watch_set_free_num(activity_obj, 1);
     }
@@ -1901,13 +1961,7 @@ static lv_obj_t * mmi_video_call_main_create(lv_obj_t * activity_obj)
 void video_call_create_event_cb(lv_obj_t * btn, lv_event_t e)
 {
     if(LV_EVENT_CLICKED == e) 
-       {
-               if(0 == s_video_call_init_flag)
-               {
-                       s_video_call_init_flag = 1;
-                       mmi_video_call_jrtc_config_init();
-               }
-               
+       {               
         lv_watch_png_cache_all_free();
         mmi_video_call_main_create(NULL);
     }
@@ -1923,7 +1977,7 @@ void video_call_create_event_cb(lv_obj_t * btn, lv_event_t e)
 uint8_t voip_get_call_volume(void)
 {
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
-    return(voipcall_params.speaker_volume);
+    return(s_video_call_params.speaker_volume);
 #endif
 
     return 0;
@@ -1932,9 +1986,9 @@ uint8_t voip_get_call_volume(void)
 bool watch_voip_suspend_check(void)
 {
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
-    if((voipcall_params.voip_call_type == MODEM_VIDEO_CALL_TYPE_VIDEO)
-               || (MMI_VOIP_CALL_STATE_INCOMING == voipcall_params.state)
-               || (MMI_VOIP_CALL_STATE_DIALING == voipcall_params.state)
+    if((s_video_call_params.voip_call_type == MODEM_VIDEO_CALL_TYPE_VIDEO)
+               || (MMI_VOIP_CALL_STATE_INCOMING == s_video_call_params.state)
+               || (MMI_VOIP_CALL_STATE_DIALING == s_video_call_params.state)
                ) 
     {
         return false;
@@ -1967,7 +2021,7 @@ void voip_activity_destroy_req(void)
         return;
     }
 
-    switch(voipcall_params.state) 
+    switch(s_video_call_params.state) 
        {
         case MMI_VOIP_CALL_STATE_NULL:
         case MMI_VOIP_CALL_STATE_INVALID:
@@ -1992,19 +2046,19 @@ void voip_activity_destroy_req(void)
     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;
+    if(NULL != s_video_call_params.ring_off_timer_id) {
+        Hal_Timer_Stop(s_video_call_params.ring_off_timer_id);
+        s_video_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;
+    if(NULL != s_video_call_params.callreq_timer_id) {
+        Hal_Timer_Stop(s_video_call_params.callreq_timer_id);
+        s_video_call_params.callreq_timer_id = NULL;
     }
 
-    Hal_Mem_Set(&voipcall_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
-    voipcall_params.state = MMI_VOIP_CALL_STATE_NULL;
+    Hal_Mem_Set(&s_video_call_params, 0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+    s_video_call_params.state = MMI_VOIP_CALL_STATE_NULL;
     voip_set_volume_when_slider_act();
     voip_phone_cleanup();
     lv_watch_png_cache_all_free();
index aab1107..0ec167f 100644 (file)
@@ -39,6 +39,8 @@ uint8_t voip_get_call_volume(void);
 #define VIDEO_CALL_DEBUG_PRINTF(fmt, ...)
 #endif
 
+#define __VIDEO_CALL_TEST__
+
 
 #define ENABLE_VIDEO_SCALE  1
 #define VOIP_PHONE_TEST  0
@@ -190,7 +192,7 @@ typedef struct {
  * GLOBAL PROTOTYPES
  **********************/
 lv_voip_phone_obj_ext_t * voip_phone_get_ext(void);
-void * voip_phone_get_video_buffer(void);
+void * mmi_video_call_phone_get_video_buffer(void);
 void watch_voip_call_response_connect(int32_t index);
 void watch_voip_call_response_no_carrier(int32_t index, uint8_t isNoCarrier);
 void watch_voip_call_response_alerting(int32_t index);
@@ -202,7 +204,11 @@ void watch_voip_message_handle_init(void);
 void watch_ui_voip_message_handle(void * voipmsg);
 void watch_voip_autotest_handle(void * testmsg);
 
-void mmi_video_call_jrtc_config_init(void);
+void mmi_video_call_jrtc_config_init_00(void);
+void mmi_video_call_jrtc_config_init_01(char * t_appkey, char * t_key, char * t_tokens);
+void mmi_video_call_contact_nv_read(void);
+void mmi_video_call_contact_set(nv_watch_vc_contact_t * contact_list);
+
 int8_t mmi_video_call_dial_req(MODEM_VIDEO_CALL_TYPE calltype, char * pContactUri);
 void mmi_video_call_hangup_req(BOOL bye);
 int8_t mmi_video_call_answer_req(void);
index 82cf08b..71aa057 100644 (file)
@@ -181,6 +181,8 @@ void watch_power_on_req(void)
        mmi_sos_number_nv_read();
 #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
        mmi_video_call_jrtc_config_init_00();
+       mmi_video_call_contact_nv_read();
+
 #endif
 
 #endif
index 113fd60..b895a8a 100644 (file)
@@ -517,6 +517,16 @@ static unsigned char * mmi_protocol_fzd_action_string_get(MMI_PROTOCOL_FZD_ACTIO
                        {MMI_FZD_SERVER_SET_CENTER_NUMBER, "CENTER"},           //
                        {MMI_FZD_ACTION_UNBIND, "DLT"},
 
+               #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
+                       {MMI_FZD_WATCH_GET_VC_CONFIG, "juhoo_config"},
+                       {MMI_FZD_WATCH_GET_VC_CONTACT, "video_contact"},
+                       {MMI_FZD_WATCH_VC_CALL_REQUEST, "jup_hoo_call"},
+                       {MMI_FZD_SERVER_VC_CALL_RESPONSE, "jup_hoo_reply"},
+               
+
+               
+               #endif
+
                
                /*******add before this line*******/
                        {MMI_FZD_ACTION_MAX, ""}, // MMI_FZD_ACTION_MAX
@@ -672,6 +682,25 @@ static bool mmi_protocol_fzd_content_parse(unsigned char * content_ptr, unsigned
                case MMI_FZD_ACTION_UNBIND:
                        break;
 
+       #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
+               case MMI_FZD_WATCH_GET_VC_CONFIG:
+                       mmi_protocol_fzd_parse_WATCH_GET_VC_CONFIG(next_buff, next_buff_len);
+                       break;
+                       
+               case MMI_FZD_WATCH_GET_VC_CONTACT:
+                       mmi_protocol_fzd_parse_WATCH_GET_VC_CONTACT(next_buff, next_buff_len);
+                       break;
+               
+               case MMI_FZD_WATCH_VC_CALL_REQUEST:
+                       mmi_protocol_fzd_parse_WATCH_VC_CALL_REQUEST(next_buff, next_buff_len);
+                       break;
+                       
+               case MMI_FZD_SERVER_VC_CALL_RESPONSE:
+                       mmi_protocol_fzd_parse_SERVER_VC_CALL_RESPONSE(next_buff, next_buff_len);
+                       break;
+               
+       #endif
+
                         
                default:
                        break;
@@ -757,6 +786,10 @@ bool mmi_protocol_fzd_parse_ACTION_BIND(unsigned char * next_buff, unsigned int
                {
                        mmi_protocol_watch_bind_state_set(true);
                        mmi_protocol_watch_timed_mission_action();
+
+                       //video call
+                       mmi_protocol_fzd_action_get_vc_config();
+
                }
        }
 
@@ -1917,6 +1950,181 @@ bool mmi_protocol_fzd_action_unbind(void)
 }
 
 
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
+bool mmi_protocol_fzd_action_get_vc_config(void)
+{
+       return mmi_protocol_fzd_send_without_data(MMI_FZD_WATCH_GET_VC_CONFIG);
+}
+
+bool mmi_protocol_fzd_action_get_vc_contact(void)
+{
+       return mmi_protocol_fzd_send_without_data(MMI_FZD_WATCH_GET_VC_CONTACT);
+}
+
+bool mmi_protocol_fzd_parse_WATCH_GET_VC_CONFIG(unsigned char * next_buff, unsigned int next_buff_len)
+{
+       bool result = false;
+       //MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_WATCH_GET_VC_CONFIG;
+
+       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);
+
+       char * t_tokens = NULL;
+       char * t_appkey = NULL;
+       char * t_key = NULL;
+
+       t_tokens = km_strtok_r(NULL, ",", &next_buff);
+       t_appkey = km_strtok_r(NULL, ",", &next_buff);
+       t_key = km_strtok_r(NULL, ",", &next_buff);
+       
+       mmi_video_call_jrtc_config_init_01(t_appkey, t_key, t_tokens);
+
+       //get contact
+       mmi_protocol_fzd_action_get_vc_contact();
+       
+       return result;
+}
+
+bool mmi_protocol_fzd_parse_WATCH_GET_VC_CONTACT(unsigned char * next_buff, unsigned int next_buff_len)
+{
+       bool result = false;
+       //MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_WATCH_GET_VC_CONTACT;
+
+       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);
+
+       nv_watch_vc_contact_t t_vc_contact = {0};
+       char * temp_ptr = NULL;
+       uint8_t i = 0;
+       uint8_t t_len_1 = 0, t_len_2 = 0;
+
+       while (NULL != next_buff)
+       {
+               temp_ptr = km_strtok_r(NULL, ",", &next_buff);
+               if (NULL != temp_ptr)
+               {
+                       t_len_1 = FZD_MIN(strlen(temp_ptr), NV_WATCH_VC_CONTACT_NUMBER_LEN - 1);
+                       strncpy(t_vc_contact.number[i], temp_ptr, t_len_1);
+               }
+               else
+               {
+                       break;
+               }
+               
+               temp_ptr = km_strtok_r(NULL, ",", &next_buff);
+               if (NULL != temp_ptr)
+               {
+                       t_len_1 = FZD_MIN(strlen(temp_ptr), (NV_WATCH_VC_CONTACT_NAME_LEN - 1) * 4);
+                       mmi_unicode_hex_str_to_utf8_str(temp_ptr, t_len_1, t_vc_contact.name[i], &t_len_2);
+               }
+               else
+               {
+                       break;
+               }
+
+               i++;
+               if(NV_WATCH_VC_CONTACT_TOTAL <= i)
+               {
+                       break;
+               }
+       }
+
+       t_vc_contact.total = i;
+       mmi_video_call_contact_set(&t_vc_contact);
+
+       return result;
+}
+
+bool mmi_protocol_fzd_action_send_vc_call(char * number, uint8_t call_type)
+{
+       bool result = false;
+       MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_WATCH_VC_CALL_REQUEST;
+       unsigned char content_buff[NV_WATCH_VC_CONTACT_NUMBER_LEN + 8] = {0};
+       unsigned int content_lenth = 0;
+
+       sprintf(content_buff, ",%s,%d", number, call_type);
+       content_lenth = strlen(content_buff);
+       
+       result = mmi_protocol_fzd_send_with_data(action, content_buff, content_lenth);
+
+       return result;
+}
+       
+// 1£º¶Ô·½ÔÚÏߣ¬µÈ´ý½ÓÌý£»0£º¶Ô·½²»ÔÚÏß
+bool mmi_protocol_fzd_parse_WATCH_VC_CALL_REQUEST(unsigned char * next_buff, unsigned int next_buff_len)
+{
+       bool result = false;
+
+       if(NULL == next_buff || 0 == next_buff_len)
+       {
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               return false;
+       }
+
+       result = true;
+
+       uint8_t t_value = 0;
+
+       t_value = atoi(next_buff);
+       if(0 == t_value)
+       {
+               // the other party is not online
+
+               
+       }
+       else
+       {
+               // wait, do nothing
+       }
+       
+       return result;
+}
+
+// 1£º¶Ô·½½ÓÊÜ£»0£º¶Ô·½¾Ü¾ø
+bool mmi_protocol_fzd_parse_SERVER_VC_CALL_RESPONSE(unsigned char * next_buff, unsigned int next_buff_len)
+{
+       bool result = false;
+       MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_SERVER_VC_CALL_RESPONSE;
+
+       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);
+
+       char * t_tokens = NULL;
+       char * t_appkey = NULL;
+       char * t_key = NULL;
+
+       t_tokens = km_strtok_r(NULL, ",", &next_buff);
+       t_appkey = km_strtok_r(NULL, ",", &next_buff);
+       t_key = km_strtok_r(NULL, ",", &next_buff);
+       
+       mmi_video_call_jrtc_config_init_01(t_appkey, t_key, t_tokens);
+
+       //get contact
+       mmi_protocol_fzd_action_get_vc_contact();
+       
+       return result;
+}
+
+
+#endif
 
 
 
index 3d15f78..64b9959 100644 (file)
@@ -121,6 +121,14 @@ typedef enum
        MMI_FZD_SERVER_SET_CENTER_NUMBER,
        MMI_FZD_ACTION_UNBIND,
 
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
+       MMI_FZD_WATCH_GET_VC_CONFIG,
+       MMI_FZD_WATCH_GET_VC_CONTACT,
+       MMI_FZD_WATCH_VC_CALL_REQUEST,
+       MMI_FZD_SERVER_VC_CALL_RESPONSE,
+
+
+#endif
 
 
 /*******add before this line*******/