diff options
Diffstat (limited to 'tmk_core/common/timer.h')
-rw-r--r-- | tmk_core/common/timer.h | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/tmk_core/common/timer.h b/tmk_core/common/timer.h index fe23f87aec..378cf7892c 100644 --- a/tmk_core/common/timer.h +++ b/tmk_core/common/timer.h @@ -19,18 +19,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #define TIMER_H 1 #include <stdint.h> +#include <stdbool.h> #if defined(__AVR__) -#include "avr/timer_avr.h" +# include "avr/timer_avr.h" #endif - -#define TIMER_DIFF(a, b, max) ((a) >= (b) ? (a) - (b) : (max) - (b) + (a)) -#define TIMER_DIFF_8(a, b) TIMER_DIFF(a, b, UINT8_MAX) -#define TIMER_DIFF_16(a, b) TIMER_DIFF(a, b, UINT16_MAX) -#define TIMER_DIFF_32(a, b) TIMER_DIFF(a, b, UINT32_MAX) -#define TIMER_DIFF_RAW(a, b) TIMER_DIFF_8(a, b) - +#define TIMER_DIFF(a, b, max) ((a) >= (b) ? (a) - (b) : (max) - (b) + (a)) +#define TIMER_DIFF_8(a, b) TIMER_DIFF(a, b, UINT8_MAX) +#define TIMER_DIFF_16(a, b) TIMER_DIFF(a, b, UINT16_MAX) +#define TIMER_DIFF_32(a, b) TIMER_DIFF(a, b, UINT32_MAX) +#define TIMER_DIFF_RAW(a, b) TIMER_DIFF_8(a, b) #ifdef __cplusplus extern "C" { @@ -38,14 +37,18 @@ extern "C" { extern volatile uint32_t timer_count; - -void timer_init(void); -void timer_clear(void); +void timer_init(void); +void timer_clear(void); uint16_t timer_read(void); uint32_t timer_read32(void); uint16_t timer_elapsed(uint16_t last); uint32_t timer_elapsed32(uint32_t last); +// Utility functions to check if a future time has expired & autmatically handle time wrapping if checked / reset frequently (half of max value) +inline bool timer_expired(uint16_t current, uint16_t future) { return (uint16_t)(current - future) < 0x8000; } + +inline bool timer_expired32(uint32_t current, uint32_t future) { return (uint32_t)(current - future) < 0x80000000; } + #ifdef __cplusplus } #endif |