Program Listing for File fix_diagnostic.hpp

Return to documentation for file (/tmp/ws/src/ublox/ublox_gps/include/ublox_gps/fix_diagnostic.hpp)

#ifndef UBLOX_GPS_FIX_DIAGNOSTIC_HPP
#define UBLOX_GPS_FIX_DIAGNOSTIC_HPP

#include <memory>
#include <string>

#include <diagnostic_updater/diagnostic_updater.hpp>
#include <diagnostic_updater/publisher.hpp>

namespace ublox_node {

class FixDiagnostic {
public:
  explicit FixDiagnostic(const std::string & name, double freq_tol, int freq_window,
                         double stamp_min, uint16_t nav_rate, uint16_t meas_rate,
                         std::shared_ptr<diagnostic_updater::Updater> updater) {
    const double target_freq = 1.0 / (meas_rate * 1e-3 * nav_rate); // Hz
    min_freq = target_freq;
    max_freq = target_freq;
    diagnostic_updater::FrequencyStatusParam freq_param(&min_freq, &max_freq,
                                                        freq_tol, freq_window);
    double stamp_max = meas_rate * 1e-3 * (1 + freq_tol);
    diagnostic_updater::TimeStampStatusParam time_param(stamp_min, stamp_max);
    diagnostic = std::make_shared<diagnostic_updater::TopicDiagnostic>(name,
                                                                       *updater,
                                                                       freq_param,
                                                                       time_param);
  }

  // Must not copy this struct (would confuse FrequencyStatusParam pointers)
  FixDiagnostic(FixDiagnostic &&c) = delete;
  FixDiagnostic &operator=(FixDiagnostic &&c) = delete;
  FixDiagnostic(const FixDiagnostic &c) = delete;
  FixDiagnostic &operator=(const FixDiagnostic &c) = delete;

  ~FixDiagnostic() = default;

  std::shared_ptr<diagnostic_updater::TopicDiagnostic> diagnostic;

private:
  double min_freq;
  double max_freq;
};

}  // namespace ublox_node

#endif