summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/src/clockget.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1999-05-17 22:42:47 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1999-05-17 22:42:47 +0000
commitbd83f4738f0f6d071dee6601f0b71abf27f80469 (patch)
tree933ade771196c5ec219ec5b4967a5dbb2e9cb524 /cpukit/rtems/src/clockget.c
parentSplit Region Manager into one routine per file. (diff)
downloadrtems-bd83f4738f0f6d071dee6601f0b71abf27f80469.tar.bz2
Split Clock Manager into one routine per file.
Diffstat (limited to 'cpukit/rtems/src/clockget.c')
-rw-r--r--cpukit/rtems/src/clockget.c90
1 files changed, 90 insertions, 0 deletions
diff --git a/cpukit/rtems/src/clockget.c b/cpukit/rtems/src/clockget.c
new file mode 100644
index 0000000000..d6b7173eec
--- /dev/null
+++ b/cpukit/rtems/src/clockget.c
@@ -0,0 +1,90 @@
+/*
+ * Clock Manager
+ *
+ * COPYRIGHT (c) 1989-1998.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#include <rtems/system.h>
+#include <rtems/rtems/status.h>
+#include <rtems/rtems/clock.h>
+#include <rtems/score/isr.h>
+#include <rtems/score/thread.h>
+#include <rtems/score/tod.h>
+#include <rtems/score/watchdog.h>
+
+/*PAGE
+ *
+ * rtems_clock_get
+ *
+ * This directive returns the current date and time. If the time has
+ * not been set by a tm_set then an error is returned.
+ *
+ * Input parameters:
+ * option - which value to return
+ * time_buffer - pointer to output buffer (a time and date structure
+ * or an interval)
+ *
+ * Output parameters:
+ * time_buffer - output filled in
+ * RTEMS_SUCCESSFUL - if successful
+ * error code - if unsuccessful
+ */
+
+rtems_status_code rtems_clock_get(
+ rtems_clock_get_options option,
+ void *time_buffer
+)
+{
+ ISR_Level level;
+ rtems_interval tmp;
+
+ switch ( option ) {
+ case RTEMS_CLOCK_GET_TOD:
+ if ( !_TOD_Is_set )
+ return RTEMS_NOT_DEFINED;
+
+ *(rtems_time_of_day *)time_buffer = _TOD_Current;
+ return RTEMS_SUCCESSFUL;
+
+ case RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH:
+ if ( !_TOD_Is_set )
+ return RTEMS_NOT_DEFINED;
+
+ *(rtems_interval *)time_buffer = _TOD_Seconds_since_epoch;
+ return RTEMS_SUCCESSFUL;
+
+ case RTEMS_CLOCK_GET_TICKS_SINCE_BOOT:
+ *(rtems_interval *)time_buffer = _Watchdog_Ticks_since_boot;
+ return RTEMS_SUCCESSFUL;
+
+ case RTEMS_CLOCK_GET_TICKS_PER_SECOND:
+ *(rtems_interval *)time_buffer = _TOD_Ticks_per_second;
+ return RTEMS_SUCCESSFUL;
+
+ case RTEMS_CLOCK_GET_TIME_VALUE:
+ if ( !_TOD_Is_set )
+ return RTEMS_NOT_DEFINED;
+
+ _ISR_Disable( level );
+ ((rtems_clock_time_value *)time_buffer)->seconds =
+ _TOD_Seconds_since_epoch;
+ tmp = _TOD_Current.ticks;
+ _ISR_Enable( level );
+
+ tmp *= _TOD_Microseconds_per_tick;
+ ((rtems_clock_time_value *)time_buffer)->microseconds = tmp;
+
+ return RTEMS_SUCCESSFUL;
+ }
+
+ return RTEMS_INTERNAL_ERROR; /* should never get here */
+
+}