修改
authorCCC <2393524978@qq.com>
Tue, 25 Apr 2023 08:22:44 +0000 (16:22 +0800)
committerCCC <2393524978@qq.com>
Tue, 25 Apr 2023 08:22:44 +0000 (16:22 +0800)
30 files changed:
2.sdk/gui/lv_watch/CMakeLists.txt
2.sdk/gui/lv_watch/framework/nvm/ui_nvm_api.c
2.sdk/gui/lv_watch/include/ui_nvm_interface.h
2.sdk/gui/lv_watch/lv_apps/call_log/call_log.c
2.sdk/gui/lv_watch/lv_apps/health_measure/health_measure.c
2.sdk/gui/lv_watch/lv_apps/health_measure/health_measure.h
2.sdk/gui/lv_watch/lv_apps/phone/phone.c
2.sdk/gui/lv_watch/lv_apps/qrcode/qrcode.c
2.sdk/gui/lv_watch/lv_apps/setting/setting.c
2.sdk/gui/lv_watch/lv_watch.h
2.sdk/gui/lv_watch/lv_watch_res.h
2.sdk/gui/lv_watch/mmi_location/mmi_location.c
2.sdk/gui/lv_watch/mmi_protocol/mmi_protocol_api.c
2.sdk/gui/lv_watch/mmi_protocol/mmi_protocol_api.h
2.sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd.c
2.sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd.h
2.sdk/gui/lv_watch/mmi_sundry/mmi_common.h [new file with mode: 0644]
2.sdk/gui/lv_watch/mmi_sundry/mmi_sundry.c
2.sdk/gui/lv_watch/modem/mmi_modem_tcp/mmi_modem_tcp_manage.c
2.sdk/gui/lv_watch/modem/mmi_modem_tcp/mmi_modem_tcp_msg_handler_impl.c
2.sdk/gui/lv_watch/modem/mmi_modem_tcp/mmi_modem_tcp_net.c
2.sdk/gui/lv_watch/resource/audio/audio_wechat_receive.mid [new file with mode: 0644]
2.sdk/gui/lv_watch/resource/audio/audio_wechat_receive.mp3 [new file with mode: 0644]
2.sdk/gui/lv_watch/resource/png/call/ICON_CALL_CALLING.png [new file with mode: 0644]
2.sdk/gui/lv_watch/resource/png/call/ICON_CALL_INCOMING.png [new file with mode: 0644]
2.sdk/gui/lv_watch/resource/png/call/ICON_CALL_OUTGOING.png [new file with mode: 0644]
2.sdk/gui/lv_watch/resource/png/call/去电.png [new file with mode: 0644]
2.sdk/gui/lv_watch/resource/png/call/接听.png [new file with mode: 0644]
2.sdk/gui/lv_watch/resource/png/call/来电.png [new file with mode: 0644]
2.sdk/product/craneg_modem/config/watch/lv_watch_conf.h

index 8144f97..ebc31b3 100644 (file)
@@ -198,8 +198,10 @@ set(lv_watch_sources
 #CHENG_MODIFY
        mmi_protocol/mmi_protocol_api.c
        mmi_protocol/mmi_protocol_fzd.c
+       mmi_protocol/mmi_protocol_sms.c
        mmi_location/mmi_location.c
        mmi_sundry/mmi_sundry.c
+       mmi_sundry/mmi_common.c
 #wechat
        lv_apps/wechat/wechat_ui.c
 #primary menu data
index 18feeac..d988845 100644 (file)
@@ -71,11 +71,10 @@ uint32_t UI_NV_Get_Section_Len(NV_UI_SECTION_ID SectionId)
         case NV_SECTION_UI_GPS_AIDPOS:
             return(NV_SECTION_LEN(NV_SECTION_UI_GPS_AIDPOS));
 
-       //#if __MMI_ZHSX_SUPPORT__
-       //#if USE_LV_WATCH_WECHAT != 0
+       //#ifdef __MMI_ZHSX_SUPPORT__
                case NV_SECTION_UI_WEHAT_MSG:
                        return(NV_SECTION_LEN(NV_SECTION_UI_WEHAT_MSG));
-       //#endif
+
                case NV_SECTION_UI_HEALTH_MEASURE:
                        return(NV_SECTION_LEN(NV_SECTION_UI_HEALTH_MEASURE));
                case NV_SECTION_UI_PROTOCOL_DATA:
@@ -150,11 +149,10 @@ char * UI_NV_Get_Section_path(NV_UI_SECTION_ID SectionId)
         case NV_SECTION_UI_GPS_AIDPOS:
             return(NV_SECTION_FILE_PATH(NV_SECTION_UI_GPS_AIDPOS));
 
-       //#if __MMI_ZHSX_SUPPORT__
-       //#if USE_LV_WATCH_WECHAT != 0
+       //#ifdef __MMI_ZHSX_SUPPORT__
                case NV_SECTION_UI_WEHAT_MSG:
                        return(NV_SECTION_FILE_PATH(NV_SECTION_UI_WEHAT_MSG));
-       //#endif
+
                case NV_SECTION_UI_HEALTH_MEASURE:
                        return(NV_SECTION_FILE_PATH(NV_SECTION_UI_HEALTH_MEASURE));
                case NV_SECTION_UI_PROTOCOL_DATA:
@@ -196,10 +194,8 @@ uint8_t UI_NV_Reset_Default(NV_UI_SECTION_ID SectionId)
        nv_watch_agnss_t * agnss;
     nv_watch_sms_msg_t * smsmsg;
     nv_watch_gps_aidpos_t * gps_aidpos;
-//#if __MMI_ZHSX_SUPPORT__
-//#if USE_LV_WATCH_WECHAT != 0
+//#ifdef __MMI_ZHSX_SUPPORT__
        nv_watch_wechat_msg_info_t * wechat_msg;
-//#endif
        nv_watch_health_measure_timed_t * health_measure;
        nv_watch_protocol_data_t * protocol_data;
 //#endif
@@ -352,24 +348,25 @@ uint8_t UI_NV_Reset_Default(NV_UI_SECTION_ID SectionId)
             memset(gps_aidpos, 0, SectionLen);
             TempData = (char *)gps_aidpos;
             break;
-       //#if __MMI_ZHSX_SUPPORT__
-       //#if USE_LV_WATCH_WECHAT != 0
+
+       //#ifdef __MMI_ZHSX_SUPPORT__
                case NV_SECTION_UI_WEHAT_MSG:
                        wechat_msg = lv_mem_alloc(SectionLen);
             memset(wechat_msg, 0, SectionLen);
             TempData = (char *)wechat_msg;
             break;
-       //#endif
 
                case NV_SECTION_UI_HEALTH_MEASURE:
                        health_measure = lv_mem_alloc(SectionLen);
                        memset(health_measure, 0, SectionLen);
+                       mmi_health_measure_timed_info_nv_default(health_measure);
                        TempData = (char *)health_measure;
                        break;
 
                case NV_SECTION_UI_PROTOCOL_DATA:
                        protocol_data = lv_mem_alloc(SectionLen);
                        memset(protocol_data, 0, SectionLen);
+                       mmi_watch_protocol_data_nv_default(protocol_data);
                        TempData = (char *)protocol_data;
                        break;
        //#endif
index 01f5010..19bf8d2 100644 (file)
@@ -142,8 +142,8 @@ typedef struct
                                                     *default 0*/
 } __packed nv_watch_voice_msg_t;
 
-//#if __MMI_ZHSX_SUPPORT__
-//#if USE_LV_WATCH_WECHAT != 0
+
+//#ifdef __MMI_ZHSX_SUPPORT__
 
 #define NV_WATCH_WECHAT_NUM_MAX                (20)
 #define NV_WATCH_WECHAT_DATA_FILE_NAME_MAX     (LV_FS_MAX_PATH_LENGTH / 2)
@@ -173,25 +173,28 @@ typedef struct
     uint8_t msg_count;
     nv_watch_wechat_msg_item_info_t msg_item[NV_WATCH_WECHAT_NUM_MAX];
 } __packed nv_watch_wechat_msg_info_t;
-//#endif
 
 typedef struct
 {
        uint8_t heart_timed_flag; // 0-close; 1-open
        uint32_t heart_timed_interval; // unit-second
-       uint8_t temperature_timed_flag;
-       uint32_t temperature_timed_interval;
-       uint8_t blood_timed_flag;
-       uint32_t blood_timed_interval;
-       uint8_t spo2_timed_flag;
-       uint32_t spo2_timed_interval;
+       uint8_t temperature_timed_flag; // 0-close; 1-open
+       uint32_t temperature_timed_interval; // unit-second
+       uint8_t blood_timed_flag; // 0-close; 1-open
+       uint32_t blood_timed_interval; // unit-second
+       uint8_t spo2_timed_flag; // 0-close; 1-open
+       uint32_t spo2_timed_interval; // unit-second
 } __packed nv_watch_health_measure_timed_t;
 
+#define NV_WATCH_HOST_NAME_LEN_MAX             (128)
+
 typedef struct
 {
-       uint32_t heartbeat_action_interval; // second
-       uint32_t location_upload_interval; // second
-       uint32_t weather_update_interval; // second
+       char watch_host_name[NV_WATCH_HOST_NAME_LEN_MAX];
+       int watch_host_port;
+       uint32_t heartbeat_action_interval; // unit-second
+       uint32_t location_upload_interval; // unit-second
+       uint32_t weather_update_interval; // unit-second
 } __packed nv_watch_protocol_data_t;
 
 
index c3396c0..ca92384 100644 (file)
 
 #if USE_LV_WATCH_CALL_LOG != 0
 
