Files
rpi4b-temp-humidity/src/ui/viewdatescreen.c
T

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;
}