Program Listing for File frequency.hpp
↰ Return to documentation for file (/tmp/ws/src/ecl_core/ecl_time/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_ */