Import into DevLib.
authorbernie <bernie@38d2e660-2303-0410-9eaa-f027e97ec537>
Thu, 3 Jun 2004 09:01:06 +0000 (09:01 +0000)
committerbernie <bernie@38d2e660-2303-0410-9eaa-f027e97ec537>
Thu, 3 Jun 2004 09:01:06 +0000 (09:01 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@12 38d2e660-2303-0410-9eaa-f027e97ec537

os/hptime.c [new file with mode: 0755]
os/hptime.h [new file with mode: 0755]

diff --git a/os/hptime.c b/os/hptime.c
new file mode 100755 (executable)
index 0000000..07b0a30
--- /dev/null
@@ -0,0 +1,60 @@
+/*!
+ * \file
+ * <!--
+ * Copyright 2003,2004 Develer S.r.l. (http://www.develer.com/)
+ * All rights reserved.
+ * -->
+ *
+ * \brief Portable abstraction for high-resolution time handling (implementation)
+ *
+ * \version $Id$
+ * \author Bernardo Innocenti <bernie@develer.com>
+ */
+
+/*
+ * $Log$
+ * Revision 1.1  2004/06/03 09:01:06  bernie
+ * Import into DevLib.
+ *
+ */
+
+#include "hptime.h"
+
+#if defined(_WIN32)
+
+#include <windows.h>
+
+hptime_t hptime_get(void)
+{
+       FILETIME ft;
+
+       /*
+        * La precisione dei FileTime sarebbe 100ns, ma il
+        * valore viene ottenuto convertendo una struttura
+        * SYSTEMTIME, che ha precisione di 1ms. Il numero
+        * che otteniamo e' quindi sempre un multiplo di
+        * 100000.
+        */
+       GetSystemTimeAsFileTime(&ft);
+
+       /* Copy the upper/lower into a quadword. */
+       return (((hptime_t)ft.dwHighDateTime) << 32) + (hptime_t)ft.dwLowDateTime;
+}
+
+#elif defined(__unix__)
+
+#include <sys/time.h>
+
+hptime_t hptime_get(void)
+{
+       struct timeval tv;
+
+       gettimeofday(&tv, 0);
+       return (hptime_t)tv.tv_sec * HPTIME_TICKS_PER_SECOND
+               + (hptime_t)tv.tv_usec;
+}
+
+#else /* !__unix__ */
+       #error OS dependent support code missing for this OS
+#endif /* !__unix__ */
+
diff --git a/os/hptime.h b/os/hptime.h
new file mode 100755 (executable)
index 0000000..7b05dbe
--- /dev/null
@@ -0,0 +1,64 @@
+/*!
+ * \file
+ * <!--
+ * Copyright 2003,2004 Develer S.r.l. (http://www.develer.com/)
+ * All rights reserved.
+ * -->
+ *
+ * \brief Portable abstraction for high-resolution time handling (interface)
+ *
+ * \version $Id$
+ * \author Bernardo Innocenti <bernie@develer.com>
+ */
+
+/*
+ * $Log$
+ * Revision 1.1  2004/06/03 09:01:06  bernie
+ * Import into DevLib.
+ *
+ */
+#ifndef HPTIME_H
+#define HPTIME_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#ifdef _WIN32
+
+       /* type for time expressed in ms */
+       typedef unsigned long mtime_t;
+
+       /* our type for "high precision absolute time" */
+       typedef unsigned __int64 hptime_t;
+
+       #define HPTIME_TICKS_PER_SECOND         ((hptime_t)10000000I64)
+       #define HPTIME_TICKS_PER_MILLISEC       ((hptime_t)10000I64)
+       #define HPTIME_TICKS_PER_MICRO          ((hptime_t)10I64)
+
+#elif defined(__unix__)
+
+       /* type for time expressed in ms */
+       typedef long mtime_t;
+
+       /* our type for "high precision absolute time" */
+       typedef long long hptime_t;
+
+       #define HPTIME_TICKS_PER_SECOND         ((hptime_t)1000000LL)
+       #define HPTIME_TICKS_PER_MILLISEC       ((hptime_t)1000LL)
+       #define HPTIME_TICKS_PER_MICRO          ((hptime_t)1LL)
+
+#else /* !__unix__ */
+       #error OS dependent support code missing for this OS
+#endif /* !__unix__ */
+
+/*!
+ * Return the current time with the maximum precision made available from the hosting OS
+ */
+extern hptime_t hptime_get(void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* HPTIME_H */