Dev: improve robustness of CTags.cmake
[marnav.git] / src / marnav / nmea / rsd.cpp
blob5f8fa09f48f729090d1680e8560fc2ef41ac93a8
1 #include <marnav/nmea/rsd.hpp>
2 #include <marnav/nmea/io.hpp>
3 #include <stdexcept>
5 namespace marnav
7 namespace nmea
9 constexpr sentence_id rsd::ID;
10 constexpr const char * rsd::TAG;
12 rsd::rsd()
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
46 range_scale_ = scale;
47 range_unit_ = unit;
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_));