From 6c7dd305329602611aba93772357aa5a394a3a6e Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Mon, 8 Feb 2021 00:56:31 +0800 Subject: [PATCH] add function settimeofday & stime --- components/libc/compilers/common/sys/time.h | 4 +- components/libc/compilers/common/time.c | 71 +++++++++++++++------ 2 files changed, 55 insertions(+), 20 deletions(-) diff --git a/components/libc/compilers/common/sys/time.h b/components/libc/compilers/common/sys/time.h index e99fd7d54f..599b8b5262 100644 --- a/components/libc/compilers/common/sys/time.h +++ b/components/libc/compilers/common/sys/time.h @@ -48,8 +48,10 @@ struct timezone { int tz_dsttime; /* type of dst correction */ }; -int gettimeofday(struct timeval *tp, struct timezone *tz); +int stime(const time_t *t); time_t timegm(struct tm * const t); +int gettimeofday(struct timeval *tv, struct timezone *tz); +int settimeofday(const struct timeval *tv, const struct timezone *tz); #ifdef __cplusplus } diff --git a/components/libc/compilers/common/time.c b/components/libc/compilers/common/time.c index bdbb27bce4..155a04f92f 100644 --- a/components/libc/compilers/common/time.c +++ b/components/libc/compilers/common/time.c @@ -8,6 +8,8 @@ * 2019-08-21 zhangjun copy from minilibc * 2020-09-07 Meco Man combine gcc armcc iccarm * 2021-02-05 Meco Man add timegm() + * 2021-02-07 Meco Man fixed gettimeofday() time() + * 2021-02-08 Meco Man add settimeofday() stime() */ #include @@ -175,24 +177,15 @@ time_t time(time_t *t) #endif { time_t time_now = 0; - #ifdef RT_USING_RTC - static rt_device_t device = RT_NULL; - - /* optimization: find rtc device only first. */ - if (device == RT_NULL) - { - device = rt_device_find("rtc"); - } + rt_device_t device; /* read timestamp from RTC device. */ - if (device != RT_NULL) + device = rt_device_find("rtc"); + if (rt_device_open(device, 0) == RT_EOK) { - if (rt_device_open(device, 0) == RT_EOK) - { - rt_device_control(device, RT_DEVICE_CTRL_RTC_GET_TIME, &time_now); - rt_device_close(device); - } + rt_device_control(device, RT_DEVICE_CTRL_RTC_GET_TIME, &time_now); + rt_device_close(device); } #endif /* RT_USING_RTC */ @@ -210,15 +203,27 @@ RT_WEAK clock_t clock(void) return rt_tick_get(); } -/* TODO: timezone */ -int gettimeofday(struct timeval *tp, struct timezone *tz) +int stime(const time_t *t) { - if (tp != RT_NULL) +#ifdef RT_USING_RTC + rt_device_t device; + + /* read timestamp from RTC device. */ + device = rt_device_find("rtc"); + if (rt_device_open(device, 0) == RT_EOK) + { + rt_device_control(device, RT_DEVICE_CTRL_RTC_SET_TIME, (void*)t); + rt_device_close(device); + } + else { - tp->tv_sec = time(RT_NULL); - tp->tv_usec = 0; + return -1; } return 0; + +#else + return -1; +#endif /* RT_USING_RTC */ } time_t timegm(struct tm * const t) @@ -294,3 +299,31 @@ time_t timegm(struct tm * const t) i = 60; return ((day + t->tm_hour) * i + t->tm_min) * i + t->tm_sec; } + +/* TODO: timezone */ +int gettimeofday(struct timeval *tv, struct timezone *tz) +{ + if (tv != RT_NULL) + { + tv->tv_sec = time(RT_NULL); + tv->tv_usec = 0; + return 0; + } + else + { + return -1; + } +} + +/* TODO: timezone */ +int settimeofday(const struct timeval *tv, const struct timezone *tz) +{ + if (tv != RT_NULL) + { + return stime(&tv->tv_sec); + } + else + { + return -1; + } +} -- GitLab