gengxin
author@CHENG <2393524978@qq.com>
Wed, 6 Mar 2024 03:13:18 +0000 (11:13 +0800)
committer@CHENG <2393524978@qq.com>
Wed, 6 Mar 2024 03:13:18 +0000 (11:13 +0800)
13 files changed:
2.sdk/project/Z5_WL_K7/product/craneg_modem/config/watch/lv_watch_conf_CUSTOM.h
2.sdk/sdk/gui/lv_watch/app_adaptor/app_adaptor_timing_control.c
2.sdk/sdk/gui/lv_watch/app_adaptor/app_adaptor_timing_control.h
2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.c
2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.h
2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/bodyinfo.c
2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/pedometer.c
2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/pedometer.h
2.sdk/sdk/gui/lv_watch/lv_watch.c
2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_api.c
2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_api.h
2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd.c
2.sdk/sdk/gui/lv_watch/modem/mmi_modem_tcp/mmi_modem_tcp_msg_handler_impl.c

index 585f2d1..dc888c5 100644 (file)
 #define __MMI_HEALTH_MEASURE_TEMPERATURE_SUPPORT__
 
 //#define __MMI_APP_QRCODE_MENU_SUPPORT__
+#define __MMI_APP_QRCODE_AND_DEVICE_QRCODE_IN_ONE_SUPPORT__
 
 #define __MMI_ZHSX_SUPPORT_NO_SIM_POWER_OFF__
 
 
 #if 0 != USE_LV_WATCH_WEATHER
 #define __MMI_WEATHER_MENU_SUPPORT__
+//#define __MMI_WEATHER_MENU_NOT_DISPLAY_TEMPERATURE_RANGE__
 #endif
 
+#define __MMI_PEDOMETER_STEP_AND_GOAL_STYLE__
 
 
 
index d774154..beed8f5 100644 (file)
 
 static void * s_timing_control_timer = NULL;
 static int8_t s_timing_control_last_min = -1;
-
-#define TIMING_FIRST_TIMER_INTERVAL    (3 * 1000) // ms
-#define TIMING_TIMER_INTERVAL  (20 * 1000) // ms
-
-#define MMI_GUI_TIMING_TASK_PRIORITY 219
-#define MMI_GUI_TIMING_TASK_STACK_SIZE (1 * 1024)
-#define MMI_GUI_TIMING_MSG_QUEUE_SIZE (16)
+static uint32_t s_timing_control_timer_counter = 0;
 
 TASK_HANDLE * s_gui_timing_task_id = NULL;
 
-static void mmi_gui_timing_task_20_second_mission(void * time_param);
+static void mmi_gui_timing_task_3_second_mission(void * time_param);
+static void mmi_gui_timing_task_15_second_mission(void * time_param);
 static void mmi_gui_timing_task_1_minute_mission(void * time_param);
 
 
