1 #include <marnav/nmea/tpr.hpp>
2 #include <marnav/nmea/io.hpp>
9 constexpr sentence_id
tpr::ID
;
10 constexpr const char * tpr::TAG
;
13 : sentence(ID
, TAG
, talker::global_positioning_system
)
17 tpr::tpr(talker talk
, fields::const_iterator first
, fields::const_iterator last
)
18 : sentence(ID
, TAG
, talk
)
20 if (std::distance(first
, last
) != 6)
21 throw std::invalid_argument
{"invalid number of fields in tpr"};
23 unit::distance range_unit
;
24 unit::distance depth_unit
;
26 read(*(first
+ 0), range_
);
27 read(*(first
+ 1), range_unit
);
28 read(*(first
+ 2), bearing_
);
29 // separator omitted intentionally
30 read(*(first
+ 4), depth_
);
31 read(*(first
+ 5), depth_unit
);
33 check_value(range_unit
, {unit::distance::meter
}, "range_unit");
34 check_value(depth_unit
, {unit::distance::meter
}, "depth_unit");
37 void tpr::append_data_to(std::string
& s
) const
39 append(s
, to_string(range_
));
40 append(s
, to_string(unit::distance::meter
));
41 append(s
, to_string(bearing_
));
43 append(s
, to_string(depth_
));
44 append(s
, to_string(unit::distance::meter
));