1use crate::nmea_option::NmeaOption;
2use crate::pgn_types::PgnType;
3pub const LENGTH: usize = 9usize;
4pub const PGN: u32 = 130572u32;
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 GroupType1 {
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 GroupType1 {
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<GroupType1>> for u8 {
128 fn into(self) -> NmeaOption<GroupType1> {
129 match self {
130 0u8 => NmeaOption::Some(GroupType1::File),
131 1u8 => NmeaOption::Some(GroupType1::PlaylistName),
132 2u8 => NmeaOption::Some(GroupType1::GenreName),
133 3u8 => NmeaOption::Some(GroupType1::AlbumName),
134 4u8 => NmeaOption::Some(GroupType1::ArtistName),
135 5u8 => NmeaOption::Some(GroupType1::TrackName),
136 6u8 => NmeaOption::Some(GroupType1::StationName),
137 7u8 => NmeaOption::Some(GroupType1::StationNumber),
138 8u8 => NmeaOption::Some(GroupType1::FavouriteNumber),
139 9u8 => NmeaOption::Some(GroupType1::PlayQueue),
140 10u8 => NmeaOption::Some(GroupType1::ContentInfo),
141 _ => NmeaOption::None,
142 }
143 }
144}
145#[derive(Debug)]
146pub enum GroupType2 {
147 File,
148 PlaylistName,
149 GenreName,
150 AlbumName,
151 ArtistName,
152 TrackName,
153 StationName,
154 StationNumber,
155 FavouriteNumber,
156 PlayQueue,
157 ContentInfo,
158}
159impl bitfield::Into<u8> for GroupType2 {
160 fn into(self) -> u8 {
161 match self {
162 Self::File => 0u8,
163 Self::PlaylistName => 1u8,
164 Self::GenreName => 2u8,
165 Self::AlbumName => 3u8,
166 Self::ArtistName => 4u8,
167 Self::TrackName => 5u8,
168 Self::StationName => 6u8,
169 Self::StationNumber => 7u8,
170 Self::FavouriteNumber => 8u8,
171 Self::PlayQueue => 9u8,
172 Self::ContentInfo => 10u8,
173 }
174 }
175}
176impl bitfield::Into<NmeaOption<GroupType2>> for u8 {
177 fn into(self) -> NmeaOption<GroupType2> {
178 match self {
179 0u8 => NmeaOption::Some(GroupType2::File),
180 1u8 => NmeaOption::Some(GroupType2::PlaylistName),
181 2u8 => NmeaOption::Some(GroupType2::GenreName),
182 3u8 => NmeaOption::Some(GroupType2::AlbumName),
183 4u8 => NmeaOption::Some(GroupType2::ArtistName),
184 5u8 => NmeaOption::Some(GroupType2::TrackName),
185 6u8 => NmeaOption::Some(GroupType2::StationName),
186 7u8 => NmeaOption::Some(GroupType2::StationNumber),
187 8u8 => NmeaOption::Some(GroupType2::FavouriteNumber),
188 9u8 => NmeaOption::Some(GroupType2::PlayQueue),
189 10u8 => NmeaOption::Some(GroupType2::ContentInfo),
190 _ => NmeaOption::None,
191 }
192 }
193}
194#[derive(Debug)]
195pub enum GroupType3 {
196 File,
197 PlaylistName,
198 GenreName,
199 AlbumName,
200 ArtistName,
201 TrackName,
202 StationName,
203 StationNumber,
204 FavouriteNumber,
205 PlayQueue,
206 ContentInfo,
207}
208impl bitfield::Into<u8> for GroupType3 {
209 fn into(self) -> u8 {
210 match self {
211 Self::File => 0u8,
212 Self::PlaylistName => 1u8,
213 Self::GenreName => 2u8,
214 Self::AlbumName => 3u8,
215 Self::ArtistName => 4u8,
216 Self::TrackName => 5u8,
217 Self::StationName => 6u8,
218 Self::StationNumber => 7u8,
219 Self::FavouriteNumber => 8u8,
220 Self::PlayQueue => 9u8,
221 Self::ContentInfo => 10u8,
222 }
223 }
224}
225impl bitfield::Into<NmeaOption<GroupType3>> for u8 {
226 fn into(self) -> NmeaOption<GroupType3> {
227 match self {
228 0u8 => NmeaOption::Some(GroupType3::File),
229 1u8 => NmeaOption::Some(GroupType3::PlaylistName),
230 2u8 => NmeaOption::Some(GroupType3::GenreName),
231 3u8 => NmeaOption::Some(GroupType3::AlbumName),
232 4u8 => NmeaOption::Some(GroupType3::ArtistName),
233 5u8 => NmeaOption::Some(GroupType3::TrackName),
234 6u8 => NmeaOption::Some(GroupType3::StationName),
235 7u8 => NmeaOption::Some(GroupType3::StationNumber),
236 8u8 => NmeaOption::Some(GroupType3::FavouriteNumber),
237 9u8 => NmeaOption::Some(GroupType3::PlayQueue),
238 10u8 => NmeaOption::Some(GroupType3::ContentInfo),
239 _ => NmeaOption::None,
240 }
241 }
242}
243use bitfield::bitfield;
244bitfield! {
245 #[doc = "Library Data Search"] pub struct LibraryDataSearch([u8]); impl Debug; u32;
246 pub u8, from into NmeaOption < Source >, source, _ : 7usize, 0usize; pub number, _ :
247 15usize, 8usize; pub group_id, _ : 47usize, 16usize; pub u8, from into NmeaOption <
248 GroupType1 >, group_type_1, _ : 55usize, 48usize;
249}
250impl LibraryDataSearch<&[u8]> {
251 pub fn is_match(&self, pgn: u32) -> bool {
252 130572u32 == pgn
253 }
254 pub fn get_pgn() -> u32 {
255 130572u32
256 }
257 pub fn get_message_type() -> PgnType {
258 PgnType::Fast
259 }
260}