| /*----------------------------------------------------------------------------*/ |
| /* 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. */ |
| /*----------------------------------------------------------------------------*/ |
| #pragma once |
| |
| #include "Base.h" |
| #include "HAL/cpp/priority_mutex.h" |
| |
| typedef void (*TimerInterruptHandler)(void *param); |
| |
| void Wait(double seconds); |
| double GetClock(); |
| double GetTime(); |
| |
| /** |
| * 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() = default; |
| |
| Timer(const Timer&) = delete; |
| Timer& operator=(const Timer&) = delete; |
| |
| double Get() const; |
| void Reset(); |
| void Start(); |
| void Stop(); |
| bool HasPeriodPassed(double period); |
| |
| static double GetFPGATimestamp(); |
| static double GetPPCTimestamp(); |
| static double GetMatchTime(); |
| |
| // The time, in seconds, at which the 32-bit FPGA timestamp rolls over to 0 |
| static const double kRolloverTime; |
| |
| private: |
| double m_startTime = 0.0; |
| double m_accumulatedTime = 0.0; |
| bool m_running = false; |
| mutable priority_mutex m_mutex; |
| }; |