summaryrefslogtreecommitdiff
path: root/mbglib/common/mbg_tmo.h
diff options
context:
space:
mode:
Diffstat (limited to 'mbglib/common/mbg_tmo.h')
-rw-r--r--mbglib/common/mbg_tmo.h80
1 files changed, 67 insertions, 13 deletions
diff --git a/mbglib/common/mbg_tmo.h b/mbglib/common/mbg_tmo.h
index 18c365d..b76f9af 100644
--- a/mbglib/common/mbg_tmo.h
+++ b/mbglib/common/mbg_tmo.h
@@ -1,7 +1,7 @@
/**************************************************************************
*
- * $Id: mbg_tmo.h 1.4 2011/01/26 16:55:33 martin REL_M $
+ * $Id: mbg_tmo.h 1.8.1.3 2014/03/06 13:51:39 martin TEST $
*
* Copyright (c) Meinberg Funkuhren, Bad Pyrmont, Germany
*
@@ -10,7 +10,20 @@
*
* -----------------------------------------------------------------------
* $Log: mbg_tmo.h $
- * Revision 1.4 2011/01/26 16:55:33 martin
+ * Revision 1.8.1.3 2014/03/06 13:51:39 martin
+ * Renamed mbgserio_msec_to_timeval to mbg_msec_to_timeval.
+ * Revision 1.8.1.2 2014/03/04 12:08:11 martin
+ * Revision 1.8.1.1 2014/01/08 17:20:51Z martin
+ * MBG_TGT_POSIX
+ * Revision 1.8 2013/12/11 12:08:29 martin
+ * Fixed Windows build.
+ * Revision 1.7 2012/11/02 09:04:36Z martin
+ * Fix to have struct timeval defined under Windows.
+ * Revision 1.6 2012/03/16 11:56:23 martin
+ * Added mbg_tmo_delta_t().
+ * Revision 1.5 2011/11/28 15:26:47 martin
+ * Enabled mbgserio_msec_to_timeval() for Windows.
+ * Revision 1.4 2011/01/26 16:55:33Z martin
* Fixed compiler warnings with gcc/Linux.
* Revision 1.3 2010/06/02 12:29:44 daniel
* Excluded mbgserio_msec_to_timeval() from build under WIN32 targets.
@@ -40,8 +53,9 @@
/* Start of header body */
-#if defined( MBG_TGT_UNIX )
+#if defined( MBG_TGT_POSIX )
+ // TODO: eventually use timespec, if available
#include <stdlib.h>
#include <sys/time.h>
@@ -71,7 +85,7 @@
static __mbg_inline
void mbg_tmo_get_time( MBG_TMO_TIME *t )
{
- #if defined( MBG_TGT_UNIX )
+ #if defined( MBG_TGT_POSIX )
gettimeofday( t, NULL );
@@ -100,12 +114,13 @@ void mbg_tmo_get_time( MBG_TMO_TIME *t )
#endif
+
#if defined( __mbg_inline )
static __mbg_inline
int mbg_tmo_time_is_set( const MBG_TMO_TIME *t )
{
- #if defined( MBG_TGT_UNIX )
+ #if defined( MBG_TGT_POSIX )
return ( t->tv_sec != 0 ) || ( t->tv_usec != 0 );
@@ -134,6 +149,7 @@ int mbg_tmo_time_is_set( const MBG_TMO_TIME *t )
#endif
+
#if defined( __mbg_inline )
static __mbg_inline
@@ -141,7 +157,7 @@ void mbg_tmo_set_timeout_ms( MBG_TMO_TIME *t_tmo, ulong msec )
{
mbg_tmo_get_time( t_tmo );
- #if defined( MBG_TGT_UNIX )
+ #if defined( MBG_TGT_POSIX )
t_tmo->tv_usec += msec * 1000;
@@ -177,12 +193,13 @@ void mbg_tmo_set_timeout_ms( MBG_TMO_TIME *t_tmo, ulong msec )
#endif
+
#if defined( __mbg_inline )
static __mbg_inline
long mbg_tmo_time_diff_ms( const MBG_TMO_TIME *t, const MBG_TMO_TIME *t0 )
{
- #if defined( MBG_TGT_UNIX )
+ #if defined( MBG_TGT_POSIX )
return ( t->tv_sec - t0->tv_sec ) * 1000
+ ( t->tv_usec - t0->tv_usec ) / 1000;
@@ -212,12 +229,49 @@ long mbg_tmo_time_diff_ms( const MBG_TMO_TIME *t, const MBG_TMO_TIME *t0 )
#endif
+
+#if defined( __mbg_inline )
+
+static __mbg_inline
+double mbg_tmo_delta_t( const MBG_TMO_TIME *t, const MBG_TMO_TIME *t0 )
+{
+ #if defined( MBG_TGT_POSIX )
+
+ return (double) ( t->tv_sec - t0->tv_sec )
+ + (double) ( t->tv_usec - t0->tv_usec ) / 1e6;
+
+ #elif defined( MBG_TGT_WIN32 )
+
+ return ( (double) (int64_t) ( t->u64 - t0->u64 ) ) / 1e7;
+
+ #else // DOS, ...
+
+ return (double) ( *t - *t0 ) / (double) CLOCKS_PER_SEC;
+
+ #endif
+
+} // mbg_tmo_delta_t
+
+#elif defined( MBG_TGT_CVI )
+
+ #define mbg_tmo_delta_t( _t, _t0 ) \
+ ( (double) ( (_t)->u64 - (_t0)->u64 ) / (double) CLOCKS_PER_SEC )
+
+#else // DOS, ...
+
+ #define mbg_tmo_delta_t( _t, _t0 ) \
+ ( (double) ( *(_t) - *(_t0) ) / (double) CLOCKS_PER_SEC )
+
+#endif
+
+
+
#if defined( __mbg_inline )
static __mbg_inline
int mbg_tmo_time_is_after( const MBG_TMO_TIME *t_now, const MBG_TMO_TIME *tmo )
{
- #if defined( MBG_TGT_UNIX )
+ #if defined( MBG_TGT_POSIX )
return ( ( t_now->tv_sec > tmo->tv_sec ) ||
( ( t_now->tv_sec == tmo->tv_sec ) && ( t_now->tv_usec > tmo->tv_usec ) ) );
@@ -275,19 +329,19 @@ int mbg_tmo_curr_time_is_after( const MBG_TMO_TIME *tmo )
#if defined( MBG_TGT_CVI )
// needs to be implemented as non-inline function in mbg_tmo.c
- void mbgserio_msec_to_timeval( ulong msec, struct timeval *tv );
+ void mbg_msec_to_timeval( ulong msec, struct timeval *tv );
-#elif defined( MBG_TGT_UNIX )
+#elif defined( MBG_TGT_POSIX ) || defined( MBG_TGT_WIN32 )
static __mbg_inline
-void mbgserio_msec_to_timeval( ulong msec, struct timeval *tv )
+void mbg_msec_to_timeval( ulong msec, struct timeval *tv )
{
tv->tv_sec = msec / 1000;
tv->tv_usec = ( msec % 1000 ) * 1000;
-} // mbgserio_msec_to_timeval
+} // mbg_msec_to_timeval
-#endif // defined( MBG_TGT_UNIX ) || defined( MBG_TGT_WIN32 )
+#endif // defined( MBG_TGT_POSIX ) || defined( MBG_TGT_WIN32 )
/* function prototypes: */