mbed library sources

Fork of mbed-src by mbed official

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