+#ifdef __MMI_ZHSX_SUPPORT__
+
+const void * status[] = {
+            (void *)ICON_CALL_LOG_OUTGOING_CALL,
+            (void *)ICON_CALL_LOG_INCOMING_CALL,
+            (void *)ICON_CALL_LOG_MISSED_CALL,
+            (void *)ICON_CALL_LOG_INCOMING_CALL,
+};
+
+static nv_watch_call_log_t * call_log_read_nvm(void)
+{
+    uint32_t length = sizeof(nv_watch_call_log_t);
+    nv_watch_call_log_t * data = (nv_watch_call_log_t *)lv_mem_alloc(length);
+    memset(data, 0, length);
+    if(length != UI_NV_Read_Req(NV_SECTION_UI_CALL_LOG, 0, length, (uint8_t *)data)) {
+        printf("%s: Occur error when reading call log information from NVM\n", __FUNCTION__);
+        lv_mem_free(data);
+        return NULL;
+    }
+    return data;
+}
+
+static void call_log_write_nvm(nv_watch_call_log_t * data)
+{
+    if(NULL == data) return;
+
+    uint32_t length = sizeof(nv_watch_call_log_t);
+    if(length != UI_NV_Write_Req(NV_SECTION_UI_CALL_LOG, 0, length, (uint8_t *)data)) {
+        printf("%s: Occur error when writing call log information to NVM\n", __FUNCTION__);
+        return;
+    }
+    lv_mem_free(data);
+}
+
+static uint8_t call_log_get_log_num(nv_watch_call_log_t * data)
+{
+    uint8_t i = 0;
+    for(i = 0; i < NV_WATCH_MAX_CALL_LOG_NUM; i++) {
+        if('\0' == data->info[i].number[0]) {
+            break;
+        }
+    }
+    return i;
+}
+
+static lv_call_log_obj_ext_t * call_log_get_ext(void)
+{
+    lv_call_log_obj_ext_t  * ext = NULL;
+    lv_obj_t * watch_obj = NULL;
+
+    lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_CALL_LOG);
+    if(activity_obj) {
+        lv_watch_get_child_obj(activity_obj, lv_watch_obj_signal, &watch_obj);
+    }
+    if(watch_obj) {
+        ext = lv_obj_get_ext_attr(watch_obj);
+    }
+    return ext;
+}
+
+void call_log_update_call_log_info(call_status_t call_status, char * number, hal_rtc_t *time)
+{
+    // read from nvm first
+    nv_watch_call_log_t * nvm_call_log_list = call_log_read_nvm();
+    // move call log list
+    memmove(&nvm_call_log_list->info[1], &nvm_call_log_list->info[0], (NV_WATCH_MAX_CALL_LOG_NUM - 1) * sizeof(nv_watch_call_log_info_t));
+    // update call log info
+    memset(&nvm_call_log_list->info[0], 0, sizeof(nv_watch_call_log_info_t));
+    nvm_call_log_list->info[0].call_status = call_status;
+    nvm_call_log_list->info[0].month = time->tm_mon;
+    nvm_call_log_list->info[0].day = time->tm_mday;
+    nvm_call_log_list->info[0].hour = time->tm_hour;
+    nvm_call_log_list->info[0].min = time->tm_min;
+    memcpy(nvm_call_log_list->info[0].number, number, strlen(number));
+    // write to nvm after updating
+    call_log_write_nvm(nvm_call_log_list);
+}
+
+static void call_log_update_call_log_ll(uint8_t call_log_num, nv_watch_call_log_t * call_log_list)
+{
+    lv_call_log_obj_ext_t * ext = call_log_get_ext();
+    LV_ASSERT_MEM(ext);
+
+    uint8_t i = 0;
+    call_log_number_info_t * node = NULL;
+    nv_watch_call_log_info_t * info = NULL;
+
+    for(i = 0; i < call_log_num; i++) {
+        info = &call_log_list->info[i];
+        node = (call_log_number_info_t *)_lv_ll_ins_tail(ext->phone_number_list);
+        node->index = i;
+        node->phone_number = (char *)lv_mem_alloc(NV_CONTACTS_MAX_NUMBER_LEN);
+        memset(node->phone_number, 0, NV_CONTACTS_MAX_NUMBER_LEN);
+        memcpy(node->phone_number, info->number, NV_CONTACTS_MAX_NUMBER_LEN);
+    }
+}
+
+static lv_obj_t * call_log_no_log_info_create(lv_obj_t * obj)
+{
+    lv_obj_t * label = lv_label_create(obj, NULL);
+    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font30); //&lv_watch_font20);
+    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+    lv_obj_set_click(label, false);
+    lv_label_set_text_id(label, WATCH_TEXT_ID_NO_CALL_LOG_INFO);
+    lv_obj_align(label, obj, LV_ALIGN_CENTER, 0, 0);
+
+    return label;
+}
+
+static lv_obj_t * call_log_list_create(lv_obj_t * obj)
+{
+    lv_obj_t * title = lv_label_create(obj, NULL);
+    lv_obj_add_style(title, LV_LABEL_PART_MAIN, &lv_watch_font20_gray);
+    lv_label_set_align(title, LV_LABEL_ALIGN_CENTER);
+    lv_obj_set_click(title, false);
+    lv_label_set_text_id(title, WATCH_TEXT_ID_CALL_LOG);
+    lv_obj_align(title, obj, LV_ALIGN_IN_TOP_MID, 0, 10);
+
+    lv_obj_t * list = lv_list_create(obj, NULL);
+    lv_page_set_edge_flash(list, true);
+    lv_obj_add_style(list, LV_LIST_PART_EDGE_FLASH, &lv_watch_cont_opa1);
+    lv_obj_add_style(list, LV_LIST_PART_BG, &lv_watch_style_transp);
+    lv_obj_set_size(list, LV_HOR_RES, LV_VER_RES - lv_obj_get_height(title)); // - LV_VER_RES / 10);
+    lv_obj_align(list, title, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
+    lv_watch_obj_add_element(list);
+
+    return list;
+}
+
+static void call_log_log_btn_event_cb(lv_obj_t * btn, lv_event_t e)
+{
+    if(LV_EVENT_CLICKED != e) 
+               return;
+
+    lv_call_log_obj_ext_t * ext = call_log_get_ext();
+    LV_ASSERT_MEM(ext);
+
+    uint8_t index = lv_obj_get_user_data(btn).user_num;
+
+    call_log_number_info_t * node = NULL;
+    node = _lv_ll_get_head(ext->phone_number_list);
+    while(node) 
+       {
+        if(index == node->index) {
+            printf("%s: mo start\n", __FUNCTION__);
+            uint8_t length = strlen(node->phone_number);
+            char * number_mo = (char *)Hal_Mem_Alloc(length + 1);
+            memset(number_mo, 0, length + 1);
+            memcpy(number_mo, node->phone_number, length);
+            phone_voice_call_req(number_mo);
+            break;
+        } else {
+            node = _lv_ll_get_next(ext->phone_number_list, node);
+        }
+    }
+}
+
+static void call_log_content_create(lv_obj_t * list, uint8_t call_log_num, nv_watch_call_log_t * call_log_list)
+{
+    uint8_t i = 0;
+    char time_str[10];
+    phonebook_contact_t * contact_info = NULL;
+    char * tmp_num = NULL;
+    nv_watch_call_log_info_t * info = NULL;
+    lv_obj_t * btn[call_log_num];
+    lv_obj_t * label_number;
+    lv_obj_t * img_status;
+    lv_obj_t * label_time;
+    hal_rtc_t curr_time;
+    memset(&curr_time, 0, sizeof(hal_rtc_t));
+    Hal_Rtc_Gettime(&curr_time);
+
+    for(i = 0; i < call_log_num; i++) 
+       {
+               btn[i] = lv_list_add_btn(list, NULL, NULL);
+               lv_btn_set_layout(btn[i], LV_LAYOUT_ROW_MID);
+               //lv_obj_set_event_cb(btn[i], call_log_log_btn_event_cb);
+               //lv_watch_set_free_num(btn[i], i);
+
+        info = &call_log_list->info[i];
+        tmp_num = (char *)lv_mem_alloc(NV_CONTACTS_MAX_NUMBER_LEN);
+        memset(tmp_num, 0, NV_CONTACTS_MAX_NUMBER_LEN);
+        memcpy(tmp_num, info->number, NV_CONTACTS_MAX_NUMBER_LEN);
+        contact_info = phonebook_get_contact_info(tmp_num);
+        tmp_num = NULL;
+
+               lv_obj_t * cont = lv_cont_create(btn[i], NULL);
+               lv_cont_set_layout(cont, LV_LAYOUT_OFF);
+               lv_obj_set_width(cont, lv_obj_get_width(btn[i]));
+               lv_obj_set_height(cont, 70); //lv_obj_get_height(btn[i]));
+               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, call_log_log_btn_event_cb);
+               lv_watch_set_free_num(cont, i);
+
+               label_number = lv_label_create(cont, NULL);
+               lv_obj_add_style(label_number, LV_OBJ_PART_MAIN, &lv_watch_font24);
+               lv_label_set_text(label_number, info->number);
+               lv_label_set_long_mode(label_number, LV_LABEL_LONG_DOT);
+               lv_obj_set_width(label_number, lv_obj_get_width(btn[i]) - 20);
+               if(contact_info) 
+               {
+                       if(contact_info->contact_name)
+                               lv_label_set_text(label_number, contact_info->contact_name);
+                       lv_mem_free(contact_info);
+                       contact_info = NULL;
+               }
+
+               lv_obj_t * cont_status_time =  lv_cont_create(cont, NULL);
+               lv_cont_set_layout(cont_status_time, LV_LAYOUT_ROW_MID);
+               lv_cont_set_fit2(cont_status_time, LV_FIT_TIGHT, LV_FIT_TIGHT);
+               lv_obj_add_style(cont_status_time, LV_CONT_PART_MAIN, &lv_style_transp);
+               lv_page_glue_obj(cont_status_time, true);
+               lv_watch_obj_add_element(cont_status_time);
+
+               if(LV_BIDI_DIR_RTL == lv_obj_get_base_dir(btn[i])) {
+                  lv_obj_align(label_number, cont, LV_ALIGN_IN_TOP_RIGHT, -10, 5);
+                  lv_obj_align(cont_status_time, cont, LV_ALIGN_IN_BOTTOM_RIGHT, -20, -5);
+               } else {
+                  lv_obj_align(label_number, cont, LV_ALIGN_IN_TOP_LEFT, 10, 5);
+                  lv_obj_align(cont_status_time, cont, LV_ALIGN_IN_BOTTOM_LEFT, 20, -5);
+               }
+
+               img_status = lv_img_create(cont_status_time, NULL);
+               lv_img_set_src(img_status, status[info->call_status]);
+
+               if((curr_time.tm_mon == info->month) && (curr_time.tm_mday == info->day)) {
+                       snprintf(time_str, 10, "%02d:%02d", info->hour, info->min);
+               } else {
+                       snprintf(time_str, 10, "%02d/%02d", info->month, info->day);
+               }
+               label_time = lv_label_create(cont_status_time, NULL);
+               lv_label_set_text(label_time, time_str);
+               lv_obj_set_base_dir(label_time, LV_BIDI_DIR_LTR);
+
+               lv_watch_obj_add_element(btn[i]);
+    }
+}
+
+static void call_log_ll_init(void)
+{
+    lv_call_log_obj_ext_t * ext = call_log_get_ext();
+    LV_ASSERT_MEM(ext);
+
+    if(NULL == ext->phone_number_list) {
+        ext->phone_number_list = (lv_ll_t *)lv_mem_alloc(sizeof(lv_ll_t));
+        memset(ext->phone_number_list, 0, sizeof(lv_ll_t));
+        _lv_ll_init(ext->phone_number_list, sizeof(call_log_number_info_t));
+    }
+}
+
+static void call_log_ll_destroy(void)
+{
+    lv_call_log_obj_ext_t * ext = call_log_get_ext();
+    LV_ASSERT_MEM(ext);
+    call_log_number_info_t * node = NULL;
+    call_log_number_info_t * next_node = NULL;
+
+    if(ext->phone_number_list) {
+        node = (call_log_number_info_t *)_lv_ll_get_head(ext->phone_number_list);
+        while(node) {
+            //next node
+            next_node = (call_log_number_info_t *)_lv_ll_get_next(ext->phone_number_list, node);
+            if(node->phone_number) {
+                lv_mem_free(node->phone_number);
+                node->phone_number = NULL;
+            }
+            _lv_ll_remove(ext->phone_number_list, node);
+            lv_mem_free(node);
+            node = next_node;
+        }
+        lv_mem_free(ext->phone_number_list);
+        ext->phone_number_list = NULL;
+    }
+}
+
+static void call_log_prepare_destory(lv_obj_t * activity_obj)
+{
+    lv_watch_png_cache_all_free();
+    call_log_ll_destroy();
+}
+
+void call_log_ui_update(void)
+{
+    lv_obj_t * activity_obj = lv_watch_get_activity_obj(ACT_ID_CALL_LOG);
+
+    if(activity_obj) {
+        lv_obj_t * obj = lv_obj_get_child_back(lv_obj_get_child_back(activity_obj, NULL), NULL);
+        nv_watch_call_log_t * nvm_call_log_list = call_log_read_nvm();
+        if(NULL == nvm_call_log_list) 
+                       return;
+               
+        uint8_t call_log_num = call_log_get_log_num(nvm_call_log_list);
+        lv_call_log_obj_ext_t * ext = call_log_get_ext();
+        LV_ASSERT_MEM(ext);
+        call_log_ll_destroy();
+        call_log_ll_init();
+        call_log_update_call_log_ll(call_log_num, nvm_call_log_list);
+        if(ext->list) 
+               {
+            lv_list_clean(ext->list);
+        } 
+               else 
+               {
+            if(ext->label_tip) {
+                lv_obj_del(ext->label_tip);
+                ext->label_tip = NULL;
+            }
+            ext->list = call_log_list_create(obj);
+        }
+        call_log_content_create(ext->list, call_log_num, nvm_call_log_list);
+        if(nvm_call_log_list) {
+            lv_mem_free(nvm_call_log_list);
+            nvm_call_log_list = NULL;
+        }
+    }
+}
+
+lv_obj_t * call_log_create(lv_obj_t * activity_obj)
+{
+    nv_watch_call_log_t * nvm_call_log_list = call_log_read_nvm();
+    if(NULL == nvm_call_log_list) return NULL;
+    uint8_t call_log_num = call_log_get_log_num(nvm_call_log_list);
+
+    if(NULL == activity_obj) {
+        lv_watch_activity_ext_t activity_ext;
+        memset(&activity_ext, 0, sizeof(lv_watch_activity_ext_t));
+        activity_ext.actId = ACT_ID_CALL_LOG;
+        activity_ext.create = call_log_create;
+        activity_ext.prepare_destory = call_log_prepare_destory;
+        activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+        LV_ASSERT_MEM(activity_obj);
+        if(NULL == activity_obj) return NULL;
+    }
+
+    lv_obj_t * obj = lv_watch_obj_create(activity_obj);
+    LV_ASSERT_MEM(obj);
+    if(NULL == obj) 
+               return NULL;
+
+    lv_call_log_obj_ext_t * ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_call_log_obj_ext_t));
+    LV_ASSERT_MEM(ext);
+    if(NULL == ext) 
+               return NULL;
+       
+    ext->list = NULL;
+    ext->label_tip = NULL;
+    ext->phone_number_list = NULL;
+
+    if(0 == call_log_num) 
+       {
+        ext->label_tip = call_log_no_log_info_create(obj);
+    } 
+       else 
+       {
+        ext->list = call_log_list_create(obj);
+        call_log_content_create(ext->list, call_log_num, nvm_call_log_list);
+        call_log_ll_init();
+        call_log_update_call_log_ll(call_log_num, nvm_call_log_list);
+    }
+
+    if(nvm_call_log_list) 
+       {
+        lv_mem_free(nvm_call_log_list);
+        nvm_call_log_list = NULL;
+    }
+
+    return obj;
+}
+
+void call_log_create_event_cb(lv_obj_t * btn, lv_event_t e)
+{
+    (void)btn;
+    if(LV_EVENT_CLICKED == e)
+    {
+        lv_watch_png_cache_all_free();
+        lv_obj_t * obj = call_log_create(NULL);
+        LV_ASSERT_MEM(obj);
+        if(NULL == obj) return;
+    }
+}
+
+#else
+
 /*********************
 *      DEFINES
 *********************/
@@ -455,4 +841,5 @@ static void call_log_update_call_log_ll(uint8_t call_log_num, nv_watch_call_log_
     }
 }
 
+#endif
 #endif /*USE_LV_WATCH_CALL_LOG*/
index b33ded9..698c89d 100644 (file)
@@ -1,9 +1,10 @@
 
 
 
-#include "lv_watch.h"
+#ifdef __MMI_ZHSX_SUPPORT__
 
-#include <stdio.h>
+//#include <stdio.h>
+#include "health_measure.h"
 
 
 static nv_watch_health_measure_timed_t s_health_measure_timed_data = {0};
