Lancaster University's (short term!) clone of mbed-src for micro:bit. This is a copy of the github branch https://github.com/lancaster-university/mbed-classic
Fork of mbed-src by
Diff: common/rtc_time.c
- Revision:
- 489:119543c9f674
- Parent:
- 221:8276e3a4886f
--- a/common/rtc_time.c Thu Mar 05 13:15:07 2015 +0000 +++ b/common/rtc_time.c Thu Mar 12 14:30:49 2015 +0000 @@ -19,6 +19,18 @@ #include "rtc_time.h" #include "us_ticker_api.h" +#if DEVICE_RTC +static void (*_rtc_init)(void) = rtc_init; +static int (*_rtc_isenabled)(void) = rtc_isenabled; +static time_t (*_rtc_read)(void) = rtc_read; +static void (*_rtc_write)(time_t t) = rtc_write; +#else +static void (*_rtc_init)(void) = NULL; +static int (*_rtc_isenabled)(void) = NULL; +static time_t (*_rtc_read)(void) = NULL; +static void (*_rtc_write)(time_t t) = NULL; +#endif + #ifdef __cplusplus extern "C" { #endif @@ -29,15 +41,16 @@ #endif { -#if DEVICE_RTC - if (!(rtc_isenabled())) { - set_time(0); + if (_rtc_isenabled != NULL) { + if (!(_rtc_isenabled())) { + set_time(0); + } } - time_t t = rtc_read(); - -#else + time_t t = 0; -#endif + if (_rtc_read != NULL) { + t = _rtc_read(); + } if (timer != NULL) { *timer = t; @@ -46,10 +59,12 @@ } void set_time(time_t t) { -#if DEVICE_RTC - rtc_init(); - rtc_write(t); -#endif + if (_rtc_init != NULL) { + _rtc_init(); + } + if (_rtc_write != NULL) { + _rtc_write(t); + } } clock_t clock() { @@ -58,6 +73,17 @@ return t; } +void attach_rtc(time_t (*read_rtc)(void), void (*write_rtc)(time_t), void (*init_rtc)(void), int (*isenabled_rtc)(void)) { + __disable_irq(); + _rtc_read = read_rtc; + _rtc_write = write_rtc; + _rtc_init = init_rtc; + _rtc_isenabled = isenabled_rtc; + __enable_irq(); +} + + + #ifdef __cplusplus } #endif