canboat_rs/pgns/
ais_binary_broadcast_message.rs

1use crate::nmea_option::NmeaOption;
2use crate::pgn_types::PgnType;
3pub const LENGTH: usize = 8usize;
4pub const PGN: u32 = 129797u32;
5#[derive(Debug)]
6pub enum MessageId {
7    ScheduledClassApositionreport,
8    AssignedscheduledClassApositionreport,
9    InterrogatedClassApositionreport,
10    Basestationreport,
11    Staticandvoyagerelateddata,
12    Binaryaddressedmessage,
13    Binaryacknowledgement,
14    Binarybroadcastmessage,
15    StandardSARaircraftpositionreport,
16    UTCdateinquiry,
17    UTCdateresponse,
18    Safetyrelatedaddressedmessage,
19    Safetyrelatedacknowledgement,
20    Satetyrelatedbroadcastmessage,
21    Interrogation,
22    Assignmentmodecommand,
23    DGNSSbroadcastbinarymessage,
24    StandardClassBpositionreport,
25    ExtendedClassBpositionreport,
26    Datalinkmanagementmessage,
27    ATONreport,
28    Channelmanagement,
29    Groupassignmentcommand,
30    Staticdatareport,
31    Singleslotbinarymessage,
32    Multipleslotbinarymessage,
33    Positionreportforlongrangeapplications,
34}
35impl bitfield::Into<u8> for MessageId {
36    fn into(self) -> u8 {
37        match self {
38            Self::ScheduledClassApositionreport => 1u8,
39            Self::AssignedscheduledClassApositionreport => 2u8,
40            Self::InterrogatedClassApositionreport => 3u8,
41            Self::Basestationreport => 4u8,
42            Self::Staticandvoyagerelateddata => 5u8,
43            Self::Binaryaddressedmessage => 6u8,
44            Self::Binaryacknowledgement => 7u8,
45            Self::Binarybroadcastmessage => 8u8,
46            Self::StandardSARaircraftpositionreport => 9u8,
47            Self::UTCdateinquiry => 10u8,
48            Self::UTCdateresponse => 11u8,
49            Self::Safetyrelatedaddressedmessage => 12u8,
50            Self::Safetyrelatedacknowledgement => 13u8,
51            Self::Satetyrelatedbroadcastmessage => 14u8,
52            Self::Interrogation => 15u8,
53            Self::Assignmentmodecommand => 16u8,
54            Self::DGNSSbroadcastbinarymessage => 17u8,
55            Self::StandardClassBpositionreport => 18u8,
56            Self::ExtendedClassBpositionreport => 19u8,
57            Self::Datalinkmanagementmessage => 20u8,
58            Self::ATONreport => 21u8,
59            Self::Channelmanagement => 22u8,
60            Self::Groupassignmentcommand => 23u8,
61            Self::Staticdatareport => 24u8,
62            Self::Singleslotbinarymessage => 25u8,
63            Self::Multipleslotbinarymessage => 26u8,
64            Self::Positionreportforlongrangeapplications => 27u8,
65        }
66    }
67}
68impl bitfield::Into<NmeaOption<MessageId>> for u8 {
69    fn into(self) -> NmeaOption<MessageId> {
70        match self {
71            1u8 => NmeaOption::Some(MessageId::ScheduledClassApositionreport),
72            2u8 => NmeaOption::Some(MessageId::AssignedscheduledClassApositionreport),
73            3u8 => NmeaOption::Some(MessageId::InterrogatedClassApositionreport),
74            4u8 => NmeaOption::Some(MessageId::Basestationreport),
75            5u8 => NmeaOption::Some(MessageId::Staticandvoyagerelateddata),
76            6u8 => NmeaOption::Some(MessageId::Binaryaddressedmessage),
77            7u8 => NmeaOption::Some(MessageId::Binaryacknowledgement),
78            8u8 => NmeaOption::Some(MessageId::Binarybroadcastmessage),
79            9u8 => NmeaOption::Some(MessageId::StandardSARaircraftpositionreport),
80            10u8 => NmeaOption::Some(MessageId::UTCdateinquiry),
81            11u8 => NmeaOption::Some(MessageId::UTCdateresponse),
82            12u8 => NmeaOption::Some(MessageId::Safetyrelatedaddressedmessage),
83            13u8 => NmeaOption::Some(MessageId::Safetyrelatedacknowledgement),
84            14u8 => NmeaOption::Some(MessageId::Satetyrelatedbroadcastmessage),
85            15u8 => NmeaOption::Some(MessageId::Interrogation),
86            16u8 => NmeaOption::Some(MessageId::Assignmentmodecommand),
87            17u8 => NmeaOption::Some(MessageId::DGNSSbroadcastbinarymessage),
88            18u8 => NmeaOption::Some(MessageId::StandardClassBpositionreport),
89            19u8 => NmeaOption::Some(MessageId::ExtendedClassBpositionreport),
90            20u8 => NmeaOption::Some(MessageId::Datalinkmanagementmessage),
91            21u8 => NmeaOption::Some(MessageId::ATONreport),
92            22u8 => NmeaOption::Some(MessageId::Channelmanagement),
93            23u8 => NmeaOption::Some(MessageId::Groupassignmentcommand),
94            24u8 => NmeaOption::Some(MessageId::Staticdatareport),
95            25u8 => NmeaOption::Some(MessageId::Singleslotbinarymessage),
96            26u8 => NmeaOption::Some(MessageId::Multipleslotbinarymessage),
97            27u8 => NmeaOption::Some(MessageId::Positionreportforlongrangeapplications),
98            _ => NmeaOption::None,
99        }
100    }
101}
102#[derive(Debug)]
103pub enum RepeatIndicator {
104    Initial,
105    Firstretransmission,
106    Secondretransmission,
107    Finalretransmission,
108}
109impl bitfield::Into<u8> for RepeatIndicator {
110    fn into(self) -> u8 {
111        match self {
112            Self::Initial => 0u8,
113            Self::Firstretransmission => 1u8,
114            Self::Secondretransmission => 2u8,
115            Self::Finalretransmission => 3u8,
116        }
117    }
118}
119impl bitfield::Into<NmeaOption<RepeatIndicator>> for u8 {
120    fn into(self) -> NmeaOption<RepeatIndicator> {
121        match self {
122            0u8 => NmeaOption::Some(RepeatIndicator::Initial),
123            1u8 => NmeaOption::Some(RepeatIndicator::Firstretransmission),
124            2u8 => NmeaOption::Some(RepeatIndicator::Secondretransmission),
125            3u8 => NmeaOption::Some(RepeatIndicator::Finalretransmission),
126            _ => NmeaOption::None,
127        }
128    }
129}
130#[derive(Debug)]
131pub enum AisTransceiverInformation {
132    ChannelAVDLreception,
133    ChannelBVDLreception,
134    ChannelAVDLtransmission,
135    ChannelBVDLtransmission,
136    Owninformationnotbroadcast,
137    Reserved,
138}
139impl bitfield::Into<u8> for AisTransceiverInformation {
140    fn into(self) -> u8 {
141        match self {
142            Self::ChannelAVDLreception => 0u8,
143            Self::ChannelBVDLreception => 1u8,
144            Self::ChannelAVDLtransmission => 2u8,
145            Self::ChannelBVDLtransmission => 3u8,
146            Self::Owninformationnotbroadcast => 4u8,
147            Self::Reserved => 5u8,
148        }
149    }
150}
151impl bitfield::Into<NmeaOption<AisTransceiverInformation>> for u8 {
152    fn into(self) -> NmeaOption<AisTransceiverInformation> {
153        match self {
154            0u8 => NmeaOption::Some(AisTransceiverInformation::ChannelAVDLreception),
155            1u8 => NmeaOption::Some(AisTransceiverInformation::ChannelBVDLreception),
156            2u8 => NmeaOption::Some(AisTransceiverInformation::ChannelAVDLtransmission),
157            3u8 => NmeaOption::Some(AisTransceiverInformation::ChannelBVDLtransmission),
158            4u8 => {
159                NmeaOption::Some(AisTransceiverInformation::Owninformationnotbroadcast)
160            }
161            5u8 => NmeaOption::Some(AisTransceiverInformation::Reserved),
162            _ => NmeaOption::None,
163        }
164    }
165}
166use bitfield::bitfield;
167bitfield! {
168    #[doc = "AIS Binary Broadcast Message"] pub struct AisBinaryBroadcastMessage([u8]);
169    impl Debug; u32; pub u8, from into NmeaOption < MessageId >, message_id, _ : 5usize,
170    0usize; pub u8, from into NmeaOption < RepeatIndicator >, repeat_indicator, _ :
171    7usize, 6usize; pub source_id, _ : 39usize, 8usize; pub reserved, _ : 40usize,
172    40usize; pub u8, from into NmeaOption < AisTransceiverInformation >,
173    ais_transceiver_information, _ : 45usize, 41usize; pub reserved_6, _ : 47usize,
174    46usize; pub number_of_bits_in_binary_data_field, _ : 63usize, 48usize;
175}
176impl AisBinaryBroadcastMessage<&[u8]> {
177    pub fn is_match(&self, pgn: u32) -> bool {
178        129797u32 == pgn
179    }
180    pub fn get_pgn() -> u32 {
181        129797u32
182    }
183    pub fn get_message_type() -> PgnType {
184        PgnType::Fast
185    }
186}