pub(crate) fn decode_latitude(raw: i32) -> Option<f64> {
let deg = f64::from(raw) / 600_000.0;
if !(-90.0..=90.0).contains(°) {
None
} else {
Some(deg)
}
}
pub(crate) fn decode_longitude(raw: i32) -> Option<f64> {
let deg = f64::from(raw) / 600_000.0;
if !(-180.0..=180.0).contains(°) {
None
} else {
Some(deg)
}
}
pub(crate) fn decode_sog(raw: u32) -> Option<f32> {
if raw == 1023 {
None
} else {
Some(raw as f32 / 10.0)
}
}
pub(crate) fn decode_cog(raw: u32) -> Option<f32> {
if raw == 3600 {
None
} else {
Some(raw as f32 / 10.0)
}
}
pub(crate) fn decode_heading(raw: u32) -> Option<u16> {
if raw == 511 { None } else { Some(raw as u16) }
}
pub(crate) fn decode_rot(raw: i32) -> Option<f32> {
if raw == -128 { None } else { Some(raw as f32) }
}