1 #ifndef __NMEA__RMA__HPP__
2 #define __NMEA__RMA__HPP__
4 #include <marnav/nmea/sentence.hpp>
5 #include <marnav/nmea/angle.hpp>
6 #include <marnav/utils/optional.hpp>
12 MARNAV_NMEA_DECLARE_SENTENCE_PARSE_FUNC(rma
)
14 /// @brief RMA - Recommended Minimum Navigation Information
17 /// 1 2 3 4 5 6 7 8 9 10 11
18 /// | | | | | | | | | | |
19 /// $--RMA,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,x.x,x.x,x.x,a*hh<CR><LF>
25 /// 3. Latitude hemisphere
29 /// 5. Longitude hemisphere
32 /// 6. Time Difference A, uS
33 /// 7. Time Difference B, uS
34 /// 8. Speed Over Ground, Knots
35 /// 9. Track Made Good, degrees true
36 /// 10. Magnetic Variation, degrees
37 /// 11. Magnetic Variation, degrees, direction
41 class rma
: public sentence
43 MARNAV_NMEA_SENTENCE_FRIENDS(rma
)
46 constexpr static const sentence_id ID
= sentence_id::RMA
;
47 constexpr static const char * TAG
= "RMA";
52 rma(const rma
&) = default;
53 rma
& operator=(const rma
&) = default;
56 rma(const std::string
& talker
, fields::const_iterator first
, fields::const_iterator last
);
57 virtual std::vector
<std::string
> get_data() const override
;
60 utils::optional
<char> blink_warning
;
61 utils::optional
<geo::latitude
> lat
;
62 utils::optional
<direction
> lat_hem
; // latitude dir, N:north, S:south
63 utils::optional
<geo::longitude
> lon
;
64 utils::optional
<direction
> lon_hem
; // longitude dir, E:east, W:west
65 utils::optional
<double> time_diff_a
; // time difference A in microseconds
66 utils::optional
<double> time_diff_b
; // time difference B in microseconds
67 utils::optional
<double> sog
; // speed over ground in knots
68 utils::optional
<double> track
; // track made good, degrees
69 utils::optional
<double> magnetic_var
; // magnetic variation in degrees
70 utils::optional
<direction
>
71 magnetic_var_hem
; // magnetic variation hemisphere, E:east, W:west
74 NMEA_GETTER(blink_warning
)
75 NMEA_GETTER(time_diff_a
)
76 NMEA_GETTER(time_diff_b
)
79 NMEA_GETTER(magnetic_var
)
80 NMEA_GETTER(magnetic_var_hem
)
82 utils::optional
<geo::longitude
> get_longitude() const;
83 utils::optional
<geo::latitude
> get_latitude() const;
85 void set_blink_warning(char t
) noexcept
{ blink_warning
= t
; }
86 void set_lat(const geo::latitude
& t
);
87 void set_lon(const geo::longitude
& t
);
88 void set_time_diff_a(double t
) noexcept
{ time_diff_a
= t
; }
89 void set_time_diff_b(double t
) noexcept
{ time_diff_b
= t
; }
90 void set_sog(double t
) noexcept
{ sog
= t
; }
91 void set_track(double t
) noexcept
{ track
= t
; }
92 void set_magnetic_var(double t
, direction h
);