@@ -208,7 +209,7 @@ void mmi_health_measure_timed_info_nv_write(void)
        }
 }
 
-void mmi_health_measure_timed_info_init(void)
+void mmi_health_measure_timed_info_nv_read(void)
 {
        uint32_t nv_data_length = sizeof(nv_watch_health_measure_timed_t);
        
@@ -221,6 +222,20 @@ void mmi_health_measure_timed_info_init(void)
        _lv_ll_init(&s_health_measure_timed_ll, sizeof(MMI_HEALTH_MEASURE_TYPE_E));
 }
 
+void mmi_health_measure_timed_info_nv_default(nv_watch_health_measure_timed_t * data)
+{
+       HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       
+       data->heart_timed_flag = MMI_HEALTH_HEART_TIMED_FLAG;
+       data->heart_timed_interval = MMI_HEALTH_HEART_TIMED_INTERVAL;
+       data->temperature_timed_flag = MMI_HEALTH_TEMPERATURE_TIMED_FLAG;
+       data->temperature_timed_interval = MMI_HEALTH_TEMPERATURE_TIMED_INTERVAL;
+       data->blood_timed_flag = MMI_HEALTH_BLOOD_TIMED_FLAG;
+       data->blood_timed_interval = MMI_HEALTH_BLOOD_TIMED_INTERVAL;
+       data->spo2_timed_flag = MMI_HEALTH_SPO2_TIMED_FLAG;
+       data->spo2_timed_interval = MMI_HEALTH_SPO2_TIMED_INTERVAL;     
+}
+
 
 void mmi_health_measure_timed_list_node_remove(MMI_HEALTH_MEASURE_TYPE_E measure_type)
 {
@@ -627,7 +642,7 @@ static void mmi_health_measure_process_timer_handle(uint32_t para)
                                break;
                }
 
-               uos_timer_start(s_health_measure_process_timer_id, MMI_HEALTH_MEASURE_CYCLE_DURATION, 0, mmi_health_measure_process_timer_handle, NULL);
+               uos_timer_start(s_health_measure_process_timer_id, MS_TO_TICKS(MMI_HEALTH_MEASURE_CYCLE_DURATION), 0, mmi_health_measure_process_timer_handle, NULL);
        }
 }
 
@@ -700,7 +715,7 @@ void mmi_health_measure_start(MMI_HEALTH_MEASURE_TYPE_E measure_type, uint32_t t
        s_measure_time_count = 0;
 
        uos_timer_create(&s_health_measure_process_timer_id);
-       uos_timer_start(s_health_measure_process_timer_id, MMI_HEALTH_MEASURE_CYCLE_DURATION, 0, mmi_health_measure_process_timer_handle, NULL);
+       uos_timer_start(s_health_measure_process_timer_id, MS_TO_TICKS(MMI_HEALTH_MEASURE_CYCLE_DURATION), 0, mmi_health_measure_process_timer_handle, NULL);
 }
 
 void mmi_health_measure_timed_measure_start(MMI_HEALTH_MEASURE_TYPE_E measure_type)
@@ -763,5 +778,5 @@ void mmi_health_measure_ui_measure_start(MMI_HEALTH_MEASURE_TYPE_E measure_type)
        mmi_health_measure_start(measure_type, 0);
 }
 
-
+#endif
 
index fe5ddc1..805c823 100644 (file)
@@ -1,6 +1,8 @@
 
 
 
+#ifdef __MMI_ZHSX_SUPPORT__
+
 #ifndef __HEALTH_MEASURE_H__
 #define __HEALTH_MEASURE_H__
 
