diff --git a/log.txt b/log.txt index 196e2b6..674008b 100644 --- a/log.txt +++ b/log.txt @@ -1,140 +1,264 @@ -2023-11-04T21:35:01.793Z TRACE [nexrad2] Loaded - VolumeHeaderRecord { +2023-11-04T22:10:43.640Z TRACE [nexrad2] Loaded - VolumeHeaderRecord { tape_filename: "AR2V0006.", - extension_number: "037", - date: 19665, - time: 44018888, - icao: "KGRB", + extension_number: "267", + date: 19664, + time: 52330099, + icao: "KOTX", } -2023-11-04T21:35:01.794Z TRACE [nexrad2] Reading LDM record - 2195 bytes compressed -2023-11-04T21:35:01.795Z TRACE [nexrad2] LDM record decompressed to 325888 bytes -2023-11-04T21:35:01.795Z TRACE [nexrad2] Message: MessageHeader { +2023-11-04T22:10:43.640Z TRACE [nexrad2] Reading LDM record - 2262 bytes compressed +2023-11-04T22:10:43.642Z TRACE [nexrad2] LDM record decompressed to 325888 bytes +2023-11-04T22:10:43.642Z TRACE [nexrad2] Message: MessageHeader { message_size: 1208, rda_redundant_channel: 8, message_type: 15, - message_sequence_number: 12786, - julian_date: 19663, - millis_after_midnight: 11268749, + message_sequence_number: 58510, + julian_date: 19664, + millis_after_midnight: 7630137, num_of_message_segments: 5, message_segment_num: 1, } -2023-11-04T21:35:01.795Z TRACE [nexrad2] unrecognized message type 15 -2023-11-04T21:35:01.795Z TRACE [nexrad2] Message: MessageHeader { +2023-11-04T22:10:43.642Z TRACE [nexrad2] unrecognized message type 15 +2023-11-04T22:10:43.642Z TRACE [nexrad2] Message: MessageHeader { message_size: 1208, rda_redundant_channel: 8, message_type: 15, - message_sequence_number: 12786, - julian_date: 19663, - millis_after_midnight: 11268749, + message_sequence_number: 58510, + julian_date: 19664, + millis_after_midnight: 7630137, num_of_message_segments: 5, message_segment_num: 2, } -2023-11-04T21:35:01.795Z TRACE [nexrad2] unrecognized message type 15 -2023-11-04T21:35:01.795Z TRACE [nexrad2] Message: MessageHeader { +2023-11-04T22:10:43.642Z TRACE [nexrad2] unrecognized message type 15 +2023-11-04T22:10:43.642Z TRACE [nexrad2] Message: MessageHeader { message_size: 1208, rda_redundant_channel: 8, message_type: 15, - message_sequence_number: 12786, - julian_date: 19663, - millis_after_midnight: 11268749, + message_sequence_number: 58510, + julian_date: 19664, + millis_after_midnight: 7630137, num_of_message_segments: 5, message_segment_num: 3, } -2023-11-04T21:35:01.795Z TRACE [nexrad2] unrecognized message type 15 -2023-11-04T21:35:01.795Z TRACE [nexrad2] Message: MessageHeader { +2023-11-04T22:10:43.642Z TRACE [nexrad2] unrecognized message type 15 +2023-11-04T22:10:43.642Z TRACE [nexrad2] Message: MessageHeader { message_size: 1208, rda_redundant_channel: 8, message_type: 15, - message_sequence_number: 12786, - julian_date: 19663, - millis_after_midnight: 11268749, + message_sequence_number: 58510, + julian_date: 19664, + millis_after_midnight: 7630137, num_of_message_segments: 5, message_segment_num: 4, } -2023-11-04T21:35:01.795Z TRACE [nexrad2] unrecognized message type 15 -2023-11-04T21:35:01.795Z TRACE [nexrad2] Message: MessageHeader { +2023-11-04T22:10:43.642Z TRACE [nexrad2] unrecognized message type 15 +2023-11-04T22:10:43.642Z TRACE [nexrad2] Message: MessageHeader { message_size: 611, rda_redundant_channel: 8, message_type: 15, - message_sequence_number: 12786, - julian_date: 19663, - millis_after_midnight: 11268749, + message_sequence_number: 58510, + julian_date: 19664, + millis_after_midnight: 7630137, num_of_message_segments: 5, message_segment_num: 5, } -2023-11-04T21:35:01.795Z TRACE [nexrad2] unrecognized message type 15 -2023-11-04T21:35:01.799Z TRACE [nexrad2] Message: MessageHeader { - message_size: 769, - rda_redundant_channel: 85, - message_type: 121, - message_sequence_number: 4, - julian_date: 1, - millis_after_midnight: 1668641394, - num_of_message_segments: 25966, - message_segment_num: 29696, +2023-11-04T22:10:43.642Z TRACE [nexrad2] unrecognized message type 15 +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.642Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] Message: MessageHeader { + message_size: 1208, + rda_redundant_channel: 8, + message_type: 18, + message_sequence_number: 11, + julian_date: 19664, + millis_after_midnight: 3959931, + num_of_message_segments: 4, + message_segment_num: 1, } -2023-11-04T21:35:01.799Z TRACE [nexrad2] unrecognized message type 121 -2023-11-04T21:35:01.799Z TRACE [nexrad2] Message: MessageHeader { - message_size: 769, - rda_redundant_channel: 85, - message_type: 121, - message_sequence_number: 4, - julian_date: 2, - millis_after_midnight: 0, - num_of_message_segments: 0, - message_segment_num: 0, +2023-11-04T22:10:43.643Z TRACE [nexrad2] unrecognized message type 18 +2023-11-04T22:10:43.643Z TRACE [nexrad2] Message: MessageHeader { + message_size: 1208, + rda_redundant_channel: 8, + message_type: 18, + message_sequence_number: 11, + julian_date: 19664, + millis_after_midnight: 3959931, + num_of_message_segments: 4, + message_segment_num: 2, } -2023-11-04T21:35:01.799Z TRACE [nexrad2] unrecognized message type 121 -2023-11-04T21:35:01.799Z TRACE [nexrad2] Message: MessageHeader { - message_size: 769, - rda_redundant_channel: 85, - message_type: 121, - message_sequence_number: 4, - julian_date: 3, - millis_after_midnight: 0, - num_of_message_segments: 0, - message_segment_num: 0, +2023-11-04T22:10:43.643Z TRACE [nexrad2] unrecognized message type 18 +2023-11-04T22:10:43.643Z TRACE [nexrad2] Message: MessageHeader { + message_size: 1208, + rda_redundant_channel: 8, + message_type: 18, + message_sequence_number: 11, + julian_date: 19664, + millis_after_midnight: 3959931, + num_of_message_segments: 4, + message_segment_num: 3, } -2023-11-04T21:35:01.799Z TRACE [nexrad2] unrecognized message type 121 -2023-11-04T21:35:01.799Z TRACE [nexrad2] Message: MessageHeader { - message_size: 769, - rda_redundant_channel: 85, - message_type: 121, - message_sequence_number: 4, - julian_date: 4, - millis_after_midnight: 0, - num_of_message_segments: 0, - message_segment_num: 0, +2023-11-04T22:10:43.643Z TRACE [nexrad2] unrecognized message type 18 +2023-11-04T22:10:43.643Z TRACE [nexrad2] Message: MessageHeader { + message_size: 1142, + rda_redundant_channel: 8, + message_type: 18, + message_sequence_number: 11, + julian_date: 19664, + millis_after_midnight: 3959931, + num_of_message_segments: 4, + message_segment_num: 4, } -2023-11-04T21:35:01.799Z TRACE [nexrad2] unrecognized message type 121 -2023-11-04T21:35:01.799Z TRACE [nexrad2] Message: MessageHeader { - message_size: 1, - rda_redundant_channel: 0, - message_type: 1, - message_sequence_number: 0, - julian_date: 0, - millis_after_midnight: 906635245, - num_of_message_segments: 63506, - message_segment_num: 53479, +2023-11-04T22:10:43.643Z TRACE [nexrad2] unrecognized message type 18 +2023-11-04T22:10:43.643Z TRACE [nexrad2] extra segment message +2023-11-04T22:10:43.643Z TRACE [nexrad2] Message: MessageHeader { + message_size: 488, + rda_redundant_channel: 8, + message_type: 3, + message_sequence_number: 10307, + julian_date: 19664, + millis_after_midnight: 52331198, + num_of_message_segments: 1, + message_segment_num: 1, } -2023-11-04T21:35:01.799Z TRACE [nexrad2] unrecognized message type 1 -2023-11-04T21:35:01.799Z TRACE [nexrad2] Message: MessageHeader { - message_size: 1, - rda_redundant_channel: 0, - message_type: 1, - message_sequence_number: 287, - julian_date: 2, - millis_after_midnight: 2293772, - num_of_message_segments: 257, - message_segment_num: 514, +2023-11-04T22:10:43.643Z TRACE [nexrad2] unrecognized message type 3 +2023-11-04T22:10:43.643Z TRACE [nexrad2] Message: MessageHeader { + message_size: 433, + rda_redundant_channel: 8, + message_type: 5, + message_sequence_number: 10308, + julian_date: 19664, + millis_after_midnight: 52331198, + num_of_message_segments: 1, + message_segment_num: 1, } -2023-11-04T21:35:01.799Z TRACE [nexrad2] unrecognized message type 1 -2023-11-04T21:35:01.799Z TRACE [nexrad2] Message: MessageHeader { - message_size: 1, - rda_redundant_channel: 0, - message_type: 1, - message_sequence_number: 16, - julian_date: 4, - millis_after_midnight: 262146, - num_of_message_segments: 896, - message_segment_num: 10, +2023-11-04T22:10:43.643Z TRACE [nexrad2] unrecognized message type 5 +2023-11-04T22:10:43.643Z TRACE [nexrad2] Message: MessageHeader { + message_size: 68, + rda_redundant_channel: 8, + message_type: 2, + message_sequence_number: 10306, + julian_date: 19664, + millis_after_midnight: 52331198, + num_of_message_segments: 1, + message_segment_num: 1, } +2023-11-04T22:10:43.643Z TRACE [nexrad2] 1 messages loaded from chunk +2023-11-04T22:10:43.643Z INFO [nexrad2] File loaded successfully! 1 messages loaded in 1 chunks diff --git a/nexrad-browser/www/index.js b/nexrad-browser/www/index.js index 4971bdd..21fab3a 100644 --- a/nexrad-browser/www/index.js +++ b/nexrad-browser/www/index.js @@ -102,6 +102,15 @@ function zulu() { return `${date.getUTCHours().toString().padStart(2, '0')}:${date.getUTCMinutes().toString().padStart(2, '0')}:${date.getUTCSeconds().toString().padStart(2, '0')}Z`; } +function vcp(vc) { + if (vc === 31) { return "CLEAR AIR MODE LONG PULSE"; } + else if (vc === 35) { return "CLEAR AIR MODE"; } + else if (vc === 12) { return "PRECIP MODE"; } + else if (vc === 112) { return "PRECIP MODE SZ-2 PRF"; } + else if (vc === 212) { return "PRECIP MODE SZ-2"; } + else if (vc === 215) { return "PRECIP MODE VERT"; } +} + let command_buf = ""; let buf_response_mode = false; @@ -133,9 +142,16 @@ function cmd_err(err) { } let ar2 = undefined; +let new_file_available = false; + +document.getElementById("file").onchange = () => { + new_file_available = true; +} async function load() { + new_file_available = false; const file = document.getElementById("file").files[0]; + document.getElementById("file").value = null; const reader = new FileReader(); reader.addEventListener('load', (event) => { let data = event.target.result; @@ -217,7 +233,7 @@ function reRender() { if (ar2 !== undefined) { radar_inoperative = false; icao = ar2.volume_header_record.icao; - site_string = `${icao} VCP INFORMATION UNAVAILABLE`; + site_string = `${icao} VCP ${ar2.meta_rda_status_data.vcp} ${vcp(ar2.meta_rda_status_data.vcp)}`; selected_mode = "REF"; } else { radar_inoperative = true; @@ -258,6 +274,11 @@ function reRender() { ctx.fillText("RADR INOP NO DATA LOADED", x0 + 50, y0 + 50 + preferences.FCS); ctx.fillStyle = green; } + if (new_file_available) { + ctx.fillStyle = blinkyColor; + ctx.fillText("NEW DATA AVAIL RLD RQD", x0 + 50, y0 + 50 + preferences.FCS * 2); + ctx.fillStyle = green; + } ctx.textAlign = "right"; ctx.fillText("RADAR SITE", xfull - 75, y0 + 50); diff --git a/nexrad2/src/lib.rs b/nexrad2/src/lib.rs index 0d83323..1c8c4cd 100644 --- a/nexrad2/src/lib.rs +++ b/nexrad2/src/lib.rs @@ -19,7 +19,8 @@ pub mod message2; #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct Nexrad2Chunk { pub volume_header_record: VolumeHeaderRecord, - pub chunks: Vec> + pub chunks: Vec>, + pub meta_rda_status_data: Msg02RDAStatusData } #[derive(Debug, Clone, PartialEq, Eq)] @@ -59,7 +60,8 @@ pub enum NexradParseError { TcmHeaderReadFailed(io::Error), TcmChunkReadFailed(io::Error), FailedToReadFile(io::Error), - LdmReadFailed(io::Error) + LdmReadFailed(io::Error), + MissingMsg02 } impl Display for NexradParseError { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { @@ -75,7 +77,8 @@ impl Display for NexradParseError { Self::TcmHeaderReadFailed(e) => write!(f, "tcm message header read failed: {}", e), Self::TcmChunkReadFailed(e) => write!(f, "tcm chunk read failed: {}", e), Self::FailedToReadFile(e) => write!(f, "failed to read file: {}", e), - Self::LdmReadFailed(e) => write!(f, "ldm read failed: {}", e) + Self::LdmReadFailed(e) => write!(f, "ldm read failed: {}", e), + Self::MissingMsg02 => write!(f, "missing RDA status data (message type 02) in metadata header") } } } @@ -170,7 +173,9 @@ pub fn parse_nx2_chunk(cursor: &mut (impl Read + Seek)) -> Result Result = None; + let mut messages = 0; for chunk in &records { messages += chunk.len(); + + for message in chunk { + match message { + Message::Msg02(m) if msg2.is_none() => { msg2 = Some(m.clone()); }, + _ => () + } + } } + let msg2 = match msg2 { + Some(m) => m, + None => return Err(NexradParseError::MissingMsg02) + }; + info!("File loaded successfully! {} messages loaded in {} chunks", messages, records.len()); Ok(Nexrad2Chunk { volume_header_record: header, - chunks: records + chunks: records, + meta_rda_status_data: msg2 }) } diff --git a/nexrad2/src/message2.rs b/nexrad2/src/message2.rs index 5784ae3..1428577 100644 --- a/nexrad2/src/message2.rs +++ b/nexrad2/src/message2.rs @@ -3,7 +3,7 @@ use crate::NexradParseError; pub const MSG_RDA_STATUS_DATA: u8 = 2; -#[derive(Debug)] +#[derive(Debug, Clone, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] pub struct Msg02RDAStatusData { rda_status: u16,