86 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2006-2018, RT-Thread Development Team
 | |
|  *
 | |
|  * SPDX-License-Identifier: Apache-2.0
 | |
|  *
 | |
|  * Change Logs:
 | |
|  * Date           Author       Notes
 | |
|  */
 | |
| #include <sys/time.h>
 | |
| #include <rtthread.h>
 | |
| 
 | |
| #ifdef RT_USING_DEVICE
 | |
| int gettimeofday(struct timeval *tp, void *ignore)
 | |
| {
 | |
|     time_t time;
 | |
|     rt_device_t device;
 | |
| 
 | |
|     device = rt_device_find("rtc");
 | |
|     if (device != RT_NULL)
 | |
|     {
 | |
|         rt_device_control(device, RT_DEVICE_CTRL_RTC_GET_TIME, &time);
 | |
|         if (tp != RT_NULL)
 | |
|         {
 | |
|             tp->tv_sec = time;
 | |
|             tp->tv_usec = 0;
 | |
|         }
 | |
| 
 | |
|         return time;
 | |
|     }
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| #endif
 | |
| 
 | |
| /**
 | |
|  * Returns the current time.
 | |
|  *
 | |
|  * @param time_t * t the timestamp pointer, if not used, keep NULL.
 | |
|  *
 | |
|  * @return time_t return timestamp current.
 | |
|  *
 | |
|  */
 | |
| /* for IAR 6.2 later Compiler */
 | |
| #if defined (__IAR_SYSTEMS_ICC__) &&  (__VER__) >= 6020000
 | |
| #pragma module_name = "?time"
 | |
| time_t (__time32)(time_t *t) /* Only supports 32-bit timestamp */
 | |
| #else
 | |
| 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");
 | |
|     }
 | |
| 
 | |
|     /* read timestamp from RTC device. */
 | |
|     if (device != RT_NULL)
 | |
|     {
 | |
|         if (rt_device_open(device, 0) == RT_EOK)
 | |
|         {
 | |
|             rt_device_control(device, RT_DEVICE_CTRL_RTC_GET_TIME, &time_now);
 | |
|             rt_device_close(device);
 | |
|         }
 | |
|     }
 | |
| #endif /* RT_USING_RTC */
 | |
| 
 | |
|     /* if t is not NULL, write timestamp to *t */
 | |
|     if (t != RT_NULL)
 | |
|     {
 | |
|         *t = time_now;
 | |
|     }
 | |
| 
 | |
|     return time_now;
 | |
| }
 | |
| 
 | |
| RT_WEAK clock_t clock(void)
 | |
| {
 | |
|     return rt_tick_get();
 | |
| }
 |