1 #include <marnav/nmea/rsd.hpp>
2 #include <marnav/nmea/io.hpp>
9 constexpr sentence_id
rsd::ID
;
10 constexpr const char * rsd::TAG
;
13 : sentence(ID
, TAG
, talker::integrated_instrumentation
)
17 rsd::rsd(talker talk
, fields::const_iterator first
, fields::const_iterator last
)
18 : sentence(ID
, TAG
, talk
)
20 if (std::distance(first
, last
) != 13)
21 throw std::invalid_argument
{"invalid number of fields in rsd"};
23 read(*(first
+ 0), origin_range_1
);
24 read(*(first
+ 1), origin_bearing_1
);
25 read(*(first
+ 2), variable_range_marker_1
);
26 read(*(first
+ 3), bearing_line_1
);
27 read(*(first
+ 4), origin_range_2
);
28 read(*(first
+ 5), origin_bearing_2
);
29 read(*(first
+ 6), variable_range_marker_2
);
30 read(*(first
+ 7), bearing_line_2
);
31 read(*(first
+ 8), cursor_range_
);
32 read(*(first
+ 9), cursor_bearing_
);
33 read(*(first
+ 10), range_scale_
);
34 read(*(first
+ 11), range_unit_
);
35 read(*(first
+ 12), display_rotation_
);
38 void rsd::set_cursor(double range
, double bearing
) noexcept
40 cursor_range_
= range
;
41 cursor_bearing_
= bearing
;
44 void rsd::set_range(double scale
, char unit
) noexcept
50 void rsd::set_1(double range
, double bearing
, double var_range_marker
, double bearing_line
)
52 origin_range_1
= range
;
53 origin_bearing_1
= bearing
;
54 variable_range_marker_1
= var_range_marker
;
55 bearing_line_1
= bearing_line
;
58 void rsd::set_2(double range
, double bearing
, double var_range_marker
, double bearing_line
)
60 origin_range_2
= range
;
61 origin_bearing_2
= bearing
;
62 variable_range_marker_2
= var_range_marker
;
63 bearing_line_2
= bearing_line
;
66 void rsd::append_data_to(std::string
& s
) const
68 append(s
, to_string(origin_range_1
));
69 append(s
, to_string(origin_bearing_1
));
70 append(s
, to_string(variable_range_marker_1
));
71 append(s
, to_string(bearing_line_1
));
72 append(s
, to_string(origin_range_2
));
73 append(s
, to_string(origin_bearing_2
));
74 append(s
, to_string(variable_range_marker_2
));
75 append(s
, to_string(bearing_line_2
));
76 append(s
, to_string(cursor_range_
));
77 append(s
, to_string(cursor_bearing_
));
78 append(s
, to_string(range_scale_
));
79 append(s
, to_string(range_unit_
));
80 append(s
, to_string(display_rotation_
));