@@ -31,11 +33,6 @@ extern "C" {
 //#define __HEALTH_MEASURE_FAKE_DATA__
 
 
-#define MMI_HEALTH_MEASURE_HEART_DURATION      (44 * 1000) // ms
-#define MMI_HEALTH_MEASURE_TEMPERATURE_DURATION        (24 * 1000) // ms
-#define MMI_HEALTH_MEASURE_BLOOD_DURATION      (34 * 1000) // ms
-#define MMI_HEALTH_MEASURE_SPO2_DURATION       (34 * 1000) // ms
-
 #define MMI_HEALTH_MEASURE_CYCLE_DURATION      (1 * 1000) // ms
 
 
@@ -88,7 +85,8 @@ void mmi_health_measure_timed_measure_start(MMI_HEALTH_MEASURE_TYPE_E measure_ty
 void mmi_health_measure_app_measure_start(MMI_HEALTH_MEASURE_TYPE_E measure_type);
 void mmi_health_measure_ui_measure_start(MMI_HEALTH_MEASURE_TYPE_E measure_type);
 
-void mmi_health_measure_timed_info_init(void);
+void mmi_health_measure_timed_info_nv_read(void);
+void mmi_health_measure_timed_info_nv_default(nv_watch_health_measure_timed_t * data);
 bool mmi_health_measure_heart_timed_action(bool direct_trigger, uint32_t cur_time_stamp);
 bool mmi_health_measure_temperature_timed_action(bool direct_trigger, uint32_t cur_time_stamp);
 bool mmi_health_measure_blood_timed_action(bool direct_trigger, uint32_t cur_time_stamp);
@@ -101,3 +99,5 @@ bool mmi_health_measure_spo2_timed_action(bool direct_trigger, uint32_t cur_time
 
 #endif
 
+#endif
+
index a62a658..5dcd708 100644 (file)
@@ -27,6 +27,7 @@ static void phone_ring(lv_obj_t * content);
 static void phone_connected(lv_obj_t * content);
 static void phone_left_slide_callback(lv_obj_t * obj);
 static void phone_right_slide_callback(lv_obj_t * obj);
+void ring_off_action(lv_obj_t * btn, lv_event_t e);
 static void dialing_animation(lv_obj_t * par);
 static void ring_animation(lv_obj_t * par);
 static void connected_animation(lv_obj_t * obj);
@@ -57,6 +58,507 @@ extern phone_call_params_t  call_params;
 /**********************
  *   GLOBAL FUNCTIONS
 ***********************/
+#ifdef __MMI_ZHSX_SUPPORT__
+static void phone_dialing(lv_obj_t * content)
+{
+       printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+       lv_phone_obj_ext_t * ext = phone_get_ext();
+       LV_ASSERT_MEM(ext);
+       if(ext == NULL) 
+               return;
+
+       lv_bidi_dir_t bidi_dir = lv_obj_get_base_dir(content);
+
+       //label dialing
+       lv_obj_t * label = lv_label_create(content, NULL);
+       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
+       lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+       lv_label_set_text_id(label, WATCH_TEXT_ID_DAILING);
+       lv_obj_set_click(label, false);
+       lv_obj_align(label, content, LV_ALIGN_IN_TOP_MID, 0, 0);
+       ext->phone_status_label = label;
+
+       //img
+       lv_obj_t * img = lv_img_create(content, NULL);
+       lv_img_set_src(img, ICON_CALL_OUTGOING);
+       lv_obj_align(img, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+
+       //name or number
+       label = lv_label_create(content, NULL);
+       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font24);
+       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) - 10);
+       char txt[NV_CONTACTS_MAX_NAME_LEN] = {0};
+       if(LV_BIDI_DIR_RTL == bidi_dir) 
+               lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
+       
+       if(strlen(call_params.name) > 0)
+               strcpy(txt, call_params.name);
+       else
+               strcpy(txt, call_params.number);
+
+       lv_label_set_text(label, txt);
+       lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+
+       //btn volume
+       lv_obj_t * btn;
+       btn = lv_imgbtn_create(content, 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, volume_btn_action);
+       lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_LEFT, 20, -50);
+
+       //btn ring off
+       btn = lv_imgbtn_create(content, NULL);
+       lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_OFF);
+       lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_OFF);
+       lv_obj_set_event_cb(btn, ring_off_action);
+       lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_RIGHT, -20, -50);
+}
+
+static void phone_ring(lv_obj_t * content)
+{
+       printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+       lv_watch_indev_reset();
+
+       lv_phone_obj_ext_t * ext = phone_get_ext();
+       LV_ASSERT_MEM(ext);
+       if(ext == NULL) return;
+       lv_obj_t * label;
+
+       lv_bidi_dir_t bidi_dir = lv_obj_get_base_dir(content);
+
+       //label ringing
+       label = lv_label_create(content, NULL);
+       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
+       lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+       lv_label_set_text_id(label, WATCH_TEXT_ID_RINGING);
+       lv_obj_set_click(label, false);
+       lv_obj_align(label, content, LV_ALIGN_IN_TOP_MID, 0, 0);
+       ext->phone_status_label = label;
+
+       //img
+       lv_obj_t * img = lv_img_create(content, NULL);
+       lv_img_set_src(img, ICON_CALL_INCOMING);
+       lv_obj_align(img, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+
+       //name or number
+       label = lv_label_create(content, NULL);
+       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font24);
+       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) - 10);
+       char txt[NV_CONTACTS_MAX_NAME_LEN] = {0};
+       if(LV_BIDI_DIR_RTL == bidi_dir) 
+               lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
+       
+       if(strlen(call_params.name) > 0)
+               strcpy(txt, call_params.name);
+       else
+               strcpy(txt, call_params.number);
+
+       lv_label_set_text(label, txt);
+       lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+       ext->num_label = label;
+
+       //btn ring off
+       lv_obj_t * btn;
+       btn = lv_imgbtn_create(content, NULL);
+       lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_OFF);
+       lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_OFF);
+       lv_obj_set_event_cb(btn, ring_off_action);
+       lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_LEFT, 20, -50);
+
+       //btn ring hook
+       btn = lv_imgbtn_create(content, NULL);
+       lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_HOOK);
+       lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_HOOK);
+       lv_obj_set_event_cb(btn, ring_hook_action);
+       lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_RIGHT, -20, -50);
+}
+
+static void phone_connected(lv_obj_t * content)
+{
+       printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       
+       lv_phone_obj_ext_t * ext = phone_get_ext();
+       LV_ASSERT_MEM(ext);
+       if(ext == NULL) 
+               return;
+
+       lv_bidi_dir_t bidi_dir = lv_obj_get_base_dir(content);
+
+       //img
+       lv_obj_t * img = lv_img_create(content, NULL);
+       lv_img_set_src(img, ICON_CALL_CALLING);
+       lv_obj_align(img, content, LV_ALIGN_IN_TOP_MID, 0, 10);
+
+       //name or number
+       lv_obj_t * label = lv_label_create(content, NULL);
+       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font24);
+       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) - 10);
+       char txt[NV_CONTACTS_MAX_NAME_LEN] = {0};
+       if(LV_BIDI_DIR_RTL == bidi_dir) 
+               lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
+       
+       if(strlen(call_params.name) > 0)
+               strcpy(txt, call_params.name);
+       else
+               strcpy(txt, call_params.number);
+       
+       lv_label_set_text(label, txt);
+       lv_obj_align(label, img, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+       ext->num_label = label;
+
+       //duration
+       label = lv_label_create(content, NULL);
+       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
+       lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+       lv_label_set_text(label, "00:00");
+       lv_obj_set_click(label, false);
+       lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
+       lv_obj_align(label, ext->num_label, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+       ext->phone_status_label = label;
+
+       //btn volume
+       lv_obj_t * btn;
+       btn = lv_imgbtn_create(content, 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, volume_btn_action);
+       lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_LEFT, 20, -50);
+
+       //btn ring off
+       btn = lv_imgbtn_create(content, NULL);
+       lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_OFF);
+       lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_OFF);
+       lv_obj_set_event_cb(btn, ring_off_action);
+       lv_obj_align(btn, content, LV_ALIGN_IN_BOTTOM_RIGHT, -20, -50);
+
+       hal_rtc_t rtc_curr;                // current rtc time
+       Hal_Rtc_Gettime(&rtc_curr);
+       ext->connect_start_time = time_to_seconds(&rtc_curr);
+       printf("%s: connect_start_time=%u, rtc_curr = %d/%d/%d, %d:%d:%d\n", __FUNCTION__,
+                       ext->connect_start_time,
+                       rtc_curr.tm_year,
+                       rtc_curr.tm_mon,
+                       rtc_curr.tm_mday,
+                       rtc_curr.tm_hour,
+                       rtc_curr.tm_min,
+                       rtc_curr.tm_sec);
+}
+
+lv_obj_t * phone_create(lv_obj_t * activity_obj, phone_ui_t phone_ui_id)
+{
+       printf("[@CHENG_DEBUG][%s][%d]: phone_ui_id=%d\n", __FUNCTION__, __LINE__, phone_ui_id);
+
+       if(PHONE_UI_CONNECTED == phone_ui_id) {
+               /* set speaker volume to nv when leaving activiry's slider */
+               set_volume_when_slider_act();
+       }
+       /* cleanup phone first */
+       phone_cleanup();
+
+       if(NULL == activity_obj) 
+       {
+               lv_watch_activity_ext_t activity_ext;
+               memset(&activity_ext, 0, sizeof(lv_watch_activity_ext_t));
+               activity_ext.actId = ACT_ID_PHONE;
+               activity_ext.create = NULL;
+               activity_ext.prepare_destory = phone_prepare_destory;
+               activity_obj = lv_watch_creat_activity_obj(&activity_ext);
+               LV_ASSERT_MEM(activity_obj);
+               if(activity_obj == NULL) 
+                       return NULL;
+       }
+
+       lv_obj_t * obj = lv_watch_obj_create(activity_obj);
+       LV_ASSERT_MEM(obj);
+       if(obj == NULL) 
+               return NULL;
+       
+       lv_watch_obj_set_anim_mode(obj, LV_WATCH_LEFT_OR_RIGHT_SLIDE_CALLBACK);
+       lv_watch_obj_set_left_slide_cb(obj, phone_left_slide_callback);
+       lv_watch_obj_set_right_slide_cb(obj, phone_right_slide_callback);
+
+       lv_phone_obj_ext_t * ext = lv_obj_allocate_ext_attr(obj, sizeof(lv_phone_obj_ext_t));
+       LV_ASSERT_MEM(ext);
+       if(ext == NULL) 
+               return NULL;
+       
+       ext->phone_status_label = NULL;
+       ext->phone_animation_obj = NULL;
+       ext->phone_ui_id = phone_ui_id;
+       ext->connect_start_time = 0;
+
+       /* content */
+       lv_obj_t * content = lv_cont_create(obj, NULL);
+       lv_obj_set_size(content, lv_obj_get_width(obj), lv_obj_get_height(obj) - 20);
+       //lv_cont_set_layout(content, LV_LAYOUT_COLUMN_MID);
+       LV_ASSERT_MEM(content);
+       if(content == NULL) 
+               return NULL;
+       lv_obj_add_style(content, LV_OBJ_PART_MAIN, &lv_watch_style_transp);
+       /* must click false */
+       lv_obj_set_click(content, false);
+       lv_obj_align(content, obj, LV_ALIGN_CENTER, 0, 20);
+
+       if(ext->phone_ui_id == PHONE_UI_DIALING) {
+               phone_dialing(content);
+               dialing_animation(ext->phone_status_label);
+       } else if(ext->phone_ui_id == PHONE_UI_RING) {
+               phone_ring(content);
+               ring_animation(ext->phone_status_label);
+       } else if(ext->phone_ui_id == PHONE_UI_CONNECTED) {
+               phone_connected(content);
+               connected_animation(ext->phone_status_label);
+       }
+
+       return obj;
+}
+       
+#else
+
+static void phone_dialing(lv_obj_t * content)
+{
+    printf("%s\n", __FUNCTION__);
+
+    lv_phone_obj_ext_t * ext = phone_get_ext();
+    LV_ASSERT_MEM(ext);
+    if(ext == NULL) return;
+
+    lv_bidi_dir_t bidi_dir = lv_obj_get_base_dir(content);
+
+    //label dialing
+    lv_obj_t * label = lv_label_create(content, NULL);
+    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
+    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+    lv_label_set_text_id(label, WATCH_TEXT_ID_DAILING);
+    lv_obj_set_click(label, false);
+    ext->phone_status_label = label;
+
+    //img small
+    lv_obj_t * img = lv_img_create(content, NULL);
+    if(call_params.img_src_small) {
+        lv_img_set_src(img, call_params.img_src_small);
+    }
+
+    //name and number
+    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_long_mode(label, LV_LABEL_LONG_SROLL);
+    lv_obj_set_width(label, lv_obj_get_width(content) - 10);
+    char txt[NV_CONTACTS_MAX_NAME_LEN + NV_CONTACTS_MAX_NUMBER_LEN] = {};
+    if(LV_BIDI_DIR_RTL == bidi_dir) {
+        lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
+        strcat(txt, call_params.number);
+        if(strlen(call_params.name) > 0) {
+            strcat(txt, " ");
+            strcat(txt, call_params.name);
+        }
+    } else {
+        if(strlen(call_params.name) > 0) {
+            strcat(txt, call_params.name);
+            strcat(txt, " ");
+        }
+        strcat(txt, call_params.number);
+    }
+    lv_label_set_text(label, txt);
+
+    lv_obj_t * cont = phone_cont_create(content, LV_LAYOUT_OFF, &lv_watch_style_transp, lv_obj_get_width(content) - 40);
+
+    //btn volume
+    lv_obj_t * btn;
+    btn = lv_imgbtn_create(cont, NULL);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_VOLUME);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_VOLUME);
+    lv_obj_set_event_cb(btn, volume_btn_action);
+    if(LV_BIDI_DIR_RTL == bidi_dir) {
+        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
+    } else {
+        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
+    }
+
+    //btn ring off
+    btn = lv_imgbtn_create(cont, NULL);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_OFF);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_OFF);
+    lv_obj_set_event_cb(btn, ring_off_action);
+    if(LV_BIDI_DIR_RTL == bidi_dir) {
+        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
+    } else {
+        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
+    }
+}
+
+static void phone_ring(lv_obj_t * content)
+{
+    printf("%s\n", __FUNCTION__);
+
+    lv_watch_indev_reset();
+
+    lv_phone_obj_ext_t * ext = phone_get_ext();
+    LV_ASSERT_MEM(ext);
+    if(ext == NULL) return;
+    lv_obj_t * label;
+
+    lv_bidi_dir_t bidi_dir = lv_obj_get_base_dir(content);
+
+    //label ringing
+    label = lv_label_create(content, NULL);
+    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
+    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+    lv_label_set_text_id(label, WATCH_TEXT_ID_RINGING);
+    lv_obj_set_click(label, false);
+    ext->phone_status_label = label;
+
+    //img small
+    lv_obj_t * img = lv_img_create(content, NULL);
+    if(call_params.img_src_small) {
+        lv_img_set_src(img, call_params.img_src_small);
+    }
+
+    //name and number
+    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_long_mode(label, LV_LABEL_LONG_SROLL);
+    lv_obj_set_width(label, lv_obj_get_width(content) - 10);
+    char txt[NV_CONTACTS_MAX_NAME_LEN + NV_CONTACTS_MAX_NUMBER_LEN] = {};
+    if(LV_BIDI_DIR_RTL == bidi_dir) {
+        lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
+        strcat(txt, call_params.number);
+        if(strlen(call_params.name) > 0) {
+            strcat(txt, " ");
+            strcat(txt, call_params.name);
+        }
+    } else {
+        if(strlen(call_params.name) > 0) {
+            strcat(txt, call_params.name);
+            strcat(txt, " ");
+        }
+        strcat(txt, call_params.number);
+    }
+    lv_label_set_text(label, txt);
+    ext->num_label = label;
+
+    lv_obj_t * cont = phone_cont_create(content, LV_LAYOUT_OFF, &lv_watch_style_transp, lv_obj_get_width(content) - 40);
+    ext->btn_cont = cont;
+
+    //btn ring off
+    lv_obj_t * btn;
+    btn = lv_imgbtn_create(cont, NULL);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_OFF);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_OFF);
+    lv_obj_set_event_cb(btn, ring_off_action);
+    if(LV_BIDI_DIR_RTL == bidi_dir) {
+        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
+    } else {
+        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
+    }
+
+    //btn ring hook
+    btn = lv_imgbtn_create(cont, NULL);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_HOOK);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_HOOK);
+    lv_obj_set_event_cb(btn, ring_hook_action);
+    if(LV_BIDI_DIR_RTL == bidi_dir) {
+        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
+    } else {
+        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
+    }
+}
+
+static void phone_connected(lv_obj_t * content)
+{
+    lv_phone_obj_ext_t * ext = phone_get_ext();
+    LV_ASSERT_MEM(ext);
+    if(ext == NULL) return;
+
+    lv_bidi_dir_t bidi_dir = lv_obj_get_base_dir(content);
+
+    //img small
+    lv_obj_t * img = lv_img_create(content, NULL);
+    if(call_params.img_src_small) {
+        lv_img_set_src(img, call_params.img_src_small);
+    }
+
+    //name and number
+    lv_obj_t * label = lv_label_create(content, NULL);
+    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
+    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+    lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL);
+    lv_obj_set_width(label, lv_obj_get_width(content) - 10);
+    char txt[NV_CONTACTS_MAX_NAME_LEN + NV_CONTACTS_MAX_NUMBER_LEN] = {};
+    if(LV_BIDI_DIR_RTL == bidi_dir) {
+        lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
+        strcat(txt, call_params.number);
+        if(strlen(call_params.name) > 0) {
+            strcat(txt, " ");
+            strcat(txt, call_params.name);
+        }
+    } else {
+        if(strlen(call_params.name) > 0) {
+            strcat(txt, call_params.name);
+            strcat(txt, " ");
+        }
+        strcat(txt, call_params.number);
+    }
+    lv_label_set_text(label, txt);
+
+    //duration
+    label = lv_label_create(content, NULL);
+    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
+    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
+    lv_label_set_text(label, "0:0");
+    lv_obj_set_click(label, false);
+    lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
+    ext->phone_status_label = label;
+
+    lv_obj_t * cont = phone_cont_create(content, LV_LAYOUT_OFF, &lv_watch_style_transp, lv_obj_get_width(content) - 40);
+
+    //btn volume
+    lv_obj_t * btn;
+    btn = lv_imgbtn_create(cont, NULL);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_VOLUME);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_VOLUME);
+    lv_obj_set_event_cb(btn, volume_btn_action);
+    if(LV_BIDI_DIR_RTL == bidi_dir) {
+        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
+    } else {
+        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
+    }
+
+    //btn ring off
+    btn = lv_imgbtn_create(cont, NULL);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_OFF);
+    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_OFF);
+    lv_obj_set_event_cb(btn, ring_off_action);
+    if(LV_BIDI_DIR_RTL == bidi_dir) {
+        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
+    } else {
+        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
+    }
+
+    hal_rtc_t rtc_curr;            // current rtc time
+    Hal_Rtc_Gettime(&rtc_curr);
+    ext->connect_start_time = time_to_seconds(&rtc_curr);
+    printf("%s: connect_start_time=%u, rtc_curr = %d/%d/%d, %d:%d:%d\n", __FUNCTION__,
+        ext->connect_start_time,
+        rtc_curr.tm_year,
+        rtc_curr.tm_mon,
+        rtc_curr.tm_mday,
+        rtc_curr.tm_hour,
+        rtc_curr.tm_min,
+        rtc_curr.tm_sec);
+}
+
 lv_obj_t * phone_create(lv_obj_t * activity_obj, phone_ui_t phone_ui_id)
 {
     printf("%s: phone_ui_id=%d\n", __FUNCTION__, phone_ui_id);
@@ -118,6 +620,7 @@ lv_obj_t * phone_create(lv_obj_t * activity_obj, phone_ui_t phone_ui_id)
 
     return obj;
 }
+#endif
 
 lv_res_t phone_ring_off_create()
 {
@@ -422,6 +925,30 @@ static void phone_ring_off_timeout_cb(void * para)
     watch_modem_call_response_no_carrier(call_params.index, 0);
 }
 
+#ifdef __MMI_ZHSX_SUPPORT__
+void ring_hook_action(lv_obj_t * btn, lv_event_t e)
+{
+    (void)btn;
+
+    if(LV_EVENT_CLICKED != e) 
+        return;
+
+    lv_phone_obj_ext_t * ext = phone_get_ext();
+    if(ext->num_label) 
+       {
+        lv_label_set_text_id(ext->num_label, WATCH_TEXT_ID_CONNECTING);
+    }
+
+       printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+    Hal_Tone_Play_End();
+
+    //set voice call status
+    Hal_Set_Voice_Call_Status(VOICE_CALL_START);
+
+    watch_modem_call_request_answer();
+}
+#else
 void ring_hook_action(lv_obj_t * btn, lv_event_t e)
 {
     (void)btn;
@@ -455,6 +982,7 @@ void ring_hook_action(lv_obj_t * btn, lv_event_t e)
     Hal_Timer_Start(60, phone_connected_cb, NULL, 0);
 #endif
 }
