#video call
lv_apps/mmi_video_call/mmi_video_call.c
lv_apps/mmi_video_call/mmi_jrtc_client.c
- lv_apps/mmi_video_call/mmi_video_call_fzd.c
- lv_apps/mmi_video_call/mmi_jrtc_client_fzd.c
- lv_apps/mmi_video_call/mmi_video_call_tongxin.c
- lv_apps/mmi_video_call/mmi_jrtc_client_tongxin.c
#wechat
lv_apps/mmi_wechat/wechat_ui.c
#health_measure
#include "lv_watch.h"
#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
-#if defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__)
//#include <jrtc.h>
#include "../../../../product/craneg_modem/framework/inc/jrtc.h"
-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
-{
- void /*lv_task_t*/ *state_task;
- video_call_jrtc_image_t txframe;
- video_call_jrtc_image_t rxframe;
- void* jrtc_ptr;
- TIMER_ID closed_timer_id;
- uint8_t closing;
-} MMI_VIDEO_CALL_JRTC_T;
-
-
-static MMI_VIDEO_CALL_JRTC_T s_video_call_jrtc;
-
-
-static uint8_t voip_jrtc_get_image(void * preview_buf);
-
-extern UINT32 OsaGetTicks(void *pForFutureUse);
-
-
-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};
- char tokens[128+1] = "";
-
- char imei[16] = {0};
- app_adp_get_imei_req(imei);
- strncpy(uid, imei, 16);
-
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%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));
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__
+#include "mmi_jrtc_client_fzd.c"
#endif
-}
-
-void mmi_video_call_jrtc_config_init_01(char * t_appkey, char * t_key, char * t_tokens)
-{
-#ifndef __VIDEO_CALL_TEST__
- 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);
-
- //VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, t_tokens);
- //VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, t_tokens+32);
- //VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, t_tokens+64);
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%d,%d\n", __FUNCTION__, __LINE__, strlen(t_appkey), strlen(t_key), strlen(t_tokens));
-
- memcpy(appkey, t_appkey, 24);
- memcpy(key, t_key, 16);
- memcpy(tokens, t_tokens, 128);
-
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(appkey), appkey);
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(uid), uid);
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(key), key);
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(tokens), tokens);
-
- jrtc_config(appkey, uid, key, tokens);
- Hal_Mem_Set(&s_video_call_jrtc, 0x0, sizeof(MMI_VIDEO_CALL_JRTC_T));
-#endif
-}
-
-static void mmi_video_call_jrtc_clean_up(void)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- if(NULL != s_video_call_jrtc.state_task)
- {
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- lv_task_del(s_video_call_jrtc.state_task);
- }
-
- Hal_Mem_Set(&s_video_call_jrtc, 0x0, sizeof(MMI_VIDEO_CALL_JRTC_T));
-}
-
-static void mmi_video_call_jrtc_timeout_cb(void * para)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- mmi_video_call_jrtc_clean_up();
-}
-
-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(s_video_call_jrtc.jrtc_ptr);
-
- if(state != oldstate)
- {
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: oldstate=%d,state=%d\n", __FUNCTION__, __LINE__, oldstate, state);
- }
-
- switch(state)
- {
- case JRTC_CLOSED:
- if((NULL != s_video_call_jrtc.jrtc_ptr) && (NULL == s_video_call_jrtc.closed_timer_id))
- {
- video_call_jrtc_error_e err = jrtc_error(s_video_call_jrtc.jrtc_ptr);
-
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: error=%d\n", __FUNCTION__, __LINE__, err);
-
- if(!s_video_call_jrtc.closing)
- {
- jrtc_close(s_video_call_jrtc.jrtc_ptr, JRTC_ENIL);
- s_video_call_jrtc.closing = 1;
- }
-
- s_video_call_jrtc.closed_timer_id = Hal_Timer_Start(100, mmi_video_call_jrtc_timeout_cb, NULL, 0);
- }
-
- if(MMI_VIDEO_CALL_STATE_NONE != mmi_video_call_params_state_get())
- {
- mmi_vc_ring_off_no_carrier(1);
- }
- break;
-
- case JRTC_LEAVING:
- break;
-
- case JRTC_OPENED:
- break;
-
- case JRTC_JOINING:
- break;
-
- case JRTC_JOINED:
- break;
- case JRTC_TALKING:
- mmi_vc_call_action_connected();
-
- /* Get image */
- if (MODEM_VIDEO_CALL_TYPE_VIDEO == mmi_video_call_params_type_get())
- {
- void *buf = mmi_video_call_phone_get_video_buffer();
- if(voip_jrtc_get_image(buf))
- {
- lv_canvas_set_buffer(mmi_vc_call_get_ext()->canvas, buf, canvas_width, canvas_heigh, LV_IMG_CF_TRUE_COLOR);
- }
- }
- break;
-
- default:
- break;
- }
-
- oldstate = state;
-}
-
-
-static int8_t mmi_video_call_jrtc_open(const char* roomid, MODEM_VIDEO_CALL_TYPE calltype)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, roomid, calltype);
-
-#ifdef __VIDEO_CALL_TEST__
- char * ticket = NULL;
-#else
- char ticket[64+8] = "ab2671af32b7278ca5e7ad9e26b488aff6640569eaa5b8e1f690d8ac298f6e61";
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__
+#include "mmi_jrtc_client_tongxin.c"
#endif
-
- Hal_Mem_Set(&s_video_call_jrtc, 0, sizeof(MMI_VIDEO_CALL_JRTC_T));
-
- if (MODEM_VIDEO_CALL_TYPE_VIDEO == calltype)
- {
- 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
-
- s_video_call_jrtc.jrtc_ptr= jrtc_open(roomid, ticket, &s_video_call_jrtc.rxframe, &s_video_call_jrtc.txframe);
- }
- else
- {
- s_video_call_jrtc.jrtc_ptr= jrtc_open(roomid, ticket, NULL, NULL);
- }
-
- if (!s_video_call_jrtc.jrtc_ptr)
- {
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
- mmi_video_call_jrtc_clean_up();
- return -1;
- }
- jrtc_activate(s_video_call_jrtc.jrtc_ptr, JRTC_AUDIO|JRTC_CAMERA);
-
- 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;
-}
-
-int8_t mmi_video_call_dial_req(MODEM_VIDEO_CALL_TYPE calltype, char * pContactUri)
-{
- int8_t ret = -1;
-
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, pContactUri, calltype);
-
- mmi_vc_call_operate_send_to_server(2);
-
- if (NULL == s_video_call_jrtc.jrtc_ptr)
- {
- ret = mmi_video_call_jrtc_open(pContactUri, calltype);
- }
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %p, %d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, ret);
-
- return ret;
-}
-
-void mmi_video_call_hangup_req(BOOL bye)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, bye);
-
- mmi_vc_call_operate_send_to_server(0);
-
- if (NULL != s_video_call_jrtc.jrtc_ptr)
- {
- video_call_jrtc_error_e err = (TRUE == bye) ? JRTC_EBYE : JRTC_EAUDIOCALL;
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %p,%d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, err);
-
- jrtc_close(s_video_call_jrtc.jrtc_ptr, err);
- s_video_call_jrtc.closing = 1;
- }
- else
- {
- mmi_vc_ring_off_no_carrier(0);
- }
-}
-
-int8_t mmi_video_call_answer_req(void)
-{
- int8_t ret = -1;
-
- mmi_vc_call_operate_send_to_server(1);
-
- 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());
- }
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %p, %d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, ret);
-
- return ret;
-}
-
-void mmi_video_call_reject_req(BOOL bye)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, bye);
-
- mmi_vc_call_operate_send_to_server(0);
-
- if (NULL != s_video_call_jrtc.jrtc_ptr)
- {
- video_call_jrtc_error_e err = (TRUE == bye) ? JRTC_EBYE : JRTC_EAUDIOCALL;
-
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %p,%d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, err);
-
- jrtc_close(s_video_call_jrtc.jrtc_ptr, err);
- s_video_call_jrtc.closing = 1;
- }
- else
- {
- mmi_vc_ring_off_no_carrier(0);
- }
-}
-
-
-//extern unsigned yuv420_scale(int src_width, int src_height, int dst_width, int dst_height, unsigned char *src_buf, unsigned char *dst_buf, unsigned char semi);
-//extern unsigned rgb565_scale(int32_t src_width, int32_t src_height, int32_t dst_width, int32_t dst_height, uint8_t *src_buf, uint8_t *dst_buf);
-//extern void yuv420_2_rgb565(int width, int height, const unsigned char *src, unsigned short *dst, unsigned semi);
-
-static uint8_t voip_jrtc_get_image(void * preview_buf)
-{
- uint8_t ret = 0;
- lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
- LV_ASSERT_MEM(ext);
-
- video_call_jrtc_image_t * frame = NULL;
- if(ext->local_remote_switch_flag == VOIP_REMOTE_SWITCH_REMOTE)
- frame = &s_video_call_jrtc.rxframe;
- else
- frame = &s_video_call_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);
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__
+#include "mmi_jrtc_client_wulian.c"
#endif
- frame->get = frame->put;
- ret = 1;
- voip_fps_check(frame->fps);
- }
-
- return ret;
-}
-
-#endif
#endif
#include "lv_watch.h"
-#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__
-//#include <jrtc.h>
-#include "../../../../product/craneg_modem/framework/inc/jrtc.h"
-
typedef enum jrtc_state video_call_jrtc_state_e;
typedef enum jrtc_error video_call_jrtc_error_e;
}
#endif
-#endif
#include "lv_watch.h"
-#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__
-//#include <jrtc.h>
-#include "../../../../product/craneg_modem/framework/inc/jrtc.h"
-
typedef enum jrtc_state video_call_jrtc_state_e;
typedef enum jrtc_error video_call_jrtc_error_e;
}
#endif
-#endif
--- /dev/null
+
+
+
+#include "lv_watch.h"
+
+#if defined(__MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__)
+
+
+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
+{
+ void /*lv_task_t*/ *state_task;
+ video_call_jrtc_image_t txframe;
+ video_call_jrtc_image_t rxframe;
+ void* jrtc_ptr;
+ TIMER_ID closed_timer_id;
+ uint8_t closing;
+} MMI_VIDEO_CALL_JRTC_T;
+
+
+static MMI_VIDEO_CALL_JRTC_T s_video_call_jrtc;
+
+
+static uint8_t voip_jrtc_get_image(void * preview_buf);
+
+extern UINT32 OsaGetTicks(void *pForFutureUse);
+
+
+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};
+ char tokens[128+1] = "";
+
+ char imei[16] = {0};
+ app_adp_get_imei_req(imei);
+ strncpy(uid, imei, 16);
+
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%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)
+{
+#ifndef __VIDEO_CALL_TEST__
+ 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);
+
+ //VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, t_tokens);
+ //VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, t_tokens+32);
+ //VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, t_tokens+64);
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%d,%d\n", __FUNCTION__, __LINE__, strlen(t_appkey), strlen(t_key), strlen(t_tokens));
+
+ memcpy(appkey, t_appkey, 24);
+ memcpy(key, t_key, 16);
+ memcpy(tokens, t_tokens, 128);
+
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(appkey), appkey);
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(uid), uid);
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(key), key);
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d,%s\n", __FUNCTION__, __LINE__, strlen(tokens), tokens);
+
+ jrtc_config(appkey, uid, key, tokens);
+ Hal_Mem_Set(&s_video_call_jrtc, 0x0, sizeof(MMI_VIDEO_CALL_JRTC_T));
+#endif
+}
+
+static void mmi_video_call_jrtc_clean_up(void)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ if(NULL != s_video_call_jrtc.state_task)
+ {
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_task_del(s_video_call_jrtc.state_task);
+ }
+
+ Hal_Mem_Set(&s_video_call_jrtc, 0x0, sizeof(MMI_VIDEO_CALL_JRTC_T));
+}
+
+static void mmi_video_call_jrtc_timeout_cb(void * para)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ mmi_video_call_jrtc_clean_up();
+}
+
+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(s_video_call_jrtc.jrtc_ptr);
+
+ if(state != oldstate)
+ {
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: oldstate=%d,state=%d\n", __FUNCTION__, __LINE__, oldstate, state);
+ }
+
+ switch(state)
+ {
+ case JRTC_CLOSED:
+ if((NULL != s_video_call_jrtc.jrtc_ptr) && (NULL == s_video_call_jrtc.closed_timer_id))
+ {
+ video_call_jrtc_error_e err = jrtc_error(s_video_call_jrtc.jrtc_ptr);
+
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: error=%d\n", __FUNCTION__, __LINE__, err);
+
+ if(!s_video_call_jrtc.closing)
+ {
+ jrtc_close(s_video_call_jrtc.jrtc_ptr, JRTC_ENIL);
+ s_video_call_jrtc.closing = 1;
+ }
+
+ s_video_call_jrtc.closed_timer_id = Hal_Timer_Start(100, mmi_video_call_jrtc_timeout_cb, NULL, 0);
+ }
+
+ if(MMI_VIDEO_CALL_STATE_NONE != mmi_video_call_params_state_get())
+ {
+ mmi_vc_ring_off_no_carrier(1);
+ }
+ break;
+
+ case JRTC_LEAVING:
+ break;
+
+ case JRTC_OPENED:
+ break;
+
+ case JRTC_JOINING:
+ break;
+
+ case JRTC_JOINED:
+ break;
+
+ case JRTC_TALKING:
+ mmi_vc_call_action_connected();
+
+ /* Get image */
+ if (MODEM_VIDEO_CALL_TYPE_VIDEO == mmi_video_call_params_type_get())
+ {
+ void *buf = mmi_video_call_phone_get_video_buffer();
+ if(voip_jrtc_get_image(buf))
+ {
+ lv_canvas_set_buffer(mmi_vc_call_get_ext()->canvas, buf, canvas_width, canvas_heigh, LV_IMG_CF_TRUE_COLOR);
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ oldstate = state;
+}
+
+
+static int8_t mmi_video_call_jrtc_open(const char* roomid, MODEM_VIDEO_CALL_TYPE calltype)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, roomid, calltype);
+
+#ifdef __VIDEO_CALL_TEST__
+ char * ticket = NULL;
+#else
+ char ticket[64+8] = "ab2671af32b7278ca5e7ad9e26b488aff6640569eaa5b8e1f690d8ac298f6e61";
+#endif
+
+ Hal_Mem_Set(&s_video_call_jrtc, 0, sizeof(MMI_VIDEO_CALL_JRTC_T));
+
+ if (MODEM_VIDEO_CALL_TYPE_VIDEO == calltype)
+ {
+ 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
+
+ s_video_call_jrtc.jrtc_ptr= jrtc_open(roomid, ticket, &s_video_call_jrtc.rxframe, &s_video_call_jrtc.txframe);
+ }
+ else
+ {
+ s_video_call_jrtc.jrtc_ptr= jrtc_open(roomid, ticket, NULL, NULL);
+ }
+
+ if (!s_video_call_jrtc.jrtc_ptr)
+ {
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ mmi_video_call_jrtc_clean_up();
+ return -1;
+ }
+ jrtc_activate(s_video_call_jrtc.jrtc_ptr, JRTC_AUDIO|JRTC_CAMERA);
+
+ 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;
+}
+
+int8_t mmi_video_call_dial_req(MODEM_VIDEO_CALL_TYPE calltype, char * pContactUri)
+{
+ int8_t ret = -1;
+
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, pContactUri, calltype);
+
+ mmi_vc_call_operate_send_to_server(2);
+
+ if (NULL == s_video_call_jrtc.jrtc_ptr)
+ {
+ ret = mmi_video_call_jrtc_open(pContactUri, calltype);
+ }
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %p, %d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, ret);
+
+ return ret;
+}
+
+void mmi_video_call_hangup_req(BOOL bye)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, bye);
+
+ mmi_vc_call_operate_send_to_server(0);
+
+ if (NULL != s_video_call_jrtc.jrtc_ptr)
+ {
+ video_call_jrtc_error_e err = (TRUE == bye) ? JRTC_EBYE : JRTC_EAUDIOCALL;
+
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %p,%d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, err);
+
+ jrtc_close(s_video_call_jrtc.jrtc_ptr, err);
+ s_video_call_jrtc.closing = 1;
+ }
+ else
+ {
+ mmi_vc_ring_off_no_carrier(0);
+ }
+}
+
+int8_t mmi_video_call_answer_req(void)
+{
+ int8_t ret = -1;
+
+ mmi_vc_call_operate_send_to_server(1);
+
+ 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());
+ }
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %p, %d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, ret);
+
+ return ret;
+}
+
+void mmi_video_call_reject_req(BOOL bye)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, bye);
+
+ mmi_vc_call_operate_send_to_server(0);
+
+ if (NULL != s_video_call_jrtc.jrtc_ptr)
+ {
+ video_call_jrtc_error_e err = (TRUE == bye) ? JRTC_EBYE : JRTC_EAUDIOCALL;
+
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %p,%d\n", __FUNCTION__, __LINE__, s_video_call_jrtc.jrtc_ptr, err);
+
+ jrtc_close(s_video_call_jrtc.jrtc_ptr, err);
+ s_video_call_jrtc.closing = 1;
+ }
+ else
+ {
+ mmi_vc_ring_off_no_carrier(0);
+ }
+}
+
+
+//extern unsigned yuv420_scale(int src_width, int src_height, int dst_width, int dst_height, unsigned char *src_buf, unsigned char *dst_buf, unsigned char semi);
+//extern unsigned rgb565_scale(int32_t src_width, int32_t src_height, int32_t dst_width, int32_t dst_height, uint8_t *src_buf, uint8_t *dst_buf);
+//extern void yuv420_2_rgb565(int width, int height, const unsigned char *src, unsigned short *dst, unsigned semi);
+
+static uint8_t voip_jrtc_get_image(void * preview_buf)
+{
+ uint8_t ret = 0;
+ lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
+ LV_ASSERT_MEM(ext);
+
+ video_call_jrtc_image_t * frame = NULL;
+ if(ext->local_remote_switch_flag == VOIP_REMOTE_SWITCH_REMOTE)
+ frame = &s_video_call_jrtc.rxframe;
+ else
+ frame = &s_video_call_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;
+}
+
+#endif
+
#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
-#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__
-#include "mmi_video_call.h"
#include <stdio.h>
#include <stdlib.h>
-//static lv_signal_cb_t ancestor_signal;
-#if VIDEO_SIGNAL_CHECK
-static lv_task_t * signal_check_task = NULL;
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__
+#include "mmi_video_call_fzd.c"
#endif
-static lv_task_t * rat_check_task = NULL;
-
-static MMI_VIDEO_CALL_PARAMS_T s_video_call_params;
-lv_color_t g_cbuf[canvas_width * canvas_heigh + 8] __attribute__((aligned(8)));
-
-/**********************
-* STATIC PROTOTYPES
-**********************/
-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_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_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_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);
-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 mmi_vc_audio_ctrl_callback(AUDIO_CTRL_PRIORITY priority)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, 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;
- }
- mmi_vc_activity_destroy_req();
- Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
- }
-}
-
-void * mmi_video_call_phone_get_video_buffer()
-{
- return g_cbuf;
-}
-
-/**********************
-* STATIC FUNCTIONS
-**********************/
-static lv_obj_t * mmi_vc_call_get_activity_obj(void)
-{
- lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VOIPPHONE);
-
- return(activity_obj);
-}
-
-static lv_obj_t * mmi_vc_call_get_obj(void)
-{
- lv_obj_t * watch_obj = NULL;
-
- lv_obj_t * activity_obj = mmi_vc_call_get_activity_obj();
-
- if(activity_obj)
- {
- lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
- }
-
- return(watch_obj);
-}
-
-lv_vc_call_obj_ext_t * mmi_vc_call_get_ext(void)
-{
- lv_vc_call_obj_ext_t * ext = NULL;
- lv_obj_t * watch_obj = mmi_vc_call_get_obj();
-
- if(watch_obj)
- {
- ext = lv_obj_get_ext_attr(watch_obj);
- }
-
- return(ext);
-}
-
-static void mmi_vc_call_screen_clean(void)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%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 = mmi_vc_call_get_activity_obj();
- if(activity_obj)
- {
- lv_obj_del(activity_obj);
- }
-}
-
-static void voip_phone_left_slide_callback(lv_obj_t * obj)
-{
- printf("%s %d\n", __FUNCTION__, __LINE__);
- if((MMI_VIDEO_CALL_STATE_CALLING == s_video_call_params.state)
- && (MODEM_VIDEO_CALL_TYPE_VIDEO == s_video_call_params.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__);
- mmi_vc_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 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);
- s_video_call_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__);
-
- mmi_vc_call_screen_clean();
-}
-
-static void mmi_vc_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)
- snprintf(str, size, "%.2d:%.2d", minutes, seconds);
- else
- snprintf(str, size, "%.2d:%.2d:%.2d", hours, minutes, seconds);
-}
-
-static lv_obj_t * mmi_vc_ring_off_content_create(lv_obj_t * par)
-{
- printf("%s %d\n", __FUNCTION__, __LINE__);
- if(par == NULL) {
- par = lv_scr_act();
- }
-
- lv_vc_call_obj_ext_t * ext = mmi_vc_call_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->vc_ui == MMI_VC_UI_INCOMING || ext->vc_ui == MMI_VC_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_obj_set_size(content, LV_HOR_RES - 40, 50);
- lv_obj_align(content, obj, LV_ALIGN_CENTER, 0, -10);
- 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_font26); // &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->vc_ui == MMI_VC_UI_CONNECTED)
- {
- char tmp[20] = "";
- char str[30] = "";
- mmi_vc_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);
-}
-
-static void voip_anim_fp_connecting_ring(lv_obj_t * obj, int32_t x)
-{
- if(obj != NULL) {
- lv_obj_set_x(obj, x);
- }
-}
-
-static void mmi_vc_connecting_animation(lv_obj_t * par)
-{
- lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-
- LV_ASSERT_MEM(ext);
- if(ext == NULL) {
- return;
- }
-
- lv_obj_t * img = lv_img_create(mmi_vc_call_get_obj(), NULL);
- lv_img_set_src(img, LV_SYMBOL_LOOP);
- 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_connecting_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_anim_fp_dialing_ring(lv_obj_t * obj, int32_t x)
-{
- if(obj != NULL) {
- lv_obj_set_x(obj, x);
- }
-}
-
-static void mmi_vc_dialing_animation(lv_obj_t * par)
-{
- lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-
- LV_ASSERT_MEM(ext);
- if(ext == NULL) {
- return;
- }
-
- lv_obj_t * img = lv_img_create(mmi_vc_call_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 mmi_vc_ring_animation(lv_obj_t * par)
-{
- lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-
- LV_ASSERT_MEM(ext);
- if(ext == NULL) {
- return;
- }
-
- lv_obj_t * img = lv_img_create(mmi_vc_call_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 mmi_vc_anim_fp_connected(lv_anim_t * anim)
-{
- lv_obj_t * obj = (lv_obj_t *)anim->var;
- lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
-
- LV_ASSERT_MEM(ext);
- if(ext == NULL) {
- return;
- }
-
- char str[20] = "";
- mmi_vc_get_time_elaps(ext->connect_start_time, str, 20);
- if(obj) {
- lv_label_set_text(obj, str);
- }
-}
-
-static void mmi_vc_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)mmi_vc_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);
-}
-
-void mmi_vc_ring_off_no_carrier(uint8_t isNoCarrier)
-{
- if((false == s_video_call_params.ring_off_timeout)
- && (1 == isNoCarrier)
- && (MMI_VIDEO_CALL_STATE_NONE == s_video_call_params.state))
- {
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
- return;
- }
-
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- // stop playing tone
- Hal_Tone_Play_End();
-
- // stop timer
- mmi_vc_ring_off_timer_stop();
- mmi_vc_dialing_timer_stop();
- mmi_vc_connecting_timer_stop();
-
- // create ring off UI
- lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VOIPPHONE);
- if(activity_obj)
- {
- mmi_video_call_phone_ring_off_create();
- }
-
- 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(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
-}
-
-static bool mmi_vc_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_vc_call_obj_ext_t * ext = mmi_vc_call_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_vc_call_obj_ext_t * ext = mmi_vc_call_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->volume_button, ext->canvas_button_hidden_flag);
- lv_obj_set_hidden(ext->view_switch_button, true); // 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_VIDEO_CALL_STATE_NONE != s_video_call_params.state) {
- uint8_t volume = mmi_vc_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_vc_call_obj_ext_t * ext = mmi_vc_call_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;
- }
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__
+#include "mmi_video_call_tongxin.c"
#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()) {
- mmi_vc_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_vc_call_obj_ext_t * ext = mmi_vc_call_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);
- }
- }
-}
-
-
-
-
-static nv_watch_vc_contact_t s_vc_contact = {0};
-static TIMER_ID fail_timer_id = NULL;
-static MMI_VIDEO_CALL_UI_E s_vc_call_ui = MMI_VC_UI_INVALID;
-
-char * mmi_video_call_params_number_get(void)
-{
- return (s_video_call_params.number);
-}
-
-MMI_VIDEO_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.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_vc_contact_set(nv_watch_vc_contact_t * contact_list)
-{
- if(NULL == contact_list)
- {
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%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);
-
-}
-
-bool mmi_video_call_is_in_call(void)
-{
- if(MMI_VIDEO_CALL_STATE_NONE == s_video_call_params.state || MMI_VIDEO_CALL_STATE_INVALID == s_video_call_params.state)
- return false;
-
- return true;
-}
-
-// state: 0-hang up or reject; 1-accepte; 2-dial
-void mmi_vc_call_operate_send_to_server(uint_8 flag)
-{
- if(0 == flag)
- mmi_protocol_fzd_action_VC_CALL_RESPONSE(s_video_call_params.number, 0);
- else if(1 == flag)
- mmi_protocol_fzd_action_VC_CALL_RESPONSE(s_video_call_params.number, 1);
- else if(2 == flag)
- mmi_protocol_fzd_action_VC_CALL_REQUEST(s_video_call_params.number, s_video_call_params.call_type);
-}
-
-void mmi_vc_ring_off_timer_stop(void)
-{
- 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;
- }
-}
-
-void mmi_vc_dialing_timer_stop(void)
-{
- if(NULL != s_video_call_params.dialing_timer_id)
- {
- Hal_Timer_Stop(s_video_call_params.dialing_timer_id);
- s_video_call_params.dialing_timer_id = NULL;
- }
-}
-
-void mmi_vc_connecting_timer_stop(void)
-{
- if(NULL != s_video_call_params.connecting_timer_id)
- {
- Hal_Timer_Stop(s_video_call_params.connecting_timer_id);
- s_video_call_params.connecting_timer_id = NULL;
- }
-}
-
-static void mmi_vc_ui_prepare_destory(lv_obj_t * activity_obj)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- lv_watch_png_cache_all_free();
-
- // stop playing tone
- Hal_Tone_Play_End();
-
- // ring off
- mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
-
- // stop ring off timer
- mmi_vc_ring_off_timer_stop();
-
- // stop callreq timer
- mmi_vc_dialing_timer_stop();
-
- //stop
- mmi_vc_connecting_timer_stop();
-
- Hal_Mem_Set(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
- s_video_call_params.state = MMI_VIDEO_CALL_STATE_NONE;
-}
-
-static void mmi_vc_hook_action(lv_obj_t * btn, lv_event_t e)
-{
- if(LV_EVENT_CLICKED != e)
- {
- return;
- }
-
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- //if(btn) {
- // lv_obj_set_click(btn, false);
- //}
-
- Hal_Tone_Play_End();
-
- mmi_vc_call_action_connecting();
-
- int8_t ret = mmi_video_call_answer_req();
- if(ret < 0)
- {
- mmi_vc_ring_off_no_carrier(0);
- }
-}
-
-
-lv_res_t mmi_video_call_phone_ring_off_create()
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
- if(ext == NULL)
- {
- return(LV_RES_INV);
- }
-
- // stop callreq timer
- mmi_vc_dialing_timer_stop();
-
- if(ext->vc_ui == MMI_VC_UI_INCOMING || ext->vc_ui == MMI_VC_UI_DIALING)
- {
- if(ext->phone_status_label) {
- lv_label_set_text(ext->phone_status_label, "");
- }
-
- mmi_vc_ring_off_content_create(mmi_vc_call_get_obj());
- }
- else if(ext->vc_ui == MMI_VC_UI_CONNECTED)
- {
- mmi_vc_ring_off_content_create(mmi_vc_call_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, mmi_vc_call_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);
-}
-
-static void mmi_vc_ring_off_timeout_cb(void * para)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- s_video_call_params.ring_off_timer_id = NULL;
- s_video_call_params.ring_off_timeout = true;
- mmi_vc_ring_off_no_carrier(0);
-}
-
-void mmi_vc_ring_off_action(lv_obj_t * btn, lv_event_t e)
-{
- if(LV_EVENT_CLICKED != e)
- {
- return;
- }
-
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, s_video_call_params.state);
-
- mmi_vc_dialing_timer_stop();
- mmi_vc_connecting_timer_stop();
-
- if(false == s_video_call_params.ring_off)
- {
- s_video_call_params.ring_off = true;
-
- 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, mmi_vc_ring_off_timeout_cb, NULL, 0);
- }
- }
- switch(s_video_call_params.state)
- {
- case MMI_VIDEO_CALL_STATE_NONE:
- case MMI_VIDEO_CALL_STATE_INVALID:
- // do noting
- break;
-
- case MMI_VIDEO_CALL_STATE_CALLING:
- mmi_video_call_hangup_req(TRUE);
- break;
-
- case MMI_VIDEO_CALL_STATE_INCOMING:
- Hal_Tone_Play_End();
- mmi_video_call_reject_req(TRUE);
- break;
-
- default:
- mmi_video_call_hangup_req(TRUE);
- break;
- }
-
- voip_signal_check_stop();
- voip_rat_check_stop();
-}
-
-void mmi_ui_msg_update_vc_call_stop(void)
-{
- mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
-}
-
-void mmi_vc_call_action_call_stop(void)
-{
- if(true != mmi_video_call_is_in_call())
- {
- return;
- }
-
- mmi_watch_wake_up();
- mmi_ui_msg_action_vc_call_stop();
-}
-
-static void mmi_vc_ui_dialing(lv_obj_t * content)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
- if(ext == NULL)
- {
- return;
- }
-
- lv_obj_t * label;
- uint32_t text_id = WATCH_TEXT_ID_VIDEO_CALL_DAILING;
- if(MODEM_VIDEO_CALL_TYPE_VIDEO != s_video_call_params.call_type)
- text_id = WATCH_TEXT_ID_VOICE_CALL_DAILING;
-
- // label dialing
- 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, text_id);
- lv_obj_set_click(label, false);
- lv_obj_align(label, content, LV_ALIGN_IN_TOP_MID, 0, 10);
- ext->phone_status_label = label;
-
- // img
- lv_obj_t * img = lv_img_create(content, NULL);
- lv_img_set_src(img, ICON_VIDEO_CALL_CONTACT_PHOTO);
- lv_obj_align(img, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
- lv_obj_set_click(img, false);
-
- // name
- label = lv_label_create(content, NULL);
- lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
- 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(s_video_call_params.name) > 0)
- {
- lv_label_set_text(label, s_video_call_params.name);
- }
- else
- {
- 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);
-
- #if 0
- // 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);
- #endif
-
- // btn ring off
- 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, mmi_vc_ring_off_action);
- lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_MID, 0, MMI_VC_RING_OFF_BTN_Y_OFFSET);
-}
-
-static void mmi_vc_ui_incoming(lv_obj_t * content)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
- if(ext == NULL)
- {
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
- return;
- }
- lv_obj_t * label;
- uint32_t text_id = WATCH_TEXT_ID_VIDEO_CALL_RINGING;
- if(MODEM_VIDEO_CALL_TYPE_VIDEO != s_video_call_params.call_type)
- text_id = WATCH_TEXT_ID_VOICE_CALL_RINGING;
-
- // 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, text_id);
- lv_obj_set_click(label, false);
- lv_obj_align(label, content, LV_ALIGN_IN_TOP_MID, 0, 10);
- ext->phone_status_label = label;
-
- // img
- lv_obj_t * img = lv_img_create(content, NULL);
- lv_img_set_src(img, ICON_VIDEO_CALL_CONTACT_PHOTO);
- lv_obj_align(img, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
- lv_obj_set_click(img, false);
-
- // name
- label = lv_label_create(content, NULL);
- lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
- 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(s_video_call_params.name) > 0)
- {
- lv_label_set_text(label, s_video_call_params.name);
- }
- else
- {
- 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);
-
- // btn ring off
- lv_obj_t * btn;
- 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, mmi_vc_ring_off_action);
- lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_LEFT, MMI_VC_INCOMING_RING_OFF_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
-
- // btn ring hook
- btn = lv_imgbtn_create(content, NULL);
- lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_ANSWER_BTN);
- lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_ANSWER_BTN);
- lv_obj_set_event_cb(btn, mmi_vc_hook_action);
- lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_RIGHT, MMI_VC_INCOMING_HOOK_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
-}
-
-static void mmi_vc_ui_connecting(lv_obj_t * content)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- lv_vc_call_obj_ext_t * ext = mmi_vc_call_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_CONNECTING);
- lv_obj_set_click(label, false);
- lv_obj_align(label, content, LV_ALIGN_IN_TOP_MID, 0, 10);
- ext->phone_status_label = label;
-
- // img
- lv_obj_t * img = lv_img_create(content, NULL);
- lv_img_set_src(img, ICON_VIDEO_CALL_CONTACT_PHOTO);
- lv_obj_align(img, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
- lv_obj_set_click(img, false);
-
- // name
- label = lv_label_create(content, NULL);
- lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
- 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(s_video_call_params.name) > 0)
- {
- lv_label_set_text(label, s_video_call_params.name);
- }
- else
- {
- 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);
-
- // btn ring off
- 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, mmi_vc_ring_off_action);
- lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_MID, 0, MMI_VC_RING_OFF_BTN_Y_OFFSET);
-}
-
-static void mmi_vc_ui_connected(lv_obj_t * content)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
- if(ext == NULL)
- {
- return;
- }
-
- lv_obj_t * label;
- lv_obj_t * btn;
- hal_rtc_t rtc_curr = {0}; // current rtc time
- Hal_Rtc_Gettime(&rtc_curr);
-
- if(s_video_call_params.call_type == MODEM_VIDEO_CALL_TYPE_VOICE)
- {
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- ext->connect_start_time = time_to_seconds(&rtc_curr);
-
- ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_NULL;
-
- //lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
- lv_obj_t * img = lv_img_create(content, NULL);
- lv_img_set_src(img, ICON_VIDEO_CALL_CONTACT_PHOTO);
- lv_obj_align(img, content, LV_ALIGN_IN_TOP_MID, 0, 30);
- lv_obj_set_click(img, false);
-
- // name
- label = lv_label_create(content, NULL);
- lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
- 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(s_video_call_params.name) > 0)
- {
- lv_label_set_text(label, s_video_call_params.name);
- }
- else
- {
- 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);
-
- //duration
- lv_obj_t * time_label = lv_label_create(content, NULL);
- lv_obj_add_style(time_label, LV_OBJ_PART_MAIN, &lv_watch_font20);
- lv_label_set_align(time_label, LV_LABEL_ALIGN_CENTER);
- lv_label_set_text(time_label, "00:00");
- lv_obj_set_click(time_label, false);
- lv_obj_set_base_dir(time_label, LV_BIDI_DIR_LTR);
- lv_obj_align(time_label, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
- ext->phone_status_label = time_label;
-
- //btn volume
- btn = lv_imgbtn_create(content, NULL);
- lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_VOLUME_BTN);
- lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_VOLUME_BTN);
- lv_obj_set_event_cb(btn, voip_volume_btn_action);
- lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_LEFT, MMI_VC_CALLING_VOLUME_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET); //20, -50);
-
- //btn ring off
- 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, mmi_vc_ring_off_action);
- lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_RIGHT, MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET); //-20, -50);
- }
- else
- {
- lv_obj_t * canvas;
-
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: format=%d\n", __FUNCTION__, __LINE__, ext->voiph263fmt);
-
- ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_REMOTE;
- if((ext->voiph263fmt == VOIP_H263_FMT_SQCIF) || (ext->voiph263fmt == VOIP_H263_FMT_QCIF))
- {
- ext->connect_start_time = time_to_seconds(&rtc_curr);
-
- /*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;
-
- lv_obj_align(canvas, content, LV_ALIGN_IN_TOP_MID, 0, 0);
- /*Assign the buffer to the canvas*/
- lv_img_set_src(canvas, ICON_BACKGROUND);
- 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);
- lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 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_font26);
- 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_VIDEO_CALL_VOLUME_BTN);
- lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_VOLUME_BTN);
- lv_obj_set_event_cb(btn, voip_volume_btn_action);
- lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_LEFT, MMI_VC_CALLING_VOLUME_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
-
- // 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, 0);
-
- // btn ring off
- btn = lv_imgbtn_create(canvas, 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, mmi_vc_ring_off_action);
- lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_RIGHT, MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
- }
- 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_BACKGROUND);
- 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);
- lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 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_font26);
- 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_VIDEO_CALL_VOLUME_BTN);
- lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_VOLUME_BTN);
- lv_obj_set_event_cb(btn, voip_volume_btn_action);
- lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_LEFT, MMI_VC_CALLING_VOLUME_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
- lv_obj_add_style(btn, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
- ext->volume_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_VIDEO_CALL_HANGUP_BTN);
- lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_HANGUP_BTN);
- lv_obj_set_event_cb(btn, mmi_vc_ring_off_action);
- lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_RIGHT, MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
- 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->volume_button, ext->canvas_button_hidden_flag);
- lv_obj_set_hidden(ext->view_switch_button, true); // 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(mmi_vc_call_get_obj()) {
- lv_watch_obj_set_down_slide_cb(mmi_vc_call_get_obj(), voip_phone_down_slide_callback);
- }
- }
-}
-
-static lv_obj_t * mmi_vc_ui_create(lv_obj_t * activity_obj)
-{
- if(MMI_VC_UI_CONNECTED == s_vc_call_ui)
- {
- /* set speaker volume to nv when leaving activiry's slider */
- voip_set_volume_when_slider_act();
- }
-
- mmi_vc_call_screen_clean();
-
- //lv_watch_png_cache_all_free();
-
- if(activity_obj == NULL)
- {
- lv_watch_activity_ext_t activity_ext = {0};
-
- activity_ext.actId = ACT_ID_VOIPPHONE;
- activity_ext.create = NULL; // mmi_vc_ui_create;
- activity_ext.prepare_destory = mmi_vc_ui_prepare_destory;
- activity_obj = lv_watch_creat_activity_obj(&activity_ext);
- if(NULL == activity_obj)
- {
- return NULL;
- }
- }
-
- lv_obj_t * obj = lv_watch_obj_create(activity_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_vc_call_obj_ext_t * ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_vc_call_obj_ext_t));
- if(ext == NULL)
- {
- return NULL;
- }
-
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- ext->phone_status_label = NULL;
- ext->phone_animation_obj = NULL;
- ext->vc_ui = s_vc_call_ui;
- 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->volume_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));
- //lv_cont_set_layout(content, LV_LAYOUT_COLUMN_MID);
- lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
- //lv_obj_set_style_local_bg_color(content, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
- lv_watch_obj_add_element(content);
- lv_obj_set_click(content, false);
- lv_obj_align(content, obj, LV_ALIGN_CENTER, 0, 0);
-
- switch(ext->vc_ui)
- {
- case MMI_VC_UI_INCOMING:
- mmi_vc_ui_incoming(content);
- //mmi_vc_ring_animation(ext->phone_status_label);
- break;
-
- case MMI_VC_UI_DIALING:
- mmi_vc_ui_dialing(content);
- //mmi_vc_dialing_animation(ext->phone_status_label);
- break;
-
- case MMI_VC_UI_CONNECTING:
- mmi_vc_ui_connecting(content);
- //mmi_vc_connecting_animation(ext->phone_status_label);
- break;
-
- case MMI_VC_UI_CONNECTED:
- mmi_vc_ui_connected(content);
- mmi_vc_connected_animation(ext->phone_status_label);
- break;
-
- default:
- break;
- }
-
- return obj;
-}
-
-void mmi_ui_msg_update_vc_call_incoming(void)
-{
- s_vc_call_ui = MMI_VC_UI_INCOMING;
- mmi_vc_ui_create(NULL);
-}
-
-void mmi_vc_call_action_incoming(char * number, MODEM_VIDEO_CALL_TYPE type)
-{
- if(true == mmi_active_screen_is_prohibit_interrupted()
- || true == is_rat_gsm()
- #ifdef __MMI_ZHSX_SUPPORT_DO_NOT_DISTURB__
- || true == mmi_watch_is_in_do_not_disturb_time()
- #endif
- || true == mmi_video_call_is_in_call()
- )
- {
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- mmi_video_call_reject_req(TRUE);
- return;
- }
-
- if(AUDIO_CTRL_PRIORITY_2 == Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_2, mmi_vc_audio_ctrl_callback))
- {
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__);
-
- Hal_Mem_Set(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
- s_video_call_params.call_type = type;
- s_video_call_params.state = MMI_VIDEO_CALL_STATE_INCOMING;
- strncpy(s_video_call_params.number, number, NV_WATCH_VC_CONTACT_NUMBER_LEN - 1);
- uint8_t i = 0;
- for(i = 0; i < s_vc_contact.total; i++)
- {
- if(0 == strncmp(s_video_call_params.number, s_vc_contact.number[i], strlen(s_video_call_params.number)))
- {
- strncpy(s_video_call_params.name, s_vc_contact.name[i], NV_WATCH_VC_CONTACT_NAME_LEN - 1);
- break;
- }
- }
-
- HAL_SPEAKER_GAIN volume = query_current_volume();
- if(!Hal_Set_BT_Audio_Path(volume))
- {
- Hal_Call_Speaker(HAL_CALL_SPK_ON, volume);
- }
- Hal_NFFS_File_Play_Repeat(AUDIO_INCOMING_CALL, volume);
-
- mmi_watch_wake_up();
-
- voip_rat_check_start();
-
- // ui
- mmi_ui_msg_action_vc_call_incoming();
- }
- else
- {
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__);
-
- // auto reject
- mmi_video_call_reject_req(FALSE);
- voip_signal_check_stop();
- voip_rat_check_stop();
-
- // stop ring off timer
- mmi_vc_ring_off_timer_stop();
-
- // stop callreq timer
- mmi_vc_dialing_timer_stop();
-
- Hal_Mem_Set(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
- voip_set_volume_when_slider_act();
- mmi_vc_call_screen_clean();
- lv_watch_png_cache_all_free();
- Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
- }
-}
-
-static void mmi_vc_call_connecting_timeout_cb(void * para)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- mmi_vc_connecting_timer_stop();
- mmi_video_call_hangup_req(TRUE);
- //mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
-}
-
-void mmi_vc_call_action_connecting(void)
-{
- if(MMI_VIDEO_CALL_STATE_CALLING == s_video_call_params.state
- || MMI_VIDEO_CALL_STATE_CONNECTING == s_video_call_params.state
- )
- {
- return;
- }
-
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- s_video_call_params.state = MMI_VIDEO_CALL_STATE_CONNECTING;
-
- // stop timer
- mmi_vc_dialing_timer_stop();
- mmi_vc_connecting_timer_stop();
-
- // stop playing tone
- Hal_Tone_Play_End();
-
- //Hal_Set_Voice_Call_Status(VOICE_CALL_START);
-
- if(NULL == s_video_call_params.connecting_timer_id)
- {
- s_video_call_params.connecting_timer_id = Hal_Timer_Start(MMI_VC_CONNECTING_TIMEOUT, mmi_vc_call_connecting_timeout_cb, NULL, 0);
- }
-
- s_vc_call_ui = MMI_VC_UI_CONNECTING;
- mmi_vc_ui_create(NULL);
-}
-
-void mmi_vc_call_action_connected(void)
-{
- if(MMI_VIDEO_CALL_STATE_CALLING == s_video_call_params.state)
- {
- return;
- }
-
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- s_video_call_params.state = MMI_VIDEO_CALL_STATE_CALLING;
-
- // stop timer
- mmi_vc_dialing_timer_stop();
- mmi_vc_connecting_timer_stop();
-
- // stop playing tone
- Hal_Tone_Play_End();
-
- Hal_Set_Voice_Call_Status(VOICE_CALL_START);
-
- s_vc_call_ui = MMI_VC_UI_CONNECTED;
- mmi_vc_ui_create(NULL);
-}
-
-static void mmi_vc_call_dialing_timeout_cb(void * para)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- mmi_vc_dialing_timer_stop();
- mmi_video_call_hangup_req(TRUE);
-}
-
-void mmi_vc_call_action_dialing(char * number, MODEM_VIDEO_CALL_TYPE type)
-{
- // check call state
- if(MMI_VIDEO_CALL_STATE_NONE != s_video_call_params.state)
- {
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, s_video_call_params.state);
- return;
- }
-
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, number, type);
-
- // stop timer
- mmi_vc_ring_off_timer_stop();
- mmi_vc_dialing_timer_stop();
-
- Hal_Mem_Set(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
- s_video_call_params.state = MMI_VIDEO_CALL_STATE_DIALING;
- s_video_call_params.call_type = type;
- strcpy(s_video_call_params.number, number);
- uint8_t i = 0;
- for(i = 0; i < s_vc_contact.total; i++)
- {
- if(0 == strncmp(s_video_call_params.number, s_vc_contact.number[i], strlen(s_video_call_params.number)))
- {
- strncpy(s_video_call_params.name, s_vc_contact.name[i], NV_WATCH_VC_CONTACT_NAME_LEN - 1);
- break;
- }
- }
-
- int8_t ret = mmi_video_call_dial_req(type, s_video_call_params.number);
- if(NULL == s_video_call_params.dialing_timer_id)
- {
- UINT32 timeout = (ret >= 0) ? MMI_VC_DIALING_TIMEOUT : 1*1000;
-
- s_video_call_params.dialing_timer_id = Hal_Timer_Start(timeout, mmi_vc_call_dialing_timeout_cb, NULL, 0);
- }
-
- voip_rat_check_start();
-
- s_vc_call_ui = MMI_VC_UI_DIALING;
- mmi_vc_ui_create(NULL);
-
- Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_2, mmi_vc_audio_ctrl_callback);
- Hal_Set_Voice_Call_Status(VOICE_CALL_START);
-}
-
-static void mmi_vc_main_prepare_destory(lv_obj_t * activity_obj)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- lv_watch_png_cache_all_free();
-
- if(NULL != fail_timer_id)
- {
- Hal_Timer_Stop(fail_timer_id);
- fail_timer_id = NULL;
- }
-}
-
-void mmi_vc_call_fail_timeout_cb(void *para)
-{
- mmi_vc_main_prepare_destory(NULL);
-}
-
-static void mmi_vc_call_action_no_permission(void)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- lv_obj_t * obj = lv_watch_get_activity_obj(ACT_ID_VOIP_PHONEBOOK);
-
- lv_obj_t * cont = lv_cont_create(obj, NULL);
- lv_cont_set_fit(cont, LV_FIT_NONE);
- lv_obj_set_size(cont, lv_obj_get_width(obj), lv_obj_get_height(obj));
- lv_obj_set_style_local_bg_color(cont, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
- lv_cont_set_layout(cont, LV_LAYOUT_OFF);
- lv_obj_set_click(cont, false);
-
- lv_obj_t * label = lv_label_create(cont, NULL);
- lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
- lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
- lv_obj_set_click(label, false);
- lv_label_set_text_id(label, WATCH_TEXT_ID_DEVICE_NO_NETWORK); // WATCH_TEXT_ID_NO_SIM_OR_NETWORK); // WATCH_TEXT_ID_NO_CONTACTS_OR_NETWORK);
- lv_obj_align(label, cont, LV_ALIGN_CENTER, 0, 0);
-
- fail_timer_id = Hal_Timer_Start(2*1000, mmi_vc_call_fail_timeout_cb, NULL, FALSE);
-}
-
-static void mmi_vc_voice_btn_action(lv_obj_t * btn, lv_event_t e)
-{
- if(LV_EVENT_CLICKED != e)
- {
- return;
- }
-
- if(true == mmi_video_call_is_in_call())
- {
- return;
- }
-
- if(true == mmi_vc_check_mo_permission())
- {
- uint8_t index = lv_watch_get_free_num(btn);
-
- mmi_vc_call_action_dialing(s_vc_contact.number[index], MODEM_VIDEO_CALL_TYPE_VOICE);
- }
- else
- {
- mmi_vc_call_action_no_permission();
- }
-}
-
-static void mmi_vc_video_btn_action(lv_obj_t * btn, lv_event_t e)
-{
- if(LV_EVENT_CLICKED != e)
- {
- return;
- }
-
- if(true == mmi_video_call_is_in_call())
- {
- return;
- }
-
- if(true == mmi_vc_check_mo_permission())
- {
- uint8_t index = lv_watch_get_free_num(btn);
-
- mmi_vc_call_action_dialing(s_vc_contact.number[index], MODEM_VIDEO_CALL_TYPE_VIDEO);
- }
- else
- {
- mmi_vc_call_action_no_permission();
- }
-}
-
-static void mmi_vc_dial_btn_screen(lv_obj_t * btn, lv_event_t e)
-{
- if(LV_EVENT_CLICKED != e)
- {
- return;
- }
-
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- lv_obj_t * obj = lv_watch_get_activity_obj(ACT_ID_VOIP_PHONEBOOK);
- uint8_t index = lv_watch_get_free_num(btn);
-
- lv_obj_t * cont = lv_cont_create(obj, NULL);
- lv_cont_set_fit(cont, LV_FIT_NONE);
- lv_obj_set_size(cont, LV_HOR_RES, LV_VER_RES); // lv_obj_get_width(obj), lv_obj_get_height(obj));
- lv_obj_set_style_local_bg_color(cont, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
- lv_cont_set_layout(cont, LV_LAYOUT_OFF);
- lv_obj_set_click(cont, false);
-
- lv_obj_t * voicebtn = lv_imgbtn_create(cont, NULL);
- lv_imgbtn_set_src(voicebtn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_VOICE_BTN);
- lv_imgbtn_set_src(voicebtn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_VOICE_BTN);
-#ifdef USE_LV_WATCH_UI_240_240_CIRCLE
- lv_obj_align(voicebtn, cont, LV_ALIGN_IN_LEFT_MID, 5, 0);
-#else
- lv_obj_align(voicebtn, cont, LV_ALIGN_IN_TOP_MID, 0, 10);
-#endif
- lv_obj_set_event_cb(voicebtn, mmi_vc_voice_btn_action);
- lv_watch_set_free_num(voicebtn, index);
-
- lv_obj_t * videobtn = lv_imgbtn_create(cont, NULL);
- 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);
-#ifdef USE_LV_WATCH_UI_240_240_CIRCLE
- lv_obj_align(videobtn, cont, LV_ALIGN_IN_RIGHT_MID, -5, 0);
-#else
- lv_obj_align(videobtn, cont, LV_ALIGN_IN_BOTTOM_MID, 0, -10);
-#endif
- lv_obj_set_event_cb(videobtn, mmi_vc_video_btn_action);
- lv_watch_set_free_num(videobtn, index);
-}
-
-static lv_obj_t * mmi_vc_contact_list_create(lv_obj_t * obj)
-{
- /*Allocate the object type specific extended data*/
- lv_vc_contact_list_obj_ext_t * ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_vc_contact_list_obj_ext_t));
- /*ext realloc based on watch_obj_ext, do not memeset it*/
- if(NULL == ext)
- {
- return NULL;
- }
-
- //ext->title = NULL;
- ext->list = NULL;
-
- /* content */
- lv_obj_t * content = lv_cont_create(obj, NULL);
- lv_cont_set_fit(content, LV_FIT_NONE);
- lv_obj_set_size(content, lv_obj_get_width(obj), lv_obj_get_height(obj));
- lv_obj_add_style(content,LV_OBJ_PART_MAIN, &lv_watch_style_transp);
- lv_obj_set_style_local_bg_color(content, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
- lv_cont_set_layout(content, LV_LAYOUT_OFF); // lv_cont_set_layout(content, LV_LAYOUT_COLUMN_MID);
- lv_obj_set_click(content, false);
- lv_obj_align(content, obj, LV_ALIGN_CENTER, 0, 0);
-
- lv_obj_t * label = lv_label_create(content, NULL);
- lv_obj_set_size(label, LV_HOR_RES, 40); // 30);
- lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font20_gray);
- lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
- lv_label_set_text_id(label, WATCH_TEXT_ID_VIDEOCALL);
- lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 10);
- lv_obj_set_click(label, false);
- //ext->title = label;
-
- lv_obj_t * list = lv_list_create(content, NULL);
- if(list == NULL)
- {
- return NULL;
- }
- lv_watch_obj_add_element(list);
- lv_watch_obj_add_element(lv_page_get_scrl(list));
- lv_obj_add_style(list, LV_LIST_PART_BG, &lv_watch_style_transp);
- //lv_obj_add_style(list, LV_LIST_PART_SCROLLABLE, &lv_watch_style_transp);
- //lv_obj_set_style_local_pad_top(list, LV_LIST_PART_SCROLLABLE, LV_STATE_DEFAULT, 4);
- //lv_obj_set_style_local_pad_bottom(list, LV_LIST_PART_SCROLLABLE, LV_STATE_DEFAULT, 4);
- lv_list_set_scrollbar_mode(list, LV_SCROLLBAR_MODE_OFF); // lv_page_set_scrollbar_mode(list, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_width(list, lv_obj_get_width(content));
- lv_coord_t height = lv_obj_get_height(content) - 40; // lv_obj_get_height(label);
- lv_obj_set_height(list, height);
- lv_obj_align(list, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
- lv_obj_set_click(list, false);
- ext->list = list;
-
- int8_t i = 0;
- lv_obj_t * btn;
-
- for(i = 0; i < s_vc_contact.total; i++)
- {
- char t_str[NV_WATCH_VC_CONTACT_NUMBER_LEN] = {0};
-
- if(0 < strlen(s_vc_contact.name[i]))
- strcpy(t_str, s_vc_contact.name[i]);
- else
- strcpy(t_str, s_vc_contact.number[i]);
-
- #if 0
- btn = lv_list_add_btn(list, NULL, NULL);
- //lv_page_glue_obj(btn, true);
- //lv_obj_add_protect(btn, LV_PROTECT_PRESS_LOST);
- lv_obj_set_event_cb(btn, mmi_vc_dial_btn_screen);
- lv_watch_obj_add_element(btn);
-
- lv_obj_set_style_local_bg_color(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
- lv_obj_set_style_local_pad_top(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 5);
- lv_obj_set_style_local_pad_bottom(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 5);
- lv_obj_set_style_local_pad_left(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 15);
- lv_obj_set_style_local_pad_right(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 15);
- lv_obj_set_style_local_pad_inner(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 10);
-
- //label = lv_obj_get_child(btn, NULL);
- //label = lv_list_get_btn_label(btn);
- label = lv_label_create(btn, NULL);
- //lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL); // LV_LABEL_LONG_SROLL_CIRC
- lv_obj_set_width(label, lv_obj_get_width(btn));
- lv_label_set_text(label, t_str);
- lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
- lv_label_set_align(label, LV_LABEL_ALIGN_LEFT);
- lv_obj_set_click(label, false);
- //lv_obj_align(label, btn, LV_ALIGN_IN_LEFT_MID, 0, 0);
-
- lv_watch_set_free_num(btn, i);
- #else
-
- btn = lv_list_add_btn(list, NULL, NULL);
- lv_btn_set_layout(btn, LV_LAYOUT_ROW_MID);
- //lv_obj_set_event_cb(btn, mmi_vc_dial_btn_screen);
- //lv_watch_set_free_num(btn, i);
-
- lv_obj_t * cont = lv_cont_create(btn, NULL);
- lv_cont_set_layout(cont, LV_LAYOUT_OFF);
- lv_obj_set_width(cont, lv_obj_get_width(btn));
- lv_obj_set_height(cont, 56); // LV_VER_RES / 4); //lv_obj_get_height(btn));
- lv_obj_add_style(cont, LV_CONT_PART_MAIN, &lv_style_transp);
- lv_page_glue_obj(cont, true);
- lv_watch_obj_add_element(cont);
- lv_obj_set_click(cont, true);
- lv_obj_set_event_cb(cont, mmi_vc_dial_btn_screen);
- lv_watch_set_free_num(cont, i);
-
- label = lv_label_create(cont, NULL);
- lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
- lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL);
- lv_obj_set_width(label, lv_obj_get_width(cont) - 40);
- lv_label_set_text(label, t_str);
- lv_obj_align(label, cont, LV_ALIGN_IN_LEFT_MID, 20, 0);
-
- lv_watch_obj_add_element(btn);
- #endif
- }
-
- return obj;
-}
-
-static lv_obj_t * mmi_vc_main_create(lv_obj_t * activity_obj)
-{
- if(activity_obj == NULL)
- {
- lv_watch_activity_ext_t activity_ext = {0};
-
- activity_ext.actId = ACT_ID_VOIP_PHONEBOOK;
- activity_ext.create = mmi_vc_main_create;
- activity_ext.prepare_destory = mmi_vc_main_prepare_destory;
- activity_obj = lv_watch_creat_activity_obj(&activity_ext);
- if(NULL == activity_obj)
- return NULL;
- }
-
- lv_obj_t * obj = lv_watch_obj_create(activity_obj);
- if(NULL == obj)
- return NULL;
-
- if(false == mmi_vc_check_mo_permission())
- {
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%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_font26);
- lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
- lv_obj_set_click(label, false);
- lv_label_set_text_id(label, WATCH_TEXT_ID_DEVICE_NO_NETWORK); // WATCH_TEXT_ID_NO_SIM_OR_NETWORK); // WATCH_TEXT_ID_NO_CONTACTS_OR_NETWORK);
- lv_obj_align(label, obj, LV_ALIGN_CENTER, 0, -10);
- }
- else if(true != mmi_watch_tcp_connect_state_get()
- || true != mmi_protocol_watch_bind_state_get()
- )
- {
- // not bind
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%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_font26);
- lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
- lv_obj_set_click(label, false);
- lv_label_set_text_id(label, WATCH_TEXT_ID_DEVICE_NOT_BIND);
- lv_obj_align(label, obj, LV_ALIGN_CENTER, 0, -10);
- }
- else if(0 == s_vc_contact.total)
- {
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%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_font26);
- 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);
- lv_obj_align(label, obj, LV_ALIGN_CENTER, 0, -10);
- }
- else
- {
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- mmi_vc_contact_list_create(obj);
- }
-
- return obj;
-}
-
-void video_call_create_event_cb(lv_obj_t * btn, lv_event_t e)
-{
-#ifdef __VIDEO_CALL_TEST__
- nv_watch_vc_contact_t t_test_contact =
- {
- 3,
- {"test001", "test002", "test003"},
- {"jrtc001", "jrtc002", "jrtc003"}
- };
-
- _lv_memcpy(&s_vc_contact, &t_test_contact, sizeof(nv_watch_vc_contact_t));
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__
+#include "mmi_video_call_wulian.c"
#endif
- if(LV_EVENT_CLICKED == e)
- {
- lv_watch_png_cache_all_free();
- mmi_vc_main_create(NULL);
- }
- else if(LV_EVENT_LONG_PRESSED == e)
- {
-
- }
-}
-
-
-//interface
-uint8_t mmi_vc_get_call_volume(void)
-{
- return(s_video_call_params.speaker_volume);
-}
-
-bool mmi_vc_watch_suspend_check(void)
-{
- if((s_video_call_params.call_type == MODEM_VIDEO_CALL_TYPE_VIDEO)
- || (MMI_VIDEO_CALL_STATE_INCOMING == s_video_call_params.state)
- || (MMI_VIDEO_CALL_STATE_DIALING == s_video_call_params.state)
- || (MMI_VIDEO_CALL_STATE_CONNECTING == s_video_call_params.state)
- )
- {
- return false;
- }
-
- return true;
-}
-
-bool mmi_vc_connect_check_req(void)
-{
- if(mmi_vc_call_get_activity_obj())
- {
- return true;
- }
-
- return false;
-}
-
-void mmi_vc_activity_destroy_req(void)
-{
- VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-
- lv_obj_t * activity_obj = mmi_vc_call_get_activity_obj();
- if(NULL == activity_obj)
- {
- return;
- }
-
- switch(s_video_call_params.state)
- {
- case MMI_VIDEO_CALL_STATE_NONE:
- case MMI_VIDEO_CALL_STATE_INVALID:
- // do noting
- break;
-
- case MMI_VIDEO_CALL_STATE_CALLING:
- mmi_video_call_hangup_req(FALSE);
- break;
-
- case MMI_VIDEO_CALL_STATE_INCOMING:
- Hal_Tone_Play_End();
- mmi_video_call_reject_req(FALSE);
- break;
-
- default:
- mmi_video_call_hangup_req(FALSE);
- break;
- }
-
- voip_signal_check_stop();
- voip_rat_check_stop();
-
- // stop timer
- mmi_vc_ring_off_timer_stop();
- mmi_vc_dialing_timer_stop();
- mmi_vc_connecting_timer_stop();
-
- Hal_Mem_Set(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
- voip_set_volume_when_slider_act();
- mmi_vc_call_screen_clean();
- lv_watch_png_cache_all_free();
-}
-
-#endif
#endif
#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
-#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__
#define __VIDEO_CALL_DEBUG__
}lv_vc_call_obj_ext_t;
-/**********************
- * GLOBAL PROTOTYPES
- **********************/
-lv_vc_call_obj_ext_t * mmi_vc_call_get_ext(void);
-
-bool check_voipcall_enter_pm_ind(void);
-void watch_voip_message_handle_init(void);
+#define MMI_WATCH_VC_TICKET_LEN (64 + 1)
+#define MMI_WATCH_VC_APPKEY_LEN (24 + 1)
+#define MMI_WATCH_VC_SECRET_LEN (16 + 1)
+#define MMI_WATCH_VC_TOKENS_LEN (128 + 1)
+#define MMI_WATCH_VC_UID_LEN (32 + 1)
-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_vc_contact_set(nv_watch_vc_contact_t * contact_list);
-void * mmi_video_call_phone_get_video_buffer(void);
-void mmi_vc_ring_off_no_carrier(uint8_t isNoCarrier);
-void mmi_vc_call_action_dialing(char * number, MODEM_VIDEO_CALL_TYPE type);
-void mmi_vc_call_action_incoming(char * number, MODEM_VIDEO_CALL_TYPE type);
-void mmi_vc_call_action_connecting(void);
-void mmi_vc_call_action_connected(void);
-
-void mmi_ui_msg_update_vc_call_stop(void);
-void mmi_vc_call_action_call_stop(void);
-void mmi_ui_msg_update_vc_call_incoming(void);
-
-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);
-void mmi_video_call_reject_req(BOOL bye);
-void voip_fps_check(int8_t fps);
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
bool mmi_video_call_is_in_call(void);
void mmi_vc_activity_destroy_req(void);
uint8_t mmi_vc_get_call_volume(void);
+
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__
+#include "mmi_video_call_fzd.h"
#endif
+
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__
+#include "mmi_video_call_tongxin.h"
+#endif
+
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__
+#include "mmi_video_call_wulian.h"
+#endif
+
+
#endif
#include "lv_watch.h"
-#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__
-#include "mmi_video_call_fzd.h"
-#include <stdio.h>
-#include <stdlib.h>
-
//static lv_signal_cb_t ancestor_signal;
#if VIDEO_SIGNAL_CHECK
}
#endif
-#endif
#include "../../../lv_ex_conf.h"
#endif
-#if 0
-void voip_alarm_ind(void);
-#endif
-
-#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_FZD__
-#define __VIDEO_CALL_DEBUG__
-#ifdef __VIDEO_CALL_DEBUG__
-#define VIDEO_CALL_DEBUG_PRINTF(fmt, ...) printf("[VIDEO_CALL]"fmt, ##__VA_ARGS__)
-#else
-#define VIDEO_CALL_DEBUG_PRINTF(fmt, ...)
-#endif
-
-//#define __VIDEO_CALL_TEST__
-
-
-
-#define ENABLE_VIDEO_SCALE 1
-
-#define VOIP_PHONE_RING_OFF_ANIMATION_TIME 0
-#define VOIP_PHONE_RING_OFF_CONTINUE_TIME 1500 /*ms*/
-
-#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
-
-#define MMI_VC_DIALING_TIMEOUT (60*1000)
-#define MMI_VC_CONNECTING_TIMEOUT (30*1000)
-
-#if USE_LV_WATCH_UI_240_320
-#define MMI_VC_RING_OFF_BTN_Y_OFFSET (-30)
-#define MMI_VC_INCOMING_RING_OFF_BTN_X_OFFSET (20)
-#define MMI_VC_INCOMING_HOOK_BTN_X_OFFSET (-20)
-
-#define MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET (-20)
-#define MMI_VC_CALLING_VOLUME_BTN_X_OFFSET (20)
-
-#elif USE_LV_WATCH_UI_240_280
-#define MMI_VC_RING_OFF_BTN_Y_OFFSET (-15)
-#define MMI_VC_INCOMING_RING_OFF_BTN_X_OFFSET (20)
-#define MMI_VC_INCOMING_HOOK_BTN_X_OFFSET (-20)
-
-#define MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET (-20)
-#define MMI_VC_CALLING_VOLUME_BTN_X_OFFSET (20)
-
-#elif USE_LV_WATCH_UI_240_240_CIRCLE
-#define MMI_VC_RING_OFF_BTN_Y_OFFSET (-15)
-#define MMI_VC_INCOMING_RING_OFF_BTN_X_OFFSET (20)
-#define MMI_VC_INCOMING_HOOK_BTN_X_OFFSET (-20)
-
-#define MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET (-20)
-#define MMI_VC_CALLING_VOLUME_BTN_X_OFFSET (20)
-
-#else
-#define MMI_VC_RING_OFF_BTN_Y_OFFSET (-30)
-#define MMI_VC_INCOMING_RING_OFF_BTN_X_OFFSET (20)
-#define MMI_VC_INCOMING_HOOK_BTN_X_OFFSET (-20)
-
-#define MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET (-20)
-#define MMI_VC_CALLING_VOLUME_BTN_X_OFFSET (20)
-
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** 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 {
- lv_watch_obj_ext_t lv_watch_obj;
- /*New data for this type */
- //lv_obj_t * title;
- lv_obj_t * list;
-} lv_vc_contact_list_obj_ext_t;
-
-typedef enum
-{
- MMI_VC_UI_INCOMING = 0,
- MMI_VC_UI_DIALING,
- MMI_VC_UI_CONNECTING,
- MMI_VC_UI_CONNECTED,
- MMI_VC_UI_INVALID,
-} MMI_VIDEO_CALL_UI_E;
-
-typedef enum
-{
- MMI_VIDEO_CALL_STATE_NONE,
- MMI_VIDEO_CALL_STATE_CALLING,
- MMI_VIDEO_CALL_STATE_INCOMING,
- MMI_VIDEO_CALL_STATE_DIALING,
- MMI_VIDEO_CALL_STATE_CONNECTING,
- MMI_VIDEO_CALL_STATE_INVALID,
-}MMI_VIDEO_CALL_STATE_E;
-
-
-#define VOIP_RING_OFF_TIMER_LEN 1000
-
-typedef struct {
- MMI_VIDEO_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 */
- TIMER_ID ring_off_timer_id; /* ring off timer */
- char number[NV_WATCH_VC_CONTACT_NUMBER_LEN]; /* phone number */
- char name[NV_WATCH_VC_CONTACT_NAME_LEN]; /* contact name */
- //const void * img_src;
- //const void * img_src_small;
- MODEM_VIDEO_CALL_TYPE call_type;
- TIMER_ID dialing_timer_id;
- TIMER_ID connecting_timer_id;
- uint8_t speaker_volume; /* speaker volume during call procedure */
-} MMI_VIDEO_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;
- MMI_VIDEO_CALL_UI_E vc_ui;
- enum local_remote_switch_e local_remote_switch_flag;
- enum voip_h263_fmt voiph263fmt;
- lv_obj_t * connect_time;
- lv_obj_t * volume_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_vc_call_obj_ext_t;
-
-
-#define MMI_WATCH_VC_TICKET_LEN (64 + 1)
-#define MMI_WATCH_VC_TOKENS_LEN (128 + 1)
-
-
-
/**********************
* GLOBAL PROTOTYPES
**********************/
void mmi_video_call_reject_req(BOOL bye);
void voip_fps_check(int8_t fps);
-bool mmi_video_call_is_in_call(void);
-
-void video_call_create_event_cb(lv_obj_t *btn, lv_event_t e);
-
-
-bool mmi_vc_connect_check_req(void);
-bool mmi_vc_watch_suspend_check(void);
-void mmi_vc_activity_destroy_req(void);
-uint8_t mmi_vc_get_call_volume(void);
-
-
-#endif
#endif
#include "lv_watch.h"
-#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__
-#include "mmi_video_call_tongxin.h"
-#include <stdio.h>
-#include <stdlib.h>
-
//static lv_signal_cb_t ancestor_signal;
#if VIDEO_SIGNAL_CHECK
}
#endif
-#endif
#include "../../../lv_ex_conf.h"
#endif
-#if 0
-void voip_alarm_ind(void);
-#endif
-
-#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_TONGXIN__
-#define __VIDEO_CALL_DEBUG__
-#ifdef __VIDEO_CALL_DEBUG__
-#define VIDEO_CALL_DEBUG_PRINTF(fmt, ...) printf("[VIDEO_CALL]"fmt, ##__VA_ARGS__)
-#else
-#define VIDEO_CALL_DEBUG_PRINTF(fmt, ...)
-#endif
-
-//#define __VIDEO_CALL_TEST__
-
-
-
-#define ENABLE_VIDEO_SCALE 1
-
-#define VOIP_PHONE_RING_OFF_ANIMATION_TIME 0
-#define VOIP_PHONE_RING_OFF_CONTINUE_TIME 1500 /*ms*/
-
-#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
-
-#define MMI_VC_DIALING_TIMEOUT (60*1000)
-#define MMI_VC_CONNECTING_TIMEOUT (30*1000)
-
-#if USE_LV_WATCH_UI_240_320
-#define MMI_VC_RING_OFF_BTN_Y_OFFSET (-30)
-#define MMI_VC_INCOMING_RING_OFF_BTN_X_OFFSET (20)
-#define MMI_VC_INCOMING_HOOK_BTN_X_OFFSET (-20)
-
-#define MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET (-20)
-#define MMI_VC_CALLING_VOLUME_BTN_X_OFFSET (20)
-
-#elif USE_LV_WATCH_UI_240_280
-#define MMI_VC_RING_OFF_BTN_Y_OFFSET (-15)
-#define MMI_VC_INCOMING_RING_OFF_BTN_X_OFFSET (20)
-#define MMI_VC_INCOMING_HOOK_BTN_X_OFFSET (-20)
-
-#define MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET (-20)
-#define MMI_VC_CALLING_VOLUME_BTN_X_OFFSET (20)
-
-#elif USE_LV_WATCH_UI_240_240_CIRCLE
-#define MMI_VC_RING_OFF_BTN_Y_OFFSET (-15)
-#define MMI_VC_INCOMING_RING_OFF_BTN_X_OFFSET (20)
-#define MMI_VC_INCOMING_HOOK_BTN_X_OFFSET (-20)
-
-#define MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET (-20)
-#define MMI_VC_CALLING_VOLUME_BTN_X_OFFSET (20)
-
-#else
-#define MMI_VC_RING_OFF_BTN_Y_OFFSET (-30)
-#define MMI_VC_INCOMING_RING_OFF_BTN_X_OFFSET (20)
-#define MMI_VC_INCOMING_HOOK_BTN_X_OFFSET (-20)
-
-#define MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET (-20)
-#define MMI_VC_CALLING_VOLUME_BTN_X_OFFSET (20)
-
-#endif
-
-/**********************
- * TYPEDEFS
- **********************/
-
-/** 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 {
- lv_watch_obj_ext_t lv_watch_obj;
- /*New data for this type */
- //lv_obj_t * title;
- lv_obj_t * list;
-} lv_vc_contact_list_obj_ext_t;
-
-typedef enum
-{
- MMI_VC_UI_INCOMING = 0,
- MMI_VC_UI_DIALING,
- MMI_VC_UI_CONNECTING,
- MMI_VC_UI_CONNECTED,
- MMI_VC_UI_INVALID,
-} MMI_VIDEO_CALL_UI_E;
-
-typedef enum
-{
- MMI_VIDEO_CALL_STATE_NONE,
- MMI_VIDEO_CALL_STATE_CALLING,
- MMI_VIDEO_CALL_STATE_INCOMING,
- MMI_VIDEO_CALL_STATE_DIALING,
- MMI_VIDEO_CALL_STATE_CONNECTING,
- MMI_VIDEO_CALL_STATE_INVALID,
-}MMI_VIDEO_CALL_STATE_E;
-
-
-#define VOIP_RING_OFF_TIMER_LEN 1000
-
-typedef struct {
- MMI_VIDEO_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 */
- TIMER_ID ring_off_timer_id; /* ring off timer */
- char number[NV_WATCH_VC_CONTACT_NUMBER_LEN]; /* phone number */
- char name[NV_WATCH_VC_CONTACT_NAME_LEN]; /* contact name */
- //const void * img_src;
- //const void * img_src_small;
- MODEM_VIDEO_CALL_TYPE call_type;
- TIMER_ID dialing_timer_id;
- TIMER_ID connecting_timer_id;
- uint8_t speaker_volume; /* speaker volume during call procedure */
-} MMI_VIDEO_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;
- MMI_VIDEO_CALL_UI_E vc_ui;
- enum local_remote_switch_e local_remote_switch_flag;
- enum voip_h263_fmt voiph263fmt;
- lv_obj_t * connect_time;
- lv_obj_t * volume_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_vc_call_obj_ext_t;
-
-
-#define MMI_WATCH_VC_TICKET_LEN (64 + 1)
-#define MMI_WATCH_VC_APPKEY_LEN (24 + 1)
-#define MMI_WATCH_VC_SECRET_LEN (16 + 1)
-#define MMI_WATCH_VC_TOKENS_LEN (128 + 1)
-#define MMI_WATCH_VC_UID_LEN (32 + 1)
-
-
-
/**********************
* GLOBAL PROTOTYPES
**********************/
void mmi_video_call_reject_req(BOOL bye);
void voip_fps_check(int8_t fps);
-bool mmi_video_call_is_in_call(void);
-
-void video_call_create_event_cb(lv_obj_t *btn, lv_event_t e);
-
-
-bool mmi_vc_connect_check_req(void);
-bool mmi_vc_watch_suspend_check(void);
-void mmi_vc_activity_destroy_req(void);
-uint8_t mmi_vc_get_call_volume(void);
-
-
-#endif
#endif
--- /dev/null
+
+
+
+#include "lv_watch.h"
+
+
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__
+
+
+//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;
+
+static MMI_VIDEO_CALL_PARAMS_T s_video_call_params;
+lv_color_t g_cbuf[canvas_width * canvas_heigh + 8] __attribute__((aligned(8)));
+
+/**********************
+* STATIC PROTOTYPES
+**********************/
+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_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_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_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);
+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 mmi_vc_audio_ctrl_callback(AUDIO_CTRL_PRIORITY priority)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, 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;
+ }
+ mmi_vc_activity_destroy_req();
+ Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
+ }
+}
+
+void * mmi_video_call_phone_get_video_buffer()
+{
+ return g_cbuf;
+}
+
+/**********************
+* STATIC FUNCTIONS
+**********************/
+static lv_obj_t * mmi_vc_call_get_activity_obj(void)
+{
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VOIPPHONE);
+
+ return(activity_obj);
+}
+
+static lv_obj_t * mmi_vc_call_get_obj(void)
+{
+ lv_obj_t * watch_obj = NULL;
+
+ lv_obj_t * activity_obj = mmi_vc_call_get_activity_obj();
+
+ if(activity_obj)
+ {
+ lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
+ }
+
+ return(watch_obj);
+}
+
+lv_vc_call_obj_ext_t * mmi_vc_call_get_ext(void)
+{
+ lv_vc_call_obj_ext_t * ext = NULL;
+ lv_obj_t * watch_obj = mmi_vc_call_get_obj();
+
+ if(watch_obj)
+ {
+ ext = lv_obj_get_ext_attr(watch_obj);
+ }
+
+ return(ext);
+}
+
+static void mmi_vc_call_screen_clean(void)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%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 = mmi_vc_call_get_activity_obj();
+ if(activity_obj)
+ {
+ lv_obj_del(activity_obj);
+ }
+}
+
+static void voip_phone_left_slide_callback(lv_obj_t * obj)
+{
+ printf("%s %d\n", __FUNCTION__, __LINE__);
+ if((MMI_VIDEO_CALL_STATE_CALLING == s_video_call_params.state)
+ && (MODEM_VIDEO_CALL_TYPE_VIDEO == s_video_call_params.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__);
+ mmi_vc_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 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);
+ s_video_call_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__);
+
+ mmi_vc_call_screen_clean();
+}
+
+static void mmi_vc_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)
+ snprintf(str, size, "%.2d:%.2d", minutes, seconds);
+ else
+ snprintf(str, size, "%.2d:%.2d:%.2d", hours, minutes, seconds);
+}
+
+static lv_obj_t * mmi_vc_ring_off_content_create(lv_obj_t * par)
+{
+ printf("%s %d\n", __FUNCTION__, __LINE__);
+ if(par == NULL) {
+ par = lv_scr_act();
+ }
+
+ lv_vc_call_obj_ext_t * ext = mmi_vc_call_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->vc_ui == MMI_VC_UI_INCOMING || ext->vc_ui == MMI_VC_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_obj_set_size(content, LV_HOR_RES - 40, 50);
+ lv_obj_align(content, obj, LV_ALIGN_CENTER, 0, -10);
+ 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_font26); // &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->vc_ui == MMI_VC_UI_CONNECTED)
+ {
+ char tmp[20] = "";
+ char str[30] = "";
+ mmi_vc_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);
+}
+
+static void voip_anim_fp_connecting_ring(lv_obj_t * obj, int32_t x)
+{
+ if(obj != NULL) {
+ lv_obj_set_x(obj, x);
+ }
+}
+
+static void mmi_vc_connecting_animation(lv_obj_t * par)
+{
+ lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
+
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ return;
+ }
+
+ lv_obj_t * img = lv_img_create(mmi_vc_call_get_obj(), NULL);
+ lv_img_set_src(img, LV_SYMBOL_LOOP);
+ 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_connecting_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_anim_fp_dialing_ring(lv_obj_t * obj, int32_t x)
+{
+ if(obj != NULL) {
+ lv_obj_set_x(obj, x);
+ }
+}
+
+static void mmi_vc_dialing_animation(lv_obj_t * par)
+{
+ lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
+
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ return;
+ }
+
+ lv_obj_t * img = lv_img_create(mmi_vc_call_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 mmi_vc_ring_animation(lv_obj_t * par)
+{
+ lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
+
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ return;
+ }
+
+ lv_obj_t * img = lv_img_create(mmi_vc_call_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 mmi_vc_anim_fp_connected(lv_anim_t * anim)
+{
+ lv_obj_t * obj = (lv_obj_t *)anim->var;
+ lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
+
+ LV_ASSERT_MEM(ext);
+ if(ext == NULL) {
+ return;
+ }
+
+ char str[20] = "";
+ mmi_vc_get_time_elaps(ext->connect_start_time, str, 20);
+ if(obj) {
+ lv_label_set_text(obj, str);
+ }
+}
+
+static void mmi_vc_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)mmi_vc_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);
+}
+
+void mmi_vc_ring_off_no_carrier(uint8_t isNoCarrier)
+{
+ if((false == s_video_call_params.ring_off_timeout)
+ && (1 == isNoCarrier)
+ && (MMI_VIDEO_CALL_STATE_NONE == s_video_call_params.state))
+ {
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return;
+ }
+
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ // stop playing tone
+ Hal_Tone_Play_End();
+
+ // stop timer
+ mmi_vc_ring_off_timer_stop();
+ mmi_vc_dialing_timer_stop();
+ mmi_vc_connecting_timer_stop();
+
+ // create ring off UI
+ lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_VOIPPHONE);
+ if(activity_obj)
+ {
+ mmi_video_call_phone_ring_off_create();
+ }
+
+ 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(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+}
+
+static bool mmi_vc_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_vc_call_obj_ext_t * ext = mmi_vc_call_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_vc_call_obj_ext_t * ext = mmi_vc_call_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->volume_button, ext->canvas_button_hidden_flag);
+ lv_obj_set_hidden(ext->view_switch_button, true); // 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_VIDEO_CALL_STATE_NONE != s_video_call_params.state) {
+ uint8_t volume = mmi_vc_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_vc_call_obj_ext_t * ext = mmi_vc_call_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()) {
+ mmi_vc_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_vc_call_obj_ext_t * ext = mmi_vc_call_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);
+ }
+ }
+}
+
+
+
+
+static nv_watch_vc_contact_t s_vc_contact = {0};
+static TIMER_ID fail_timer_id = NULL;
+static MMI_VIDEO_CALL_UI_E s_vc_call_ui = MMI_VC_UI_INVALID;
+
+char * mmi_video_call_params_number_get(void)
+{
+ return (s_video_call_params.number);
+}
+
+MMI_VIDEO_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.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_vc_contact_set(nv_watch_vc_contact_t * contact_list)
+{
+ if(NULL == contact_list)
+ {
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%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);
+
+}
+
+bool mmi_video_call_is_in_call(void)
+{
+ if(MMI_VIDEO_CALL_STATE_NONE == s_video_call_params.state || MMI_VIDEO_CALL_STATE_INVALID == s_video_call_params.state)
+ return false;
+
+ return true;
+}
+
+// state: 0-hang up or reject; 1-accepte; 2-dial
+void mmi_vc_call_operate_send_to_server(uint_8 flag)
+{
+ if(0 == flag)
+ mmi_protocol_fzd_action_VC_CALL_RESPONSE(s_video_call_params.number, 0);
+ else if(1 == flag)
+ mmi_protocol_fzd_action_VC_CALL_RESPONSE(s_video_call_params.number, 1);
+ else if(2 == flag)
+ mmi_protocol_fzd_action_VC_CALL_REQUEST(s_video_call_params.number, s_video_call_params.call_type);
+}
+
+void mmi_vc_ring_off_timer_stop(void)
+{
+ 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;
+ }
+}
+
+void mmi_vc_dialing_timer_stop(void)
+{
+ if(NULL != s_video_call_params.dialing_timer_id)
+ {
+ Hal_Timer_Stop(s_video_call_params.dialing_timer_id);
+ s_video_call_params.dialing_timer_id = NULL;
+ }
+}
+
+void mmi_vc_connecting_timer_stop(void)
+{
+ if(NULL != s_video_call_params.connecting_timer_id)
+ {
+ Hal_Timer_Stop(s_video_call_params.connecting_timer_id);
+ s_video_call_params.connecting_timer_id = NULL;
+ }
+}
+
+static void mmi_vc_ui_prepare_destory(lv_obj_t * activity_obj)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_watch_png_cache_all_free();
+
+ // stop playing tone
+ Hal_Tone_Play_End();
+
+ // ring off
+ mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
+
+ // stop ring off timer
+ mmi_vc_ring_off_timer_stop();
+
+ // stop callreq timer
+ mmi_vc_dialing_timer_stop();
+
+ //stop
+ mmi_vc_connecting_timer_stop();
+
+ Hal_Mem_Set(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+ s_video_call_params.state = MMI_VIDEO_CALL_STATE_NONE;
+}
+
+static void mmi_vc_hook_action(lv_obj_t * btn, lv_event_t e)
+{
+ if(LV_EVENT_CLICKED != e)
+ {
+ return;
+ }
+
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ //if(btn) {
+ // lv_obj_set_click(btn, false);
+ //}
+
+ Hal_Tone_Play_End();
+
+ mmi_vc_call_action_connecting();
+
+ int8_t ret = mmi_video_call_answer_req();
+ if(ret < 0)
+ {
+ mmi_vc_ring_off_no_carrier(0);
+ }
+}
+
+
+lv_res_t mmi_video_call_phone_ring_off_create()
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
+ if(ext == NULL)
+ {
+ return(LV_RES_INV);
+ }
+
+ // stop callreq timer
+ mmi_vc_dialing_timer_stop();
+
+ if(ext->vc_ui == MMI_VC_UI_INCOMING || ext->vc_ui == MMI_VC_UI_DIALING)
+ {
+ if(ext->phone_status_label) {
+ lv_label_set_text(ext->phone_status_label, "");
+ }
+
+ mmi_vc_ring_off_content_create(mmi_vc_call_get_obj());
+ }
+ else if(ext->vc_ui == MMI_VC_UI_CONNECTED)
+ {
+ mmi_vc_ring_off_content_create(mmi_vc_call_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, mmi_vc_call_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);
+}
+
+static void mmi_vc_ring_off_timeout_cb(void * para)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ s_video_call_params.ring_off_timer_id = NULL;
+ s_video_call_params.ring_off_timeout = true;
+ mmi_vc_ring_off_no_carrier(0);
+}
+
+void mmi_vc_ring_off_action(lv_obj_t * btn, lv_event_t e)
+{
+ if(LV_EVENT_CLICKED != e)
+ {
+ return;
+ }
+
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, s_video_call_params.state);
+
+ mmi_vc_dialing_timer_stop();
+ mmi_vc_connecting_timer_stop();
+
+ if(false == s_video_call_params.ring_off)
+ {
+ s_video_call_params.ring_off = true;
+
+ 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, mmi_vc_ring_off_timeout_cb, NULL, 0);
+ }
+ }
+
+ switch(s_video_call_params.state)
+ {
+ case MMI_VIDEO_CALL_STATE_NONE:
+ case MMI_VIDEO_CALL_STATE_INVALID:
+ // do noting
+ break;
+
+ case MMI_VIDEO_CALL_STATE_CALLING:
+ mmi_video_call_hangup_req(TRUE);
+ break;
+
+ case MMI_VIDEO_CALL_STATE_INCOMING:
+ Hal_Tone_Play_End();
+ mmi_video_call_reject_req(TRUE);
+ break;
+
+ default:
+ mmi_video_call_hangup_req(TRUE);
+ break;
+ }
+
+ voip_signal_check_stop();
+ voip_rat_check_stop();
+}
+
+void mmi_ui_msg_update_vc_call_stop(void)
+{
+ mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
+}
+
+void mmi_vc_call_action_call_stop(void)
+{
+ if(true != mmi_video_call_is_in_call())
+ {
+ return;
+ }
+
+ mmi_watch_wake_up();
+ mmi_ui_msg_action_vc_call_stop();
+}
+
+static void mmi_vc_ui_dialing(lv_obj_t * content)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
+ if(ext == NULL)
+ {
+ return;
+ }
+
+ lv_obj_t * label;
+ uint32_t text_id = WATCH_TEXT_ID_VIDEO_CALL_DAILING;
+ if(MODEM_VIDEO_CALL_TYPE_VIDEO != s_video_call_params.call_type)
+ text_id = WATCH_TEXT_ID_VOICE_CALL_DAILING;
+
+ // label dialing
+ 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, text_id);
+ lv_obj_set_click(label, false);
+ lv_obj_align(label, content, LV_ALIGN_IN_TOP_MID, 0, 10);
+ ext->phone_status_label = label;
+
+ // img
+ lv_obj_t * img = lv_img_create(content, NULL);
+ lv_img_set_src(img, ICON_VIDEO_CALL_CONTACT_PHOTO);
+ lv_obj_align(img, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
+ lv_obj_set_click(img, false);
+
+ // name
+ label = lv_label_create(content, NULL);
+ lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
+ 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(s_video_call_params.name) > 0)
+ {
+ lv_label_set_text(label, s_video_call_params.name);
+ }
+ else
+ {
+ 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);
+
+ #if 0
+ // 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);
+ #endif
+
+ // btn ring off
+ 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, mmi_vc_ring_off_action);
+ lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_MID, 0, MMI_VC_RING_OFF_BTN_Y_OFFSET);
+}
+
+static void mmi_vc_ui_incoming(lv_obj_t * content)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
+ if(ext == NULL)
+ {
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return;
+ }
+ lv_obj_t * label;
+ uint32_t text_id = WATCH_TEXT_ID_VIDEO_CALL_RINGING;
+ if(MODEM_VIDEO_CALL_TYPE_VIDEO != s_video_call_params.call_type)
+ text_id = WATCH_TEXT_ID_VOICE_CALL_RINGING;
+
+ // 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, text_id);
+ lv_obj_set_click(label, false);
+ lv_obj_align(label, content, LV_ALIGN_IN_TOP_MID, 0, 10);
+ ext->phone_status_label = label;
+
+ // img
+ lv_obj_t * img = lv_img_create(content, NULL);
+ lv_img_set_src(img, ICON_VIDEO_CALL_CONTACT_PHOTO);
+ lv_obj_align(img, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
+ lv_obj_set_click(img, false);
+
+ // name
+ label = lv_label_create(content, NULL);
+ lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
+ 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(s_video_call_params.name) > 0)
+ {
+ lv_label_set_text(label, s_video_call_params.name);
+ }
+ else
+ {
+ 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);
+
+ // btn ring off
+ lv_obj_t * btn;
+ 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, mmi_vc_ring_off_action);
+ lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_LEFT, MMI_VC_INCOMING_RING_OFF_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
+
+ // btn ring hook
+ btn = lv_imgbtn_create(content, NULL);
+ lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_ANSWER_BTN);
+ lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_ANSWER_BTN);
+ lv_obj_set_event_cb(btn, mmi_vc_hook_action);
+ lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_RIGHT, MMI_VC_INCOMING_HOOK_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
+}
+
+static void mmi_vc_ui_connecting(lv_obj_t * content)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_vc_call_obj_ext_t * ext = mmi_vc_call_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_CONNECTING);
+ lv_obj_set_click(label, false);
+ lv_obj_align(label, content, LV_ALIGN_IN_TOP_MID, 0, 10);
+ ext->phone_status_label = label;
+
+ // img
+ lv_obj_t * img = lv_img_create(content, NULL);
+ lv_img_set_src(img, ICON_VIDEO_CALL_CONTACT_PHOTO);
+ lv_obj_align(img, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 20);
+ lv_obj_set_click(img, false);
+
+ // name
+ label = lv_label_create(content, NULL);
+ lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
+ 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(s_video_call_params.name) > 0)
+ {
+ lv_label_set_text(label, s_video_call_params.name);
+ }
+ else
+ {
+ 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);
+
+ // btn ring off
+ 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, mmi_vc_ring_off_action);
+ lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_MID, 0, MMI_VC_RING_OFF_BTN_Y_OFFSET);
+}
+
+static void mmi_vc_ui_connected(lv_obj_t * content)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_vc_call_obj_ext_t * ext = mmi_vc_call_get_ext();
+ if(ext == NULL)
+ {
+ return;
+ }
+
+ lv_obj_t * label;
+ lv_obj_t * btn;
+ hal_rtc_t rtc_curr = {0}; // current rtc time
+ Hal_Rtc_Gettime(&rtc_curr);
+
+ if(s_video_call_params.call_type == MODEM_VIDEO_CALL_TYPE_VOICE)
+ {
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ ext->connect_start_time = time_to_seconds(&rtc_curr);
+
+ ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_NULL;
+
+ //lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
+ lv_obj_t * img = lv_img_create(content, NULL);
+ lv_img_set_src(img, ICON_VIDEO_CALL_CONTACT_PHOTO);
+ lv_obj_align(img, content, LV_ALIGN_IN_TOP_MID, 0, 30);
+ lv_obj_set_click(img, false);
+
+ // name
+ label = lv_label_create(content, NULL);
+ lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
+ 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(s_video_call_params.name) > 0)
+ {
+ lv_label_set_text(label, s_video_call_params.name);
+ }
+ else
+ {
+ 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);
+
+ //duration
+ lv_obj_t * time_label = lv_label_create(content, NULL);
+ lv_obj_add_style(time_label, LV_OBJ_PART_MAIN, &lv_watch_font20);
+ lv_label_set_align(time_label, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text(time_label, "00:00");
+ lv_obj_set_click(time_label, false);
+ lv_obj_set_base_dir(time_label, LV_BIDI_DIR_LTR);
+ lv_obj_align(time_label, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+ ext->phone_status_label = time_label;
+
+ //btn volume
+ btn = lv_imgbtn_create(content, NULL);
+ lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_VOLUME_BTN);
+ lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_VOLUME_BTN);
+ lv_obj_set_event_cb(btn, voip_volume_btn_action);
+ lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_LEFT, MMI_VC_CALLING_VOLUME_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET); //20, -50);
+
+ //btn ring off
+ 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, mmi_vc_ring_off_action);
+ lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_RIGHT, MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET); //-20, -50);
+ }
+ else
+ {
+ lv_obj_t * canvas;
+
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: format=%d\n", __FUNCTION__, __LINE__, ext->voiph263fmt);
+
+ ext->local_remote_switch_flag = VOIP_REMOTE_SWITCH_REMOTE;
+ if((ext->voiph263fmt == VOIP_H263_FMT_SQCIF) || (ext->voiph263fmt == VOIP_H263_FMT_QCIF))
+ {
+ ext->connect_start_time = time_to_seconds(&rtc_curr);
+
+ /*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;
+
+ lv_obj_align(canvas, content, LV_ALIGN_IN_TOP_MID, 0, 0);
+ /*Assign the buffer to the canvas*/
+ lv_img_set_src(canvas, ICON_BACKGROUND);
+ 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);
+ lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 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_font26);
+ 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_VIDEO_CALL_VOLUME_BTN);
+ lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_VOLUME_BTN);
+ lv_obj_set_event_cb(btn, voip_volume_btn_action);
+ lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_LEFT, MMI_VC_CALLING_VOLUME_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
+
+ // 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, 0);
+
+ // btn ring off
+ btn = lv_imgbtn_create(canvas, 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, mmi_vc_ring_off_action);
+ lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_RIGHT, MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
+ }
+ 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_BACKGROUND);
+ 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);
+ lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 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_font26);
+ 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_VIDEO_CALL_VOLUME_BTN);
+ lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_VOLUME_BTN);
+ lv_obj_set_event_cb(btn, voip_volume_btn_action);
+ lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_LEFT, MMI_VC_CALLING_VOLUME_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
+ lv_obj_add_style(btn, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
+ ext->volume_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_VIDEO_CALL_HANGUP_BTN);
+ lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_HANGUP_BTN);
+ lv_obj_set_event_cb(btn, mmi_vc_ring_off_action);
+ lv_obj_align(btn, canvas, LV_ALIGN_IN_BOTTOM_RIGHT, MMI_VC_CALLING_RING_OFF_BTN_X_OFFSET, MMI_VC_RING_OFF_BTN_Y_OFFSET);
+ 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->volume_button, ext->canvas_button_hidden_flag);
+ lv_obj_set_hidden(ext->view_switch_button, true); // 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(mmi_vc_call_get_obj()) {
+ lv_watch_obj_set_down_slide_cb(mmi_vc_call_get_obj(), voip_phone_down_slide_callback);
+ }
+ }
+}
+
+static lv_obj_t * mmi_vc_ui_create(lv_obj_t * activity_obj)
+{
+ if(MMI_VC_UI_CONNECTED == s_vc_call_ui)
+ {
+ /* set speaker volume to nv when leaving activiry's slider */
+ voip_set_volume_when_slider_act();
+ }
+
+ mmi_vc_call_screen_clean();
+
+ //lv_watch_png_cache_all_free();
+
+ if(activity_obj == NULL)
+ {
+ lv_watch_activity_ext_t activity_ext = {0};
+
+ activity_ext.actId = ACT_ID_VOIPPHONE;
+ activity_ext.create = NULL; // mmi_vc_ui_create;
+ activity_ext.prepare_destory = mmi_vc_ui_prepare_destory;
+ activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+ if(NULL == activity_obj)
+ {
+ return NULL;
+ }
+ }
+
+ lv_obj_t * obj = lv_watch_obj_create(activity_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_vc_call_obj_ext_t * ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_vc_call_obj_ext_t));
+ if(ext == NULL)
+ {
+ return NULL;
+ }
+
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ ext->phone_status_label = NULL;
+ ext->phone_animation_obj = NULL;
+ ext->vc_ui = s_vc_call_ui;
+ 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->volume_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));
+ //lv_cont_set_layout(content, LV_LAYOUT_COLUMN_MID);
+ lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
+ //lv_obj_set_style_local_bg_color(content, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_watch_obj_add_element(content);
+ lv_obj_set_click(content, false);
+ lv_obj_align(content, obj, LV_ALIGN_CENTER, 0, 0);
+
+ switch(ext->vc_ui)
+ {
+ case MMI_VC_UI_INCOMING:
+ mmi_vc_ui_incoming(content);
+ //mmi_vc_ring_animation(ext->phone_status_label);
+ break;
+
+ case MMI_VC_UI_DIALING:
+ mmi_vc_ui_dialing(content);
+ //mmi_vc_dialing_animation(ext->phone_status_label);
+ break;
+
+ case MMI_VC_UI_CONNECTING:
+ mmi_vc_ui_connecting(content);
+ //mmi_vc_connecting_animation(ext->phone_status_label);
+ break;
+
+ case MMI_VC_UI_CONNECTED:
+ mmi_vc_ui_connected(content);
+ mmi_vc_connected_animation(ext->phone_status_label);
+ break;
+
+ default:
+ break;
+ }
+
+ return obj;
+}
+
+void mmi_ui_msg_update_vc_call_incoming(void)
+{
+ s_vc_call_ui = MMI_VC_UI_INCOMING;
+ mmi_vc_ui_create(NULL);
+}
+
+void mmi_vc_call_action_incoming(char * number, MODEM_VIDEO_CALL_TYPE type)
+{
+ if(true == mmi_active_screen_is_prohibit_interrupted()
+ || true == is_rat_gsm()
+ #ifdef __MMI_ZHSX_SUPPORT_DO_NOT_DISTURB__
+ || true == mmi_watch_is_in_do_not_disturb_time()
+ #endif
+ || true == mmi_video_call_is_in_call()
+ )
+ {
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ mmi_video_call_reject_req(TRUE);
+ return;
+ }
+
+ if(AUDIO_CTRL_PRIORITY_2 == Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_2, mmi_vc_audio_ctrl_callback))
+ {
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__);
+
+ Hal_Mem_Set(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+ s_video_call_params.call_type = type;
+ s_video_call_params.state = MMI_VIDEO_CALL_STATE_INCOMING;
+ strncpy(s_video_call_params.number, number, NV_WATCH_VC_CONTACT_NUMBER_LEN - 1);
+ uint8_t i = 0;
+ for(i = 0; i < s_vc_contact.total; i++)
+ {
+ if(0 == strncmp(s_video_call_params.number, s_vc_contact.number[i], strlen(s_video_call_params.number)))
+ {
+ strncpy(s_video_call_params.name, s_vc_contact.name[i], NV_WATCH_VC_CONTACT_NAME_LEN - 1);
+ break;
+ }
+ }
+
+ HAL_SPEAKER_GAIN volume = query_current_volume();
+ if(!Hal_Set_BT_Audio_Path(volume))
+ {
+ Hal_Call_Speaker(HAL_CALL_SPK_ON, volume);
+ }
+ Hal_NFFS_File_Play_Repeat(AUDIO_INCOMING_CALL, volume);
+
+ mmi_watch_wake_up();
+
+ voip_rat_check_start();
+
+ // ui
+ mmi_ui_msg_action_vc_call_incoming();
+ }
+ else
+ {
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__);
+
+ // auto reject
+ mmi_video_call_reject_req(FALSE);
+ voip_signal_check_stop();
+ voip_rat_check_stop();
+
+ // stop ring off timer
+ mmi_vc_ring_off_timer_stop();
+
+ // stop callreq timer
+ mmi_vc_dialing_timer_stop();
+
+ Hal_Mem_Set(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+ voip_set_volume_when_slider_act();
+ mmi_vc_call_screen_clean();
+ lv_watch_png_cache_all_free();
+ Hal_Audio_Manage_End_Ind(AUDIO_CTRL_PRIORITY_2);
+ }
+}
+
+static void mmi_vc_call_connecting_timeout_cb(void * para)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ mmi_vc_connecting_timer_stop();
+ mmi_video_call_hangup_req(TRUE);
+ //mmi_vc_ring_off_action(NULL, LV_EVENT_CLICKED);
+}
+
+void mmi_vc_call_action_connecting(void)
+{
+ if(MMI_VIDEO_CALL_STATE_CALLING == s_video_call_params.state
+ || MMI_VIDEO_CALL_STATE_CONNECTING == s_video_call_params.state
+ )
+ {
+ return;
+ }
+
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ s_video_call_params.state = MMI_VIDEO_CALL_STATE_CONNECTING;
+
+ // stop timer
+ mmi_vc_dialing_timer_stop();
+ mmi_vc_connecting_timer_stop();
+
+ // stop playing tone
+ Hal_Tone_Play_End();
+
+ //Hal_Set_Voice_Call_Status(VOICE_CALL_START);
+
+ if(NULL == s_video_call_params.connecting_timer_id)
+ {
+ s_video_call_params.connecting_timer_id = Hal_Timer_Start(MMI_VC_CONNECTING_TIMEOUT, mmi_vc_call_connecting_timeout_cb, NULL, 0);
+ }
+
+ s_vc_call_ui = MMI_VC_UI_CONNECTING;
+ mmi_vc_ui_create(NULL);
+}
+
+void mmi_vc_call_action_connected(void)
+{
+ if(MMI_VIDEO_CALL_STATE_CALLING == s_video_call_params.state)
+ {
+ return;
+ }
+
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ s_video_call_params.state = MMI_VIDEO_CALL_STATE_CALLING;
+
+ // stop timer
+ mmi_vc_dialing_timer_stop();
+ mmi_vc_connecting_timer_stop();
+
+ // stop playing tone
+ Hal_Tone_Play_End();
+
+ Hal_Set_Voice_Call_Status(VOICE_CALL_START);
+
+ s_vc_call_ui = MMI_VC_UI_CONNECTED;
+ mmi_vc_ui_create(NULL);
+}
+
+static void mmi_vc_call_dialing_timeout_cb(void * para)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ mmi_vc_dialing_timer_stop();
+ mmi_video_call_hangup_req(TRUE);
+}
+
+void mmi_vc_call_action_dialing(char * number, MODEM_VIDEO_CALL_TYPE type)
+{
+ // check call state
+ if(MMI_VIDEO_CALL_STATE_NONE != s_video_call_params.state)
+ {
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, s_video_call_params.state);
+ return;
+ }
+
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %s,%d\n", __FUNCTION__, __LINE__, number, type);
+
+ // stop timer
+ mmi_vc_ring_off_timer_stop();
+ mmi_vc_dialing_timer_stop();
+
+ Hal_Mem_Set(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+ s_video_call_params.state = MMI_VIDEO_CALL_STATE_DIALING;
+ s_video_call_params.call_type = type;
+ strcpy(s_video_call_params.number, number);
+ uint8_t i = 0;
+ for(i = 0; i < s_vc_contact.total; i++)
+ {
+ if(0 == strncmp(s_video_call_params.number, s_vc_contact.number[i], strlen(s_video_call_params.number)))
+ {
+ strncpy(s_video_call_params.name, s_vc_contact.name[i], NV_WATCH_VC_CONTACT_NAME_LEN - 1);
+ break;
+ }
+ }
+
+ int8_t ret = mmi_video_call_dial_req(type, s_video_call_params.number);
+ if(NULL == s_video_call_params.dialing_timer_id)
+ {
+ UINT32 timeout = (ret >= 0) ? MMI_VC_DIALING_TIMEOUT : 1*1000;
+
+ s_video_call_params.dialing_timer_id = Hal_Timer_Start(timeout, mmi_vc_call_dialing_timeout_cb, NULL, 0);
+ }
+
+ voip_rat_check_start();
+
+ s_vc_call_ui = MMI_VC_UI_DIALING;
+ mmi_vc_ui_create(NULL);
+
+ Hal_Audio_Manage_Start_Req(AUDIO_CTRL_PRIORITY_2, mmi_vc_audio_ctrl_callback);
+ Hal_Set_Voice_Call_Status(VOICE_CALL_START);
+}
+
+static void mmi_vc_main_prepare_destory(lv_obj_t * activity_obj)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_watch_png_cache_all_free();
+
+ if(NULL != fail_timer_id)
+ {
+ Hal_Timer_Stop(fail_timer_id);
+ fail_timer_id = NULL;
+ }
+}
+
+void mmi_vc_call_fail_timeout_cb(void *para)
+{
+ mmi_vc_main_prepare_destory(NULL);
+}
+
+static void mmi_vc_call_action_no_permission(void)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_obj_t * obj = lv_watch_get_activity_obj(ACT_ID_VOIP_PHONEBOOK);
+
+ lv_obj_t * cont = lv_cont_create(obj, NULL);
+ lv_cont_set_fit(cont, LV_FIT_NONE);
+ lv_obj_set_size(cont, lv_obj_get_width(obj), lv_obj_get_height(obj));
+ lv_obj_set_style_local_bg_color(cont, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_cont_set_layout(cont, LV_LAYOUT_OFF);
+ lv_obj_set_click(cont, false);
+
+ lv_obj_t * label = lv_label_create(cont, NULL);
+ lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
+ lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+ lv_obj_set_click(label, false);
+ lv_label_set_text_id(label, WATCH_TEXT_ID_DEVICE_NO_NETWORK); // WATCH_TEXT_ID_NO_SIM_OR_NETWORK); // WATCH_TEXT_ID_NO_CONTACTS_OR_NETWORK);
+ lv_obj_align(label, cont, LV_ALIGN_CENTER, 0, 0);
+
+ fail_timer_id = Hal_Timer_Start(2*1000, mmi_vc_call_fail_timeout_cb, NULL, FALSE);
+}
+
+static void mmi_vc_voice_btn_action(lv_obj_t * btn, lv_event_t e)
+{
+ if(LV_EVENT_CLICKED != e)
+ {
+ return;
+ }
+
+ if(true == mmi_video_call_is_in_call())
+ {
+ return;
+ }
+
+ if(true == mmi_vc_check_mo_permission())
+ {
+ uint8_t index = lv_watch_get_free_num(btn);
+
+ mmi_vc_call_action_dialing(s_vc_contact.number[index], MODEM_VIDEO_CALL_TYPE_VOICE);
+ }
+ else
+ {
+ mmi_vc_call_action_no_permission();
+ }
+}
+
+static void mmi_vc_video_btn_action(lv_obj_t * btn, lv_event_t e)
+{
+ if(LV_EVENT_CLICKED != e)
+ {
+ return;
+ }
+
+ if(true == mmi_video_call_is_in_call())
+ {
+ return;
+ }
+
+ if(true == mmi_vc_check_mo_permission())
+ {
+ uint8_t index = lv_watch_get_free_num(btn);
+
+ mmi_vc_call_action_dialing(s_vc_contact.number[index], MODEM_VIDEO_CALL_TYPE_VIDEO);
+ }
+ else
+ {
+ mmi_vc_call_action_no_permission();
+ }
+}
+
+static void mmi_vc_dial_btn_screen(lv_obj_t * btn, lv_event_t e)
+{
+ if(LV_EVENT_CLICKED != e)
+ {
+ return;
+ }
+
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_obj_t * obj = lv_watch_get_activity_obj(ACT_ID_VOIP_PHONEBOOK);
+ uint8_t index = lv_watch_get_free_num(btn);
+
+ lv_obj_t * cont = lv_cont_create(obj, NULL);
+ lv_cont_set_fit(cont, LV_FIT_NONE);
+ lv_obj_set_size(cont, LV_HOR_RES, LV_VER_RES); // lv_obj_get_width(obj), lv_obj_get_height(obj));
+ lv_obj_set_style_local_bg_color(cont, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_cont_set_layout(cont, LV_LAYOUT_OFF);
+ lv_obj_set_click(cont, false);
+
+ lv_obj_t * voicebtn = lv_imgbtn_create(cont, NULL);
+ lv_imgbtn_set_src(voicebtn, LV_BTN_STATE_RELEASED, ICON_VIDEO_CALL_VOICE_BTN);
+ lv_imgbtn_set_src(voicebtn, LV_BTN_STATE_PRESSED, ICON_VIDEO_CALL_VOICE_BTN);
+#ifdef USE_LV_WATCH_UI_240_240_CIRCLE
+ lv_obj_align(voicebtn, cont, LV_ALIGN_IN_LEFT_MID, 5, 0);
+#else
+ lv_obj_align(voicebtn, cont, LV_ALIGN_IN_TOP_MID, 0, 10);
+#endif
+ lv_obj_set_event_cb(voicebtn, mmi_vc_voice_btn_action);
+ lv_watch_set_free_num(voicebtn, index);
+
+ lv_obj_t * videobtn = lv_imgbtn_create(cont, NULL);
+ 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);
+#ifdef USE_LV_WATCH_UI_240_240_CIRCLE
+ lv_obj_align(videobtn, cont, LV_ALIGN_IN_RIGHT_MID, -5, 0);
+#else
+ lv_obj_align(videobtn, cont, LV_ALIGN_IN_BOTTOM_MID, 0, -10);
+#endif
+ lv_obj_set_event_cb(videobtn, mmi_vc_video_btn_action);
+ lv_watch_set_free_num(videobtn, index);
+}
+
+static lv_obj_t * mmi_vc_contact_list_create(lv_obj_t * obj)
+{
+ /*Allocate the object type specific extended data*/
+ lv_vc_contact_list_obj_ext_t * ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_vc_contact_list_obj_ext_t));
+ /*ext realloc based on watch_obj_ext, do not memeset it*/
+ if(NULL == ext)
+ {
+ return NULL;
+ }
+
+ //ext->title = NULL;
+ ext->list = NULL;
+
+ /* content */
+ lv_obj_t * content = lv_cont_create(obj, NULL);
+ lv_cont_set_fit(content, LV_FIT_NONE);
+ lv_obj_set_size(content, lv_obj_get_width(obj), lv_obj_get_height(obj));
+ lv_obj_add_style(content,LV_OBJ_PART_MAIN, &lv_watch_style_transp);
+ lv_obj_set_style_local_bg_color(content, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_cont_set_layout(content, LV_LAYOUT_OFF); // lv_cont_set_layout(content, LV_LAYOUT_COLUMN_MID);
+ lv_obj_set_click(content, false);
+ lv_obj_align(content, obj, LV_ALIGN_CENTER, 0, 0);
+
+ lv_obj_t * label = lv_label_create(content, NULL);
+ lv_obj_set_size(label, LV_HOR_RES, 40); // 30);
+ lv_obj_add_style(label, LV_LABEL_PART_MAIN, &lv_watch_font20_gray);
+ lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+ lv_label_set_text_id(label, WATCH_TEXT_ID_VIDEOCALL);
+ lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 10);
+ lv_obj_set_click(label, false);
+ //ext->title = label;
+
+ lv_obj_t * list = lv_list_create(content, NULL);
+ if(list == NULL)
+ {
+ return NULL;
+ }
+ lv_watch_obj_add_element(list);
+ lv_watch_obj_add_element(lv_page_get_scrl(list));
+ lv_obj_add_style(list, LV_LIST_PART_BG, &lv_watch_style_transp);
+ //lv_obj_add_style(list, LV_LIST_PART_SCROLLABLE, &lv_watch_style_transp);
+ //lv_obj_set_style_local_pad_top(list, LV_LIST_PART_SCROLLABLE, LV_STATE_DEFAULT, 4);
+ //lv_obj_set_style_local_pad_bottom(list, LV_LIST_PART_SCROLLABLE, LV_STATE_DEFAULT, 4);
+ lv_list_set_scrollbar_mode(list, LV_SCROLLBAR_MODE_OFF); // lv_page_set_scrollbar_mode(list, LV_SCROLLBAR_MODE_OFF);
+ lv_obj_set_width(list, lv_obj_get_width(content));
+ lv_coord_t height = lv_obj_get_height(content) - 40; // lv_obj_get_height(label);
+ lv_obj_set_height(list, height);
+ lv_obj_align(list, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
+ lv_obj_set_click(list, false);
+ ext->list = list;
+
+ int8_t i = 0;
+ lv_obj_t * btn;
+
+ for(i = 0; i < s_vc_contact.total; i++)
+ {
+ char t_str[NV_WATCH_VC_CONTACT_NUMBER_LEN] = {0};
+
+ if(0 < strlen(s_vc_contact.name[i]))
+ strcpy(t_str, s_vc_contact.name[i]);
+ else
+ strcpy(t_str, s_vc_contact.number[i]);
+
+ #if 0
+ btn = lv_list_add_btn(list, NULL, NULL);
+ //lv_page_glue_obj(btn, true);
+ //lv_obj_add_protect(btn, LV_PROTECT_PRESS_LOST);
+ lv_obj_set_event_cb(btn, mmi_vc_dial_btn_screen);
+ lv_watch_obj_add_element(btn);
+
+ lv_obj_set_style_local_bg_color(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK);
+ lv_obj_set_style_local_pad_top(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 5);
+ lv_obj_set_style_local_pad_bottom(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 5);
+ lv_obj_set_style_local_pad_left(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 15);
+ lv_obj_set_style_local_pad_right(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 15);
+ lv_obj_set_style_local_pad_inner(btn, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 10);
+
+ //label = lv_obj_get_child(btn, NULL);
+ //label = lv_list_get_btn_label(btn);
+ label = lv_label_create(btn, NULL);
+ //lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL); // LV_LABEL_LONG_SROLL_CIRC
+ lv_obj_set_width(label, lv_obj_get_width(btn));
+ lv_label_set_text(label, t_str);
+ lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
+ lv_label_set_align(label, LV_LABEL_ALIGN_LEFT);
+ lv_obj_set_click(label, false);
+ //lv_obj_align(label, btn, LV_ALIGN_IN_LEFT_MID, 0, 0);
+
+ lv_watch_set_free_num(btn, i);
+ #else
+
+ btn = lv_list_add_btn(list, NULL, NULL);
+ lv_btn_set_layout(btn, LV_LAYOUT_ROW_MID);
+ //lv_obj_set_event_cb(btn, mmi_vc_dial_btn_screen);
+ //lv_watch_set_free_num(btn, i);
+
+ lv_obj_t * cont = lv_cont_create(btn, NULL);
+ lv_cont_set_layout(cont, LV_LAYOUT_OFF);
+ lv_obj_set_width(cont, lv_obj_get_width(btn));
+ lv_obj_set_height(cont, 56); // LV_VER_RES / 4); //lv_obj_get_height(btn));
+ lv_obj_add_style(cont, LV_CONT_PART_MAIN, &lv_style_transp);
+ lv_page_glue_obj(cont, true);
+ lv_watch_obj_add_element(cont);
+ lv_obj_set_click(cont, true);
+ lv_obj_set_event_cb(cont, mmi_vc_dial_btn_screen);
+ lv_watch_set_free_num(cont, i);
+
+ label = lv_label_create(cont, NULL);
+ lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font26);
+ lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL);
+ lv_obj_set_width(label, lv_obj_get_width(cont) - 40);
+ lv_label_set_text(label, t_str);
+ lv_obj_align(label, cont, LV_ALIGN_IN_LEFT_MID, 20, 0);
+
+ lv_watch_obj_add_element(btn);
+ #endif
+ }
+
+ return obj;
+}
+
+static lv_obj_t * mmi_vc_main_create(lv_obj_t * activity_obj)
+{
+ if(activity_obj == NULL)
+ {
+ lv_watch_activity_ext_t activity_ext = {0};
+
+ activity_ext.actId = ACT_ID_VOIP_PHONEBOOK;
+ activity_ext.create = mmi_vc_main_create;
+ activity_ext.prepare_destory = mmi_vc_main_prepare_destory;
+ activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+ if(NULL == activity_obj)
+ return NULL;
+ }
+
+ lv_obj_t * obj = lv_watch_obj_create(activity_obj);
+ if(NULL == obj)
+ return NULL;
+
+ if(false == mmi_vc_check_mo_permission())
+ {
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%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_font26);
+ lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+ lv_obj_set_click(label, false);
+ lv_label_set_text_id(label, WATCH_TEXT_ID_DEVICE_NO_NETWORK); // WATCH_TEXT_ID_NO_SIM_OR_NETWORK); // WATCH_TEXT_ID_NO_CONTACTS_OR_NETWORK);
+ lv_obj_align(label, obj, LV_ALIGN_CENTER, 0, -10);
+ }
+ else if(true != mmi_watch_tcp_connect_state_get()
+ || true != mmi_protocol_watch_bind_state_get()
+ )
+ {
+ // not bind
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%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_font26);
+ lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+ lv_obj_set_click(label, false);
+ lv_label_set_text_id(label, WATCH_TEXT_ID_DEVICE_NOT_BIND);
+ lv_obj_align(label, obj, LV_ALIGN_CENTER, 0, -10);
+ }
+ else if(0 == s_vc_contact.total)
+ {
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%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_font26);
+ 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);
+ lv_obj_align(label, obj, LV_ALIGN_CENTER, 0, -10);
+ }
+ else
+ {
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ mmi_vc_contact_list_create(obj);
+ }
+
+ return obj;
+}
+
+void video_call_create_event_cb(lv_obj_t * btn, lv_event_t e)
+{
+#ifdef __VIDEO_CALL_TEST__
+ nv_watch_vc_contact_t t_test_contact =
+ {
+ 3,
+ {"test001", "test002", "test003"},
+ {"jrtc001", "jrtc002", "jrtc003"}
+ };
+
+ _lv_memcpy(&s_vc_contact, &t_test_contact, sizeof(nv_watch_vc_contact_t));
+#endif
+
+ if(LV_EVENT_CLICKED == e)
+ {
+ lv_watch_png_cache_all_free();
+ mmi_vc_main_create(NULL);
+ }
+ else if(LV_EVENT_LONG_PRESSED == e)
+ {
+
+ }
+}
+
+
+//interface
+uint8_t mmi_vc_get_call_volume(void)
+{
+ return(s_video_call_params.speaker_volume);
+}
+
+bool mmi_vc_watch_suspend_check(void)
+{
+ if((s_video_call_params.call_type == MODEM_VIDEO_CALL_TYPE_VIDEO)
+ || (MMI_VIDEO_CALL_STATE_INCOMING == s_video_call_params.state)
+ || (MMI_VIDEO_CALL_STATE_DIALING == s_video_call_params.state)
+ || (MMI_VIDEO_CALL_STATE_CONNECTING == s_video_call_params.state)
+ )
+ {
+ return false;
+ }
+
+ return true;
+}
+
+bool mmi_vc_connect_check_req(void)
+{
+ if(mmi_vc_call_get_activity_obj())
+ {
+ return true;
+ }
+
+ return false;
+}
+
+void mmi_vc_activity_destroy_req(void)
+{
+ VIDEO_CALL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+ lv_obj_t * activity_obj = mmi_vc_call_get_activity_obj();
+ if(NULL == activity_obj)
+ {
+ return;
+ }
+
+ switch(s_video_call_params.state)
+ {
+ case MMI_VIDEO_CALL_STATE_NONE:
+ case MMI_VIDEO_CALL_STATE_INVALID:
+ // do noting
+ break;
+
+ case MMI_VIDEO_CALL_STATE_CALLING:
+ mmi_video_call_hangup_req(FALSE);
+ break;
+
+ case MMI_VIDEO_CALL_STATE_INCOMING:
+ Hal_Tone_Play_End();
+ mmi_video_call_reject_req(FALSE);
+ break;
+
+ default:
+ mmi_video_call_hangup_req(FALSE);
+ break;
+ }
+
+ voip_signal_check_stop();
+ voip_rat_check_stop();
+
+ // stop timer
+ mmi_vc_ring_off_timer_stop();
+ mmi_vc_dialing_timer_stop();
+ mmi_vc_connecting_timer_stop();
+
+ Hal_Mem_Set(&s_video_call_params, 0x0, sizeof(MMI_VIDEO_CALL_PARAMS_T));
+ voip_set_volume_when_slider_act();
+ mmi_vc_call_screen_clean();
+ lv_watch_png_cache_all_free();
+}
+
+#endif
+
+
--- /dev/null
+
+
+
+#ifndef __MMI_VIDEO_CALL_WULIAN_H__
+#define __MMI_VIDEO_CALL_WULIAN_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
+
+
+#ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL_WULIAN__
+
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+lv_vc_call_obj_ext_t * mmi_vc_call_get_ext(void);
+
+bool check_voipcall_enter_pm_ind(void);
+void watch_voip_message_handle_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_vc_contact_set(nv_watch_vc_contact_t * contact_list);
+
+void * mmi_video_call_phone_get_video_buffer(void);
+void mmi_vc_ring_off_no_carrier(uint8_t isNoCarrier);
+void mmi_vc_call_action_dialing(char * number, MODEM_VIDEO_CALL_TYPE type);
+void mmi_vc_call_action_incoming(char * number, MODEM_VIDEO_CALL_TYPE type);
+void mmi_vc_call_action_connecting(void);
+void mmi_vc_call_action_connected(void);
+
+void mmi_ui_msg_update_vc_call_stop(void);
+void mmi_vc_call_action_call_stop(void);
+void mmi_ui_msg_update_vc_call_incoming(void);
+
+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);
+void mmi_video_call_reject_req(BOOL bye);
+void voip_fps_check(int8_t fps);
+
+#endif
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*VIDEOCALL_H*/
#include "mmi_sundry/mmi_sundry.h"
#include "framework/message/mmi_msg_zhsx.h"
#include "lv_apps/mmi_video_call/mmi_video_call.h"
-#include "lv_apps/mmi_video_call/mmi_video_call_fzd.h"
-#include "lv_apps/mmi_video_call/mmi_video_call_tongxin.h"
#include "lv_apps/mmi_wechat/wechat.h"
#include "lv_apps/health_measure/health_measure.h"
#include "lv_apps/health_measure/health_heart_rate.h"