canboat_rs/pgns/
library_data_file.rs

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}