+#endif
 
 static void phone_cleanup(void)
 {
@@ -597,253 +1125,15 @@ static void anim_fp_connected(lv_anim_t * anim)
 
     char str[20] = "";
     get_time_elaps(ext->connect_start_time, str, 20);
-    if(anim->var) lv_label_set_text(anim->var, str);
-}
-
-static void phone_dialing(lv_obj_t * content)
-{
-    printf("%s\n", __FUNCTION__);
-
-    lv_phone_obj_ext_t * ext = phone_get_ext();
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) return;
-
-    lv_bidi_dir_t bidi_dir = lv_obj_get_base_dir(content);
-
-    //label dialing
-    lv_obj_t * label = lv_label_create(content, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-    lv_label_set_text_id(label, WATCH_TEXT_ID_DAILING);
-    lv_obj_set_click(label, false);
-    ext->phone_status_label = label;
-
-    //img small
-    lv_obj_t * img = lv_img_create(content, NULL);
-    if(call_params.img_src_small) {
-        lv_img_set_src(img, call_params.img_src_small);
-    }
-
-    //name and number
-    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_long_mode(label, LV_LABEL_LONG_SROLL);
-    lv_obj_set_width(label, lv_obj_get_width(content) - 10);
-    char txt[NV_CONTACTS_MAX_NAME_LEN + NV_CONTACTS_MAX_NUMBER_LEN] = {};
-#if 1
-       if(LV_BIDI_DIR_RTL == bidi_dir) 
-               lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
-       
-       if(strlen(call_params.name) > 0)
-               strcpy(txt, call_params.name);
-       else
-               strcpy(txt, call_params.number);
-
+#ifdef __MMI_ZHSX_SUPPORT__
+       if(anim->var) 
+       {
+               lv_label_set_text(anim->var, str);
+               lv_obj_align(anim->var, ext->num_label, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+       }
 #else
-    if(LV_BIDI_DIR_RTL == bidi_dir) {
-        lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
-        strcat(txt, call_params.number);
-        if(strlen(call_params.name) > 0) {
-            strcat(txt, " ");
-            strcat(txt, call_params.name);
-        }
-    } else {
-        if(strlen(call_params.name) > 0) {
-            strcat(txt, call_params.name);
-            strcat(txt, " ");
-        }
-        strcat(txt, call_params.number);
-    }
+    if(anim->var) lv_label_set_text(anim->var, str);
 #endif
-    lv_label_set_text(label, txt);
-
-    lv_obj_t * cont = phone_cont_create(content, LV_LAYOUT_OFF, &lv_watch_style_transp, lv_obj_get_width(content) - 40);
-
-    //btn volume
-    lv_obj_t * btn;
-    btn = lv_imgbtn_create(cont, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_VOLUME);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_VOLUME);
-    lv_obj_set_event_cb(btn, volume_btn_action);
-    if(LV_BIDI_DIR_RTL == bidi_dir) {
-        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
-    } else {
-        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
-    }
-
-    //btn ring off
-    btn = lv_imgbtn_create(cont, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_OFF);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_OFF);
-    lv_obj_set_event_cb(btn, ring_off_action);
-    if(LV_BIDI_DIR_RTL == bidi_dir) {
-        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
-    } else {
-        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
-    }
-}
-
-static void phone_ring(lv_obj_t * content)
-{
-    printf("%s\n", __FUNCTION__);
-
-    lv_watch_indev_reset();
-
-    lv_phone_obj_ext_t * ext = phone_get_ext();
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) return;
-    lv_obj_t * label;
-
-    lv_bidi_dir_t bidi_dir = lv_obj_get_base_dir(content);
-
-    //label ringing
-    label = lv_label_create(content, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-    lv_label_set_text_id(label, WATCH_TEXT_ID_RINGING);
-    lv_obj_set_click(label, false);
-    ext->phone_status_label = label;
-
-    //img small
-    lv_obj_t * img = lv_img_create(content, NULL);
-    if(call_params.img_src_small) {
-        lv_img_set_src(img, call_params.img_src_small);
-    }
-
-    //name and number
-    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_long_mode(label, LV_LABEL_LONG_SROLL);
-    lv_obj_set_width(label, lv_obj_get_width(content) - 10);
-    char txt[NV_CONTACTS_MAX_NAME_LEN + NV_CONTACTS_MAX_NUMBER_LEN] = {};
-    if(LV_BIDI_DIR_RTL == bidi_dir) {
-        lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
-        strcat(txt, call_params.number);
-        if(strlen(call_params.name) > 0) {
-            strcat(txt, " ");
-            strcat(txt, call_params.name);
-        }
-    } else {
-        if(strlen(call_params.name) > 0) {
-            strcat(txt, call_params.name);
-            strcat(txt, " ");
-        }
-        strcat(txt, call_params.number);
-    }
-    lv_label_set_text(label, txt);
-    ext->num_label = label;
-
-    lv_obj_t * cont = phone_cont_create(content, LV_LAYOUT_OFF, &lv_watch_style_transp, lv_obj_get_width(content) - 40);
-    ext->btn_cont = cont;
-
-    //btn ring off
-    lv_obj_t * btn;
-    btn = lv_imgbtn_create(cont, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_OFF);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_OFF);
-    lv_obj_set_event_cb(btn, ring_off_action);
-    if(LV_BIDI_DIR_RTL == bidi_dir) {
-        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
-    } else {
-        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
-    }
-
-    //btn ring hook
-    btn = lv_imgbtn_create(cont, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_HOOK);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_HOOK);
-    lv_obj_set_event_cb(btn, ring_hook_action);
-    if(LV_BIDI_DIR_RTL == bidi_dir) {
-        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
-    } else {
-        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
-    }
-}
-
-static void phone_connected(lv_obj_t * content)
-{
-    lv_phone_obj_ext_t * ext = phone_get_ext();
-    LV_ASSERT_MEM(ext);
-    if(ext == NULL) return;
-
-    lv_bidi_dir_t bidi_dir = lv_obj_get_base_dir(content);
-
-    //img small
-    lv_obj_t * img = lv_img_create(content, NULL);
-    if(call_params.img_src_small) {
-        lv_img_set_src(img, call_params.img_src_small);
-    }
-
-    //name and number
-    lv_obj_t * label = lv_label_create(content, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-    lv_label_set_long_mode(label, LV_LABEL_LONG_SROLL);
-    lv_obj_set_width(label, lv_obj_get_width(content) - 10);
-    char txt[NV_CONTACTS_MAX_NAME_LEN + NV_CONTACTS_MAX_NUMBER_LEN] = {};
-    if(LV_BIDI_DIR_RTL == bidi_dir) {
-        lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
-        strcat(txt, call_params.number);
-        if(strlen(call_params.name) > 0) {
-            strcat(txt, " ");
-            strcat(txt, call_params.name);
-        }
-    } else {
-        if(strlen(call_params.name) > 0) {
-            strcat(txt, call_params.name);
-            strcat(txt, " ");
-        }
-        strcat(txt, call_params.number);
-    }
-    lv_label_set_text(label, txt);
-
-    //duration
-    label = lv_label_create(content, NULL);
-    lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
-    lv_label_set_align(label, LV_LABEL_ALIGN_CENTER);
-    lv_label_set_text(label, "0:0");
-    lv_obj_set_click(label, false);
-    lv_obj_set_base_dir(label, LV_BIDI_DIR_LTR);
-    ext->phone_status_label = label;
-
-    lv_obj_t * cont = phone_cont_create(content, LV_LAYOUT_OFF, &lv_watch_style_transp, lv_obj_get_width(content) - 40);
-
-    //btn volume
-    lv_obj_t * btn;
-    btn = lv_imgbtn_create(cont, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_VOLUME);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_VOLUME);
-    lv_obj_set_event_cb(btn, volume_btn_action);
-    if(LV_BIDI_DIR_RTL == bidi_dir) {
-        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
-    } else {
-        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
-    }
-
-    //btn ring off
-    btn = lv_imgbtn_create(cont, NULL);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_RELEASED, ICON_PHONE_RING_OFF);
-    lv_imgbtn_set_src(btn, LV_BTN_STATE_PRESSED, ICON_PHONE_RING_OFF);
-    lv_obj_set_event_cb(btn, ring_off_action);
-    if(LV_BIDI_DIR_RTL == bidi_dir) {
-        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
-    } else {
-        lv_obj_align(btn, cont, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0);
-    }
-
-    hal_rtc_t rtc_curr;            // current rtc time
-    Hal_Rtc_Gettime(&rtc_curr);
-    ext->connect_start_time = time_to_seconds(&rtc_curr);
-    printf("%s: connect_start_time=%u, rtc_curr = %d/%d/%d, %d:%d:%d\n", __FUNCTION__,
-        ext->connect_start_time,
-        rtc_curr.tm_year,
-        rtc_curr.tm_mon,
-        rtc_curr.tm_mday,
-        rtc_curr.tm_hour,
-        rtc_curr.tm_min,
-        rtc_curr.tm_sec);
 }
 
 static void phone_prepare_destory(lv_obj_t * activity_obj)
@@ -883,6 +1173,14 @@ static void get_time_elaps(uint32_t last_time, char * str, int8_t size)
     uint32_t hours = minutes / 60;
     minutes = minutes % 60;
 
+#ifdef __MMI_ZHSX_SUPPORT__
+       if(hours == 0) 
+               snprintf(str, size, "%02d:%02d", minutes, seconds);
+       else 
+               snprintf(str, size, "%02d:%02d:%02d", hours, minutes, seconds);
+       
+#else
+
     if(hours == 0) {
         if(lv_lang_act() == LANG_CH) {
             snprintf(str, size, "%d%s:%d%s", minutes, (char *)lv_lang_get_text(WATCH_TEXT_ID_MINUTES), seconds, (char *)lv_lang_get_text(WATCH_TEXT_ID_SECONDS));
@@ -896,6 +1194,7 @@ static void get_time_elaps(uint32_t last_time, char * str, int8_t size)
             snprintf(str, size, "%.2d:%.2d:%.2d", hours, minutes, seconds);
         }
     }
+#endif
 }
 
 static void call_prompt_prepare_destory(lv_obj_t * activity_obj)
index 95f5042..74eeb94 100644 (file)
 /*********************
  *      DEFINES
  *********************/
+#ifdef __MMI_ZHSX_SUPPORT__
+#define QRCODE_BG_WIDTH (190)
+#define QRCODE_WIDTH (188)
+#else
 #define QRCODE_BG_WIDTH 136
 #define QRCODE_WIDTH 126 /*21*n*/
+#endif
 
 /**********************
  *      TYPEDEFS
@@ -103,7 +108,6 @@ static lv_obj_t * qrcode_create_content(lv_obj_t * par)
     lv_obj_align(content, par, LV_ALIGN_CENTER, 0, -20);
 
 #ifdef __MMI_ZHSX_SUPPORT__
-
        char imei[16] = {0};
        app_adp_get_imei_req(imei);
 
@@ -111,7 +115,7 @@ static lv_obj_t * qrcode_create_content(lv_obj_t * par)
        lv_obj_align(qrcode, content, LV_ALIGN_CENTER, 0, 0);
 
        lv_obj_t * label = lv_label_create(par, NULL);
-       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font20);
+       lv_obj_add_style(label, LV_OBJ_PART_MAIN, &lv_watch_font24);
        lv_label_set_text(label, imei);
        lv_obj_set_click(label, false);
        lv_obj_align(label, content, LV_ALIGN_OUT_BOTTOM_MID, 0, 6);
index 4436da6..c98190b 100644 (file)
@@ -47,6 +47,10 @@ const struct {
     { ICON_SETTING_BRIGHTNESS, WATCH_TEXT_ID_BRIGHTNESS_ADJUST, setting_brightness_create_btn_action },
     { ICON_SETTING_DATETIME, WATCH_TEXT_ID_DATE_AND_TIME,  setting_date_time_create_btn_action},
     //{ ICON_SETTING_LANGUAGE, WATCH_TEXT_ID_LANGUAGE_SWITCH, language_create_btn_action },
+#if USE_LV_WATCH_QRCODE != 0
+    //{ ICON_SETTING_QRCODE, WATCH_TEXT_ID_CREATE_QRCODE, qrcode_create_event_cb },
+    { ICON_SETTING_QRCODE, WATCH_TEXT_ID_DEVICE_QRCODE, qrcode_create_event_cb },
+#endif
 #if USE_LV_WATCH_VOLTE_SWTICH != 0
     { ICON_SETTING_VOLTE, WATCH_TEXT_ID_VOLTE, volte_switch_create_btn_action },
 #endif
@@ -66,10 +70,6 @@ const struct {
     { ICON_SETTING_UPGRADE, WATCH_TEXT_ID_SYSTEM_UPGRADE, btn_event_cb },
 #endif
     { ICON_SETTING_ABOUT, WATCH_TEXT_ID_ABOUT_WATCH, setting_about_create_btn_action },
-#if USE_LV_WATCH_QRCODE != 0
-    //{ ICON_SETTING_QRCODE, WATCH_TEXT_ID_CREATE_QRCODE, qrcode_create_event_cb },
-    { ICON_SETTING_QRCODE, WATCH_TEXT_ID_DEVICE_QRCODE, qrcode_create_event_cb },
-#endif
     //{ &icon_setting_time_zone, WATCH_TEXT_ID_TIME_ZONE, btn_action },
     //{ &icon_setting_add_friends, WATCH_TEXT_ID_ADD_FRIEND_ADJUST, btn_action },
     //{ &icon_setting_ring_music, WATCH_TEXT_ID_RINGTONE_SWITCH, btn_action },
index 975d1ad..0619773 100644 (file)
@@ -167,9 +167,12 @@ extern "C" {
 
 #ifdef __MMI_ZHSX_SUPPORT__
 
+#include "mmi_customer_default.h"
+#include "mmi_sundry/mmi_common.h"
 #include "mmi_location/mmi_location.h"
 #include "mmi_protocol/mmi_protocol_api.h"
 #include "mmi_protocol/mmi_protocol_fzd.h"
+#include "mmi_protocol/mmi_protocol_sms.h"
 #include "mmi_sundry/mmi_sundry.h"
 #ifdef __MMI_WECHAT_SUPPORT__
 #include "lv_apps/wechat/wechat.h"
index 0bc9ab2..e7d61e0 100644 (file)
@@ -659,7 +659,6 @@ LV_IMG_DECLARE(img_poweron_logo);
 #define ICON_COMMON_BG_WHITE                         "R:/png/common/ICON_COMMON_BG_WHITE.png"
 #define ICON_COMMON_SUCCESS                          "R:/png/common/ICON_COMMON_SUCCESS.png"
 
-
 // wechat
 #ifdef __MMI_WECHAT_SUPPORT__
 #define ICON_WECHAT_NO_NETWORK                          "R:/png/wechat/ICON_WECHAT_NO_NETWORK.png"
@@ -714,13 +713,14 @@ LV_IMG_DECLARE(img_poweron_logo);
 
 #define AUDIO_WATCH_SEARCH                               "R:/audio/audio_watch_search.mp3"
 
-//#define ICON_CALL_OUTGOING                    "R:/png/call/icon_heart_rate_measure_done.png"
-//#define ICON_CALL_INCOMING                    "R:/png/call/icon_heart_rate_measure_fail.png"
-//#define ICON_CALL_CONNECTING                    "R:/png/call/icon_heart_rate_measure_fail.png"
+#define ICON_CALL_OUTGOING                    "R:/png/call/ICON_CALL_OUTGOING.png"
+#define ICON_CALL_INCOMING                    "R:/png/call/ICON_CALL_INCOMING.png"
+#define ICON_CALL_CALLING                    "R:/png/call/ICON_CALL_CALLING.png"
 
 #endif
 
 
+
 //font
 #ifdef USE_FONT_TTF
 /* YH2312F.ttf include 60 special symbols from FontAwesome5-Solid+Brands+Regular_simple.ttf, see lv_symbol_def.h */
