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}