NMEA: consistency of macro names, exported by headers, all start now with 'MARNAV_'.
[marnav.git] / src / marnav / nmea / vtg.hpp
blob973c85716a7bf5e7078b92dc4eca3ac95fa206e3
1 #ifndef __NMEA__VTG__HPP__
2 #define __NMEA__VTG__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(vtg)
13 /// @brief VTG - Track made good and Ground speed
14 ///
15 /// @code
16 /// 1 2 3 4 5 6 7 8 9
17 /// | | | | | | | | |
18 /// $--VTG,x.x,T,x.x,M,x.x,N,x.x,K,m*hh<CR><LF>
19 /// @endcode
20 ///
21 /// Field Number:
22 /// 1. Track Degrees true
23 /// 2. Track degrees true reference
24 /// - T = True
25 /// 3. Track Degrees magnetic
26 /// 4. Track Degrees magnetic reference
27 /// - M = Magnetic
28 /// 5. Speed Knots
29 /// 6. Speed knots unit
30 /// - N = Knots
31 /// 7. Speed Kilometers Per Hour
32 /// 8. speed Kilometers per hour unit
33 /// - K = Kilometers Per Hour
34 /// 9. FAA mode indicator (NMEA 2.3 and later)
35 ///
36 class vtg : public sentence
38 MARNAV_NMEA_SENTENCE_FRIENDS(vtg)
40 public:
41 constexpr static const sentence_id ID = sentence_id::VTG;
42 constexpr static const char * TAG = "VTG";
44 virtual ~vtg() {}
46 vtg();
47 vtg(const vtg &) = default;
48 vtg & operator=(const vtg &) = default;
50 protected:
51 vtg(const std::string & talker, fields::const_iterator first, fields::const_iterator last);
52 virtual std::vector<std::string> get_data() const override;
54 private:
55 utils::optional<double> track_true;
56 utils::optional<reference> type_true; // T:true
57 utils::optional<double> track_magn;
58 utils::optional<reference> type_magn; // M:magnetic
59 utils::optional<double> speed_kn;
60 utils::optional<unit::velocity> speed_kn_unit; // N:knots
61 utils::optional<double> speed_kmh;
62 utils::optional<unit::velocity> speed_kmh_unit; // K:kilometers per hour
63 utils::optional<mode_indicator> mode_ind; // NMEA 2.3 or newer
65 public:
66 MARNAV_NMEA_GETTER(track_true)
67 MARNAV_NMEA_GETTER(type_true)
68 MARNAV_NMEA_GETTER(track_magn)
69 MARNAV_NMEA_GETTER(type_magn)
70 MARNAV_NMEA_GETTER(speed_kn)
71 MARNAV_NMEA_GETTER(speed_kn_unit)
72 MARNAV_NMEA_GETTER(speed_kmh)
73 MARNAV_NMEA_GETTER(speed_kmh_unit)
74 MARNAV_NMEA_GETTER(mode_ind)
76 void set_track_true(double t) noexcept;
77 void set_track_magn(double t) noexcept;
78 void set_speed_kn(double t) noexcept;
79 void set_speed_kmh(double t) noexcept;
80 void set_mode_indicator(mode_indicator t) noexcept { mode_ind = t; }
85 #endif