289 lines
6.0 KiB
C
289 lines
6.0 KiB
C
|
#include "ui/ui_api.h"
|
|||
|
#include "system/includes.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_LED7))
|
|||
|
|
|||
|
struct rtc_ui_opr {
|
|||
|
void *dev_handle;
|
|||
|
struct ui_rtc_display ui_rtc;
|
|||
|
};
|
|||
|
|
|||
|
static struct rtc_ui_opr *__this = NULL;
|
|||
|
|
|||
|
void ui_rtc_temp_finsh(u8 menu)//子菜单被打断或者显示超时
|
|||
|
{
|
|||
|
switch (menu) {
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void ui_led7_show_year(void *hd, u16 Year)
|
|||
|
{
|
|||
|
|
|||
|
LCD_API *dis = (LCD_API *)hd;
|
|||
|
u8 tmp_buf[5] = {0};
|
|||
|
itoa4(Year, (u8 *)&tmp_buf[0]);
|
|||
|
dis->lock(1);
|
|||
|
dis->clear();
|
|||
|
dis->setXY(0, 0);
|
|||
|
dis->show_string(tmp_buf);
|
|||
|
dis->lock(0);
|
|||
|
}
|
|||
|
|
|||
|
static void led7_show_rtc_string(void *hd, const char *buf)
|
|||
|
{
|
|||
|
LCD_API *dis = (LCD_API *)hd;
|
|||
|
|
|||
|
dis->lock(1);
|
|||
|
dis->clear();
|
|||
|
dis->setXY(0, 0);
|
|||
|
dis->show_string((u8 *)buf);
|
|||
|
dis->lock(0);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static void led7_flash_char(void *hd, u8 index)
|
|||
|
{
|
|||
|
LCD_API *dis = (LCD_API *)hd;
|
|||
|
dis->FlashChar(BIT(index));
|
|||
|
}
|
|||
|
|
|||
|
static void led7_rtc_flash_icon(void *hd, u32 icon)
|
|||
|
{
|
|||
|
LCD_API *dis = (LCD_API *)hd;
|
|||
|
dis->flash_icon(icon);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static void ui_led7_show_curtime(void *hd, u8 Hour, u8 Min)
|
|||
|
{
|
|||
|
LCD_API *dis = (LCD_API *)hd;
|
|||
|
u8 tmp_buf[5] = {0};
|
|||
|
itoa2(Hour, (u8 *)&tmp_buf[0]);
|
|||
|
itoa2(Min, (u8 *)&tmp_buf[2]);
|
|||
|
|
|||
|
dis->lock(1);
|
|||
|
dis->setXY(0, 0);
|
|||
|
dis->Clear_FlashChar(BIT(0) | BIT(1) | BIT(2) | BIT(3));
|
|||
|
dis->show_string(tmp_buf);
|
|||
|
dis->flash_icon(LED7_2POINT);
|
|||
|
dis->lock(0);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static void ui_led7_show_RTC_time(void *hd, u8 Hour, u8 Min)
|
|||
|
{
|
|||
|
LCD_API *dis = (LCD_API *)hd;
|
|||
|
u8 tmp_buf[5] = {0};
|
|||
|
itoa2(Hour, (u8 *)&tmp_buf[0]);
|
|||
|
itoa2(Min, (u8 *)&tmp_buf[2]);
|
|||
|
|
|||
|
dis->lock(1);
|
|||
|
dis->clear();
|
|||
|
dis->setXY(0, 0);
|
|||
|
dis->show_string(tmp_buf);
|
|||
|
dis->show_icon(LED7_2POINT);
|
|||
|
dis->lock(0);
|
|||
|
}
|
|||
|
|
|||
|
static void ui_led7_show_date(void *hd, u16 Year, u8 Month, u8 Day)
|
|||
|
{
|
|||
|
|
|||
|
LCD_API *dis = (LCD_API *)hd;
|
|||
|
u8 tmp_buf[5] = {0};
|
|||
|
itoa2(Month, (u8 *)&tmp_buf[0]);
|
|||
|
itoa2(Day, (u8 *)&tmp_buf[2]);
|
|||
|
|
|||
|
dis->lock(1);
|
|||
|
dis->clear();
|
|||
|
dis->setXY(0, 0);
|
|||
|
dis->show_string(tmp_buf);
|
|||
|
dis->lock(0);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
static int ui_led7_show_RTC_user(void *hd, struct ui_rtc_display *rtc)
|
|||
|
{
|
|||
|
int ret = true;
|
|||
|
if (rtc == NULL) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
switch (rtc->rtc_menu) {
|
|||
|
|
|||
|
/* case UI_RTC_ACTION_SHOW_TIME: */
|
|||
|
/* ui_led7_show_RTC_time(hd,rtc->time.Hour, rtc->time.Min); */
|
|||
|
/* break; */
|
|||
|
|
|||
|
case UI_RTC_ACTION_SHOW_DATE:
|
|||
|
ui_led7_show_date(hd, rtc->time.Year, rtc->time.Month, rtc->time.Day);
|
|||
|
break;
|
|||
|
|
|||
|
case UI_RTC_ACTION_YEAR_SET:
|
|||
|
ui_led7_show_year(hd, rtc->time.Year);
|
|||
|
led7_flash_char(hd, 0);
|
|||
|
led7_flash_char(hd, 1);
|
|||
|
led7_flash_char(hd, 2);
|
|||
|
led7_flash_char(hd, 3);
|
|||
|
break;
|
|||
|
|
|||
|
case UI_RTC_ACTION_MONTH_SET:
|
|||
|
ui_led7_show_date(hd, rtc->time.Year, rtc->time.Month, rtc->time.Day);
|
|||
|
led7_flash_char(hd, 0);
|
|||
|
led7_flash_char(hd, 1);
|
|||
|
break;
|
|||
|
|
|||
|
case UI_RTC_ACTION_DAY_SET:
|
|||
|
ui_led7_show_date(hd, rtc->time.Year, rtc->time.Month, rtc->time.Day);
|
|||
|
led7_flash_char(hd, 2);
|
|||
|
led7_flash_char(hd, 3);
|
|||
|
break;
|
|||
|
|
|||
|
case UI_RTC_ACTION_HOUR_SET:
|
|||
|
ui_led7_show_RTC_time(hd, rtc->time.Hour, rtc->time.Min);
|
|||
|
led7_flash_char(hd, 0);
|
|||
|
led7_flash_char(hd, 1);
|
|||
|
break;
|
|||
|
|
|||
|
case UI_RTC_ACTION_MINUTE_SET:
|
|||
|
ui_led7_show_RTC_time(hd, rtc->time.Hour, rtc->time.Min);
|
|||
|
led7_flash_char(hd, 2);
|
|||
|
led7_flash_char(hd, 3);
|
|||
|
break;
|
|||
|
|
|||
|
case UI_RTC_ACTION_STRING_SET:
|
|||
|
led7_show_rtc_string(hd, rtc->str);
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
ret = false;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
return ret;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
struct ui_rtc_display *rtc_ui_get_display_buf()
|
|||
|
{
|
|||
|
if (__this) {
|
|||
|
return &(__this->ui_rtc);
|
|||
|
} else {
|
|||
|
return NULL;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
static void *ui_open_rtc(void *hd)
|
|||
|
{
|
|||
|
|
|||
|
struct sys_time current_time;
|
|||
|
if (!__this) {
|
|||
|
__this = zalloc(sizeof(struct rtc_ui_opr));
|
|||
|
}
|
|||
|
__this->dev_handle = dev_open("rtc", NULL);
|
|||
|
|
|||
|
if (!__this->dev_handle) {
|
|||
|
free(__this);
|
|||
|
__this = NULL;
|
|||
|
return NULL;
|
|||
|
}
|
|||
|
|
|||
|
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);
|
|||
|
|
|||
|
|
|||
|
if (hd) {
|
|||
|
LCD_API *dis = (LCD_API *)hd;
|
|||
|
dis->lock(1);
|
|||
|
dis->clear();
|
|||
|
dis->setXY(0, 0);
|
|||
|
dis->lock(0);
|
|||
|
}
|
|||
|
return NULL;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static void ui_close_rtc(void *hd, void *private)
|
|||
|
{
|
|||
|
LCD_API *dis = (LCD_API *)hd;
|
|||
|
if (!dis) {
|
|||
|
return;
|
|||
|
}
|
|||
|
if (__this) {
|
|||
|
free(__this);
|
|||
|
__this = NULL;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
static void ui_rtc_main(void *hd, void *private) //主界面显示
|
|||
|
{
|
|||
|
if (!hd) {
|
|||
|
return;
|
|||
|
}
|
|||
|
struct sys_time current_time;
|
|||
|
dev_ioctl(__this->dev_handle, IOCTL_GET_SYS_TIME, (u32)¤t_time);
|
|||
|
#if 1
|
|||
|
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);
|
|||
|
#endif
|
|||
|
ui_led7_show_curtime(hd, current_time.hour, current_time.min);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static int ui_rtc_user(void *hd, void *private, u8 menu, u32 arg)//子界面显示 //返回true不继续传递 ,返回false由common统一处理
|
|||
|
{
|
|||
|
int ret = true;
|
|||
|
LCD_API *dis = (LCD_API *)hd;
|
|||
|
if (!dis) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
switch (menu) {
|
|||
|
|
|||
|
case MENU_ALM_SET:
|
|||
|
case MENU_RTC_SET:
|
|||
|
ui_led7_show_RTC_user(hd, &(__this->ui_rtc));
|
|||
|
break;
|
|||
|
default:
|
|||
|
ret = false;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
return ret;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
const struct ui_dis_api rtc_main = {
|
|||
|
.ui = UI_RTC_MENU_MAIN,
|
|||
|
.open = ui_open_rtc,
|
|||
|
.ui_main = ui_rtc_main,
|
|||
|
.ui_user = ui_rtc_user,
|
|||
|
.close = ui_close_rtc,
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
#endif
|
|||
|
#endif
|