Skip to main content

gnss_protos/gps/
bytes.rs

1#[derive(Debug)]
2/// [GpsDataByte] aligned to 32 bits
3pub enum GpsDataByte {
4    /// 2-bit MSB padding.
5    /// Usually used at the beginning or stream termination by computers.
6    MsbPadded(u8),
7
8    /// 2-bit LSB padding.
9    /// Usually used at the beginning or stream termination by computers.
10    LsbPadded(u8),
11
12    /// Plain byte
13    Byte(u8),
14}
15
16impl core::fmt::LowerExp for GpsDataByte {
17    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
18        match self {
19            Self::MsbPadded(value) => write!(f, "0x{:02}X", value),
20            Self::LsbPadded(value) => write!(f, "0x{:02}X", (value << 2)),
21            Self::Byte(value) => write!(f, "0x{:02}X", value),
22        }
23    }
24}
25
26impl GpsDataByte {
27    /// Stores provided byte as 2-bit MSB padded [u8]
28    pub fn msb_padded(byte: u8) -> Self {
29        Self::MsbPadded(byte & 0x3f)
30    }
31
32    /// Stores provided byte as 2-bit LSB padded [u8]
33    pub fn lsb_padded(byte: u8) -> Self {
34        Self::LsbPadded((byte & 0xfc) >> 2)
35    }
36}