From 0fae66fac2bae3cb0b950530360a9d33ec1a7378 Mon Sep 17 00:00:00 2001 From: ikari Date: Tue, 8 Feb 2011 01:00:19 +0100 Subject: [PATCH] firmware: RTC setting via CLI --- src/cli.c | 40 ++++++++++++++++++++++++++++++++++++++-- src/rtc.c | 2 +- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/cli.c b/src/cli.c index 1eddea9..5db7479 100644 --- a/src/cli.c +++ b/src/cli.c @@ -46,6 +46,7 @@ #include "fpga_spi.h" #include "cic.h" #include "xmodem.h" +#include "rtc.h" #include "cli.h" @@ -57,8 +58,8 @@ static char *curchar; /* Word lists */ static char command_words[] = - "cd\0reset\0dir\0ls\0test\0resume\0loadrom\0loadraw\0saveraw\0put\0d4\0vmode\0mapper\0"; -enum { CMD_CD = 0, CMD_RESET, CMD_DIR, CMD_LS, CMD_TEST, CMD_RESUME, CMD_LOADROM, CMD_LOADRAW, CMD_SAVERAW, CMD_PUT, CMD_D4, CMD_VMODE, CMD_MAPPER }; + "cd\0reset\0dir\0ls\0test\0resume\0loadrom\0loadraw\0saveraw\0put\0d4\0vmode\0mapper\0settime\0time\0"; +enum { CMD_CD = 0, CMD_RESET, CMD_DIR, CMD_LS, CMD_TEST, CMD_RESUME, CMD_LOADROM, CMD_LOADRAW, CMD_SAVERAW, CMD_PUT, CMD_D4, CMD_VMODE, CMD_MAPPER, CMD_SETTIME, CMD_TIME }; /* ------------------------------------------------------------------------- */ /* Parse functions */ @@ -372,6 +373,33 @@ void cmd_mapper(void) { printf("mapper set to %ld\n", mapper); } +void cmd_settime(void) { + struct tm time; + if(strlen(curchar) != 4+2+2 + 2+2+2) { + printf("invalid time format (need YYYYMMDDhhmmss)\n"); + } else { + time.tm_sec = atoi(curchar+4+2+2+2+2); + curchar[4+2+2+2+2] = 0; + time.tm_min = atoi(curchar+4+2+2+2); + curchar[4+2+2+2] = 0; + time.tm_hour = atoi(curchar+4+2+2); + curchar[4+2+2] = 0; + time.tm_mday = atoi(curchar+4+2); + curchar[4+2] = 0; + time.tm_mon = atoi(curchar+4); + curchar[4] = 0; + time.tm_year = atoi(curchar) - 1900; + set_rtc(&time); + } +} + +void cmd_time(void) { + struct tm time; + read_rtc(&time); + printf("%04d-%02d-%02d %02d:%02d:%02d\n", time.tm_year+1900, time.tm_mon, + time.tm_mday, time.tm_hour, time.tm_min, time.tm_sec); +} + /* ------------------------------------------------------------------------- */ /* CLI interface functions */ /* ------------------------------------------------------------------------- */ @@ -477,6 +505,14 @@ void cli_loop(void) { case CMD_MAPPER: cmd_mapper(); break; + + case CMD_SETTIME: + cmd_settime(); + break; + + case CMD_TIME: + cmd_time(); + break; } } } diff --git a/src/rtc.c b/src/rtc.c index 5f379cd..5e54036 100644 --- a/src/rtc.c +++ b/src/rtc.c @@ -46,7 +46,7 @@ uint32_t get_fattime(void) { read_rtc(&time); return ((uint32_t)time.tm_year-80) << 25 | - ((uint32_t)time.tm_mon+1) << 21 | + ((uint32_t)time.tm_mon) << 21 | ((uint32_t)time.tm_mday) << 16 | ((uint32_t)time.tm_hour) << 11 | ((uint32_t)time.tm_min) << 5 |