00001 00004 /***************************************************************************** 00005 ** Ifdefs 00006 *****************************************************************************/ 00007 00008 #ifndef ecl_time_TIME_FREQUENCY_DIAGNOSTICS_HPP_ 00009 #define ecl_time_TIME_FREQUENCY_DIAGNOSTICS_HPP_ 00010 00011 /***************************************************************************** 00012 ** Includes 00013 *****************************************************************************/ 00014 00015 #include "timestamp.hpp" 00016 00017 /***************************************************************************** 00018 ** Namespaces 00019 *****************************************************************************/ 00020 00021 namespace ecl { 00022 00023 /***************************************************************************** 00024 ** Interfaces 00025 *****************************************************************************/ 00031 struct FrequencyDiagnostics { 00032 00033 FrequencyDiagnostics() 00034 : has_connection(false) 00035 , hz(-1.0) 00036 , std_dev(-1.0) 00037 , minimum_interval(-1.0) 00038 , maximum_interval(-1.0) 00039 , last_incoming() 00040 {} 00041 00042 bool has_connection; 00043 float hz; 00044 float std_dev; 00045 float minimum_interval; 00046 float maximum_interval; 00047 float last_incoming; 00048 00049 }; 00050 00083 class FrequencyMonitor { 00084 public: 00091 FrequencyMonitor( 00092 const float& window_period = 2.0, 00093 const bool& use_realtime_clock=false 00094 ); 00100 void update(); 00107 const FrequencyDiagnostics& analyse(); 00108 00113 const FrequencyDiagnostics& diagnostics() const { return current_diagnostics; }; 00114 00115 protected: 00116 FrequencyDiagnostics current_diagnostics; 00117 unsigned int incoming_counter; 00118 ecl::TimeStamp last_anyalsed; 00119 ecl::TimeStamp period; 00120 ecl::TimeStamp minimum_interval; 00121 ecl::TimeStamp maximum_interval; 00122 bool use_realtime_clock; 00123 ecl::TimeStamp last_incoming; 00124 }; 00125 00126 /***************************************************************************** 00127 ** Trailers 00128 *****************************************************************************/ 00129 00130 } // namespace ecl 00131 00132 #endif /* ecl_time_TIME_FREQUENCY_DIAGNOSTICS_HPP_ */