// cppcheck-suppress-macro misra-c2012-1.2; allow __typeof__ extension
# define MIN(a, b) ({ \
__typeof__ ( a ) _a = ( a ) ; \
__typeof__ ( b ) _b = ( b ) ; \
( _a < _b ) ? _a : _b ; \
} )
// cppcheck-suppress-macro misra-c2012-1.2; allow __typeof__ extension
# define MAX(a, b) ({ \
__typeof__ ( a ) _a = ( a ) ; \
__typeof__ ( b ) _b = ( b ) ; \
( _a > _b ) ? _a : _b ; \
} )
// cppcheck-suppress-macro misra-c2012-1.2; allow __typeof__ extension
# define CLAMP(x, low, high) ({ \
__typeof__ ( x ) __x = ( x ) ; \
__typeof__ ( low ) __low = ( low ) ; \
__typeof__ ( high ) __high = ( high ) ; \
( __x > __high ) ? __high : ( ( __x < __low ) ? __low : __x ) ; \
} )
// cppcheck-suppress-macro misra-c2012-1.2; allow __typeof__ extension
# define ABS(a) ({ \
__typeof__ ( a ) _a = ( a ) ; \
( _a > 0 ) ? _a : ( - _a ) ; \
} )
# ifndef NULL
// this just provides a standard implementation of NULL
// in lieu of including libc in the panda build
// cppcheck-suppress [misra-c2012-21.1]
# define NULL ((void*)0)
# endif
// STM32 HAL defines this
# ifndef UNUSED
# define UNUSED(x) ((void)(x))
# endif
# define COMPILE_TIME_ASSERT(pred) ((void)sizeof(char[1 - (2 * (!(pred) ? 1 : 0))]))
// compute the time elapsed (in microseconds) from 2 counter samples
// case where ts < ts_last is ok: overflow is properly re-casted into uint32_t
uint32_t get_ts_elapsed ( uint32_t ts , uint32_t ts_last ) {
return ts - ts_last ;
}