KT26-0607_AC695n-BTE-SDK312/apps/soundbox/ui/led_lyric/lyric_ui_rtc.c
2026-06-07 19:38:16 +08:00

227 lines
6.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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)&current_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)&current_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