Program Listing for File frequency.hpp

Return to documentation for file (include/ecl/time/frequency.hpp)

/*****************************************************************************
** Ifdefs
*****************************************************************************/

#ifndef ecl_time_TIME_FREQUENCY_DIAGNOSTICS_HPP_
#define ecl_time_TIME_FREQUENCY_DIAGNOSTICS_HPP_

/*****************************************************************************
** Includes
*****************************************************************************/

#include "timestamp.hpp"

/*****************************************************************************
** Namespaces
*****************************************************************************/

namespace ecl {

/*****************************************************************************
** Interfaces
*****************************************************************************/
struct FrequencyDiagnostics {

  FrequencyDiagnostics()
  : has_connection(false)
  , hz(-1.0)
  , std_dev(-1.0)
  , minimum_interval(-1.0)
  , maximum_interval(-1.0)
  , last_incoming()
  {}

  bool has_connection;
  float hz;
  float std_dev;
  float minimum_interval;
  float maximum_interval;
  float last_incoming;

};

class FrequencyMonitor {
public:
  FrequencyMonitor(
      const float& window_period = 2.0,
      const bool& use_realtime_clock=false
      );
  void update();
  const FrequencyDiagnostics& analyse();

  const FrequencyDiagnostics& diagnostics() const { return current_diagnostics; };

protected:
  FrequencyDiagnostics current_diagnostics;
  unsigned int incoming_counter;
  ecl::TimeStamp last_anyalsed;
  ecl::TimeStamp minimum_interval;
  ecl::TimeStamp maximum_interval;
  ecl::TimeStamp period;
  bool use_realtime_clock;
  ecl::TimeStamp last_incoming;
};

/*****************************************************************************
** Trailers
*****************************************************************************/

} // namespace ecl

#endif /* ecl_time_TIME_FREQUENCY_DIAGNOSTICS_HPP_ */