#ifndef _TIMER_H
#define _TIMER_H

extern volatile uint16_t timer;

inline uint16_t millisToTicks(uint16_t milliseconds) {
  return milliseconds * (1000.0f/32);
}

inline void resetTimer() {
  timer = 0;
}

inline void incrementTimer() {
  timer++;
}

inline bool timerExpired(uint16_t ticks) {
  return timer >= ticks;
}

inline bool timerUnexpired(uint16_t ticks) {
  return timer < ticks;
}

inline bool timerExpiredMillis(uint16_t milliseconds) {
  return timerExpired(millisToTicks(milliseconds));
}

inline bool timerUnexpiredMillis(uint16_t milliseconds) {
  return timerUnexpired(millisToTicks(milliseconds));
}

void ticktimer (uint16_t ticks);
void millitimer (uint16_t milliseconds);

#if SERIAL_ENABLED
const uint16_t TICKS_100_MILLIS = millisToTicks(100);
#endif //SERIAL_ENABLED

#endif // _TIMER_H