From 0df6defe01170476202938cde730ce32741dd44b Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 12 Feb 2022 18:23:07 -0600 Subject: [PATCH] RDA Status Data support for Build < 18.0 --- .../scwx/wsr88d/rda/rda_status_data.cpp | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp b/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp index 5741dfb3..3b219feb 100644 --- a/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp +++ b/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp @@ -273,11 +273,8 @@ bool RdaStatusData::Parse(std::istream& is) is.read(reinterpret_cast(&p->rmsControlStatus_), 2); // 25 is.read(reinterpret_cast(&p->performanceCheckStatus_), 2); // 26 is.read(reinterpret_cast(&p->alarmCodes_), - p->alarmCodes_.size() * 2); // 27-40 - is.read(reinterpret_cast(&p->signalProcessingOptions_), 2); // 41 - is.seekg(36, std::ios_base::cur); // 42-59 - is.read(reinterpret_cast(&p->statusVersion_), 2); // 42 - bytesRead += 120; + p->alarmCodes_.size() * 2); // 27-40 + bytesRead += 80; p->rdaStatus_ = ntohs(p->rdaStatus_); p->operabilityStatus_ = ntohs(p->operabilityStatus_); @@ -311,8 +308,18 @@ bool RdaStatusData::Parse(std::istream& is) p->rmsControlStatus_ = ntohs(p->rmsControlStatus_); p->performanceCheckStatus_ = ntohs(p->performanceCheckStatus_); SwapArray(p->alarmCodes_); - p->signalProcessingOptions_ = ntohs(p->signalProcessingOptions_); - p->statusVersion_ = ntohs(p->statusVersion_); + + // RDA Build 18.0 increased the size of the message from 80 to 120 bytes + if (header().message_size() * 2 > Level2MessageHeader::SIZE + 80) + { + is.read(reinterpret_cast(&p->signalProcessingOptions_), 2); // 41 + is.seekg(36, std::ios_base::cur); // 42-59 + is.read(reinterpret_cast(&p->statusVersion_), 2); // 60 + bytesRead += 40; + + p->signalProcessingOptions_ = ntohs(p->signalProcessingOptions_); + p->statusVersion_ = ntohs(p->statusVersion_); + } if (!ValidateMessage(is, bytesRead)) {