use bitflags::bitflags;
use crate::{ubx_checksum, MemWriter, MemWriterError, UbxPacketCreator, UbxPacketMeta};
use ublox_derive::{ubx_extend_bitflags, ubx_packet_send};
#[ubx_packet_send]
#[ubx(class = 6, id = 4, fixed_payload_len = 4)]
struct CfgRst {
#[ubx(map_type = NavBbrMask)]
nav_bbr_mask: u16,
#[ubx(map_type = ResetMode)]
reset_mode: u8,
reserved1: u8,
}
#[repr(u8)]
#[derive(Clone, Copy, Debug)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ResetMode {
HardwareResetImmediately = 0,
ControlledSoftwareReset = 0x1,
ControlledSoftwareResetGpsOnly = 0x02,
HardwareResetAfterShutdown = 0x04,
ControlledGpsStop = 0x08,
ControlledGpsStart = 0x09,
}
impl ResetMode {
const fn into_raw(self) -> u8 {
self as u8
}
}
#[ubx_extend_bitflags]
#[ubx(into_raw, rest_reserved)]
bitflags! {
pub struct NavBbrMask: u16 {
const EPHEMERIS = 1;
const ALMANACH = 2;
const HEALTH = 4;
const KLOBUCHARD = 8;
const POSITION = 16;
const CLOCK_DRIFT = 32;
const OSCILLATOR_PARAMETER = 64;
const UTC_CORRECTION_PARAMETERS = 0x80;
const RTC = 0x100;
const SFDR_PARAMETERS = 0x800;
const SFDR_VEHICLE_MONITORING_PARAMETERS = 0x1000;
const TCT_PARAMETERS = 0x2000;
const AUTONOMOUS_ORBIT_PARAMETERS = 0x8000;
}
}
#[derive(Clone, Copy)]
#[repr(transparent)]
pub struct NavBbrPredefinedMask(u16);
impl From<NavBbrPredefinedMask> for NavBbrMask {
fn from(x: NavBbrPredefinedMask) -> Self {
Self::from_bits_truncate(x.0)
}
}
impl NavBbrPredefinedMask {
pub const HOT_START: NavBbrPredefinedMask = NavBbrPredefinedMask(0);
pub const WARM_START: NavBbrPredefinedMask = NavBbrPredefinedMask(1);
pub const COLD_START: NavBbrPredefinedMask = NavBbrPredefinedMask(0xFFFF);
}