提交 6c7dd305 编写于 作者: mysterywolf's avatar mysterywolf

add function settimeofday & stime

上级 4c696243
......@@ -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
}
......
......@@ -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 <sys/time.h>
......@@ -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;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册