diff options
Diffstat (limited to 'apps/settings_menu.c')
-rw-r--r-- | apps/settings_menu.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/apps/settings_menu.c b/apps/settings_menu.c index db6499a313..4fa80676d8 100644 --- a/apps/settings_menu.c +++ b/apps/settings_menu.c | |||
@@ -521,7 +521,8 @@ static bool timedate_set(void) | |||
521 | timedate[3] = rtc_read(0x07); /* year */ | 521 | timedate[3] = rtc_read(0x07); /* year */ |
522 | timedate[4] = rtc_read(0x06); /* month */ | 522 | timedate[4] = rtc_read(0x06); /* month */ |
523 | timedate[5] = rtc_read(0x05); /* day */ | 523 | timedate[5] = rtc_read(0x05); /* day */ |
524 | /* day of week not read, calculated */ | 524 | |
525 | /* day of week not read, calculated in set_time() */ | ||
525 | /* hour */ | 526 | /* hour */ |
526 | timedate[0] = ((timedate[0] & 0x30) >> 4) * 10 + (timedate[0] & 0x0f); | 527 | timedate[0] = ((timedate[0] & 0x30) >> 4) * 10 + (timedate[0] & 0x0f); |
527 | /* minute */ | 528 | /* minute */ |
@@ -534,6 +535,29 @@ static bool timedate_set(void) | |||
534 | timedate[4] = ((timedate[4] & 0x10) >> 4) * 10 + (timedate[4] & 0x0f); | 535 | timedate[4] = ((timedate[4] & 0x10) >> 4) * 10 + (timedate[4] & 0x0f); |
535 | /* day */ | 536 | /* day */ |
536 | timedate[5] = ((timedate[5] & 0x30) >> 4) * 10 + (timedate[5] & 0x0f); | 537 | timedate[5] = ((timedate[5] & 0x30) >> 4) * 10 + (timedate[5] & 0x0f); |
538 | |||
539 | /* do some range checks */ | ||
540 | /* This prevents problems with time/date setting after a power loss */ | ||
541 | if (timedate[0] < 0 || timedate[0] > 23 || | ||
542 | timedate[1] < 0 || timedate[1] > 59 || | ||
543 | timedate[2] < 0 || timedate[2] > 59 || | ||
544 | timedate[3] < 0 || timedate[3] > 99 || | ||
545 | timedate[4] < 0 || timedate[4] > 12 || | ||
546 | timedate[5] < 0 || timedate[5] > 31) | ||
547 | { | ||
548 | /* hour */ | ||
549 | timedate[0] = 0; | ||
550 | /* minute */ | ||
551 | timedate[1] = 0; | ||
552 | /* second */ | ||
553 | timedate[2] = 0; | ||
554 | /* year */ | ||
555 | timedate[3] = 3; | ||
556 | /* month */ | ||
557 | timedate[4] = 1; | ||
558 | /* day */ | ||
559 | timedate[5] = 1; | ||
560 | } | ||
537 | #endif | 561 | #endif |
538 | 562 | ||
539 | result = set_time(str(LANG_TIME),timedate); | 563 | result = set_time(str(LANG_TIME),timedate); |