07b0a30fd4a3eedc9ce66895002e6427705b7974
[bertos.git] / os / hptime.c
1 /*!
2  * \file
3  * <!--
4  * Copyright 2003,2004 Develer S.r.l. (http://www.develer.com/)
5  * All rights reserved.
6  * -->
7  *
8  * \brief Portable abstraction for high-resolution time handling (implementation)
9  *
10  * \version $Id$
11  * \author Bernardo Innocenti <bernie@develer.com>
12  */
13
14 /*
15  * $Log$
16  * Revision 1.1  2004/06/03 09:01:06  bernie
17  * Import into DevLib.
18  *
19  */
20
21 #include "hptime.h"
22
23 #if defined(_WIN32)
24
25 #include <windows.h>
26
27 hptime_t hptime_get(void)
28 {
29         FILETIME ft;
30
31         /*
32          * La precisione dei FileTime sarebbe 100ns, ma il
33          * valore viene ottenuto convertendo una struttura
34          * SYSTEMTIME, che ha precisione di 1ms. Il numero
35          * che otteniamo e' quindi sempre un multiplo di
36          * 100000.
37          */
38         GetSystemTimeAsFileTime(&ft);
39
40         /* Copy the upper/lower into a quadword. */
41         return (((hptime_t)ft.dwHighDateTime) << 32) + (hptime_t)ft.dwLowDateTime;
42 }
43
44 #elif defined(__unix__)
45
46 #include <sys/time.h>
47
48 hptime_t hptime_get(void)
49 {
50         struct timeval tv;
51
52         gettimeofday(&tv, 0);
53         return (hptime_t)tv.tv_sec * HPTIME_TICKS_PER_SECOND
54                 + (hptime_t)tv.tv_usec;
55 }
56
57 #else /* !__unix__ */
58         #error OS dependent support code missing for this OS
59 #endif /* !__unix__ */
60