#ifndef __TIMER_H__
#define __TIMER_H__

#include "types.h"

typedef uint32_t clock_time_t;

class Timer {
	public:

		Timer() : _start(0), _interval(0) {}

		void Start(clock_time_t interval) {
			_interval = interval;
			_start = _ticks;
		}
		void Reset(void)	{ _start += _interval; }
		void Restart(void)	{ _start  = _ticks; }
		bool Expired(void)  { return (((_ticks - _start) >= _interval) ? true : false); }

		// Called whenever the Systick timer reaches zero
		static void SystickInterruptHandler(void) {
			Timer::_ticks++;
		}

	private:
		static volatile clock_time_t 	_ticks; 		// counter for 1ms SysTicks
		clock_time_t 					_start;
		clock_time_t 					_interval;
};

#endif // __TIMER_H__
