diff options
Diffstat (limited to 'mbglib/common/mbg_tmo.h')
-rw-r--r-- | mbglib/common/mbg_tmo.h | 80 |
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: */ |