summaryrefslogtreecommitdiff
path: root/nuttx/include
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-04-15 14:57:53 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-04-15 14:57:53 +0000
commitf1893cbaf513c7f0fbca77240fc59707ad039734 (patch)
tree4a5128533aa866afa19719584a764f0f83b9d165 /nuttx/include
parentc548df2a3788bfe7527f7fef439d1365cb095e7c (diff)
downloadpx4-nuttx-f1893cbaf513c7f0fbca77240fc59707ad039734.tar.gz
px4-nuttx-f1893cbaf513c7f0fbca77240fc59707ad039734.tar.bz2
px4-nuttx-f1893cbaf513c7f0fbca77240fc59707ad039734.zip
Add time and uptime
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3506 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/include')
-rw-r--r--nuttx/include/nuttx/clock.h68
-rwxr-xr-xnuttx/include/nuttx/ptimer.h (renamed from nuttx/include/nuttx/rtc.h)49
-rw-r--r--nuttx/include/sys/syscall.h16
3 files changed, 90 insertions, 43 deletions
diff --git a/nuttx/include/nuttx/clock.h b/nuttx/include/nuttx/clock.h
index 9a9523a2e..e06d2c0dd 100644
--- a/nuttx/include/nuttx/clock.h
+++ b/nuttx/include/nuttx/clock.h
@@ -41,13 +41,42 @@
****************************************************************************/
#include <nuttx/config.h>
+
#include <stdint.h>
+#include <time.h>
/****************************************************************************
* Pro-processor Definitions
****************************************************************************/
+/* Configuration ************************************************************/
+/* Access to raw system clock ***********************************************/
+/* The system timer/counter is supported only if (1) the system clock is not
+ * disabled and (2) we are not configured to use a hardware periodic timer
+ * for system time.
+ */
+
+#undef __HAVE_SYSTEM_COUNTER
+#if !defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_PTIMER)
+# define __HAVE_SYSTEM_COUNTER 1
+#else
+# define __HAVE_SYSTEM_COUNTER 0
+#endif
+
+/* Efficient, direct access to OS global timer variables will be supported
+ * if the execution environment has direct access to kernel global data.
+ * The code in this execution context can access the kernel global data
+ * directly if: (1) this is an un-protected, non-kernel build, or (2)
+ * this code is being built for execution within the kernel.
+ */
+
+#undef __HAVE_KERNEL_GLOBALS
+#if !defined(CONFIG_NUTTX_KERNEL) || defined(__KERNEL__)
+# define __HAVE_KERNEL_GLOBALS 1
+#else
+# define __HAVE_KERNEL_GLOBALS 0
+#endif
-/* Timing constants */
+/* Timing constants *********************************************************/
#define NSEC_PER_SEC 1000000000
#define USEC_PER_SEC 1000000
@@ -100,22 +129,30 @@
* Global Data
****************************************************************************/
+#if !defined(CONFIG_DISABLE_CLOCK)
+
/* Access to raw system clock ***********************************************/
/* Direct access to the system timer/counter is supported only if (1) the
- * system clock is not disabled and (2) the executation environement has
- * direct access to kernel global data.
- *
- * The code in this execution context can access the kernel global data
- * directly if: (1) this is an un-protected, non-kernel build, or (2)
- * this code is being built for execution within the kernel.
+ * system timer counter is available (i.e., we are not configured to use
+ * a hardware periodic timer), and (2) the execution environment has direct
+ * access to kernel global data
*/
-#if !defined(CONFIG_DISABLE_CLOCK) && \
- (!defined(CONFIG_NUTTX_KERNEL) || defined(__KERNEL__))
+#if !defined(CONFIG_PTIMER) && __HAVE_KERNEL_GLOBALS
extern volatile uint32_t g_system_timer;
#define clock_systimer() g_system_timer
#endif
+/* System uptime (in seconds) is only supported by periodic timer hardware */
+
+#if defined(CONFIG_UPTIME)
+extern volatile uint32_t g_uptime;
+
+#if __HAVE_KERNEL_GLOBALS
+# define clock_uptime() g_uptime
+#endif
+#endif
+
/****************************************************************************
* Global Function Prototypes
****************************************************************************/
@@ -131,18 +168,23 @@ extern "C" {
#define EXTERN extern
#endif
-/* If direct access to the system timer/counter is not supported (see above),
- * then the value can be obtained via clock_systimer through a system call.
+/* Indirect access to the system time is required if (1) we are using a
+ * hardware periodic timer, OR (2) the execution environment does not have
+ * direct access to kernel global data
*/
-#if !defined(CONFIG_DISABLE_CLOCK) && \
- defined(CONFIG_NUTTX_KERNEL) && !defined(__KERNEL__)
+#if defined(CONFIG_PTIMER) || !__HAVE_KERNEL_GLOBALS
EXTERN uint32_t clock_systimer(void);
#endif
+#if defined(CONFIG_UPTIME) && !__HAVE_KERNEL_GLOBALS
+EXTERN time_t clock_uptime(void);
+#endif
+
#undef EXTERN
#ifdef __cplusplus
}
#endif
+#endif /* !CONFIG_DISABLE_CLOCK */
#endif /* __NUTTX_CLOCK_H */
diff --git a/nuttx/include/nuttx/rtc.h b/nuttx/include/nuttx/ptimer.h
index 7c3028053..b5b5d65ae 100755
--- a/nuttx/include/nuttx/rtc.h
+++ b/nuttx/include/nuttx/ptimer.h
@@ -1,5 +1,5 @@
/****************************************************************************
- * include/nuttx/rtc.h
+ * include/nuttx/ptimer.h
*
* Copyright(C) 2011 Uros Platise. All rights reserved.
* Author: Uros Platise <uros.platise@isotel.eu>
@@ -33,8 +33,8 @@
*
****************************************************************************/
-#ifndef __INCLUDE_NUTTX_RTC_H
-#define __INCLUDE_NUTTX_RTC_H
+#ifndef __INCLUDE_NUTTX_PTIMER_H
+#define __INCLUDE_NUTTX_PTIMER_H
/****************************************************************************
* Included Files
@@ -62,32 +62,32 @@
* Public Types
****************************************************************************/
-/* The type of the RTC callback function */
+/* The type of the periodic timer callback function */
-typedef void (*rtc_handler_t)(FAR void *arg);
+typedef void (*ptimer_handler_t)(FAR void *arg);
-/* The RTC vtable */
+/* The periodic timer vtable */
-struct rtc_dev_s;
-struct rtc_ops_s
+struct ptimer_dev_s;
+struct ptimer_ops_s
{
- int (*trigger)(FAR struct rtc_dev_s *dev, FAR void *arg);
- int (*add)(FAR struct rtc_dev_s *dev, FAR void *arg, clock_t period);
- int (*set)(FAR struct rtc_dev_s *dev, FAR void *arg, clock_t period);
- int (*clear)(FAR struct rtc_dev_s *dev, FAR void *arg);
- clock_t (*remainder)(FAR struct rtc_dev_s *dev, FAR void *arg);
- clock_t (*overrun)(FAR struct rtc_dev_s *dev, FAR void *arg);
- int (*exec)(FAR struct rtc_dev_s *dev, clock_t timeout);
+ int (*trigger)(FAR struct ptimer_dev_s *dev, FAR void *arg);
+ int (*add)(FAR struct ptimer_dev_s *dev, FAR void *arg, clock_t period);
+ int (*set)(FAR struct ptimer_dev_s *dev, FAR void *arg, clock_t period);
+ int (*clear)(FAR struct ptimer_dev_s *dev, FAR void *arg);
+ clock_t (*remainder)(FAR struct ptimer_dev_s *dev, FAR void *arg);
+ clock_t (*overrun)(FAR struct ptimer_dev_s *dev, FAR void *arg);
+ int (*exec)(FAR struct ptimer_dev_s *dev, clock_t timeout);
};
-/* RTC private data. This structure only defines the initial fields of the
+/* PTIMER private data. This structure only defines the initial fields of the
* structure visible to the SPI client. The specific implementation may
* add additional, device specific fields
*/
-struct rtc_dev_s
+struct ptimer_dev_s
{
- FAR const struct rtc_ops_s *ops;
+ FAR const struct ptimer_ops_s *ops;
};
/****************************************************************************
@@ -103,22 +103,21 @@ extern "C" {
#endif
/****************************************************************************
- * Name: up_rtcinitialize
+ * Name: up_ptimerinitialize
*
* Description:
- * Initialize the RTC interface. This function may be called to obtain
- * multiple instances of the interface
+ * Initialize the periodic timer interface. This function may be called to
+ * obtian multiple instances of the interface
*
* Returned Value:
- * Valid RTC device structre reference on succcess; a NULL on failure
+ * Valid peridic timer device structre reference on succcess; a NULL on failure
*
****************************************************************************/
-EXTERN FAR struct rtc_dev_s *up_rtcinitialize(void);
-
+EXTERN FAR struct ptimer_dev_s *up_ptimerinitialize(void);
#undef EXTERN
#if defined(__cplusplus)
}
#endif
-#endif /* __INCLUDE_NUTTX_RTC_H */
+#endif /* __INCLUDE_NUTTX_PTIMER_H */
diff --git a/nuttx/include/sys/syscall.h b/nuttx/include/sys/syscall.h
index 616c39546..5c1570c53 100644
--- a/nuttx/include/sys/syscall.h
+++ b/nuttx/include/sys/syscall.h
@@ -135,11 +135,17 @@
#ifndef CONFIG_DISABLE_CLOCK
# define SYS_clock_systimer (__SYS_clock+0)
-# define SYS_clock_getres (__SYS_clock+1)
-# define SYS_clock_gettime (__SYS_clock+2)
-# define SYS_clock_settime (__SYS_clock+3)
-# define SYS_gettimeofday (__SYS_clock+4)
-# define __SYS_timers (__SYS_clock+5)
+# define SYS_clock_uptime (__SYS_clock+1)
+# define SYS_clock_getres (__SYS_clock+2)
+# define SYS_clock_gettime (__SYS_clock+3)
+# define SYS_clock_settime (__SYS_clock+4)
+# define SYS_gettimeofday (__SYS_clock+5)
+# ifdef CONFIG_UPTIME
+# define SYS_clock_uptime (__SYS_clock+6)
+# define __SYS_timers (__SYS_clock+7)
+# else
+# define __SYS_timers (__SYS_clock+6)
+#endif
#else
# define __SYS_timers __SYS_clock
#endif