#define __MMI_Z5_HA_K18_REMIND__
#define __MMI_REMIND_WAKE_UP_SUPPORT__
+#define __MMI_REMIND_MEDICINE_SUPPORT__
+#define __MMI_REMIND_DRINK_SUPPORT__
+//#define __MMI_SEDENTARY_REMIND_SUPPORT__
+#define __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+
#endif
#ifdef __MMI_REMIND_DRINK_SUPPORT__
#define NV_SECTION_UI_REMIND_DRINK_DATA_LEN (sizeof(nv_watch_remind_drink_t))
#endif
+#ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+#define NV_SECTION_UI_REMIND_SERVER_SEDENTARY_DATA_LEN (sizeof(nv_watch_remind_server_sedentary_t))
+#endif
#ifdef __MMI_CUSTOM_HENG_AI__
#define NV_SECTION_UI_HENG_AI_WAKE_RING_TYPE_LEN (sizeof(nv_watch_switch_t))
#endif
#ifdef __MMI_REMIND_DRINK_SUPPORT__
#define NV_SECTION_UI_REMIND_DRINK_DATA_FILE "ui_remind_drink_data.nv"
#endif
+#ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+#define NV_SECTION_UI_REMIND_SERVER_SEDENTARY_DATA_FILE "ui_remind_server_sedentary_data.nv"
+#endif
#ifdef __MMI_CUSTOM_HENG_AI__
#define NV_SECTION_UI_HENG_AI_WAKE_RING_TYPE_FILE "ui_heng_ai_wake_ring_type.nv"
#endif
case NV_SECTION_UI_REMIND_DRINK_DATA:
return (NV_SECTION_LEN(NV_SECTION_UI_REMIND_DRINK_DATA));
#endif
+ #ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+ case NV_SECTION_UI_REMIND_SERVER_SEDENTARY_DATA:
+ return (NV_SECTION_LEN(NV_SECTION_UI_REMIND_SERVER_SEDENTARY_DATA));
+ #endif
#ifdef __MMI_CUSTOM_HENG_AI__
case NV_SECTION_UI_HENG_AI_WAKE_RING_TYPE:
return (NV_SECTION_LEN(NV_SECTION_UI_HENG_AI_WAKE_RING_TYPE));
case NV_SECTION_UI_REMIND_DRINK_DATA:
return (NV_SECTION_FILE_PATH(NV_SECTION_UI_REMIND_DRINK_DATA));
#endif
+ #ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+ case NV_SECTION_UI_REMIND_SERVER_SEDENTARY_DATA:
+ return (NV_SECTION_FILE_PATH(NV_SECTION_UI_REMIND_SERVER_SEDENTARY_DATA));
+ #endif
#ifdef __MMI_CUSTOM_HENG_AI__
case NV_SECTION_UI_HENG_AI_WAKE_RING_TYPE:
return (NV_SECTION_FILE_PATH(NV_SECTION_UI_HENG_AI_WAKE_RING_TYPE));
#ifdef __MMI_REMIND_DRINK_SUPPORT__
nv_watch_remind_drink_t * remind_drink_data;
#endif
+#ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+ nv_watch_remind_server_sedentary_t * remind_server_sedentary;
+#endif
#ifdef __MMI_CUSTOM_HENGAI_SLEEP__
nv_watch_heng_ai_sleep_activation_t * heng_ai_sleep_activation;
#endif
TempData = (char *)remind_drink_data;
break;
#endif
+ #ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+ case NV_SECTION_UI_REMIND_SERVER_SEDENTARY_DATA:
+ remind_server_sedentary = lv_mem_alloc(SectionLen);
+ memset(remind_server_sedentary, 0x0, SectionLen);
+ TempData = (char *)remind_server_sedentary;
+ break;
+ #endif
#ifdef __MMI_CUSTOM_HENG_AI__
case NV_SECTION_UI_HENG_AI_WAKE_RING_TYPE:
} __packed nv_watch_remind_drink_t;
#endif
+#ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+// [REMIND_CH_SIT,20,1,12:00-14:00-0,23:00-07:00-1]
+typedef struct
+{
+ uint8_t is_valid; // switch
+ uint16_t interval_minute; // minute
+
+ uint8_t noon_is_valid; // noon rest switch
+ uint8_t noon_hour_begin; // [0, 23]
+ uint8_t noon_min_begin; // [0, 59]
+ uint8_t noon_hour_end; // [0, 23]
+ uint8_t noon_min_end; // [0, 59]
+
+ uint8_t night_is_valid; // night rest switch
+ uint8_t night_hour_begin; // [0, 23]
+ uint8_t night_min_begin; // [0, 59]
+ uint8_t night_hour_end; // [0, 23]
+ uint8_t night_min_end; // [0, 59]
+} __packed nv_watch_remind_server_sedentary_t;
+#endif
+
+
#ifdef __MMI_Z5_HA_K18_REMIND__
typedef struct
{
#ifdef __MMI_REMIND_DRINK_SUPPORT__
NV_SECTION_UI_REMIND_DRINK_DATA, // nv_watch_remind_drink_t
#endif
+#ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+ NV_SECTION_UI_REMIND_SERVER_SEDENTARY_DATA, // nv_watch_remind_server_sedentary_t
+#endif
#ifdef __MMI_CUSTOM_HENG_AI__
NV_SECTION_UI_HENG_AI_WAKE_RING_TYPE, // nv_watch_switch_t
#endif
#endif
#ifdef __MMI_SEDENTARY_REMIND_SUPPORT__
{MMI_REMIND_TYPE_SEDENTARY, WATCH_TEXT_ID_SEDENTARY_PROMPT, AUDIO_REMIND_SEDENTARY, ICON_SEDENTARY_REMIND_IMAGE},
+#elif defined(__MMI_REMIND_SERVER_SEDENTARY_SUPPORT__)
+ {MMI_REMIND_TYPE_SEDENTARY, WATCH_TEXT_ID_SEDENTARY_PROMPT, AUDIO_REMIND_SEDENTARY, NULL},
#endif
{ MMI_REMIND_TYPE_MAX, 0, NULL, NULL},
#endif
+#ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+static nv_watch_remind_server_sedentary_t s_remind_server_sedentary_data = {0};
+static void * s_remind_server_sedentary_timer = NULL;
+
+void mmi_remind_server_sedentary_timer_stop(void);
+static void mmi_remind_server_sedentary_timer_start(void);
+static void mmi_remind_server_sedentary_trigger(uint32_t para);
+
+void mmi_remind_server_sedentary_nv_write(void)
+{
+ uint32_t nv_data_length = sizeof(nv_watch_remind_server_sedentary_t);
+
+ if(nv_data_length != UI_NV_Write_Req(NV_SECTION_UI_REMIND_SERVER_SEDENTARY_DATA, 0, nv_data_length, (uint8_t *)&s_remind_server_sedentary_data))
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: nv write fail\n", __FUNCTION__, __LINE__);
+ }
+}
+
+void mmi_remind_server_sedentary_nv_read(void)
+{
+ uint32_t nv_data_length = sizeof(nv_watch_remind_server_sedentary_t);
+
+ if(nv_data_length != UI_NV_Read_Req(NV_SECTION_UI_REMIND_SERVER_SEDENTARY_DATA, 0, nv_data_length, (uint8_t *)&s_remind_server_sedentary_data))
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: nv read fail\n", __FUNCTION__, __LINE__);
+ _lv_memset_00(&s_remind_server_sedentary_data, sizeof(nv_watch_remind_server_sedentary_t));
+ }
+}
+
+void mmi_remind_server_sedentary_data_set(nv_watch_remind_server_sedentary_t * data)
+{
+ mmi_remind_server_sedentary_timer_stop();
+
+ if(NULL != data)
+ {
+ _lv_memset_00(&s_remind_server_sedentary_data, sizeof(nv_watch_remind_server_sedentary_t));
+ _lv_memcpy(&s_remind_server_sedentary_data, data, sizeof(nv_watch_remind_server_sedentary_t));
+ mmi_remind_server_sedentary_nv_write();
+
+ if(s_remind_server_sedentary_data.is_valid)
+ {
+ mmi_remind_server_sedentary_timer_start();
+ }
+ }
+}
+
+void mmi_remind_server_sedentary_screen_active(void)
+{
+ if(s_remind_server_sedentary_data.noon_is_valid || s_remind_server_sedentary_data.night_is_valid)
+ {
+ hal_rtc_t cur_time = {0};
+ uint16_t t_cur_mins = 0;
+ uint16_t t_begin_mins = 0;
+ uint16_t t_end_mins = 0;
+
+ Hal_Rtc_Gettime(&cur_time);
+ t_cur_mins = cur_time.tm_hour * 60 + cur_time.tm_min;
+
+ if(s_remind_server_sedentary_data.noon_is_valid)
+ {
+ t_begin_mins = s_remind_server_sedentary_data.noon_hour_begin * 60 + s_remind_server_sedentary_data.noon_min_begin;
+ t_end_mins = s_remind_server_sedentary_data.noon_hour_end * 60 + s_remind_server_sedentary_data.noon_min_end;
+
+ if((t_cur_mins >= t_begin_mins) && (t_cur_mins <= t_end_mins))
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: in noon rest time\n", __FUNCTION__, __LINE__);
+ return ;
+ }
+ }
+
+ if(s_remind_server_sedentary_data.night_is_valid)
+ {
+ t_begin_mins = s_remind_server_sedentary_data.night_hour_begin * 60 + s_remind_server_sedentary_data.night_min_begin;
+ t_end_mins = s_remind_server_sedentary_data.night_hour_end * 60 + s_remind_server_sedentary_data.night_min_end;
+
+ if((t_begin_mins > t_end_mins) && (t_cur_mins >= t_begin_mins || t_cur_mins <= t_end_mins)
+ || (t_begin_mins < t_end_mins) && (t_cur_mins >= t_begin_mins && t_cur_mins <= t_end_mins)
+ )
+ {
+ printf("[@CHENG_DEBUG][%s][%d]: in night rest time\n", __FUNCTION__, __LINE__);
+ return ;
+ }
+ }
+ }
+
+ s_remind_type = MMI_REMIND_TYPE_SEDENTARY;
+ mmi_remind_screen_active();
+}
+
+void mmi_remind_server_sedentary_timer_stop(void)
+{
+ if(NULL != s_remind_server_sedentary_timer)
+ {
+ uos_timer_stop(s_remind_server_sedentary_timer);
+ uos_timer_delete(s_remind_server_sedentary_timer);
+ s_remind_server_sedentary_timer = NULL;
+ }
+}
+
+static void mmi_remind_server_sedentary_timer_start(void)
+{
+ mmi_remind_server_sedentary_timer_stop();
+
+ if(0 == s_remind_server_sedentary_data.is_valid)
+ {
+ return ;
+ }
+
+ uint32_t time_second = s_remind_server_sedentary_data.interval_minute * 60;
+
+ uos_timer_create(&s_remind_server_sedentary_timer);
+ uos_timer_start(s_remind_server_sedentary_timer, MS_TO_TICKS(time_second * 1000), 0, mmi_remind_server_sedentary_trigger, NULL);
+}
+
+static void mmi_remind_server_sedentary_trigger(uint32_t para)
+{
+ mmi_remind_server_sedentary_screen_active();
+ mmi_remind_server_sedentary_timer_start();
+}
+
+void mmi_remind_server_sedentary_mission_power_on_check(void)
+{
+ mmi_remind_server_sedentary_nv_read();
+ mmi_remind_server_sedentary_timer_start();
+}
+#endif
+
+
#ifdef __MMI_SEDENTARY_REMIND_SUPPORT__
void mmi_remind_sedentary_screen_content(lv_obj_t * cont)
{
#ifdef __MMI_SEDENTARY_REMIND_SUPPORT__
mmi_remind_sedentary_screen_content(cont);
+
+ #elif defined(__MMI_REMIND_SERVER_SEDENTARY_SUPPORT__)
+ hal_rtc_t cur_time;
+ char time_str[8] = {0};
+
+ Hal_Rtc_Gettime(&cur_time);
+ sprintf(time_str, "%02d:%02d", cur_time.tm_hour, cur_time.tm_min);
+
+ #ifdef USE_LV_WATCH_UI_466_466
+ lv_obj_t * label_time = lv_label_create(cont, NULL);
+ lv_obj_add_style(label_time, LV_LABEL_PART_MAIN, &lv_watch_font40);
+ lv_label_set_text(label_time, time_str);
+ lv_label_set_align(label_time, LV_LABEL_ALIGN_CENTER);
+ lv_obj_align(label_time, NULL, LV_ALIGN_IN_TOP_MID, 0, LV_VER_RES / 5);
+
+ lv_obj_t * label_prompt = lv_label_create(cont, label_time);
+ lv_label_set_text_id(label_prompt, s_remind_info[s_remind_index].remind_txt_id);
+ lv_obj_align(label_prompt, NULL, LV_ALIGN_CENTER, 0, -10);
+ #else
+ lv_obj_t * label_time = lv_label_create(cont, NULL);
+ lv_obj_add_style(label_time, LV_LABEL_PART_MAIN, &lv_watch_font26);
+ lv_label_set_text(label_time, time_str);
+ lv_label_set_align(label_time, LV_LABEL_ALIGN_CENTER);
+ lv_obj_align(label_time, NULL, LV_ALIGN_IN_TOP_MID, 0, 50);
+
+ lv_obj_t * label_prompt = lv_label_create(cont, label_time);
+ lv_label_set_text_id(label_prompt, s_remind_info[s_remind_index].remind_txt_id);
+ lv_obj_align(label_prompt, label_time, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
+ #endif
+
#endif
}
else
void mmi_remind_drink_data_set(nv_watch_remind_drink_t * data);
void mmi_remind_drink_mission_power_on_check(void);
#endif
+#ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+void mmi_remind_server_sedentary_data_set(nv_watch_remind_server_sedentary_t * data);
+void mmi_remind_server_sedentary_mission_power_on_check(void);
+#endif
bool mmi_remind_screen_is_active(void);
void mmi_ui_msg_update_remind(void);
#ifdef __MMI_REMIND_DRINK_SUPPORT__
mmi_remind_drink_mission_power_on_check();
#endif
+#ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+ mmi_remind_server_sedentary_mission_power_on_check();
+#endif
#ifdef __MMI_SEDENTARY_REMIND_SUPPORT__
mmi_sedentary_remind_mission_power_on_check();
#endif
#define AUDIO_REMIND_CLOCK_IN "R:/audio/AUDIO_REMIND_CLOCK_IN.mp3"
#endif
-#ifdef __MMI_SEDENTARY_REMIND_SUPPORT__
+#if defined(__MMI_SEDENTARY_REMIND_SUPPORT__) || defined(__MMI_REMIND_SERVER_SEDENTARY_SUPPORT__)
#define AUDIO_REMIND_SEDENTARY "R:/audio/AUDIO_REMIND_SEDENTARY.mp3"
#endif
}
#endif
+// [REMIND_CH_SIT,20,1,12:00-14:00-0,23:00-07:00-1]
+#ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+bool mmi_protocol_fzd_parse_SERVER_SET_REMIND_SERVER_SEDENTARY(unsigned char * next_buff, unsigned int next_buff_len)
+{
+ bool result = false;
+ MMI_PROTOCOL_FZD_ACTION_ENUM action = MMI_FZD_SERVER_SET_REMIND_SERVER_SEDENTARY;
+
+ if(NULL == next_buff || 0 == next_buff_len)
+ {
+ PROTOCOL_DEBUG_PRINTF("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__);
+ return false;
+ }
+
+ result = true;
+ mmi_protocol_fzd_send_without_data(action);
+
+ nv_watch_remind_server_sedentary_t t_data = {0};
+ char * temp_ptr = NULL;
+
+ temp_ptr = km_strtok_r(NULL, ",", &next_buff);
+ t_data.interval_minute = atoi(temp_ptr);
+
+ temp_ptr = km_strtok_r(NULL, ",", &next_buff);
+ t_data.is_valid = atoi(temp_ptr);
+
+ if(t_data.is_valid)
+ {
+ // noon rest
+ temp_ptr = km_strtok_r(NULL, ":", &next_buff);
+ t_data.noon_hour_begin = atoi(temp_ptr);
+
+ temp_ptr = km_strtok_r(NULL, "-", &next_buff);
+ t_data.noon_min_begin = atoi(temp_ptr);
+
+ temp_ptr = km_strtok_r(NULL, ":", &next_buff);
+ t_data.noon_hour_end = atoi(temp_ptr);
+
+ temp_ptr = km_strtok_r(NULL, "-", &next_buff);
+ t_data.noon_min_end = atoi(temp_ptr);
+
+ temp_ptr = km_strtok_r(NULL, ",", &next_buff);
+ t_data.noon_is_valid = atoi(temp_ptr);
+
+ // night rest
+ temp_ptr = km_strtok_r(NULL, ":", &next_buff);
+ t_data.night_hour_begin = atoi(temp_ptr);
+
+ temp_ptr = km_strtok_r(NULL, "-", &next_buff);
+ t_data.night_min_begin = atoi(temp_ptr);
+
+ temp_ptr = km_strtok_r(NULL, ":", &next_buff);
+ t_data.night_hour_end = atoi(temp_ptr);
+
+ temp_ptr = km_strtok_r(NULL, "-", &next_buff);
+ t_data.night_min_end = atoi(temp_ptr);
+
+ temp_ptr = next_buff;
+ t_data.night_is_valid = atoi(temp_ptr);
+ }
+
+ mmi_remind_server_sedentary_data_set(&t_data);
+
+ return result;
+}
+#endif
+
#ifdef __MMI_CUSTOM_HENG_AI__
bool mmi_protocol_fzd_parse_SERVER_SET_HENG_AI_WAKE_NOW(unsigned char * next_buff, unsigned int next_buff_len)
#ifdef __MMI_REMIND_DRINK_SUPPORT__
MMI_FZD_SERVER_SET_REMIND_DRINK,
#endif
+#ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+ MMI_FZD_SERVER_SET_REMIND_SERVER_SEDENTARY,
+#endif
#ifdef __MMI_CUSTOM_HENG_AI__
MMI_FZD_SERVER_SET_HENG_AI_WAKE_NOW,
MMI_FZD_SERVER_SET_HENG_AI_WAKE_RING_TYPE,
#ifdef __MMI_REMIND_DRINK_SUPPORT__
bool mmi_protocol_fzd_parse_SERVER_SET_REMIND_DRINK(unsigned char * next_buff, unsigned int next_buff_len);
#endif
+#ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+bool mmi_protocol_fzd_parse_SERVER_SET_REMIND_SERVER_SEDENTARY(unsigned char * next_buff, unsigned int next_buff_len);
+#endif
#ifdef __MMI_CUSTOM_HENG_AI__
bool mmi_protocol_fzd_parse_SERVER_SET_HENG_AI_WAKE_NOW(unsigned char * next_buff, unsigned int next_buff_len);
bool mmi_protocol_fzd_parse_SERVER_SET_HENG_AI_WAKE_RING_TYPE(unsigned char * next_buff, unsigned int next_buff_len);
#ifdef __MMI_REMIND_DRINK_SUPPORT__
{MMI_FZD_SERVER_SET_REMIND_DRINK, "REMIND_CH_DRINK"},
#endif
+ #ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+ {MMI_FZD_SERVER_SET_REMIND_SERVER_SEDENTARY, "REMIND_CH_SIT"},
+ #endif
#ifdef __MMI_CUSTOM_HENG_AI__
{MMI_FZD_SERVER_SET_HENG_AI_WAKE_NOW, "HENG_AI_WAKE_NOW"},
{MMI_FZD_SERVER_SET_HENG_AI_WAKE_RING_TYPE, "HENG_AI_WAKE_RING_TYPE"},
mmi_protocol_fzd_parse_SERVER_SET_REMIND_DRINK(next_buff, next_buff_len);
break;
#endif
+ #ifdef __MMI_REMIND_SERVER_SEDENTARY_SUPPORT__
+ case MMI_FZD_SERVER_SET_REMIND_SERVER_SEDENTARY:
+ mmi_protocol_fzd_parse_SERVER_SET_REMIND_SERVER_SEDENTARY(next_buff, next_buff_len);
+ break;
+ #endif
#ifdef __MMI_CUSTOM_HENG_AI__
case MMI_FZD_SERVER_SET_HENG_AI_WAKE_NOW: