From: @CHENG <2393524978@qq.com> Date: Wed, 6 Mar 2024 03:13:18 +0000 (+0800) Subject: gengxin X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=3bdd30ab4da2551eab771915c2d32b7d1e2c6843;p=mirrors%2FASR3603_Z5.git gengxin --- diff --git a/2.sdk/project/Z5_WL_K7/product/craneg_modem/config/watch/lv_watch_conf_CUSTOM.h b/2.sdk/project/Z5_WL_K7/product/craneg_modem/config/watch/lv_watch_conf_CUSTOM.h index 585f2d1b..dc888c5e 100644 --- a/2.sdk/project/Z5_WL_K7/product/craneg_modem/config/watch/lv_watch_conf_CUSTOM.h +++ b/2.sdk/project/Z5_WL_K7/product/craneg_modem/config/watch/lv_watch_conf_CUSTOM.h @@ -179,6 +179,7 @@ #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__ @@ -190,8 +191,10 @@ #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__ diff --git a/2.sdk/sdk/gui/lv_watch/app_adaptor/app_adaptor_timing_control.c b/2.sdk/sdk/gui/lv_watch/app_adaptor/app_adaptor_timing_control.c index d774154e..beed8f5d 100644 --- a/2.sdk/sdk/gui/lv_watch/app_adaptor/app_adaptor_timing_control.c +++ b/2.sdk/sdk/gui/lv_watch/app_adaptor/app_adaptor_timing_control.c @@ -15,17 +15,12 @@ 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 diff --git a/2.sdk/sdk/gui/lv_watch/app_adaptor/app_adaptor_timing_control.h b/2.sdk/sdk/gui/lv_watch/app_adaptor/app_adaptor_timing_control.h index f9352a32..541e712a 100644 --- a/2.sdk/sdk/gui/lv_watch/app_adaptor/app_adaptor_timing_control.h +++ b/2.sdk/sdk/gui/lv_watch/app_adaptor/app_adaptor_timing_control.h @@ -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, diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.c b/2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.c index c80420bb..fa90d50d 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.c +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.c @@ -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, diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.h b/2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.h index 791ec0df..c00b5231 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.h +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/health_measure/health_measure.h @@ -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); diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/bodyinfo.c b/2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/bodyinfo.c index db95b056..b7a1f6e9 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/bodyinfo.c +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/bodyinfo.c @@ -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); diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/pedometer.c b/2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/pedometer.c index 9c93f5b1..633414c9 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/pedometer.c +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/pedometer.c @@ -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(); diff --git a/2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/pedometer.h b/2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/pedometer.h index fb415af7..969705f6 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/pedometer.h +++ b/2.sdk/sdk/gui/lv_watch/lv_apps/pedometer/pedometer.h @@ -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); diff --git a/2.sdk/sdk/gui/lv_watch/lv_watch.c b/2.sdk/sdk/gui/lv_watch/lv_watch.c index b086ae45..92f88731 100644 --- a/2.sdk/sdk/gui/lv_watch/lv_watch.c +++ b/2.sdk/sdk/gui/lv_watch/lv_watch.c @@ -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 diff --git a/2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_api.c b/2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_api.c index aacb17a5..14516a0c 100644 --- a/2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_api.c +++ b/2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_api.c @@ -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) { diff --git a/2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_api.h b/2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_api.h index 0bc7189e..ad00a41d 100644 --- a/2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_api.h +++ b/2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_api.h @@ -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); diff --git a/2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd.c b/2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd.c index 0a98a10f..6040ac56 100644 --- a/2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd.c +++ b/2.sdk/sdk/gui/lv_watch/mmi_protocol/mmi_protocol_fzd.c @@ -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__ diff --git a/2.sdk/sdk/gui/lv_watch/modem/mmi_modem_tcp/mmi_modem_tcp_msg_handler_impl.c b/2.sdk/sdk/gui/lv_watch/modem/mmi_modem_tcp/mmi_modem_tcp_msg_handler_impl.c index 6402c03f..f218057b 100644 --- a/2.sdk/sdk/gui/lv_watch/modem/mmi_modem_tcp/mmi_modem_tcp_msg_handler_impl.c +++ b/2.sdk/sdk/gui/lv_watch/modem/mmi_modem_tcp/mmi_modem_tcp_msg_handler_impl.c @@ -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