canboat_rs/pgns/
simnet_parameter_set.rs

1use crate::nmea_option::NmeaOption;
2use crate::pgn_types::PgnType;
3pub const LENGTH: usize = 11usize;
4pub const PGN: u32 = 130846u32;
5#[derive(Debug)]
6pub enum DisplayGroup {
7    Default,
8    Group1,
9    Group2,
10    Group3,
11    Group4,
12    Group5,
13    Group6,
14}
15impl bitfield::Into<u8> for DisplayGroup {
16    fn into(self) -> u8 {
17        match self {
18            Self::Default => 1u8,
19            Self::Group1 => 2u8,
20            Self::Group2 => 3u8,
21            Self::Group3 => 4u8,
22            Self::Group4 => 5u8,
23            Self::Group5 => 6u8,
24            Self::Group6 => 7u8,
25        }
26    }
27}
28impl bitfield::Into<NmeaOption<DisplayGroup>> for u8 {
29    fn into(self) -> NmeaOption<DisplayGroup> {
30        match self {
31            1u8 => NmeaOption::Some(DisplayGroup::Default),
32            2u8 => NmeaOption::Some(DisplayGroup::Group1),
33            3u8 => NmeaOption::Some(DisplayGroup::Group2),
34            4u8 => NmeaOption::Some(DisplayGroup::Group3),
35            5u8 => NmeaOption::Some(DisplayGroup::Group4),
36            6u8 => NmeaOption::Some(DisplayGroup::Group5),
37            7u8 => NmeaOption::Some(DisplayGroup::Group6),
38            _ => NmeaOption::None,
39        }
40    }
41}
42use bitfield::bitfield;
43bitfield! {
44    #[doc = "Simnet: Parameter Set"] pub struct SimnetParameterSet([u8]); impl Debug;
45    u32; pub manufacturer_code, _ : 10usize, 0usize; pub reserved, _ : 12usize, 11usize;
46    pub industry_code, _ : 15usize, 13usize; pub address, _ : 23usize, 16usize; pub b, _
47    : 31usize, 24usize; pub u8, from into NmeaOption < DisplayGroup >, display_group, _ :
48    39usize, 32usize; pub d, _ : 55usize, 40usize; pub key, _ : 71usize, 56usize; pub
49    spare_9, _ : 79usize, 72usize; pub length, _ : 87usize, 80usize;
50}
51impl SimnetParameterSet<&[u8]> {
52    pub fn is_match(&self, pgn: u32) -> bool {
53        130846u32 == pgn && self.manufacturer_code() == 1857u32
54            && self.industry_code() == 4u32
55    }
56    pub fn get_pgn() -> u32 {
57        130846u32
58    }
59    pub fn get_message_type() -> PgnType {
60        PgnType::Fast
61    }
62}