46 lines
1.7 KiB
C
46 lines
1.7 KiB
C
/*
|
|
* viewdatescreen.c - Screen for viewing the date and time
|
|
* Copyright (C) 2024 Alexander Rosenberg
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify it under
|
|
* the terms of the GNU General Public License as published by the Free Software
|
|
* Foundation, either version 3 of the License, or (at your option) any later
|
|
* version. See the LICENSE file for more information.
|
|
*/
|
|
#include "viewdatescreen.h"
|
|
|
|
#include <limits.h>
|
|
|
|
static bool view_date_screen_dispatch(ViewDateScreen *screen,
|
|
SensorState *state) {
|
|
time_t now = time(NULL);
|
|
if (state->back_down || state->sel_down || state->up_down ||
|
|
state->down_down) {
|
|
return true;
|
|
} else if (state->force_draw || now != screen->last_time) {
|
|
screen->last_time = now;
|
|
lcd_clear(state->lcd);
|
|
struct tm broken_time;
|
|
localtime_r(&now, &broken_time);
|
|
char buf[17];
|
|
snprintf(buf, 17, "%04d/%02d/%02d", broken_time.tm_year + 1900,
|
|
broken_time.tm_mon + 1, broken_time.tm_mday);
|
|
lcd_move_to(state->lcd, 0, 0);
|
|
lcd_write_string(state->lcd, buf);
|
|
snprintf(buf, 17, "%02d:%02d:%02d", broken_time.tm_hour,
|
|
broken_time.tm_min, broken_time.tm_sec);
|
|
lcd_move_to(state->lcd, 1, 0);
|
|
lcd_write_string(state->lcd, buf);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
ViewDateScreen *view_date_screen_new() {
|
|
ViewDateScreen *s = malloc_checked(sizeof(ViewDateScreen));
|
|
screen_init(&s->parent, "View date/time",
|
|
(ScreenDispatchFunc) view_date_screen_dispatch,
|
|
(ScreenCleanupFunc) free);
|
|
s->last_time = INT64_MIN;
|
|
return s;
|
|
}
|