NMEA: Qt example extended.
[marnav.git] / src / marnav / nmea / pgrme.hpp
blob9e987081596cb07e40341518d8c7429b03d1708c
1 #ifndef __NMEA__PGRME__HPP__
2 #define __NMEA__PGRME__HPP__
4 #include <marnav/nmea/sentence.hpp>
5 #include <marnav/utils/optional.hpp>
7 namespace marnav
9 namespace nmea
11 MARNAV_NMEA_DECLARE_SENTENCE_PARSE_FUNC(pgrme)
13 /// @brief PGRME - Garmin Estimated Error
14 ///
15 /// @code
16 /// 1 2 3 4 5 6 7
17 /// | | | | | | |
18 /// $PGRME,hhh,M,vvv,M,ttt,M*hh<CR><LF>
19 /// @endcode
20 ///
21 /// Field Number:
22 ///
23 /// 1. Estimated horizontal position error (HPE)
24 /// 2. M=meters
25 /// 3. Estimated vertical position error (VPE)
26 /// 4. M=meters
27 /// 5. Overall spherical equivalent position error
28 /// 6. M=meters
29 /// 7. Checksum
30 ///
31 /// Example: <tt>$PGRME,15.0,M,45.0,M,25.0,M*22</tt>
32 ///
33 class pgrme : public sentence
35 MARNAV_NMEA_SENTENCE_FRIENDS(pgrme)
37 public:
38 constexpr static const sentence_id ID = sentence_id::PGRME;
39 constexpr static const char * TAG = "PGRME";
41 virtual ~pgrme() {}
43 pgrme();
44 pgrme(const pgrme &) = default;
45 pgrme & operator=(const pgrme &) = default;
47 protected:
48 pgrme(
49 const std::string & talker, fields::const_iterator first, fields::const_iterator last);
50 virtual std::vector<std::string> get_data() const override;
52 private:
53 utils::optional<double> horizontal_position_error;
54 unit::distance horizontal_position_error_unit = unit::distance::meter;
55 utils::optional<double> vertical_position_error;
56 unit::distance vertical_position_error_unit = unit::distance::meter;
57 utils::optional<double> overall_spherical_equiv_position_error;
58 unit::distance overall_spherical_equiv_position_error_unit = unit::distance::meter;
60 public:
61 NMEA_GETTER(horizontal_position_error)
62 NMEA_GETTER(horizontal_position_error_unit)
63 NMEA_GETTER(vertical_position_error)
64 NMEA_GETTER(vertical_position_error_unit)
65 NMEA_GETTER(overall_spherical_equiv_position_error)
66 NMEA_GETTER(overall_spherical_equiv_position_error_unit)
68 void set_horizontal_position_error(double t) noexcept { horizontal_position_error = t; }
69 void set_vertical_position_error(double t) noexcept { vertical_position_error = t; }
70 void set_overall_spherical_equiv_position_error(double t) noexcept
72 overall_spherical_equiv_position_error = t;
78 #endif