index 83b0fbc..afa10b1 100644 (file)
@@ -124,6 +124,46 @@ void mmi_watch_location_mission_list_data_send(void)
        }
 }
 
+void mmi_watch_location_gps_data_get(void)
+{
+       double gpsLon = 0, gpsLat = 0;
+       gpsNmeaDataT gpsNmeaData = {0};
+
+       LOCATION_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+
+    ReadNmeaData(&gpsNmeaData);
+       if('A' == gpsNmeaData.NmeaRmcData.Status) 
+       {
+               LOCATION_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+               
+        hal_gps_aidpos_save(gpsNmeaData.NmeaRmcData.Latitude, gpsNmeaData.NmeaRmcData.NSIndicator,
+                            gpsNmeaData.NmeaRmcData.Longitude, gpsNmeaData.NmeaRmcData.WEIndicator,
+                            gpsNmeaData.NmeaGgaData.Altitude);
+
+               gps2wgs84(gpsNmeaData.NmeaRmcData.Latitude, gpsNmeaData.NmeaRmcData.Longitude, &gpsLat, &gpsLon);
+
+               s_watch_location_data.gps_data.state = 'A';
+               s_watch_location_data.gps_data.latitude = gpsLat;
+               s_watch_location_data.gps_data.ns = gpsNmeaData.NmeaRmcData.NSIndicator;
+               s_watch_location_data.gps_data.longitude = gpsLon;
+               s_watch_location_data.gps_data.ew = gpsNmeaData.NmeaRmcData.WEIndicator;
+               s_watch_location_data.gps_data.speed = gpsNmeaData.NmeaRmcData.SpeedOverGround;
+               s_watch_location_data.gps_data.degree = gpsNmeaData.NmeaRmcData.CourseOverGround;
+               s_watch_location_data.gps_data.altitude = gpsNmeaData.NmeaGgaData.Altitude;
+               s_watch_location_data.gps_data.satellite_num = gpsNmeaData.NmeaGgaData.SatellitesUsed;
+
+               s_watch_location_gps_state = MMI_WATCH_LOCATION_STATE_SUCCESS;
+       }
+       /*
+       else if(pBuf.NmeaGgaData.status == 1) 
+       {
+        hal_gps_aidpos_save(pBuf.NmeaGgaData.latitude, pBuf.NmeaGgaData.NSIndicator,
+                            pBuf.NmeaGgaData.longitude, pBuf.NmeaGgaData.WEIndicator,
+                            pBuf.NmeaGgaData.Altitude);
+        gps2wgs84(pBuf.NmeaGgaData.latitude, pBuf.NmeaGgaData.longitude, &gpsLat, &gpsLon);
+    }
+       */
+}
 
 void mmi_watch_location_gps_finsh_cb(void *param)
 {
@@ -230,30 +270,6 @@ void mmi_watch_location_wifi_stop(void)
        wifi_scan_destroy();
 }
 
-static uint8_t HexStr2Int(char *str_hex, uint8_t str_hex_len)
-{
-       uint8_t int_value = 0;
-       uint8_t i = 0, t_value = 0;
-       char t_char = 0;
-       
-       if(NULL == str_hex || 0 == str_hex_len)
-               return 0;
-       
-       for(i = 0; i < str_hex_len; i++)
-       {
-               t_char = str_hex[i];
-               if('a' <= t_char && 'z' >= t_char)
-               {
-                       t_char = t_char - 'a' + 'A';
-               }
-
-               t_value = ('A' <= t_char) ? (t_char - 'A' + 10) : (t_char - '0');
-               int_value = int_value * 16 + t_value;
-       }
-
-       return int_value;
-}
-
 void mmi_watch_location_wifi_scan_cb(WIFI_SCAN_ID_DEF msgid, WifiInfoT *wifi_info)
 {
        //if(WIFI_SCAN_MSG_COMPLETE == msgid)
@@ -273,7 +289,7 @@ void mmi_watch_location_wifi_scan_cb(WIFI_SCAN_ID_DEF msgid, WifiInfoT *wifi_inf
                        uint8_t j = 0;
                        for(j = 0; j < APP_ADP_WIFI_MAC_LEN; j++)
                        {
-                               s_watch_location_data.wifi_data.item[i].mac[j] = HexStr2Int(wifi_info->WifiHotspot[i].MacAddr[j * 2], 2);
+                               s_watch_location_data.wifi_data.item[i].mac[j] = mmi_hex_string_to_number(wifi_info->WifiHotspot[i].MacAddr[j * 2], 2);
                        }
                }
        }
@@ -314,6 +330,8 @@ void mmi_watch_location_mission_stop(void)
 static void mmi_watch_location_mission_timer_cb(uint32_t para)
 {
        LOCATION_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: total=%d,count=%d\n", __FUNCTION__, __LINE__, MMI_WATCH_LOCATION_CHECK_TIMES_COUNT_MAX, s_watch_location_times_check_count);
+
+       //mmi_watch_location_gps_data_get();
        
        s_watch_location_times_check_count++;
        if(MMI_WATCH_LOCATION_CHECK_TIMES_COUNT_MAX <= s_watch_location_times_check_count)
@@ -338,7 +356,7 @@ static void mmi_watch_location_mission_timer_cb(uint32_t para)
                {
                        LOCATION_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                        
-                       uos_timer_start(s_watch_location_timer_id, MMI_WATCH_LOCATION_PROCESS_DURATION, 0, mmi_watch_location_mission_timer_cb, NULL);
+                       uos_timer_start(s_watch_location_timer_id, MS_TO_TICKS(MMI_WATCH_LOCATION_PROCESS_DURATION), 0, mmi_watch_location_mission_timer_cb, NULL);
                }
        }
 }
@@ -356,7 +374,7 @@ void mmi_watch_location_mission_start(void)
                s_watch_location_times_check_count = 0;
 
                uos_timer_create(&s_watch_location_timer_id);
-               uos_timer_start(s_watch_location_timer_id, MMI_WATCH_LOCATION_PROCESS_DURATION, 0, mmi_watch_location_mission_timer_cb, NULL);
+               uos_timer_start(s_watch_location_timer_id, MS_TO_TICKS(MMI_WATCH_LOCATION_PROCESS_DURATION), 0, mmi_watch_location_mission_timer_cb, NULL);
                
                mmi_watch_location_gps_start();
                mmi_watch_location_cell_start();
index dbde890..8bc52af 100644 (file)
@@ -85,11 +85,44 @@ void mmi_watch_protocol_data_nv_default(nv_watch_protocol_data_t * data)
 {
        PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: nv default\n", __FUNCTION__, __LINE__);
        
+       data->watch_host_name = MMI_PROTOCOL_IP_ADDRESS_DEFAULT;
+       data->watch_host_port = MMI_PROTOCOL_IP_PORT_DEFAULT;
        data->heartbeat_action_interval = MMI_PROTOCOL_HEARTBEAT_ACTION_INTERVAL;
        data->location_upload_interval = MMI_PROTOCOL_LOCATION_UPLOAD_INTERVAL;
        data->weather_update_interval = MMI_PROTOCOL_WEATHER_UPDATE_INTERVAL;
 }
 
+char * mmi_watch_host_name_get(void)
+{
+       return (s_watch_protocol_data.watch_host_name);
+}
+
+void mmi_watch_host_name_set(char * ip_address)
+{
+       if(NULL == ip_address)
+               return;
+       if(NV_WATCH_HOST_NAME_LEN_MAX <=  strlen(ip_address))
+               return;
+       
+       _lv_memset_00(s_watch_protocol_data.watch_host_name, NV_WATCH_HOST_NAME_LEN_MAX);
+       strcpy(s_watch_protocol_data.watch_host_name, ip_address);
+       mmi_watch_protocol_data_nv_write();
+}
+
+int mmi_watch_host_port_get(void)
+{
+       return (s_watch_protocol_data.watch_host_port);
+}
+
+void mmi_watch_host_port_set(int ip_port)
+{
+       if(0 <= ip_port)
+               return;
+       
+       s_watch_protocol_data.watch_host_port = ip_port;
+       mmi_watch_protocol_data_nv_write();
+}
+
 uint32_t mmi_protocol_watch_heartbeat_action_interval_get(void)
 {
        return (s_watch_protocol_data.heartbeat_action_interval);
@@ -149,7 +182,7 @@ static void mmi_protocol_watch_timed_mission_timer_cb(uint32_t para)
        mmi_health_measure_blood_timed_action(false, cur_time_stamp);
        mmi_health_measure_spo2_timed_action(false, cur_time_stamp);
 
-       uos_timer_start(s_watch_timed_mission_timer_id, 1000 * 20, 0, mmi_protocol_watch_timed_mission_timer_cb, NULL);
+       uos_timer_start(s_watch_timed_mission_timer_id, MS_TO_TICKS(1000 * 20), 0, mmi_protocol_watch_timed_mission_timer_cb, NULL);
 }
 
 void mmi_protocol_watch_timed_mission_action(void)
@@ -167,14 +200,14 @@ void mmi_protocol_watch_timed_mission_action(void)
                mmi_protocol_action_get_weather();
                s_watch_timed_weather_time_stamp = cur_time_stamp;
 
-               mmi_health_measure_timed_info_init();
+               mmi_health_measure_timed_info_nv_read();
                mmi_health_measure_heart_timed_action(true, cur_time_stamp);
                mmi_health_measure_temperature_timed_action(true, cur_time_stamp);
                mmi_health_measure_blood_timed_action(true, cur_time_stamp);
                mmi_health_measure_spo2_timed_action(true, cur_time_stamp);
                
                uos_timer_create(&s_watch_timed_mission_timer_id);
-               uos_timer_start(s_watch_timed_mission_timer_id, 1000 * 20, 0, mmi_protocol_watch_timed_mission_timer_cb, NULL);
+               uos_timer_start(s_watch_timed_mission_timer_id, MS_TO_TICKS(1000 * 20), 0, mmi_protocol_watch_timed_mission_timer_cb, NULL);
        }
 }
 
@@ -201,7 +234,7 @@ static void mmi_protocol_watch_heartbeat_timer_cb(uint32_t para)
                s_watch_heartbeat_action_time_stamp = cur_time_stamp;
        }
 
-       uos_timer_start(s_watch_heartbeat_action_timer_id, 1000 * 20, 0, mmi_protocol_watch_heartbeat_timer_cb, NULL);
+       uos_timer_start(s_watch_heartbeat_action_timer_id, MS_TO_TICKS(1000 * 20), 0, mmi_protocol_watch_heartbeat_timer_cb, NULL);
 }
 
 void mmi_protocol_watch_heartbeat_action(void)
@@ -210,14 +243,12 @@ void mmi_protocol_watch_heartbeat_action(void)
        {
                PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
                
-               mmi_watch_protocol_data_nv_read();
-               
                mmi_protocol_action_link();
                
                Hal_Rtc_Gettime_Count(&s_watch_heartbeat_action_time_stamp);
 
                uos_timer_create(&s_watch_heartbeat_action_timer_id);
-               uos_timer_start(s_watch_heartbeat_action_timer_id, 1000 * 20, 0, mmi_protocol_watch_heartbeat_timer_cb, NULL);
+               uos_timer_start(s_watch_heartbeat_action_timer_id, MS_TO_TICKS(1000 * 20), 0, mmi_protocol_watch_heartbeat_timer_cb, NULL);
        }
 }
 
index c4b1c14..ac0f4a6 100644 (file)
@@ -12,7 +12,7 @@ extern "C"
 #endif //__cplusplus
 
 
-//#define __MMI_PROTOCOL_DEBUG__
+#define __MMI_PROTOCOL_DEBUG__
 #ifdef __MMI_PROTOCOL_DEBUG__
 #define PROTOCOL_DEBUG_PRINTF(fmt, ...)        printf("[PROTOCOL]"fmt, ##__VA_ARGS__)
 #else
@@ -20,18 +20,6 @@ extern "C"
 #endif
 
 
-//Server address and port
-//#define HOST_NAME  "api.xcloudtech.com"
-//#define HOST_PORT (9000)
-
-
-#define MMI_PROTOCOL_HEARTBEAT_ACTION_INTERVAL (60 * 5) // s
-
-#define MMI_PROTOCOL_LOCATION_UPLOAD_INTERVAL  (60 * 20) // s
-
-#define MMI_PROTOCOL_WEATHER_UPDATE_INTERVAL   (60 * 60 * 6) // s
-
-
 
 bool mmi_watch_tcp_connect_state_get(void);
 
