1 #include <marnav/nmea/zda.hpp>
2 #include <marnav/nmea/io.hpp>
7 constexpr sentence_id
zda::ID
;
8 constexpr const char * zda::TAG
;
11 : sentence(ID
, TAG
, talker::global_positioning_system
)
15 zda::zda(talker talk
, fields::const_iterator first
, fields::const_iterator last
)
16 : sentence(ID
, TAG
, talk
)
18 if (std::distance(first
, last
) != 6)
19 throw std::invalid_argument
{"invalid number of fields in zda"};
21 std::optional
<uint32_t> d
;
22 std::optional
<uint32_t> m
;
23 std::optional
<uint32_t> y
;
25 read(*(first
+ 0), time_utc_
);
26 read(*(first
+ 1), d
);
27 read(*(first
+ 2), m
);
28 read(*(first
+ 3), y
);
29 read(*(first
+ 4), local_zone_hours_
);
30 read(*(first
+ 5), local_zone_minutes_
);
33 date_
= nmea::date
{*y
, to_month(*m
), *d
};
36 void zda::append_data_to(std::string
& s
, const version
&) const
38 std::optional
<uint32_t> d
;
39 std::optional
<uint32_t> m
;
40 std::optional
<uint32_t> y
;
44 m
= to_numeric(date_
->mon());
48 append(s
, to_string(time_utc_
));
49 append(s
, format(d
, 2));
50 append(s
, format(m
, 2));
51 append(s
, format(y
, 4));
52 append(s
, format(local_zone_hours_
, 2));
53 append(s
, format(local_zone_minutes_
, 2));