canboat_rs/pgns/
simnet_parameter_set.rs1use 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}