use crate::{
navigation::time::TimeOffset,
prelude::{Epoch, TimeScale},
};
use ublox::{mga_gal_time::MgaGalTimeBuilder, mga_gps_utc::MgaGpsUtcBuilder};
#[cfg(doc)]
use ublox::{mga_gal_time::MgaGalTimeRef, mga_gps_utc::MgaGpsUtcRef};
impl TimeOffset {
pub fn to_ubx_mga_gps_utc(&self, ref_epoch: Epoch) -> Option<[u8; 28]> {
let (utc_wn_t, utc_tot) = ref_epoch.to_time_scale(TimeScale::UTC).to_time_of_week();
if self.lhs == TimeScale::GPST {
if self.rhs == TimeScale::UTC {
let builder = MgaGpsUtcBuilder {
msg_type: 1,
version: 0,
utc_a0: self.polynomial.0,
utc_a1: self.polynomial.1,
utc_dt_ls: 0, utc_tot: (utc_tot / 1_000_000_000) as u8, utc_wn_t: utc_wn_t as u8, utc_wn_lsf: 0,
utc_dn: 0,
utc_dt_lsf: 0,
reserved1: [0, 0],
reserved2: [0, 0],
};
return Some(builder.into_packet_bytes());
}
}
None
}
pub fn to_ubx_mga_gal_time(&self, ref_epoch: Epoch) -> Option<[u8; 20]> {
let (wn0g, t0g) = ref_epoch.to_time_of_week();
if self.lhs == TimeScale::GST {
if self.rhs == TimeScale::GPST {
let builder = MgaGalTimeBuilder {
msg_type: 1,
version: 0,
wn0g: wn0g as u8,
a0g: self.polynomial.0,
a1g: self.polynomial.1,
t0g: (t0g / 1_000_000_000) as f64,
reserved1: [0, 0],
reserved2: [0, 0],
};
return Some(builder.into_packet_bytes());
}
}
None
}
}