diff options
Diffstat (limited to 'firmware/common')
-rw-r--r-- | firmware/common/timefuncs.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/firmware/common/timefuncs.c b/firmware/common/timefuncs.c index 81d5c493ec..19033a504e 100644 --- a/firmware/common/timefuncs.c +++ b/firmware/common/timefuncs.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <stdio.h> /* get NULL */ | 20 | #include <stdio.h> /* get NULL */ |
21 | #include "config.h" | 21 | #include "config.h" |
22 | 22 | ||
23 | #include "kernel.h" | ||
23 | #include "rtc.h" | 24 | #include "rtc.h" |
24 | #include "timefuncs.h" | 25 | #include "timefuncs.h" |
25 | #include "debug.h" | 26 | #include "debug.h" |
@@ -42,25 +43,29 @@ bool valid_time(const struct tm *tm) | |||
42 | return true; | 43 | return true; |
43 | } | 44 | } |
44 | 45 | ||
46 | static int last_tick = 0; | ||
45 | 47 | ||
46 | struct tm *get_time(void) | 48 | struct tm *get_time(void) |
47 | { | 49 | { |
48 | #ifndef SIMULATOR | 50 | #ifndef SIMULATOR |
49 | #ifdef CONFIG_RTC | 51 | #ifdef CONFIG_RTC |
50 | char rtcbuf[7]; | ||
51 | 52 | ||
52 | rtc_read_datetime(rtcbuf); | 53 | /* Don't read the RTC more than 4 times per second */ |
54 | if (last_tick + HZ/4 < current_tick) { | ||
55 | char rtcbuf[7]; | ||
56 | rtc_read_datetime(rtcbuf); | ||
53 | 57 | ||
54 | tm.tm_sec = ((rtcbuf[0] & 0x70) >> 4) * 10 + (rtcbuf[0] & 0x0f); | 58 | tm.tm_sec = ((rtcbuf[0] & 0x70) >> 4) * 10 + (rtcbuf[0] & 0x0f); |
55 | tm.tm_min = ((rtcbuf[1] & 0x70) >> 4) * 10 + (rtcbuf[1] & 0x0f); | 59 | tm.tm_min = ((rtcbuf[1] & 0x70) >> 4) * 10 + (rtcbuf[1] & 0x0f); |
56 | tm.tm_hour = ((rtcbuf[2] & 0x30) >> 4) * 10 + (rtcbuf[2] & 0x0f); | 60 | tm.tm_hour = ((rtcbuf[2] & 0x30) >> 4) * 10 + (rtcbuf[2] & 0x0f); |
57 | tm.tm_wday = rtcbuf[3] & 0x07; | 61 | tm.tm_wday = rtcbuf[3] & 0x07; |
58 | tm.tm_mday = ((rtcbuf[4] & 0x30) >> 4) * 10 + (rtcbuf[4] & 0x0f); | 62 | tm.tm_mday = ((rtcbuf[4] & 0x30) >> 4) * 10 + (rtcbuf[4] & 0x0f); |
59 | tm.tm_mon = ((rtcbuf[5] & 0x10) >> 4) * 10 + (rtcbuf[5] & 0x0f) - 1; | 63 | tm.tm_mon = ((rtcbuf[5] & 0x10) >> 4) * 10 + (rtcbuf[5] & 0x0f) - 1; |
60 | tm.tm_year = ((rtcbuf[6] & 0xf0) >> 4) * 10 + (rtcbuf[6] & 0x0f) + 100; | 64 | tm.tm_year = ((rtcbuf[6] & 0xf0) >> 4) * 10 + (rtcbuf[6] & 0x0f) + 100; |
61 | 65 | ||
62 | tm.tm_yday = 0; /* Not implemented for now */ | 66 | tm.tm_yday = 0; /* Not implemented for now */ |
63 | tm.tm_isdst = -1; /* Not implemented for now */ | 67 | tm.tm_isdst = -1; /* Not implemented for now */ |
68 | } | ||
64 | #else | 69 | #else |
65 | tm.tm_sec = 0; | 70 | tm.tm_sec = 0; |
66 | tm.tm_min = 0; | 71 | tm.tm_min = 0; |