@@ -33,7 +28,7 @@ void mmi_gui_timing_task_msg_send(MMI_GUI_TIMING_MSG_ID_E msg_id, void * msg_par
 {
        if(NULL == s_gui_timing_task_id)
        {
-               TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: task not exist\n",__FUNCTION__,__LINE__);
+               TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: task not exist\n", __FUNCTION__, __LINE__);
                if(NULL != msg_param)
                        Hal_Mem_Free(msg_param);
                
@@ -42,18 +37,18 @@ void mmi_gui_timing_task_msg_send(MMI_GUI_TIMING_MSG_ID_E msg_id, void * msg_par
        
        if((MMI_GUI_TIMING_MSG_QUEUE_SIZE - 1) < Hal_Get_Message_Count(s_gui_timing_task_id))
        {
-               TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg queue full\n",__FUNCTION__,__LINE__);
+               TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg queue full\n", __FUNCTION__, __LINE__);
                if(NULL != msg_param)
                        Hal_Mem_Free(msg_param);
                
                return;
        }
 
-       TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n",__FUNCTION__,__LINE__, msg_id);
+       TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n", __FUNCTION__, __LINE__, msg_id);
     mmi_gui_timing_task_msg_t * msg = Hal_Mem_Alloc(sizeof(mmi_gui_timing_task_msg_t));
        if(NULL == msg)
        {
-               TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc fail\n",__FUNCTION__,__LINE__);
+               TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc fail\n", __FUNCTION__, __LINE__);
                if(NULL != msg_param)
                        Hal_Mem_Free(msg_param);
                
@@ -71,11 +66,15 @@ static void mmi_gui_timing_task_handle(void * param)
        MMI_GUI_TIMING_MSG_ID_E msg_id = msg->msg_id;
        void * msg_param = msg->msg_param;
 
-       TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n",__FUNCTION__,__LINE__, msg_id);
+       TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n", __FUNCTION__, __LINE__, msg_id);
     switch(msg_id)
        {
-        case MMI_GUI_TIMING_MSG_20_SECOND:
-                       mmi_gui_timing_task_20_second_mission(msg_param);
+               case MMI_GUI_TIMING_MSG_3_SECOND:
+                       mmi_gui_timing_task_3_second_mission(msg_param);
+                       break;
+                       
+        case MMI_GUI_TIMING_MSG_15_SECOND:
+                       mmi_gui_timing_task_15_second_mission(msg_param);
             break;
 
         case MMI_GUI_TIMING_MSG_1_MINUTE:
@@ -114,14 +113,60 @@ void mmi_gui_timing_task_create(void)
                                                                                        MMI_GUI_TIMING_TASK_PRIORITY,
                                                                                        "mmi_gui_timing_task");
 
-       TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: task_id=0x%x\n",__FUNCTION__,__LINE__, s_gui_timing_task_id);
+       TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: task_id=0x%x\n", __FUNCTION__, __LINE__, s_gui_timing_task_id);
+}
+
+static void mmi_gui_timing_task_3_second_mission(void * time_param)
+{
+    hal_rtc_t cur_time = {0};
+       
+       if(NULL != time_param)
+       {
+               Hal_Mem_Copy(&cur_time, time_param, sizeof(hal_rtc_t));
+       }
+       else
+       {
+               Hal_Rtc_Gettime(&cur_time);
+       }
+
+       TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+       
+       // wear
+       static bool s_init_wear_flag = true;
+       bool t_wear_flag = true;
+
+#ifdef __MMI_ZHSX_SUPPORT_HEALTH_SENSOR__
+       t_wear_flag = mmi_health_measure_wear_state_get();
+#endif
+       TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: wear_state=%d,now_state=%d\n", __FUNCTION__, __LINE__, s_init_wear_flag, t_wear_flag);
+       if(s_init_wear_flag != t_wear_flag)
+       {
+               s_init_wear_flag = t_wear_flag;
+               if(false == s_init_wear_flag)
+               {
+                       mmi_protocol_action_take_off();
+               }
+               else
+               {
+                       mmi_protocol_action_take_on();
+               }
+       }
+
+
 }
 
-static void mmi_gui_timing_task_20_second_mission(void * time_param)
+static void mmi_gui_timing_task_15_second_mission(void * time_param)
 {
     hal_rtc_t cur_time = {0};
        
-       Hal_Mem_Copy(&cur_time, time_param, sizeof(hal_rtc_t));
+       if(NULL != time_param)
+       {
+               Hal_Mem_Copy(&cur_time, time_param, sizeof(hal_rtc_t));
+       }
+       else
+       {
+               Hal_Rtc_Gettime(&cur_time);
+       }
 
        TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
        
@@ -137,7 +182,14 @@ static void mmi_gui_timing_task_1_minute_mission(void * time_param)
 {
     hal_rtc_t cur_time = {0};
        
-       Hal_Mem_Copy(&cur_time, time_param, sizeof(hal_rtc_t));
+       if(NULL != time_param)
+       {
+               Hal_Mem_Copy(&cur_time, time_param, sizeof(hal_rtc_t));
+       }
+       else
+       {
+               Hal_Rtc_Gettime(&cur_time);
+       }
 
        TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
 
@@ -166,13 +218,20 @@ static void timing_timer_callback(uint32_t param)
        TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %02d:%02d:%02d\n", __FUNCTION__, __LINE__, cur_time.tm_hour, cur_time.tm_min, cur_time.tm_sec);
 
        uos_timer_stop(s_timing_control_timer);
-       uos_timer_start(s_timing_control_timer, MS_TO_TICKS(TIMING_TIMER_INTERVAL), 0, timing_timer_callback, NULL);
+       uos_timer_start(s_timing_control_timer, MS_TO_TICKS(MMI_GUI_TIMING_TIMER_INTERVAL), 0, timing_timer_callback, NULL);
+
+       s_timing_control_timer_counter++;
 
-    hal_rtc_t * p_cur_time_20 = Hal_Mem_Alloc(sizeof(hal_rtc_t));
-       Hal_Mem_Copy(p_cur_time_20, &cur_time, sizeof(hal_rtc_t));
-       mmi_gui_timing_task_msg_send(MMI_GUI_TIMING_MSG_20_SECOND, p_cur_time_20);
+       mmi_gui_timing_task_msg_send(MMI_GUI_TIMING_MSG_3_SECOND, NULL); // 3 seconds
+       
+       if(0 == s_timing_control_timer_counter % 5) // 15 seconds
+       {
+               hal_rtc_t * p_cur_time_15 = Hal_Mem_Alloc(sizeof(hal_rtc_t));
+               Hal_Mem_Copy(p_cur_time_15, &cur_time, sizeof(hal_rtc_t));
+               mmi_gui_timing_task_msg_send(MMI_GUI_TIMING_MSG_15_SECOND, p_cur_time_15);
+       }       
 
-       if(cur_time.tm_min != s_timing_control_last_min)
+       if(cur_time.tm_min != s_timing_control_last_min) // minute changed
        {
                TIMING_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, s_timing_control_last_min);
                
@@ -188,7 +247,7 @@ void app_adaptor_timing_control_init(void)
        mmi_gui_timing_task_create();
 
     uos_timer_create(&s_timing_control_timer);
-    uos_timer_start(s_timing_control_timer, MS_TO_TICKS(TIMING_FIRST_TIMER_INTERVAL), 0, timing_timer_callback, NULL);
+    uos_timer_start(s_timing_control_timer, MS_TO_TICKS(MMI_GUI_TIMING_TIMER_INTERVAL), 0, timing_timer_callback, NULL);
 }
 
 #else
index f9352a3..541e712 100644 (file)
@@ -24,12 +24,19 @@ extern "C" {
 #endif
 
 
+#define MMI_GUI_TIMING_TIMER_INTERVAL  (3 * 1000) // ms
+
+#define MMI_GUI_TIMING_TASK_PRIORITY 219
+#define MMI_GUI_TIMING_TASK_STACK_SIZE (1 * 1024)
+#define MMI_GUI_TIMING_MSG_QUEUE_SIZE (16)
+
+
 typedef enum
 {
        MMI_GUI_TIMING_MSG_ID_START,
 
-    MMI_GUI_TIMING_MSG_5_SECOND,
-       MMI_GUI_TIMING_MSG_20_SECOND,
+    MMI_GUI_TIMING_MSG_3_SECOND,
+       MMI_GUI_TIMING_MSG_15_SECOND,
     MMI_GUI_TIMING_MSG_1_MINUTE,
        MMI_GUI_TIMING_MSG_2_MINUTE,
 
index c80420b..fa90d50 100644 (file)
@@ -376,7 +376,7 @@ bool mmi_health_measure_heart_timed_action(bool direct_trigger, uint32_t cur_tim
                if(true == direct_trigger 
                        || s_health_measure_timed_data.heart_timed_interval <= (cur_time_stamp - s_health_measure_heart_timed_time_stamp))
                {
-                       HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+                       HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: cur_stamp=%d,timed_stamp=%d\n", __FUNCTION__, __LINE__, cur_time_stamp, s_health_measure_heart_timed_time_stamp);
                        
                        mmi_health_measure_timed_list_node_add(MMI_HEALTH_MEASURE_HEART);
                        if(true == mmi_health_measure_timed_list_trigger(MMI_HEALTH_MEASURE_HEART))
@@ -398,7 +398,7 @@ bool mmi_health_measure_temperature_timed_action(bool direct_trigger, uint32_t c
                if(true == direct_trigger 
                        || s_health_measure_timed_data.temperature_timed_interval <= (cur_time_stamp - s_health_measure_temperature_timed_time_stamp))
                {
-                       HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+                       HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: cur_stamp=%d,timed_stamp=%d\n", __FUNCTION__, __LINE__, cur_time_stamp, s_health_measure_temperature_timed_time_stamp);
                        
                        mmi_health_measure_timed_list_node_add(MMI_HEALTH_MEASURE_TEMPERATURE);
                        if(true == mmi_health_measure_timed_list_trigger(MMI_HEALTH_MEASURE_TEMPERATURE))
@@ -454,6 +454,26 @@ bool mmi_health_measure_spo2_timed_action(bool direct_trigger, uint32_t cur_time
        return false;
 }
 
+bool mmi_health_measure_timed_mission_action(uint32_t cur_time_stamp)
+{
+       mmi_health_measure_heart_timed_action(false, cur_time_stamp);
+       mmi_health_measure_temperature_timed_action(false, cur_time_stamp);
+       mmi_health_measure_blood_timed_action(false, cur_time_stamp);
+       mmi_health_measure_spo2_timed_action(false, cur_time_stamp);
+       
+       return true;
+}
+
+bool mmi_health_measure_first_mission_action(uint32_t cur_time_stamp)
+{
+       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);
+       
+       return true;
+}
+
 void mmi_health_measure_server_set_save(MMI_HEALTH_MEASURE_TYPE_E measure_type, int value_interval)
 {
        uint8_t flag = (0 == value_interval) ? 0 : 1;
@@ -1064,6 +1084,12 @@ static void mmi_health_measure_task_entry(void * para)
 
 void mmi_health_measure_task_init(void)
 {
+       if(NULL != s_health_measure_task_id)
+       {
+               HEALTH_MEASURE_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: task_id=0x%x\n",__FUNCTION__,__LINE__, s_health_measure_task_id);
+               return;
+       }
+
        s_health_measure_task_id = uos_create_task(mmi_health_measure_task_entry,
                                                                                                NULL,
                                                                                                MMI_HEALTH_MEASURE_MSG_QUEUE_SIZE,
index 791ec0d..c00b523 100644 (file)
@@ -102,10 +102,8 @@ void mmi_health_measure_ui_measure_start(MMI_HEALTH_MEASURE_TYPE_E measure_type)
 
 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);
-bool mmi_health_measure_spo2_timed_action(bool direct_trigger, uint32_t cur_time_stamp);
+bool mmi_health_measure_timed_mission_action(uint32_t cur_time_stamp);
+bool mmi_health_measure_first_mission_action(uint32_t cur_time_stamp);
 
 
 
index db95b05..b7a1f6e 100644 (file)
@@ -30,7 +30,7 @@ static void ok_btn_event_cb(lv_obj_t * obj, lv_event_t e);
 static void cancel_btn_event_cb(lv_obj_t * obj, lv_event_t e);
 static lv_obj_t * setting_opt_create(lv_obj_t * par);
 static lv_obj_t * roller_create(lv_obj_t * par, uint8_t type, uint16_t sel_value);
-static void bodyinfo_set(nv_watch_pedometer_setting_t * pedo_set);
+//static void bodyinfo_set(nv_watch_pedometer_setting_t * pedo_set);
 static lv_obj_t  * bodyinfo_setting_create(lv_obj_t * activity_obj);
 static void bodyinfo_prepare_destory(lv_obj_t * activity_obj);
 static void get_optstr_from_num(uint16_t num, char * stropt, uint8_t type);
@@ -160,7 +160,8 @@ void bodyinfo_init(nv_watch_pedometer_setting_t * pedo_set)
  *   STATIC FUNCTIONS
  **********************/
 
-static void bodyinfo_set(nv_watch_pedometer_setting_t * pedo_set)
+//static void bodyinfo_set(nv_watch_pedometer_setting_t * pedo_set)
+void bodyinfo_set(nv_watch_pedometer_setting_t * pedo_set)
 {
     //write to nv
     UI_NV_Write_Req(NV_SECTION_UI_PEDOMETER, NV_PEDOMETER_SETTING_OFFSET, NV_PEDOMETER_SETTING_LEN, (uint8_t *)pedo_set);
index 9c93f5b..633414c 100644 (file)
@@ -141,6 +141,13 @@ static void mmi_step_goal_set_btn_event_cb(lv_obj_t * btn, lv_event_t e)
     }
        else if(4 == index)
     {
+       #if USE_LV_WATCH_BODYINFO != 0
+               nv_watch_pedometer_setting_t pedo;
+               memset(&pedo, 0, sizeof(nv_watch_pedometer_setting_t));
+               bodyinfo_init(&pedo);
+               pedo.goal = s_step_goal_temp_value;
+               bodyinfo_set(&pedo);
+       #endif
                pedometer_set_goalsteps(s_step_goal_temp_value);
                pedometer_update_screen();
        
index fb415af..969705f 100644 (file)
@@ -61,6 +61,7 @@ void mmi_watch_pedometer_data_nv_default(nv_watch_pedometer_t * pedometer);
 lv_obj_t * record_create(lv_obj_t * tileview, uint16_t id);
 #endif
 void bodyinfo_init(nv_watch_pedometer_setting_t* pedo_set);
+void bodyinfo_set(nv_watch_pedometer_setting_t * pedo_set);
 uint16_t pedometer_get_goalsteps(void);
 uint16_t pedometer_get_steps(void);
 void pedometer_update_goal(uint16_t goal);
index b086ae4..92f8873 100644 (file)
@@ -98,6 +98,11 @@ static void mmi_data_init_before_watch_create(void)
 #ifdef __MMI_USER_PROFILE_SUPPORT__
        mmi_watch_user_profile_nv_read();
 #endif
+       mmi_watch_location_mission_list_init();
+#ifdef __MMI_ZHSX_SUPPORT_HEALTH_SENSOR__
+       mmi_health_measure_task_init();
+       mmi_health_measure_timed_info_nv_read();
+#endif
 
 
 
index aacb17a..14516a0 100644 (file)
@@ -9,14 +9,6 @@
 static nv_watch_protocol_data_t s_watch_protocol_data = {0};
 static bool s_watch_bind_state = false;
 
-static void * s_watch_timed_mission_timer_id = NULL;
-static uint32_t s_watch_timed_location_time_stamp = 0, s_watch_timed_weather_time_stamp = 0;
-static void * s_watch_heartbeat_action_timer_id = NULL;
-static uint32_t s_watch_heartbeat_action_time_stamp = 0;
-static uint32_t s_watch_timed_location_last_steps = 0;
-
-static void mmi_protocol_watch_timed_mission_timer_cb(uint32_t para);
-static void mmi_protocol_watch_heartbeat_timer_cb(uint32_t para);
 bool mmi_protocol_action_location(void);
 
 
@@ -201,115 +193,208 @@ void mmi_protocol_watch_weather_update_interval_set(uint32_t value)
        mmi_watch_protocol_data_nv_write();
 }
 
-static void mmi_protocol_watch_timed_mission_timer_cb(uint32_t para)
-{
-       uint32_t cur_time_stamp = 0;
 
-       Hal_Rtc_Gettime_Count_Utc(&cur_time_stamp); // Hal_Rtc_Gettime_Count(&cur_time_stamp);
+
+static void * s_protocol_timing_timer = NULL;
+TASK_HANDLE * s_protocol_timing_task_id = NULL;
+static uint32_t s_protocol_heartbeat_time_stamp = 0, s_protocol_timed_location_time_stamp = 0, s_protocol_timed_weather_time_stamp = 0;
+
+static void mmi_protocol_timing_timer_callback(uint32_t param);
+
+static void mmi_protocol_timing_task_msg_send(MMI_PROTOCOL_TIMING_MSG_ID_E msg_id, void * msg_param)
+{
+       if(NULL == s_protocol_timing_task_id)
+       {
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: task not exist\n",__FUNCTION__,__LINE__);
+               if(NULL != msg_param)
+                       Hal_Mem_Free(msg_param);
+               
+               return;
+       }
        
-       //location
-       if(mmi_protocol_watch_location_upload_interval_get() <= (cur_time_stamp - s_watch_timed_location_time_stamp))
+       if((PROTOCOL_TIMING_MSG_QUEUE_SIZE - 1) < Hal_Get_Message_Count(s_protocol_timing_task_id))
        {
-               uint32_t current_steps = asl_pedometer_steps_get();
-               //if(current_steps != s_watch_timed_location_last_steps)
-               {
-                       mmi_protocol_action_location();
-               }
-               s_watch_timed_location_time_stamp = cur_time_stamp;
-               s_watch_timed_location_last_steps = current_steps;
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg queue full\n",__FUNCTION__,__LINE__);
+               if(NULL != msg_param)
+                       Hal_Mem_Free(msg_param);
+               
+               return;
        }
 
-       //weather
-       if(mmi_protocol_watch_weather_update_interval_get() <= (cur_time_stamp - s_watch_timed_weather_time_stamp))
+       PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n",__FUNCTION__,__LINE__, msg_id);
+    mmi_protocol_timing_task_msg_t * msg = Hal_Mem_Alloc(sizeof(mmi_protocol_timing_task_msg_t));
+       if(NULL == msg)
        {
-               mmi_protocol_action_get_weather();
-               s_watch_timed_weather_time_stamp = cur_time_stamp;
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: memory alloc fail\n",__FUNCTION__,__LINE__);
+               if(NULL != msg_param)
+                       Hal_Mem_Free(msg_param);
+               
+               return;
        }
+       msg->msg_id = msg_id;
+       msg->msg_param = msg_param;
 
-#ifdef __MMI_ZHSX_SUPPORT_HEALTH_SENSOR__
-       //health measure
-       mmi_health_measure_heart_timed_action(false, cur_time_stamp);
-       mmi_health_measure_temperature_timed_action(false, cur_time_stamp);
-       mmi_health_measure_blood_timed_action(false, cur_time_stamp);
-       mmi_health_measure_spo2_timed_action(false, cur_time_stamp);
-#endif
-
-       uos_timer_stop(s_watch_timed_mission_timer_id);
-       uos_timer_start(s_watch_timed_mission_timer_id, MS_TO_TICKS(1000 * 20), 0, mmi_protocol_watch_timed_mission_timer_cb, NULL);
+    Hal_Send_Message((TASK_ID)s_protocol_timing_task_id, (void *)msg);
 }
 
-void mmi_protocol_watch_timed_mission_action(void)
+static void mmi_protocol_timing_task_handle(void * param)
 {
-       if(NULL == s_watch_timed_mission_timer_id)
+       mmi_protocol_timing_task_msg_t * msg = (mmi_protocol_timing_task_msg_t *)param;
+       MMI_PROTOCOL_TIMING_MSG_ID_E msg_id = msg->msg_id;
+       void * msg_param = msg->msg_param;
+
+       PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: msg_id=%d\n",__FUNCTION__,__LINE__, msg_id);
+    switch(msg_id)
        {
-               uint32_t cur_time_stamp = 0;
-               
-               Hal_Rtc_Gettime_Count_Utc(&cur_time_stamp); // Hal_Rtc_Gettime_Count(&cur_time_stamp);
-               
-               mmi_watch_location_mission_list_init();
-               mmi_protocol_action_location();
-               s_watch_timed_location_time_stamp = cur_time_stamp;
-               s_watch_timed_location_last_steps = asl_pedometer_steps_get();
-
-               mmi_protocol_action_get_weather();
-               s_watch_timed_weather_time_stamp = cur_time_stamp;
-
-       #ifdef __MMI_ZHSX_SUPPORT_HEALTH_SENSOR__
-               mmi_health_measure_task_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);
-       #endif
-               
-               uos_timer_create(&s_watch_timed_mission_timer_id);
-               uos_timer_start(s_watch_timed_mission_timer_id, MS_TO_TICKS(1000 * 20), 0, mmi_protocol_watch_timed_mission_timer_cb, NULL);
-       }
+               case MMI_PROTOCOL_TIMING_MSG_HEARTBEAT:
+                       mmi_protocol_fzd_action_HEARTBEAT();
+                       break;
+                       
+               case MMI_PROTOCOL_TIMING_MSG_LOCATION_UPDATE:
+                       mmi_protocol_action_location();
+            break;
+                       
+               case MMI_PROTOCOL_TIMING_MSG_WEATHER_UPDATE:
+                       mmi_protocol_action_get_weather();
+            break;
+                       
+               case MMI_PROTOCOL_TIMING_MSG_HEALTH_MEASURE:
+                       #ifdef __MMI_ZHSX_SUPPORT_HEALTH_SENSOR__
+                       uint32_t cur_time_stamp = *((uint32_t *) msg_param);
+                       PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: cur_stamp=%d\n", __FUNCTION__, __LINE__, cur_time_stamp);
+                       mmi_health_measure_timed_mission_action(cur_time_stamp);
+                       #endif
+            break;
+
+               default:
+                       break;
+    }
+}
+
+static void mmi_protocol_timing_task_entry(void * para)
+{
+    while(NULL == s_protocol_timing_task_id)
+       {
+        uos_sleep(10);
+    }
+
+    while(1)
+       {
+        mmi_protocol_timing_task_msg_t * msg = (mmi_protocol_timing_task_msg_t *)Hal_Receive_Message((TASK_ID)s_protocol_timing_task_id, TRUE);
+
+               mmi_protocol_timing_task_handle(msg);
+
+        Hal_Mem_Free(msg->msg_param);
+        Hal_Mem_Free(msg);
+    }
 }
 
-void mmi_protocol_watch_heartbeat_stop(void)
+static void mmi_protocol_timing_task_create(void)
 {
-       if(NULL != s_watch_heartbeat_action_timer_id)
+       if(NULL != s_protocol_timing_task_id)
        {
-               uos_timer_stop(s_watch_heartbeat_action_timer_id);
-               uos_timer_delete(s_watch_heartbeat_action_timer_id);
-               s_watch_heartbeat_action_timer_id = NULL;
+               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: task_id=0x%x\n",__FUNCTION__,__LINE__, s_protocol_timing_task_id);
+               return;
        }
+       
+       s_protocol_timing_task_id = uos_create_task(mmi_protocol_timing_task_entry,
+                                                                                       NULL,
+                                                                                       PROTOCOL_TIMING_MSG_QUEUE_SIZE,
+                                                                                       PROTOCOL_TIMING_TASK_STACK_SIZE,
+                                                                                       PROTOCOL_TIMING_TASK_PRIORITY,
+                                                                                       "mmi_protocol_timing_task");
+
+       PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: task_id=0x%x\n",__FUNCTION__,__LINE__, s_protocol_timing_task_id);
 }
 
-static void mmi_protocol_watch_heartbeat_timer_cb(uint32_t para)
+static void mmi_protocol_timing_timer_callback(uint32_t param)
 {
        uint32_t cur_time_stamp = 0;
 
-       Hal_Rtc_Gettime_Count_Utc(&cur_time_stamp); // Hal_Rtc_Gettime_Count(&cur_time_stamp);
-       if(mmi_protocol_watch_heartbeat_action_interval_get() <= (cur_time_stamp - s_watch_heartbeat_action_time_stamp))
+       Hal_Rtc_Gettime_Count_Utc(&cur_time_stamp);
+       PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: cur_time_stamp=%d\n", __FUNCTION__, __LINE__, cur_time_stamp);
+
+       uos_timer_stop(s_protocol_timing_timer);
+    uos_timer_start(s_protocol_timing_timer, MS_TO_TICKS(PROTOCOL_TIMING_TIMER_INTERVAL), 0, mmi_protocol_timing_timer_callback, NULL);
+
+       // heartbeat
+       if(mmi_protocol_watch_heartbeat_action_interval_get() <= (cur_time_stamp - s_protocol_heartbeat_time_stamp))
        {
-               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: cur=%d, stamp=%d\n", __FUNCTION__, __LINE__, cur_time_stamp, s_watch_heartbeat_action_time_stamp);
-               
-               mmi_protocol_fzd_action_HEARTBEAT();
-               s_watch_heartbeat_action_time_stamp = cur_time_stamp;
+               mmi_protocol_timing_task_msg_send(MMI_PROTOCOL_TIMING_MSG_HEARTBEAT, NULL);
+               s_protocol_heartbeat_time_stamp = cur_time_stamp;
+       }
+
+       //location
+       if(mmi_protocol_watch_location_upload_interval_get() <= (cur_time_stamp - s_protocol_timed_location_time_stamp))
+       {
+               //if(current_steps != s_watch_timed_location_last_steps)
+               {
+                       mmi_protocol_timing_task_msg_send(MMI_PROTOCOL_TIMING_MSG_LOCATION_UPDATE, NULL);
+               }
+               s_protocol_timed_location_time_stamp = cur_time_stamp;
        }
 
-       uos_timer_stop(s_watch_heartbeat_action_timer_id);
-       uos_timer_start(s_watch_heartbeat_action_timer_id, MS_TO_TICKS(1000 * 20), 0, mmi_protocol_watch_heartbeat_timer_cb, NULL);
+       //weather
+       if(mmi_protocol_watch_weather_update_interval_get() <= (cur_time_stamp - s_protocol_timed_weather_time_stamp))
+       {
+               mmi_protocol_timing_task_msg_send(MMI_PROTOCOL_TIMING_MSG_WEATHER_UPDATE, NULL);
+               s_protocol_timed_weather_time_stamp = cur_time_stamp;
+       }
+
+       //health measure
+#ifdef __MMI_ZHSX_SUPPORT_HEALTH_SENSOR__
+       uint32_t * time_stamp_p = Hal_Mem_Alloc(sizeof(uint32_t));
+       //Hal_Mem_Copy(time_stamp_p, &cur_time_stamp, sizeof(uint32_t));
+       * time_stamp_p = cur_time_stamp;
+       mmi_protocol_timing_task_msg_send(MMI_PROTOCOL_TIMING_MSG_HEALTH_MEASURE, time_stamp_p);
+#endif
+
 }
 
-void mmi_protocol_watch_heartbeat_action(void)
+void mmi_protocol_timing_mission_action(void)
 {
-       if(NULL == s_watch_heartbeat_action_timer_id)
-       {
-               PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
-               
-               mmi_protocol_fzd_action_HEARTBEAT();
-               
-               Hal_Rtc_Gettime_Count_Utc(&s_watch_heartbeat_action_time_stamp); // Hal_Rtc_Gettime_Count(&s_watch_heartbeat_action_time_stamp);
+       mmi_protocol_timing_task_create();
+
+       uint32_t cur_time_stamp = 0;
+       
+       Hal_Rtc_Gettime_Count_Utc(&cur_time_stamp);
+       PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: cur_time_stamp=%d\n", __FUNCTION__, __LINE__, cur_time_stamp);
+       
+       mmi_protocol_fzd_action_HEARTBEAT();
+       s_protocol_heartbeat_time_stamp = cur_time_stamp;
+
+       mmi_protocol_action_location();
+       s_protocol_timed_location_time_stamp = cur_time_stamp;
+
+       mmi_protocol_action_get_weather();
+       s_protocol_timed_weather_time_stamp = cur_time_stamp;
+
+#ifdef __MMI_ZHSX_SUPPORT_HEALTH_SENSOR__
+       //mmi_health_measure_task_init();
+       //mmi_health_measure_timed_info_nv_read();
+       mmi_health_measure_first_mission_action(cur_time_stamp);
+#endif
+
+       if(NULL == s_protocol_timing_timer)
+           uos_timer_create(&s_protocol_timing_timer);
+       else
+               uos_timer_stop(s_protocol_timing_timer);
+
+    uos_timer_start(s_protocol_timing_timer, MS_TO_TICKS(PROTOCOL_TIMING_TIMER_INTERVAL), 0, mmi_protocol_timing_timer_callback, NULL);
+}
 
-               uos_timer_create(&s_watch_heartbeat_action_timer_id);
-               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_timing_mission_stop(void)
+{
+       if(NULL != s_protocol_timing_timer)
+       {
+               uos_timer_stop(s_protocol_timing_timer);
+               uos_timer_delete(s_protocol_timing_timer);
+               s_protocol_timing_timer = NULL;
        }
 }
 
+
+
 extern void dm_send_msg_active(void);
 bool mmi_protocol_watch_link_action(void)
 {
index 0bc7189..ad00a41 100644 (file)
@@ -28,21 +28,44 @@ extern "C"
 #endif
 
 
+#define PROTOCOL_TIMING_TIMER_INTERVAL (20 * 1000) // ms
+
+#define PROTOCOL_TIMING_TASK_PRIORITY 220
+#define PROTOCOL_TIMING_TASK_STACK_SIZE (1 * 1024)
+#define PROTOCOL_TIMING_MSG_QUEUE_SIZE (16)
+
+
+typedef enum
+{
+       MMI_PROTOCOL_TIMING_MSG_ID_START,
+
+    MMI_PROTOCOL_TIMING_MSG_HEARTBEAT,
+       MMI_PROTOCOL_TIMING_MSG_LOCATION_UPDATE,
+    MMI_PROTOCOL_TIMING_MSG_WEATHER_UPDATE,
+       MMI_PROTOCOL_TIMING_MSG_HEALTH_MEASURE,
+
+    MMI_PROTOCOL_TIMING_MSG_ID_END
+}MMI_PROTOCOL_TIMING_MSG_ID_E;
+
+
+typedef struct
+{
+       uint16_t msg_id;
+       void * msg_param;
+}mmi_protocol_timing_task_msg_t;
+
+
+
 
 bool mmi_watch_tcp_connect_state_get(void);
 
 bool mmi_protocol_watch_bind_state_get(void);
-
 void mmi_protocol_watch_bind_state_set(bool state);
 
 void mmi_protocol_receive_data_process(char * recv_str, int recv_len);
-
 void * mmi_protocol_send_space_ptr_get(int cmd);
-
 int mmi_protocol_send_space_size_get(int cmd);
-
 void mmi_protocol_send_space_free(int cmd);
-
 bool mmi_protocol_send_cmd_check(int cmd);
 
 void mmi_watch_protocol_data_nv_read(void);
@@ -59,10 +82,8 @@ uint8_t mmi_protocol_device_name_len_get(void);
 char * mmi_protocol_device_name_get(void);
 void mmi_protocol_device_name_set(char * device_name);
 
-void mmi_protocol_watch_timed_mission_action(void);
-
-void mmi_protocol_watch_heartbeat_stop(void);
-void mmi_protocol_watch_heartbeat_action(void);
+void mmi_protocol_timing_mission_action(void);
+void mmi_protocol_timing_mission_stop(void);
 
 bool mmi_protocol_watch_link_action(void);
 
index 0a98a10..6040ac5 100644 (file)
@@ -565,7 +565,6 @@ bool mmi_protocol_fzd_parse_LINK(unsigned char * next_buff, unsigned int next_bu
        {
                mmi_protocol_fzd_action_bind();
        }
-       //mmi_protocol_watch_heartbeat_action();
 
        return true;
 }
@@ -651,11 +650,8 @@ bool mmi_protocol_fzd_parse_ACTION_BIND(unsigned char * next_buff, unsigned int
                        mmi_watch_sim_unbind_check();
                #endif
 
-                       // socket heartbeat
-                       mmi_protocol_watch_heartbeat_action();
-                       
                        // timing mission
-                       mmi_protocol_watch_timed_mission_action();
+                       mmi_protocol_timing_mission_action();
 
                        //video call
                #ifdef __MMI_ZHSX_SUPPORT_VIDEO_CALL__
index 6402c03..f218057 100644 (file)
@@ -37,11 +37,7 @@ void cmdmsg_handler_login_impl(void *param)
 #ifdef __MMI_ZHSX_SUPPORT__
        printf("[@CHENG_DEBUG][%s][%d]: \n",__FUNCTION__,__LINE__);
 
-       //#ifdef __MMI_ZHSX_SUPPORT_WULIAN_SERVER__
        mmi_protocol_watch_link_action();
-       //#else
-       //mmi_protocol_watch_heartbeat_action();
-       //#endif
 
 #else
 
@@ -58,7 +54,7 @@ void cmdmsg_handler_disconnect_impl(void *param)
 
        mmi_protocol_watch_bind_state_set(false);
 
-       mmi_protocol_watch_heartbeat_stop();
+       mmi_protocol_timing_mission_stop();
 
 #else