mirror of
https://github.com/nasa/fprime.git
synced 2025-12-10 00:44:37 -06:00
78 lines
2.9 KiB
C++
78 lines
2.9 KiB
C++
// ======================================================================
|
|
// \title Os/IntervalTimer.hpp
|
|
// \brief Definition for Os::IntervalTimer
|
|
// ======================================================================
|
|
#ifndef _IntervalTimer_hpp_
|
|
#define _IntervalTimer_hpp_
|
|
|
|
#include <Fw/FPrimeBasicTypes.hpp>
|
|
#include <Os/RawTime.hpp>
|
|
|
|
namespace Os {
|
|
//! \brief Os::IntervalTimer measures time intervals using start/stop functionality.
|
|
//!
|
|
//! The IntervalTimer class provides methods to capture the start and stop times of an interval
|
|
//! and calculate the difference between these times. It is useful for measuring the duration
|
|
//! of operations or events. Intervals can be returned in Fw::TimeInterval or as a microsecond U32.
|
|
//!
|
|
//! \note The caller must ensure that the start() method is called before the stop() method to get
|
|
//! a relevant time interval.
|
|
//!
|
|
//! \example
|
|
//! IntervalTimer timer;
|
|
//! timer.start();
|
|
//! // Perform some operations
|
|
//! timer.stop();
|
|
//! Fw::TimeInterval interval = timer.getTimeInterval();
|
|
class IntervalTimer {
|
|
public:
|
|
//! \brief Constructor
|
|
IntervalTimer();
|
|
|
|
//! \brief Destructor
|
|
~IntervalTimer() = default;
|
|
|
|
//! \brief Capture the start time of the interval.
|
|
//!
|
|
//! This method records the current time as the start time of the interval for this timer instance.
|
|
void start();
|
|
|
|
//! \brief Capture the stop time of the interval.
|
|
//!
|
|
//! This method records the current time as the stop time of the interval for this timer instance.
|
|
void stop();
|
|
|
|
//! \brief Get the difference between start and stop times in microseconds.
|
|
//!
|
|
//! This method calculates and returns the time difference between the start and stop times
|
|
//! in microseconds. The start() and stop() methods must be called before calling this method.
|
|
//!
|
|
//! \warning Users should prefer the getTimeInterval() method for better error handling.
|
|
//! \warning This function will return the maximum U32 value if the time difference is too large to fit in a U32.
|
|
//! \warning This means the largest time difference that can be measured is 2^32 microseconds (about 71 minutes).
|
|
//!
|
|
//! \return U32: The time difference in microseconds.
|
|
U32 getDiffUsec() const;
|
|
|
|
//! \brief Get the time interval between the start and stop times.
|
|
//!
|
|
//! This method calculates and returns the time interval between the recorded start and stop times
|
|
//! as a Fw::TimeInterval object.
|
|
//!
|
|
//! \param interval [out] A reference to a Fw::TimeInterval object where the calculated interval will be stored.
|
|
//! \return bool: True if the interval was successfully calculated, false otherwise.
|
|
Os::RawTime::Status getTimeInterval(Fw::TimeInterval& interval) const;
|
|
|
|
private:
|
|
RawTime m_startTime; //!< Stored start time
|
|
RawTime m_stopTime; //!< Stored end time
|
|
|
|
//! Disabled (private) Copy Constructor
|
|
IntervalTimer(IntervalTimer&);
|
|
|
|
}; // class IntervalTimer
|
|
|
|
} // namespace Os
|
|
|
|
#endif
|