diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2009-07-11 17:24:14 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2009-07-11 17:24:14 +0000 |
commit | fb117bfced091fd2ee5a32f2ab39b6d7a48e0676 (patch) | |
tree | 5ff18dab2d32ec4643b3d664522b3ed018d0f60c /nuttx/sched | |
parent | 4a528af5569e0385555ac4f5de09677f6bcef754 (diff) | |
download | px4-nuttx-fb117bfced091fd2ee5a32f2ab39b6d7a48e0676.tar.gz px4-nuttx-fb117bfced091fd2ee5a32f2ab39b6d7a48e0676.tar.bz2 px4-nuttx-fb117bfced091fd2ee5a32f2ab39b6d7a48e0676.zip |
mktime/gmtime_r moved and highly simplified
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1973 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/sched')
-rw-r--r-- | nuttx/sched/Makefile | 4 | ||||
-rw-r--r-- | nuttx/sched/clock_initialize.c | 60 | ||||
-rw-r--r-- | nuttx/sched/clock_internal.h | 14 | ||||
-rw-r--r-- | nuttx/sched/gmtime_r.c | 215 | ||||
-rw-r--r-- | nuttx/sched/mktime.c | 211 |
5 files changed, 35 insertions, 469 deletions
diff --git a/nuttx/sched/Makefile b/nuttx/sched/Makefile index b16ab0b94..288aade45 100644 --- a/nuttx/sched/Makefile +++ b/nuttx/sched/Makefile @@ -71,8 +71,8 @@ TIME_SRCS = sched_processtimer.c ifneq ($(CONFIG_DISABLE_SIGNALS),y) TIME_SRCS += sleep.c usleep.c endif -CLOCK_SRCS = clock_initialize.c mktime.c gmtime_r.c clock_settime.c clock_gettime.c \ - clock_getres.c clock_time2ticks.c clock_abstime2ticks.c clock_ticks2time.c +CLOCK_SRCS = clock_initialize.c clock_settime.c clock_gettime.c clock_getres.c \ + clock_time2ticks.c clock_abstime2ticks.c clock_ticks2time.c SIGNAL_SRCS = sig_initialize.c \ sig_action.c sig_procmask.c sig_pending.c sig_suspend.c \ diff --git a/nuttx/sched/clock_initialize.c b/nuttx/sched/clock_initialize.c index 7b63a6521..8dc8a00e8 100644 --- a/nuttx/sched/clock_initialize.c +++ b/nuttx/sched/clock_initialize.c @@ -1,7 +1,7 @@ -/************************************************************ +/**************************************************************************** * clock_initialize.c * - * Copyright (C) 2007 Gregory Nutt. All rights reserved. + * Copyright (C) 2007, 2009 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without @@ -14,7 +14,7 @@ * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. - * 3. Neither the name Gregory Nutt nor the names of its contributors may be + * 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. * @@ -31,61 +31,65 @@ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - ************************************************************/ + ****************************************************************************/ -/************************************************************ +/**************************************************************************** * Included Files - ************************************************************/ + ****************************************************************************/ +#include <nuttx/config.h> #include <sys/types.h> + #include <time.h> #include <errno.h> #include <debug.h> +#include <nuttx/time.h> + #include "clock_internal.h" -/************************************************************ +/**************************************************************************** * Definitions - ************************************************************/ + ****************************************************************************/ -/************************************************************ +/**************************************************************************** * Private Type Declarations - ************************************************************/ + ****************************************************************************/ -/************************************************************ +/**************************************************************************** * Private Function Prototypes - ************************************************************/ + ****************************************************************************/ -/********************************************************** +/************************************************************************** * Public Constant Data - **********************************************************/ + **************************************************************************/ -/************************************************************ +/**************************************************************************** * Public Variables - ************************************************************/ + ****************************************************************************/ volatile uint32 g_system_timer = 0; -struct timespec g_basetime = {0,0}; -uint32 g_tickbias = 0; +struct timespec g_basetime = {0,0}; +uint32 g_tickbias = 0; -/********************************************************** +/************************************************************************** * Private Variables - **********************************************************/ + **************************************************************************/ -/************************************************************ +/**************************************************************************** * Private Functions - ************************************************************/ + ****************************************************************************/ -/************************************************************ +/**************************************************************************** * Public Functions - ************************************************************/ + ****************************************************************************/ -/************************************************************ +/**************************************************************************** * Function: clock_initialize * * Description: * Perform one-time initialization of the timing facilities. * - ************************************************************/ + ****************************************************************************/ void clock_initialize(void) { @@ -112,7 +116,7 @@ void clock_initialize(void) g_tickbias = 0; } -/************************************************************ +/**************************************************************************** * Function: clock_timer * * Description: @@ -120,7 +124,7 @@ void clock_initialize(void) * time clock interrupt occurs. The interval of this * clock interrupt must be MSEC_PER_TICK * - ************************************************************/ + ****************************************************************************/ void clock_timer(void) { diff --git a/nuttx/sched/clock_internal.h b/nuttx/sched/clock_internal.h index 2c298983b..7d1dbb629 100644 --- a/nuttx/sched/clock_internal.h +++ b/nuttx/sched/clock_internal.h @@ -1,7 +1,7 @@ /******************************************************************************** * clock_internal.h * - * Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved. + * Copyright (C) 2007-2009 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without @@ -49,17 +49,6 @@ * Definitions ********************************************************************************/ -#define JD_OF_EPOCH 2440588 /* Julian Date of noon, J1970 */ - -#ifdef CONFIG_JULIAN_TIME - -# define GREG_DUTC -141427 /* Default is October 15, 1582 */ -# define GREG_YEAR 1582 -# define GREG_MONTH 10 -# define GREG_DAY 15 - -#endif /* CONFIG_JULIAN_TIME */ - /******************************************************************************** * Public Type Definitions ********************************************************************************/ @@ -78,7 +67,6 @@ extern uint32 g_tickbias; extern void weak_function clock_initialize(void); extern void weak_function clock_timer(void); -extern time_t clock_calendar2utc(int year, int month, int day); extern int clock_abstime2ticks(clockid_t clockid, FAR const struct timespec *abstime, FAR int *ticks); diff --git a/nuttx/sched/gmtime_r.c b/nuttx/sched/gmtime_r.c deleted file mode 100644 index 98658676e..000000000 --- a/nuttx/sched/gmtime_r.c +++ /dev/null @@ -1,215 +0,0 @@ -/************************************************************ - * gmtime_r.c - * - * Copyright (C) 2007 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt <spudmonkey@racsa.co.cr> - * - * 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 Gregory Nutt 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. - * - ************************************************************/ - -/************************************************************ - * Included Files - ************************************************************/ - -#include <sys/types.h> -#include <time.h> -#include <errno.h> -#include <debug.h> -#include "clock_internal.h" - -/************************************************************ - * Definitions - ************************************************************/ - -/************************************************************ - * Private Type Declarations - ************************************************************/ - -/************************************************************ - * Private Function Prototypes - ************************************************************/ - -/* Calendar/UTC conversion routines */ - -static void clock_utc2calendar(time_t utc, int *year, int *month, int *day); -static void clock_utc2gregorian (time_t jdn, int *year, int *month, int *day); - -#ifdef CONFIG_JULIAN_TIME -static void clock_utc2julian(time_t jdn, int *year, int *month, int *day); -#endif /* CONFIG_JULIAN_TIME */ - -/********************************************************** - * Public Constant Data - **********************************************************/ - -/************************************************************ - * Public Variables - ************************************************************/ - -/********************************************************** - * Private Variables - **********************************************************/ - -/************************************************************ - * Private Functions - ************************************************************/ - -/************************************************************ - * Function: clock_calendar2utc, clock_gregorian2utc, - * and clock_julian2utc - * - * Description: - * Calendar to UTC conversion routines. These conversions - * are based on algorithms from p. 604 of Seidelman, P. K. - * 1992. Explanatory Supplement to the Astronomical - * Almanac. University Science Books, Mill Valley. - * - ************************************************************/ - -static void clock_utc2calendar(time_t utc, int *year, int *month, int *day) -{ -#ifdef CONFIG_JULIAN_TIME - - if (utc >= GREG_DUTC) - { - clock_utc2gregorian(utc + JD_OF_EPOCH, year, month, day); - } - else - { - clock_utc2julian (utc + JD_OF_EPOCH, year, month, day); - } - -#else /* CONFIG_JULIAN_TIME */ - - clock_utc2gregorian(utc + JD_OF_EPOCH, year, month, day); - -#endif /* CONFIG_JULIAN_TIME */ -} - -static void clock_utc2gregorian(time_t jd, int *year, int *month, int *day) -{ - long l, n, i, j, d, m, y; - - l = jd + 68569; - n = (4*l) / 146097; - l = l - (146097*n + 3)/4; - i = (4000*(l+1))/1461001; - l = l - (1461*i)/4 + 31; - j = (80*l)/2447; - d = l - (2447*j)/80; - l = j/11; - m = j + 2 - 12*l; - y = 100*(n-49) + i + l; - - *year = y; - *month = m; - *day = d; -} - - -#ifdef CONFIG_JULIAN_TIME -static void clock_utc2julian(time_t jd, int *year, int *month, int *day) -{ - long j, k, l, n, d, i, m, y; - - j = jd + 1402; - k = (j-1)/1461; - l = j - 1461*k; - n = (l-1)/365 - l/1461; - i = l - 365*n + 30; - j = (80*i)/2447; - d = i - (2447*j)/80; - i = j/11; - m = j + 2 - 12*i; - y = 4*k + n + i - 4716; - - *year = y; - *month = m; - *day = d; -} -#endif /* CONFIG_JULIAN_TIME */ - -/************************************************************ - * Public Functions - ************************************************************/ - -/************************************************************ - * Function: gmtime_r - * - * Description: - * Time conversion (based on the POSIX API) - * - ************************************************************/ - -struct tm *gmtime_r(const time_t *clock, struct tm *result) -{ - time_t time; - time_t jdn; - int year, month, day; - int hour, min, sec; - - /* Get the seconds since the EPOCH */ - - time = *clock; - sdbg("clock=%d\n", (int)time); - - /* Convert to days, hours, minutes, and seconds since the EPOCH */ - - jdn = time / (24*60*60); - time -= (24*60*60) * jdn; - - hour = time / (60*60); - time -= (60*60) * hour; - - min = time / 60; - time -= 60 * min; - - sec = time; - - sdbg("hour=%d min=%d sec=%d\n", - (int)hour, (int)min, (int)sec); - - /* Convert the days since the EPOCH to calendar day */ - - clock_utc2calendar(jdn, &year, &month, &day); - - sdbg("jdn=%d year=%d month=%d day=%d\n", - (int)jdn, (int)year, (int)month, (int)day); - - /* Then return the struct tm contents */ - - result->tm_year = (int)year - 1900; - result->tm_mon = (int)month - 1; - result->tm_mday = (int)day; - result->tm_hour = (int)hour; - result->tm_min = (int)min; - result->tm_sec = (int)sec; - - return result; -} diff --git a/nuttx/sched/mktime.c b/nuttx/sched/mktime.c deleted file mode 100644 index f842e2435..000000000 --- a/nuttx/sched/mktime.c +++ /dev/null @@ -1,211 +0,0 @@ -/************************************************************ - * mktime.c - * - * Copyright (C) 2007 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt <spudmonkey@racsa.co.cr> - * - * 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 Gregory Nutt 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. - * - ************************************************************/ - -/************************************************************ - * Included Files - ************************************************************/ - -#include <sys/types.h> -#include <time.h> -#include <debug.h> -#include "clock_internal.h" - -/************************************************************ - * Definitions - ************************************************************/ - -/************************************************************ - * Private Type Declarations - ************************************************************/ - -/************************************************************ - * Private Function Prototypes - ************************************************************/ - -/********************************************************** - * Public Constant Data - **********************************************************/ - -/************************************************************ - * Public Variables - ************************************************************/ - -/********************************************************** - * Private Variables - **********************************************************/ - -/************************************************************ - * Private Functions - ************************************************************/ - -/************************************************************ - * Function: clock_gregorian2utc, clock_julian2utc - * - * Description: - * UTC conversion routines. These conversions are based - * on algorithms from p. 604 of Seidelman, P. K. 1992. - * Explanatory Supplement to the Astronomical Almanac. - * University Science Books, Mill Valley. - * - ************************************************************/ - -static time_t clock_gregorian2utc(int year, int month, int day) -{ - int temp; - - /* temp = (month - 14)/12; */ - - temp = (month <= 2 ? -1:0); - - return (1461*(year + 4800 + temp))/4 - + (367*(month - 2 - 12*temp))/12 - - (3*((year + 4900 + temp)/100))/4 + day - 32075; -} - -#ifdef CONFIG_JULIAN_TIME -static time_t clock_julian2utc(int year, int month, int day) -{ - return 367*year - - (7*(year + 5001 + (month-9)/7))/4 - + (275*month)/9 - + day + 1729777; -} -#endif - -/************************************************************ - * Public Functions - ************************************************************/ - -/************************************************************ - * Function: mktime - * - * Description: - * Time conversion (based on the POSIX API) - * - ************************************************************/ - -time_t mktime(struct tm *tp) -{ - time_t ret; - time_t jdn; - - /* Get the EPOCH-relative julian date from the calendar year, - * month, and date - */ - - jdn = clock_calendar2utc(tp->tm_year+1900, tp->tm_mon+1, tp->tm_mday); - sdbg("jdn=%d tm_year=%d tm_mon=%d tm_mday=%d\n", - (int)jdn, tp->tm_year, tp->tm_mon, tp->tm_mday); - - /* Return the seconds into the julian day. */ - - ret = ((jdn*24 + tp->tm_hour)*60 + tp->tm_min)*60 + tp->tm_sec; - sdbg("ret=%d tm_hour=%d tm_min=%d tm_sec=%d\n", - (int)ret, tp->tm_hour, tp->tm_min, tp->tm_sec); - - return ret; -} - -/************************************************************ - * Function: clock_calendar2utc - * - * Description: - * Calendar/UTC conversion based on algorithms from p. 604 - * of Seidelman, P. K. 1992. Explanatory Supplement to - * the Astronomical Almanac. University Science Books, - * Mill Valley. - * - ************************************************************/ - -time_t clock_calendar2utc(int year, int month, int day) -{ - int dyear; -#ifdef CONFIG_JULIAN_TIME - int isgreg; -#endif /* CONFIG_JULIAN_TIME */ - - /* Correct year & month ranges. Shift month into range 1-12 */ - - dyear = (month-1) / 12; - month -= 12 * dyear; - year += dyear; - - if (month < 1) - { - month += 12; - year -= 1; - } - -#ifdef CONFIG_JULIAN_TIME - /* Determine which calendar to use */ - - if (year > GREG_YEAR) - { - isgreg = TRUE; - } - else if (year < GREG_YEAR) - { - isgreg = FALSE; - } - else if (month > GREG_MONTH) - { - isgreg = TRUE; - } - else if (month < GREG_MONTH) - { - isgreg = FALSE; - } - else - { - isgreg = (day >= GREG_DAY); - } - - /* Calculate and return date */ - - if (isgreg) - { - return clock_gregorian2utc(year, month, day) - JD_OF_EPOCH; - } - else - { - return clock_julian2utc (year, month, day) - JD_OF_EPOCH; - } - -#else /* CONFIG_JULIAN_TIME */ - - return clock_gregorian2utc(year, month, day) - JD_OF_EPOCH; - -#endif /* CONFIG_JULIAN_TIME */ -} |