1 #include <marnav/nmea/aam.hpp>
3 #include <marnav/nmea/io.hpp>
9 constexpr sentence_id
aam::ID
;
10 constexpr const char * aam::TAG
;
13 : sentence(ID
, TAG
, talker::global_positioning_system
)
17 aam::aam(talker talk
, fields::const_iterator first
, fields::const_iterator last
)
18 : sentence(ID
, TAG
, talk
)
20 if (std::distance(first
, last
) != 5)
21 throw std::invalid_argument
{"invalid number of fields in aam"};
23 unit::distance radius_unit
;
25 read(*(first
+ 0), arrival_circle_entered_
);
26 read(*(first
+ 1), perpendicualar_passed_
);
27 read(*(first
+ 2), arrival_circle_radius_
);
28 read(*(first
+ 3), radius_unit
);
29 read(*(first
+ 4), waypoint_id_
);
31 check_status(arrival_circle_entered_
, "arrival_circle_entered");
32 check_status(perpendicualar_passed_
, "perpendicualar_passed");
33 check_value(radius_unit
, {unit::distance::nm
}, "arrival_circle_radius_unit");
36 void aam::set_arrival_circle_entered(status s
)
38 check_status(s
, "arrival_circle_entered");
39 arrival_circle_entered_
= s
;
42 void aam::set_perpendicular_passed(status s
)
44 check_status(s
, "perpendicualar_passed");
45 perpendicualar_passed_
= s
;
48 void aam::set_arrival_circle_radius(units::length t
)
51 throw std::invalid_argument
{"invalid argument, arrival radius below zero"};
52 arrival_circle_radius_
= t
.get
<units::nautical_miles
>();
55 void aam::append_data_to(std::string
& s
) const
57 append(s
, to_string(arrival_circle_entered_
));
58 append(s
, to_string(perpendicualar_passed_
));
59 append(s
, to_string(arrival_circle_radius_
.value()));
60 append(s
, to_string(unit::distance::nm
));
61 append(s
, to_string(waypoint_id_
));