1 #ifndef __NMEA__VTG__HPP__
2 #define __NMEA__VTG__HPP__
4 #include <marnav/nmea/sentence.hpp>
5 #include <marnav/utils/optional.hpp>
11 MARNAV_NMEA_DECLARE_SENTENCE_PARSE_FUNC(vtg
)
13 /// @brief VTG - Track made good and Ground speed
18 /// $--VTG,x.x,T,x.x,M,x.x,N,x.x,K,m*hh<CR><LF>
22 /// 1. Track Degrees true
23 /// 2. Track degrees true reference
25 /// 3. Track Degrees magnetic
26 /// 4. Track Degrees magnetic reference
29 /// 6. Speed knots unit
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)
36 class vtg
: public sentence
38 MARNAV_NMEA_SENTENCE_FRIENDS(vtg
)
41 constexpr static const sentence_id ID
= sentence_id::VTG
;
42 constexpr static const char * TAG
= "VTG";
47 vtg(const vtg
&) = default;
48 vtg
& operator=(const vtg
&) = default;
51 vtg(const std::string
& talker
, fields::const_iterator first
, fields::const_iterator last
);
52 virtual std::vector
<std::string
> get_data() const override
;
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
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
; }