20 static_cast<units::GeoAngle>(latitude),
21 static_cast<units::GeoAngle>(longitude)
26 gn_addr(lpv.gn_addr), timestamp(lpv.timestamp),
27 latitude(lpv.latitude), longitude(lpv.longitude)
33 return lhs.gn_addr == rhs.gn_addr
34 && lhs.timestamp == rhs.timestamp
35 && lhs.latitude == rhs.latitude
36 && lhs.longitude == rhs.longitude
37 && lhs.speed == rhs.speed
38 && lhs.heading == rhs.heading
39 && lhs.position_accuracy_indicator == rhs.position_accuracy_indicator;
49 return lhs.gn_addr == rhs.gn_addr
50 && lhs.timestamp == rhs.timestamp
51 && lhs.latitude == rhs.latitude
52 && lhs.longitude == rhs.longitude;
68 static const geo_angle_i32t limit_lat { 90.0 * units::degree };
69 static const geo_angle_i32t limit_lon { 180.0 * units::degree };
70 static const heading_u16t limit_hdg { 360.0 * units::degree };
74 }
else if (pv.latitude < -limit_lat || pv.latitude > limit_lat) {
76 }
else if (pv.longitude < -limit_lon || pv.longitude > limit_lon) {
78 }
else if (pv.heading > limit_hdg) {
87 serialize(lpv.gn_addr, ar);
88 serialize(lpv.timestamp, ar);
89 serialize(lpv.latitude, ar);
90 serialize(lpv.longitude, ar);
91 uint16_t paiAndSpeed = lpv.speed.value().raw();
92 paiAndSpeed |= lpv.position_accuracy_indicator ? 0x8000 : 0x0000;
93 serialize(host_cast(paiAndSpeed), ar);
94 serialize(lpv.heading, ar);
99 deserialize(lpv.gn_addr, ar);
100 deserialize(lpv.timestamp, ar);
101 deserialize(lpv.latitude, ar);
102 deserialize(lpv.longitude, ar);
103 uint16_t paiAndSpeed = 0;
104 deserialize(paiAndSpeed, ar);
105 lpv.position_accuracy_indicator = ((paiAndSpeed & 0x8000) != 0);
106 lpv.speed = LongPositionVector::speed_u15t::from_value(paiAndSpeed);
107 deserialize(lpv.heading, ar);