diff --git a/boards/native/Makefile.features b/boards/native/Makefile.features index 2c1e59376..251d81bea 100644 --- a/boards/native/Makefile.features +++ b/boards/native/Makefile.features @@ -1,2 +1,3 @@ FEATURES_PROVIDED += transceiver periph_cpuid cpp FEATURES_PROVIDED += periph_random +FEATURES_PROVIDED += periph_rtc diff --git a/cpu/native/Makefile b/cpu/native/Makefile index 628d7eb5a..7447a2006 100644 --- a/cpu/native/Makefile +++ b/cpu/native/Makefile @@ -1,7 +1,6 @@ MODULE = cpu DIRS += periph -DIRS += drivers ifneq (,$(filter nativenet,$(USEMODULE))) DIRS += net endif diff --git a/cpu/native/drivers/Makefile b/cpu/native/drivers/Makefile deleted file mode 100644 index 439af37cd..000000000 --- a/cpu/native/drivers/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -ifneq (,$(filter rtc,$(USEMODULE))) - DIRS += rtc -endif - -include $(RIOTBASE)/Makefile.base diff --git a/cpu/native/drivers/rtc/Makefile b/cpu/native/drivers/rtc/Makefile deleted file mode 100644 index 7d178b617..000000000 --- a/cpu/native/drivers/rtc/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -include $(RIOTBASE)/Makefile.base - -INCLUDES = $(NATIVEINCLUDES) diff --git a/cpu/native/drivers/rtc/posix-rtc.c b/cpu/native/drivers/rtc/posix-rtc.c deleted file mode 100644 index 95aa42406..000000000 --- a/cpu/native/drivers/rtc/posix-rtc.c +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Native CPU rtc.h implementation - * - * The native rtc implementation uses POSIX system calls to simulate a - * real-time clock. - * - * Setting the clock will be implemented using a delta variable. - * - * Copyright (C) 2013 Ludwig Ortmann - * - * This file is subject to the terms and conditions of the GNU Lesser - * General Public License v2.1. See the file LICENSE in the top level - * directory for more details. - * - * @author Ludwig Ortmann - * - * @ingroup native_cpu - * @ingroup rtc - * @file - */ - -#include -#include -#include - -#include "debug.h" - -#include "rtc.h" -#include "cpu.h" - -#include "native_internal.h" - -static int native_rtc_enabled; -static int native_rtc_initialized; - -void rtc_init(void) -{ - native_rtc_enabled = 0; - native_rtc_initialized = 1; - printf("native rtc initialized\n"); -} - -void rtc_enable(void) -{ - DEBUG("rtc_enable\n"); - if (native_rtc_initialized == 1) { - native_rtc_enabled = 1; - } - else { - DEBUG("rtc not initialized, not enabling\n"); - } -} - -void rtc_disable(void) -{ - DEBUG("rtc_disable()\n"); - native_rtc_enabled = 0; -} - -void rtc_set_localtime(struct tm *localt) -{ - DEBUG("rtc_set_localtime()\n"); - - (void)localt; /* not implemented atm */ - printf("setting time not supported."); -} - -void rtc_get_localtime(struct tm *localt) -{ - time_t t; - - if (native_rtc_enabled == 1) { - _native_syscall_enter(); - t = time(NULL); - - if (localtime_r(&t, localt) == NULL) { - err(EXIT_FAILURE, "rtc_get_localtime: localtime_r"); - } - _native_syscall_leave(); - } -} - -time_t rtc_time(struct timeval *time) -{ - if (native_rtc_enabled == 1) { - _native_syscall_enter(); - if (gettimeofday(time, NULL) == -1) { - err(EXIT_FAILURE, "rtc_time: gettimeofday"); - } - _native_syscall_leave(); - } - return time->tv_sec; -} diff --git a/cpu/native/include/periph_conf.h b/cpu/native/include/periph_conf.h index 077441805..a4655e110 100644 --- a/cpu/native/include/periph_conf.h +++ b/cpu/native/include/periph_conf.h @@ -27,6 +27,13 @@ #define RANDOM_NUMOF (1U) /** @} */ +/** + * @name RealTime Clock configuration + * @{ + */ +#define RTC_NUMOF (1) +/** @} */ + #ifdef __cplusplus } #endif diff --git a/cpu/native/periph/rtc.c b/cpu/native/periph/rtc.c new file mode 100644 index 000000000..3a46e3c2a --- /dev/null +++ b/cpu/native/periph/rtc.c @@ -0,0 +1,111 @@ +/** + * Native CPU periph/rtc.h implementation + * + * The native rtc implementation uses POSIX system calls to simulate a + * real-time clock. + * + * Setting the clock will be implemented using a delta variable. + * + * Copyright (C) 2013 Ludwig Ortmann + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + * + * @author Ludwig Ortmann + * + * @ingroup native_cpu + * @ingroup rtc + * @file + */ + +#include +#include +#include + +#include "debug.h" + +#include "periph/rtc.h" +#include "cpu.h" + +#include "native_internal.h" + +static int native_rtc_powered; +static int native_rtc_initialized; + +void rtc_init(void) +{ + native_rtc_powered = 0; + native_rtc_initialized = 1; + printf("Native RTC initialized.\n"); + rtc_poweron(); +} + +void rtc_poweron(void) +{ + DEBUG("rtc_poweron\n"); + if (native_rtc_initialized == 1) { + native_rtc_powered = 1; + } + else { + DEBUG("rtc not initialized, not powering on\n"); + } +} + +void rtc_poweroff(void) +{ + DEBUG("rtc_poweroff()\n"); + native_rtc_powered = 0; +} + +int rtc_set_time(struct tm *ttime) +{ + DEBUG("rtc_set_time()\n"); + + (void)ttime; /* not implemented atm */ + printf("setting time not supported."); + + return -1; +} + +int rtc_get_time(struct tm *ttime) +{ + time_t t; + + if (native_rtc_powered == 1) { + _native_syscall_enter(); + t = time(NULL); + + if (localtime_r(&t, ttime) == NULL) { + err(EXIT_FAILURE, "rtc_get_time: localtime_r"); + } + _native_syscall_leave(); + } + + return 0; +} + +int rtc_set_alarm(struct tm *time, rtc_alarm_cb_t cb, void *arg) +{ + (void) time; + (void) cb; + (void) arg; + + warnx("rtc_set_alarm: not implemeted"); + + return -1; +} + +int rtc_get_alarm(struct tm *time) +{ + (void) time; + + warnx("rtc_get_alarm: not implemeted"); + + return -1; +} + +void rtc_clear_alarm(void) +{ + warnx("rtc_clear_alarm: not implemeted"); +} diff --git a/examples/default/Makefile b/examples/default/Makefile index cfb50016c..dfe50e843 100644 --- a/examples/default/Makefile +++ b/examples/default/Makefile @@ -51,7 +51,6 @@ ifneq (,$(filter msba2,$(BOARD))) endif ifneq (,$(filter native,$(BOARD))) USEMODULE += ltc4150 - USEMODULE += rtc USEMODULE += config USEMODULE += random endif