diff options
Diffstat (limited to 'nuttx/include/time.h')
-rw-r--r-- | nuttx/include/time.h | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/nuttx/include/time.h b/nuttx/include/time.h new file mode 100644 index 000000000..623f9afb2 --- /dev/null +++ b/nuttx/include/time.h @@ -0,0 +1,192 @@ +/******************************************************************************** + * include/time.h + * + * Copyright (C) 2007-2011 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <gnutt@nuttx.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ********************************************************************************/ + +#ifndef __INCLUDE_TIME_H +#define __INCLUDE_TIME_H + +/******************************************************************************** + * Included Files + ********************************************************************************/ + +#include <nuttx/config.h> + +#include <sys/types.h> +#include <stdint.h> + +/******************************************************************************** + * Pre-processor Definitions + ********************************************************************************/ + +/* Clock tick of the system (frequency Hz). + * + * NOTE: This symbolic name CLK_TCK has been removed from the standard. It is + * replaced with CLOCKS_PER_SEC. Both are defined here. + * + * The default value is 100Hz, but this default setting can be overridden by + * defining the clock interval in milliseconds as CONFIG_MSEC_PER_TICK in the + * board configuration file. + */ + +#ifdef CONFIG_MSEC_PER_TICK +# define CLK_TCK (1000/CONFIG_MSEC_PER_TICK) +# define CLOCKS_PER_SEC (1000/CONFIG_MSEC_PER_TICK) +#else +# define CLK_TCK (100) +# define CLOCKS_PER_SEC (100) +#endif + +/* CLOCK_REALTIME refers to the standard time source. For most implementations, + * the standard time source is the system timer interrupt. However, if the + * platform supports an RTC, then the standard time source will be the RTC + * for the clock_gettime() and clock_settime() interfaces (the system timer + * is still the time source for all of the interfaces). + */ + +#define CLOCK_REALTIME 0 + +/* If an RTC is supported, then the non-standard CLOCK_ACTIVETIME is also + * supported to manage time based on the system timer interrupt separately from + * the RTC. This may be necessary, for example, in certain cases where the + * system timer interrupt has been stopped in low power modes. + * + * CLOCK_ACTIVETIME is only recognized by clock_gettime() and clock_settime(). + */ + +#ifdef CONFIG_RTC +# define CLOCK_ACTIVETIME 1 +#else +# define CLOCK_ACTIVETIME CLOCK_REALTIME +#endif + +/* This is a flag that may be passed to the timer_settime() function */ + +#define TIMER_ABSTIME 1 + +/* Local time is the same as gmtime in this implementation */ + +#define localtime(c) gmtime(c) +#define localtime_r(c,r) gmtime_r(c,r) + +/******************************************************************************** + * Global Type Declarations + ********************************************************************************/ + +typedef uint32_t time_t; /* Holds time in seconds */ +typedef uint8_t clockid_t; /* Identifies one time base source */ +typedef FAR void *timer_t; /* Represents one POSIX timer */ + +struct timespec +{ + time_t tv_sec; /* Seconds */ + long tv_nsec; /* Nanoseconds */ +}; + +struct timeval +{ + time_t tv_sec; /* Seconds */ + long tv_usec; /* Microseconds */ +}; + +struct tm +{ + int tm_sec; /* second (0-61, allows for leap seconds) */ + int tm_min; /* minute (0-59) */ + int tm_hour; /* hour (0-23) */ + int tm_mday; /* day of the month (1-31) */ + int tm_mon; /* month (0-11) */ + int tm_year; /* years since 1900 */ +#if 0 /* not supported */ + int tm_wday; /* day of the week (0-6) */ + int tm_yday; /* day of the year (0-365) */ + int tm_isdst; /* non-0 if daylight savings time is in effect */ +#endif +}; + +/* Struct itimerspec is used to define settings for an interval timer */ + +struct itimerspec +{ + struct timespec it_value; /* First time */ + struct timespec it_interval; /* and thereafter */ +}; + +/* forward reference (defined in signal.h) */ + +struct sigevent; + +/******************************************************************************** + * Global Variables + ********************************************************************************/ + +/* extern char *tznames[]; not supported */ + +/******************************************************************************** + * Global Function Prototypes + ********************************************************************************/ + +#undef EXTERN +#if defined(__cplusplus) +#define EXTERN extern "C" +extern "C" { +#else +#define EXTERN extern +#endif + +EXTERN clock_t clock(void); + +EXTERN int clock_settime(clockid_t clockid, const struct timespec *tp); +EXTERN int clock_gettime(clockid_t clockid, struct timespec *tp); +EXTERN int clock_getres(clockid_t clockid, struct timespec *res); + +EXTERN time_t mktime(const struct tm *tp); +EXTERN FAR struct tm *gmtime(FAR const time_t *timer); +EXTERN FAR struct tm *gmtime_r(FAR const time_t *timer, FAR struct tm *result); +EXTERN size_t strftime(char *s, size_t max, const char *format, const struct tm *tm); + +EXTERN time_t time(time_t *tloc); + +EXTERN int timer_create(clockid_t clockid, FAR struct sigevent *evp, FAR timer_t *timerid); +EXTERN int timer_delete(timer_t timerid); +EXTERN int timer_settime(timer_t timerid, int flags, FAR const struct itimerspec *value, + FAR struct itimerspec *ovalue); +EXTERN int timer_gettime(timer_t timerid, FAR struct itimerspec *value); +EXTERN int timer_getoverrun(timer_t timerid); + +#undef EXTERN +#if defined(__cplusplus) +} +#endif + +#endif /* __INCLUDE_TIME_H */ |