canboat_rs/pgns/
simnet_fluid_level_sensor_configuration.rs1use crate::nmea_option::NmeaOption;
2use crate::pgn_types::PgnType;
3pub const LENGTH: usize = 14usize;
4pub const PGN: u32 = 130836u32;
5#[derive(Debug)]
6pub enum TankType {
7 Fuel,
8 Water,
9 Graywater,
10 Livewell,
11 Oil,
12 Blackwater,
13}
14impl bitfield::Into<u8> for TankType {
15 fn into(self) -> u8 {
16 match self {
17 Self::Fuel => 0u8,
18 Self::Water => 1u8,
19 Self::Graywater => 2u8,
20 Self::Livewell => 3u8,
21 Self::Oil => 4u8,
22 Self::Blackwater => 5u8,
23 }
24 }
25}
26impl bitfield::Into<NmeaOption<TankType>> for u8 {
27 fn into(self) -> NmeaOption<TankType> {
28 match self {
29 0u8 => NmeaOption::Some(TankType::Fuel),
30 1u8 => NmeaOption::Some(TankType::Water),
31 2u8 => NmeaOption::Some(TankType::Graywater),
32 3u8 => NmeaOption::Some(TankType::Livewell),
33 4u8 => NmeaOption::Some(TankType::Oil),
34 5u8 => NmeaOption::Some(TankType::Blackwater),
35 _ => NmeaOption::None,
36 }
37 }
38}
39use bitfield::bitfield;
40bitfield! {
41 #[doc = "Simnet: Fluid Level Sensor Configuration"] pub struct
42 SimnetFluidLevelSensorConfiguration([u8]); impl Debug; u32; pub manufacturer_code, _
43 : 10usize, 0usize; pub reserved, _ : 12usize, 11usize; pub industry_code, _ :
44 15usize, 13usize; pub c, _ : 23usize, 16usize; pub device, _ : 31usize, 24usize; pub
45 instance, _ : 39usize, 32usize; pub f, _ : 43usize, 40usize; pub u8, from into
46 NmeaOption < TankType >, tank_type, _ : 47usize, 44usize; pub capacity, _ : 79usize,
47 48usize; pub g, _ : 87usize, 80usize; pub h, _ : 103usize, 88usize; pub i, _ :
48 111usize, 104usize;
49}
50impl SimnetFluidLevelSensorConfiguration<&[u8]> {
51 pub fn is_match(&self, pgn: u32) -> bool {
52 130836u32 == pgn && self.manufacturer_code() == 1857u32
53 && self.industry_code() == 4u32
54 }
55 pub fn get_pgn() -> u32 {
56 130836u32
57 }
58 pub fn get_message_type() -> PgnType {
59 PgnType::Fast
60 }
61}