From 208f3b22d9c72383b3198f1be863d26e2916a7c9 Mon Sep 17 00:00:00 2001 From: Hugo Villeneuve Date: Mon, 9 Mar 2026 17:03:15 -0400 Subject: [PATCH] Add time option Change test option to "x" Signed-off-by: Hugo Villeneuve --- src/main.c | 30 ++++++++++++++++++++++++++++++ src/options.c | 6 +++++- src/options.h | 1 + 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 38c2d95..19a39d5 100644 --- a/src/main.c +++ b/src/main.c @@ -137,6 +137,24 @@ static int rtc_param_clear_vl_backup(int fd) return 0; } +/* Read the RTC time/date */ +static int rtc_get_time(int fd, struct rtc_time *rtc_tm) +{ + int rc; + + rc = ioctl(fd, RTC_RD_TIME, rtc_tm); + if (rc == -1) { + perror("RTC_RD_TIME ioctl"); + return -errno; + } + + printf("Current RTC date/time: %04d-%02d-%02d %02d:%02d:%02d\n", + rtc_tm->tm_year + 1900, rtc_tm->tm_mon + 1, rtc_tm->tm_mday, + rtc_tm->tm_hour, rtc_tm->tm_min, rtc_tm->tm_sec); + + return 0; +} + static int rtc_test_uie(int fd) { unsigned long data; @@ -221,6 +239,10 @@ static int rtc_test_read(int fd) unsigned long data; int rc; + rc = rtc_get_time(fd, &rtc_tm); + if (rc < 0) + return rc; + /* Read the RTC time/date */ rc = ioctl(fd, RTC_RD_TIME, &rtc_tm); if (rc == -1) { @@ -434,6 +456,14 @@ main(int argc, char **argv) exit(rc); } + if (options.time) { + struct rtc_time rtc_tm; + + rc = rtc_get_time(fd, &rtc_tm); + if (rc < 0) + exit(rc); + } + if (options.test) { rc = rtc_test(fd); if (rc < 0) diff --git a/src/options.c b/src/options.c index 930ba0f..68eb3d1 100644 --- a/src/options.c +++ b/src/options.c @@ -61,7 +61,8 @@ static struct argp_option argp_options[] = { {0, 0, 0, 0, ARGP_BSM_STR, 0}, {"clear", 'c', 0, 0, "Clear \"voltage low\" event", 0}, {"dev", 'd', "path", 0, "RTC device path (optional)", 0}, - {"test", 't', 0, 0, "Test RTC", 0}, + {"test", 'x', 0, 0, "Test RTC", 0}, + {"time", 't', 0, 0, "Get RTC time", 0}, {"voltage-level", 'v', 0, 0, "Get battery backup voltage level", 0}, /* * Add -h manually; OPTION_HIDDEN prevents it from appearing twice in --help. @@ -138,6 +139,9 @@ parse_opt(int key, char *arg, struct argp_state *state) argp_usage(state); break; case 't': + options.time = true; + break; + case 'x': options.test = true; break; case 'v': diff --git a/src/options.h b/src/options.h index c643ee5..97685e4 100644 --- a/src/options.h +++ b/src/options.h @@ -22,6 +22,7 @@ struct options_t { int vl_backup; int clear; int test; + int time; }; int parse_command_line_options(int argc, char *argv[]); -- 2.47.3