summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems/score/tod.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/score/include/rtems/score/tod.h')
-rw-r--r--cpukit/score/include/rtems/score/tod.h255
1 files changed, 255 insertions, 0 deletions
diff --git a/cpukit/score/include/rtems/score/tod.h b/cpukit/score/include/rtems/score/tod.h
new file mode 100644
index 0000000000..1208975cab
--- /dev/null
+++ b/cpukit/score/include/rtems/score/tod.h
@@ -0,0 +1,255 @@
+/**
+ * @file rtems/score/tod.h
+ *
+ * This include file contains all the constants and structures associated
+ * with the Time of Day Handler.
+ */
+
+/*
+ * COPYRIGHT (c) 1989-2008.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ *
+ * $Id$
+ */
+
+#ifndef _RTEMS_SCORE_TOD_H
+#define _RTEMS_SCORE_TOD_H
+
+#include <time.h>
+#include <rtems/score/timestamp.h>
+#include <rtems/score/basedefs.h> /* SCORE_EXTERN */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** @defgroup ScoreTODConstants TOD Constants
+ * The following constants are related to the time of day and are
+ * independent of RTEMS.
+ */
+/**@{*/
+
+/**
+ * This constant represents the number of seconds in a minute.
+ */
+#define TOD_SECONDS_PER_MINUTE (uint32_t)60
+
+/**
+ * This constant represents the number of minutes per hour.
+ */
+#define TOD_MINUTES_PER_HOUR (uint32_t)60
+
+/**
+ * This constant represents the number of months in a year.
+ */
+#define TOD_MONTHS_PER_YEAR (uint32_t)12
+
+/**
+ * This constant represents the number of days in a non-leap year.
+ */
+#define TOD_DAYS_PER_YEAR (uint32_t)365
+
+/**
+ * This constant represents the number of hours per day.
+ */
+#define TOD_HOURS_PER_DAY (uint32_t)24
+
+/**
+ * This constant represents the number of seconds in a day which does
+ * not include a leap second.
+ */
+#define TOD_SECONDS_PER_DAY (uint32_t) (TOD_SECONDS_PER_MINUTE * \
+ TOD_MINUTES_PER_HOUR * \
+ TOD_HOURS_PER_DAY)
+
+/**
+ * This constant represents the number of seconds in a non-leap year.
+ */
+#define TOD_SECONDS_PER_NON_LEAP_YEAR (365 * TOD_SECONDS_PER_DAY)
+
+/**
+ * This constant represents the number of millisecond in a second.
+ */
+#define TOD_MILLISECONDS_PER_SECOND (uint32_t)1000
+
+/**
+ * This constant represents the number of microseconds in a second.
+ */
+#define TOD_MICROSECONDS_PER_SECOND (uint32_t)1000000
+
+/**
+ * This constant represents the number of nanoseconds in a second.
+ */
+#define TOD_NANOSECONDS_PER_SECOND (uint32_t)1000000000
+
+/**
+ * This constant represents the number of nanoseconds in a mircosecond.
+ */
+#define TOD_NANOSECONDS_PER_MICROSECOND (uint32_t)1000
+
+/**@}*/
+
+/**
+ * Seconds from January 1, 1970 to January 1, 1988. Used to account for
+ * differences between POSIX API and RTEMS core. The timespec format time
+ * is kept in POSIX compliant form.
+ */
+#define TOD_SECONDS_1970_THROUGH_1988 \
+ (((1987 - 1970 + 1) * TOD_SECONDS_PER_NON_LEAP_YEAR) + \
+ (4 * TOD_SECONDS_PER_DAY))
+
+/** @brief RTEMS Epoch Year
+ *
+ * The following constant define the earliest year to which an
+ * time of day can be initialized. This is considered the
+ * epoch.
+ */
+#define TOD_BASE_YEAR 1988
+
+/**
+ * @defgroup ScoreTOD Time Of Day (TOD) Handler
+ *
+ * This handler encapsulates functionality used to manage time of day.
+ */
+/**@{*/
+
+/** @brief Is the Time Of Day Set
+ *
+ * This is true if the application has set the current
+ * time of day, and false otherwise.
+ */
+SCORE_EXTERN bool _TOD_Is_set;
+
+/** @brief Current Time of Day (Timespec)
+ * The following contains the current time of day.
+ */
+SCORE_EXTERN Timestamp_Control _TOD_Now;
+
+/** @brief Current Time of Day (Timespec)
+ * The following contains the running uptime.
+ */
+SCORE_EXTERN Timestamp_Control _TOD_Uptime;
+
+/** @brief Seconds Since RTEMS Epoch
+ * The following contains the number of seconds from 00:00:00
+ * January 1, TOD_BASE_YEAR until the current time of day.
+ */
+#define _TOD_Seconds_since_epoch() \
+ _Timestamp_Get_seconds(&_TOD_Now)
+
+/** @brief _TOD_Handler_initialization
+ *
+ * This routine performs the initialization necessary for this handler.
+ */
+void _TOD_Handler_initialization(void);
+
+/** @brief _TOD_Set
+ *
+ * This routine sets the current time of day to @a time and
+ * the equivalent SECONDS_SINCE_EPOCH.
+ */
+void _TOD_Set(
+ const struct timespec *time
+);
+
+/** @brief _TOD_Get
+ *
+ * This routine returns the current time of day with potential accuracy
+ * to the nanosecond.
+ *
+ * @param[in] time is a pointer to the time to be returned
+ */
+void _TOD_Get(
+ struct timespec *time
+);
+
+/** @brief _TOD_Get_uptime
+ *
+ * This routine returns the system uptime with potential accuracy
+ * to the nanosecond.
+ *
+ * @param[in] time is a pointer to the uptime to be returned
+ */
+void _TOD_Get_uptime(
+ Timestamp_Control *time
+);
+
+/** @brief _TOD_Get_uptime_as_timespec
+ *
+ * This routine returns the system uptime with potential accuracy
+ * to the nanosecond.
+ *
+ * @param[in] time is a pointer to the uptime to be returned
+ */
+void _TOD_Get_uptime_as_timespec(
+ struct timespec *time
+);
+
+/**
+ * This routine increments the ticks field of the current time of
+ * day at each clock tick.
+ */
+void _TOD_Tickle_ticks( void );
+
+/** @brief TOD_MILLISECONDS_TO_MICROSECONDS
+ *
+ * This routine converts an interval expressed in milliseconds to microseconds.
+ *
+ * @note This must be a macro so it can be used in "static" tables.
+ */
+#define TOD_MILLISECONDS_TO_MICROSECONDS(_ms) ((uint32_t)(_ms) * 1000L)
+
+/** @brief TOD_MICROSECONDS_TO_TICKS
+ *
+ * This routine converts an interval expressed in microseconds to ticks.
+ *
+ * @note This must be a macro so it can be used in "static" tables.
+ */
+uint32_t TOD_MICROSECONDS_TO_TICKS(
+ uint32_t microseconds
+);
+
+/** @brief TOD_MILLISECONDS_TO_TICKS
+ *
+ * This routine converts an interval expressed in milliseconds to ticks.
+ *
+ * @note This must be a macro so it can be used in "static" tables.
+ */
+uint32_t TOD_MILLISECONDS_TO_TICKS(
+ uint32_t milliseconds
+);
+
+/** @brief How many ticks in a second?
+ *
+ * This method returns the number of ticks in a second.
+ *
+ * @note If the clock tick value does not multiply evenly into a second
+ * then this number of ticks will be slightly shorter than a second.
+ */
+uint32_t TOD_TICKS_PER_SECOND_method(void);
+
+/** @brief Method to return number of ticks in a second
+ *
+ * This method exists to hide the fact that TOD_TICKS_PER_SECOND can not
+ * be implemented as a macro in a .h file due to visibility issues.
+ * The Configuration Table is not available to SuperCore .h files but
+ * is available to their .c files.
+ */
+#define TOD_TICKS_PER_SECOND TOD_TICKS_PER_SECOND_method()
+
+#ifndef __RTEMS_APPLICATION__
+#include <rtems/score/tod.inl>
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+/**@}*/
+
+#endif
+/* end of include file */