From 98531f6b56b0d47e48a5ec016cf5fe0730b6367c Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Wed, 6 Apr 2022 00:06:18 -0500 Subject: [PATCH] Level 3 interface updates --- .../rpg/digital_radial_data_array_packet.hpp | 4 ++++ .../wsr88d/rpg/product_description_block.hpp | 4 ++-- .../wsr88d/rpg/product_symbology_block.hpp | 2 +- .../rpg/digital_radial_data_array_packet.cpp | 23 +++++++++++++++++++ .../wsr88d/rpg/product_description_block.cpp | 8 +++---- .../wsr88d/rpg/product_symbology_block.cpp | 2 +- 6 files changed, 35 insertions(+), 8 deletions(-) diff --git a/wxdata/include/scwx/wsr88d/rpg/digital_radial_data_array_packet.hpp b/wxdata/include/scwx/wsr88d/rpg/digital_radial_data_array_packet.hpp index 75088204..71b747ff 100644 --- a/wxdata/include/scwx/wsr88d/rpg/digital_radial_data_array_packet.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/digital_radial_data_array_packet.hpp @@ -36,6 +36,10 @@ public: float range_scale_factor() const; uint16_t number_of_radials() const; + float start_angle(uint16_t r) const; + float delta_angle(uint16_t r) const; + const std::vector& level(uint16_t r) const; + size_t data_size() const override; bool Parse(std::istream& is) override; diff --git a/wxdata/include/scwx/wsr88d/rpg/product_description_block.hpp b/wxdata/include/scwx/wsr88d/rpg/product_description_block.hpp index c7815a0d..15769b82 100644 --- a/wxdata/include/scwx/wsr88d/rpg/product_description_block.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/product_description_block.hpp @@ -27,8 +27,8 @@ public: ProductDescriptionBlock& operator=(ProductDescriptionBlock&&) noexcept; int16_t block_divider() const; - int32_t latitude_of_radar() const; - int32_t longitude_of_radar() const; + float latitude_of_radar() const; + float longitude_of_radar() const; int16_t height_of_radar() const; int16_t product_code() const; uint16_t operational_mode() const; diff --git a/wxdata/include/scwx/wsr88d/rpg/product_symbology_block.hpp b/wxdata/include/scwx/wsr88d/rpg/product_symbology_block.hpp index c55fd4ba..d597532c 100644 --- a/wxdata/include/scwx/wsr88d/rpg/product_symbology_block.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/product_symbology_block.hpp @@ -30,7 +30,7 @@ public: int16_t block_divider() const; uint16_t number_of_layers() const; - const std::vector>& packet_list(uint16_t i) const; + std::vector> packet_list(uint16_t i) const; size_t data_size() const override; diff --git a/wxdata/source/scwx/wsr88d/rpg/digital_radial_data_array_packet.cpp b/wxdata/source/scwx/wsr88d/rpg/digital_radial_data_array_packet.cpp index dda753d6..f7bf3600 100644 --- a/wxdata/source/scwx/wsr88d/rpg/digital_radial_data_array_packet.cpp +++ b/wxdata/source/scwx/wsr88d/rpg/digital_radial_data_array_packet.cpp @@ -108,6 +108,22 @@ size_t DigitalRadialDataArrayPacket::data_size() const return p->dataSize_; } +float DigitalRadialDataArrayPacket::start_angle(uint16_t r) const +{ + return p->radial_[r].startAngle_ * 0.1f; +} + +float DigitalRadialDataArrayPacket::delta_angle(uint16_t r) const +{ + return p->radial_[r].deltaAngle_ * 0.1f; +} + +const std::vector& +DigitalRadialDataArrayPacket::level(uint16_t r) const +{ + return p->radial_[r].level_; +} + bool DigitalRadialDataArrayPacket::Parse(std::istream& is) { bool blockValid = true; @@ -143,6 +159,13 @@ bool DigitalRadialDataArrayPacket::Parse(std::istream& is) << logPrefix_ << "Invalid packet code: " << p->packetCode_; blockValid = false; } + if (p->indexOfFirstRangeBin_ < 0 || p->indexOfFirstRangeBin_ > 230) + { + BOOST_LOG_TRIVIAL(warning) + << logPrefix_ + << "Invalid index of first range bin: " << p->indexOfFirstRangeBin_; + blockValid = false; + } if (p->numberOfRangeBins_ < 0 || p->numberOfRangeBins_ > 1840) { BOOST_LOG_TRIVIAL(warning) diff --git a/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp b/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp index cf6e8350..50a48113 100644 --- a/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp +++ b/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp @@ -104,14 +104,14 @@ int16_t ProductDescriptionBlock::block_divider() const return p->blockDivider_; } -int32_t ProductDescriptionBlock::latitude_of_radar() const +float ProductDescriptionBlock::latitude_of_radar() const { - return p->latitudeOfRadar_; + return p->latitudeOfRadar_ * 0.001f; } -int32_t ProductDescriptionBlock::longitude_of_radar() const +float ProductDescriptionBlock::longitude_of_radar() const { - return p->longitudeOfRadar_; + return p->longitudeOfRadar_ * 0.001f; } int16_t ProductDescriptionBlock::height_of_radar() const diff --git a/wxdata/source/scwx/wsr88d/rpg/product_symbology_block.cpp b/wxdata/source/scwx/wsr88d/rpg/product_symbology_block.cpp index aa9f10e6..9c808dbc 100644 --- a/wxdata/source/scwx/wsr88d/rpg/product_symbology_block.cpp +++ b/wxdata/source/scwx/wsr88d/rpg/product_symbology_block.cpp @@ -58,7 +58,7 @@ uint16_t ProductSymbologyBlock::number_of_layers() const return p->numberOfLayers_; } -const std::vector>& +std::vector> ProductSymbologyBlock::packet_list(uint16_t i) const { return p->layerList_[i];