#include "includes.h" #include "ui/ui_api.h" #include "led_lyric.h" #include "system/sys_time.h" #include "rtc/rtc_ui.h" #if TCFG_APP_RTC_EN #if (TCFG_UI_ENABLE && (CONFIG_UI_STYLE == STYLE_JL_LED_LYRICS)) u8 rtc_show_time_count = 0; u8 rtc_set_time_count = 0; u8 rtc_show_time_sw = 1; u16 user_set_timer_id = 0; wchar_t blank_char = 0x10; wchar_t colon_char = 0x11; struct lyric_rtc_ui { void *dev_handle; struct ui_rtc_display lyric_ui_rtc; }; static struct lyric_rtc_ui *__this = NULL; static void lrc_show_rtc(void) { u8 buf[50] = {"RTC TASK"}; lyrics_update_font(buf, strlen(buf), NULL); } static int lyric_ui_set_RTC_user(struct ui_rtc_display *lyric_rtc) { int ret = true; u8 buf[50] = {0}; if (lyric_rtc == NULL) { return false; } rtc_set_time_count++; switch (lyric_rtc->rtc_menu) { case UI_RTC_ACTION_SHOW_DATE: sprintf(buf, "%04d.%02d.%02d %02d:%02d:%02d", lyric_rtc->time.Year, lyric_rtc->time.Month, lyric_rtc->time.Day, \ lyric_rtc->time.Hour, lyric_rtc->time.Min, lyric_rtc->time.Sec); break; case UI_RTC_ACTION_YEAR_SET: sprintf(buf, "%04d%c%c%c%c%c%c %c%c%c%c%c%c%c%c", lyric_rtc->time.Year, colon_char, blank_char, blank_char, colon_char, blank_char, blank_char, \ blank_char, blank_char, colon_char, blank_char, blank_char, colon_char, blank_char, blank_char); break; case UI_RTC_ACTION_MONTH_SET: sprintf(buf, "%c%c%c%c%c%02d%c%c%c %c%c%c%c%c%c%c%c", blank_char, blank_char, blank_char, blank_char, colon_char, lyric_rtc->time.Month, colon_char, blank_char, blank_char, \ blank_char, blank_char, colon_char, blank_char, blank_char, colon_char, blank_char, blank_char); break; case UI_RTC_ACTION_DAY_SET: sprintf(buf, "%c%c%c%c%c%c%c%c%02d %c%c%c%c%c%c%c%c", blank_char, blank_char, blank_char, blank_char, colon_char, blank_char, blank_char, colon_char, lyric_rtc->time.Month, \ blank_char, blank_char, colon_char, blank_char, blank_char, colon_char, blank_char, blank_char); break; case UI_RTC_ACTION_HOUR_SET: sprintf(buf, "%c%c%c%c%c%c%c%c%c%c %02d%c%c%c%c%c%c", blank_char, blank_char, blank_char, blank_char, colon_char, blank_char, blank_char, colon_char, blank_char, blank_char, \ lyric_rtc->time.Hour, colon_char, blank_char, blank_char, colon_char, blank_char, blank_char); break; case UI_RTC_ACTION_MINUTE_SET: sprintf(buf, "%c%c%c%c%c%c%c%c%c%c %c%c%c%02d%c%c%c", blank_char, blank_char, blank_char, blank_char, colon_char, blank_char, blank_char, colon_char, blank_char, blank_char, \ blank_char, blank_char, colon_char, lyric_rtc->time.Min, colon_char, blank_char, blank_char); break; case UI_RTC_ACTION_STRING_SET: //strcpy(buf, lyric_rtc->str); break; default: ret = false; break; } lyrics_update_font(buf, strlen(buf), NULL); } static int lyric_ui_show_RTC_user(struct ui_rtc_display *lyric_rtc) { rtc_show_time_count++; int ret = true; u8 buf[50] = {0}; if (lyric_rtc == NULL) { return false; } printf("rtc_user_sys_time: %04d-%02d-%02d %02d:%02d:%02d\n", lyric_rtc->time.Year, lyric_rtc->time.Month, lyric_rtc->time.Day, lyric_rtc->time.Hour, lyric_rtc->time.Min, lyric_rtc->time.Sec ); sprintf(buf, "%c%c%c%c%c%c%c%c%c%c %c%c%c%c%c%c%c%c", blank_char, blank_char, blank_char, blank_char, colon_char, blank_char, blank_char, colon_char, blank_char, blank_char, \ blank_char, blank_char, colon_char, blank_char, blank_char, colon_char, blank_char, blank_char); lyrics_update_font(buf, strlen(buf), NULL); } static void ui_lrc_show_curtime(void) { u8 buf[50] = {0}; struct sys_time current_time; dev_ioctl(__this->dev_handle, IOCTL_GET_SYS_TIME, (u32)¤t_time); printf("rtc_read_sys_time: %04d-%02d-%02d %02d:%02d:%02d\n", current_time.year, current_time.month, current_time.day, current_time.hour, current_time.min, current_time.sec); sprintf(buf, "%04d.%02d.%02d %02d:%02d:%02d", current_time.year, current_time.month, current_time.day, \ current_time.hour, current_time.min, current_time.sec); lyrics_update_font(buf, strlen(buf), NULL); } struct ui_rtc_display *rtc_ui_get_display_buf() { if (__this) { return &(__this->lyric_ui_rtc); } else { return NULL; } } static void lyric_ui_rtc_open(void) { struct sys_time current_time; if (!__this) { __this = zalloc(sizeof(struct lyric_rtc_ui)); } __this->dev_handle = dev_open("rtc", NULL); if (!__this->dev_handle) { free(__this); __this = NULL; } lyric_ui_set_auto_reflash(500);//设置主页500ms自动刷新 dev_ioctl(__this->dev_handle, IOCTL_GET_SYS_TIME, (u32)¤t_time); printf("rtc_read_sys_time: %d-%d-%d %d:%d:%d\n", current_time.year, current_time.month, current_time.day, current_time.hour, current_time.min, current_time.sec); } static void lyric_ui_close_rtc(void) { if (user_set_timer_id) { sys_timeout_del(user_set_timer_id); } //lyrics_hide_update(); if (__this) { free(__this); __this = NULL; } } static void lyric_ui_rtc_main(void) //主界面显示 { if (user_set_timer_id) { sys_timeout_del(user_set_timer_id); } ui_lrc_show_curtime(); } void lyric_ui_rtc_show() { if (user_set_timer_id) { sys_timeout_del(user_set_timer_id); } user_set_timer_id = sys_timeout_add(NULL, lyric_ui_rtc_show, 50); if (rtc_show_time_sw) { if (rtc_show_time_count < 5) { lyric_ui_show_RTC_user(&(__this->lyric_ui_rtc)); } else { rtc_show_time_count = 0; rtc_show_time_sw = 0; } } else { if (rtc_set_time_count < 5) { lyric_ui_set_RTC_user(&(__this->lyric_ui_rtc)); } else { rtc_set_time_count = 0; rtc_show_time_sw = 1; } } } static int lyric_ui_rtc_user(u8 menu, u32 arg)//子界面显示 //返回true不继续传递 ,返回false由common统一处理 { int ret = true; switch (menu) { case MENU_ALM_SET: case MENU_RTC_SET: if (user_set_timer_id) { sys_timeout_del(user_set_timer_id); } user_set_timer_id = sys_timeout_add(NULL, lyric_ui_rtc_show, 50); break; default: ret = false; break; } return ret; } const struct lyric_ui_dis lyric_rtc_main = { .lyric_ui = LED_LYRICS_RTC_MENU_MAIN, .lyric_open = lyric_ui_rtc_open, .lyric_ui_main = lyric_ui_rtc_main, .lyric_ui_user = lyric_ui_rtc_user, .lyric_close = lyric_ui_close_rtc, }; #endif #endif