canboat_rs/pgns/
nmea_command_group_function.rs

1use crate::nmea_option::NmeaOption;
2use crate::pgn_types::PgnType;
3pub const LENGTH: usize = 6usize;
4pub const PGN: u32 = 126208u32;
5#[derive(Debug)]
6pub enum Priority {
7    Zero,
8    One,
9    Two,
10    Three,
11    Four,
12    Five,
13    Six,
14    Seven,
15    Leaveunchanged,
16    Resettodefault,
17}
18impl bitfield::Into<u8> for Priority {
19    fn into(self) -> u8 {
20        match self {
21            Self::Zero => 0u8,
22            Self::One => 1u8,
23            Self::Two => 2u8,
24            Self::Three => 3u8,
25            Self::Four => 4u8,
26            Self::Five => 5u8,
27            Self::Six => 6u8,
28            Self::Seven => 7u8,
29            Self::Leaveunchanged => 8u8,
30            Self::Resettodefault => 9u8,
31        }
32    }
33}
34impl bitfield::Into<NmeaOption<Priority>> for u8 {
35    fn into(self) -> NmeaOption<Priority> {
36        match self {
37            0u8 => NmeaOption::Some(Priority::Zero),
38            1u8 => NmeaOption::Some(Priority::One),
39            2u8 => NmeaOption::Some(Priority::Two),
40            3u8 => NmeaOption::Some(Priority::Three),
41            4u8 => NmeaOption::Some(Priority::Four),
42            5u8 => NmeaOption::Some(Priority::Five),
43            6u8 => NmeaOption::Some(Priority::Six),
44            7u8 => NmeaOption::Some(Priority::Seven),
45            8u8 => NmeaOption::Some(Priority::Leaveunchanged),
46            9u8 => NmeaOption::Some(Priority::Resettodefault),
47            _ => NmeaOption::None,
48        }
49    }
50}
51use bitfield::bitfield;
52bitfield! {
53    #[doc = "NMEA - Command group function"] pub struct NmeaCommandGroupFunction([u8]);
54    impl Debug; u32; pub function_code, _ : 7usize, 0usize; pub pgn, _ : 31usize, 8usize;
55    pub u8, from into NmeaOption < Priority >, priority, _ : 35usize, 32usize; pub
56    reserved, _ : 39usize, 36usize; pub number_of_parameters, _ : 47usize, 40usize; pub
57    parameter, _ : 55usize, 48usize;
58}
59impl NmeaCommandGroupFunction<&[u8]> {
60    pub fn is_match(&self, pgn: u32) -> bool {
61        126208u32 == pgn && self.function_code() == 1u32
62    }
63    pub fn get_pgn() -> u32 {
64        126208u32
65    }
66    pub fn get_message_type() -> PgnType {
67        PgnType::Fast
68    }
69}