@@ -49,8 +37,18 @@ void mmi_protocol_send_space_free(int cmd);
 
 bool mmi_protocol_send_cmd_check(int cmd);
 
+void mmi_watch_protocol_data_nv_read(void);
+
 void mmi_watch_protocol_data_nv_default(nv_watch_protocol_data_t * data);
 
+char * mmi_watch_host_name_get(void);
+
+void mmi_watch_host_name_set(char * ip_address);
+
+int mmi_watch_host_port_get(void);
+
+void mmi_watch_host_port_set(int ip_port);
+
 void mmi_protocol_watch_timed_mission_action(void);
 
 void mmi_protocol_watch_heartbeat_stop(void);
index d45ef9a..804740f 100644 (file)
@@ -22,72 +22,6 @@ static unsigned char * mmi_protocol_fzd_action_string_get(MMI_PROTOCOL_FZD_ACTIO
 static bool mmi_protocol_fzd_content_parse(unsigned char * content_ptr, unsigned int content_length);
 
 
-static signed char mmi_char_to_upper(signed char c)
-{
-       if ( c >= 'a' && c <= 'z' )
-       {
-               c = c - 'a' + 'A';
-       }
-       
-       return c;
-}
-
-static void mmi_float_to_str(double float_num, uint8_t int_num, char * data_str)
-{
-       uint8_t i = 0;
-       uint32_t high_part = 0;
-       double low_part = 0.0;
-       char high_part_str[16] = {0}, low_part_str[16] = {0};
-
-       high_part = (int)float_num;
-       sprintf(high_part_str, "%d", high_part);
-       
-       low_part = float_num - high_part;
-       for(i = 0; i < int_num; i++)
-       {
-               uint32_t temp_high = 0;
-               
-               low_part = low_part * 10;
-               temp_high = (int)low_part;
-               low_part -= temp_high;
-               low_part_str[i] = '0' + temp_high;
-       }
-       low_part_str[i] = '\0';
-
-       sprintf(data_str, "%s.%s", high_part_str, low_part_str);
-}
-
-void km_str_toupper(signed char *str, signed int len)
-{
-    signed int i = 0;
-
-    for(i=0;i<len;i++)
-    {
-        str[i] = mmi_char_to_upper(str[i]);
-    }
-}
-
-signed int km_str_hex_string_to_number(signed char* hex_str, unsigned char hex_str_len)
-{
-    unsigned char i = 0, temp_num = 0;
-    signed char upper = 0;
-    signed int number = 0;
-
-    if(hex_str == NULL || hex_str_len == 0)
-    {
-        return 0;
-    }
-    
-    for(i=0;i<hex_str_len;i++)
-    {
-        upper = mmi_char_to_upper(hex_str[i]);
-        temp_num = (upper >= 'A')?upper - 'A' + 10:upper - '0';
-        number = number*16 + temp_num;
-    }
-       
-    return number;
-}
-
 char *km_strtok_r(char *s, const char *delim, char **last)
 {
     /*----------------------------------------------------------------*/
@@ -561,7 +495,7 @@ bool mmi_protocol_fzd_receive_data_parse(void)
        }
 
        //length
-       content_len = km_str_hex_string_to_number(content_len_ptr, MMI_PROTOCOL_FZD_CONTENT_LEN_LEN);
+       content_len = mmi_hex_string_to_number(content_len_ptr, MMI_PROTOCOL_FZD_CONTENT_LEN_LEN);
        PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: content_len=%d, recv_len=%d\n", __FUNCTION__, __LINE__, content_len, recv_len);
        if(MMI_PROTOCOL_FZD_RECEIVE_FIXED_CONTENT_LEN + content_len > recv_len)
        {
@@ -631,51 +565,55 @@ static bool mmi_protocol_fzd_respond_without_data(MMI_PROTOCOL_FZD_ACTION_ENUM a
 
 static unsigned char * mmi_protocol_fzd_action_string_get(MMI_PROTOCOL_FZD_ACTION_ENUM action)
 {
-    unsigned char* action_string[MMI_FZD_ACTION_MAX] =
-    {
-               "NONE",                 //MMI_FZD_ACTION_NONE
-               
-        "KA",                  //MMI_FZD_ACTION_LINK
-               "PING",                 //MMI_FZD_ACTION_BIND
-               "LGZONE",               //MMI_FZD_ACTION_GET_TIME
-               "UD",                   //MMI_FZD_ACTION_SEND_LOCATION
-               "CRUD",                 //MMI_FZD_ACTION_SEND_CUR_LOCATION
-               "CR",                   //MMI_FZD_SERVER_GET_CUR_LOCATION
-               "UPLOAD",               //MMI_FZD_SERVER_SET_UD_INTERVAL
-               "AL",                   //MMI_FZD_ACTION_ALERT
-               "FACTORY",              //MMI_FZD_SERVER_SET_FACTORY
-               "POWEROFF",             //MMI_FZD_SERVER_SET_POWEROFF
-               
-               "FIND",                 //MMI_FZD_SERVER_FIND_WATCH
-               "VERNO",                //MMI_FZD_SERVER_GET_VERSION
-        "PHL",         //MMI_FZD_SERVER_SET_PHONEBOOK
-               "CALL",                 //MMI_FZD_SERVER_SET_CALL
-               "REMIND",               //MMI_FZD_SERVER_SET_REMIND
-               
-        "hrtstart",            //MMI_FZD_SERVER_SET_HEART_INTERVAL
-               "heart",                //MMI_FZD_ACTION_SEND_HEART
-               "wdstart",              //MMI_FZD_SERVER_SET_TEMPERATURE_INTERVAL
-               "temp",                 //MMI_FZD_ACTION_SEND_TEMPERATURE
-        "bldstart",            //MMI_FZD_SERVER_SET_BLOOD_INTERVAL
-               "blood",                //MMI_FZD_ACTION_SEND_BLOOD
-               "oxstart",              //MMI_FZD_SERVER_SET_SPO2_INTERVAL
-               "oxygen",               //MMI_FZD_ACTION_SEND_SPO2
-               
-       #ifdef __MMI_WECHAT_SUPPORT__
-               "TK",                   //MMI_FZD_ACTION_TALK
-       #endif
+       struct
+       {
+               MMI_PROTOCOL_FZD_ACTION_ENUM action;
+               unsigned char* action_string;
+       }action_struct[MMI_FZD_ACTION_MAX] =
+           {
+                       {MMI_FZD_ACTION_NONE, "NONE"},          //MMI_FZD_ACTION_NONE
+                       
+               {MMI_FZD_ACTION_LINK, "KA"},                    //MMI_FZD_ACTION_LINK
+                       {MMI_FZD_ACTION_BIND, "PING"},          //
+                       {MMI_FZD_ACTION_GET_TIME, "LGZONE"},            //
+                       {MMI_FZD_ACTION_SEND_LOCATION, "UD"},                   //
+                       {MMI_FZD_ACTION_SEND_CUR_LOCATION, "CRUD"},             //
+                       {MMI_FZD_SERVER_GET_CUR_LOCATION, "CR"},                        //
+                       {MMI_FZD_SERVER_SET_UD_INTERVAL, "UPLOAD"},             //
+                       {MMI_FZD_ACTION_ALERT, "AL"},                   //
+                       {MMI_FZD_SERVER_SET_FACTORY, "FACTORY"},                //
+                       {MMI_FZD_SERVER_SET_POWEROFF, "POWEROFF"},              //
+                       
+                       {MMI_FZD_SERVER_FIND_WATCH, "FIND"},            //
+                       {MMI_FZD_SERVER_GET_VERSION, "VERNO"},          //
+               {MMI_FZD_SERVER_SET_PHONEBOOK, "PHL"},          //
+                       {MMI_FZD_SERVER_SET_CALL, "CALL"},                      //
+                       {MMI_FZD_SERVER_SET_REMIND, "REMIND"},          //
+                       
+               {MMI_FZD_SERVER_SET_HEART_INTERVAL, "hrtstart"},        //
+                       {MMI_FZD_ACTION_SEND_HEART, "heart"},           //
+                       {MMI_FZD_SERVER_SET_TEMPERATURE_INTERVAL, "wdstart"},           //
+                       {MMI_FZD_ACTION_SEND_TEMPERATURE, "temp"},                      //
+               {MMI_FZD_SERVER_SET_BLOOD_INTERVAL, "bldstart"},        //
+                       {MMI_FZD_ACTION_SEND_BLOOD, "blood"},           //
+                       {MMI_FZD_SERVER_SET_SPO2_INTERVAL, "oxstart"},          //
+                       {MMI_FZD_ACTION_SEND_SPO2, "oxygen"},           //
+                       
+               #ifdef __MMI_WECHAT_SUPPORT__
+                       {MMI_FZD_ACTION_TALK, "TK"},                    //
+               #endif
 
-               "WT",                   //MMI_FZD_ACTION_GET_WEATHER
-               "SOS",                  //MMI_FZD_SERVER_SET_SOS_NUMBER
-               "CENTER",               //MMI_FZD_SERVER_SET_CENTER_NUMBER
+                       {MMI_FZD_ACTION_GET_WEATHER, "WT"},                     //
+                       {MMI_FZD_SERVER_SET_SOS_NUMBER, "SOS"},                 //
+                       {MMI_FZD_SERVER_SET_CENTER_NUMBER, "CENTER"},           //
 
 
-       
-       /*******add before this line*******/
-               "", // MMI_FZD_ACTION_MAX
-    };
+               
+               /*******add before this line*******/
+                       {MMI_FZD_ACTION_MAX, ""}, // MMI_FZD_ACTION_MAX
+           };
 
-    return action_string[action];
+    return action_struct[action].action_string;
 }
 
 static bool mmi_protocol_fzd_content_parse(unsigned char * content_ptr, unsigned int content_length)
@@ -894,7 +832,7 @@ bool mmi_protocol_fzd_parse_ACTION_BIND(unsigned char * next_buff, unsigned int
                if(0 == value)
                {
                        mmi_protocol_watch_bind_state_set(false);
-                       uos_sleep(50);
+                       uos_sleep(10);
                        mmi_watch_reset();
                }
        }
@@ -999,7 +937,7 @@ bool mmi_protocol_fzd_parse_SERVER_SET_FACTORY(unsigned char * next_buff, unsign
        
        result = true;
        mmi_protocol_fzd_respond_without_data(action);
-       uos_sleep(30);
+       uos_sleep(10);
        mmi_watch_reset();
 
        return result;
@@ -1012,7 +950,7 @@ bool mmi_protocol_fzd_parse_SERVER_SET_POWEROFF(unsigned char * next_buff, unsig
        
        result = true;
        mmi_protocol_fzd_respond_without_data(action);
-       uos_sleep(30);
+       uos_sleep(10);
        app_adaptor_wake_up_short_time();
        mmi_watch_power_off();
 
@@ -1095,7 +1033,7 @@ bool mmi_protocol_fzd_parse_SERVER_SET_PHONEBOOK(unsigned char * next_buff, unsi
 
                        for(j = 0; j*4 < strlen(temp_ptr); j++)
                        {
-                               server_set_contact[i].contact_name[j] = km_str_hex_string_to_number(temp_ptr + j*4, 4);
+                               server_set_contact[i].contact_name[j] = mmi_hex_string_to_number(temp_ptr + j*4, 4);
                        }
                }
                else
@@ -1128,7 +1066,7 @@ bool mmi_protocol_fzd_parse_SERVER_SET_CALL(unsigned char * next_buff, unsigned
        
        result = true;
        mmi_protocol_fzd_respond_without_data(action);
-       uos_sleep(30);
+       uos_sleep(10);
 
     char * number = (char *)lv_mem_alloc(next_buff_len + 1);
        if(NULL == number)
@@ -1159,37 +1097,46 @@ bool mmi_protocol_fzd_parse_SERVER_SET_REMIND(unsigned char * next_buff, unsigne
        mmi_protocol_fzd_respond_without_data(action);
 
        app_adaptor_alarm_t server_set_alarm[NV_ALARM_MAX_ALARM_NUM] = {0};
-       char * temp_ptr1 = NULL, temp_ptr2 = NULL;
+       char * group_str = NULL;
+       char * group_last = NULL;
+       char * temp_ptr = NULL;
+       char * last = NULL;
        uint8_t i = 0;
 
-       temp_ptr1 = km_strtok_r(NULL, ",", &next_buff);
-       while(NULL != temp_ptr1)
+       //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: next_buff=%s\n", __FUNCTION__, __LINE__, next_buff);
+       group_str = km_strtok_r(next_buff, ",", &group_last);
+       //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: temp_ptr1=%s,next_buff=%s\n", __FUNCTION__, __LINE__, group_str, next_buff);
+       while(NULL != group_str)
        {
                server_set_alarm[i].valid = 1;
                
-               temp_ptr2 = km_strtok_r(NULL, ":", &temp_ptr1);
-               server_set_alarm[i].hour = atoi(temp_ptr2);
+               temp_ptr = km_strtok_r(group_str, ":", &last);
+               server_set_alarm[i].hour = atoi(temp_ptr);
+               //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: temp_ptr=%s,temp_ptr1=%s\n", __FUNCTION__, __LINE__, temp_ptr, last);
                
-               temp_ptr2 = km_strtok_r(NULL, "-", &temp_ptr1);
-               server_set_alarm[i].min = atoi(temp_ptr2);
+               temp_ptr = km_strtok_r(NULL, "-", &last);
+               server_set_alarm[i].min = atoi(temp_ptr);
+               //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: temp_ptr=%s,temp_ptr1=%s\n", __FUNCTION__, __LINE__, temp_ptr, last);
 
-               temp_ptr2 = km_strtok_r(NULL, "-", &temp_ptr1);
-               server_set_alarm[i].on_off = atoi(temp_ptr2);
+               temp_ptr = km_strtok_r(NULL, "-", &last);
+               server_set_alarm[i].on_off = atoi(temp_ptr);
+               //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: temp_ptr=%s,temp_ptr1=%s\n", __FUNCTION__, __LINE__, temp_ptr, last);
                
-               temp_ptr2 = km_strtok_r(NULL, "-", &temp_ptr1);
-               if(1 == atoi(temp_ptr2))
+               temp_ptr = km_strtok_r(NULL, "-", &last);
+               //PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: temp_ptr=%s,temp_ptr1=%s\n", __FUNCTION__, __LINE__, temp_ptr, last);
+               if(1 == atoi(temp_ptr))
                {
                        server_set_alarm[i].repeat_bitmap = 0;
                }
                else
                {
                        server_set_alarm[i].repeat_bitmap = 0xff;
-                       if(NULL != temp_ptr1)
+                       if(NULL != last)
                        {
                                uint8_t j = 0;
                                for(j = 0; j < 7; j++)
                                {
-                                       server_set_alarm[i].repeat_bitmap &= ((('0' == *(temp_ptr1 + j)) ? 0 : 1) << j);
+                                       server_set_alarm[i].repeat_bitmap &= ((('0' == *(last + j)) ? 0 : 1) << j);
                                }
                        }
                }
@@ -1200,7 +1147,7 @@ bool mmi_protocol_fzd_parse_SERVER_SET_REMIND(unsigned char * next_buff, unsigne
                        break;
                }
                
-               temp_ptr1 = km_strtok_r(NULL, ",", &next_buff);
+               group_str = km_strtok_r(NULL, ",", &group_last);
        }
 
        alarm_set_alarm_by_ui(&server_set_alarm, i);
@@ -1839,7 +1786,7 @@ bool mmi_protocol_fzd_parse_ACTION_GET_WEATHER(unsigned char * next_buff, unsign
        //city
     for(i = 0; i*4 < strlen(next_buff); i++)
        {
-               city_name[i] = km_str_hex_string_to_number(next_buff + i*4, 4);
+               city_name[i] = mmi_hex_string_to_number(next_buff + i*4, 4);
     }
        weather_info.city = city_name;
 
index d82caaa..71cb598 100644 (file)
@@ -131,9 +131,6 @@ typedef enum
 //strtok
 char *km_strtok_r(char *s, const char *delim, char **last);
 
-//convert hex string to number
-signed int km_str_hex_string_to_number(signed char* hex_str, unsigned char hex_str_len);
-
 void mmi_protocol_fzd_receive_data_process(char * recv_str, int recv_len);
 
 void * mmi_protocol_fzd_send_space_ptr_get(MMI_PROTOCOL_FZD_ACTION_ENUM action);
diff --git a/2.sdk/gui/lv_watch/mmi_sundry/mmi_common.h b/2.sdk/gui/lv_watch/mmi_sundry/mmi_common.h
new file mode 100644 (file)
index 0000000..f62ab94
--- /dev/null
@@ -0,0 +1,37 @@
+
+
+
+#ifdef __MMI_ZHSX_SUPPORT__
+
+#ifndef __MMI_COMMON_H__
+#define __MMI_COMMON_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif //__cplusplus
+
+
+//#include "lv_watch.h"
+
+
+void mmi_float_to_str(double float_num, uint8_t int_num, char * data_str);
+
+signed char mmi_char_to_upper(signed char c);
+
+void mmi_str_to_upper(signed char *str, signed int len);
+
+signed int mmi_hex_string_to_number(signed char* hex_str, unsigned char hex_str_len);
+
+
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif //__cplusplus
+
+#endif
+
+#endif
+
+
index 9c2ab7b..50803f3 100644 (file)
@@ -1,10 +1,11 @@
 
 
 
-#include "lv_watch.h"
-
 #ifdef __MMI_ZHSX_SUPPORT__
 
+#include "mmi_sundry.h"
+
+
 static TIMER_ID s_watch_search_timer_id = NULL;
 
 
index fddc234..4ea21a8 100644 (file)
@@ -155,7 +155,11 @@ void mmi_modem_tcp_connect(void *param)
                tcp_manage_instance.connecting_flag = true;
        }
 
+#ifdef __MMI_ZHSX_SUPPORT__
+       res = ValNetworkSocketInit_with_callback(NULL, mmi_watch_host_name_get, mmi_watch_host_port_get, (socket_callback)manage_socket_callback);
+#else
        res = ValNetworkSocketInit_with_callback(NULL, HOST_NAME, HOST_PORT, (socket_callback)manage_socket_callback);
+#endif
        printf("socket init connect res = %d\n",res);
 go_reconnect : 
        if(res < 0)
index 02b20b2..040240b 100644 (file)
@@ -29,6 +29,8 @@ void cmdmsg_handler_login_impl(void *param)
        printf("fun = %s, line = %d\n",__FUNCTION__,__LINE__);
        
 #ifdef __MMI_ZHSX_SUPPORT__
+       printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__);
+
        mmi_protocol_watch_heartbeat_action();
 
 #else
@@ -42,6 +44,8 @@ void cmdmsg_handler_disconnect_impl(void *param)
        printf("fun = %s, line = %d\n",__FUNCTION__,__LINE__);
        
 #ifdef __MMI_ZHSX_SUPPORT__
+       printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__);
+
        mmi_protocol_watch_bind_state_set(false);
 
        mmi_protocol_watch_heartbeat_stop();
@@ -84,27 +88,33 @@ void send_tcp_cmdmsg_handler_impl(void *param)
 
 #ifdef __MMI_ZHSX_SUPPORT__
        
-       send_cmdmsg_t *cmdmsg = (send_cmdmsg_t *)param;
-       if(NULL == cmdmsg->cmd_param || 0 == cmdmsg->cmd_type)
+       int cmd_type = ((send_cmdmsg_t * )param)->cmd_type;
+
+       if(false == mmi_protocol_send_cmd_check(cmd_type))
        {
-               printf("fun = %s, line = %d\n",__FUNCTION__,__LINE__);
+               printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__);
+               mmi_protocol_send_space_free(cmd_type);
                return;
        }
 
        if(!watch_modem_sim_present_check_req())
        {
-               printf("fun = %s, line = %d\n",__FUNCTION__,__LINE__);
+               printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__);
+               mmi_protocol_send_space_free(cmd_type);
                return;
        }
 
-       char *send_cmdmsg_buff = Hal_Mem_Alloc(SEND_BUFF_MAX_LEN);
-       if(NULL != send_cmdmsg_buff)
-       {
-               memset(send_cmdmsg_buff, 0x00, SEND_BUFF_MAX_LEN);
-               memcpy(send_cmdmsg_buff, cmdmsg->cmd_param, cmdmsg->cmd_type);
-               mmi_modem_tcp_send(send_cmdmsg_buff, strlen(send_cmdmsg_buff));
-               Hal_Mem_Free(send_cmdmsg_buff);
-       }
+       unsigned char * send_cmdmsg_buff = (unsigned char *)mmi_protocol_send_space_ptr_get(cmd_type);
+       int send_cmdmsg_size = mmi_protocol_send_space_size_get(cmd_type);
+
+       printf("[@CHENG_DEBUG][%s][%d]: action=%d,len=%d\n", __FUNCTION__, __LINE__, cmd_type, send_cmdmsg_size);
+       printf("[@CHENG_DEBUG][%d]: str=%s\n", __LINE__, send_cmdmsg_buff);
+       printf("[@CHENG_DEBUG][%d]: str=%s\n", __LINE__, send_cmdmsg_buff + 33);
+       printf("[@CHENG_DEBUG][%d]: str=%s\n", __LINE__, send_cmdmsg_buff + 59);
+       
+       mmi_modem_tcp_send(send_cmdmsg_buff, send_cmdmsg_size);
+       
+       mmi_protocol_send_space_free(cmd_type);
 
 #else
 
@@ -172,13 +182,14 @@ void read_tcp_cmdmsg_handler_impl(void *msg)
        char *recv_str = (char *)Hal_Mem_Alloc(PKG_LEN);
        if(NULL == recv_str)
        {
-               printf("fun = %s, line = %d\n",__FUNCTION__,__LINE__);
+               printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__);
                return;
        }
        memset(recv_str , 0x00, PKG_LEN);
        recv_ret = mmi_modem_tcp_read(recv_str, PKG_LEN, &recv_len);
        
-       printf("[@CHENG_DEBUG][%s][%d]: ret=%d,len=%d,ptr=0x%x,str=%s\n", __FUNCTION__, __LINE__, recv_ret, recv_len, recv_str, recv_str);
+       printf("[@CHENG_DEBUG][%s][%d]: ret=%d,len=%d,ptr=0x%x\n", __FUNCTION__, __LINE__, recv_ret, recv_len, recv_str);
+       printf("[@CHENG_DEBUG][%d]: str=%s\n", __LINE__, recv_str);
 
        if(0 <= recv_ret)
        {
index aa6ab60..cb82f59 100644 (file)
@@ -22,14 +22,15 @@ void tcp_connect_cb(int t)
 */
 void mmi_modem_tcp_task_init(void)
 {
-       mmi_modem_tcp_task_interface_init();
-
 #ifdef __MMI_ZHSX_SUPPORT__
+       mmi_watch_protocol_data_nv_read();
+       mmi_modem_tcp_task_interface_init();
        printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__);
-
        launcher_tcp_connect(NULL);
        
 #else
+
+       mmi_modem_tcp_task_interface_init();
        launcher_tcp_connect(tcp_connect_cb);
        //while(1)
     // {
diff --git a/2.sdk/gui/lv_watch/resource/audio/audio_wechat_receive.mid b/2.sdk/gui/lv_watch/resource/audio/audio_wechat_receive.mid
new file mode 100644 (file)
index 0000000..e68d119
Binary files /dev/null and b/2.sdk/gui/lv_watch/resource/audio/audio_wechat_receive.mid differ
diff --git a/2.sdk/gui/lv_watch/resource/audio/audio_wechat_receive.mp3 b/2.sdk/gui/lv_watch/resource/audio/audio_wechat_receive.mp3
new file mode 100644 (file)
index 0000000..2d51bb8
Binary files /dev/null and b/2.sdk/gui/lv_watch/resource/audio/audio_wechat_receive.mp3 differ
diff --git a/2.sdk/gui/lv_watch/resource/png/call/ICON_CALL_CALLING.png b/2.sdk/gui/lv_watch/resource/png/call/ICON_CALL_CALLING.png
new file mode 100644 (file)
index 0000000..2fbf579
Binary files /dev/null and b/2.sdk/gui/lv_watch/resource/png/call/ICON_CALL_CALLING.png differ
diff --git a/2.sdk/gui/lv_watch/resource/png/call/ICON_CALL_INCOMING.png b/2.sdk/gui/lv_watch/resource/png/call/ICON_CALL_INCOMING.png
new file mode 100644 (file)
index 0000000..670638f
Binary files /dev/null and b/2.sdk/gui/lv_watch/resource/png/call/ICON_CALL_INCOMING.png differ
diff --git a/2.sdk/gui/lv_watch/resource/png/call/ICON_CALL_OUTGOING.png b/2.sdk/gui/lv_watch/resource/png/call/ICON_CALL_OUTGOING.png
new file mode 100644 (file)
index 0000000..bcfedb2
Binary files /dev/null and b/2.sdk/gui/lv_watch/resource/png/call/ICON_CALL_OUTGOING.png differ
diff --git a/2.sdk/gui/lv_watch/resource/png/call/去电.png b/2.sdk/gui/lv_watch/resource/png/call/去电.png
new file mode 100644 (file)
index 0000000..aaf220c
Binary files /dev/null and "b/2.sdk/gui/lv_watch/resource/png/call/\345\216\273\347\224\265.png" differ
diff --git a/2.sdk/gui/lv_watch/resource/png/call/接听.png b/2.sdk/gui/lv_watch/resource/png/call/接听.png
new file mode 100644 (file)
index 0000000..2cf79d7
Binary files /dev/null and "b/2.sdk/gui/lv_watch/resource/png/call/\346\216\245\345\220\254.png" differ
diff --git a/2.sdk/gui/lv_watch/resource/png/call/来电.png b/2.sdk/gui/lv_watch/resource/png/call/来电.png
new file mode 100644 (file)
index 0000000..24c429d
Binary files /dev/null and "b/2.sdk/gui/lv_watch/resource/png/call/\346\235\245\347\224\265.png" differ
index 38dd8d8..d77d3ea 100644 (file)
 
 #define __MMI_ZHSX_SUPPORT_FZD__
 
+#define __MMI_ZHSX_SUPPORT_SMS__
+
 
 #if 1 //def MMI_WECHAT_SUPPORT
 #define __MMI_WECHAT_SUPPORT__