/*----------------------------------------------------------------------------*/
/* Copyright (c) FIRST 2008. All Rights Reserved.							  */
/* Open Source Software - may be modified and shared by FRC teams. The code   */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib.  */
/*----------------------------------------------------------------------------*/

#ifndef TIMER_H_
#define TIMER_H_

#include "semLib.h"
#include "Base.h"

typedef void (*TimerInterruptHandler)(void *param);

void Wait(double seconds);
double GetClock(void);
double GetTime(void);


/**
 * Timer objects measure accumulated time in seconds.
 * The timer object functions like a stopwatch. It can be started, stopped, and cleared. When the
 * timer is running its value counts up in seconds. When stopped, the timer holds the current
 * value. The implementation simply records the time when started and subtracts the current time
 * whenever the value is requested.
 */
class Timer
{
public:
	Timer();
	virtual ~Timer();
	double Get();
	void Reset();
	void Start();
	void Stop();
	bool HasPeriodPassed(double period);

	static double GetFPGATimestamp(void);
	static double GetPPCTimestamp(void);

private:
	double m_startTime;
	double m_accumulatedTime;
	bool m_running;
	SEM_ID m_semaphore;
	DISALLOW_COPY_AND_ASSIGN(Timer);
};

#endif
