]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - avr/cmd_date.c
RTC: Handle turn of the year correctly, detect uninitialized RTC (loss of VBAT)
[z180-stamp.git] / avr / cmd_date.c
index efba8584f9790e21160284b5323b3e961b096072..3e2e01680513df316623da108b4112761cf67a29 100644 (file)
@@ -129,16 +129,18 @@ command_ret_t do_date(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        struct tm t;
        char buf[30];
-       int rcode = CMD_RET_SUCCESS;
+       int rc;
+       command_ret_t rcode = CMD_RET_FAILURE;
 
        (void) cmdtp; (void) flag;
 
        switch (argc) {
        case 2:                 /* set date & time */
                /* initialize t with current time */
-               rcode = rtc_get (&t);
-
-               if(!rcode) {
+               if(rtc_get(&t) < 0) {
+                       my_puts_P(PSTR("## Get date failed\n"));
+                       break;
+               } else {
                        /* insert new date & time */
                        if (mk_date (argv[1], &t) != 0) {
                                my_puts_P(PSTR("## Bad date format\n"));
@@ -150,22 +152,24 @@ command_ret_t do_date(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                        gmtime_r(&time, &t);
 
                        /* and write to RTC */
-                       rcode = rtc_set (&t);
-                       if(rcode)
+                       if(rtc_set(&t) < 0) {
                                my_puts_P(PSTR("## Set date failed\n"));
-               } else {
-                       my_puts_P(PSTR("## Get date failed\n"));
+                               break;
+                       }
                }
                /* FALL TROUGH */
        case 1:                 /* get date & time */
-               rcode = rtc_get (&t);
-
-               if (rcode) {
+               rc = rtc_get(&t);
+               if (rc >= 0) {
+                       asctime_r(&t, buf);
+                       printf_P(PSTR("%s"), buf);
+                       if (rc == 1)
+                               printf_P(PSTR("  (Invalid)"));
+                       putchar('\n');
+                       rcode = CMD_RET_SUCCESS;
+               } else {
                        my_puts_P(PSTR("## Get date failed\n"));
-                       break;
                }
-               asctime_r(&t, buf);
-               printf_P(PSTR("%s\n"), buf);
                break;
 
        default: