1use crate::nmea_option::NmeaOption;
2use crate::pgn_types::PgnType;
3pub const LENGTH: usize = 19usize;
4pub const PGN: u32 = 130570u32;
5#[derive(Debug)]
6pub enum Source {
7 Vesselalarm,
8 AM,
9 FM,
10 Weather,
11 DAB,
12 Aux,
13 USB,
14 CD,
15 MP3,
16 AppleiOS,
17 Android,
18 Bluetooth,
19 SiriusXM,
20 Pandora,
21 Spotify,
22 Slacker,
23 Songza,
24 AppleRadio,
25 LastFM,
26 Ethernet,
27 VideoMP4,
28 VideoDVD,
29 VideoBluRay,
30 HDMI,
31 Video,
32}
33impl bitfield::Into<u8> for Source {
34 fn into(self) -> u8 {
35 match self {
36 Self::Vesselalarm => 0u8,
37 Self::AM => 1u8,
38 Self::FM => 2u8,
39 Self::Weather => 3u8,
40 Self::DAB => 4u8,
41 Self::Aux => 5u8,
42 Self::USB => 6u8,
43 Self::CD => 7u8,
44 Self::MP3 => 8u8,
45 Self::AppleiOS => 9u8,
46 Self::Android => 10u8,
47 Self::Bluetooth => 11u8,
48 Self::SiriusXM => 12u8,
49 Self::Pandora => 13u8,
50 Self::Spotify => 14u8,
51 Self::Slacker => 15u8,
52 Self::Songza => 16u8,
53 Self::AppleRadio => 17u8,
54 Self::LastFM => 18u8,
55 Self::Ethernet => 19u8,
56 Self::VideoMP4 => 20u8,
57 Self::VideoDVD => 21u8,
58 Self::VideoBluRay => 22u8,
59 Self::HDMI => 23u8,
60 Self::Video => 24u8,
61 }
62 }
63}
64impl bitfield::Into<NmeaOption<Source>> for u8 {
65 fn into(self) -> NmeaOption<Source> {
66 match self {
67 0u8 => NmeaOption::Some(Source::Vesselalarm),
68 1u8 => NmeaOption::Some(Source::AM),
69 2u8 => NmeaOption::Some(Source::FM),
70 3u8 => NmeaOption::Some(Source::Weather),
71 4u8 => NmeaOption::Some(Source::DAB),
72 5u8 => NmeaOption::Some(Source::Aux),
73 6u8 => NmeaOption::Some(Source::USB),
74 7u8 => NmeaOption::Some(Source::CD),
75 8u8 => NmeaOption::Some(Source::MP3),
76 9u8 => NmeaOption::Some(Source::AppleiOS),
77 10u8 => NmeaOption::Some(Source::Android),
78 11u8 => NmeaOption::Some(Source::Bluetooth),
79 12u8 => NmeaOption::Some(Source::SiriusXM),
80 13u8 => NmeaOption::Some(Source::Pandora),
81 14u8 => NmeaOption::Some(Source::Spotify),
82 15u8 => NmeaOption::Some(Source::Slacker),
83 16u8 => NmeaOption::Some(Source::Songza),
84 17u8 => NmeaOption::Some(Source::AppleRadio),
85 18u8 => NmeaOption::Some(Source::LastFM),
86 19u8 => NmeaOption::Some(Source::Ethernet),
87 20u8 => NmeaOption::Some(Source::VideoMP4),
88 21u8 => NmeaOption::Some(Source::VideoDVD),
89 22u8 => NmeaOption::Some(Source::VideoBluRay),
90 23u8 => NmeaOption::Some(Source::HDMI),
91 24u8 => NmeaOption::Some(Source::Video),
92 _ => NmeaOption::None,
93 }
94 }
95}
96#[derive(Debug)]
97pub enum Type {
98 File,
99 PlaylistName,
100 GenreName,
101 AlbumName,
102 ArtistName,
103 TrackName,
104 StationName,
105 StationNumber,
106 FavouriteNumber,
107 PlayQueue,
108 ContentInfo,
109}
110impl bitfield::Into<u8> for Type {
111 fn into(self) -> u8 {
112 match self {
113 Self::File => 0u8,
114 Self::PlaylistName => 1u8,
115 Self::GenreName => 2u8,
116 Self::AlbumName => 3u8,
117 Self::ArtistName => 4u8,
118 Self::TrackName => 5u8,
119 Self::StationName => 6u8,
120 Self::StationNumber => 7u8,
121 Self::FavouriteNumber => 8u8,
122 Self::PlayQueue => 9u8,
123 Self::ContentInfo => 10u8,
124 }
125 }
126}
127impl bitfield::Into<NmeaOption<Type>> for u8 {
128 fn into(self) -> NmeaOption<Type> {
129 match self {
130 0u8 => NmeaOption::Some(Type::File),
131 1u8 => NmeaOption::Some(Type::PlaylistName),
132 2u8 => NmeaOption::Some(Type::GenreName),
133 3u8 => NmeaOption::Some(Type::AlbumName),
134 4u8 => NmeaOption::Some(Type::ArtistName),
135 5u8 => NmeaOption::Some(Type::TrackName),
136 6u8 => NmeaOption::Some(Type::StationName),
137 7u8 => NmeaOption::Some(Type::StationNumber),
138 8u8 => NmeaOption::Some(Type::FavouriteNumber),
139 9u8 => NmeaOption::Some(Type::PlayQueue),
140 10u8 => NmeaOption::Some(Type::ContentInfo),
141 _ => NmeaOption::None,
142 }
143 }
144}
145#[derive(Debug)]
146pub enum Zone {
147 Allzones,
148 Zone1,
149 Zone2,
150 Zone3,
151 Zone4,
152}
153impl bitfield::Into<u8> for Zone {
154 fn into(self) -> u8 {
155 match self {
156 Self::Allzones => 0u8,
157 Self::Zone1 => 1u8,
158 Self::Zone2 => 2u8,
159 Self::Zone3 => 3u8,
160 Self::Zone4 => 4u8,
161 }
162 }
163}
164impl bitfield::Into<NmeaOption<Zone>> for u8 {
165 fn into(self) -> NmeaOption<Zone> {
166 match self {
167 0u8 => NmeaOption::Some(Zone::Allzones),
168 1u8 => NmeaOption::Some(Zone::Zone1),
169 2u8 => NmeaOption::Some(Zone::Zone2),
170 3u8 => NmeaOption::Some(Zone::Zone3),
171 4u8 => NmeaOption::Some(Zone::Zone4),
172 _ => NmeaOption::None,
173 }
174 }
175}
176#[derive(Debug)]
177pub enum InPlayQueue {
178 No,
179 Yes,
180}
181impl bitfield::Into<u8> for InPlayQueue {
182 fn into(self) -> u8 {
183 match self {
184 Self::No => 0u8,
185 Self::Yes => 1u8,
186 }
187 }
188}
189impl bitfield::Into<NmeaOption<InPlayQueue>> for u8 {
190 fn into(self) -> NmeaOption<InPlayQueue> {
191 match self {
192 0u8 => NmeaOption::Some(InPlayQueue::No),
193 1u8 => NmeaOption::Some(InPlayQueue::Yes),
194 _ => NmeaOption::None,
195 }
196 }
197}
198#[derive(Debug)]
199pub enum Locked {
200 No,
201 Yes,
202}
203impl bitfield::Into<u8> for Locked {
204 fn into(self) -> u8 {
205 match self {
206 Self::No => 0u8,
207 Self::Yes => 1u8,
208 }
209 }
210}
211impl bitfield::Into<NmeaOption<Locked>> for u8 {
212 fn into(self) -> NmeaOption<Locked> {
213 match self {
214 0u8 => NmeaOption::Some(Locked::No),
215 1u8 => NmeaOption::Some(Locked::Yes),
216 _ => NmeaOption::None,
217 }
218 }
219}
220use bitfield::bitfield;
221bitfield! {
222 #[doc = "Library Data File"] pub struct LibraryDataFile([u8]); impl Debug; u32; pub
223 u8, from into NmeaOption < Source >, source, _ : 7usize, 0usize; pub number, _ :
224 15usize, 8usize; pub id, _ : 47usize, 16usize; pub u8, from into NmeaOption < Type >,
225 type_, _ : 55usize, 48usize;
226}
227impl LibraryDataFile<&[u8]> {
228 pub fn is_match(&self, pgn: u32) -> bool {
229 130570u32 == pgn
230 }
231 pub fn get_pgn() -> u32 {
232 130570u32
233 }
234 pub fn get_message_type() -> PgnType {
235 PgnType::Fast
236 }
237}