From 2025698d88355acfff86a7fb7e27bdf96d1756b4 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sun, 11 May 2025 01:59:42 -0500 Subject: [PATCH 01/13] Updating modified messages for RDA Build 23.0 --- wxdata/include/scwx/awips/message.hpp | 9 + .../rda/performance_maintenance_data.hpp | 20 +- .../scwx/wsr88d/rda/rda_adaptation_data.hpp | 13 +- .../scwx/wsr88d/rda/rda_status_data.hpp | 5 +- .../wsr88d/rda/digital_radar_data_generic.cpp | 13 + .../rda/performance_maintenance_data.cpp | 889 ++++++------------ .../scwx/wsr88d/rda/rda_adaptation_data.cpp | 581 +++++------- .../scwx/wsr88d/rda/rda_status_data.cpp | 138 ++- 8 files changed, 639 insertions(+), 1029 deletions(-) diff --git a/wxdata/include/scwx/awips/message.hpp b/wxdata/include/scwx/awips/message.hpp index 6a386065..4f2388d0 100644 --- a/wxdata/include/scwx/awips/message.hpp +++ b/wxdata/include/scwx/awips/message.hpp @@ -63,6 +63,15 @@ public: return f; } + static double SwapDouble(double d) + { + std::uint64_t temp; + std::memcpy(&temp, &d, sizeof(std::uint64_t)); + temp = ntohll(temp); + std::memcpy(&d, &temp, sizeof(float)); + return d; + } + template static void SwapArray(std::array& arr, std::size_t size = _Size) diff --git a/wxdata/include/scwx/wsr88d/rda/performance_maintenance_data.hpp b/wxdata/include/scwx/wsr88d/rda/performance_maintenance_data.hpp index 8e1c91ea..c362af78 100644 --- a/wxdata/include/scwx/wsr88d/rda/performance_maintenance_data.hpp +++ b/wxdata/include/scwx/wsr88d/rda/performance_maintenance_data.hpp @@ -31,10 +31,9 @@ public: uint32_t router_memory_free() const; uint16_t router_memory_utilization() const; uint16_t route_to_rpg() const; - uint32_t csu_loss_of_signal() const; - uint32_t csu_loss_of_frames() const; - uint32_t csu_yellow_alarms() const; - uint32_t csu_blue_alarms() const; + uint16_t t1_port_status() const; + uint16_t router_dedicated_ethernet_port_status() const; + uint16_t router_commercial_ethernet_port_status() const; uint32_t csu_24hr_errored_seconds() const; uint32_t csu_24hr_severely_errored_seconds() const; uint32_t csu_24hr_severely_errored_framing_seconds() const; @@ -48,7 +47,7 @@ public: uint16_t lan_switch_memory_utilization() const; uint16_t ifdr_chasis_temperature() const; uint16_t ifdr_fpga_temperature() const; - int32_t gps_satellites() const; + uint16_t ntp_status() const; uint16_t ipc_status() const; uint16_t commanded_channel_control() const; uint16_t polarization() const; @@ -237,7 +236,7 @@ public: float long_pulse_vertical_dbz0() const; float horizontal_power_sense() const; float vertical_power_sense() const; - float zdr_bias() const; + float zdr_offset() const; float clutter_suppression_delta() const; float clutter_suppression_unfiltered_power() const; float clutter_suppression_filtered_power() const; @@ -256,16 +255,11 @@ public: uint16_t read_status_of_prf_sets() const; uint16_t clutter_filter_map_file_read_status() const; uint16_t clutter_filter_map_file_write_status() const; - uint16_t generatl_disk_io_error() const; + uint16_t general_disk_io_error() const; uint8_t rsp_status() const; - uint8_t motherboard_temperature() const; uint8_t cpu1_temperature() const; uint8_t cpu2_temperature() const; - uint16_t cpu1_fan_speed() const; - uint16_t cpu2_fan_speed() const; - uint16_t rsp_fan1_speed() const; - uint16_t rsp_fan2_speed() const; - uint16_t rsp_fan3_speed() const; + uint16_t rsp_motherboard_power() const; uint16_t spip_comm_status() const; uint16_t hci_comm_status() const; uint16_t signal_processor_command_status() const; diff --git a/wxdata/include/scwx/wsr88d/rda/rda_adaptation_data.hpp b/wxdata/include/scwx/wsr88d/rda/rda_adaptation_data.hpp index 38d519a1..be4f8067 100644 --- a/wxdata/include/scwx/wsr88d/rda/rda_adaptation_data.hpp +++ b/wxdata/include/scwx/wsr88d/rda/rda_adaptation_data.hpp @@ -17,7 +17,7 @@ public: explicit RdaAdaptationData(); ~RdaAdaptationData(); - RdaAdaptationData(const RdaAdaptationData&) = delete; + RdaAdaptationData(const RdaAdaptationData&) = delete; RdaAdaptationData& operator=(const RdaAdaptationData&) = delete; RdaAdaptationData(RdaAdaptationData&&) noexcept; @@ -121,6 +121,8 @@ public: uint32_t slonmin() const; char slatdir() const; char slondir() const; + double dig_rcvr_clock_freq() const; + double coho_freq() const; float az_correction_factor() const; float el_correction_factor() const; std::string site_name() const; @@ -147,6 +149,11 @@ public: float el_off_neutral_drive() const; float az_intertia() const; float el_inertia() const; + float az_stow_angle() const; + float el_stow_angle() const; + float az_encoder_alignment() const; + float el_encoder_alignment() const; + std::string refined_park() const; uint32_t rvp8nv_iwaveguide_length() const; float v_rnscale(unsigned i) const; float vel_data_tover() const; @@ -166,8 +173,8 @@ public: bool gen_exercise() const; float v_noise_tolerance() const; float min_v_dyn_range() const; - float zdr_bias_dgrad_lim() const; - float baseline_zdr_bias() const; + float zdr_offset_dgrad_lim() const; + float baseline_zdr_offset() const; float v_noise_long() const; float v_noise_short() const; float zdr_data_tover() const; diff --git a/wxdata/include/scwx/wsr88d/rda/rda_status_data.hpp b/wxdata/include/scwx/wsr88d/rda/rda_status_data.hpp index 7dd51edf..a4e7702a 100644 --- a/wxdata/include/scwx/wsr88d/rda/rda_status_data.hpp +++ b/wxdata/include/scwx/wsr88d/rda/rda_status_data.hpp @@ -17,7 +17,7 @@ public: explicit RdaStatusData(); ~RdaStatusData(); - RdaStatusData(const RdaStatusData&) = delete; + RdaStatusData(const RdaStatusData&) = delete; RdaStatusData& operator=(const RdaStatusData&) = delete; RdaStatusData(RdaStatusData&&) noexcept; @@ -36,7 +36,7 @@ public: uint16_t operational_mode() const; uint16_t super_resolution_status() const; uint16_t clutter_mitigation_decision_status() const; - uint16_t avset_ebc_rda_log_data_status() const; + uint16_t rda_scan_and_data_flags() const; uint16_t rda_alarm_summary() const; uint16_t command_acknowledgement() const; uint16_t channel_control_status() const; @@ -51,6 +51,7 @@ public: uint16_t performance_check_status() const; uint16_t alarm_codes(unsigned i) const; uint16_t signal_processing_options() const; + uint16_t downloaded_pattern_number() const; uint16_t status_version() const; bool Parse(std::istream& is); diff --git a/wxdata/source/scwx/wsr88d/rda/digital_radar_data_generic.cpp b/wxdata/source/scwx/wsr88d/rda/digital_radar_data_generic.cpp index 54c0ba2c..79705a70 100644 --- a/wxdata/source/scwx/wsr88d/rda/digital_radar_data_generic.cpp +++ b/wxdata/source/scwx/wsr88d/rda/digital_radar_data_generic.cpp @@ -247,6 +247,7 @@ public: float initialSystemDifferentialPhase_ {0.0f}; std::uint16_t volumeCoveragePatternNumber_ {0}; std::uint16_t processingStatus_ {0}; + std::uint16_t zdrBiasEstimateWeightedMean_ {0}; }; DigitalRadarDataGeneric::VolumeDataBlock::VolumeDataBlock( @@ -332,6 +333,18 @@ bool DigitalRadarDataGeneric::VolumeDataBlock::Parse(std::istream& is) p->volumeCoveragePatternNumber_ = ntohs(p->volumeCoveragePatternNumber_); p->processingStatus_ = ntohs(p->processingStatus_); + if (p->lrtup_ >= 46) + { + is.read(reinterpret_cast(&p->zdrBiasEstimateWeightedMean_), + 2); // 44-45 + p->zdrBiasEstimateWeightedMean_ = ntohs(p->zdrBiasEstimateWeightedMean_); + } + + if (p->lrtup_ >= 52) + { + is.seekg(6, std::ios_base::cur); // 46-51 + } + return dataBlockValid; } diff --git a/wxdata/source/scwx/wsr88d/rda/performance_maintenance_data.cpp b/wxdata/source/scwx/wsr88d/rda/performance_maintenance_data.cpp index 662ab506..fcdd19c8 100644 --- a/wxdata/source/scwx/wsr88d/rda/performance_maintenance_data.cpp +++ b/wxdata/source/scwx/wsr88d/rda/performance_maintenance_data.cpp @@ -17,536 +17,277 @@ static const auto logger_ = util::Logger::Create(logPrefix_); class PerformanceMaintenanceDataImpl { public: - explicit PerformanceMaintenanceDataImpl() : - loopBackSetStatus_ {0}, - t1OutputFrames_ {0}, - t1InputFrames_ {0}, - routerMemoryUsed_ {0}, - routerMemoryFree_ {0}, - routerMemoryUtilization_ {0}, - routeToRpg_ {0}, - csuLossOfSignal_ {0}, - csuLossOfFrames_ {0}, - csuYellowAlarms_ {0}, - csuBlueAlarms_ {0}, - csu24HrErroredSeconds_ {0}, - csu24HrSeverelyErroredSeconds_ {0}, - csu24HrSeverelyErroredFramingSeconds_ {0}, - csu24HrUnavailableSeconds_ {0}, - csu24HrControlledSlipSeconds_ {0}, - csu24HrPathCodingViolations_ {0}, - csu24HrLineErroredSeconds_ {0}, - csu24HrBurstyErroredSeconds_ {0}, - csu24HrDegradedMinutes_ {0}, - lanSwitchCpuUtilization_ {0}, - lanSwitchMemoryUtilization_ {0}, - ifdrChasisTemperature_ {0}, - ifdrFpgaTemperature_ {0}, - gpsSatellites_ {0}, - ipcStatus_ {0}, - commandedChannelControl_ {0}, - polarization_ {0}, - ameInternalTemperature_ {0.0f}, - ameReceiverModuleTemperature_ {0.0f}, - ameBiteCalModuleTemperature_ {0.0f}, - amePeltierPulseWidthModulation_ {0}, - amePeltierStatus_ {0}, - ameADConverterStatus_ {0}, - ameState_ {0}, - ame3_3VPsVoltage_ {0.0f}, - ame5VPsVoltage_ {0.0f}, - ame6_5VPsVoltage_ {0.0f}, - ame15VPsVoltage_ {0.0f}, - ame48VPsVoltage_ {0.0f}, - ameStaloPower_ {0.0f}, - peltierCurrent_ {0.0f}, - adcCalibrationReferenceVoltage_ {0.0f}, - ameMode_ {0}, - amePeltierMode_ {0}, - amePeltierInsideFanCurrent_ {0.0f}, - amePeltierOutsideFanCurrent_ {0.0f}, - horizontalTrLimiterVoltage_ {0.0f}, - verticalTrLimiterVoltage_ {0.0f}, - adcCalibrationOffsetVoltage_ {0.0f}, - adcCalibrationGainCorrection_ {0.0f}, - rcpStatus_ {0}, - rcpString_ {}, - spipPowerButtons_ {0}, - masterPowerAdministratorLoad_ {0.0f}, - expansionPowerAdministratorLoad_ {0.0f}, - _5VdcPs_ {0}, - _15VdcPs_ {0}, - _28VdcPs_ {0}, - neg15VdcPs_ {0}, - _45VdcPs_ {0}, - filamentPsVoltage_ {0}, - vacuumPumpPsVoltage_ {0}, - focusCoilPsVoltage_ {0}, - filamentPs_ {0}, - klystronWarmup_ {0}, - transmitterAvailable_ {0}, - wgSwitchPosition_ {0}, - wgPfnTransferInterlock_ {0}, - maintenanceMode_ {0}, - maintenanceRequired_ {0}, - pfnSwitchPosition_ {0}, - modulatorOverload_ {0}, - modulatorInvCurrent_ {0}, - modulatorSwitchFail_ {0}, - mainPowerVoltage_ {0}, - chargingSystemFail_ {0}, - inverseDiodeCurrent_ {0}, - triggerAmplifier_ {0}, - circulatorTemperature_ {0}, - spectrumFilterPressure_ {0}, - wgArcVswr_ {0}, - cabinetInterlock_ {0}, - cabinetAirTemperature_ {0}, - cabinetAirflow_ {0}, - klystronCurrent_ {0}, - klystronFilamentCurrent_ {0}, - klystronVacionCurrent_ {0}, - klystronAirTemperature_ {0}, - klystronAirflow_ {0}, - modulatorSwitchMaintenance_ {0}, - postChargeRegulatorMaintenance_ {0}, - wgPressureHumidity_ {0}, - transmitterOvervoltage_ {0}, - transmitterOvercurrent_ {0}, - focusCoilCurrent_ {0}, - focusCoilAirflow_ {0}, - oilTemperature_ {0}, - prfLimit_ {0}, - transmitterOilLevel_ {0}, - transmitterBatteryCharging_ {0}, - highVoltageStatus_ {0}, - transmitterRecyclingSummary_ {0}, - transmitterInoperable_ {0}, - transmitterAirFilter_ {0}, - zeroTestBit_ {0}, - oneTestBit_ {0}, - xmtrSpipInterface_ {0}, - transmitterSummaryStatus_ {0}, - transmitterRfPower_ {0.0f}, - horizontalXmtrPeakPower_ {0.0f}, - xmtrPeakPower_ {0.0f}, - verticalXmtrPeakPower_ {0.0f}, - xmtrRfAvgPower_ {0.0f}, - xmtrRecycleCount_ {0}, - receiverBias_ {0.0f}, - transmitImbalance_ {0.0f}, - xmtrPowerMeterZero_ {0.0f}, - acUnit1CompressorShutOff_ {0}, - acUnit2CompressorShutOff_ {0}, - generatorMaintenanceRequired_ {0}, - generatorBatteryVoltage_ {0}, - generatorEngine_ {0}, - generatorVoltFrequency_ {0}, - powerSource_ {0}, - transitionalPowerSource_ {0}, - generatorAutoRunOffSwitch_ {0}, - aircraftHazardLighting_ {0}, - equipmentShelterFireDetectionSystem_ {0}, - equipmentShelterFireSmoke_ {0}, - generatorShelterFireSmoke_ {0}, - utilityVoltageFrequency_ {0}, - siteSecurityAlarm_ {0}, - securityEquipment_ {0}, - securitySystem_ {0}, - receiverConnectedToAntenna_ {0}, - radomeHatch_ {0}, - acUnit1FilterDirty_ {0}, - acUnit2FilterDirty_ {0}, - equipmentShelterTemperature_ {0.0f}, - outsideAmbientTemperature_ {0.0f}, - transmitterLeavingAirTemp_ {0.0f}, - acUnit1DischargeAirTemp_ {0.0f}, - generatorShelterTemperature_ {0.0f}, - radomeAirTemperature_ {0.0f}, - acUnit2DischargeAirTemp_ {0.0f}, - spip15VPs_ {0.0f}, - spipNeg15VPs_ {0.0f}, - spip28VPsStatus_ {0}, - spip5VPs_ {0.0f}, - convertedGeneratorFuelLevel_ {0}, - elevationPosDeadLimit_ {0}, - _150VOvervoltage_ {0}, - _150VUndervoltage_ {0}, - elevationServoAmpInhibit_ {0}, - elevationServoAmpShortCircuit_ {0}, - elevationServoAmpOvertemp_ {0}, - elevationMotorOvertemp_ {0}, - elevationStowPin_ {0}, - elevationHousing5VPs_ {0}, - elevationNegDeadLimit_ {0}, - elevationPosNormalLimit_ {0}, - elevationNegNormalLimit_ {0}, - elevationEncoderLight_ {0}, - elevationGearboxOil_ {0}, - elevationHandwheel_ {0}, - elevationAmpPs_ {0}, - azimuthServoAmpInhibit_ {0}, - azimuthServoAmpShortCircuit_ {0}, - azimuthServoAmpOvertemp_ {0}, - azimuthMotorOvertemp_ {0}, - azimuthStowPin_ {0}, - azimuthHousing5VPs_ {0}, - azimuthEncoderLight_ {0}, - azimuthGearboxOil_ {0}, - azimuthBullGearOil_ {0}, - azimuthHandwheel_ {0}, - azimuthServoAmpPs_ {0}, - servo_ {0}, - pedestalInterlockSwitch_ {0}, - cohoClock_ {0}, - rfGeneratorFrequencySelectOscillator_ {0}, - rfGeneratorRfStalo_ {0}, - rfGeneratorPhaseShiftedCoho_ {0}, - _9VReceiverPs_ {0}, - _5VReceiverPs_ {0}, - _18VReceiverPs_ {0}, - neg9VReceiverPs_ {0}, - _5VSingleChannelRdaiuPs_ {0}, - horizontalShortPulseNoise_ {0.0f}, - horizontalLongPulseNoise_ {0.0f}, - horizontalNoiseTemperature_ {0.0f}, - verticalShortPulseNoise_ {0.0f}, - verticalLongPulseNoise_ {0.0f}, - verticalNoiseTemperature_ {0.0f}, - horizontalLinearity_ {0.0f}, - horizontalDynamicRange_ {0.0f}, - horizontalDeltaDbz0_ {0.0f}, - verticalDeltaDbz0_ {0.0f}, - kdPeakMeasured_ {0.0f}, - shortPulseHorizontalDbz0_ {0.0f}, - longPulseHorizontalDbz0_ {0.0f}, - velocityProcessed_ {0}, - widthProcessed_ {0}, - velocityRfGen_ {0}, - widthRfGen_ {0}, - horizontalI0_ {0.0f}, - verticalI0_ {0.0f}, - verticalDynamicRange_ {0.0f}, - shortPulseVerticalDbz0_ {0.0f}, - longPulseVerticalDbz0_ {0.0f}, - horizontalPowerSense_ {0.0f}, - verticalPowerSense_ {0.0f}, - zdrBias_ {0.0f}, - clutterSuppressionDelta_ {0.0f}, - clutterSuppressionUnfilteredPower_ {0.0f}, - clutterSuppressionFilteredPower_ {0.0f}, - verticalLinearity_ {0.0f}, - stateFileReadStatus_ {0}, - stateFileWriteStatus_ {0}, - bypassMapFileReadStatus_ {0}, - bypassMapFileWriteStatus_ {0}, - currentAdaptationFileReadStatus_ {0}, - currentAdaptationFileWriteStatus_ {0}, - censorZoneFileReadStatus_ {0}, - censorZoneFileWriteStatus_ {0}, - remoteVcpFileReadStatus_ {0}, - remoteVcpFileWriteStatus_ {0}, - baselineAdaptationFileReadStatus_ {0}, - readStatusOfPrfSets_ {0}, - clutterFilterMapFileReadStatus_ {0}, - clutterFilterMapFileWriteStatus_ {0}, - generatlDiskIoError_ {0}, - rspStatus_ {0}, - motherboardTemperature_ {0}, - cpu1Temperature_ {0}, - cpu2Temperature_ {0}, - cpu1FanSpeed_ {0}, - cpu2FanSpeed_ {0}, - rspFan1Speed_ {0}, - rspFan2Speed_ {0}, - rspFan3Speed_ {0}, - spipCommStatus_ {0}, - hciCommStatus_ {0}, - signalProcessorCommandStatus_ {0}, - ameCommunicationStatus_ {0}, - rmsLinkStatus_ {0}, - rpgLinkStatus_ {0}, - interpanelLinkStatus_ {0}, - performanceCheckTime_ {0}, - version_ {0} - { - } - ~PerformanceMaintenanceDataImpl() = default; + explicit PerformanceMaintenanceDataImpl() = default; + ~PerformanceMaintenanceDataImpl() = default; // Communications - uint16_t loopBackSetStatus_; - uint32_t t1OutputFrames_; - uint32_t t1InputFrames_; - uint32_t routerMemoryUsed_; - uint32_t routerMemoryFree_; - uint16_t routerMemoryUtilization_; - uint16_t routeToRpg_; - uint32_t csuLossOfSignal_; - uint32_t csuLossOfFrames_; - uint32_t csuYellowAlarms_; - uint32_t csuBlueAlarms_; - uint32_t csu24HrErroredSeconds_; - uint32_t csu24HrSeverelyErroredSeconds_; - uint32_t csu24HrSeverelyErroredFramingSeconds_; - uint32_t csu24HrUnavailableSeconds_; - uint32_t csu24HrControlledSlipSeconds_; - uint32_t csu24HrPathCodingViolations_; - uint32_t csu24HrLineErroredSeconds_; - uint32_t csu24HrBurstyErroredSeconds_; - uint32_t csu24HrDegradedMinutes_; - uint32_t lanSwitchCpuUtilization_; - uint16_t lanSwitchMemoryUtilization_; - uint16_t ifdrChasisTemperature_; - uint16_t ifdrFpgaTemperature_; - int32_t gpsSatellites_; - uint16_t ipcStatus_; - uint16_t commandedChannelControl_; + uint16_t loopBackSetStatus_ {0}; + uint32_t t1OutputFrames_ {0}; + uint32_t t1InputFrames_ {0}; + uint32_t routerMemoryUsed_ {0}; + uint32_t routerMemoryFree_ {0}; + uint16_t routerMemoryUtilization_ {0}; + uint16_t routeToRpg_ {0}; + uint16_t t1PortStatus_ {0}; + uint16_t routerDedicatedEthernetPortStatus_ {0}; + uint16_t routerCommercialEthernetPortStatus_ {0}; + uint32_t csu24HrErroredSeconds_ {0}; + uint32_t csu24HrSeverelyErroredSeconds_ {0}; + uint32_t csu24HrSeverelyErroredFramingSeconds_ {0}; + uint32_t csu24HrUnavailableSeconds_ {0}; + uint32_t csu24HrControlledSlipSeconds_ {0}; + uint32_t csu24HrPathCodingViolations_ {0}; + uint32_t csu24HrLineErroredSeconds_ {0}; + uint32_t csu24HrBurstyErroredSeconds_ {0}; + uint32_t csu24HrDegradedMinutes_ {0}; + uint32_t lanSwitchCpuUtilization_ {0}; + uint16_t lanSwitchMemoryUtilization_ {0}; + uint16_t ifdrChasisTemperature_ {0}; + uint16_t ifdrFpgaTemperature_ {0}; + uint16_t ntpStatus_ {0}; + uint16_t ipcStatus_ {0}; + uint16_t commandedChannelControl_ {0}; // AME - uint16_t polarization_; - float ameInternalTemperature_; - float ameReceiverModuleTemperature_; - float ameBiteCalModuleTemperature_; - uint16_t amePeltierPulseWidthModulation_; - uint16_t amePeltierStatus_; - uint16_t ameADConverterStatus_; - uint16_t ameState_; - float ame3_3VPsVoltage_; - float ame5VPsVoltage_; - float ame6_5VPsVoltage_; - float ame15VPsVoltage_; - float ame48VPsVoltage_; - float ameStaloPower_; - float peltierCurrent_; - float adcCalibrationReferenceVoltage_; - uint16_t ameMode_; - uint16_t amePeltierMode_; - float amePeltierInsideFanCurrent_; - float amePeltierOutsideFanCurrent_; - float horizontalTrLimiterVoltage_; - float verticalTrLimiterVoltage_; - float adcCalibrationOffsetVoltage_; - float adcCalibrationGainCorrection_; + uint16_t polarization_ {0}; + float ameInternalTemperature_ {0.0f}; + float ameReceiverModuleTemperature_ {0.0f}; + float ameBiteCalModuleTemperature_ {0.0f}; + uint16_t amePeltierPulseWidthModulation_ {0}; + uint16_t amePeltierStatus_ {0}; + uint16_t ameADConverterStatus_ {0}; + uint16_t ameState_ {0}; + float ame3_3VPsVoltage_ {0.0f}; + float ame5VPsVoltage_ {0.0f}; + float ame6_5VPsVoltage_ {0.0f}; + float ame15VPsVoltage_ {0.0f}; + float ame48VPsVoltage_ {0.0f}; + float ameStaloPower_ {0.0f}; + float peltierCurrent_ {0.0f}; + float adcCalibrationReferenceVoltage_ {0.0f}; + uint16_t ameMode_ {0}; + uint16_t amePeltierMode_ {0}; + float amePeltierInsideFanCurrent_ {0.0f}; + float amePeltierOutsideFanCurrent_ {0.0f}; + float horizontalTrLimiterVoltage_ {0.0f}; + float verticalTrLimiterVoltage_ {0.0f}; + float adcCalibrationOffsetVoltage_ {0.0f}; + float adcCalibrationGainCorrection_ {0.0f}; // RCP/SPIP Power Button Status - uint16_t rcpStatus_; - std::string rcpString_; - uint16_t spipPowerButtons_; + uint16_t rcpStatus_ {0}; + std::string rcpString_ {}; + uint16_t spipPowerButtons_ {0}; // Power - float masterPowerAdministratorLoad_; - float expansionPowerAdministratorLoad_; + float masterPowerAdministratorLoad_ {0.0f}; + float expansionPowerAdministratorLoad_ {0.0f}; // Transmitter - uint16_t _5VdcPs_; - uint16_t _15VdcPs_; - uint16_t _28VdcPs_; - uint16_t neg15VdcPs_; - uint16_t _45VdcPs_; - uint16_t filamentPsVoltage_; - uint16_t vacuumPumpPsVoltage_; - uint16_t focusCoilPsVoltage_; - uint16_t filamentPs_; - uint16_t klystronWarmup_; - uint16_t transmitterAvailable_; - uint16_t wgSwitchPosition_; - uint16_t wgPfnTransferInterlock_; - uint16_t maintenanceMode_; - uint16_t maintenanceRequired_; - uint16_t pfnSwitchPosition_; - uint16_t modulatorOverload_; - uint16_t modulatorInvCurrent_; - uint16_t modulatorSwitchFail_; - uint16_t mainPowerVoltage_; - uint16_t chargingSystemFail_; - uint16_t inverseDiodeCurrent_; - uint16_t triggerAmplifier_; - uint16_t circulatorTemperature_; - uint16_t spectrumFilterPressure_; - uint16_t wgArcVswr_; - uint16_t cabinetInterlock_; - uint16_t cabinetAirTemperature_; - uint16_t cabinetAirflow_; - uint16_t klystronCurrent_; - uint16_t klystronFilamentCurrent_; - uint16_t klystronVacionCurrent_; - uint16_t klystronAirTemperature_; - uint16_t klystronAirflow_; - uint16_t modulatorSwitchMaintenance_; - uint16_t postChargeRegulatorMaintenance_; - uint16_t wgPressureHumidity_; - uint16_t transmitterOvervoltage_; - uint16_t transmitterOvercurrent_; - uint16_t focusCoilCurrent_; - uint16_t focusCoilAirflow_; - uint16_t oilTemperature_; - uint16_t prfLimit_; - uint16_t transmitterOilLevel_; - uint16_t transmitterBatteryCharging_; - uint16_t highVoltageStatus_; - uint16_t transmitterRecyclingSummary_; - uint16_t transmitterInoperable_; - uint16_t transmitterAirFilter_; - std::array zeroTestBit_; - std::array oneTestBit_; - uint16_t xmtrSpipInterface_; - uint16_t transmitterSummaryStatus_; - float transmitterRfPower_; - float horizontalXmtrPeakPower_; - float xmtrPeakPower_; - float verticalXmtrPeakPower_; - float xmtrRfAvgPower_; - uint32_t xmtrRecycleCount_; - float receiverBias_; - float transmitImbalance_; - float xmtrPowerMeterZero_; + uint16_t _5VdcPs_ {0}; + uint16_t _15VdcPs_ {0}; + uint16_t _28VdcPs_ {0}; + uint16_t neg15VdcPs_ {0}; + uint16_t _45VdcPs_ {0}; + uint16_t filamentPsVoltage_ {0}; + uint16_t vacuumPumpPsVoltage_ {0}; + uint16_t focusCoilPsVoltage_ {0}; + uint16_t filamentPs_ {0}; + uint16_t klystronWarmup_ {0}; + uint16_t transmitterAvailable_ {0}; + uint16_t wgSwitchPosition_ {0}; + uint16_t wgPfnTransferInterlock_ {0}; + uint16_t maintenanceMode_ {0}; + uint16_t maintenanceRequired_ {0}; + uint16_t pfnSwitchPosition_ {0}; + uint16_t modulatorOverload_ {0}; + uint16_t modulatorInvCurrent_ {0}; + uint16_t modulatorSwitchFail_ {0}; + uint16_t mainPowerVoltage_ {0}; + uint16_t chargingSystemFail_ {0}; + uint16_t inverseDiodeCurrent_ {0}; + uint16_t triggerAmplifier_ {0}; + uint16_t circulatorTemperature_ {0}; + uint16_t spectrumFilterPressure_ {0}; + uint16_t wgArcVswr_ {0}; + uint16_t cabinetInterlock_ {0}; + uint16_t cabinetAirTemperature_ {0}; + uint16_t cabinetAirflow_ {0}; + uint16_t klystronCurrent_ {0}; + uint16_t klystronFilamentCurrent_ {0}; + uint16_t klystronVacionCurrent_ {0}; + uint16_t klystronAirTemperature_ {0}; + uint16_t klystronAirflow_ {0}; + uint16_t modulatorSwitchMaintenance_ {0}; + uint16_t postChargeRegulatorMaintenance_ {0}; + uint16_t wgPressureHumidity_ {0}; + uint16_t transmitterOvervoltage_ {0}; + uint16_t transmitterOvercurrent_ {0}; + uint16_t focusCoilCurrent_ {0}; + uint16_t focusCoilAirflow_ {0}; + uint16_t oilTemperature_ {0}; + uint16_t prfLimit_ {0}; + uint16_t transmitterOilLevel_ {0}; + uint16_t transmitterBatteryCharging_ {0}; + uint16_t highVoltageStatus_ {0}; + uint16_t transmitterRecyclingSummary_ {0}; + uint16_t transmitterInoperable_ {0}; + uint16_t transmitterAirFilter_ {0}; + std::array zeroTestBit_ {0}; + std::array oneTestBit_ {0}; + uint16_t xmtrSpipInterface_ {0}; + uint16_t transmitterSummaryStatus_ {0}; + float transmitterRfPower_ {0.0f}; + float horizontalXmtrPeakPower_ {0.0f}; + float xmtrPeakPower_ {0.0f}; + float verticalXmtrPeakPower_ {0.0f}; + float xmtrRfAvgPower_ {0.0f}; + uint32_t xmtrRecycleCount_ {0}; + float receiverBias_ {0.0f}; + float transmitImbalance_ {0.0f}; + float xmtrPowerMeterZero_ {0.0f}; // Tower/Utilities - uint16_t acUnit1CompressorShutOff_; - uint16_t acUnit2CompressorShutOff_; - uint16_t generatorMaintenanceRequired_; - uint16_t generatorBatteryVoltage_; - uint16_t generatorEngine_; - uint16_t generatorVoltFrequency_; - uint16_t powerSource_; - uint16_t transitionalPowerSource_; - uint16_t generatorAutoRunOffSwitch_; - uint16_t aircraftHazardLighting_; + uint16_t acUnit1CompressorShutOff_ {0}; + uint16_t acUnit2CompressorShutOff_ {0}; + uint16_t generatorMaintenanceRequired_ {0}; + uint16_t generatorBatteryVoltage_ {0}; + uint16_t generatorEngine_ {0}; + uint16_t generatorVoltFrequency_ {0}; + uint16_t powerSource_ {0}; + uint16_t transitionalPowerSource_ {0}; + uint16_t generatorAutoRunOffSwitch_ {0}; + uint16_t aircraftHazardLighting_ {0}; // Equipment Shelter - uint16_t equipmentShelterFireDetectionSystem_; - uint16_t equipmentShelterFireSmoke_; - uint16_t generatorShelterFireSmoke_; - uint16_t utilityVoltageFrequency_; - uint16_t siteSecurityAlarm_; - uint16_t securityEquipment_; - uint16_t securitySystem_; - uint16_t receiverConnectedToAntenna_; - uint16_t radomeHatch_; - uint16_t acUnit1FilterDirty_; - uint16_t acUnit2FilterDirty_; - float equipmentShelterTemperature_; - float outsideAmbientTemperature_; - float transmitterLeavingAirTemp_; - float acUnit1DischargeAirTemp_; - float generatorShelterTemperature_; - float radomeAirTemperature_; - float acUnit2DischargeAirTemp_; - float spip15VPs_; - float spipNeg15VPs_; - uint16_t spip28VPsStatus_; - float spip5VPs_; - uint16_t convertedGeneratorFuelLevel_; + uint16_t equipmentShelterFireDetectionSystem_ {0}; + uint16_t equipmentShelterFireSmoke_ {0}; + uint16_t generatorShelterFireSmoke_ {0}; + uint16_t utilityVoltageFrequency_ {0}; + uint16_t siteSecurityAlarm_ {0}; + uint16_t securityEquipment_ {0}; + uint16_t securitySystem_ {0}; + uint16_t receiverConnectedToAntenna_ {0}; + uint16_t radomeHatch_ {0}; + uint16_t acUnit1FilterDirty_ {0}; + uint16_t acUnit2FilterDirty_ {0}; + float equipmentShelterTemperature_ {0.0f}; + float outsideAmbientTemperature_ {0.0f}; + float transmitterLeavingAirTemp_ {0.0f}; + float acUnit1DischargeAirTemp_ {0.0f}; + float generatorShelterTemperature_ {0.0f}; + float radomeAirTemperature_ {0.0f}; + float acUnit2DischargeAirTemp_ {0.0f}; + float spip15VPs_ {0.0f}; + float spipNeg15VPs_ {0.0f}; + uint16_t spip28VPsStatus_ {0}; + float spip5VPs_ {0.0f}; + uint16_t convertedGeneratorFuelLevel_ {0}; // Antenna/Pedestal - uint16_t elevationPosDeadLimit_; - uint16_t _150VOvervoltage_; - uint16_t _150VUndervoltage_; - uint16_t elevationServoAmpInhibit_; - uint16_t elevationServoAmpShortCircuit_; - uint16_t elevationServoAmpOvertemp_; - uint16_t elevationMotorOvertemp_; - uint16_t elevationStowPin_; - uint16_t elevationHousing5VPs_; - uint16_t elevationNegDeadLimit_; - uint16_t elevationPosNormalLimit_; - uint16_t elevationNegNormalLimit_; - uint16_t elevationEncoderLight_; - uint16_t elevationGearboxOil_; - uint16_t elevationHandwheel_; - uint16_t elevationAmpPs_; - uint16_t azimuthServoAmpInhibit_; - uint16_t azimuthServoAmpShortCircuit_; - uint16_t azimuthServoAmpOvertemp_; - uint16_t azimuthMotorOvertemp_; - uint16_t azimuthStowPin_; - uint16_t azimuthHousing5VPs_; - uint16_t azimuthEncoderLight_; - uint16_t azimuthGearboxOil_; - uint16_t azimuthBullGearOil_; - uint16_t azimuthHandwheel_; - uint16_t azimuthServoAmpPs_; - uint16_t servo_; - uint16_t pedestalInterlockSwitch_; + uint16_t elevationPosDeadLimit_ {0}; + uint16_t _150VOvervoltage_ {0}; + uint16_t _150VUndervoltage_ {0}; + uint16_t elevationServoAmpInhibit_ {0}; + uint16_t elevationServoAmpShortCircuit_ {0}; + uint16_t elevationServoAmpOvertemp_ {0}; + uint16_t elevationMotorOvertemp_ {0}; + uint16_t elevationStowPin_ {0}; + uint16_t elevationHousing5VPs_ {0}; + uint16_t elevationNegDeadLimit_ {0}; + uint16_t elevationPosNormalLimit_ {0}; + uint16_t elevationNegNormalLimit_ {0}; + uint16_t elevationEncoderLight_ {0}; + uint16_t elevationGearboxOil_ {0}; + uint16_t elevationHandwheel_ {0}; + uint16_t elevationAmpPs_ {0}; + uint16_t azimuthServoAmpInhibit_ {0}; + uint16_t azimuthServoAmpShortCircuit_ {0}; + uint16_t azimuthServoAmpOvertemp_ {0}; + uint16_t azimuthMotorOvertemp_ {0}; + uint16_t azimuthStowPin_ {0}; + uint16_t azimuthHousing5VPs_ {0}; + uint16_t azimuthEncoderLight_ {0}; + uint16_t azimuthGearboxOil_ {0}; + uint16_t azimuthBullGearOil_ {0}; + uint16_t azimuthHandwheel_ {0}; + uint16_t azimuthServoAmpPs_ {0}; + uint16_t servo_ {0}; + uint16_t pedestalInterlockSwitch_ {0}; // RF Generator/Receiver - uint16_t cohoClock_; - uint16_t rfGeneratorFrequencySelectOscillator_; - uint16_t rfGeneratorRfStalo_; - uint16_t rfGeneratorPhaseShiftedCoho_; - uint16_t _9VReceiverPs_; - uint16_t _5VReceiverPs_; - uint16_t _18VReceiverPs_; - uint16_t neg9VReceiverPs_; - uint16_t _5VSingleChannelRdaiuPs_; - float horizontalShortPulseNoise_; - float horizontalLongPulseNoise_; - float horizontalNoiseTemperature_; - float verticalShortPulseNoise_; - float verticalLongPulseNoise_; - float verticalNoiseTemperature_; + uint16_t cohoClock_ {0}; + uint16_t rfGeneratorFrequencySelectOscillator_ {0}; + uint16_t rfGeneratorRfStalo_ {0}; + uint16_t rfGeneratorPhaseShiftedCoho_ {0}; + uint16_t _9VReceiverPs_ {0}; + uint16_t _5VReceiverPs_ {0}; + uint16_t _18VReceiverPs_ {0}; + uint16_t neg9VReceiverPs_ {0}; + uint16_t _5VSingleChannelRdaiuPs_ {0}; + float horizontalShortPulseNoise_ {0.0f}; + float horizontalLongPulseNoise_ {0.0f}; + float horizontalNoiseTemperature_ {0.0f}; + float verticalShortPulseNoise_ {0.0f}; + float verticalLongPulseNoise_ {0.0f}; + float verticalNoiseTemperature_ {0.0f}; // Calibration - float horizontalLinearity_; - float horizontalDynamicRange_; - float horizontalDeltaDbz0_; - float verticalDeltaDbz0_; - float kdPeakMeasured_; - float shortPulseHorizontalDbz0_; - float longPulseHorizontalDbz0_; - uint16_t velocityProcessed_; - uint16_t widthProcessed_; - uint16_t velocityRfGen_; - uint16_t widthRfGen_; - float horizontalI0_; - float verticalI0_; - float verticalDynamicRange_; - float shortPulseVerticalDbz0_; - float longPulseVerticalDbz0_; - float horizontalPowerSense_; - float verticalPowerSense_; - float zdrBias_; - float clutterSuppressionDelta_; - float clutterSuppressionUnfilteredPower_; - float clutterSuppressionFilteredPower_; - float verticalLinearity_; + float horizontalLinearity_ {0.0f}; + float horizontalDynamicRange_ {0.0f}; + float horizontalDeltaDbz0_ {0.0f}; + float verticalDeltaDbz0_ {0.0f}; + float kdPeakMeasured_ {0.0f}; + float shortPulseHorizontalDbz0_ {0.0f}; + float longPulseHorizontalDbz0_ {0.0f}; + uint16_t velocityProcessed_ {0}; + uint16_t widthProcessed_ {0}; + uint16_t velocityRfGen_ {0}; + uint16_t widthRfGen_ {0}; + float horizontalI0_ {0.0f}; + float verticalI0_ {0.0f}; + float verticalDynamicRange_ {0.0f}; + float shortPulseVerticalDbz0_ {0.0f}; + float longPulseVerticalDbz0_ {0.0f}; + float horizontalPowerSense_ {0.0f}; + float verticalPowerSense_ {0.0f}; + float zdrOffset_ {0.0f}; + float clutterSuppressionDelta_ {0.0f}; + float clutterSuppressionUnfilteredPower_ {0.0f}; + float clutterSuppressionFilteredPower_ {0.0f}; + float verticalLinearity_ {0.0f}; // File Status - uint16_t stateFileReadStatus_; - uint16_t stateFileWriteStatus_; - uint16_t bypassMapFileReadStatus_; - uint16_t bypassMapFileWriteStatus_; - uint16_t currentAdaptationFileReadStatus_; - uint16_t currentAdaptationFileWriteStatus_; - uint16_t censorZoneFileReadStatus_; - uint16_t censorZoneFileWriteStatus_; - uint16_t remoteVcpFileReadStatus_; - uint16_t remoteVcpFileWriteStatus_; - uint16_t baselineAdaptationFileReadStatus_; - uint16_t readStatusOfPrfSets_; - uint16_t clutterFilterMapFileReadStatus_; - uint16_t clutterFilterMapFileWriteStatus_; - uint16_t generatlDiskIoError_; - uint8_t rspStatus_; - uint8_t motherboardTemperature_; - uint8_t cpu1Temperature_; - uint8_t cpu2Temperature_; - uint16_t cpu1FanSpeed_; - uint16_t cpu2FanSpeed_; - uint16_t rspFan1Speed_; - uint16_t rspFan2Speed_; - uint16_t rspFan3Speed_; + uint16_t stateFileReadStatus_ {0}; + uint16_t stateFileWriteStatus_ {0}; + uint16_t bypassMapFileReadStatus_ {0}; + uint16_t bypassMapFileWriteStatus_ {0}; + uint16_t currentAdaptationFileReadStatus_ {0}; + uint16_t currentAdaptationFileWriteStatus_ {0}; + uint16_t censorZoneFileReadStatus_ {0}; + uint16_t censorZoneFileWriteStatus_ {0}; + uint16_t remoteVcpFileReadStatus_ {0}; + uint16_t remoteVcpFileWriteStatus_ {0}; + uint16_t baselineAdaptationFileReadStatus_ {0}; + uint16_t readStatusOfPrfSets_ {0}; + uint16_t clutterFilterMapFileReadStatus_ {0}; + uint16_t clutterFilterMapFileWriteStatus_ {0}; + uint16_t generalDiskIoError_ {0}; + uint8_t rspStatus_ {0}; + uint8_t cpu1Temperature_ {0}; + uint8_t cpu2Temperature_ {0}; + uint16_t rspMotherboardPower_ {0}; // Device Status - uint16_t spipCommStatus_; - uint16_t hciCommStatus_; - uint16_t signalProcessorCommandStatus_; - uint16_t ameCommunicationStatus_; - uint16_t rmsLinkStatus_; - uint16_t rpgLinkStatus_; - uint16_t interpanelLinkStatus_; - uint32_t performanceCheckTime_; - uint16_t version_; + uint16_t spipCommStatus_ {0}; + uint16_t hciCommStatus_ {0}; + uint16_t signalProcessorCommandStatus_ {0}; + uint16_t ameCommunicationStatus_ {0}; + uint16_t rmsLinkStatus_ {0}; + uint16_t rpgLinkStatus_ {0}; + uint16_t interpanelLinkStatus_ {0}; + uint32_t performanceCheckTime_ {0}; + uint16_t version_ {0}; }; PerformanceMaintenanceData::PerformanceMaintenanceData() : @@ -556,7 +297,7 @@ PerformanceMaintenanceData::PerformanceMaintenanceData() : PerformanceMaintenanceData::~PerformanceMaintenanceData() = default; PerformanceMaintenanceData::PerformanceMaintenanceData( - PerformanceMaintenanceData&&) noexcept = default; + PerformanceMaintenanceData&&) noexcept = default; PerformanceMaintenanceData& PerformanceMaintenanceData::operator=( PerformanceMaintenanceData&&) noexcept = default; @@ -595,24 +336,21 @@ uint16_t PerformanceMaintenanceData::route_to_rpg() const return p->routeToRpg_; } -uint32_t PerformanceMaintenanceData::csu_loss_of_signal() const +uint16_t PerformanceMaintenanceData::t1_port_status() const { - return p->csuLossOfSignal_; + return p->t1PortStatus_; } -uint32_t PerformanceMaintenanceData::csu_loss_of_frames() const +uint16_t +PerformanceMaintenanceData::router_dedicated_ethernet_port_status() const { - return p->csuLossOfFrames_; + return p->routerDedicatedEthernetPortStatus_; } -uint32_t PerformanceMaintenanceData::csu_yellow_alarms() const +uint16_t +PerformanceMaintenanceData::router_commercial_ethernet_port_status() const { - return p->csuYellowAlarms_; -} - -uint32_t PerformanceMaintenanceData::csu_blue_alarms() const -{ - return p->csuBlueAlarms_; + return p->routerCommercialEthernetPortStatus_; } uint32_t PerformanceMaintenanceData::csu_24hr_errored_seconds() const @@ -681,9 +419,9 @@ uint16_t PerformanceMaintenanceData::ifdr_fpga_temperature() const return p->ifdrFpgaTemperature_; } -int32_t PerformanceMaintenanceData::gps_satellites() const +uint16_t PerformanceMaintenanceData::ntp_status() const { - return p->gpsSatellites_; + return p->ntpStatus_; } uint16_t PerformanceMaintenanceData::ipc_status() const @@ -1628,9 +1366,9 @@ float PerformanceMaintenanceData::vertical_power_sense() const return p->verticalPowerSense_; } -float PerformanceMaintenanceData::zdr_bias() const +float PerformanceMaintenanceData::zdr_offset() const { - return p->zdrBias_; + return p->zdrOffset_; } float PerformanceMaintenanceData::clutter_suppression_delta() const @@ -1726,9 +1464,9 @@ PerformanceMaintenanceData::clutter_filter_map_file_write_status() const return p->clutterFilterMapFileWriteStatus_; } -uint16_t PerformanceMaintenanceData::generatl_disk_io_error() const +uint16_t PerformanceMaintenanceData::general_disk_io_error() const { - return p->generatlDiskIoError_; + return p->generalDiskIoError_; } uint8_t PerformanceMaintenanceData::rsp_status() const @@ -1736,11 +1474,6 @@ uint8_t PerformanceMaintenanceData::rsp_status() const return p->rspStatus_; } -uint8_t PerformanceMaintenanceData::motherboard_temperature() const -{ - return p->motherboardTemperature_; -} - uint8_t PerformanceMaintenanceData::cpu1_temperature() const { return p->cpu1Temperature_; @@ -1751,29 +1484,9 @@ uint8_t PerformanceMaintenanceData::cpu2_temperature() const return p->cpu2Temperature_; } -uint16_t PerformanceMaintenanceData::cpu1_fan_speed() const +uint16_t PerformanceMaintenanceData::rsp_motherboard_power() const { - return p->cpu1FanSpeed_; -} - -uint16_t PerformanceMaintenanceData::cpu2_fan_speed() const -{ - return p->cpu2FanSpeed_; -} - -uint16_t PerformanceMaintenanceData::rsp_fan1_speed() const -{ - return p->rspFan1Speed_; -} - -uint16_t PerformanceMaintenanceData::rsp_fan2_speed() const -{ - return p->rspFan2Speed_; -} - -uint16_t PerformanceMaintenanceData::rsp_fan3_speed() const -{ - return p->rspFan3Speed_; + return p->rspMotherboardPower_; } uint16_t PerformanceMaintenanceData::spip_comm_status() const @@ -1839,11 +1552,13 @@ bool PerformanceMaintenanceData::Parse(std::istream& is) is.read(reinterpret_cast(&p->routerMemoryFree_), 4); // 9-10 is.read(reinterpret_cast(&p->routerMemoryUtilization_), 2); // 11 is.read(reinterpret_cast(&p->routeToRpg_), 2); // 12 - is.read(reinterpret_cast(&p->csuLossOfSignal_), 4); // 13-14 - is.read(reinterpret_cast(&p->csuLossOfFrames_), 4); // 15-16 - is.read(reinterpret_cast(&p->csuYellowAlarms_), 4); // 17-18 - is.read(reinterpret_cast(&p->csuBlueAlarms_), 4); // 19-20 - is.read(reinterpret_cast(&p->csu24HrErroredSeconds_), 4); // 21-22 + is.read(reinterpret_cast(&p->t1PortStatus_), 2); // 13 + is.read(reinterpret_cast(&p->routerDedicatedEthernetPortStatus_), + 2); // 14 + is.read(reinterpret_cast(&p->routerCommercialEthernetPortStatus_), + 2); // 15 + is.seekg(10, std::ios_base::cur); // 16-20 + is.read(reinterpret_cast(&p->csu24HrErroredSeconds_), 4); // 21-22 is.read(reinterpret_cast(&p->csu24HrSeverelyErroredSeconds_), 4); // 23-24 is.read(reinterpret_cast(&p->csu24HrSeverelyErroredFramingSeconds_), @@ -1863,9 +1578,8 @@ bool PerformanceMaintenanceData::Parse(std::istream& is) is.seekg(2, std::ios_base::cur); // 44 is.read(reinterpret_cast(&p->ifdrChasisTemperature_), 2); // 45 is.read(reinterpret_cast(&p->ifdrFpgaTemperature_), 2); // 46 - is.seekg(4, std::ios_base::cur); // 47-48 - is.read(reinterpret_cast(&p->gpsSatellites_), 4); // 49-50 - is.seekg(4, std::ios_base::cur); // 51-52 + is.read(reinterpret_cast(&p->ntpStatus_), 2); // 47 + is.seekg(10, std::ios_base::cur); // 48-52 is.read(reinterpret_cast(&p->ipcStatus_), 2); // 53 is.read(reinterpret_cast(&p->commandedChannelControl_), 2); // 54 is.seekg(6, std::ios_base::cur); // 55-57 @@ -2112,7 +1826,7 @@ bool PerformanceMaintenanceData::Parse(std::istream& is) is.seekg(8, std::ios_base::cur); // 393-396 is.read(reinterpret_cast(&p->horizontalPowerSense_), 4); // 397-398 is.read(reinterpret_cast(&p->verticalPowerSense_), 4); // 399-400 - is.read(reinterpret_cast(&p->zdrBias_), 4); // 401-402 + is.read(reinterpret_cast(&p->zdrOffset_), 4); // 401-402 is.seekg(12, std::ios_base::cur); // 403-408 is.read(reinterpret_cast(&p->clutterSuppressionDelta_), 4); // 409-410 is.read(reinterpret_cast(&p->clutterSuppressionUnfilteredPower_), @@ -2143,18 +1857,14 @@ bool PerformanceMaintenanceData::Parse(std::istream& is) is.read(reinterpret_cast(&p->clutterFilterMapFileReadStatus_), 2); // 445 is.read(reinterpret_cast(&p->clutterFilterMapFileWriteStatus_), - 2); // 446 - is.read(reinterpret_cast(&p->generatlDiskIoError_), 2); // 447 - is.read(reinterpret_cast(&p->rspStatus_), 1); // 448 - is.read(reinterpret_cast(&p->motherboardTemperature_), 1); // 448 - is.read(reinterpret_cast(&p->cpu1Temperature_), 1); // 449 - is.read(reinterpret_cast(&p->cpu2Temperature_), 1); // 449 - is.read(reinterpret_cast(&p->cpu1FanSpeed_), 2); // 450 - is.read(reinterpret_cast(&p->cpu2FanSpeed_), 2); // 451 - is.read(reinterpret_cast(&p->rspFan1Speed_), 2); // 452 - is.read(reinterpret_cast(&p->rspFan2Speed_), 2); // 453 - is.read(reinterpret_cast(&p->rspFan3Speed_), 2); // 454 - is.seekg(12, std::ios_base::cur); // 455-460 + 2); // 446 + is.read(reinterpret_cast(&p->generalDiskIoError_), 2); // 447 + is.read(reinterpret_cast(&p->rspStatus_), 1); // 448 + is.seekg(1, std::ios_base::cur); // 448 + is.read(reinterpret_cast(&p->cpu1Temperature_), 1); // 449 + is.read(reinterpret_cast(&p->cpu2Temperature_), 1); // 449 + is.read(reinterpret_cast(&p->rspMotherboardPower_), 2); // 450 + is.seekg(20, std::ios_base::cur); // 451-460 // Device Status is.read(reinterpret_cast(&p->spipCommStatus_), 2); // 461 @@ -2173,17 +1883,18 @@ bool PerformanceMaintenanceData::Parse(std::istream& is) bytesRead += 960; // Communications - p->loopBackSetStatus_ = ntohs(p->loopBackSetStatus_); - p->t1OutputFrames_ = ntohl(p->t1OutputFrames_); - p->t1InputFrames_ = ntohl(p->t1InputFrames_); - p->routerMemoryUsed_ = ntohl(p->routerMemoryUsed_); - p->routerMemoryFree_ = ntohl(p->routerMemoryFree_); - p->routerMemoryUtilization_ = ntohs(p->routerMemoryUtilization_); - p->routeToRpg_ = ntohs(p->routeToRpg_); - p->csuLossOfSignal_ = ntohl(p->csuLossOfSignal_); - p->csuLossOfFrames_ = ntohl(p->csuLossOfFrames_); - p->csuYellowAlarms_ = ntohl(p->csuYellowAlarms_); - p->csuBlueAlarms_ = ntohl(p->csuBlueAlarms_); + p->loopBackSetStatus_ = ntohs(p->loopBackSetStatus_); + p->t1OutputFrames_ = ntohl(p->t1OutputFrames_); + p->t1InputFrames_ = ntohl(p->t1InputFrames_); + p->routerMemoryUsed_ = ntohl(p->routerMemoryUsed_); + p->routerMemoryFree_ = ntohl(p->routerMemoryFree_); + p->routerMemoryUtilization_ = ntohs(p->routerMemoryUtilization_); + p->routeToRpg_ = ntohs(p->routeToRpg_); + p->t1PortStatus_ = ntohs(p->t1PortStatus_); + p->routerDedicatedEthernetPortStatus_ = + ntohs(p->routerDedicatedEthernetPortStatus_); + p->routerCommercialEthernetPortStatus_ = + ntohs(p->routerCommercialEthernetPortStatus_); p->csu24HrErroredSeconds_ = ntohl(p->csu24HrErroredSeconds_); p->csu24HrSeverelyErroredSeconds_ = ntohl(p->csu24HrSeverelyErroredSeconds_); p->csu24HrSeverelyErroredFramingSeconds_ = @@ -2198,7 +1909,7 @@ bool PerformanceMaintenanceData::Parse(std::istream& is) p->lanSwitchMemoryUtilization_ = ntohs(p->lanSwitchMemoryUtilization_); p->ifdrChasisTemperature_ = ntohs(p->ifdrChasisTemperature_); p->ifdrFpgaTemperature_ = ntohs(p->ifdrFpgaTemperature_); - p->gpsSatellites_ = ntohl(p->gpsSatellites_); + p->ntpStatus_ = ntohs(p->ntpStatus_); p->ipcStatus_ = ntohs(p->ipcStatus_); p->commandedChannelControl_ = ntohs(p->commandedChannelControl_); @@ -2413,7 +2124,7 @@ bool PerformanceMaintenanceData::Parse(std::istream& is) p->longPulseVerticalDbz0_ = SwapFloat(p->longPulseVerticalDbz0_); p->horizontalPowerSense_ = SwapFloat(p->horizontalPowerSense_); p->verticalPowerSense_ = SwapFloat(p->verticalPowerSense_); - p->zdrBias_ = SwapFloat(p->zdrBias_); + p->zdrOffset_ = SwapFloat(p->zdrOffset_); p->clutterSuppressionDelta_ = SwapFloat(p->clutterSuppressionDelta_); p->clutterSuppressionUnfilteredPower_ = SwapFloat(p->clutterSuppressionUnfilteredPower_); @@ -2441,12 +2152,8 @@ bool PerformanceMaintenanceData::Parse(std::istream& is) ntohs(p->clutterFilterMapFileReadStatus_); p->clutterFilterMapFileWriteStatus_ = ntohs(p->clutterFilterMapFileWriteStatus_); - p->generatlDiskIoError_ = ntohs(p->generatlDiskIoError_); - p->cpu1FanSpeed_ = ntohs(p->cpu1FanSpeed_); - p->cpu2FanSpeed_ = ntohs(p->cpu2FanSpeed_); - p->rspFan1Speed_ = ntohs(p->rspFan1Speed_); - p->rspFan2Speed_ = ntohs(p->rspFan2Speed_); - p->rspFan3Speed_ = ntohs(p->rspFan3Speed_); + p->generalDiskIoError_ = ntohs(p->generalDiskIoError_); + p->rspMotherboardPower_ = ntohs(p->rspMotherboardPower_); // Device Status p->spipCommStatus_ = ntohs(p->spipCommStatus_); diff --git a/wxdata/source/scwx/wsr88d/rda/rda_adaptation_data.cpp b/wxdata/source/scwx/wsr88d/rda/rda_adaptation_data.cpp index 94a96283..aff8664a 100644 --- a/wxdata/source/scwx/wsr88d/rda/rda_adaptation_data.cpp +++ b/wxdata/source/scwx/wsr88d/rda/rda_adaptation_data.cpp @@ -34,337 +34,180 @@ struct AntManualSetup class RdaAdaptationDataImpl { public: - explicit RdaAdaptationDataImpl() : - adapFileName_ {}, - adapFormat_ {}, - adapRevision_ {}, - adapDate_ {}, - adapTime_ {}, - lowerPreLimit_ {0.0f}, - azLat_ {0.0f}, - upperPreLimit_ {0.0f}, - elLat_ {0.0f}, - parkaz_ {0.0f}, - parkel_ {0.0f}, - aFuelConv_ {0.0f}, - aMinShelterTemp_ {0.0f}, - aMaxShelterTemp_ {0.0f}, - aMinShelterAcTempDiff_ {0.0f}, - aMaxXmtrAirTemp_ {0.0f}, - aMaxRadTemp_ {0.0f}, - aMaxRadTempRise_ {0.0f}, - lowerDeadLimit_ {0.0f}, - upperDeadLimit_ {0.0f}, - aMinGenRoomTemp_ {0.0f}, - aMaxGenRoomTemp_ {0.0f}, - spip5VRegLim_ {0.0f}, - spip15VRegLim_ {0.0f}, - rpgCoLocated_ {false}, - specFilterInstalled_ {false}, - tpsInstalled_ {false}, - rmsInstalled_ {false}, - aHvdlTstInt_ {0}, - aRpgLtInt_ {0}, - aMinStabUtilPwrTime_ {0}, - aGenAutoExerInterval_ {0}, - aUtilPwrSwReqInterval_ {0}, - aLowFuelLevel_ {0.0f}, - configChanNumber_ {0}, - redundantChanConfig_ {0}, - attenTable_ {0.0f}, - pathLosses_ {}, - vTsCw_ {0.0f}, - hRnscale_ {0.0f}, - atmos_ {0.0f}, - elIndex_ {0.0f}, - tfreqMhz_ {0}, - baseDataTcn_ {0.0f}, - reflDataTover_ {0.0f}, - tarHDbz0Lp_ {0.0f}, - tarVDbz0Lp_ {0.0f}, - initPhiDp_ {0}, - normInitPhiDp_ {0}, - lxLp_ {0.0f}, - lxSp_ {0.0f}, - meteorParam_ {0.0f}, - antennaGain_ {0.0f}, - velDegradLimit_ {0.0f}, - wthDegradLimit_ {0.0f}, - hNoisetempDgradLimit_ {0.0f}, - hMinNoisetemp_ {0}, - vNoisetempDgradLimit_ {0.0f}, - vMinNoisetemp_ {0}, - klyDegradeLimit_ {0.0f}, - tsCoho_ {0.0f}, - hTsCw_ {0.0f}, - tsStalo_ {0.0f}, - ameHNoiseEnr_ {0.0f}, - xmtrPeakPwrHighLimit_ {0.0f}, - xmtrPeakPwrLowLimit_ {0.0f}, - hDbz0DeltaLimit_ {0.0f}, - threshold1_ {0.0f}, - threshold2_ {0.0f}, - clutSuppDgradLim_ {0.0f}, - range0Value_ {0.0f}, - xmtrPwrMtrScale_ {0.0f}, - vDbz0DeltaLimit_ {0.0f}, - tarHDbz0Sp_ {0.0f}, - tarVDbz0Sp_ {0.0f}, - deltaprf_ {0}, - tauSp_ {0}, - tauLp_ {0}, - ncDeadValue_ {0}, - tauRfSp_ {0}, - tauRfLp_ {0}, - seg1Lim_ {0.0f}, - slatsec_ {0.0f}, - slonsec_ {0.0f}, - slatdeg_ {0}, - slatmin_ {0}, - slondeg_ {0}, - slonmin_ {0}, - slatdir_ {0}, - slondir_ {0}, - azCorrectionFactor_ {0.0f}, - elCorrectionFactor_ {0.0f}, - siteName_ {}, - antManualSetup_(), - azPosSustainDrive_ {0.0f}, - azNegSustainDrive_ {0.0f}, - azNomPosDriveSlope_ {0.0f}, - azNomNegDriveSlope_ {0.0f}, - azFeedbackSlope_ {0.0f}, - elPosSustainDrive_ {0.0f}, - elNegSustainDrive_ {0.0f}, - elNomPosDriveSlope_ {0.0f}, - elNomNegDriveSlope_ {0.0f}, - elFeedbackSlope_ {0.0f}, - elFirstSlope_ {0.0f}, - elSecondSlope_ {0.0f}, - elThirdSlope_ {0.0f}, - elDroopPos_ {0.0f}, - elOffNeutralDrive_ {0.0f}, - azIntertia_ {0.0f}, - elInertia_ {0.0f}, - rvp8nvIwaveguideLength_ {0}, - vRnscale_ {0.0f}, - velDataTover_ {0.0f}, - widthDataTover_ {0.0f}, - dopplerRangeStart_ {0.0f}, - maxElIndex_ {0}, - seg2Lim_ {0.0f}, - seg3Lim_ {0.0f}, - seg4Lim_ {0.0f}, - nbrElSegments_ {0}, - hNoiseLong_ {0.0f}, - antNoiseTemp_ {0.0f}, - hNoiseShort_ {0.0f}, - hNoiseTolerance_ {0.0f}, - minHDynRange_ {0.0f}, - genInstalled_ {false}, - genExercise_ {false}, - vNoiseTolerance_ {0.0f}, - minVDynRange_ {0.0f}, - zdrBiasDgradLim_ {0.0f}, - baselineZdrBias_ {0.0f}, - vNoiseLong_ {0.0f}, - vNoiseShort_ {0.0f}, - zdrDataTover_ {0.0f}, - phiDataTover_ {0.0f}, - rhoDataTover_ {0.0f}, - staloPowerDgradLimit_ {0.0f}, - staloPowerMaintLimit_ {0.0f}, - minHPwrSense_ {0.0f}, - minVPwrSense_ {0.0f}, - hPwrSenseOffset_ {0.0f}, - vPwrSenseOffset_ {0.0f}, - psGainRef_ {0.0f}, - rfPalletBroadLoss_ {0.0f}, - amePsTolerance_ {0.0f}, - ameMaxTemp_ {0.0f}, - ameMinTemp_ {0.0f}, - rcvrModMaxTemp_ {0.0f}, - rcvrModMinTemp_ {0.0f}, - biteModMaxTemp_ {0.0f}, - biteModMinTemp_ {0.0f}, - defaultPolarization_ {0}, - trLimitDgradLimit_ {0.0f}, - trLimitFailLimit_ {0.0f}, - rfpStepperEnabled_ {false}, - ameCurrentTolerance_ {0.0f}, - hOnlyPolarization_ {0}, - vOnlyPolarization_ {0}, - sunBias_ {0.0f}, - aMinShelterTempWarn_ {0.0f}, - powerMeterZero_ {0.0f}, - txbBaseline_ {0.0f}, - txbAlarmThresh_ {0.0f} {}; - ~RdaAdaptationDataImpl() = default; + explicit RdaAdaptationDataImpl() = default; + ~RdaAdaptationDataImpl() = default; - std::string adapFileName_; - std::string adapFormat_; - std::string adapRevision_; - std::string adapDate_; - std::string adapTime_; - float lowerPreLimit_; - float azLat_; - float upperPreLimit_; - float elLat_; - float parkaz_; - float parkel_; - std::array aFuelConv_; - float aMinShelterTemp_; - float aMaxShelterTemp_; - float aMinShelterAcTempDiff_; - float aMaxXmtrAirTemp_; - float aMaxRadTemp_; - float aMaxRadTempRise_; - float lowerDeadLimit_; - float upperDeadLimit_; - float aMinGenRoomTemp_; - float aMaxGenRoomTemp_; - float spip5VRegLim_; - float spip15VRegLim_; - bool rpgCoLocated_; - bool specFilterInstalled_; - bool tpsInstalled_; - bool rmsInstalled_; - uint32_t aHvdlTstInt_; - uint32_t aRpgLtInt_; - uint32_t aMinStabUtilPwrTime_; - uint32_t aGenAutoExerInterval_; - uint32_t aUtilPwrSwReqInterval_; - float aLowFuelLevel_; - uint32_t configChanNumber_; - uint32_t redundantChanConfig_; - std::array attenTable_; - std::map pathLosses_; - float vTsCw_; - std::array hRnscale_; - std::array atmos_; - std::array elIndex_; - uint32_t tfreqMhz_; - float baseDataTcn_; - float reflDataTover_; - float tarHDbz0Lp_; - float tarVDbz0Lp_; - uint32_t initPhiDp_; - uint32_t normInitPhiDp_; - float lxLp_; - float lxSp_; - float meteorParam_; - float antennaGain_; - float velDegradLimit_; - float wthDegradLimit_; - float hNoisetempDgradLimit_; - uint32_t hMinNoisetemp_; - float vNoisetempDgradLimit_; - uint32_t vMinNoisetemp_; - float klyDegradeLimit_; - float tsCoho_; - float hTsCw_; - float tsStalo_; - float ameHNoiseEnr_; - float xmtrPeakPwrHighLimit_; - float xmtrPeakPwrLowLimit_; - float hDbz0DeltaLimit_; - float threshold1_; - float threshold2_; - float clutSuppDgradLim_; - float range0Value_; - float xmtrPwrMtrScale_; - float vDbz0DeltaLimit_; - float tarHDbz0Sp_; - float tarVDbz0Sp_; - uint32_t deltaprf_; - uint32_t tauSp_; - uint32_t tauLp_; - uint32_t ncDeadValue_; - uint32_t tauRfSp_; - uint32_t tauRfLp_; - float seg1Lim_; - float slatsec_; - float slonsec_; - uint32_t slatdeg_; - uint32_t slatmin_; - uint32_t slondeg_; - uint32_t slonmin_; - char slatdir_; - char slondir_; - float azCorrectionFactor_; - float elCorrectionFactor_; - std::string siteName_; - AntManualSetup antManualSetup_; - float azPosSustainDrive_; - float azNegSustainDrive_; - float azNomPosDriveSlope_; - float azNomNegDriveSlope_; - float azFeedbackSlope_; - float elPosSustainDrive_; - float elNegSustainDrive_; - float elNomPosDriveSlope_; - float elNomNegDriveSlope_; - float elFeedbackSlope_; - float elFirstSlope_; - float elSecondSlope_; - float elThirdSlope_; - float elDroopPos_; - float elOffNeutralDrive_; - float azIntertia_; - float elInertia_; - uint32_t rvp8nvIwaveguideLength_; - std::array vRnscale_; - float velDataTover_; - float widthDataTover_; - float dopplerRangeStart_; - uint32_t maxElIndex_; - float seg2Lim_; - float seg3Lim_; - float seg4Lim_; - uint32_t nbrElSegments_; - float hNoiseLong_; - float antNoiseTemp_; - float hNoiseShort_; - float hNoiseTolerance_; - float minHDynRange_; - bool genInstalled_; - bool genExercise_; - float vNoiseTolerance_; - float minVDynRange_; - float zdrBiasDgradLim_; - float baselineZdrBias_; - float vNoiseLong_; - float vNoiseShort_; - float zdrDataTover_; - float phiDataTover_; - float rhoDataTover_; - float staloPowerDgradLimit_; - float staloPowerMaintLimit_; - float minHPwrSense_; - float minVPwrSense_; - float hPwrSenseOffset_; - float vPwrSenseOffset_; - float psGainRef_; - float rfPalletBroadLoss_; - float amePsTolerance_; - float ameMaxTemp_; - float ameMinTemp_; - float rcvrModMaxTemp_; - float rcvrModMinTemp_; - float biteModMaxTemp_; - float biteModMinTemp_; - uint32_t defaultPolarization_; - float trLimitDgradLimit_; - float trLimitFailLimit_; - bool rfpStepperEnabled_; - float ameCurrentTolerance_; - uint32_t hOnlyPolarization_; - uint32_t vOnlyPolarization_; - float sunBias_; - float aMinShelterTempWarn_; - float powerMeterZero_; - float txbBaseline_; - float txbAlarmThresh_; + std::string adapFileName_ {}; + std::string adapFormat_ {}; + std::string adapRevision_ {}; + std::string adapDate_ {}; + std::string adapTime_ {}; + float lowerPreLimit_ {0.0f}; + float azLat_ {0.0f}; + float upperPreLimit_ {0.0f}; + float elLat_ {0.0f}; + float parkaz_ {0.0f}; + float parkel_ {0.0f}; + std::array aFuelConv_ {0.0f}; + float aMinShelterTemp_ {0.0f}; + float aMaxShelterTemp_ {0.0f}; + float aMinShelterAcTempDiff_ {0.0f}; + float aMaxXmtrAirTemp_ {0.0f}; + float aMaxRadTemp_ {0.0f}; + float aMaxRadTempRise_ {0.0f}; + float lowerDeadLimit_ {0.0f}; + float upperDeadLimit_ {0.0f}; + float aMinGenRoomTemp_ {0.0f}; + float aMaxGenRoomTemp_ {0.0f}; + float spip5VRegLim_ {0.0f}; + float spip15VRegLim_ {0.0f}; + bool rpgCoLocated_ {false}; + bool specFilterInstalled_ {false}; + bool tpsInstalled_ {false}; + bool rmsInstalled_ {false}; + uint32_t aHvdlTstInt_ {0}; + uint32_t aRpgLtInt_ {0}; + uint32_t aMinStabUtilPwrTime_ {0}; + uint32_t aGenAutoExerInterval_ {0}; + uint32_t aUtilPwrSwReqInterval_ {0}; + float aLowFuelLevel_ {0.0f}; + uint32_t configChanNumber_ {0}; + uint32_t redundantChanConfig_ {0}; + std::array attenTable_ {0.0f}; + std::map pathLosses_ {}; + float vTsCw_ {0.0f}; + std::array hRnscale_ {0.0f}; + std::array atmos_ {0.0f}; + std::array elIndex_ {0.0f}; + uint32_t tfreqMhz_ {0}; + float baseDataTcn_ {0.0f}; + float reflDataTover_ {0.0f}; + float tarHDbz0Lp_ {0.0f}; + float tarVDbz0Lp_ {0.0f}; + uint32_t initPhiDp_ {0}; + uint32_t normInitPhiDp_ {0}; + float lxLp_ {0.0f}; + float lxSp_ {0.0f}; + float meteorParam_ {0.0f}; + float antennaGain_ {0.0f}; + float velDegradLimit_ {0.0f}; + float wthDegradLimit_ {0.0f}; + float hNoisetempDgradLimit_ {0.0f}; + uint32_t hMinNoisetemp_ {0}; + float vNoisetempDgradLimit_ {0.0f}; + uint32_t vMinNoisetemp_ {0}; + float klyDegradeLimit_ {0.0f}; + float tsCoho_ {0.0f}; + float hTsCw_ {0.0f}; + float tsStalo_ {0.0f}; + float ameHNoiseEnr_ {0.0f}; + float xmtrPeakPwrHighLimit_ {0.0f}; + float xmtrPeakPwrLowLimit_ {0.0f}; + float hDbz0DeltaLimit_ {0.0f}; + float threshold1_ {0.0f}; + float threshold2_ {0.0f}; + float clutSuppDgradLim_ {0.0f}; + float range0Value_ {0.0f}; + float xmtrPwrMtrScale_ {0.0f}; + float vDbz0DeltaLimit_ {0.0f}; + float tarHDbz0Sp_ {0.0f}; + float tarVDbz0Sp_ {0.0f}; + uint32_t deltaprf_ {0}; + uint32_t tauSp_ {0}; + uint32_t tauLp_ {0}; + uint32_t ncDeadValue_ {0}; + uint32_t tauRfSp_ {0}; + uint32_t tauRfLp_ {0}; + float seg1Lim_ {0.0f}; + float slatsec_ {0.0f}; + float slonsec_ {0.0f}; + uint32_t slatdeg_ {0}; + uint32_t slatmin_ {0}; + uint32_t slondeg_ {0}; + uint32_t slonmin_ {0}; + char slatdir_ {0}; + char slondir_ {0}; + double digRcvrClockFreq_ {0.0}; + double cohoFreq_ {0.0}; + float azCorrectionFactor_ {0.0f}; + float elCorrectionFactor_ {0.0f}; + std::string siteName_ {}; + AntManualSetup antManualSetup_ {}; + float azPosSustainDrive_ {0.0f}; + float azNegSustainDrive_ {0.0f}; + float azNomPosDriveSlope_ {0.0f}; + float azNomNegDriveSlope_ {0.0f}; + float azFeedbackSlope_ {0.0f}; + float elPosSustainDrive_ {0.0f}; + float elNegSustainDrive_ {0.0f}; + float elNomPosDriveSlope_ {0.0f}; + float elNomNegDriveSlope_ {0.0f}; + float elFeedbackSlope_ {0.0f}; + float elFirstSlope_ {0.0f}; + float elSecondSlope_ {0.0f}; + float elThirdSlope_ {0.0f}; + float elDroopPos_ {0.0f}; + float elOffNeutralDrive_ {0.0f}; + float azIntertia_ {0.0f}; + float elInertia_ {0.0f}; + float azStowAngle_ {0.0f}; + float elStowAngle_ {0.0f}; + float azEncoderAlignment_ {0.0f}; + float elEncoderAlignment_ {0.0f}; + std::string refinedPark_ {}; + uint32_t rvp8nvIwaveguideLength_ {0}; + std::array vRnscale_ {0.0f}; + float velDataTover_ {0.0f}; + float widthDataTover_ {0.0f}; + float dopplerRangeStart_ {0.0f}; + uint32_t maxElIndex_ {0}; + float seg2Lim_ {0.0f}; + float seg3Lim_ {0.0f}; + float seg4Lim_ {0.0f}; + uint32_t nbrElSegments_ {0}; + float hNoiseLong_ {0.0f}; + float antNoiseTemp_ {0.0f}; + float hNoiseShort_ {0.0f}; + float hNoiseTolerance_ {0.0f}; + float minHDynRange_ {0.0f}; + bool genInstalled_ {false}; + bool genExercise_ {false}; + float vNoiseTolerance_ {0.0f}; + float minVDynRange_ {0.0f}; + float zdrOffsetDgradLim_ {0.0f}; + float baselineZdrOffset_ {0.0f}; + float vNoiseLong_ {0.0f}; + float vNoiseShort_ {0.0f}; + float zdrDataTover_ {0.0f}; + float phiDataTover_ {0.0f}; + float rhoDataTover_ {0.0f}; + float staloPowerDgradLimit_ {0.0f}; + float staloPowerMaintLimit_ {0.0f}; + float minHPwrSense_ {0.0f}; + float minVPwrSense_ {0.0f}; + float hPwrSenseOffset_ {0.0f}; + float vPwrSenseOffset_ {0.0f}; + float psGainRef_ {0.0f}; + float rfPalletBroadLoss_ {0.0f}; + float amePsTolerance_ {0.0f}; + float ameMaxTemp_ {0.0f}; + float ameMinTemp_ {0.0f}; + float rcvrModMaxTemp_ {0.0f}; + float rcvrModMinTemp_ {0.0f}; + float biteModMaxTemp_ {0.0f}; + float biteModMinTemp_ {0.0f}; + uint32_t defaultPolarization_ {0}; + float trLimitDgradLimit_ {0.0f}; + float trLimitFailLimit_ {0.0f}; + bool rfpStepperEnabled_ {false}; + float ameCurrentTolerance_ {0.0f}; + uint32_t hOnlyPolarization_ {0}; + uint32_t vOnlyPolarization_ {0}; + float sunBias_ {0.0f}; + float aMinShelterTempWarn_ {0.0f}; + float powerMeterZero_ {0.0f}; + float txbBaseline_ {0.0f}; + float txbAlarmThresh_ {0.0f}; }; RdaAdaptationData::RdaAdaptationData() : @@ -867,6 +710,16 @@ char RdaAdaptationData::slondir() const return p->slondir_; } +double RdaAdaptationData::dig_rcvr_clock_freq() const +{ + return p->digRcvrClockFreq_; +} + +double RdaAdaptationData::coho_freq() const +{ + return p->cohoFreq_; +} + float RdaAdaptationData::az_correction_factor() const { return p->azCorrectionFactor_; @@ -999,6 +852,31 @@ float RdaAdaptationData::el_inertia() const return p->elInertia_; } +float RdaAdaptationData::az_stow_angle() const +{ + return p->azStowAngle_; +} + +float RdaAdaptationData::el_stow_angle() const +{ + return p->elStowAngle_; +} + +float RdaAdaptationData::az_encoder_alignment() const +{ + return p->azEncoderAlignment_; +} + +float RdaAdaptationData::el_encoder_alignment() const +{ + return p->elEncoderAlignment_; +} + +std::string RdaAdaptationData::refined_park() const +{ + return p->refinedPark_; +} + uint32_t RdaAdaptationData::rvp8nv_iwaveguide_length() const { return p->rvp8nvIwaveguideLength_; @@ -1094,14 +972,14 @@ float RdaAdaptationData::min_v_dyn_range() const return p->minVDynRange_; } -float RdaAdaptationData::zdr_bias_dgrad_lim() const +float RdaAdaptationData::zdr_offset_dgrad_lim() const { - return p->zdrBiasDgradLim_; + return p->zdrOffsetDgradLim_; } -float RdaAdaptationData::baseline_zdr_bias() const +float RdaAdaptationData::baseline_zdr_offset() const { - return p->baselineZdrBias_; + return p->baselineZdrOffset_; } float RdaAdaptationData::v_noise_long() const @@ -1277,6 +1155,7 @@ bool RdaAdaptationData::Parse(std::istream& is) p->adapDate_.resize(12); p->adapTime_.resize(12); p->siteName_.resize(4); + p->refinedPark_.resize(4); is.read(&p->adapFileName_[0], 12); // 0-11 is.read(&p->adapFormat_[0], 4); // 12-15 @@ -1458,7 +1337,12 @@ bool RdaAdaptationData::Parse(std::istream& is) ReadChar(is, p->slatdir_); // 1316-1319 ReadChar(is, p->slondir_); // 1320-1323 - is.seekg(7036, std::ios_base::cur); // 1324-8359 + is.seekg(3824, std::ios_base::cur); // 1324-2499 + + is.read(reinterpret_cast(&p->digRcvrClockFreq_), 8); // 2500-2507 + is.read(reinterpret_cast(&p->cohoFreq_), 8); // 2508-2515 + + is.seekg(5844, std::ios_base::cur); // 2516-8359 is.read(reinterpret_cast(&p->azCorrectionFactor_), 4); // 8360-8363 is.read(reinterpret_cast(&p->elCorrectionFactor_), 4); // 8364-8367 @@ -1493,7 +1377,18 @@ bool RdaAdaptationData::Parse(std::istream& is) is.read(reinterpret_cast(&p->azIntertia_), 4); // 8456-8459 is.read(reinterpret_cast(&p->elInertia_), 4); // 8460-8463 - is.seekg(232, std::ios_base::cur); // 8464-8695 + is.seekg(32, std::ios_base::cur); // 8464-8495 + + is.read(reinterpret_cast(&p->azStowAngle_), 4); // 8496-8499 + is.read(reinterpret_cast(&p->elStowAngle_), 4); // 8500-8503 + is.read(reinterpret_cast(&p->azEncoderAlignment_), 4); // 8504-8507 + is.read(reinterpret_cast(&p->elEncoderAlignment_), 4); // 8508-8511 + + is.seekg(176, std::ios_base::cur); // 8512-8687 + + is.read(&p->refinedPark_[0], 4); // 8688-8691 + + is.seekg(4, std::ios_base::cur); // 8692-8695 is.read(reinterpret_cast(&p->rvp8nvIwaveguideLength_), 4); // 8696-8699 @@ -1522,8 +1417,8 @@ bool RdaAdaptationData::Parse(std::istream& is) ReadBoolean(is, p->genExercise_); // 8812-8815 is.read(reinterpret_cast(&p->vNoiseTolerance_), 4); // 8816-8819 is.read(reinterpret_cast(&p->minVDynRange_), 4); // 8820-8823 - is.read(reinterpret_cast(&p->zdrBiasDgradLim_), 4); // 8824-8827 - is.read(reinterpret_cast(&p->baselineZdrBias_), 4); // 8828-8831 + is.read(reinterpret_cast(&p->zdrOffsetDgradLim_), 4); // 8824-8827 + is.read(reinterpret_cast(&p->baselineZdrOffset_), 4); // 8828-8831 is.seekg(12, std::ios_base::cur); // 8832-8843 @@ -1658,6 +1553,8 @@ bool RdaAdaptationData::Parse(std::istream& is) p->slatmin_ = ntohl(p->slatmin_); p->slondeg_ = ntohl(p->slondeg_); p->slonmin_ = ntohl(p->slonmin_); + p->digRcvrClockFreq_ = SwapDouble(p->digRcvrClockFreq_); + p->cohoFreq_ = SwapDouble(p->cohoFreq_); p->azCorrectionFactor_ = SwapFloat(p->azCorrectionFactor_); p->elCorrectionFactor_ = SwapFloat(p->elCorrectionFactor_); p->antManualSetup_.ielmin_ = ntohl(p->antManualSetup_.ielmin_); @@ -1683,6 +1580,10 @@ bool RdaAdaptationData::Parse(std::istream& is) p->elOffNeutralDrive_ = SwapFloat(p->elOffNeutralDrive_); p->azIntertia_ = SwapFloat(p->azIntertia_); p->elInertia_ = SwapFloat(p->elInertia_); + p->azStowAngle_ = SwapFloat(p->azStowAngle_); + p->elStowAngle_ = SwapFloat(p->elStowAngle_); + p->azEncoderAlignment_ = SwapFloat(p->azEncoderAlignment_); + p->elEncoderAlignment_ = SwapFloat(p->elEncoderAlignment_); p->rvp8nvIwaveguideLength_ = ntohl(p->rvp8nvIwaveguideLength_); SwapArray(p->vRnscale_); @@ -1702,8 +1603,8 @@ bool RdaAdaptationData::Parse(std::istream& is) p->minHDynRange_ = SwapFloat(p->minHDynRange_); p->vNoiseTolerance_ = SwapFloat(p->vNoiseTolerance_); p->minVDynRange_ = SwapFloat(p->minVDynRange_); - p->zdrBiasDgradLim_ = SwapFloat(p->zdrBiasDgradLim_); - p->baselineZdrBias_ = SwapFloat(p->baselineZdrBias_); + p->zdrOffsetDgradLim_ = SwapFloat(p->zdrOffsetDgradLim_); + p->baselineZdrOffset_ = SwapFloat(p->baselineZdrOffset_); p->vNoiseLong_ = SwapFloat(p->vNoiseLong_); p->vNoiseShort_ = SwapFloat(p->vNoiseShort_); p->zdrDataTover_ = SwapFloat(p->zdrDataTover_); diff --git a/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp b/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp index ced8ff59..50ebd596 100644 --- a/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp +++ b/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp @@ -14,67 +14,39 @@ static const auto logger_ = util::Logger::Create(logPrefix_); class RdaStatusDataImpl { public: - explicit RdaStatusDataImpl() : - rdaStatus_ {0}, - operabilityStatus_ {0}, - controlStatus_ {0}, - auxiliaryPowerGeneratorState_ {0}, - averageTransmitterPower_ {0}, - horizontalReflectivityCalibrationCorrection_ {0}, - dataTransmissionEnabled_ {0}, - volumeCoveragePatternNumber_ {0}, - rdaControlAuthorization_ {0}, - rdaBuildNumber_ {0}, - operationalMode_ {0}, - superResolutionStatus_ {0}, - clutterMitigationDecisionStatus_ {0}, - avsetEbcRdaLogDataStatus_ {0}, - rdaAlarmSummary_ {0}, - commandAcknowledgement_ {0}, - channelControlStatus_ {0}, - spotBlankingStatus_ {0}, - bypassMapGenerationDate_ {0}, - bypassMapGenerationTime_ {0}, - clutterFilterMapGenerationDate_ {0}, - clutterFilterMapGenerationTime_ {0}, - verticalReflectivityCalibrationCorrection_ {0}, - transitionPowerSourceStatus_ {0}, - rmsControlStatus_ {0}, - performanceCheckStatus_ {0}, - alarmCodes_ {0}, - signalProcessingOptions_ {0}, - statusVersion_ {0} {}; - ~RdaStatusDataImpl() = default; + explicit RdaStatusDataImpl() = default; + ~RdaStatusDataImpl() = default; - uint16_t rdaStatus_; - uint16_t operabilityStatus_; - uint16_t controlStatus_; - uint16_t auxiliaryPowerGeneratorState_; - uint16_t averageTransmitterPower_; - int16_t horizontalReflectivityCalibrationCorrection_; - uint16_t dataTransmissionEnabled_; - uint16_t volumeCoveragePatternNumber_; - uint16_t rdaControlAuthorization_; - uint16_t rdaBuildNumber_; - uint16_t operationalMode_; - uint16_t superResolutionStatus_; - uint16_t clutterMitigationDecisionStatus_; - uint16_t avsetEbcRdaLogDataStatus_; - uint16_t rdaAlarmSummary_; - uint16_t commandAcknowledgement_; - uint16_t channelControlStatus_; - uint16_t spotBlankingStatus_; - uint16_t bypassMapGenerationDate_; - uint16_t bypassMapGenerationTime_; - uint16_t clutterFilterMapGenerationDate_; - uint16_t clutterFilterMapGenerationTime_; - int16_t verticalReflectivityCalibrationCorrection_; - uint16_t transitionPowerSourceStatus_; - uint16_t rmsControlStatus_; - uint16_t performanceCheckStatus_; - std::array alarmCodes_; - uint16_t signalProcessingOptions_; - uint16_t statusVersion_; + uint16_t rdaStatus_ {0}; + uint16_t operabilityStatus_ {0}; + uint16_t controlStatus_ {0}; + uint16_t auxiliaryPowerGeneratorState_ {0}; + uint16_t averageTransmitterPower_ {0}; + int16_t horizontalReflectivityCalibrationCorrection_ {0}; + uint16_t dataTransmissionEnabled_ {0}; + uint16_t volumeCoveragePatternNumber_ {0}; + uint16_t rdaControlAuthorization_ {0}; + uint16_t rdaBuildNumber_ {0}; + uint16_t operationalMode_ {0}; + uint16_t superResolutionStatus_ {0}; + uint16_t clutterMitigationDecisionStatus_ {0}; + uint16_t rdaScanAndDataFlags_ {0}; + uint16_t rdaAlarmSummary_ {0}; + uint16_t commandAcknowledgement_ {0}; + uint16_t channelControlStatus_ {0}; + uint16_t spotBlankingStatus_ {0}; + uint16_t bypassMapGenerationDate_ {0}; + uint16_t bypassMapGenerationTime_ {0}; + uint16_t clutterFilterMapGenerationDate_ {0}; + uint16_t clutterFilterMapGenerationTime_ {0}; + int16_t verticalReflectivityCalibrationCorrection_ {0}; + uint16_t transitionPowerSourceStatus_ {0}; + uint16_t rmsControlStatus_ {0}; + uint16_t performanceCheckStatus_ {0}; + std::array alarmCodes_ {0}; + uint16_t signalProcessingOptions_ {0}; + uint16_t downloadedPatternNumber_ {0}; + uint16_t statusVersion_ {0}; }; RdaStatusData::RdaStatusData() : @@ -83,7 +55,7 @@ RdaStatusData::RdaStatusData() : } RdaStatusData::~RdaStatusData() = default; -RdaStatusData::RdaStatusData(RdaStatusData&&) noexcept = default; +RdaStatusData::RdaStatusData(RdaStatusData&&) noexcept = default; RdaStatusData& RdaStatusData::operator=(RdaStatusData&&) noexcept = default; uint16_t RdaStatusData::rda_status() const @@ -151,9 +123,9 @@ uint16_t RdaStatusData::clutter_mitigation_decision_status() const return p->clutterMitigationDecisionStatus_; } -uint16_t RdaStatusData::avset_ebc_rda_log_data_status() const +uint16_t RdaStatusData::rda_scan_and_data_flags() const { - return p->avsetEbcRdaLogDataStatus_; + return p->rdaScanAndDataFlags_; } uint16_t RdaStatusData::rda_alarm_summary() const @@ -226,6 +198,11 @@ uint16_t RdaStatusData::signal_processing_options() const return p->signalProcessingOptions_; } +uint16_t RdaStatusData::downloaded_pattern_number() const +{ + return p->downloadedPatternNumber_; +} + uint16_t RdaStatusData::status_version() const { return p->statusVersion_; @@ -253,14 +230,14 @@ bool RdaStatusData::Parse(std::istream& is) is.read(reinterpret_cast(&p->operationalMode_), 2); // 11 is.read(reinterpret_cast(&p->superResolutionStatus_), 2); // 12 is.read(reinterpret_cast(&p->clutterMitigationDecisionStatus_), - 2); // 13 - is.read(reinterpret_cast(&p->avsetEbcRdaLogDataStatus_), 2); // 14 - is.read(reinterpret_cast(&p->rdaAlarmSummary_), 2); // 15 - is.read(reinterpret_cast(&p->commandAcknowledgement_), 2); // 16 - is.read(reinterpret_cast(&p->channelControlStatus_), 2); // 17 - is.read(reinterpret_cast(&p->spotBlankingStatus_), 2); // 18 - is.read(reinterpret_cast(&p->bypassMapGenerationDate_), 2); // 19 - is.read(reinterpret_cast(&p->bypassMapGenerationTime_), 2); // 20 + 2); // 13 + is.read(reinterpret_cast(&p->rdaScanAndDataFlags_), 2); // 14 + is.read(reinterpret_cast(&p->rdaAlarmSummary_), 2); // 15 + is.read(reinterpret_cast(&p->commandAcknowledgement_), 2); // 16 + is.read(reinterpret_cast(&p->channelControlStatus_), 2); // 17 + is.read(reinterpret_cast(&p->spotBlankingStatus_), 2); // 18 + is.read(reinterpret_cast(&p->bypassMapGenerationDate_), 2); // 19 + is.read(reinterpret_cast(&p->bypassMapGenerationTime_), 2); // 20 is.read(reinterpret_cast(&p->clutterFilterMapGenerationDate_), 2); // 21 is.read(reinterpret_cast(&p->clutterFilterMapGenerationTime_), @@ -290,13 +267,13 @@ bool RdaStatusData::Parse(std::istream& is) p->superResolutionStatus_ = ntohs(p->superResolutionStatus_); p->clutterMitigationDecisionStatus_ = ntohs(p->clutterMitigationDecisionStatus_); - p->avsetEbcRdaLogDataStatus_ = ntohs(p->avsetEbcRdaLogDataStatus_); - p->rdaAlarmSummary_ = ntohs(p->rdaAlarmSummary_); - p->commandAcknowledgement_ = ntohs(p->commandAcknowledgement_); - p->channelControlStatus_ = ntohs(p->channelControlStatus_); - p->spotBlankingStatus_ = ntohs(p->spotBlankingStatus_); - p->bypassMapGenerationDate_ = ntohs(p->bypassMapGenerationDate_); - p->bypassMapGenerationTime_ = ntohs(p->bypassMapGenerationTime_); + p->rdaScanAndDataFlags_ = ntohs(p->rdaScanAndDataFlags_); + p->rdaAlarmSummary_ = ntohs(p->rdaAlarmSummary_); + p->commandAcknowledgement_ = ntohs(p->commandAcknowledgement_); + p->channelControlStatus_ = ntohs(p->channelControlStatus_); + p->spotBlankingStatus_ = ntohs(p->spotBlankingStatus_); + p->bypassMapGenerationDate_ = ntohs(p->bypassMapGenerationDate_); + p->bypassMapGenerationTime_ = ntohs(p->bypassMapGenerationTime_); p->clutterFilterMapGenerationDate_ = ntohs(p->clutterFilterMapGenerationDate_); p->clutterFilterMapGenerationTime_ = @@ -312,8 +289,9 @@ bool RdaStatusData::Parse(std::istream& is) 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 + is.seekg(34, std::ios_base::cur); // 42-58 + is.read(reinterpret_cast(&p->downloadedPatternNumber_), 2); // 59 + is.read(reinterpret_cast(&p->statusVersion_), 2); // 60 bytesRead += 40; p->signalProcessingOptions_ = ntohs(p->signalProcessingOptions_); From fd6c224fc2bed617b92971cb4564f7cb82454d31 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Mon, 12 May 2025 23:24:49 -0500 Subject: [PATCH 02/13] Modified RDA message clang-tidy cleanup --- wxdata/include/scwx/awips/message.hpp | 12 +- .../wsr88d/rda/digital_radar_data_generic.hpp | 88 +- .../rda/performance_maintenance_data.hpp | 508 +++++----- .../scwx/wsr88d/rda/rda_adaptation_data.hpp | 385 ++++---- .../scwx/wsr88d/rda/rda_status_data.hpp | 77 +- wxdata/source/scwx/awips/message.cpp | 15 +- .../wsr88d/rda/digital_radar_data_generic.cpp | 141 ++- .../rda/performance_maintenance_data.cpp | 906 +++++++++--------- .../scwx/wsr88d/rda/rda_adaptation_data.cpp | 372 +++---- .../scwx/wsr88d/rda/rda_status_data.cpp | 171 ++-- 10 files changed, 1365 insertions(+), 1310 deletions(-) diff --git a/wxdata/include/scwx/awips/message.hpp b/wxdata/include/scwx/awips/message.hpp index 4f2388d0..f13a2a90 100644 --- a/wxdata/include/scwx/awips/message.hpp +++ b/wxdata/include/scwx/awips/message.hpp @@ -13,12 +13,8 @@ # include #endif -namespace scwx +namespace scwx::awips { -namespace awips -{ - -class MessageImpl; class Message { @@ -135,8 +131,8 @@ public: } private: - std::unique_ptr p; + class Impl; + std::unique_ptr p; }; -} // namespace awips -} // namespace scwx +} // namespace scwx::awips diff --git a/wxdata/include/scwx/wsr88d/rda/digital_radar_data_generic.hpp b/wxdata/include/scwx/wsr88d/rda/digital_radar_data_generic.hpp index ba911898..07f3c111 100644 --- a/wxdata/include/scwx/wsr88d/rda/digital_radar_data_generic.hpp +++ b/wxdata/include/scwx/wsr88d/rda/digital_radar_data_generic.hpp @@ -2,11 +2,7 @@ #include -namespace scwx -{ -namespace wsr88d -{ -namespace rda +namespace scwx::wsr88d::rda { class DigitalRadarDataGeneric : public GenericRadarData @@ -27,30 +23,31 @@ public: DigitalRadarDataGeneric(DigitalRadarDataGeneric&&) noexcept; DigitalRadarDataGeneric& operator=(DigitalRadarDataGeneric&&) noexcept; - std::string radar_identifier() const; - std::uint32_t collection_time() const; - std::uint16_t modified_julian_date() const; - std::uint16_t azimuth_number() const; - units::degrees azimuth_angle() const; - std::uint8_t compression_indicator() const; - std::uint16_t radial_length() const; - std::uint8_t azimuth_resolution_spacing() const; - std::uint8_t radial_status() const; - std::uint16_t elevation_number() const; - std::uint8_t cut_sector_number() const; - units::degrees elevation_angle() const; - std::uint8_t radial_spot_blanking_status() const; - std::uint8_t azimuth_indexing_mode() const; - std::uint16_t data_block_count() const; - std::uint16_t volume_coverage_pattern_number() const; + [[nodiscard]] std::string radar_identifier() const; + [[nodiscard]] std::uint32_t collection_time() const override; + [[nodiscard]] std::uint16_t modified_julian_date() const override; + [[nodiscard]] std::uint16_t azimuth_number() const override; + [[nodiscard]] units::degrees azimuth_angle() const override; + [[nodiscard]] std::uint8_t compression_indicator() const; + [[nodiscard]] std::uint16_t radial_length() const; + [[nodiscard]] std::uint8_t azimuth_resolution_spacing() const; + [[nodiscard]] std::uint8_t radial_status() const; + [[nodiscard]] std::uint16_t elevation_number() const override; + [[nodiscard]] std::uint8_t cut_sector_number() const; + [[nodiscard]] units::degrees elevation_angle() const; + [[nodiscard]] std::uint8_t radial_spot_blanking_status() const; + [[nodiscard]] std::uint8_t azimuth_indexing_mode() const; + [[nodiscard]] std::uint16_t data_block_count() const; + [[nodiscard]] std::uint16_t volume_coverage_pattern_number() const override; - std::shared_ptr elevation_data_block() const; - std::shared_ptr radial_data_block() const; - std::shared_ptr volume_data_block() const; - std::shared_ptr - moment_data_block(DataBlockType type) const; + [[nodiscard]] std::shared_ptr + elevation_data_block() const; + [[nodiscard]] std::shared_ptr radial_data_block() const; + [[nodiscard]] std::shared_ptr volume_data_block() const; + [[nodiscard]] std::shared_ptr + moment_data_block(DataBlockType type) const override; - bool Parse(std::istream& is); + bool Parse(std::istream& is) override; static std::shared_ptr Create(Level2MessageHeader&& header, std::istream& is); @@ -65,11 +62,14 @@ class DigitalRadarDataGeneric::DataBlock protected: explicit DataBlock(const std::string& dataBlockType, const std::string& dataName); + +public: virtual ~DataBlock(); DataBlock(const DataBlock&) = delete; DataBlock& operator=(const DataBlock&) = delete; +protected: DataBlock(DataBlock&&) noexcept; DataBlock& operator=(DataBlock&&) noexcept; @@ -118,17 +118,17 @@ public: MomentDataBlock(MomentDataBlock&&) noexcept; MomentDataBlock& operator=(MomentDataBlock&&) noexcept; - std::uint16_t number_of_data_moment_gates() const; - units::kilometers data_moment_range() const; - std::int16_t data_moment_range_raw() const; - units::kilometers data_moment_range_sample_interval() const; - std::uint16_t data_moment_range_sample_interval_raw() const; - float snr_threshold() const; - std::int16_t snr_threshold_raw() const; - std::uint8_t data_word_size() const; - float scale() const; - float offset() const; - const void* data_moments() const; + [[nodiscard]] std::uint16_t number_of_data_moment_gates() const override; + [[nodiscard]] units::kilometers data_moment_range() const override; + [[nodiscard]] std::int16_t data_moment_range_raw() const override; + [[nodiscard]] units::kilometers data_moment_range_sample_interval() const override; + [[nodiscard]] std::uint16_t data_moment_range_sample_interval_raw() const override; + [[nodiscard]] float snr_threshold() const; + [[nodiscard]] std::int16_t snr_threshold_raw() const override; + [[nodiscard]] std::uint8_t data_word_size() const override; + [[nodiscard]] float scale() const override; + [[nodiscard]] float offset() const override; + [[nodiscard]] const void* data_moments() const override; static std::shared_ptr Create(const std::string& dataBlockType, @@ -155,7 +155,7 @@ public: RadialDataBlock(RadialDataBlock&&) noexcept; RadialDataBlock& operator=(RadialDataBlock&&) noexcept; - float unambiguous_range() const; + [[nodiscard]] float unambiguous_range() const; static std::shared_ptr Create(const std::string& dataBlockType, @@ -182,9 +182,9 @@ public: VolumeDataBlock(VolumeDataBlock&&) noexcept; VolumeDataBlock& operator=(VolumeDataBlock&&) noexcept; - float latitude() const; - float longitude() const; - std::uint16_t volume_coverage_pattern_number() const; + [[nodiscard]] float latitude() const; + [[nodiscard]] float longitude() const; + [[nodiscard]] std::uint16_t volume_coverage_pattern_number() const; static std::shared_ptr Create(const std::string& dataBlockType, @@ -198,6 +198,4 @@ private: bool Parse(std::istream& is); }; -} // namespace rda -} // namespace wsr88d -} // namespace scwx +} // namespace scwx::wsr88d::rda diff --git a/wxdata/include/scwx/wsr88d/rda/performance_maintenance_data.hpp b/wxdata/include/scwx/wsr88d/rda/performance_maintenance_data.hpp index c362af78..c1bf3869 100644 --- a/wxdata/include/scwx/wsr88d/rda/performance_maintenance_data.hpp +++ b/wxdata/include/scwx/wsr88d/rda/performance_maintenance_data.hpp @@ -2,14 +2,8 @@ #include -namespace scwx +namespace scwx::wsr88d::rda { -namespace wsr88d -{ -namespace rda -{ - -class PerformanceMaintenanceDataImpl; class PerformanceMaintenanceData : public Level2Message { @@ -24,261 +18,261 @@ public: PerformanceMaintenanceData(PerformanceMaintenanceData&&) noexcept; PerformanceMaintenanceData& operator=(PerformanceMaintenanceData&&) noexcept; - uint16_t loop_back_set_status() const; - uint32_t t1_output_frames() const; - uint32_t t1_input_frames() const; - uint32_t router_memory_used() const; - uint32_t router_memory_free() const; - uint16_t router_memory_utilization() const; - uint16_t route_to_rpg() const; - uint16_t t1_port_status() const; - uint16_t router_dedicated_ethernet_port_status() const; - uint16_t router_commercial_ethernet_port_status() const; - uint32_t csu_24hr_errored_seconds() const; - uint32_t csu_24hr_severely_errored_seconds() const; - uint32_t csu_24hr_severely_errored_framing_seconds() const; - uint32_t csu_24hr_unavailable_seconds() const; - uint32_t csu_24hr_controlled_slip_seconds() const; - uint32_t csu_24hr_path_coding_violations() const; - uint32_t csu_24hr_line_errored_seconds() const; - uint32_t csu_24hr_bursty_errored_seconds() const; - uint32_t csu_24hr_degraded_minutes() const; - uint32_t lan_switch_cpu_utilization() const; - uint16_t lan_switch_memory_utilization() const; - uint16_t ifdr_chasis_temperature() const; - uint16_t ifdr_fpga_temperature() const; - uint16_t ntp_status() const; - uint16_t ipc_status() const; - uint16_t commanded_channel_control() const; - uint16_t polarization() const; - float ame_internal_temperature() const; - float ame_receiver_module_temperature() const; - float ame_bite_cal_module_temperature() const; - uint16_t ame_peltier_pulse_width_modulation() const; - uint16_t ame_peltier_status() const; - uint16_t ame_a_d_converter_status() const; - uint16_t ame_state() const; - float ame_3_3v_ps_voltage() const; - float ame_5v_ps_voltage() const; - float ame_6_5v_ps_voltage() const; - float ame_15v_ps_voltage() const; - float ame_48v_ps_voltage() const; - float ame_stalo_power() const; - float peltier_current() const; - float adc_calibration_reference_voltage() const; - uint16_t ame_mode() const; - uint16_t ame_peltier_mode() const; - float ame_peltier_inside_fan_current() const; - float ame_peltier_outside_fan_current() const; - float horizontal_tr_limiter_voltage() const; - float vertical_tr_limiter_voltage() const; - float adc_calibration_offset_voltage() const; - float adc_calibration_gain_correction() const; - uint16_t rcp_status() const; - std::string rcp_string() const; - uint16_t spip_power_buttons() const; - float master_power_administrator_load() const; - float expansion_power_administrator_load() const; - uint16_t _5vdc_ps() const; - uint16_t _15vdc_ps() const; - uint16_t _28vdc_ps() const; - uint16_t neg_15vdc_ps() const; - uint16_t _45vdc_ps() const; - uint16_t filament_ps_voltage() const; - uint16_t vacuum_pump_ps_voltage() const; - uint16_t focus_coil_ps_voltage() const; - uint16_t filament_ps() const; - uint16_t klystron_warmup() const; - uint16_t transmitter_available() const; - uint16_t wg_switch_position() const; - uint16_t wg_pfn_transfer_interlock() const; - uint16_t maintenance_mode() const; - uint16_t maintenance_required() const; - uint16_t pfn_switch_position() const; - uint16_t modulator_overload() const; - uint16_t modulator_inv_current() const; - uint16_t modulator_switch_fail() const; - uint16_t main_power_voltage() const; - uint16_t charging_system_fail() const; - uint16_t inverse_diode_current() const; - uint16_t trigger_amplifier() const; - uint16_t circulator_temperature() const; - uint16_t spectrum_filter_pressure() const; - uint16_t wg_arc_vswr() const; - uint16_t cabinet_interlock() const; - uint16_t cabinet_air_temperature() const; - uint16_t cabinet_airflow() const; - uint16_t klystron_current() const; - uint16_t klystron_filament_current() const; - uint16_t klystron_vacion_current() const; - uint16_t klystron_air_temperature() const; - uint16_t klystron_airflow() const; - uint16_t modulator_switch_maintenance() const; - uint16_t post_charge_regulator_maintenance() const; - uint16_t wg_pressure_humidity() const; - uint16_t transmitter_overvoltage() const; - uint16_t transmitter_overcurrent() const; - uint16_t focus_coil_current() const; - uint16_t focus_coil_airflow() const; - uint16_t oil_temperature() const; - uint16_t prf_limit() const; - uint16_t transmitter_oil_level() const; - uint16_t transmitter_battery_charging() const; - uint16_t high_voltage_status() const; - uint16_t transmitter_recycling_summary() const; - uint16_t transmitter_inoperable() const; - uint16_t transmitter_air_filter() const; - uint16_t zero_test_bit(unsigned i) const; - uint16_t one_test_bit(unsigned i) const; - uint16_t xmtr_spip_interface() const; - uint16_t transmitter_summary_status() const; - float transmitter_rf_power() const; - float horizontal_xmtr_peak_power() const; - float xmtr_peak_power() const; - float vertical_xmtr_peak_power() const; - float xmtr_rf_avg_power() const; - uint32_t xmtr_recycle_count() const; - float receiver_bias() const; - float transmit_imbalance() const; - float xmtr_power_meter_zero() const; - uint16_t ac_unit1_compressor_shut_off() const; - uint16_t ac_unit2_compressor_shut_off() const; - uint16_t generator_maintenance_required() const; - uint16_t generator_battery_voltage() const; - uint16_t generator_engine() const; - uint16_t generator_volt_frequency() const; - uint16_t power_source() const; - uint16_t transitional_power_source() const; - uint16_t generator_auto_run_off_switch() const; - uint16_t aircraft_hazard_lighting() const; - uint16_t equipment_shelter_fire_detection_system() const; - uint16_t equipment_shelter_fire_smoke() const; - uint16_t generator_shelter_fire_smoke() const; - uint16_t utility_voltage_frequency() const; - uint16_t site_security_alarm() const; - uint16_t security_equipment() const; - uint16_t security_system() const; - uint16_t receiver_connected_to_antenna() const; - uint16_t radome_hatch() const; - uint16_t ac_unit1_filter_dirty() const; - uint16_t ac_unit2_filter_dirty() const; - float equipment_shelter_temperature() const; - float outside_ambient_temperature() const; - float transmitter_leaving_air_temp() const; - float ac_unit1_discharge_air_temp() const; - float generator_shelter_temperature() const; - float radome_air_temperature() const; - float ac_unit2_discharge_air_temp() const; - float spip_15v_ps() const; - float spip_neg_15v_ps() const; - uint16_t spip_28v_ps_status() const; - float spip_5v_ps() const; - uint16_t converted_generator_fuel_level() const; - uint16_t elevation_pos_dead_limit() const; - uint16_t _150v_overvoltage() const; - uint16_t _150v_undervoltage() const; - uint16_t elevation_servo_amp_inhibit() const; - uint16_t elevation_servo_amp_short_circuit() const; - uint16_t elevation_servo_amp_overtemp() const; - uint16_t elevation_motor_overtemp() const; - uint16_t elevation_stow_pin() const; - uint16_t elevation_housing_5v_ps() const; - uint16_t elevation_neg_dead_limit() const; - uint16_t elevation_pos_normal_limit() const; - uint16_t elevation_neg_normal_limit() const; - uint16_t elevation_encoder_light() const; - uint16_t elevation_gearbox_oil() const; - uint16_t elevation_handwheel() const; - uint16_t elevation_amp_ps() const; - uint16_t azimuth_servo_amp_inhibit() const; - uint16_t azimuth_servo_amp_short_circuit() const; - uint16_t azimuth_servo_amp_overtemp() const; - uint16_t azimuth_motor_overtemp() const; - uint16_t azimuth_stow_pin() const; - uint16_t azimuth_housing_5v_ps() const; - uint16_t azimuth_encoder_light() const; - uint16_t azimuth_gearbox_oil() const; - uint16_t azimuth_bull_gear_oil() const; - uint16_t azimuth_handwheel() const; - uint16_t azimuth_servo_amp_ps() const; - uint16_t servo() const; - uint16_t pedestal_interlock_switch() const; - uint16_t coho_clock() const; - uint16_t rf_generator_frequency_select_oscillator() const; - uint16_t rf_generator_rf_stalo() const; - uint16_t rf_generator_phase_shifted_coho() const; - uint16_t _9v_receiver_ps() const; - uint16_t _5v_receiver_ps() const; - uint16_t _18v_receiver_ps() const; - uint16_t neg_9v_receiver_ps() const; - uint16_t _5v_single_channel_rdaiu_ps() const; - float horizontal_short_pulse_noise() const; - float horizontal_long_pulse_noise() const; - float horizontal_noise_temperature() const; - float vertical_short_pulse_noise() const; - float vertical_long_pulse_noise() const; - float vertical_noise_temperature() const; - float horizontal_linearity() const; - float horizontal_dynamic_range() const; - float horizontal_delta_dbz0() const; - float vertical_delta_dbz0() const; - float kd_peak_measured() const; - float short_pulse_horizontal_dbz0() const; - float long_pulse_horizontal_dbz0() const; - uint16_t velocity_processed() const; - uint16_t width_processed() const; - uint16_t velocity_rf_gen() const; - uint16_t width_rf_gen() const; - float horizontal_i0() const; - float vertical_i0() const; - float vertical_dynamic_range() const; - float short_pulse_vertical_dbz0() const; - float long_pulse_vertical_dbz0() const; - float horizontal_power_sense() const; - float vertical_power_sense() const; - float zdr_offset() const; - float clutter_suppression_delta() const; - float clutter_suppression_unfiltered_power() const; - float clutter_suppression_filtered_power() const; - float vertical_linearity() const; - uint16_t state_file_read_status() const; - uint16_t state_file_write_status() const; - uint16_t bypass_map_file_read_status() const; - uint16_t bypass_map_file_write_status() const; - uint16_t current_adaptation_file_read_status() const; - uint16_t current_adaptation_file_write_status() const; - uint16_t censor_zone_file_read_status() const; - uint16_t censor_zone_file_write_status() const; - uint16_t remote_vcp_file_read_status() const; - uint16_t remote_vcp_file_write_status() const; - uint16_t baseline_adaptation_file_read_status() const; - uint16_t read_status_of_prf_sets() const; - uint16_t clutter_filter_map_file_read_status() const; - uint16_t clutter_filter_map_file_write_status() const; - uint16_t general_disk_io_error() const; - uint8_t rsp_status() const; - uint8_t cpu1_temperature() const; - uint8_t cpu2_temperature() const; - uint16_t rsp_motherboard_power() const; - uint16_t spip_comm_status() const; - uint16_t hci_comm_status() const; - uint16_t signal_processor_command_status() const; - uint16_t ame_communication_status() const; - uint16_t rms_link_status() const; - uint16_t rpg_link_status() const; - uint16_t interpanel_link_status() const; - uint32_t performance_check_time() const; - uint16_t version() const; + [[nodiscard]] std::uint16_t loop_back_set_status() const; + [[nodiscard]] std::uint32_t t1_output_frames() const; + [[nodiscard]] std::uint32_t t1_input_frames() const; + [[nodiscard]] std::uint32_t router_memory_used() const; + [[nodiscard]] std::uint32_t router_memory_free() const; + [[nodiscard]] std::uint16_t router_memory_utilization() const; + [[nodiscard]] std::uint16_t route_to_rpg() const; + [[nodiscard]] std::uint16_t t1_port_status() const; + [[nodiscard]] std::uint16_t router_dedicated_ethernet_port_status() const; + [[nodiscard]] std::uint16_t router_commercial_ethernet_port_status() const; + [[nodiscard]] std::uint32_t csu_24hr_errored_seconds() const; + [[nodiscard]] std::uint32_t csu_24hr_severely_errored_seconds() const; + [[nodiscard]] std::uint32_t + csu_24hr_severely_errored_framing_seconds() const; + [[nodiscard]] std::uint32_t csu_24hr_unavailable_seconds() const; + [[nodiscard]] std::uint32_t csu_24hr_controlled_slip_seconds() const; + [[nodiscard]] std::uint32_t csu_24hr_path_coding_violations() const; + [[nodiscard]] std::uint32_t csu_24hr_line_errored_seconds() const; + [[nodiscard]] std::uint32_t csu_24hr_bursty_errored_seconds() const; + [[nodiscard]] std::uint32_t csu_24hr_degraded_minutes() const; + [[nodiscard]] std::uint32_t lan_switch_cpu_utilization() const; + [[nodiscard]] std::uint16_t lan_switch_memory_utilization() const; + [[nodiscard]] std::uint16_t ifdr_chasis_temperature() const; + [[nodiscard]] std::uint16_t ifdr_fpga_temperature() const; + [[nodiscard]] std::uint16_t ntp_status() const; + [[nodiscard]] std::uint16_t ipc_status() const; + [[nodiscard]] std::uint16_t commanded_channel_control() const; + [[nodiscard]] std::uint16_t polarization() const; + [[nodiscard]] float ame_internal_temperature() const; + [[nodiscard]] float ame_receiver_module_temperature() const; + [[nodiscard]] float ame_bite_cal_module_temperature() const; + [[nodiscard]] std::uint16_t ame_peltier_pulse_width_modulation() const; + [[nodiscard]] std::uint16_t ame_peltier_status() const; + [[nodiscard]] std::uint16_t ame_a_d_converter_status() const; + [[nodiscard]] std::uint16_t ame_state() const; + [[nodiscard]] float ame_3_3v_ps_voltage() const; + [[nodiscard]] float ame_5v_ps_voltage() const; + [[nodiscard]] float ame_6_5v_ps_voltage() const; + [[nodiscard]] float ame_15v_ps_voltage() const; + [[nodiscard]] float ame_48v_ps_voltage() const; + [[nodiscard]] float ame_stalo_power() const; + [[nodiscard]] float peltier_current() const; + [[nodiscard]] float adc_calibration_reference_voltage() const; + [[nodiscard]] std::uint16_t ame_mode() const; + [[nodiscard]] std::uint16_t ame_peltier_mode() const; + [[nodiscard]] float ame_peltier_inside_fan_current() const; + [[nodiscard]] float ame_peltier_outside_fan_current() const; + [[nodiscard]] float horizontal_tr_limiter_voltage() const; + [[nodiscard]] float vertical_tr_limiter_voltage() const; + [[nodiscard]] float adc_calibration_offset_voltage() const; + [[nodiscard]] float adc_calibration_gain_correction() const; + [[nodiscard]] std::uint16_t rcp_status() const; + [[nodiscard]] std::string rcp_string() const; + [[nodiscard]] std::uint16_t spip_power_buttons() const; + [[nodiscard]] float master_power_administrator_load() const; + [[nodiscard]] float expansion_power_administrator_load() const; + [[nodiscard]] std::uint16_t _5vdc_ps() const; + [[nodiscard]] std::uint16_t _15vdc_ps() const; + [[nodiscard]] std::uint16_t _28vdc_ps() const; + [[nodiscard]] std::uint16_t neg_15vdc_ps() const; + [[nodiscard]] std::uint16_t _45vdc_ps() const; + [[nodiscard]] std::uint16_t filament_ps_voltage() const; + [[nodiscard]] std::uint16_t vacuum_pump_ps_voltage() const; + [[nodiscard]] std::uint16_t focus_coil_ps_voltage() const; + [[nodiscard]] std::uint16_t filament_ps() const; + [[nodiscard]] std::uint16_t klystron_warmup() const; + [[nodiscard]] std::uint16_t transmitter_available() const; + [[nodiscard]] std::uint16_t wg_switch_position() const; + [[nodiscard]] std::uint16_t wg_pfn_transfer_interlock() const; + [[nodiscard]] std::uint16_t maintenance_mode() const; + [[nodiscard]] std::uint16_t maintenance_required() const; + [[nodiscard]] std::uint16_t pfn_switch_position() const; + [[nodiscard]] std::uint16_t modulator_overload() const; + [[nodiscard]] std::uint16_t modulator_inv_current() const; + [[nodiscard]] std::uint16_t modulator_switch_fail() const; + [[nodiscard]] std::uint16_t main_power_voltage() const; + [[nodiscard]] std::uint16_t charging_system_fail() const; + [[nodiscard]] std::uint16_t inverse_diode_current() const; + [[nodiscard]] std::uint16_t trigger_amplifier() const; + [[nodiscard]] std::uint16_t circulator_temperature() const; + [[nodiscard]] std::uint16_t spectrum_filter_pressure() const; + [[nodiscard]] std::uint16_t wg_arc_vswr() const; + [[nodiscard]] std::uint16_t cabinet_interlock() const; + [[nodiscard]] std::uint16_t cabinet_air_temperature() const; + [[nodiscard]] std::uint16_t cabinet_airflow() const; + [[nodiscard]] std::uint16_t klystron_current() const; + [[nodiscard]] std::uint16_t klystron_filament_current() const; + [[nodiscard]] std::uint16_t klystron_vacion_current() const; + [[nodiscard]] std::uint16_t klystron_air_temperature() const; + [[nodiscard]] std::uint16_t klystron_airflow() const; + [[nodiscard]] std::uint16_t modulator_switch_maintenance() const; + [[nodiscard]] std::uint16_t post_charge_regulator_maintenance() const; + [[nodiscard]] std::uint16_t wg_pressure_humidity() const; + [[nodiscard]] std::uint16_t transmitter_overvoltage() const; + [[nodiscard]] std::uint16_t transmitter_overcurrent() const; + [[nodiscard]] std::uint16_t focus_coil_current() const; + [[nodiscard]] std::uint16_t focus_coil_airflow() const; + [[nodiscard]] std::uint16_t oil_temperature() const; + [[nodiscard]] std::uint16_t prf_limit() const; + [[nodiscard]] std::uint16_t transmitter_oil_level() const; + [[nodiscard]] std::uint16_t transmitter_battery_charging() const; + [[nodiscard]] std::uint16_t high_voltage_status() const; + [[nodiscard]] std::uint16_t transmitter_recycling_summary() const; + [[nodiscard]] std::uint16_t transmitter_inoperable() const; + [[nodiscard]] std::uint16_t transmitter_air_filter() const; + [[nodiscard]] std::uint16_t zero_test_bit(unsigned i) const; + [[nodiscard]] std::uint16_t one_test_bit(unsigned i) const; + [[nodiscard]] std::uint16_t xmtr_spip_interface() const; + [[nodiscard]] std::uint16_t transmitter_summary_status() const; + [[nodiscard]] float transmitter_rf_power() const; + [[nodiscard]] float horizontal_xmtr_peak_power() const; + [[nodiscard]] float xmtr_peak_power() const; + [[nodiscard]] float vertical_xmtr_peak_power() const; + [[nodiscard]] float xmtr_rf_avg_power() const; + [[nodiscard]] std::uint32_t xmtr_recycle_count() const; + [[nodiscard]] float receiver_bias() const; + [[nodiscard]] float transmit_imbalance() const; + [[nodiscard]] float xmtr_power_meter_zero() const; + [[nodiscard]] std::uint16_t ac_unit1_compressor_shut_off() const; + [[nodiscard]] std::uint16_t ac_unit2_compressor_shut_off() const; + [[nodiscard]] std::uint16_t generator_maintenance_required() const; + [[nodiscard]] std::uint16_t generator_battery_voltage() const; + [[nodiscard]] std::uint16_t generator_engine() const; + [[nodiscard]] std::uint16_t generator_volt_frequency() const; + [[nodiscard]] std::uint16_t power_source() const; + [[nodiscard]] std::uint16_t transitional_power_source() const; + [[nodiscard]] std::uint16_t generator_auto_run_off_switch() const; + [[nodiscard]] std::uint16_t aircraft_hazard_lighting() const; + [[nodiscard]] std::uint16_t equipment_shelter_fire_detection_system() const; + [[nodiscard]] std::uint16_t equipment_shelter_fire_smoke() const; + [[nodiscard]] std::uint16_t generator_shelter_fire_smoke() const; + [[nodiscard]] std::uint16_t utility_voltage_frequency() const; + [[nodiscard]] std::uint16_t site_security_alarm() const; + [[nodiscard]] std::uint16_t security_equipment() const; + [[nodiscard]] std::uint16_t security_system() const; + [[nodiscard]] std::uint16_t receiver_connected_to_antenna() const; + [[nodiscard]] std::uint16_t radome_hatch() const; + [[nodiscard]] std::uint16_t ac_unit1_filter_dirty() const; + [[nodiscard]] std::uint16_t ac_unit2_filter_dirty() const; + [[nodiscard]] float equipment_shelter_temperature() const; + [[nodiscard]] float outside_ambient_temperature() const; + [[nodiscard]] float transmitter_leaving_air_temp() const; + [[nodiscard]] float ac_unit1_discharge_air_temp() const; + [[nodiscard]] float generator_shelter_temperature() const; + [[nodiscard]] float radome_air_temperature() const; + [[nodiscard]] float ac_unit2_discharge_air_temp() const; + [[nodiscard]] float spip_15v_ps() const; + [[nodiscard]] float spip_neg_15v_ps() const; + [[nodiscard]] std::uint16_t spip_28v_ps_status() const; + [[nodiscard]] float spip_5v_ps() const; + [[nodiscard]] std::uint16_t converted_generator_fuel_level() const; + [[nodiscard]] std::uint16_t elevation_pos_dead_limit() const; + [[nodiscard]] std::uint16_t _150v_overvoltage() const; + [[nodiscard]] std::uint16_t _150v_undervoltage() const; + [[nodiscard]] std::uint16_t elevation_servo_amp_inhibit() const; + [[nodiscard]] std::uint16_t elevation_servo_amp_short_circuit() const; + [[nodiscard]] std::uint16_t elevation_servo_amp_overtemp() const; + [[nodiscard]] std::uint16_t elevation_motor_overtemp() const; + [[nodiscard]] std::uint16_t elevation_stow_pin() const; + [[nodiscard]] std::uint16_t elevation_housing_5v_ps() const; + [[nodiscard]] std::uint16_t elevation_neg_dead_limit() const; + [[nodiscard]] std::uint16_t elevation_pos_normal_limit() const; + [[nodiscard]] std::uint16_t elevation_neg_normal_limit() const; + [[nodiscard]] std::uint16_t elevation_encoder_light() const; + [[nodiscard]] std::uint16_t elevation_gearbox_oil() const; + [[nodiscard]] std::uint16_t elevation_handwheel() const; + [[nodiscard]] std::uint16_t elevation_amp_ps() const; + [[nodiscard]] std::uint16_t azimuth_servo_amp_inhibit() const; + [[nodiscard]] std::uint16_t azimuth_servo_amp_short_circuit() const; + [[nodiscard]] std::uint16_t azimuth_servo_amp_overtemp() const; + [[nodiscard]] std::uint16_t azimuth_motor_overtemp() const; + [[nodiscard]] std::uint16_t azimuth_stow_pin() const; + [[nodiscard]] std::uint16_t azimuth_housing_5v_ps() const; + [[nodiscard]] std::uint16_t azimuth_encoder_light() const; + [[nodiscard]] std::uint16_t azimuth_gearbox_oil() const; + [[nodiscard]] std::uint16_t azimuth_bull_gear_oil() const; + [[nodiscard]] std::uint16_t azimuth_handwheel() const; + [[nodiscard]] std::uint16_t azimuth_servo_amp_ps() const; + [[nodiscard]] std::uint16_t servo() const; + [[nodiscard]] std::uint16_t pedestal_interlock_switch() const; + [[nodiscard]] std::uint16_t coho_clock() const; + [[nodiscard]] std::uint16_t rf_generator_frequency_select_oscillator() const; + [[nodiscard]] std::uint16_t rf_generator_rf_stalo() const; + [[nodiscard]] std::uint16_t rf_generator_phase_shifted_coho() const; + [[nodiscard]] std::uint16_t _9v_receiver_ps() const; + [[nodiscard]] std::uint16_t _5v_receiver_ps() const; + [[nodiscard]] std::uint16_t _18v_receiver_ps() const; + [[nodiscard]] std::uint16_t neg_9v_receiver_ps() const; + [[nodiscard]] std::uint16_t _5v_single_channel_rdaiu_ps() const; + [[nodiscard]] float horizontal_short_pulse_noise() const; + [[nodiscard]] float horizontal_long_pulse_noise() const; + [[nodiscard]] float horizontal_noise_temperature() const; + [[nodiscard]] float vertical_short_pulse_noise() const; + [[nodiscard]] float vertical_long_pulse_noise() const; + [[nodiscard]] float vertical_noise_temperature() const; + [[nodiscard]] float horizontal_linearity() const; + [[nodiscard]] float horizontal_dynamic_range() const; + [[nodiscard]] float horizontal_delta_dbz0() const; + [[nodiscard]] float vertical_delta_dbz0() const; + [[nodiscard]] float kd_peak_measured() const; + [[nodiscard]] float short_pulse_horizontal_dbz0() const; + [[nodiscard]] float long_pulse_horizontal_dbz0() const; + [[nodiscard]] std::uint16_t velocity_processed() const; + [[nodiscard]] std::uint16_t width_processed() const; + [[nodiscard]] std::uint16_t velocity_rf_gen() const; + [[nodiscard]] std::uint16_t width_rf_gen() const; + [[nodiscard]] float horizontal_i0() const; + [[nodiscard]] float vertical_i0() const; + [[nodiscard]] float vertical_dynamic_range() const; + [[nodiscard]] float short_pulse_vertical_dbz0() const; + [[nodiscard]] float long_pulse_vertical_dbz0() const; + [[nodiscard]] float horizontal_power_sense() const; + [[nodiscard]] float vertical_power_sense() const; + [[nodiscard]] float zdr_offset() const; + [[nodiscard]] float clutter_suppression_delta() const; + [[nodiscard]] float clutter_suppression_unfiltered_power() const; + [[nodiscard]] float clutter_suppression_filtered_power() const; + [[nodiscard]] float vertical_linearity() const; + [[nodiscard]] std::uint16_t state_file_read_status() const; + [[nodiscard]] std::uint16_t state_file_write_status() const; + [[nodiscard]] std::uint16_t bypass_map_file_read_status() const; + [[nodiscard]] std::uint16_t bypass_map_file_write_status() const; + [[nodiscard]] std::uint16_t current_adaptation_file_read_status() const; + [[nodiscard]] std::uint16_t current_adaptation_file_write_status() const; + [[nodiscard]] std::uint16_t censor_zone_file_read_status() const; + [[nodiscard]] std::uint16_t censor_zone_file_write_status() const; + [[nodiscard]] std::uint16_t remote_vcp_file_read_status() const; + [[nodiscard]] std::uint16_t remote_vcp_file_write_status() const; + [[nodiscard]] std::uint16_t baseline_adaptation_file_read_status() const; + [[nodiscard]] std::uint16_t read_status_of_prf_sets() const; + [[nodiscard]] std::uint16_t clutter_filter_map_file_read_status() const; + [[nodiscard]] std::uint16_t clutter_filter_map_file_write_status() const; + [[nodiscard]] std::uint16_t general_disk_io_error() const; + [[nodiscard]] std::uint8_t rsp_status() const; + [[nodiscard]] std::uint8_t cpu1_temperature() const; + [[nodiscard]] std::uint8_t cpu2_temperature() const; + [[nodiscard]] std::uint16_t rsp_motherboard_power() const; + [[nodiscard]] std::uint16_t spip_comm_status() const; + [[nodiscard]] std::uint16_t hci_comm_status() const; + [[nodiscard]] std::uint16_t signal_processor_command_status() const; + [[nodiscard]] std::uint16_t ame_communication_status() const; + [[nodiscard]] std::uint16_t rms_link_status() const; + [[nodiscard]] std::uint16_t rpg_link_status() const; + [[nodiscard]] std::uint16_t interpanel_link_status() const; + [[nodiscard]] std::uint32_t performance_check_time() const; + [[nodiscard]] std::uint16_t version() const; - bool Parse(std::istream& is); + bool Parse(std::istream& is) override; static std::shared_ptr Create(Level2MessageHeader&& header, std::istream& is); private: - std::unique_ptr p; + class Impl; + std::unique_ptr p; }; -} // namespace rda -} // namespace wsr88d -} // namespace scwx +} // namespace scwx::wsr88d::rda diff --git a/wxdata/include/scwx/wsr88d/rda/rda_adaptation_data.hpp b/wxdata/include/scwx/wsr88d/rda/rda_adaptation_data.hpp index be4f8067..60520e83 100644 --- a/wxdata/include/scwx/wsr88d/rda/rda_adaptation_data.hpp +++ b/wxdata/include/scwx/wsr88d/rda/rda_adaptation_data.hpp @@ -2,14 +2,8 @@ #include -namespace scwx +namespace scwx::wsr88d::rda { -namespace wsr88d -{ -namespace rda -{ - -class RdaAdaptationDataImpl; class RdaAdaptationData : public Level2Message { @@ -23,200 +17,199 @@ public: RdaAdaptationData(RdaAdaptationData&&) noexcept; RdaAdaptationData& operator=(RdaAdaptationData&&) noexcept; - std::string adap_file_name() const; - std::string adap_format() const; - std::string adap_revision() const; - std::string adap_date() const; - std::string adap_time() const; - float lower_pre_limit() const; - float az_lat() const; - float upper_pre_limit() const; - float el_lat() const; - float parkaz() const; - float parkel() const; - float a_fuel_conv(unsigned i) const; - float a_min_shelter_temp() const; - float a_max_shelter_temp() const; - float a_min_shelter_ac_temp_diff() const; - float a_max_xmtr_air_temp() const; - float a_max_rad_temp() const; - float a_max_rad_temp_rise() const; - float lower_dead_limit() const; - float upper_dead_limit() const; - float a_min_gen_room_temp() const; - float a_max_gen_room_temp() const; - float spip_5v_reg_lim() const; - float spip_15v_reg_lim() const; - bool rpg_co_located() const; - bool spec_filter_installed() const; - bool tps_installed() const; - bool rms_installed() const; - uint32_t a_hvdl_tst_int() const; - uint32_t a_rpg_lt_int() const; - uint32_t a_min_stab_util_pwr_time() const; - uint32_t a_gen_auto_exer_interval() const; - uint32_t a_util_pwr_sw_req_interval() const; - float a_low_fuel_level() const; - uint32_t config_chan_number() const; - uint32_t redundant_chan_config() const; - float atten_table(unsigned i) const; - float path_losses(unsigned i) const; - float h_coupler_xmt_loss() const; - float h_coupler_cw_loss() const; - float v_coupler_xmt_loss() const; - float ame_ts_bias() const; - float v_coupler_cw_loss() const; - float pwr_sense_bias() const; - float ame_v_noise_enr() const; - float chan_cal_diff() const; - float v_ts_cw() const; - float h_rnscale(unsigned i) const; - float atmos(unsigned i) const; - float el_index(unsigned i) const; - uint32_t tfreq_mhz() const; - float base_data_tcn() const; - float refl_data_tover() const; - float tar_h_dbz0_lp() const; - float tar_v_dbz0_lp() const; - uint32_t init_phi_dp() const; - uint32_t norm_init_phi_dp() const; - float lx_lp() const; - float lx_sp() const; - float meteor_param() const; - float antenna_gain() const; - float vel_degrad_limit() const; - float wth_degrad_limit() const; - float h_noisetemp_dgrad_limit() const; - uint32_t h_min_noisetemp() const; - float v_noisetemp_dgrad_limit() const; - uint32_t v_min_noisetemp() const; - float kly_degrade_limit() const; - float ts_coho() const; - float h_ts_cw() const; - float ts_stalo() const; - float ame_h_noise_enr() const; - float xmtr_peak_pwr_high_limit() const; - float xmtr_peak_pwr_low_limit() const; - float h_dbz0_delta_limit() const; - float threshold1() const; - float threshold2() const; - float clut_supp_dgrad_lim() const; - float range0_value() const; - float xmtr_pwr_mtr_scale() const; - float v_dbz0_delta_limit() const; - float tar_h_dbz0_sp() const; - float tar_v_dbz0_sp() const; - uint32_t deltaprf() const; - uint32_t tau_sp() const; - uint32_t tau_lp() const; - uint32_t nc_dead_value() const; - uint32_t tau_rf_sp() const; - uint32_t tau_rf_lp() const; - float seg1_lim() const; - float slatsec() const; - float slonsec() const; - uint32_t slatdeg() const; - uint32_t slatmin() const; - uint32_t slondeg() const; - uint32_t slonmin() const; - char slatdir() const; - char slondir() const; - double dig_rcvr_clock_freq() const; - double coho_freq() const; - float az_correction_factor() const; - float el_correction_factor() const; - std::string site_name() const; - float ant_manual_setup_ielmin() const; - float ant_manual_setup_ielmax() const; - uint32_t ant_manual_setup_fazvelmax() const; - uint32_t ant_manual_setup_felvelmax() const; - int32_t ant_manual_setup_ignd_hgt() const; - uint32_t ant_manual_setup_irad_hgt() const; - float az_pos_sustain_drive() const; - float az_neg_sustain_drive() const; - float az_nom_pos_drive_slope() const; - float az_nom_neg_drive_slope() const; - float az_feedback_slope() const; - float el_pos_sustain_drive() const; - float el_neg_sustain_drive() const; - float el_nom_pos_drive_slope() const; - float el_nom_neg_drive_slope() const; - float el_feedback_slope() const; - float el_first_slope() const; - float el_second_slope() const; - float el_third_slope() const; - float el_droop_pos() const; - float el_off_neutral_drive() const; - float az_intertia() const; - float el_inertia() const; - float az_stow_angle() const; - float el_stow_angle() const; - float az_encoder_alignment() const; - float el_encoder_alignment() const; - std::string refined_park() const; - uint32_t rvp8nv_iwaveguide_length() const; - float v_rnscale(unsigned i) const; - float vel_data_tover() const; - float width_data_tover() const; - float doppler_range_start() const; - uint32_t max_el_index() const; - float seg2_lim() const; - float seg3_lim() const; - float seg4_lim() const; - uint32_t nbr_el_segments() const; - float h_noise_long() const; - float ant_noise_temp() const; - float h_noise_short() const; - float h_noise_tolerance() const; - float min_h_dyn_range() const; - bool gen_installed() const; - bool gen_exercise() const; - float v_noise_tolerance() const; - float min_v_dyn_range() const; - float zdr_offset_dgrad_lim() const; - float baseline_zdr_offset() const; - float v_noise_long() const; - float v_noise_short() const; - float zdr_data_tover() const; - float phi_data_tover() const; - float rho_data_tover() const; - float stalo_power_dgrad_limit() const; - float stalo_power_maint_limit() const; - float min_h_pwr_sense() const; - float min_v_pwr_sense() const; - float h_pwr_sense_offset() const; - float v_pwr_sense_offset() const; - float ps_gain_ref() const; - float rf_pallet_broad_loss() const; - float ame_ps_tolerance() const; - float ame_max_temp() const; - float ame_min_temp() const; - float rcvr_mod_max_temp() const; - float rcvr_mod_min_temp() const; - float bite_mod_max_temp() const; - float bite_mod_min_temp() const; - uint32_t default_polarization() const; - float tr_limit_dgrad_limit() const; - float tr_limit_fail_limit() const; - bool rfp_stepper_enabled() const; - float ame_current_tolerance() const; - uint32_t h_only_polarization() const; - uint32_t v_only_polarization() const; - float sun_bias() const; - float a_min_shelter_temp_warn() const; - float power_meter_zero() const; - float txb_baseline() const; - float txb_alarm_thresh() const; + [[nodiscard]] std::string adap_file_name() const; + [[nodiscard]] std::string adap_format() const; + [[nodiscard]] std::string adap_revision() const; + [[nodiscard]] std::string adap_date() const; + [[nodiscard]] std::string adap_time() const; + [[nodiscard]] float lower_pre_limit() const; + [[nodiscard]] float az_lat() const; + [[nodiscard]] float upper_pre_limit() const; + [[nodiscard]] float el_lat() const; + [[nodiscard]] float parkaz() const; + [[nodiscard]] float parkel() const; + [[nodiscard]] float a_fuel_conv(unsigned i) const; + [[nodiscard]] float a_min_shelter_temp() const; + [[nodiscard]] float a_max_shelter_temp() const; + [[nodiscard]] float a_min_shelter_ac_temp_diff() const; + [[nodiscard]] float a_max_xmtr_air_temp() const; + [[nodiscard]] float a_max_rad_temp() const; + [[nodiscard]] float a_max_rad_temp_rise() const; + [[nodiscard]] float lower_dead_limit() const; + [[nodiscard]] float upper_dead_limit() const; + [[nodiscard]] float a_min_gen_room_temp() const; + [[nodiscard]] float a_max_gen_room_temp() const; + [[nodiscard]] float spip_5v_reg_lim() const; + [[nodiscard]] float spip_15v_reg_lim() const; + [[nodiscard]] bool rpg_co_located() const; + [[nodiscard]] bool spec_filter_installed() const; + [[nodiscard]] bool tps_installed() const; + [[nodiscard]] bool rms_installed() const; + [[nodiscard]] std::uint32_t a_hvdl_tst_int() const; + [[nodiscard]] std::uint32_t a_rpg_lt_int() const; + [[nodiscard]] std::uint32_t a_min_stab_util_pwr_time() const; + [[nodiscard]] std::uint32_t a_gen_auto_exer_interval() const; + [[nodiscard]] std::uint32_t a_util_pwr_sw_req_interval() const; + [[nodiscard]] float a_low_fuel_level() const; + [[nodiscard]] std::uint32_t config_chan_number() const; + [[nodiscard]] std::uint32_t redundant_chan_config() const; + [[nodiscard]] float atten_table(unsigned i) const; + [[nodiscard]] float path_losses(unsigned i) const; + [[nodiscard]] float h_coupler_xmt_loss() const; + [[nodiscard]] float h_coupler_cw_loss() const; + [[nodiscard]] float v_coupler_xmt_loss() const; + [[nodiscard]] float ame_ts_bias() const; + [[nodiscard]] float v_coupler_cw_loss() const; + [[nodiscard]] float pwr_sense_bias() const; + [[nodiscard]] float ame_v_noise_enr() const; + [[nodiscard]] float chan_cal_diff() const; + [[nodiscard]] float v_ts_cw() const; + [[nodiscard]] float h_rnscale(unsigned i) const; + [[nodiscard]] float atmos(unsigned i) const; + [[nodiscard]] float el_index(unsigned i) const; + [[nodiscard]] std::uint32_t tfreq_mhz() const; + [[nodiscard]] float base_data_tcn() const; + [[nodiscard]] float refl_data_tover() const; + [[nodiscard]] float tar_h_dbz0_lp() const; + [[nodiscard]] float tar_v_dbz0_lp() const; + [[nodiscard]] std::uint32_t init_phi_dp() const; + [[nodiscard]] std::uint32_t norm_init_phi_dp() const; + [[nodiscard]] float lx_lp() const; + [[nodiscard]] float lx_sp() const; + [[nodiscard]] float meteor_param() const; + [[nodiscard]] float antenna_gain() const; + [[nodiscard]] float vel_degrad_limit() const; + [[nodiscard]] float wth_degrad_limit() const; + [[nodiscard]] float h_noisetemp_dgrad_limit() const; + [[nodiscard]] std::uint32_t h_min_noisetemp() const; + [[nodiscard]] float v_noisetemp_dgrad_limit() const; + [[nodiscard]] std::uint32_t v_min_noisetemp() const; + [[nodiscard]] float kly_degrade_limit() const; + [[nodiscard]] float ts_coho() const; + [[nodiscard]] float h_ts_cw() const; + [[nodiscard]] float ts_stalo() const; + [[nodiscard]] float ame_h_noise_enr() const; + [[nodiscard]] float xmtr_peak_pwr_high_limit() const; + [[nodiscard]] float xmtr_peak_pwr_low_limit() const; + [[nodiscard]] float h_dbz0_delta_limit() const; + [[nodiscard]] float threshold1() const; + [[nodiscard]] float threshold2() const; + [[nodiscard]] float clut_supp_dgrad_lim() const; + [[nodiscard]] float range0_value() const; + [[nodiscard]] float xmtr_pwr_mtr_scale() const; + [[nodiscard]] float v_dbz0_delta_limit() const; + [[nodiscard]] float tar_h_dbz0_sp() const; + [[nodiscard]] float tar_v_dbz0_sp() const; + [[nodiscard]] std::uint32_t deltaprf() const; + [[nodiscard]] std::uint32_t tau_sp() const; + [[nodiscard]] std::uint32_t tau_lp() const; + [[nodiscard]] std::uint32_t nc_dead_value() const; + [[nodiscard]] std::uint32_t tau_rf_sp() const; + [[nodiscard]] std::uint32_t tau_rf_lp() const; + [[nodiscard]] float seg1_lim() const; + [[nodiscard]] float slatsec() const; + [[nodiscard]] float slonsec() const; + [[nodiscard]] std::uint32_t slatdeg() const; + [[nodiscard]] std::uint32_t slatmin() const; + [[nodiscard]] std::uint32_t slondeg() const; + [[nodiscard]] std::uint32_t slonmin() const; + [[nodiscard]] char slatdir() const; + [[nodiscard]] char slondir() const; + [[nodiscard]] double dig_rcvr_clock_freq() const; + [[nodiscard]] double coho_freq() const; + [[nodiscard]] float az_correction_factor() const; + [[nodiscard]] float el_correction_factor() const; + [[nodiscard]] std::string site_name() const; + [[nodiscard]] float ant_manual_setup_ielmin() const; + [[nodiscard]] float ant_manual_setup_ielmax() const; + [[nodiscard]] std::uint32_t ant_manual_setup_fazvelmax() const; + [[nodiscard]] std::uint32_t ant_manual_setup_felvelmax() const; + [[nodiscard]] std::int32_t ant_manual_setup_ignd_hgt() const; + [[nodiscard]] std::uint32_t ant_manual_setup_irad_hgt() const; + [[nodiscard]] float az_pos_sustain_drive() const; + [[nodiscard]] float az_neg_sustain_drive() const; + [[nodiscard]] float az_nom_pos_drive_slope() const; + [[nodiscard]] float az_nom_neg_drive_slope() const; + [[nodiscard]] float az_feedback_slope() const; + [[nodiscard]] float el_pos_sustain_drive() const; + [[nodiscard]] float el_neg_sustain_drive() const; + [[nodiscard]] float el_nom_pos_drive_slope() const; + [[nodiscard]] float el_nom_neg_drive_slope() const; + [[nodiscard]] float el_feedback_slope() const; + [[nodiscard]] float el_first_slope() const; + [[nodiscard]] float el_second_slope() const; + [[nodiscard]] float el_third_slope() const; + [[nodiscard]] float el_droop_pos() const; + [[nodiscard]] float el_off_neutral_drive() const; + [[nodiscard]] float az_intertia() const; + [[nodiscard]] float el_inertia() const; + [[nodiscard]] float az_stow_angle() const; + [[nodiscard]] float el_stow_angle() const; + [[nodiscard]] float az_encoder_alignment() const; + [[nodiscard]] float el_encoder_alignment() const; + [[nodiscard]] std::string refined_park() const; + [[nodiscard]] std::uint32_t rvp8nv_iwaveguide_length() const; + [[nodiscard]] float v_rnscale(unsigned i) const; + [[nodiscard]] float vel_data_tover() const; + [[nodiscard]] float width_data_tover() const; + [[nodiscard]] float doppler_range_start() const; + [[nodiscard]] std::uint32_t max_el_index() const; + [[nodiscard]] float seg2_lim() const; + [[nodiscard]] float seg3_lim() const; + [[nodiscard]] float seg4_lim() const; + [[nodiscard]] std::uint32_t nbr_el_segments() const; + [[nodiscard]] float h_noise_long() const; + [[nodiscard]] float ant_noise_temp() const; + [[nodiscard]] float h_noise_short() const; + [[nodiscard]] float h_noise_tolerance() const; + [[nodiscard]] float min_h_dyn_range() const; + [[nodiscard]] bool gen_installed() const; + [[nodiscard]] bool gen_exercise() const; + [[nodiscard]] float v_noise_tolerance() const; + [[nodiscard]] float min_v_dyn_range() const; + [[nodiscard]] float zdr_offset_dgrad_lim() const; + [[nodiscard]] float baseline_zdr_offset() const; + [[nodiscard]] float v_noise_long() const; + [[nodiscard]] float v_noise_short() const; + [[nodiscard]] float zdr_data_tover() const; + [[nodiscard]] float phi_data_tover() const; + [[nodiscard]] float rho_data_tover() const; + [[nodiscard]] float stalo_power_dgrad_limit() const; + [[nodiscard]] float stalo_power_maint_limit() const; + [[nodiscard]] float min_h_pwr_sense() const; + [[nodiscard]] float min_v_pwr_sense() const; + [[nodiscard]] float h_pwr_sense_offset() const; + [[nodiscard]] float v_pwr_sense_offset() const; + [[nodiscard]] float ps_gain_ref() const; + [[nodiscard]] float rf_pallet_broad_loss() const; + [[nodiscard]] float ame_ps_tolerance() const; + [[nodiscard]] float ame_max_temp() const; + [[nodiscard]] float ame_min_temp() const; + [[nodiscard]] float rcvr_mod_max_temp() const; + [[nodiscard]] float rcvr_mod_min_temp() const; + [[nodiscard]] float bite_mod_max_temp() const; + [[nodiscard]] float bite_mod_min_temp() const; + [[nodiscard]] std::uint32_t default_polarization() const; + [[nodiscard]] float tr_limit_dgrad_limit() const; + [[nodiscard]] float tr_limit_fail_limit() const; + [[nodiscard]] bool rfp_stepper_enabled() const; + [[nodiscard]] float ame_current_tolerance() const; + [[nodiscard]] std::uint32_t h_only_polarization() const; + [[nodiscard]] std::uint32_t v_only_polarization() const; + [[nodiscard]] float sun_bias() const; + [[nodiscard]] float a_min_shelter_temp_warn() const; + [[nodiscard]] float power_meter_zero() const; + [[nodiscard]] float txb_baseline() const; + [[nodiscard]] float txb_alarm_thresh() const; - bool Parse(std::istream& is); + bool Parse(std::istream& is) override; static std::shared_ptr Create(Level2MessageHeader&& header, std::istream& is); private: - std::unique_ptr p; + class Impl; + std::unique_ptr p; }; -} // namespace rda -} // namespace wsr88d -} // namespace scwx +} // namespace scwx::wsr88d::rda diff --git a/wxdata/include/scwx/wsr88d/rda/rda_status_data.hpp b/wxdata/include/scwx/wsr88d/rda/rda_status_data.hpp index a4e7702a..fcd937ec 100644 --- a/wxdata/include/scwx/wsr88d/rda/rda_status_data.hpp +++ b/wxdata/include/scwx/wsr88d/rda/rda_status_data.hpp @@ -2,14 +2,8 @@ #include -namespace scwx +namespace scwx::wsr88d::rda { -namespace wsr88d -{ -namespace rda -{ - -class RdaStatusDataImpl; class RdaStatusData : public Level2Message { @@ -23,46 +17,45 @@ public: RdaStatusData(RdaStatusData&&) noexcept; RdaStatusData& operator=(RdaStatusData&&) noexcept; - uint16_t rda_status() const; - uint16_t operability_status() const; - uint16_t control_status() const; - uint16_t auxiliary_power_generator_state() const; - uint16_t average_transmitter_power() const; - float horizontal_reflectivity_calibration_correction() const; - uint16_t data_transmission_enabled() const; - uint16_t volume_coverage_pattern_number() const; - uint16_t rda_control_authorization() const; - uint16_t rda_build_number() const; - uint16_t operational_mode() const; - uint16_t super_resolution_status() const; - uint16_t clutter_mitigation_decision_status() const; - uint16_t rda_scan_and_data_flags() const; - uint16_t rda_alarm_summary() const; - uint16_t command_acknowledgement() const; - uint16_t channel_control_status() const; - uint16_t spot_blanking_status() const; - uint16_t bypass_map_generation_date() const; - uint16_t bypass_map_generation_time() const; - uint16_t clutter_filter_map_generation_date() const; - uint16_t clutter_filter_map_generation_time() const; - float vertical_reflectivity_calibration_correction() const; - uint16_t transition_power_source_status() const; - uint16_t rms_control_status() const; - uint16_t performance_check_status() const; - uint16_t alarm_codes(unsigned i) const; - uint16_t signal_processing_options() const; - uint16_t downloaded_pattern_number() const; - uint16_t status_version() const; + [[nodiscard]] std::uint16_t rda_status() const; + [[nodiscard]] std::uint16_t operability_status() const; + [[nodiscard]] std::uint16_t control_status() const; + [[nodiscard]] std::uint16_t auxiliary_power_generator_state() const; + [[nodiscard]] std::uint16_t average_transmitter_power() const; + [[nodiscard]] float horizontal_reflectivity_calibration_correction() const; + [[nodiscard]] std::uint16_t data_transmission_enabled() const; + [[nodiscard]] std::uint16_t volume_coverage_pattern_number() const; + [[nodiscard]] std::uint16_t rda_control_authorization() const; + [[nodiscard]] std::uint16_t rda_build_number() const; + [[nodiscard]] std::uint16_t operational_mode() const; + [[nodiscard]] std::uint16_t super_resolution_status() const; + [[nodiscard]] std::uint16_t clutter_mitigation_decision_status() const; + [[nodiscard]] std::uint16_t rda_scan_and_data_flags() const; + [[nodiscard]] std::uint16_t rda_alarm_summary() const; + [[nodiscard]] std::uint16_t command_acknowledgement() const; + [[nodiscard]] std::uint16_t channel_control_status() const; + [[nodiscard]] std::uint16_t spot_blanking_status() const; + [[nodiscard]] std::uint16_t bypass_map_generation_date() const; + [[nodiscard]] std::uint16_t bypass_map_generation_time() const; + [[nodiscard]] std::uint16_t clutter_filter_map_generation_date() const; + [[nodiscard]] std::uint16_t clutter_filter_map_generation_time() const; + [[nodiscard]] float vertical_reflectivity_calibration_correction() const; + [[nodiscard]] std::uint16_t transition_power_source_status() const; + [[nodiscard]] std::uint16_t rms_control_status() const; + [[nodiscard]] std::uint16_t performance_check_status() const; + [[nodiscard]] std::uint16_t alarm_codes(unsigned i) const; + [[nodiscard]] std::uint16_t signal_processing_options() const; + [[nodiscard]] std::uint16_t downloaded_pattern_number() const; + [[nodiscard]] std::uint16_t status_version() const; - bool Parse(std::istream& is); + bool Parse(std::istream& is) override; static std::shared_ptr Create(Level2MessageHeader&& header, std::istream& is); private: - std::unique_ptr p; + class Impl; + std::unique_ptr p; }; -} // namespace rda -} // namespace wsr88d -} // namespace scwx +} // namespace scwx::wsr88d::rda diff --git a/wxdata/source/scwx/awips/message.cpp b/wxdata/source/scwx/awips/message.cpp index 73ae88a2..f4dbe9b7 100644 --- a/wxdata/source/scwx/awips/message.cpp +++ b/wxdata/source/scwx/awips/message.cpp @@ -9,17 +9,22 @@ namespace awips static const std::string logPrefix_ = "scwx::awips::message"; static const auto logger_ = util::Logger::Create(logPrefix_); -class MessageImpl +class Message::Impl { public: - explicit MessageImpl() {}; - ~MessageImpl() = default; + explicit Impl() = default; + ~Impl() = default; + + Impl(const Impl&) = delete; + Impl& operator=(const Impl&) = delete; + Impl(const Impl&&) = delete; + Impl& operator=(const Impl&&) = delete; }; -Message::Message() : p(std::make_unique()) {} +Message::Message() : p(std::make_unique()) {} Message::~Message() = default; -Message::Message(Message&&) noexcept = default; +Message::Message(Message&&) noexcept = default; Message& Message::operator=(Message&&) noexcept = default; bool Message::ValidateMessage(std::istream& is, size_t bytesRead) const diff --git a/wxdata/source/scwx/wsr88d/rda/digital_radar_data_generic.cpp b/wxdata/source/scwx/wsr88d/rda/digital_radar_data_generic.cpp index 79705a70..4004fd07 100644 --- a/wxdata/source/scwx/wsr88d/rda/digital_radar_data_generic.cpp +++ b/wxdata/source/scwx/wsr88d/rda/digital_radar_data_generic.cpp @@ -1,11 +1,7 @@ #include #include -namespace scwx -{ -namespace wsr88d -{ -namespace rda +namespace scwx::wsr88d::rda { static const std::string logPrefix_ = @@ -27,9 +23,9 @@ static const std::unordered_map strToDataBlock_ { class DigitalRadarDataGeneric::DataBlock::Impl { public: - explicit Impl(const std::string& dataBlockType, - const std::string& dataName) : - dataBlockType_ {dataBlockType}, dataName_ {dataName} + explicit Impl(std::string dataBlockType, std::string dataName) : + dataBlockType_ {std::move(dataBlockType)}, + dataName_ {std::move(dataName)} { } @@ -51,7 +47,13 @@ DigitalRadarDataGeneric::DataBlock::operator=(DataBlock&&) noexcept = default; class DigitalRadarDataGeneric::MomentDataBlock::Impl { public: - explicit Impl() {} + explicit Impl() = default; + ~Impl() = default; + + Impl(const Impl&) = delete; + Impl& operator=(const Impl&) = delete; + Impl(const Impl&&) = delete; + Impl& operator=(const Impl&&) = delete; std::uint16_t numberOfDataMomentGates_ {0}; std::int16_t dataMomentRange_ {0}; @@ -89,7 +91,9 @@ DigitalRadarDataGeneric::MomentDataBlock::number_of_data_moment_gates() const units::kilometers DigitalRadarDataGeneric::MomentDataBlock::data_moment_range() const { - return units::kilometers {p->dataMomentRange_ * 0.001f}; + static constexpr float kScale_ = 0.001f; + return units::kilometers {static_cast(p->dataMomentRange_) * + kScale_}; } std::int16_t @@ -102,7 +106,9 @@ units::kilometers DigitalRadarDataGeneric::MomentDataBlock::data_moment_range_sample_interval() const { - return units::kilometers {p->dataMomentRangeSampleInterval_ * 0.001f}; + static constexpr float kScale_ = 0.001f; + return units::kilometers { + static_cast(p->dataMomentRangeSampleInterval_) * kScale_}; } std::uint16_t DigitalRadarDataGeneric::MomentDataBlock:: @@ -113,7 +119,8 @@ std::uint16_t DigitalRadarDataGeneric::MomentDataBlock:: float DigitalRadarDataGeneric::MomentDataBlock::snr_threshold() const { - return p->snrThreshold_ * 0.1f; + static constexpr float kScale_ = 0.1f; + return static_cast(p->snrThreshold_) * kScale_; } std::int16_t DigitalRadarDataGeneric::MomentDataBlock::snr_threshold_raw() const @@ -138,14 +145,14 @@ float DigitalRadarDataGeneric::MomentDataBlock::offset() const const void* DigitalRadarDataGeneric::MomentDataBlock::data_moments() const { - const void* dataMoments; + const void* dataMoments = nullptr; switch (p->dataWordSize_) { - case 8: + case 8: // NOLINT(cppcoreguidelines-avoid-magic-numbers) dataMoments = p->momentGates8_.data(); break; - case 16: + case 16: // NOLINT(cppcoreguidelines-avoid-magic-numbers) dataMoments = p->momentGates16_.data(); break; default: @@ -189,13 +196,15 @@ bool DigitalRadarDataGeneric::MomentDataBlock::Parse(std::istream& is) is.read(reinterpret_cast(&p->scale_), 4); // 20-23 is.read(reinterpret_cast(&p->offset_), 4); // 24-27 - p->numberOfDataMomentGates_ = ntohs(p->numberOfDataMomentGates_); - p->dataMomentRange_ = ntohs(p->dataMomentRange_); + p->numberOfDataMomentGates_ = ntohs(p->numberOfDataMomentGates_); + p->dataMomentRange_ = static_cast(ntohs(p->dataMomentRange_)); p->dataMomentRangeSampleInterval_ = ntohs(p->dataMomentRangeSampleInterval_); p->tover_ = ntohs(p->tover_); - p->snrThreshold_ = ntohs(p->snrThreshold_); - p->scale_ = awips::Message::SwapFloat(p->scale_); - p->offset_ = awips::Message::SwapFloat(p->offset_); + p->snrThreshold_ = static_cast(ntohs(p->snrThreshold_)); + p->scale_ = awips::Message::SwapFloat(p->scale_); + p->offset_ = awips::Message::SwapFloat(p->offset_); + + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) if (p->numberOfDataMomentGates_ <= 1840) { @@ -209,7 +218,7 @@ bool DigitalRadarDataGeneric::MomentDataBlock::Parse(std::istream& is) { p->momentGates16_.resize(p->numberOfDataMomentGates_); is.read(reinterpret_cast(p->momentGates16_.data()), - p->numberOfDataMomentGates_ * 2); + static_cast(p->numberOfDataMomentGates_) * 2); awips::Message::SwapVector(p->momentGates16_); } else @@ -225,13 +234,21 @@ bool DigitalRadarDataGeneric::MomentDataBlock::Parse(std::istream& is) dataBlockValid = false; } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + return dataBlockValid; } class DigitalRadarDataGeneric::VolumeDataBlock::Impl { public: - explicit Impl() {} + explicit Impl() = default; + ~Impl() = default; + + Impl(const Impl&) = delete; + Impl& operator=(const Impl&) = delete; + Impl(const Impl&&) = delete; + Impl& operator=(const Impl&&) = delete; std::uint16_t lrtup_ {0}; std::uint8_t versionNumberMajor_ {0}; @@ -321,7 +338,7 @@ bool DigitalRadarDataGeneric::VolumeDataBlock::Parse(std::istream& is) p->lrtup_ = ntohs(p->lrtup_); p->latitude_ = awips::Message::SwapFloat(p->latitude_); p->longitude_ = awips::Message::SwapFloat(p->longitude_); - p->siteHeight_ = ntohs(p->siteHeight_); + p->siteHeight_ = static_cast(ntohs(p->siteHeight_)); p->feedhornHeight_ = ntohs(p->feedhornHeight_); p->calibrationConstant_ = awips::Message::SwapFloat(p->calibrationConstant_); p->horizontaShvTxPower_ = awips::Message::SwapFloat(p->horizontaShvTxPower_); @@ -333,6 +350,8 @@ bool DigitalRadarDataGeneric::VolumeDataBlock::Parse(std::istream& is) p->volumeCoveragePatternNumber_ = ntohs(p->volumeCoveragePatternNumber_); p->processingStatus_ = ntohs(p->processingStatus_); + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + if (p->lrtup_ >= 46) { is.read(reinterpret_cast(&p->zdrBiasEstimateWeightedMean_), @@ -345,13 +364,21 @@ bool DigitalRadarDataGeneric::VolumeDataBlock::Parse(std::istream& is) is.seekg(6, std::ios_base::cur); // 46-51 } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + return dataBlockValid; } class DigitalRadarDataGeneric::ElevationDataBlock::Impl { public: - explicit Impl() {} + explicit Impl() = default; + ~Impl() = default; + + Impl(const Impl&) = delete; + Impl& operator=(const Impl&) = delete; + Impl(const Impl&&) = delete; + Impl& operator=(const Impl&&) = delete; std::uint16_t lrtup_ {0}; std::int16_t atmos_ {0}; @@ -397,7 +424,7 @@ bool DigitalRadarDataGeneric::ElevationDataBlock::Parse(std::istream& is) is.read(reinterpret_cast(&p->calibrationConstant_), 4); // 8-11 p->lrtup_ = ntohs(p->lrtup_); - p->atmos_ = ntohs(p->atmos_); + p->atmos_ = static_cast(ntohs(p->atmos_)); p->calibrationConstant_ = awips::Message::SwapFloat(p->calibrationConstant_); return dataBlockValid; @@ -406,7 +433,13 @@ bool DigitalRadarDataGeneric::ElevationDataBlock::Parse(std::istream& is) class DigitalRadarDataGeneric::RadialDataBlock::Impl { public: - explicit Impl() {} + explicit Impl() = default; + ~Impl() = default; + + Impl(const Impl&) = delete; + Impl& operator=(const Impl&) = delete; + Impl(const Impl&&) = delete; + Impl& operator=(const Impl&&) = delete; std::uint16_t lrtup_ {0}; std::uint16_t unambigiousRange_ {0}; @@ -433,7 +466,8 @@ DigitalRadarDataGeneric::RadialDataBlock::operator=( float DigitalRadarDataGeneric::RadialDataBlock::unambiguous_range() const { - return p->unambigiousRange_ / 10.0f; + static constexpr float kScale_ = 0.1f; + return static_cast(p->unambigiousRange_) * kScale_; } std::shared_ptr @@ -486,24 +520,31 @@ bool DigitalRadarDataGeneric::RadialDataBlock::Parse(std::istream& is) class DigitalRadarDataGeneric::Impl { public: - explicit Impl() {}; - ~Impl() = default; + explicit Impl() = default; + ~Impl() = default; - std::string radarIdentifier_ {}; - std::uint32_t collectionTime_ {0}; - std::uint16_t modifiedJulianDate_ {0}; - std::uint16_t azimuthNumber_ {0}; - float azimuthAngle_ {0.0f}; - std::uint8_t compressionIndicator_ {0}; - std::uint16_t radialLength_ {0}; - std::uint8_t azimuthResolutionSpacing_ {0}; - std::uint8_t radialStatus_ {0}; - std::uint8_t elevationNumber_ {0}; - std::uint8_t cutSectorNumber_ {0}; - float elevationAngle_ {0.0f}; - std::uint8_t radialSpotBlankingStatus_ {0}; - std::uint8_t azimuthIndexingMode_ {0}; - std::uint16_t dataBlockCount_ {0}; + Impl(const Impl&) = delete; + Impl& operator=(const Impl&) = delete; + Impl(const Impl&&) = delete; + Impl& operator=(const Impl&&) = delete; + + std::string radarIdentifier_ {}; + std::uint32_t collectionTime_ {0}; + std::uint16_t modifiedJulianDate_ {0}; + std::uint16_t azimuthNumber_ {0}; + float azimuthAngle_ {0.0f}; + std::uint8_t compressionIndicator_ {0}; + std::uint16_t radialLength_ {0}; + std::uint8_t azimuthResolutionSpacing_ {0}; + std::uint8_t radialStatus_ {0}; + std::uint8_t elevationNumber_ {0}; + std::uint8_t cutSectorNumber_ {0}; + float elevationAngle_ {0.0f}; + std::uint8_t radialSpotBlankingStatus_ {0}; + std::uint8_t azimuthIndexingMode_ {0}; + std::uint16_t dataBlockCount_ {0}; + + // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers) std::array dataBlockPointer_ {0}; std::shared_ptr volumeDataBlock_ {nullptr}; @@ -679,6 +720,8 @@ bool DigitalRadarDataGeneric::Parse(std::istream& is) p->elevationAngle_ = SwapFloat(p->elevationAngle_); p->dataBlockCount_ = ntohs(p->dataBlockCount_); + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + if (p->azimuthNumber_ < 1 || p->azimuthNumber_ > 720) { logger_->warn("Invalid azimuth number: {}", p->azimuthNumber_); @@ -700,18 +743,22 @@ bool DigitalRadarDataGeneric::Parse(std::istream& is) messageValid = false; } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + if (!messageValid) { p->dataBlockCount_ = 0; } is.read(reinterpret_cast(&p->dataBlockPointer_), - p->dataBlockCount_ * 4); + static_cast(p->dataBlockCount_) * 4); SwapArray(p->dataBlockPointer_, p->dataBlockCount_); for (uint16_t b = 0; b < p->dataBlockCount_; ++b) { + // Index already has bounds check + // NOLINTNEXTLINE(cppcoreguidelines-pro-bounds-constant-array-index) is.seekg(isBegin + std::streamoff(p->dataBlockPointer_[b]), std::ios_base::beg); @@ -784,6 +831,4 @@ DigitalRadarDataGeneric::Create(Level2MessageHeader&& header, std::istream& is) return message; } -} // namespace rda -} // namespace wsr88d -} // namespace scwx +} // namespace scwx::wsr88d::rda diff --git a/wxdata/source/scwx/wsr88d/rda/performance_maintenance_data.cpp b/wxdata/source/scwx/wsr88d/rda/performance_maintenance_data.cpp index fcdd19c8..647221e6 100644 --- a/wxdata/source/scwx/wsr88d/rda/performance_maintenance_data.cpp +++ b/wxdata/source/scwx/wsr88d/rda/performance_maintenance_data.cpp @@ -3,295 +3,300 @@ #include -namespace scwx -{ -namespace wsr88d -{ -namespace rda +namespace scwx::wsr88d::rda { static const std::string logPrefix_ = "scwx::wsr88d::rda::performance_maintenance_data"; static const auto logger_ = util::Logger::Create(logPrefix_); -class PerformanceMaintenanceDataImpl +class PerformanceMaintenanceData::Impl { public: - explicit PerformanceMaintenanceDataImpl() = default; - ~PerformanceMaintenanceDataImpl() = default; + explicit Impl() = default; + ~Impl() = default; + + Impl(const Impl&) = delete; + Impl& operator=(const Impl&) = delete; + Impl(const Impl&&) = delete; + Impl& operator=(const Impl&&) = delete; // Communications - uint16_t loopBackSetStatus_ {0}; - uint32_t t1OutputFrames_ {0}; - uint32_t t1InputFrames_ {0}; - uint32_t routerMemoryUsed_ {0}; - uint32_t routerMemoryFree_ {0}; - uint16_t routerMemoryUtilization_ {0}; - uint16_t routeToRpg_ {0}; - uint16_t t1PortStatus_ {0}; - uint16_t routerDedicatedEthernetPortStatus_ {0}; - uint16_t routerCommercialEthernetPortStatus_ {0}; - uint32_t csu24HrErroredSeconds_ {0}; - uint32_t csu24HrSeverelyErroredSeconds_ {0}; - uint32_t csu24HrSeverelyErroredFramingSeconds_ {0}; - uint32_t csu24HrUnavailableSeconds_ {0}; - uint32_t csu24HrControlledSlipSeconds_ {0}; - uint32_t csu24HrPathCodingViolations_ {0}; - uint32_t csu24HrLineErroredSeconds_ {0}; - uint32_t csu24HrBurstyErroredSeconds_ {0}; - uint32_t csu24HrDegradedMinutes_ {0}; - uint32_t lanSwitchCpuUtilization_ {0}; - uint16_t lanSwitchMemoryUtilization_ {0}; - uint16_t ifdrChasisTemperature_ {0}; - uint16_t ifdrFpgaTemperature_ {0}; - uint16_t ntpStatus_ {0}; - uint16_t ipcStatus_ {0}; - uint16_t commandedChannelControl_ {0}; + std::uint16_t loopBackSetStatus_ {0}; + std::uint32_t t1OutputFrames_ {0}; + std::uint32_t t1InputFrames_ {0}; + std::uint32_t routerMemoryUsed_ {0}; + std::uint32_t routerMemoryFree_ {0}; + std::uint16_t routerMemoryUtilization_ {0}; + std::uint16_t routeToRpg_ {0}; + std::uint16_t t1PortStatus_ {0}; + std::uint16_t routerDedicatedEthernetPortStatus_ {0}; + std::uint16_t routerCommercialEthernetPortStatus_ {0}; + std::uint32_t csu24HrErroredSeconds_ {0}; + std::uint32_t csu24HrSeverelyErroredSeconds_ {0}; + std::uint32_t csu24HrSeverelyErroredFramingSeconds_ {0}; + std::uint32_t csu24HrUnavailableSeconds_ {0}; + std::uint32_t csu24HrControlledSlipSeconds_ {0}; + std::uint32_t csu24HrPathCodingViolations_ {0}; + std::uint32_t csu24HrLineErroredSeconds_ {0}; + std::uint32_t csu24HrBurstyErroredSeconds_ {0}; + std::uint32_t csu24HrDegradedMinutes_ {0}; + std::uint32_t lanSwitchCpuUtilization_ {0}; + std::uint16_t lanSwitchMemoryUtilization_ {0}; + std::uint16_t ifdrChasisTemperature_ {0}; + std::uint16_t ifdrFpgaTemperature_ {0}; + std::uint16_t ntpStatus_ {0}; + std::uint16_t ipcStatus_ {0}; + std::uint16_t commandedChannelControl_ {0}; // AME - uint16_t polarization_ {0}; - float ameInternalTemperature_ {0.0f}; - float ameReceiverModuleTemperature_ {0.0f}; - float ameBiteCalModuleTemperature_ {0.0f}; - uint16_t amePeltierPulseWidthModulation_ {0}; - uint16_t amePeltierStatus_ {0}; - uint16_t ameADConverterStatus_ {0}; - uint16_t ameState_ {0}; - float ame3_3VPsVoltage_ {0.0f}; - float ame5VPsVoltage_ {0.0f}; - float ame6_5VPsVoltage_ {0.0f}; - float ame15VPsVoltage_ {0.0f}; - float ame48VPsVoltage_ {0.0f}; - float ameStaloPower_ {0.0f}; - float peltierCurrent_ {0.0f}; - float adcCalibrationReferenceVoltage_ {0.0f}; - uint16_t ameMode_ {0}; - uint16_t amePeltierMode_ {0}; - float amePeltierInsideFanCurrent_ {0.0f}; - float amePeltierOutsideFanCurrent_ {0.0f}; - float horizontalTrLimiterVoltage_ {0.0f}; - float verticalTrLimiterVoltage_ {0.0f}; - float adcCalibrationOffsetVoltage_ {0.0f}; - float adcCalibrationGainCorrection_ {0.0f}; + std::uint16_t polarization_ {0}; + float ameInternalTemperature_ {0.0f}; + float ameReceiverModuleTemperature_ {0.0f}; + float ameBiteCalModuleTemperature_ {0.0f}; + std::uint16_t amePeltierPulseWidthModulation_ {0}; + std::uint16_t amePeltierStatus_ {0}; + std::uint16_t ameADConverterStatus_ {0}; + std::uint16_t ameState_ {0}; + float ame3_3VPsVoltage_ {0.0f}; + float ame5VPsVoltage_ {0.0f}; + float ame6_5VPsVoltage_ {0.0f}; + float ame15VPsVoltage_ {0.0f}; + float ame48VPsVoltage_ {0.0f}; + float ameStaloPower_ {0.0f}; + float peltierCurrent_ {0.0f}; + float adcCalibrationReferenceVoltage_ {0.0f}; + std::uint16_t ameMode_ {0}; + std::uint16_t amePeltierMode_ {0}; + float amePeltierInsideFanCurrent_ {0.0f}; + float amePeltierOutsideFanCurrent_ {0.0f}; + float horizontalTrLimiterVoltage_ {0.0f}; + float verticalTrLimiterVoltage_ {0.0f}; + float adcCalibrationOffsetVoltage_ {0.0f}; + float adcCalibrationGainCorrection_ {0.0f}; // RCP/SPIP Power Button Status - uint16_t rcpStatus_ {0}; - std::string rcpString_ {}; - uint16_t spipPowerButtons_ {0}; + std::uint16_t rcpStatus_ {0}; + std::string rcpString_ {}; + std::uint16_t spipPowerButtons_ {0}; // Power float masterPowerAdministratorLoad_ {0.0f}; float expansionPowerAdministratorLoad_ {0.0f}; // Transmitter - uint16_t _5VdcPs_ {0}; - uint16_t _15VdcPs_ {0}; - uint16_t _28VdcPs_ {0}; - uint16_t neg15VdcPs_ {0}; - uint16_t _45VdcPs_ {0}; - uint16_t filamentPsVoltage_ {0}; - uint16_t vacuumPumpPsVoltage_ {0}; - uint16_t focusCoilPsVoltage_ {0}; - uint16_t filamentPs_ {0}; - uint16_t klystronWarmup_ {0}; - uint16_t transmitterAvailable_ {0}; - uint16_t wgSwitchPosition_ {0}; - uint16_t wgPfnTransferInterlock_ {0}; - uint16_t maintenanceMode_ {0}; - uint16_t maintenanceRequired_ {0}; - uint16_t pfnSwitchPosition_ {0}; - uint16_t modulatorOverload_ {0}; - uint16_t modulatorInvCurrent_ {0}; - uint16_t modulatorSwitchFail_ {0}; - uint16_t mainPowerVoltage_ {0}; - uint16_t chargingSystemFail_ {0}; - uint16_t inverseDiodeCurrent_ {0}; - uint16_t triggerAmplifier_ {0}; - uint16_t circulatorTemperature_ {0}; - uint16_t spectrumFilterPressure_ {0}; - uint16_t wgArcVswr_ {0}; - uint16_t cabinetInterlock_ {0}; - uint16_t cabinetAirTemperature_ {0}; - uint16_t cabinetAirflow_ {0}; - uint16_t klystronCurrent_ {0}; - uint16_t klystronFilamentCurrent_ {0}; - uint16_t klystronVacionCurrent_ {0}; - uint16_t klystronAirTemperature_ {0}; - uint16_t klystronAirflow_ {0}; - uint16_t modulatorSwitchMaintenance_ {0}; - uint16_t postChargeRegulatorMaintenance_ {0}; - uint16_t wgPressureHumidity_ {0}; - uint16_t transmitterOvervoltage_ {0}; - uint16_t transmitterOvercurrent_ {0}; - uint16_t focusCoilCurrent_ {0}; - uint16_t focusCoilAirflow_ {0}; - uint16_t oilTemperature_ {0}; - uint16_t prfLimit_ {0}; - uint16_t transmitterOilLevel_ {0}; - uint16_t transmitterBatteryCharging_ {0}; - uint16_t highVoltageStatus_ {0}; - uint16_t transmitterRecyclingSummary_ {0}; - uint16_t transmitterInoperable_ {0}; - uint16_t transmitterAirFilter_ {0}; - std::array zeroTestBit_ {0}; - std::array oneTestBit_ {0}; - uint16_t xmtrSpipInterface_ {0}; - uint16_t transmitterSummaryStatus_ {0}; - float transmitterRfPower_ {0.0f}; - float horizontalXmtrPeakPower_ {0.0f}; - float xmtrPeakPower_ {0.0f}; - float verticalXmtrPeakPower_ {0.0f}; - float xmtrRfAvgPower_ {0.0f}; - uint32_t xmtrRecycleCount_ {0}; - float receiverBias_ {0.0f}; - float transmitImbalance_ {0.0f}; - float xmtrPowerMeterZero_ {0.0f}; + std::uint16_t _5VdcPs_ {0}; + std::uint16_t _15VdcPs_ {0}; + std::uint16_t _28VdcPs_ {0}; + std::uint16_t neg15VdcPs_ {0}; + std::uint16_t _45VdcPs_ {0}; + std::uint16_t filamentPsVoltage_ {0}; + std::uint16_t vacuumPumpPsVoltage_ {0}; + std::uint16_t focusCoilPsVoltage_ {0}; + std::uint16_t filamentPs_ {0}; + std::uint16_t klystronWarmup_ {0}; + std::uint16_t transmitterAvailable_ {0}; + std::uint16_t wgSwitchPosition_ {0}; + std::uint16_t wgPfnTransferInterlock_ {0}; + std::uint16_t maintenanceMode_ {0}; + std::uint16_t maintenanceRequired_ {0}; + std::uint16_t pfnSwitchPosition_ {0}; + std::uint16_t modulatorOverload_ {0}; + std::uint16_t modulatorInvCurrent_ {0}; + std::uint16_t modulatorSwitchFail_ {0}; + std::uint16_t mainPowerVoltage_ {0}; + std::uint16_t chargingSystemFail_ {0}; + std::uint16_t inverseDiodeCurrent_ {0}; + std::uint16_t triggerAmplifier_ {0}; + std::uint16_t circulatorTemperature_ {0}; + std::uint16_t spectrumFilterPressure_ {0}; + std::uint16_t wgArcVswr_ {0}; + std::uint16_t cabinetInterlock_ {0}; + std::uint16_t cabinetAirTemperature_ {0}; + std::uint16_t cabinetAirflow_ {0}; + std::uint16_t klystronCurrent_ {0}; + std::uint16_t klystronFilamentCurrent_ {0}; + std::uint16_t klystronVacionCurrent_ {0}; + std::uint16_t klystronAirTemperature_ {0}; + std::uint16_t klystronAirflow_ {0}; + std::uint16_t modulatorSwitchMaintenance_ {0}; + std::uint16_t postChargeRegulatorMaintenance_ {0}; + std::uint16_t wgPressureHumidity_ {0}; + std::uint16_t transmitterOvervoltage_ {0}; + std::uint16_t transmitterOvercurrent_ {0}; + std::uint16_t focusCoilCurrent_ {0}; + std::uint16_t focusCoilAirflow_ {0}; + std::uint16_t oilTemperature_ {0}; + std::uint16_t prfLimit_ {0}; + std::uint16_t transmitterOilLevel_ {0}; + std::uint16_t transmitterBatteryCharging_ {0}; + std::uint16_t highVoltageStatus_ {0}; + std::uint16_t transmitterRecyclingSummary_ {0}; + std::uint16_t transmitterInoperable_ {0}; + std::uint16_t transmitterAirFilter_ {0}; + + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + std::array zeroTestBit_ {0}; + std::array oneTestBit_ {0}; + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + + std::uint16_t xmtrSpipInterface_ {0}; + std::uint16_t transmitterSummaryStatus_ {0}; + float transmitterRfPower_ {0.0f}; + float horizontalXmtrPeakPower_ {0.0f}; + float xmtrPeakPower_ {0.0f}; + float verticalXmtrPeakPower_ {0.0f}; + float xmtrRfAvgPower_ {0.0f}; + std::uint32_t xmtrRecycleCount_ {0}; + float receiverBias_ {0.0f}; + float transmitImbalance_ {0.0f}; + float xmtrPowerMeterZero_ {0.0f}; // Tower/Utilities - uint16_t acUnit1CompressorShutOff_ {0}; - uint16_t acUnit2CompressorShutOff_ {0}; - uint16_t generatorMaintenanceRequired_ {0}; - uint16_t generatorBatteryVoltage_ {0}; - uint16_t generatorEngine_ {0}; - uint16_t generatorVoltFrequency_ {0}; - uint16_t powerSource_ {0}; - uint16_t transitionalPowerSource_ {0}; - uint16_t generatorAutoRunOffSwitch_ {0}; - uint16_t aircraftHazardLighting_ {0}; + std::uint16_t acUnit1CompressorShutOff_ {0}; + std::uint16_t acUnit2CompressorShutOff_ {0}; + std::uint16_t generatorMaintenanceRequired_ {0}; + std::uint16_t generatorBatteryVoltage_ {0}; + std::uint16_t generatorEngine_ {0}; + std::uint16_t generatorVoltFrequency_ {0}; + std::uint16_t powerSource_ {0}; + std::uint16_t transitionalPowerSource_ {0}; + std::uint16_t generatorAutoRunOffSwitch_ {0}; + std::uint16_t aircraftHazardLighting_ {0}; // Equipment Shelter - uint16_t equipmentShelterFireDetectionSystem_ {0}; - uint16_t equipmentShelterFireSmoke_ {0}; - uint16_t generatorShelterFireSmoke_ {0}; - uint16_t utilityVoltageFrequency_ {0}; - uint16_t siteSecurityAlarm_ {0}; - uint16_t securityEquipment_ {0}; - uint16_t securitySystem_ {0}; - uint16_t receiverConnectedToAntenna_ {0}; - uint16_t radomeHatch_ {0}; - uint16_t acUnit1FilterDirty_ {0}; - uint16_t acUnit2FilterDirty_ {0}; - float equipmentShelterTemperature_ {0.0f}; - float outsideAmbientTemperature_ {0.0f}; - float transmitterLeavingAirTemp_ {0.0f}; - float acUnit1DischargeAirTemp_ {0.0f}; - float generatorShelterTemperature_ {0.0f}; - float radomeAirTemperature_ {0.0f}; - float acUnit2DischargeAirTemp_ {0.0f}; - float spip15VPs_ {0.0f}; - float spipNeg15VPs_ {0.0f}; - uint16_t spip28VPsStatus_ {0}; - float spip5VPs_ {0.0f}; - uint16_t convertedGeneratorFuelLevel_ {0}; + std::uint16_t equipmentShelterFireDetectionSystem_ {0}; + std::uint16_t equipmentShelterFireSmoke_ {0}; + std::uint16_t generatorShelterFireSmoke_ {0}; + std::uint16_t utilityVoltageFrequency_ {0}; + std::uint16_t siteSecurityAlarm_ {0}; + std::uint16_t securityEquipment_ {0}; + std::uint16_t securitySystem_ {0}; + std::uint16_t receiverConnectedToAntenna_ {0}; + std::uint16_t radomeHatch_ {0}; + std::uint16_t acUnit1FilterDirty_ {0}; + std::uint16_t acUnit2FilterDirty_ {0}; + float equipmentShelterTemperature_ {0.0f}; + float outsideAmbientTemperature_ {0.0f}; + float transmitterLeavingAirTemp_ {0.0f}; + float acUnit1DischargeAirTemp_ {0.0f}; + float generatorShelterTemperature_ {0.0f}; + float radomeAirTemperature_ {0.0f}; + float acUnit2DischargeAirTemp_ {0.0f}; + float spip15VPs_ {0.0f}; + float spipNeg15VPs_ {0.0f}; + std::uint16_t spip28VPsStatus_ {0}; + float spip5VPs_ {0.0f}; + std::uint16_t convertedGeneratorFuelLevel_ {0}; // Antenna/Pedestal - uint16_t elevationPosDeadLimit_ {0}; - uint16_t _150VOvervoltage_ {0}; - uint16_t _150VUndervoltage_ {0}; - uint16_t elevationServoAmpInhibit_ {0}; - uint16_t elevationServoAmpShortCircuit_ {0}; - uint16_t elevationServoAmpOvertemp_ {0}; - uint16_t elevationMotorOvertemp_ {0}; - uint16_t elevationStowPin_ {0}; - uint16_t elevationHousing5VPs_ {0}; - uint16_t elevationNegDeadLimit_ {0}; - uint16_t elevationPosNormalLimit_ {0}; - uint16_t elevationNegNormalLimit_ {0}; - uint16_t elevationEncoderLight_ {0}; - uint16_t elevationGearboxOil_ {0}; - uint16_t elevationHandwheel_ {0}; - uint16_t elevationAmpPs_ {0}; - uint16_t azimuthServoAmpInhibit_ {0}; - uint16_t azimuthServoAmpShortCircuit_ {0}; - uint16_t azimuthServoAmpOvertemp_ {0}; - uint16_t azimuthMotorOvertemp_ {0}; - uint16_t azimuthStowPin_ {0}; - uint16_t azimuthHousing5VPs_ {0}; - uint16_t azimuthEncoderLight_ {0}; - uint16_t azimuthGearboxOil_ {0}; - uint16_t azimuthBullGearOil_ {0}; - uint16_t azimuthHandwheel_ {0}; - uint16_t azimuthServoAmpPs_ {0}; - uint16_t servo_ {0}; - uint16_t pedestalInterlockSwitch_ {0}; + std::uint16_t elevationPosDeadLimit_ {0}; + std::uint16_t _150VOvervoltage_ {0}; + std::uint16_t _150VUndervoltage_ {0}; + std::uint16_t elevationServoAmpInhibit_ {0}; + std::uint16_t elevationServoAmpShortCircuit_ {0}; + std::uint16_t elevationServoAmpOvertemp_ {0}; + std::uint16_t elevationMotorOvertemp_ {0}; + std::uint16_t elevationStowPin_ {0}; + std::uint16_t elevationHousing5VPs_ {0}; + std::uint16_t elevationNegDeadLimit_ {0}; + std::uint16_t elevationPosNormalLimit_ {0}; + std::uint16_t elevationNegNormalLimit_ {0}; + std::uint16_t elevationEncoderLight_ {0}; + std::uint16_t elevationGearboxOil_ {0}; + std::uint16_t elevationHandwheel_ {0}; + std::uint16_t elevationAmpPs_ {0}; + std::uint16_t azimuthServoAmpInhibit_ {0}; + std::uint16_t azimuthServoAmpShortCircuit_ {0}; + std::uint16_t azimuthServoAmpOvertemp_ {0}; + std::uint16_t azimuthMotorOvertemp_ {0}; + std::uint16_t azimuthStowPin_ {0}; + std::uint16_t azimuthHousing5VPs_ {0}; + std::uint16_t azimuthEncoderLight_ {0}; + std::uint16_t azimuthGearboxOil_ {0}; + std::uint16_t azimuthBullGearOil_ {0}; + std::uint16_t azimuthHandwheel_ {0}; + std::uint16_t azimuthServoAmpPs_ {0}; + std::uint16_t servo_ {0}; + std::uint16_t pedestalInterlockSwitch_ {0}; // RF Generator/Receiver - uint16_t cohoClock_ {0}; - uint16_t rfGeneratorFrequencySelectOscillator_ {0}; - uint16_t rfGeneratorRfStalo_ {0}; - uint16_t rfGeneratorPhaseShiftedCoho_ {0}; - uint16_t _9VReceiverPs_ {0}; - uint16_t _5VReceiverPs_ {0}; - uint16_t _18VReceiverPs_ {0}; - uint16_t neg9VReceiverPs_ {0}; - uint16_t _5VSingleChannelRdaiuPs_ {0}; - float horizontalShortPulseNoise_ {0.0f}; - float horizontalLongPulseNoise_ {0.0f}; - float horizontalNoiseTemperature_ {0.0f}; - float verticalShortPulseNoise_ {0.0f}; - float verticalLongPulseNoise_ {0.0f}; - float verticalNoiseTemperature_ {0.0f}; + std::uint16_t cohoClock_ {0}; + std::uint16_t rfGeneratorFrequencySelectOscillator_ {0}; + std::uint16_t rfGeneratorRfStalo_ {0}; + std::uint16_t rfGeneratorPhaseShiftedCoho_ {0}; + std::uint16_t _9VReceiverPs_ {0}; + std::uint16_t _5VReceiverPs_ {0}; + std::uint16_t _18VReceiverPs_ {0}; + std::uint16_t neg9VReceiverPs_ {0}; + std::uint16_t _5VSingleChannelRdaiuPs_ {0}; + float horizontalShortPulseNoise_ {0.0f}; + float horizontalLongPulseNoise_ {0.0f}; + float horizontalNoiseTemperature_ {0.0f}; + float verticalShortPulseNoise_ {0.0f}; + float verticalLongPulseNoise_ {0.0f}; + float verticalNoiseTemperature_ {0.0f}; // Calibration - float horizontalLinearity_ {0.0f}; - float horizontalDynamicRange_ {0.0f}; - float horizontalDeltaDbz0_ {0.0f}; - float verticalDeltaDbz0_ {0.0f}; - float kdPeakMeasured_ {0.0f}; - float shortPulseHorizontalDbz0_ {0.0f}; - float longPulseHorizontalDbz0_ {0.0f}; - uint16_t velocityProcessed_ {0}; - uint16_t widthProcessed_ {0}; - uint16_t velocityRfGen_ {0}; - uint16_t widthRfGen_ {0}; - float horizontalI0_ {0.0f}; - float verticalI0_ {0.0f}; - float verticalDynamicRange_ {0.0f}; - float shortPulseVerticalDbz0_ {0.0f}; - float longPulseVerticalDbz0_ {0.0f}; - float horizontalPowerSense_ {0.0f}; - float verticalPowerSense_ {0.0f}; - float zdrOffset_ {0.0f}; - float clutterSuppressionDelta_ {0.0f}; - float clutterSuppressionUnfilteredPower_ {0.0f}; - float clutterSuppressionFilteredPower_ {0.0f}; - float verticalLinearity_ {0.0f}; + float horizontalLinearity_ {0.0f}; + float horizontalDynamicRange_ {0.0f}; + float horizontalDeltaDbz0_ {0.0f}; + float verticalDeltaDbz0_ {0.0f}; + float kdPeakMeasured_ {0.0f}; + float shortPulseHorizontalDbz0_ {0.0f}; + float longPulseHorizontalDbz0_ {0.0f}; + std::uint16_t velocityProcessed_ {0}; + std::uint16_t widthProcessed_ {0}; + std::uint16_t velocityRfGen_ {0}; + std::uint16_t widthRfGen_ {0}; + float horizontalI0_ {0.0f}; + float verticalI0_ {0.0f}; + float verticalDynamicRange_ {0.0f}; + float shortPulseVerticalDbz0_ {0.0f}; + float longPulseVerticalDbz0_ {0.0f}; + float horizontalPowerSense_ {0.0f}; + float verticalPowerSense_ {0.0f}; + float zdrOffset_ {0.0f}; + float clutterSuppressionDelta_ {0.0f}; + float clutterSuppressionUnfilteredPower_ {0.0f}; + float clutterSuppressionFilteredPower_ {0.0f}; + float verticalLinearity_ {0.0f}; // File Status - uint16_t stateFileReadStatus_ {0}; - uint16_t stateFileWriteStatus_ {0}; - uint16_t bypassMapFileReadStatus_ {0}; - uint16_t bypassMapFileWriteStatus_ {0}; - uint16_t currentAdaptationFileReadStatus_ {0}; - uint16_t currentAdaptationFileWriteStatus_ {0}; - uint16_t censorZoneFileReadStatus_ {0}; - uint16_t censorZoneFileWriteStatus_ {0}; - uint16_t remoteVcpFileReadStatus_ {0}; - uint16_t remoteVcpFileWriteStatus_ {0}; - uint16_t baselineAdaptationFileReadStatus_ {0}; - uint16_t readStatusOfPrfSets_ {0}; - uint16_t clutterFilterMapFileReadStatus_ {0}; - uint16_t clutterFilterMapFileWriteStatus_ {0}; - uint16_t generalDiskIoError_ {0}; - uint8_t rspStatus_ {0}; - uint8_t cpu1Temperature_ {0}; - uint8_t cpu2Temperature_ {0}; - uint16_t rspMotherboardPower_ {0}; + std::uint16_t stateFileReadStatus_ {0}; + std::uint16_t stateFileWriteStatus_ {0}; + std::uint16_t bypassMapFileReadStatus_ {0}; + std::uint16_t bypassMapFileWriteStatus_ {0}; + std::uint16_t currentAdaptationFileReadStatus_ {0}; + std::uint16_t currentAdaptationFileWriteStatus_ {0}; + std::uint16_t censorZoneFileReadStatus_ {0}; + std::uint16_t censorZoneFileWriteStatus_ {0}; + std::uint16_t remoteVcpFileReadStatus_ {0}; + std::uint16_t remoteVcpFileWriteStatus_ {0}; + std::uint16_t baselineAdaptationFileReadStatus_ {0}; + std::uint16_t readStatusOfPrfSets_ {0}; + std::uint16_t clutterFilterMapFileReadStatus_ {0}; + std::uint16_t clutterFilterMapFileWriteStatus_ {0}; + std::uint16_t generalDiskIoError_ {0}; + std::uint8_t rspStatus_ {0}; + std::uint8_t cpu1Temperature_ {0}; + std::uint8_t cpu2Temperature_ {0}; + std::uint16_t rspMotherboardPower_ {0}; // Device Status - uint16_t spipCommStatus_ {0}; - uint16_t hciCommStatus_ {0}; - uint16_t signalProcessorCommandStatus_ {0}; - uint16_t ameCommunicationStatus_ {0}; - uint16_t rmsLinkStatus_ {0}; - uint16_t rpgLinkStatus_ {0}; - uint16_t interpanelLinkStatus_ {0}; - uint32_t performanceCheckTime_ {0}; - uint16_t version_ {0}; + std::uint16_t spipCommStatus_ {0}; + std::uint16_t hciCommStatus_ {0}; + std::uint16_t signalProcessorCommandStatus_ {0}; + std::uint16_t ameCommunicationStatus_ {0}; + std::uint16_t rmsLinkStatus_ {0}; + std::uint16_t rpgLinkStatus_ {0}; + std::uint16_t interpanelLinkStatus_ {0}; + std::uint32_t performanceCheckTime_ {0}; + std::uint16_t version_ {0}; }; PerformanceMaintenanceData::PerformanceMaintenanceData() : - Level2Message(), p(std::make_unique()) + Level2Message(), p(std::make_unique()) { } PerformanceMaintenanceData::~PerformanceMaintenanceData() = default; @@ -301,140 +306,144 @@ PerformanceMaintenanceData::PerformanceMaintenanceData( PerformanceMaintenanceData& PerformanceMaintenanceData::operator=( PerformanceMaintenanceData&&) noexcept = default; -uint16_t PerformanceMaintenanceData::loop_back_set_status() const +std::uint16_t PerformanceMaintenanceData::loop_back_set_status() const { return p->loopBackSetStatus_; } -uint32_t PerformanceMaintenanceData::t1_output_frames() const +std::uint32_t PerformanceMaintenanceData::t1_output_frames() const { return p->t1OutputFrames_; } -uint32_t PerformanceMaintenanceData::t1_input_frames() const +std::uint32_t PerformanceMaintenanceData::t1_input_frames() const { return p->t1InputFrames_; } -uint32_t PerformanceMaintenanceData::router_memory_used() const +std::uint32_t PerformanceMaintenanceData::router_memory_used() const { return p->routerMemoryUsed_; } -uint32_t PerformanceMaintenanceData::router_memory_free() const +std::uint32_t PerformanceMaintenanceData::router_memory_free() const { return p->routerMemoryFree_; } -uint16_t PerformanceMaintenanceData::router_memory_utilization() const +std::uint16_t PerformanceMaintenanceData::router_memory_utilization() const { return p->routerMemoryUtilization_; } -uint16_t PerformanceMaintenanceData::route_to_rpg() const +std::uint16_t PerformanceMaintenanceData::route_to_rpg() const { return p->routeToRpg_; } -uint16_t PerformanceMaintenanceData::t1_port_status() const +std::uint16_t PerformanceMaintenanceData::t1_port_status() const { return p->t1PortStatus_; } -uint16_t +std::uint16_t PerformanceMaintenanceData::router_dedicated_ethernet_port_status() const { return p->routerDedicatedEthernetPortStatus_; } -uint16_t +std::uint16_t PerformanceMaintenanceData::router_commercial_ethernet_port_status() const { return p->routerCommercialEthernetPortStatus_; } -uint32_t PerformanceMaintenanceData::csu_24hr_errored_seconds() const +std::uint32_t PerformanceMaintenanceData::csu_24hr_errored_seconds() const { return p->csu24HrErroredSeconds_; } -uint32_t PerformanceMaintenanceData::csu_24hr_severely_errored_seconds() const +std::uint32_t +PerformanceMaintenanceData::csu_24hr_severely_errored_seconds() const { return p->csu24HrSeverelyErroredSeconds_; } -uint32_t +std::uint32_t PerformanceMaintenanceData::csu_24hr_severely_errored_framing_seconds() const { return p->csu24HrSeverelyErroredFramingSeconds_; } -uint32_t PerformanceMaintenanceData::csu_24hr_unavailable_seconds() const +std::uint32_t PerformanceMaintenanceData::csu_24hr_unavailable_seconds() const { return p->csu24HrUnavailableSeconds_; } -uint32_t PerformanceMaintenanceData::csu_24hr_controlled_slip_seconds() const +std::uint32_t +PerformanceMaintenanceData::csu_24hr_controlled_slip_seconds() const { return p->csu24HrControlledSlipSeconds_; } -uint32_t PerformanceMaintenanceData::csu_24hr_path_coding_violations() const +std::uint32_t +PerformanceMaintenanceData::csu_24hr_path_coding_violations() const { return p->csu24HrPathCodingViolations_; } -uint32_t PerformanceMaintenanceData::csu_24hr_line_errored_seconds() const +std::uint32_t PerformanceMaintenanceData::csu_24hr_line_errored_seconds() const { return p->csu24HrLineErroredSeconds_; } -uint32_t PerformanceMaintenanceData::csu_24hr_bursty_errored_seconds() const +std::uint32_t +PerformanceMaintenanceData::csu_24hr_bursty_errored_seconds() const { return p->csu24HrBurstyErroredSeconds_; } -uint32_t PerformanceMaintenanceData::csu_24hr_degraded_minutes() const +std::uint32_t PerformanceMaintenanceData::csu_24hr_degraded_minutes() const { return p->csu24HrDegradedMinutes_; } -uint32_t PerformanceMaintenanceData::lan_switch_cpu_utilization() const +std::uint32_t PerformanceMaintenanceData::lan_switch_cpu_utilization() const { return p->lanSwitchCpuUtilization_; } -uint16_t PerformanceMaintenanceData::lan_switch_memory_utilization() const +std::uint16_t PerformanceMaintenanceData::lan_switch_memory_utilization() const { return p->lanSwitchMemoryUtilization_; } -uint16_t PerformanceMaintenanceData::ifdr_chasis_temperature() const +std::uint16_t PerformanceMaintenanceData::ifdr_chasis_temperature() const { return p->ifdrChasisTemperature_; } -uint16_t PerformanceMaintenanceData::ifdr_fpga_temperature() const +std::uint16_t PerformanceMaintenanceData::ifdr_fpga_temperature() const { return p->ifdrFpgaTemperature_; } -uint16_t PerformanceMaintenanceData::ntp_status() const +std::uint16_t PerformanceMaintenanceData::ntp_status() const { return p->ntpStatus_; } -uint16_t PerformanceMaintenanceData::ipc_status() const +std::uint16_t PerformanceMaintenanceData::ipc_status() const { return p->ipcStatus_; } -uint16_t PerformanceMaintenanceData::commanded_channel_control() const +std::uint16_t PerformanceMaintenanceData::commanded_channel_control() const { return p->commandedChannelControl_; } -uint16_t PerformanceMaintenanceData::polarization() const +std::uint16_t PerformanceMaintenanceData::polarization() const { return p->polarization_; } @@ -454,22 +463,23 @@ float PerformanceMaintenanceData::ame_bite_cal_module_temperature() const return p->ameBiteCalModuleTemperature_; } -uint16_t PerformanceMaintenanceData::ame_peltier_pulse_width_modulation() const +std::uint16_t +PerformanceMaintenanceData::ame_peltier_pulse_width_modulation() const { return p->amePeltierPulseWidthModulation_; } -uint16_t PerformanceMaintenanceData::ame_peltier_status() const +std::uint16_t PerformanceMaintenanceData::ame_peltier_status() const { return p->amePeltierStatus_; } -uint16_t PerformanceMaintenanceData::ame_a_d_converter_status() const +std::uint16_t PerformanceMaintenanceData::ame_a_d_converter_status() const { return p->ameADConverterStatus_; } -uint16_t PerformanceMaintenanceData::ame_state() const +std::uint16_t PerformanceMaintenanceData::ame_state() const { return p->ameState_; } @@ -514,12 +524,12 @@ float PerformanceMaintenanceData::adc_calibration_reference_voltage() const return p->adcCalibrationReferenceVoltage_; } -uint16_t PerformanceMaintenanceData::ame_mode() const +std::uint16_t PerformanceMaintenanceData::ame_mode() const { return p->ameMode_; } -uint16_t PerformanceMaintenanceData::ame_peltier_mode() const +std::uint16_t PerformanceMaintenanceData::ame_peltier_mode() const { return p->amePeltierMode_; } @@ -554,7 +564,7 @@ float PerformanceMaintenanceData::adc_calibration_gain_correction() const return p->adcCalibrationGainCorrection_; } -uint16_t PerformanceMaintenanceData::rcp_status() const +std::uint16_t PerformanceMaintenanceData::rcp_status() const { return p->rcpStatus_; } @@ -564,7 +574,7 @@ std::string PerformanceMaintenanceData::rcp_string() const return p->rcpString_; } -uint16_t PerformanceMaintenanceData::spip_power_buttons() const +std::uint16_t PerformanceMaintenanceData::spip_power_buttons() const { return p->spipPowerButtons_; } @@ -579,267 +589,268 @@ float PerformanceMaintenanceData::expansion_power_administrator_load() const return p->expansionPowerAdministratorLoad_; } -uint16_t PerformanceMaintenanceData::_5vdc_ps() const +std::uint16_t PerformanceMaintenanceData::_5vdc_ps() const { return p->_5VdcPs_; } -uint16_t PerformanceMaintenanceData::_15vdc_ps() const +std::uint16_t PerformanceMaintenanceData::_15vdc_ps() const { return p->_15VdcPs_; } -uint16_t PerformanceMaintenanceData::_28vdc_ps() const +std::uint16_t PerformanceMaintenanceData::_28vdc_ps() const { return p->_28VdcPs_; } -uint16_t PerformanceMaintenanceData::neg_15vdc_ps() const +std::uint16_t PerformanceMaintenanceData::neg_15vdc_ps() const { return p->neg15VdcPs_; } -uint16_t PerformanceMaintenanceData::_45vdc_ps() const +std::uint16_t PerformanceMaintenanceData::_45vdc_ps() const { return p->_45VdcPs_; } -uint16_t PerformanceMaintenanceData::filament_ps_voltage() const +std::uint16_t PerformanceMaintenanceData::filament_ps_voltage() const { return p->filamentPsVoltage_; } -uint16_t PerformanceMaintenanceData::vacuum_pump_ps_voltage() const +std::uint16_t PerformanceMaintenanceData::vacuum_pump_ps_voltage() const { return p->vacuumPumpPsVoltage_; } -uint16_t PerformanceMaintenanceData::focus_coil_ps_voltage() const +std::uint16_t PerformanceMaintenanceData::focus_coil_ps_voltage() const { return p->focusCoilPsVoltage_; } -uint16_t PerformanceMaintenanceData::filament_ps() const +std::uint16_t PerformanceMaintenanceData::filament_ps() const { return p->filamentPs_; } -uint16_t PerformanceMaintenanceData::klystron_warmup() const +std::uint16_t PerformanceMaintenanceData::klystron_warmup() const { return p->klystronWarmup_; } -uint16_t PerformanceMaintenanceData::transmitter_available() const +std::uint16_t PerformanceMaintenanceData::transmitter_available() const { return p->transmitterAvailable_; } -uint16_t PerformanceMaintenanceData::wg_switch_position() const +std::uint16_t PerformanceMaintenanceData::wg_switch_position() const { return p->wgSwitchPosition_; } -uint16_t PerformanceMaintenanceData::wg_pfn_transfer_interlock() const +std::uint16_t PerformanceMaintenanceData::wg_pfn_transfer_interlock() const { return p->wgPfnTransferInterlock_; } -uint16_t PerformanceMaintenanceData::maintenance_mode() const +std::uint16_t PerformanceMaintenanceData::maintenance_mode() const { return p->maintenanceMode_; } -uint16_t PerformanceMaintenanceData::maintenance_required() const +std::uint16_t PerformanceMaintenanceData::maintenance_required() const { return p->maintenanceRequired_; } -uint16_t PerformanceMaintenanceData::pfn_switch_position() const +std::uint16_t PerformanceMaintenanceData::pfn_switch_position() const { return p->pfnSwitchPosition_; } -uint16_t PerformanceMaintenanceData::modulator_overload() const +std::uint16_t PerformanceMaintenanceData::modulator_overload() const { return p->modulatorOverload_; } -uint16_t PerformanceMaintenanceData::modulator_inv_current() const +std::uint16_t PerformanceMaintenanceData::modulator_inv_current() const { return p->modulatorInvCurrent_; } -uint16_t PerformanceMaintenanceData::modulator_switch_fail() const +std::uint16_t PerformanceMaintenanceData::modulator_switch_fail() const { return p->modulatorSwitchFail_; } -uint16_t PerformanceMaintenanceData::main_power_voltage() const +std::uint16_t PerformanceMaintenanceData::main_power_voltage() const { return p->mainPowerVoltage_; } -uint16_t PerformanceMaintenanceData::charging_system_fail() const +std::uint16_t PerformanceMaintenanceData::charging_system_fail() const { return p->chargingSystemFail_; } -uint16_t PerformanceMaintenanceData::inverse_diode_current() const +std::uint16_t PerformanceMaintenanceData::inverse_diode_current() const { return p->inverseDiodeCurrent_; } -uint16_t PerformanceMaintenanceData::trigger_amplifier() const +std::uint16_t PerformanceMaintenanceData::trigger_amplifier() const { return p->triggerAmplifier_; } -uint16_t PerformanceMaintenanceData::circulator_temperature() const +std::uint16_t PerformanceMaintenanceData::circulator_temperature() const { return p->circulatorTemperature_; } -uint16_t PerformanceMaintenanceData::spectrum_filter_pressure() const +std::uint16_t PerformanceMaintenanceData::spectrum_filter_pressure() const { return p->spectrumFilterPressure_; } -uint16_t PerformanceMaintenanceData::wg_arc_vswr() const +std::uint16_t PerformanceMaintenanceData::wg_arc_vswr() const { return p->wgArcVswr_; } -uint16_t PerformanceMaintenanceData::cabinet_interlock() const +std::uint16_t PerformanceMaintenanceData::cabinet_interlock() const { return p->cabinetInterlock_; } -uint16_t PerformanceMaintenanceData::cabinet_air_temperature() const +std::uint16_t PerformanceMaintenanceData::cabinet_air_temperature() const { return p->cabinetAirTemperature_; } -uint16_t PerformanceMaintenanceData::cabinet_airflow() const +std::uint16_t PerformanceMaintenanceData::cabinet_airflow() const { return p->cabinetAirflow_; } -uint16_t PerformanceMaintenanceData::klystron_current() const +std::uint16_t PerformanceMaintenanceData::klystron_current() const { return p->klystronCurrent_; } -uint16_t PerformanceMaintenanceData::klystron_filament_current() const +std::uint16_t PerformanceMaintenanceData::klystron_filament_current() const { return p->klystronFilamentCurrent_; } -uint16_t PerformanceMaintenanceData::klystron_vacion_current() const +std::uint16_t PerformanceMaintenanceData::klystron_vacion_current() const { return p->klystronVacionCurrent_; } -uint16_t PerformanceMaintenanceData::klystron_air_temperature() const +std::uint16_t PerformanceMaintenanceData::klystron_air_temperature() const { return p->klystronAirTemperature_; } -uint16_t PerformanceMaintenanceData::klystron_airflow() const +std::uint16_t PerformanceMaintenanceData::klystron_airflow() const { return p->klystronAirflow_; } -uint16_t PerformanceMaintenanceData::modulator_switch_maintenance() const +std::uint16_t PerformanceMaintenanceData::modulator_switch_maintenance() const { return p->modulatorSwitchMaintenance_; } -uint16_t PerformanceMaintenanceData::post_charge_regulator_maintenance() const +std::uint16_t +PerformanceMaintenanceData::post_charge_regulator_maintenance() const { return p->postChargeRegulatorMaintenance_; } -uint16_t PerformanceMaintenanceData::wg_pressure_humidity() const +std::uint16_t PerformanceMaintenanceData::wg_pressure_humidity() const { return p->wgPressureHumidity_; } -uint16_t PerformanceMaintenanceData::transmitter_overvoltage() const +std::uint16_t PerformanceMaintenanceData::transmitter_overvoltage() const { return p->transmitterOvervoltage_; } -uint16_t PerformanceMaintenanceData::transmitter_overcurrent() const +std::uint16_t PerformanceMaintenanceData::transmitter_overcurrent() const { return p->transmitterOvercurrent_; } -uint16_t PerformanceMaintenanceData::focus_coil_current() const +std::uint16_t PerformanceMaintenanceData::focus_coil_current() const { return p->focusCoilCurrent_; } -uint16_t PerformanceMaintenanceData::focus_coil_airflow() const +std::uint16_t PerformanceMaintenanceData::focus_coil_airflow() const { return p->focusCoilAirflow_; } -uint16_t PerformanceMaintenanceData::oil_temperature() const +std::uint16_t PerformanceMaintenanceData::oil_temperature() const { return p->oilTemperature_; } -uint16_t PerformanceMaintenanceData::prf_limit() const +std::uint16_t PerformanceMaintenanceData::prf_limit() const { return p->prfLimit_; } -uint16_t PerformanceMaintenanceData::transmitter_oil_level() const +std::uint16_t PerformanceMaintenanceData::transmitter_oil_level() const { return p->transmitterOilLevel_; } -uint16_t PerformanceMaintenanceData::transmitter_battery_charging() const +std::uint16_t PerformanceMaintenanceData::transmitter_battery_charging() const { return p->transmitterBatteryCharging_; } -uint16_t PerformanceMaintenanceData::high_voltage_status() const +std::uint16_t PerformanceMaintenanceData::high_voltage_status() const { return p->highVoltageStatus_; } -uint16_t PerformanceMaintenanceData::transmitter_recycling_summary() const +std::uint16_t PerformanceMaintenanceData::transmitter_recycling_summary() const { return p->transmitterRecyclingSummary_; } -uint16_t PerformanceMaintenanceData::transmitter_inoperable() const +std::uint16_t PerformanceMaintenanceData::transmitter_inoperable() const { return p->transmitterInoperable_; } -uint16_t PerformanceMaintenanceData::transmitter_air_filter() const +std::uint16_t PerformanceMaintenanceData::transmitter_air_filter() const { return p->transmitterAirFilter_; } -uint16_t PerformanceMaintenanceData::zero_test_bit(unsigned i) const +std::uint16_t PerformanceMaintenanceData::zero_test_bit(unsigned i) const { - return p->zeroTestBit_[i]; + return p->zeroTestBit_.at(i); } -uint16_t PerformanceMaintenanceData::one_test_bit(unsigned i) const +std::uint16_t PerformanceMaintenanceData::one_test_bit(unsigned i) const { - return p->oneTestBit_[i]; + return p->oneTestBit_.at(i); } -uint16_t PerformanceMaintenanceData::xmtr_spip_interface() const +std::uint16_t PerformanceMaintenanceData::xmtr_spip_interface() const { return p->xmtrSpipInterface_; } -uint16_t PerformanceMaintenanceData::transmitter_summary_status() const +std::uint16_t PerformanceMaintenanceData::transmitter_summary_status() const { return p->transmitterSummaryStatus_; } @@ -869,7 +880,7 @@ float PerformanceMaintenanceData::xmtr_rf_avg_power() const return p->xmtrRfAvgPower_; } -uint32_t PerformanceMaintenanceData::xmtr_recycle_count() const +std::uint32_t PerformanceMaintenanceData::xmtr_recycle_count() const { return p->xmtrRecycleCount_; } @@ -889,108 +900,108 @@ float PerformanceMaintenanceData::xmtr_power_meter_zero() const return p->xmtrPowerMeterZero_; } -uint16_t PerformanceMaintenanceData::ac_unit1_compressor_shut_off() const +std::uint16_t PerformanceMaintenanceData::ac_unit1_compressor_shut_off() const { return p->acUnit1CompressorShutOff_; } -uint16_t PerformanceMaintenanceData::ac_unit2_compressor_shut_off() const +std::uint16_t PerformanceMaintenanceData::ac_unit2_compressor_shut_off() const { return p->acUnit2CompressorShutOff_; } -uint16_t PerformanceMaintenanceData::generator_maintenance_required() const +std::uint16_t PerformanceMaintenanceData::generator_maintenance_required() const { return p->generatorMaintenanceRequired_; } -uint16_t PerformanceMaintenanceData::generator_battery_voltage() const +std::uint16_t PerformanceMaintenanceData::generator_battery_voltage() const { return p->generatorBatteryVoltage_; } -uint16_t PerformanceMaintenanceData::generator_engine() const +std::uint16_t PerformanceMaintenanceData::generator_engine() const { return p->generatorEngine_; } -uint16_t PerformanceMaintenanceData::generator_volt_frequency() const +std::uint16_t PerformanceMaintenanceData::generator_volt_frequency() const { return p->generatorVoltFrequency_; } -uint16_t PerformanceMaintenanceData::power_source() const +std::uint16_t PerformanceMaintenanceData::power_source() const { return p->powerSource_; } -uint16_t PerformanceMaintenanceData::transitional_power_source() const +std::uint16_t PerformanceMaintenanceData::transitional_power_source() const { return p->transitionalPowerSource_; } -uint16_t PerformanceMaintenanceData::generator_auto_run_off_switch() const +std::uint16_t PerformanceMaintenanceData::generator_auto_run_off_switch() const { return p->generatorAutoRunOffSwitch_; } -uint16_t PerformanceMaintenanceData::aircraft_hazard_lighting() const +std::uint16_t PerformanceMaintenanceData::aircraft_hazard_lighting() const { return p->aircraftHazardLighting_; } -uint16_t +std::uint16_t PerformanceMaintenanceData::equipment_shelter_fire_detection_system() const { return p->equipmentShelterFireDetectionSystem_; } -uint16_t PerformanceMaintenanceData::equipment_shelter_fire_smoke() const +std::uint16_t PerformanceMaintenanceData::equipment_shelter_fire_smoke() const { return p->equipmentShelterFireSmoke_; } -uint16_t PerformanceMaintenanceData::generator_shelter_fire_smoke() const +std::uint16_t PerformanceMaintenanceData::generator_shelter_fire_smoke() const { return p->generatorShelterFireSmoke_; } -uint16_t PerformanceMaintenanceData::utility_voltage_frequency() const +std::uint16_t PerformanceMaintenanceData::utility_voltage_frequency() const { return p->utilityVoltageFrequency_; } -uint16_t PerformanceMaintenanceData::site_security_alarm() const +std::uint16_t PerformanceMaintenanceData::site_security_alarm() const { return p->siteSecurityAlarm_; } -uint16_t PerformanceMaintenanceData::security_equipment() const +std::uint16_t PerformanceMaintenanceData::security_equipment() const { return p->securityEquipment_; } -uint16_t PerformanceMaintenanceData::security_system() const +std::uint16_t PerformanceMaintenanceData::security_system() const { return p->securitySystem_; } -uint16_t PerformanceMaintenanceData::receiver_connected_to_antenna() const +std::uint16_t PerformanceMaintenanceData::receiver_connected_to_antenna() const { return p->receiverConnectedToAntenna_; } -uint16_t PerformanceMaintenanceData::radome_hatch() const +std::uint16_t PerformanceMaintenanceData::radome_hatch() const { return p->radomeHatch_; } -uint16_t PerformanceMaintenanceData::ac_unit1_filter_dirty() const +std::uint16_t PerformanceMaintenanceData::ac_unit1_filter_dirty() const { return p->acUnit1FilterDirty_; } -uint16_t PerformanceMaintenanceData::ac_unit2_filter_dirty() const +std::uint16_t PerformanceMaintenanceData::ac_unit2_filter_dirty() const { return p->acUnit2FilterDirty_; } @@ -1040,7 +1051,7 @@ float PerformanceMaintenanceData::spip_neg_15v_ps() const return p->spipNeg15VPs_; } -uint16_t PerformanceMaintenanceData::spip_28v_ps_status() const +std::uint16_t PerformanceMaintenanceData::spip_28v_ps_status() const { return p->spip28VPsStatus_; } @@ -1050,198 +1061,201 @@ float PerformanceMaintenanceData::spip_5v_ps() const return p->spip5VPs_; } -uint16_t PerformanceMaintenanceData::converted_generator_fuel_level() const +std::uint16_t PerformanceMaintenanceData::converted_generator_fuel_level() const { return p->convertedGeneratorFuelLevel_; } -uint16_t PerformanceMaintenanceData::elevation_pos_dead_limit() const +std::uint16_t PerformanceMaintenanceData::elevation_pos_dead_limit() const { return p->elevationPosDeadLimit_; } -uint16_t PerformanceMaintenanceData::_150v_overvoltage() const +std::uint16_t PerformanceMaintenanceData::_150v_overvoltage() const { return p->_150VOvervoltage_; } -uint16_t PerformanceMaintenanceData::_150v_undervoltage() const +std::uint16_t PerformanceMaintenanceData::_150v_undervoltage() const { return p->_150VUndervoltage_; } -uint16_t PerformanceMaintenanceData::elevation_servo_amp_inhibit() const +std::uint16_t PerformanceMaintenanceData::elevation_servo_amp_inhibit() const { return p->elevationServoAmpInhibit_; } -uint16_t PerformanceMaintenanceData::elevation_servo_amp_short_circuit() const +std::uint16_t +PerformanceMaintenanceData::elevation_servo_amp_short_circuit() const { return p->elevationServoAmpShortCircuit_; } -uint16_t PerformanceMaintenanceData::elevation_servo_amp_overtemp() const +std::uint16_t PerformanceMaintenanceData::elevation_servo_amp_overtemp() const { return p->elevationServoAmpOvertemp_; } -uint16_t PerformanceMaintenanceData::elevation_motor_overtemp() const +std::uint16_t PerformanceMaintenanceData::elevation_motor_overtemp() const { return p->elevationMotorOvertemp_; } -uint16_t PerformanceMaintenanceData::elevation_stow_pin() const +std::uint16_t PerformanceMaintenanceData::elevation_stow_pin() const { return p->elevationStowPin_; } -uint16_t PerformanceMaintenanceData::elevation_housing_5v_ps() const +std::uint16_t PerformanceMaintenanceData::elevation_housing_5v_ps() const { return p->elevationHousing5VPs_; } -uint16_t PerformanceMaintenanceData::elevation_neg_dead_limit() const +std::uint16_t PerformanceMaintenanceData::elevation_neg_dead_limit() const { return p->elevationNegDeadLimit_; } -uint16_t PerformanceMaintenanceData::elevation_pos_normal_limit() const +std::uint16_t PerformanceMaintenanceData::elevation_pos_normal_limit() const { return p->elevationPosNormalLimit_; } -uint16_t PerformanceMaintenanceData::elevation_neg_normal_limit() const +std::uint16_t PerformanceMaintenanceData::elevation_neg_normal_limit() const { return p->elevationNegNormalLimit_; } -uint16_t PerformanceMaintenanceData::elevation_encoder_light() const +std::uint16_t PerformanceMaintenanceData::elevation_encoder_light() const { return p->elevationEncoderLight_; } -uint16_t PerformanceMaintenanceData::elevation_gearbox_oil() const +std::uint16_t PerformanceMaintenanceData::elevation_gearbox_oil() const { return p->elevationGearboxOil_; } -uint16_t PerformanceMaintenanceData::elevation_handwheel() const +std::uint16_t PerformanceMaintenanceData::elevation_handwheel() const { return p->elevationHandwheel_; } -uint16_t PerformanceMaintenanceData::elevation_amp_ps() const +std::uint16_t PerformanceMaintenanceData::elevation_amp_ps() const { return p->elevationAmpPs_; } -uint16_t PerformanceMaintenanceData::azimuth_servo_amp_inhibit() const +std::uint16_t PerformanceMaintenanceData::azimuth_servo_amp_inhibit() const { return p->azimuthServoAmpInhibit_; } -uint16_t PerformanceMaintenanceData::azimuth_servo_amp_short_circuit() const +std::uint16_t +PerformanceMaintenanceData::azimuth_servo_amp_short_circuit() const { return p->azimuthServoAmpShortCircuit_; } -uint16_t PerformanceMaintenanceData::azimuth_servo_amp_overtemp() const +std::uint16_t PerformanceMaintenanceData::azimuth_servo_amp_overtemp() const { return p->azimuthServoAmpOvertemp_; } -uint16_t PerformanceMaintenanceData::azimuth_motor_overtemp() const +std::uint16_t PerformanceMaintenanceData::azimuth_motor_overtemp() const { return p->azimuthMotorOvertemp_; } -uint16_t PerformanceMaintenanceData::azimuth_stow_pin() const +std::uint16_t PerformanceMaintenanceData::azimuth_stow_pin() const { return p->azimuthStowPin_; } -uint16_t PerformanceMaintenanceData::azimuth_housing_5v_ps() const +std::uint16_t PerformanceMaintenanceData::azimuth_housing_5v_ps() const { return p->azimuthHousing5VPs_; } -uint16_t PerformanceMaintenanceData::azimuth_encoder_light() const +std::uint16_t PerformanceMaintenanceData::azimuth_encoder_light() const { return p->azimuthEncoderLight_; } -uint16_t PerformanceMaintenanceData::azimuth_gearbox_oil() const +std::uint16_t PerformanceMaintenanceData::azimuth_gearbox_oil() const { return p->azimuthGearboxOil_; } -uint16_t PerformanceMaintenanceData::azimuth_bull_gear_oil() const +std::uint16_t PerformanceMaintenanceData::azimuth_bull_gear_oil() const { return p->azimuthBullGearOil_; } -uint16_t PerformanceMaintenanceData::azimuth_handwheel() const +std::uint16_t PerformanceMaintenanceData::azimuth_handwheel() const { return p->azimuthHandwheel_; } -uint16_t PerformanceMaintenanceData::azimuth_servo_amp_ps() const +std::uint16_t PerformanceMaintenanceData::azimuth_servo_amp_ps() const { return p->azimuthServoAmpPs_; } -uint16_t PerformanceMaintenanceData::servo() const +std::uint16_t PerformanceMaintenanceData::servo() const { return p->servo_; } -uint16_t PerformanceMaintenanceData::pedestal_interlock_switch() const +std::uint16_t PerformanceMaintenanceData::pedestal_interlock_switch() const { return p->pedestalInterlockSwitch_; } -uint16_t PerformanceMaintenanceData::coho_clock() const +std::uint16_t PerformanceMaintenanceData::coho_clock() const { return p->cohoClock_; } -uint16_t +std::uint16_t PerformanceMaintenanceData::rf_generator_frequency_select_oscillator() const { return p->rfGeneratorFrequencySelectOscillator_; } -uint16_t PerformanceMaintenanceData::rf_generator_rf_stalo() const +std::uint16_t PerformanceMaintenanceData::rf_generator_rf_stalo() const { return p->rfGeneratorRfStalo_; } -uint16_t PerformanceMaintenanceData::rf_generator_phase_shifted_coho() const +std::uint16_t +PerformanceMaintenanceData::rf_generator_phase_shifted_coho() const { return p->rfGeneratorPhaseShiftedCoho_; } -uint16_t PerformanceMaintenanceData::_9v_receiver_ps() const +std::uint16_t PerformanceMaintenanceData::_9v_receiver_ps() const { return p->_9VReceiverPs_; } -uint16_t PerformanceMaintenanceData::_5v_receiver_ps() const +std::uint16_t PerformanceMaintenanceData::_5v_receiver_ps() const { return p->_5VReceiverPs_; } -uint16_t PerformanceMaintenanceData::_18v_receiver_ps() const +std::uint16_t PerformanceMaintenanceData::_18v_receiver_ps() const { return p->_18VReceiverPs_; } -uint16_t PerformanceMaintenanceData::neg_9v_receiver_ps() const +std::uint16_t PerformanceMaintenanceData::neg_9v_receiver_ps() const { return p->neg9VReceiverPs_; } -uint16_t PerformanceMaintenanceData::_5v_single_channel_rdaiu_ps() const +std::uint16_t PerformanceMaintenanceData::_5v_single_channel_rdaiu_ps() const { return p->_5VSingleChannelRdaiuPs_; } @@ -1311,22 +1325,22 @@ float PerformanceMaintenanceData::long_pulse_horizontal_dbz0() const return p->longPulseHorizontalDbz0_; } -uint16_t PerformanceMaintenanceData::velocity_processed() const +std::uint16_t PerformanceMaintenanceData::velocity_processed() const { return p->velocityProcessed_; } -uint16_t PerformanceMaintenanceData::width_processed() const +std::uint16_t PerformanceMaintenanceData::width_processed() const { return p->widthProcessed_; } -uint16_t PerformanceMaintenanceData::velocity_rf_gen() const +std::uint16_t PerformanceMaintenanceData::velocity_rf_gen() const { return p->velocityRfGen_; } -uint16_t PerformanceMaintenanceData::width_rf_gen() const +std::uint16_t PerformanceMaintenanceData::width_rf_gen() const { return p->widthRfGen_; } @@ -1391,145 +1405,148 @@ float PerformanceMaintenanceData::vertical_linearity() const return p->verticalLinearity_; } -uint16_t PerformanceMaintenanceData::state_file_read_status() const +std::uint16_t PerformanceMaintenanceData::state_file_read_status() const { return p->stateFileReadStatus_; } -uint16_t PerformanceMaintenanceData::state_file_write_status() const +std::uint16_t PerformanceMaintenanceData::state_file_write_status() const { return p->stateFileWriteStatus_; } -uint16_t PerformanceMaintenanceData::bypass_map_file_read_status() const +std::uint16_t PerformanceMaintenanceData::bypass_map_file_read_status() const { return p->bypassMapFileReadStatus_; } -uint16_t PerformanceMaintenanceData::bypass_map_file_write_status() const +std::uint16_t PerformanceMaintenanceData::bypass_map_file_write_status() const { return p->bypassMapFileWriteStatus_; } -uint16_t PerformanceMaintenanceData::current_adaptation_file_read_status() const +std::uint16_t +PerformanceMaintenanceData::current_adaptation_file_read_status() const { return p->currentAdaptationFileReadStatus_; } -uint16_t +std::uint16_t PerformanceMaintenanceData::current_adaptation_file_write_status() const { return p->currentAdaptationFileWriteStatus_; } -uint16_t PerformanceMaintenanceData::censor_zone_file_read_status() const +std::uint16_t PerformanceMaintenanceData::censor_zone_file_read_status() const { return p->censorZoneFileReadStatus_; } -uint16_t PerformanceMaintenanceData::censor_zone_file_write_status() const +std::uint16_t PerformanceMaintenanceData::censor_zone_file_write_status() const { return p->censorZoneFileWriteStatus_; } -uint16_t PerformanceMaintenanceData::remote_vcp_file_read_status() const +std::uint16_t PerformanceMaintenanceData::remote_vcp_file_read_status() const { return p->remoteVcpFileReadStatus_; } -uint16_t PerformanceMaintenanceData::remote_vcp_file_write_status() const +std::uint16_t PerformanceMaintenanceData::remote_vcp_file_write_status() const { return p->remoteVcpFileWriteStatus_; } -uint16_t +std::uint16_t PerformanceMaintenanceData::baseline_adaptation_file_read_status() const { return p->baselineAdaptationFileReadStatus_; } -uint16_t PerformanceMaintenanceData::read_status_of_prf_sets() const +std::uint16_t PerformanceMaintenanceData::read_status_of_prf_sets() const { return p->readStatusOfPrfSets_; } -uint16_t PerformanceMaintenanceData::clutter_filter_map_file_read_status() const +std::uint16_t +PerformanceMaintenanceData::clutter_filter_map_file_read_status() const { return p->clutterFilterMapFileReadStatus_; } -uint16_t +std::uint16_t PerformanceMaintenanceData::clutter_filter_map_file_write_status() const { return p->clutterFilterMapFileWriteStatus_; } -uint16_t PerformanceMaintenanceData::general_disk_io_error() const +std::uint16_t PerformanceMaintenanceData::general_disk_io_error() const { return p->generalDiskIoError_; } -uint8_t PerformanceMaintenanceData::rsp_status() const +std::uint8_t PerformanceMaintenanceData::rsp_status() const { return p->rspStatus_; } -uint8_t PerformanceMaintenanceData::cpu1_temperature() const +std::uint8_t PerformanceMaintenanceData::cpu1_temperature() const { return p->cpu1Temperature_; } -uint8_t PerformanceMaintenanceData::cpu2_temperature() const +std::uint8_t PerformanceMaintenanceData::cpu2_temperature() const { return p->cpu2Temperature_; } -uint16_t PerformanceMaintenanceData::rsp_motherboard_power() const +std::uint16_t PerformanceMaintenanceData::rsp_motherboard_power() const { return p->rspMotherboardPower_; } -uint16_t PerformanceMaintenanceData::spip_comm_status() const +std::uint16_t PerformanceMaintenanceData::spip_comm_status() const { return p->spipCommStatus_; } -uint16_t PerformanceMaintenanceData::hci_comm_status() const +std::uint16_t PerformanceMaintenanceData::hci_comm_status() const { return p->hciCommStatus_; } -uint16_t PerformanceMaintenanceData::signal_processor_command_status() const +std::uint16_t +PerformanceMaintenanceData::signal_processor_command_status() const { return p->signalProcessorCommandStatus_; } -uint16_t PerformanceMaintenanceData::ame_communication_status() const +std::uint16_t PerformanceMaintenanceData::ame_communication_status() const { return p->ameCommunicationStatus_; } -uint16_t PerformanceMaintenanceData::rms_link_status() const +std::uint16_t PerformanceMaintenanceData::rms_link_status() const { return p->rmsLinkStatus_; } -uint16_t PerformanceMaintenanceData::rpg_link_status() const +std::uint16_t PerformanceMaintenanceData::rpg_link_status() const { return p->rpgLinkStatus_; } -uint16_t PerformanceMaintenanceData::interpanel_link_status() const +std::uint16_t PerformanceMaintenanceData::interpanel_link_status() const { return p->interpanelLinkStatus_; } -uint32_t PerformanceMaintenanceData::performance_check_time() const +std::uint32_t PerformanceMaintenanceData::performance_check_time() const { return p->performanceCheckTime_; } -uint16_t PerformanceMaintenanceData::version() const +std::uint16_t PerformanceMaintenanceData::version() const { return p->version_; } @@ -1538,9 +1555,10 @@ bool PerformanceMaintenanceData::Parse(std::istream& is) { logger_->trace("Parsing Performance/Maintenance Data (Message Type 3)"); - bool messageValid = true; - size_t bytesRead = 0; + bool messageValid = true; + std::size_t bytesRead = 0; + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers): Readability p->rcpString_.resize(16); // Communications @@ -1684,10 +1702,10 @@ bool PerformanceMaintenanceData::Parse(std::istream& is) is.read(reinterpret_cast(&p->transmitterInoperable_), 2); // 184 is.read(reinterpret_cast(&p->transmitterAirFilter_), 2); // 185 is.read(reinterpret_cast(&p->zeroTestBit_[0]), - p->zeroTestBit_.size() * 2); // 186-193 + static_cast(p->zeroTestBit_.size() * 2)); // 186-193 is.read(reinterpret_cast(&p->oneTestBit_[0]), - p->oneTestBit_.size() * 2); // 194-201 - is.read(reinterpret_cast(&p->xmtrSpipInterface_), 2); // 202 + static_cast(p->oneTestBit_.size() * 2)); // 194-201 + is.read(reinterpret_cast(&p->xmtrSpipInterface_), 2); // 202 is.read(reinterpret_cast(&p->transmitterSummaryStatus_), 2); // 203 is.seekg(2, std::ios_base::cur); // 204 is.read(reinterpret_cast(&p->transmitterRfPower_), 4); // 205-206 @@ -1882,6 +1900,8 @@ bool PerformanceMaintenanceData::Parse(std::istream& is) bytesRead += 960; + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + // Communications p->loopBackSetStatus_ = ntohs(p->loopBackSetStatus_); p->t1OutputFrames_ = ntohl(p->t1OutputFrames_); @@ -2190,6 +2210,4 @@ PerformanceMaintenanceData::Create(Level2MessageHeader&& header, return message; } -} // namespace rda -} // namespace wsr88d -} // namespace scwx +} // namespace scwx::wsr88d::rda diff --git a/wxdata/source/scwx/wsr88d/rda/rda_adaptation_data.cpp b/wxdata/source/scwx/wsr88d/rda/rda_adaptation_data.cpp index aff8664a..05887f2a 100644 --- a/wxdata/source/scwx/wsr88d/rda/rda_adaptation_data.cpp +++ b/wxdata/source/scwx/wsr88d/rda/rda_adaptation_data.cpp @@ -1,11 +1,7 @@ #include #include -namespace scwx -{ -namespace wsr88d -{ -namespace rda +namespace scwx::wsr88d::rda { static const std::string logPrefix_ = "scwx::wsr88d::rda::rda_adaptation_data"; @@ -13,30 +9,26 @@ static const auto logger_ = util::Logger::Create(logPrefix_); struct AntManualSetup { - int32_t ielmin_; - int32_t ielmax_; - uint32_t fazvelmax_; - uint32_t felvelmax_; - int32_t igndHgt_; - uint32_t iradHgt_; - - AntManualSetup() : - ielmin_ {0}, - ielmax_ {0}, - fazvelmax_ {0}, - felvelmax_ {0}, - igndHgt_ {0}, - iradHgt_ {0} - { - } + std::int32_t ielmin_ {0}; + std::int32_t ielmax_ {0}; + std::uint32_t fazvelmax_ {0}; + std::uint32_t felvelmax_ {0}; + std::int32_t igndHgt_ {0}; + std::uint32_t iradHgt_ {0}; }; -class RdaAdaptationDataImpl +class RdaAdaptationData::Impl { public: - explicit RdaAdaptationDataImpl() = default; - ~RdaAdaptationDataImpl() = default; + explicit Impl() = default; + ~Impl() = default; + Impl(const Impl&) = delete; + Impl& operator=(const Impl&) = delete; + Impl(const Impl&&) = delete; + Impl& operator=(const Impl&&) = delete; + + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) std::string adapFileName_ {}; std::string adapFormat_ {}; std::string adapRevision_ {}; @@ -65,27 +57,27 @@ public: bool specFilterInstalled_ {false}; bool tpsInstalled_ {false}; bool rmsInstalled_ {false}; - uint32_t aHvdlTstInt_ {0}; - uint32_t aRpgLtInt_ {0}; - uint32_t aMinStabUtilPwrTime_ {0}; - uint32_t aGenAutoExerInterval_ {0}; - uint32_t aUtilPwrSwReqInterval_ {0}; + std::uint32_t aHvdlTstInt_ {0}; + std::uint32_t aRpgLtInt_ {0}; + std::uint32_t aMinStabUtilPwrTime_ {0}; + std::uint32_t aGenAutoExerInterval_ {0}; + std::uint32_t aUtilPwrSwReqInterval_ {0}; float aLowFuelLevel_ {0.0f}; - uint32_t configChanNumber_ {0}; - uint32_t redundantChanConfig_ {0}; + std::uint32_t configChanNumber_ {0}; + std::uint32_t redundantChanConfig_ {0}; std::array attenTable_ {0.0f}; std::map pathLosses_ {}; float vTsCw_ {0.0f}; std::array hRnscale_ {0.0f}; std::array atmos_ {0.0f}; std::array elIndex_ {0.0f}; - uint32_t tfreqMhz_ {0}; + std::uint32_t tfreqMhz_ {0}; float baseDataTcn_ {0.0f}; float reflDataTover_ {0.0f}; float tarHDbz0Lp_ {0.0f}; float tarVDbz0Lp_ {0.0f}; - uint32_t initPhiDp_ {0}; - uint32_t normInitPhiDp_ {0}; + std::uint32_t initPhiDp_ {0}; + std::uint32_t normInitPhiDp_ {0}; float lxLp_ {0.0f}; float lxSp_ {0.0f}; float meteorParam_ {0.0f}; @@ -93,9 +85,9 @@ public: float velDegradLimit_ {0.0f}; float wthDegradLimit_ {0.0f}; float hNoisetempDgradLimit_ {0.0f}; - uint32_t hMinNoisetemp_ {0}; + std::uint32_t hMinNoisetemp_ {0}; float vNoisetempDgradLimit_ {0.0f}; - uint32_t vMinNoisetemp_ {0}; + std::uint32_t vMinNoisetemp_ {0}; float klyDegradeLimit_ {0.0f}; float tsCoho_ {0.0f}; float hTsCw_ {0.0f}; @@ -112,19 +104,19 @@ public: float vDbz0DeltaLimit_ {0.0f}; float tarHDbz0Sp_ {0.0f}; float tarVDbz0Sp_ {0.0f}; - uint32_t deltaprf_ {0}; - uint32_t tauSp_ {0}; - uint32_t tauLp_ {0}; - uint32_t ncDeadValue_ {0}; - uint32_t tauRfSp_ {0}; - uint32_t tauRfLp_ {0}; + std::uint32_t deltaprf_ {0}; + std::uint32_t tauSp_ {0}; + std::uint32_t tauLp_ {0}; + std::uint32_t ncDeadValue_ {0}; + std::uint32_t tauRfSp_ {0}; + std::uint32_t tauRfLp_ {0}; float seg1Lim_ {0.0f}; float slatsec_ {0.0f}; float slonsec_ {0.0f}; - uint32_t slatdeg_ {0}; - uint32_t slatmin_ {0}; - uint32_t slondeg_ {0}; - uint32_t slonmin_ {0}; + std::uint32_t slatdeg_ {0}; + std::uint32_t slatmin_ {0}; + std::uint32_t slondeg_ {0}; + std::uint32_t slonmin_ {0}; char slatdir_ {0}; char slondir_ {0}; double digRcvrClockFreq_ {0.0}; @@ -155,16 +147,16 @@ public: float azEncoderAlignment_ {0.0f}; float elEncoderAlignment_ {0.0f}; std::string refinedPark_ {}; - uint32_t rvp8nvIwaveguideLength_ {0}; + std::uint32_t rvp8nvIwaveguideLength_ {0}; std::array vRnscale_ {0.0f}; float velDataTover_ {0.0f}; float widthDataTover_ {0.0f}; float dopplerRangeStart_ {0.0f}; - uint32_t maxElIndex_ {0}; + std::uint32_t maxElIndex_ {0}; float seg2Lim_ {0.0f}; float seg3Lim_ {0.0f}; float seg4Lim_ {0.0f}; - uint32_t nbrElSegments_ {0}; + std::uint32_t nbrElSegments_ {0}; float hNoiseLong_ {0.0f}; float antNoiseTemp_ {0.0f}; float hNoiseShort_ {0.0f}; @@ -196,22 +188,23 @@ public: float rcvrModMinTemp_ {0.0f}; float biteModMaxTemp_ {0.0f}; float biteModMinTemp_ {0.0f}; - uint32_t defaultPolarization_ {0}; + std::uint32_t defaultPolarization_ {0}; float trLimitDgradLimit_ {0.0f}; float trLimitFailLimit_ {0.0f}; bool rfpStepperEnabled_ {false}; float ameCurrentTolerance_ {0.0f}; - uint32_t hOnlyPolarization_ {0}; - uint32_t vOnlyPolarization_ {0}; + std::uint32_t hOnlyPolarization_ {0}; + std::uint32_t vOnlyPolarization_ {0}; float sunBias_ {0.0f}; float aMinShelterTempWarn_ {0.0f}; float powerMeterZero_ {0.0f}; float txbBaseline_ {0.0f}; float txbAlarmThresh_ {0.0f}; + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) }; RdaAdaptationData::RdaAdaptationData() : - Level2Message(), p(std::make_unique()) + Level2Message(), p(std::make_unique()) { } RdaAdaptationData::~RdaAdaptationData() = default; @@ -277,7 +270,7 @@ float RdaAdaptationData::parkel() const float RdaAdaptationData::a_fuel_conv(unsigned i) const { - return p->aFuelConv_[i]; + return p->aFuelConv_.at(i); } float RdaAdaptationData::a_min_shelter_temp() const @@ -360,27 +353,27 @@ bool RdaAdaptationData::rms_installed() const return p->rmsInstalled_; } -uint32_t RdaAdaptationData::a_hvdl_tst_int() const +std::uint32_t RdaAdaptationData::a_hvdl_tst_int() const { return p->aHvdlTstInt_; } -uint32_t RdaAdaptationData::a_rpg_lt_int() const +std::uint32_t RdaAdaptationData::a_rpg_lt_int() const { return p->aRpgLtInt_; } -uint32_t RdaAdaptationData::a_min_stab_util_pwr_time() const +std::uint32_t RdaAdaptationData::a_min_stab_util_pwr_time() const { return p->aMinStabUtilPwrTime_; } -uint32_t RdaAdaptationData::a_gen_auto_exer_interval() const +std::uint32_t RdaAdaptationData::a_gen_auto_exer_interval() const { return p->aGenAutoExerInterval_; } -uint32_t RdaAdaptationData::a_util_pwr_sw_req_interval() const +std::uint32_t RdaAdaptationData::a_util_pwr_sw_req_interval() const { return p->aUtilPwrSwReqInterval_; } @@ -390,19 +383,19 @@ float RdaAdaptationData::a_low_fuel_level() const return p->aLowFuelLevel_; } -uint32_t RdaAdaptationData::config_chan_number() const +std::uint32_t RdaAdaptationData::config_chan_number() const { return p->configChanNumber_; } -uint32_t RdaAdaptationData::redundant_chan_config() const +std::uint32_t RdaAdaptationData::redundant_chan_config() const { return p->redundantChanConfig_; } float RdaAdaptationData::atten_table(unsigned i) const { - return p->attenTable_[i]; + return p->attenTable_.at(i); } float RdaAdaptationData::path_losses(unsigned i) const @@ -412,41 +405,49 @@ float RdaAdaptationData::path_losses(unsigned i) const float RdaAdaptationData::h_coupler_xmt_loss() const { + // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers) return path_losses(29); } float RdaAdaptationData::h_coupler_cw_loss() const { + // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers) return path_losses(48); } float RdaAdaptationData::v_coupler_xmt_loss() const { + // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers) return path_losses(49); } float RdaAdaptationData::ame_ts_bias() const { + // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers) return path_losses(51); } float RdaAdaptationData::v_coupler_cw_loss() const { + // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers) return path_losses(53); } float RdaAdaptationData::pwr_sense_bias() const { + // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers) return path_losses(56); } float RdaAdaptationData::ame_v_noise_enr() const { + // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers) return path_losses(57); } float RdaAdaptationData::chan_cal_diff() const { + // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers) return path_losses(70); } @@ -457,20 +458,20 @@ float RdaAdaptationData::v_ts_cw() const float RdaAdaptationData::h_rnscale(unsigned i) const { - return p->hRnscale_[i]; + return p->hRnscale_.at(i); } float RdaAdaptationData::atmos(unsigned i) const { - return p->atmos_[i]; + return p->atmos_.at(i); } float RdaAdaptationData::el_index(unsigned i) const { - return p->elIndex_[i]; + return p->elIndex_.at(i); } -uint32_t RdaAdaptationData::tfreq_mhz() const +std::uint32_t RdaAdaptationData::tfreq_mhz() const { return p->tfreqMhz_; } @@ -495,12 +496,12 @@ float RdaAdaptationData::tar_v_dbz0_lp() const return p->tarVDbz0Lp_; } -uint32_t RdaAdaptationData::init_phi_dp() const +std::uint32_t RdaAdaptationData::init_phi_dp() const { return p->initPhiDp_; } -uint32_t RdaAdaptationData::norm_init_phi_dp() const +std::uint32_t RdaAdaptationData::norm_init_phi_dp() const { return p->normInitPhiDp_; } @@ -540,7 +541,7 @@ float RdaAdaptationData::h_noisetemp_dgrad_limit() const return p->hNoisetempDgradLimit_; } -uint32_t RdaAdaptationData::h_min_noisetemp() const +std::uint32_t RdaAdaptationData::h_min_noisetemp() const { return p->hMinNoisetemp_; } @@ -550,7 +551,7 @@ float RdaAdaptationData::v_noisetemp_dgrad_limit() const return p->vNoisetempDgradLimit_; } -uint32_t RdaAdaptationData::v_min_noisetemp() const +std::uint32_t RdaAdaptationData::v_min_noisetemp() const { return p->vMinNoisetemp_; } @@ -635,32 +636,32 @@ float RdaAdaptationData::tar_v_dbz0_sp() const return p->tarVDbz0Sp_; } -uint32_t RdaAdaptationData::deltaprf() const +std::uint32_t RdaAdaptationData::deltaprf() const { return p->deltaprf_; } -uint32_t RdaAdaptationData::tau_sp() const +std::uint32_t RdaAdaptationData::tau_sp() const { return p->tauSp_; } -uint32_t RdaAdaptationData::tau_lp() const +std::uint32_t RdaAdaptationData::tau_lp() const { return p->tauLp_; } -uint32_t RdaAdaptationData::nc_dead_value() const +std::uint32_t RdaAdaptationData::nc_dead_value() const { return p->ncDeadValue_; } -uint32_t RdaAdaptationData::tau_rf_sp() const +std::uint32_t RdaAdaptationData::tau_rf_sp() const { return p->tauRfSp_; } -uint32_t RdaAdaptationData::tau_rf_lp() const +std::uint32_t RdaAdaptationData::tau_rf_lp() const { return p->tauRfLp_; } @@ -680,22 +681,22 @@ float RdaAdaptationData::slonsec() const return p->slonsec_; } -uint32_t RdaAdaptationData::slatdeg() const +std::uint32_t RdaAdaptationData::slatdeg() const { return p->slatdeg_; } -uint32_t RdaAdaptationData::slatmin() const +std::uint32_t RdaAdaptationData::slatmin() const { return p->slatmin_; } -uint32_t RdaAdaptationData::slondeg() const +std::uint32_t RdaAdaptationData::slondeg() const { return p->slondeg_; } -uint32_t RdaAdaptationData::slonmin() const +std::uint32_t RdaAdaptationData::slonmin() const { return p->slonmin_; } @@ -738,31 +739,31 @@ std::string RdaAdaptationData::site_name() const float RdaAdaptationData::ant_manual_setup_ielmin() const { constexpr float SCALE = 360.0f / 65536.0f; - return p->antManualSetup_.ielmin_ * SCALE; + return static_cast(p->antManualSetup_.ielmin_) * SCALE; } float RdaAdaptationData::ant_manual_setup_ielmax() const { constexpr float SCALE = 360.0f / 65536.0f; - return p->antManualSetup_.ielmax_ * SCALE; + return static_cast(p->antManualSetup_.ielmax_) * SCALE; } -uint32_t RdaAdaptationData::ant_manual_setup_fazvelmax() const +std::uint32_t RdaAdaptationData::ant_manual_setup_fazvelmax() const { return p->antManualSetup_.fazvelmax_; } -uint32_t RdaAdaptationData::ant_manual_setup_felvelmax() const +std::uint32_t RdaAdaptationData::ant_manual_setup_felvelmax() const { return p->antManualSetup_.felvelmax_; } -int32_t RdaAdaptationData::ant_manual_setup_ignd_hgt() const +std::int32_t RdaAdaptationData::ant_manual_setup_ignd_hgt() const { return p->antManualSetup_.igndHgt_; } -uint32_t RdaAdaptationData::ant_manual_setup_irad_hgt() const +std::uint32_t RdaAdaptationData::ant_manual_setup_irad_hgt() const { return p->antManualSetup_.iradHgt_; } @@ -877,14 +878,14 @@ std::string RdaAdaptationData::refined_park() const return p->refinedPark_; } -uint32_t RdaAdaptationData::rvp8nv_iwaveguide_length() const +std::uint32_t RdaAdaptationData::rvp8nv_iwaveguide_length() const { return p->rvp8nvIwaveguideLength_; } float RdaAdaptationData::v_rnscale(unsigned i) const { - return p->vRnscale_[i]; + return p->vRnscale_.at(i); } float RdaAdaptationData::vel_data_tover() const @@ -902,7 +903,7 @@ float RdaAdaptationData::doppler_range_start() const return p->dopplerRangeStart_; } -uint32_t RdaAdaptationData::max_el_index() const +std::uint32_t RdaAdaptationData::max_el_index() const { return p->maxElIndex_; } @@ -922,7 +923,7 @@ float RdaAdaptationData::seg4_lim() const return p->seg4Lim_; } -uint32_t RdaAdaptationData::nbr_el_segments() const +std::uint32_t RdaAdaptationData::nbr_el_segments() const { return p->nbrElSegments_; } @@ -1082,7 +1083,7 @@ float RdaAdaptationData::bite_mod_min_temp() const return p->biteModMinTemp_; } -uint32_t RdaAdaptationData::default_polarization() const +std::uint32_t RdaAdaptationData::default_polarization() const { return p->defaultPolarization_; } @@ -1107,12 +1108,12 @@ float RdaAdaptationData::ame_current_tolerance() const return p->ameCurrentTolerance_; } -uint32_t RdaAdaptationData::h_only_polarization() const +std::uint32_t RdaAdaptationData::h_only_polarization() const { return p->hOnlyPolarization_; } -uint32_t RdaAdaptationData::v_only_polarization() const +std::uint32_t RdaAdaptationData::v_only_polarization() const { return p->vOnlyPolarization_; } @@ -1146,9 +1147,10 @@ bool RdaAdaptationData::Parse(std::istream& is) { logger_->trace("Parsing RDA Adaptation Data (Message Type 18)"); - bool messageValid = true; - size_t bytesRead = 0; + bool messageValid = true; + std::size_t bytesRead = 0; + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers): Readability p->adapFileName_.resize(12); p->adapFormat_.resize(4); p->adapRevision_.resize(4); @@ -1171,7 +1173,7 @@ bool RdaAdaptationData::Parse(std::istream& is) is.read(reinterpret_cast(&p->parkel_), 4); // 64-67 is.read(reinterpret_cast(&p->aFuelConv_[0]), - p->aFuelConv_.size() * 4); // 68-111 + static_cast(p->aFuelConv_.size() * 4)); // 68-111 is.read(reinterpret_cast(&p->aMinShelterTemp_), 4); // 112-115 is.read(reinterpret_cast(&p->aMaxShelterTemp_), 4); // 116-119 @@ -1209,7 +1211,7 @@ bool RdaAdaptationData::Parse(std::istream& is) is.read(reinterpret_cast(&p->redundantChanConfig_), 4); // 224-227 is.read(reinterpret_cast(&p->attenTable_[0]), - p->attenTable_.size() * 4); // 228-643 + static_cast(p->attenTable_.size() * 4)); // 228-643 is.seekg(24, std::ios_base::cur); // 644-667 is.read(reinterpret_cast(&p->pathLosses_[7]), 4); // 668-671 @@ -1262,13 +1264,13 @@ bool RdaAdaptationData::Parse(std::istream& is) is.read(reinterpret_cast(&p->vTsCw_), 4); // 936-939 is.read(reinterpret_cast(&p->hRnscale_[0]), - p->hRnscale_.size() * 4); // 940-991 + static_cast(p->hRnscale_.size() * 4)); // 940-991 is.read(reinterpret_cast(&p->atmos_[0]), - p->atmos_.size() * 4); // 992-1043 + static_cast(p->atmos_.size() * 4)); // 992-1043 is.read(reinterpret_cast(&p->elIndex_[0]), - p->elIndex_.size() * 4); // 1044-1091 + static_cast(p->elIndex_.size() * 4)); // 1044-1091 is.read(reinterpret_cast(&p->tfreqMhz_), 4); // 1092-1095 is.read(reinterpret_cast(&p->baseDataTcn_), 4); // 1096-1099 @@ -1394,11 +1396,12 @@ bool RdaAdaptationData::Parse(std::istream& is) 4); // 8696-8699 is.read(reinterpret_cast(&p->vRnscale_[0]), - 11 * 4); // 8700-8743 + static_cast(11 * 4)); // 8700-8743 - is.read(reinterpret_cast(&p->velDataTover_), 4); // 8744-8747 - is.read(reinterpret_cast(&p->widthDataTover_), 4); // 8748-8751 - is.read(reinterpret_cast(&p->vRnscale_[11]), 2 * 4); // 8752-8759 + is.read(reinterpret_cast(&p->velDataTover_), 4); // 8744-8747 + is.read(reinterpret_cast(&p->widthDataTover_), 4); // 8748-8751 + is.read(reinterpret_cast(&p->vRnscale_[11]), + static_cast(2 * 4)); // 8752-8759 is.seekg(4, std::ios_base::cur); // 8760-8763 @@ -1468,6 +1471,8 @@ bool RdaAdaptationData::Parse(std::istream& is) bytesRead += 9468; + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + p->lowerPreLimit_ = SwapFloat(p->lowerPreLimit_); p->azLat_ = SwapFloat(p->azLat_); p->upperPreLimit_ = SwapFloat(p->upperPreLimit_); @@ -1507,84 +1512,87 @@ bool RdaAdaptationData::Parse(std::istream& is) SwapArray(p->atmos_); SwapArray(p->elIndex_); - p->tfreqMhz_ = ntohl(p->tfreqMhz_); - p->baseDataTcn_ = SwapFloat(p->baseDataTcn_); - p->reflDataTover_ = SwapFloat(p->reflDataTover_); - p->tarHDbz0Lp_ = SwapFloat(p->tarHDbz0Lp_); - p->tarVDbz0Lp_ = SwapFloat(p->tarVDbz0Lp_); - p->initPhiDp_ = ntohl(p->initPhiDp_); - p->normInitPhiDp_ = ntohl(p->normInitPhiDp_); - p->lxLp_ = SwapFloat(p->lxLp_); - p->lxSp_ = SwapFloat(p->lxSp_); - p->meteorParam_ = SwapFloat(p->meteorParam_); - p->antennaGain_ = SwapFloat(p->antennaGain_); - p->velDegradLimit_ = SwapFloat(p->velDegradLimit_); - p->wthDegradLimit_ = SwapFloat(p->wthDegradLimit_); - p->hNoisetempDgradLimit_ = SwapFloat(p->hNoisetempDgradLimit_); - p->hMinNoisetemp_ = ntohl(p->hMinNoisetemp_); - p->vNoisetempDgradLimit_ = SwapFloat(p->vNoisetempDgradLimit_); - p->vMinNoisetemp_ = ntohl(p->vMinNoisetemp_); - p->klyDegradeLimit_ = SwapFloat(p->klyDegradeLimit_); - p->tsCoho_ = SwapFloat(p->tsCoho_); - p->hTsCw_ = SwapFloat(p->hTsCw_); - p->tsStalo_ = SwapFloat(p->tsStalo_); - p->ameHNoiseEnr_ = SwapFloat(p->ameHNoiseEnr_); - p->xmtrPeakPwrHighLimit_ = SwapFloat(p->xmtrPeakPwrHighLimit_); - p->xmtrPeakPwrLowLimit_ = SwapFloat(p->xmtrPeakPwrLowLimit_); - p->hDbz0DeltaLimit_ = SwapFloat(p->hDbz0DeltaLimit_); - p->threshold1_ = SwapFloat(p->threshold1_); - p->threshold2_ = SwapFloat(p->threshold2_); - p->clutSuppDgradLim_ = SwapFloat(p->clutSuppDgradLim_); - p->range0Value_ = SwapFloat(p->range0Value_); - p->xmtrPwrMtrScale_ = SwapFloat(p->xmtrPwrMtrScale_); - p->vDbz0DeltaLimit_ = SwapFloat(p->vDbz0DeltaLimit_); - p->tarHDbz0Sp_ = SwapFloat(p->tarHDbz0Sp_); - p->tarVDbz0Sp_ = SwapFloat(p->tarVDbz0Sp_); - p->deltaprf_ = ntohl(p->deltaprf_); - p->tauSp_ = ntohl(p->tauSp_); - p->tauLp_ = ntohl(p->tauLp_); - p->ncDeadValue_ = ntohl(p->ncDeadValue_); - p->tauRfSp_ = ntohl(p->tauRfSp_); - p->tauRfLp_ = ntohl(p->tauRfLp_); - p->seg1Lim_ = SwapFloat(p->seg1Lim_); - p->slatsec_ = SwapFloat(p->slatsec_); - p->slonsec_ = SwapFloat(p->slonsec_); - p->slatdeg_ = ntohl(p->slatdeg_); - p->slatmin_ = ntohl(p->slatmin_); - p->slondeg_ = ntohl(p->slondeg_); - p->slonmin_ = ntohl(p->slonmin_); - p->digRcvrClockFreq_ = SwapDouble(p->digRcvrClockFreq_); - p->cohoFreq_ = SwapDouble(p->cohoFreq_); - p->azCorrectionFactor_ = SwapFloat(p->azCorrectionFactor_); - p->elCorrectionFactor_ = SwapFloat(p->elCorrectionFactor_); - p->antManualSetup_.ielmin_ = ntohl(p->antManualSetup_.ielmin_); - p->antManualSetup_.ielmax_ = ntohl(p->antManualSetup_.ielmax_); + p->tfreqMhz_ = ntohl(p->tfreqMhz_); + p->baseDataTcn_ = SwapFloat(p->baseDataTcn_); + p->reflDataTover_ = SwapFloat(p->reflDataTover_); + p->tarHDbz0Lp_ = SwapFloat(p->tarHDbz0Lp_); + p->tarVDbz0Lp_ = SwapFloat(p->tarVDbz0Lp_); + p->initPhiDp_ = ntohl(p->initPhiDp_); + p->normInitPhiDp_ = ntohl(p->normInitPhiDp_); + p->lxLp_ = SwapFloat(p->lxLp_); + p->lxSp_ = SwapFloat(p->lxSp_); + p->meteorParam_ = SwapFloat(p->meteorParam_); + p->antennaGain_ = SwapFloat(p->antennaGain_); + p->velDegradLimit_ = SwapFloat(p->velDegradLimit_); + p->wthDegradLimit_ = SwapFloat(p->wthDegradLimit_); + p->hNoisetempDgradLimit_ = SwapFloat(p->hNoisetempDgradLimit_); + p->hMinNoisetemp_ = ntohl(p->hMinNoisetemp_); + p->vNoisetempDgradLimit_ = SwapFloat(p->vNoisetempDgradLimit_); + p->vMinNoisetemp_ = ntohl(p->vMinNoisetemp_); + p->klyDegradeLimit_ = SwapFloat(p->klyDegradeLimit_); + p->tsCoho_ = SwapFloat(p->tsCoho_); + p->hTsCw_ = SwapFloat(p->hTsCw_); + p->tsStalo_ = SwapFloat(p->tsStalo_); + p->ameHNoiseEnr_ = SwapFloat(p->ameHNoiseEnr_); + p->xmtrPeakPwrHighLimit_ = SwapFloat(p->xmtrPeakPwrHighLimit_); + p->xmtrPeakPwrLowLimit_ = SwapFloat(p->xmtrPeakPwrLowLimit_); + p->hDbz0DeltaLimit_ = SwapFloat(p->hDbz0DeltaLimit_); + p->threshold1_ = SwapFloat(p->threshold1_); + p->threshold2_ = SwapFloat(p->threshold2_); + p->clutSuppDgradLim_ = SwapFloat(p->clutSuppDgradLim_); + p->range0Value_ = SwapFloat(p->range0Value_); + p->xmtrPwrMtrScale_ = SwapFloat(p->xmtrPwrMtrScale_); + p->vDbz0DeltaLimit_ = SwapFloat(p->vDbz0DeltaLimit_); + p->tarHDbz0Sp_ = SwapFloat(p->tarHDbz0Sp_); + p->tarVDbz0Sp_ = SwapFloat(p->tarVDbz0Sp_); + p->deltaprf_ = ntohl(p->deltaprf_); + p->tauSp_ = ntohl(p->tauSp_); + p->tauLp_ = ntohl(p->tauLp_); + p->ncDeadValue_ = ntohl(p->ncDeadValue_); + p->tauRfSp_ = ntohl(p->tauRfSp_); + p->tauRfLp_ = ntohl(p->tauRfLp_); + p->seg1Lim_ = SwapFloat(p->seg1Lim_); + p->slatsec_ = SwapFloat(p->slatsec_); + p->slonsec_ = SwapFloat(p->slonsec_); + p->slatdeg_ = ntohl(p->slatdeg_); + p->slatmin_ = ntohl(p->slatmin_); + p->slondeg_ = ntohl(p->slondeg_); + p->slonmin_ = ntohl(p->slonmin_); + p->digRcvrClockFreq_ = SwapDouble(p->digRcvrClockFreq_); + p->cohoFreq_ = SwapDouble(p->cohoFreq_); + p->azCorrectionFactor_ = SwapFloat(p->azCorrectionFactor_); + p->elCorrectionFactor_ = SwapFloat(p->elCorrectionFactor_); + p->antManualSetup_.ielmin_ = + static_cast(ntohl(p->antManualSetup_.ielmin_)); + p->antManualSetup_.ielmax_ = + static_cast(ntohl(p->antManualSetup_.ielmax_)); p->antManualSetup_.fazvelmax_ = ntohl(p->antManualSetup_.fazvelmax_); p->antManualSetup_.felvelmax_ = ntohl(p->antManualSetup_.felvelmax_); - p->antManualSetup_.igndHgt_ = ntohl(p->antManualSetup_.igndHgt_); - p->antManualSetup_.iradHgt_ = ntohl(p->antManualSetup_.iradHgt_); - p->azPosSustainDrive_ = SwapFloat(p->azPosSustainDrive_); - p->azNegSustainDrive_ = SwapFloat(p->azNegSustainDrive_); - p->azNomPosDriveSlope_ = SwapFloat(p->azNomPosDriveSlope_); - p->azNomNegDriveSlope_ = SwapFloat(p->azNomNegDriveSlope_); - p->azFeedbackSlope_ = SwapFloat(p->azFeedbackSlope_); - p->elPosSustainDrive_ = SwapFloat(p->elPosSustainDrive_); - p->elNegSustainDrive_ = SwapFloat(p->elNegSustainDrive_); - p->elNomPosDriveSlope_ = SwapFloat(p->elNomPosDriveSlope_); - p->elNomNegDriveSlope_ = SwapFloat(p->elNomNegDriveSlope_); - p->elFeedbackSlope_ = SwapFloat(p->elFeedbackSlope_); - p->elFirstSlope_ = SwapFloat(p->elFirstSlope_); - p->elSecondSlope_ = SwapFloat(p->elSecondSlope_); - p->elThirdSlope_ = SwapFloat(p->elThirdSlope_); - p->elDroopPos_ = SwapFloat(p->elDroopPos_); - p->elOffNeutralDrive_ = SwapFloat(p->elOffNeutralDrive_); - p->azIntertia_ = SwapFloat(p->azIntertia_); - p->elInertia_ = SwapFloat(p->elInertia_); - p->azStowAngle_ = SwapFloat(p->azStowAngle_); - p->elStowAngle_ = SwapFloat(p->elStowAngle_); - p->azEncoderAlignment_ = SwapFloat(p->azEncoderAlignment_); - p->elEncoderAlignment_ = SwapFloat(p->elEncoderAlignment_); - p->rvp8nvIwaveguideLength_ = ntohl(p->rvp8nvIwaveguideLength_); + p->antManualSetup_.igndHgt_ = + static_cast(ntohl(p->antManualSetup_.igndHgt_)); + p->antManualSetup_.iradHgt_ = ntohl(p->antManualSetup_.iradHgt_); + p->azPosSustainDrive_ = SwapFloat(p->azPosSustainDrive_); + p->azNegSustainDrive_ = SwapFloat(p->azNegSustainDrive_); + p->azNomPosDriveSlope_ = SwapFloat(p->azNomPosDriveSlope_); + p->azNomNegDriveSlope_ = SwapFloat(p->azNomNegDriveSlope_); + p->azFeedbackSlope_ = SwapFloat(p->azFeedbackSlope_); + p->elPosSustainDrive_ = SwapFloat(p->elPosSustainDrive_); + p->elNegSustainDrive_ = SwapFloat(p->elNegSustainDrive_); + p->elNomPosDriveSlope_ = SwapFloat(p->elNomPosDriveSlope_); + p->elNomNegDriveSlope_ = SwapFloat(p->elNomNegDriveSlope_); + p->elFeedbackSlope_ = SwapFloat(p->elFeedbackSlope_); + p->elFirstSlope_ = SwapFloat(p->elFirstSlope_); + p->elSecondSlope_ = SwapFloat(p->elSecondSlope_); + p->elThirdSlope_ = SwapFloat(p->elThirdSlope_); + p->elDroopPos_ = SwapFloat(p->elDroopPos_); + p->elOffNeutralDrive_ = SwapFloat(p->elOffNeutralDrive_); + p->azIntertia_ = SwapFloat(p->azIntertia_); + p->elInertia_ = SwapFloat(p->elInertia_); + p->azStowAngle_ = SwapFloat(p->azStowAngle_); + p->elStowAngle_ = SwapFloat(p->elStowAngle_); + p->azEncoderAlignment_ = SwapFloat(p->azEncoderAlignment_); + p->elEncoderAlignment_ = SwapFloat(p->elEncoderAlignment_); + p->rvp8nvIwaveguideLength_ = ntohl(p->rvp8nvIwaveguideLength_); SwapArray(p->vRnscale_); @@ -1660,6 +1668,4 @@ RdaAdaptationData::Create(Level2MessageHeader&& header, std::istream& is) return message; } -} // namespace rda -} // namespace wsr88d -} // namespace scwx +} // namespace scwx::wsr88d::rda diff --git a/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp b/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp index 50ebd596..375d46b8 100644 --- a/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp +++ b/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp @@ -1,209 +1,214 @@ #include #include -namespace scwx -{ -namespace wsr88d -{ -namespace rda +namespace scwx::wsr88d::rda { static const std::string logPrefix_ = "scwx::wsr88d::rda::rda_status_data"; static const auto logger_ = util::Logger::Create(logPrefix_); -class RdaStatusDataImpl +class RdaStatusData::Impl { public: - explicit RdaStatusDataImpl() = default; - ~RdaStatusDataImpl() = default; + explicit Impl() = default; + ~Impl() = default; - uint16_t rdaStatus_ {0}; - uint16_t operabilityStatus_ {0}; - uint16_t controlStatus_ {0}; - uint16_t auxiliaryPowerGeneratorState_ {0}; - uint16_t averageTransmitterPower_ {0}; - int16_t horizontalReflectivityCalibrationCorrection_ {0}; - uint16_t dataTransmissionEnabled_ {0}; - uint16_t volumeCoveragePatternNumber_ {0}; - uint16_t rdaControlAuthorization_ {0}; - uint16_t rdaBuildNumber_ {0}; - uint16_t operationalMode_ {0}; - uint16_t superResolutionStatus_ {0}; - uint16_t clutterMitigationDecisionStatus_ {0}; - uint16_t rdaScanAndDataFlags_ {0}; - uint16_t rdaAlarmSummary_ {0}; - uint16_t commandAcknowledgement_ {0}; - uint16_t channelControlStatus_ {0}; - uint16_t spotBlankingStatus_ {0}; - uint16_t bypassMapGenerationDate_ {0}; - uint16_t bypassMapGenerationTime_ {0}; - uint16_t clutterFilterMapGenerationDate_ {0}; - uint16_t clutterFilterMapGenerationTime_ {0}; - int16_t verticalReflectivityCalibrationCorrection_ {0}; - uint16_t transitionPowerSourceStatus_ {0}; - uint16_t rmsControlStatus_ {0}; - uint16_t performanceCheckStatus_ {0}; - std::array alarmCodes_ {0}; - uint16_t signalProcessingOptions_ {0}; - uint16_t downloadedPatternNumber_ {0}; - uint16_t statusVersion_ {0}; + Impl(const Impl&) = delete; + Impl& operator=(const Impl&) = delete; + Impl(const Impl&&) = delete; + Impl& operator=(const Impl&&) = delete; + + std::uint16_t rdaStatus_ {0}; + std::uint16_t operabilityStatus_ {0}; + std::uint16_t controlStatus_ {0}; + std::uint16_t auxiliaryPowerGeneratorState_ {0}; + std::uint16_t averageTransmitterPower_ {0}; + std::int16_t horizontalReflectivityCalibrationCorrection_ {0}; + std::uint16_t dataTransmissionEnabled_ {0}; + std::uint16_t volumeCoveragePatternNumber_ {0}; + std::uint16_t rdaControlAuthorization_ {0}; + std::uint16_t rdaBuildNumber_ {0}; + std::uint16_t operationalMode_ {0}; + std::uint16_t superResolutionStatus_ {0}; + std::uint16_t clutterMitigationDecisionStatus_ {0}; + std::uint16_t rdaScanAndDataFlags_ {0}; + std::uint16_t rdaAlarmSummary_ {0}; + std::uint16_t commandAcknowledgement_ {0}; + std::uint16_t channelControlStatus_ {0}; + std::uint16_t spotBlankingStatus_ {0}; + std::uint16_t bypassMapGenerationDate_ {0}; + std::uint16_t bypassMapGenerationTime_ {0}; + std::uint16_t clutterFilterMapGenerationDate_ {0}; + std::uint16_t clutterFilterMapGenerationTime_ {0}; + std::int16_t verticalReflectivityCalibrationCorrection_ {0}; + std::uint16_t transitionPowerSourceStatus_ {0}; + std::uint16_t rmsControlStatus_ {0}; + std::uint16_t performanceCheckStatus_ {0}; + + // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers) + std::array alarmCodes_ {0}; + + std::uint16_t signalProcessingOptions_ {0}; + std::uint16_t downloadedPatternNumber_ {0}; + std::uint16_t statusVersion_ {0}; }; -RdaStatusData::RdaStatusData() : - Level2Message(), p(std::make_unique()) -{ -} +RdaStatusData::RdaStatusData() : Level2Message(), p(std::make_unique()) {} RdaStatusData::~RdaStatusData() = default; RdaStatusData::RdaStatusData(RdaStatusData&&) noexcept = default; RdaStatusData& RdaStatusData::operator=(RdaStatusData&&) noexcept = default; -uint16_t RdaStatusData::rda_status() const +std::uint16_t RdaStatusData::rda_status() const { return p->rdaStatus_; } -uint16_t RdaStatusData::operability_status() const +std::uint16_t RdaStatusData::operability_status() const { return p->operabilityStatus_; } -uint16_t RdaStatusData::control_status() const +std::uint16_t RdaStatusData::control_status() const { return p->controlStatus_; } -uint16_t RdaStatusData::auxiliary_power_generator_state() const +std::uint16_t RdaStatusData::auxiliary_power_generator_state() const { return p->auxiliaryPowerGeneratorState_; } -uint16_t RdaStatusData::average_transmitter_power() const +std::uint16_t RdaStatusData::average_transmitter_power() const { return p->averageTransmitterPower_; } float RdaStatusData::horizontal_reflectivity_calibration_correction() const { - return p->horizontalReflectivityCalibrationCorrection_ * 0.01f; + constexpr float kScale_ = 0.01f; + return static_cast(p->horizontalReflectivityCalibrationCorrection_) * + kScale_; } -uint16_t RdaStatusData::data_transmission_enabled() const +std::uint16_t RdaStatusData::data_transmission_enabled() const { return p->dataTransmissionEnabled_; } -uint16_t RdaStatusData::volume_coverage_pattern_number() const +std::uint16_t RdaStatusData::volume_coverage_pattern_number() const { return p->volumeCoveragePatternNumber_; } -uint16_t RdaStatusData::rda_control_authorization() const +std::uint16_t RdaStatusData::rda_control_authorization() const { return p->rdaControlAuthorization_; } -uint16_t RdaStatusData::rda_build_number() const +std::uint16_t RdaStatusData::rda_build_number() const { return p->rdaBuildNumber_; } -uint16_t RdaStatusData::operational_mode() const +std::uint16_t RdaStatusData::operational_mode() const { return p->operationalMode_; } -uint16_t RdaStatusData::super_resolution_status() const +std::uint16_t RdaStatusData::super_resolution_status() const { return p->superResolutionStatus_; } -uint16_t RdaStatusData::clutter_mitigation_decision_status() const +std::uint16_t RdaStatusData::clutter_mitigation_decision_status() const { return p->clutterMitigationDecisionStatus_; } -uint16_t RdaStatusData::rda_scan_and_data_flags() const +std::uint16_t RdaStatusData::rda_scan_and_data_flags() const { return p->rdaScanAndDataFlags_; } -uint16_t RdaStatusData::rda_alarm_summary() const +std::uint16_t RdaStatusData::rda_alarm_summary() const { return p->rdaAlarmSummary_; } -uint16_t RdaStatusData::command_acknowledgement() const +std::uint16_t RdaStatusData::command_acknowledgement() const { return p->commandAcknowledgement_; } -uint16_t RdaStatusData::channel_control_status() const +std::uint16_t RdaStatusData::channel_control_status() const { return p->channelControlStatus_; } -uint16_t RdaStatusData::spot_blanking_status() const +std::uint16_t RdaStatusData::spot_blanking_status() const { return p->spotBlankingStatus_; } -uint16_t RdaStatusData::bypass_map_generation_date() const +std::uint16_t RdaStatusData::bypass_map_generation_date() const { return p->bypassMapGenerationDate_; } -uint16_t RdaStatusData::bypass_map_generation_time() const +std::uint16_t RdaStatusData::bypass_map_generation_time() const { return p->bypassMapGenerationTime_; } -uint16_t RdaStatusData::clutter_filter_map_generation_date() const +std::uint16_t RdaStatusData::clutter_filter_map_generation_date() const { return p->clutterFilterMapGenerationDate_; } -uint16_t RdaStatusData::clutter_filter_map_generation_time() const +std::uint16_t RdaStatusData::clutter_filter_map_generation_time() const { return p->clutterFilterMapGenerationTime_; } float RdaStatusData::vertical_reflectivity_calibration_correction() const { - return p->verticalReflectivityCalibrationCorrection_ * 0.01f; + constexpr float kScale_ = 0.01f; + return static_cast(p->verticalReflectivityCalibrationCorrection_) * + kScale_; } -uint16_t RdaStatusData::transition_power_source_status() const +std::uint16_t RdaStatusData::transition_power_source_status() const { return p->transitionPowerSourceStatus_; } -uint16_t RdaStatusData::rms_control_status() const +std::uint16_t RdaStatusData::rms_control_status() const { return p->rmsControlStatus_; } -uint16_t RdaStatusData::performance_check_status() const +std::uint16_t RdaStatusData::performance_check_status() const { return p->performanceCheckStatus_; } -uint16_t RdaStatusData::alarm_codes(unsigned i) const +std::uint16_t RdaStatusData::alarm_codes(unsigned i) const { - return p->alarmCodes_[i]; + return p->alarmCodes_.at(i); } -uint16_t RdaStatusData::signal_processing_options() const +std::uint16_t RdaStatusData::signal_processing_options() const { return p->signalProcessingOptions_; } -uint16_t RdaStatusData::downloaded_pattern_number() const +std::uint16_t RdaStatusData::downloaded_pattern_number() const { return p->downloadedPatternNumber_; } -uint16_t RdaStatusData::status_version() const +std::uint16_t RdaStatusData::status_version() const { return p->statusVersion_; } @@ -215,6 +220,7 @@ bool RdaStatusData::Parse(std::istream& is) bool messageValid = true; size_t bytesRead = 0; + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers): Readability is.read(reinterpret_cast(&p->rdaStatus_), 2); // 1 is.read(reinterpret_cast(&p->operabilityStatus_), 2); // 2 is.read(reinterpret_cast(&p->controlStatus_), 2); // 3 @@ -249,7 +255,7 @@ 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 + static_cast(p->alarmCodes_.size() * 2)); // 27-40 bytesRead += 80; p->rdaStatus_ = ntohs(p->rdaStatus_); @@ -257,8 +263,8 @@ bool RdaStatusData::Parse(std::istream& is) p->controlStatus_ = ntohs(p->controlStatus_); p->auxiliaryPowerGeneratorState_ = ntohs(p->auxiliaryPowerGeneratorState_); p->averageTransmitterPower_ = ntohs(p->averageTransmitterPower_); - p->horizontalReflectivityCalibrationCorrection_ = - ntohs(p->horizontalReflectivityCalibrationCorrection_); + p->horizontalReflectivityCalibrationCorrection_ = static_cast( + ntohs(p->horizontalReflectivityCalibrationCorrection_)); p->dataTransmissionEnabled_ = ntohs(p->dataTransmissionEnabled_); p->volumeCoveragePatternNumber_ = ntohs(p->volumeCoveragePatternNumber_); p->rdaControlAuthorization_ = ntohs(p->rdaControlAuthorization_); @@ -278,15 +284,16 @@ bool RdaStatusData::Parse(std::istream& is) ntohs(p->clutterFilterMapGenerationDate_); p->clutterFilterMapGenerationTime_ = ntohs(p->clutterFilterMapGenerationTime_); - p->verticalReflectivityCalibrationCorrection_ = - ntohs(p->verticalReflectivityCalibrationCorrection_); + p->verticalReflectivityCalibrationCorrection_ = static_cast( + ntohs(p->verticalReflectivityCalibrationCorrection_)); p->transitionPowerSourceStatus_ = ntohs(p->transitionPowerSourceStatus_); p->rmsControlStatus_ = ntohs(p->rmsControlStatus_); p->performanceCheckStatus_ = ntohs(p->performanceCheckStatus_); SwapArray(p->alarmCodes_); // RDA Build 18.0 increased the size of the message from 80 to 120 bytes - if (header().message_size() * 2 > Level2MessageHeader::SIZE + 80) + if (static_cast(header().message_size()) * 2 > + Level2MessageHeader::SIZE + 80) { is.read(reinterpret_cast(&p->signalProcessingOptions_), 2); // 41 is.seekg(34, std::ios_base::cur); // 42-58 @@ -297,6 +304,8 @@ bool RdaStatusData::Parse(std::istream& is) p->signalProcessingOptions_ = ntohs(p->signalProcessingOptions_); p->statusVersion_ = ntohs(p->statusVersion_); } + + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) if (!ValidateMessage(is, bytesRead)) { @@ -320,6 +329,4 @@ RdaStatusData::Create(Level2MessageHeader&& header, std::istream& is) return message; } -} // namespace rda -} // namespace wsr88d -} // namespace scwx +} // namespace scwx::wsr88d::rda From f709380a9714cb00b53a12330ec48a80dfeef621 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Tue, 13 May 2025 00:28:31 -0500 Subject: [PATCH 03/13] Add RdaPrfData (message type 32) --- wxdata/include/scwx/awips/message.hpp | 35 ++++- .../include/scwx/wsr88d/rda/rda_prf_data.hpp | 30 +++++ .../wsr88d/rda/level2_message_factory.cpp | 4 +- .../source/scwx/wsr88d/rda/rda_prf_data.cpp | 120 ++++++++++++++++++ wxdata/wxdata.cmake | 2 + 5 files changed, 188 insertions(+), 3 deletions(-) create mode 100644 wxdata/include/scwx/wsr88d/rda/rda_prf_data.hpp create mode 100644 wxdata/source/scwx/wsr88d/rda/rda_prf_data.cpp diff --git a/wxdata/include/scwx/awips/message.hpp b/wxdata/include/scwx/awips/message.hpp index f13a2a90..486e7f06 100644 --- a/wxdata/include/scwx/awips/message.hpp +++ b/wxdata/include/scwx/awips/message.hpp @@ -121,13 +121,44 @@ public: [](auto& p) { p.second = SwapFloat(p.second); }); } - static void SwapVector(std::vector& v) + template + static void SwapVector(std::vector& v) { std::transform(std::execution::par_unseq, v.begin(), v.end(), v.begin(), - [](std::uint16_t u) { return ntohs(u); }); + [](T u) + { + if constexpr (std::is_same_v || + std::is_same_v) + { + return static_cast(ntohs(u)); + } + else if constexpr (std::is_same_v || + std::is_same_v) + { + return static_cast(ntohl(u)); + } + else if constexpr (std::is_same_v || + std::is_same_v) + { + return static_cast(ntohll(u)); + } + else if constexpr (std::is_same_v) + { + return SwapFloat(u); + } + else if constexpr (std::is_same_v) + { + return SwapDouble(u); + } + else + { + static_assert(std::is_same_v, + "Unsupported type for SwapVector"); + } + }); } private: diff --git a/wxdata/include/scwx/wsr88d/rda/rda_prf_data.hpp b/wxdata/include/scwx/wsr88d/rda/rda_prf_data.hpp new file mode 100644 index 00000000..1a04aacb --- /dev/null +++ b/wxdata/include/scwx/wsr88d/rda/rda_prf_data.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include + +namespace scwx::wsr88d::rda +{ + +class RdaPrfData : public Level2Message +{ +public: + explicit RdaPrfData(); + ~RdaPrfData(); + + RdaPrfData(const RdaPrfData&) = delete; + RdaPrfData& operator=(const RdaPrfData&) = delete; + + RdaPrfData(RdaPrfData&&) noexcept; + RdaPrfData& operator=(RdaPrfData&&) noexcept; + + bool Parse(std::istream& is) override; + + static std::shared_ptr Create(Level2MessageHeader&& header, + std::istream& is); + +private: + class Impl; + std::unique_ptr p; +}; + +} // namespace scwx::wsr88d::rda diff --git a/wxdata/source/scwx/wsr88d/rda/level2_message_factory.cpp b/wxdata/source/scwx/wsr88d/rda/level2_message_factory.cpp index 2a478a2f..a659b734 100644 --- a/wxdata/source/scwx/wsr88d/rda/level2_message_factory.cpp +++ b/wxdata/source/scwx/wsr88d/rda/level2_message_factory.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -37,7 +38,8 @@ static const std::unordered_map {13, ClutterFilterBypassMap::Create}, {15, ClutterFilterMap::Create}, {18, RdaAdaptationData::Create}, - {31, DigitalRadarDataGeneric::Create}}; + {31, DigitalRadarDataGeneric::Create}, + {32, RdaPrfData::Create}}; struct Level2MessageFactory::Context { diff --git a/wxdata/source/scwx/wsr88d/rda/rda_prf_data.cpp b/wxdata/source/scwx/wsr88d/rda/rda_prf_data.cpp new file mode 100644 index 00000000..d516309b --- /dev/null +++ b/wxdata/source/scwx/wsr88d/rda/rda_prf_data.cpp @@ -0,0 +1,120 @@ +#include +#include + +namespace scwx::wsr88d::rda +{ + +static const std::string logPrefix_ = "scwx::wsr88d::rda::rda_prf_data"; +static const auto logger_ = scwx::util::Logger::Create(logPrefix_); + +struct RdaPrfWaveformData +{ + std::uint16_t waveformType_ {0}; + std::uint16_t prfCount_ {0}; + std::vector prfValues_ {}; +}; + +class RdaPrfData::Impl +{ +public: + explicit Impl() = default; + ~Impl() = default; + + Impl(const Impl&) = delete; + Impl& operator=(const Impl&) = delete; + Impl(const Impl&&) = delete; + Impl& operator=(const Impl&&) = delete; + + std::uint16_t numberOfWaveforms_ {0}; + std::vector waveformData_ {}; +}; + +RdaPrfData::RdaPrfData() : p(std::make_unique()) {} +RdaPrfData::~RdaPrfData() = default; + +RdaPrfData::RdaPrfData(RdaPrfData&&) noexcept = default; +RdaPrfData& RdaPrfData::operator=(RdaPrfData&&) noexcept = default; + +bool RdaPrfData::Parse(std::istream& is) +{ + logger_->trace("Parsing RDA PRF Data (Message Type 32)"); + + bool messageValid = true; + std::size_t bytesRead = 0; + + std::streampos isBegin = is.tellg(); + + is.read(reinterpret_cast(&p->numberOfWaveforms_), 2); // 1 + is.seekg(2, std::ios_base::cur); // 2 + + bytesRead += 4; + + p->numberOfWaveforms_ = ntohs(p->numberOfWaveforms_); + + // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers): Readability + if (p->numberOfWaveforms_ < 1 || p->numberOfWaveforms_ > 5) + { + logger_->warn("Invalid number of waveforms: {}", p->numberOfWaveforms_); + p->numberOfWaveforms_ = 0; + messageValid = false; + } + + p->waveformData_.resize(p->numberOfWaveforms_); + + for (std::uint16_t i = 0; i < p->numberOfWaveforms_; ++i) + { + auto& w = p->waveformData_[i]; + + is.read(reinterpret_cast(&w.waveformType_), 2); // P1 + is.read(reinterpret_cast(&w.prfCount_), 2); // P2 + + w.waveformType_ = ntohs(w.waveformType_); + w.prfCount_ = ntohs(w.prfCount_); + + bytesRead += 4; + + // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers): Readability + if (w.prfCount_ > 255) + { + logger_->warn("Invalid PRF count: {} (waveform {})", w.prfCount_, i); + w.prfCount_ = 0; + messageValid = false; + break; + } + + w.prfValues_.resize(w.prfCount_); + + for (std::uint16_t j = 0; j < w.prfCount_; ++j) + { + is.read(reinterpret_cast(&w.prfValues_[j]), 4); + } + + bytesRead += static_cast(w.prfCount_) * 4; + + SwapVector(w.prfValues_); + } + + is.seekg(isBegin, std::ios_base::beg); + if (!ValidateMessage(is, bytesRead)) + { + messageValid = false; + } + + return messageValid; +} + +std::shared_ptr RdaPrfData::Create(Level2MessageHeader&& header, + std::istream& is) +{ + std::shared_ptr message = std::make_shared(); + message->set_header(std::move(header)); + + if (!message->Parse(is)) + { + message.reset(); + } + + return message; +} + +} // namespace scwx::wsr88d::rda diff --git a/wxdata/wxdata.cmake b/wxdata/wxdata.cmake index 2c062f4b..6a02a265 100644 --- a/wxdata/wxdata.cmake +++ b/wxdata/wxdata.cmake @@ -125,6 +125,7 @@ set(HDR_WSR88D_RDA include/scwx/wsr88d/rda/clutter_filter_bypass_map.hpp include/scwx/wsr88d/rda/level2_message_header.hpp include/scwx/wsr88d/rda/performance_maintenance_data.hpp include/scwx/wsr88d/rda/rda_adaptation_data.hpp + include/scwx/wsr88d/rda/rda_prf_data.hpp include/scwx/wsr88d/rda/rda_status_data.hpp include/scwx/wsr88d/rda/rda_types.hpp include/scwx/wsr88d/rda/volume_coverage_pattern_data.hpp) @@ -138,6 +139,7 @@ set(SRC_WSR88D_RDA source/scwx/wsr88d/rda/clutter_filter_bypass_map.cpp source/scwx/wsr88d/rda/level2_message_header.cpp source/scwx/wsr88d/rda/performance_maintenance_data.cpp source/scwx/wsr88d/rda/rda_adaptation_data.cpp + source/scwx/wsr88d/rda/rda_prf_data.cpp source/scwx/wsr88d/rda/rda_status_data.cpp source/scwx/wsr88d/rda/volume_coverage_pattern_data.cpp) set(HDR_WSR88D_RPG include/scwx/wsr88d/rpg/ccb_header.hpp From 926cce1eac5a33ecf0fb1d921bd36430d0745948 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Tue, 13 May 2025 21:41:53 -0500 Subject: [PATCH 04/13] Level2MessageFactory clang-tidy cleanup --- .../wsr88d/rda/level2_message_factory.hpp | 24 +++------- .../wsr88d/rda/level2_message_factory.cpp | 46 +++++++++---------- 2 files changed, 27 insertions(+), 43 deletions(-) diff --git a/wxdata/include/scwx/wsr88d/rda/level2_message_factory.hpp b/wxdata/include/scwx/wsr88d/rda/level2_message_factory.hpp index 7359e72b..ac2b8234 100644 --- a/wxdata/include/scwx/wsr88d/rda/level2_message_factory.hpp +++ b/wxdata/include/scwx/wsr88d/rda/level2_message_factory.hpp @@ -2,28 +2,19 @@ #include -namespace scwx -{ -namespace wsr88d -{ -namespace rda +namespace scwx::wsr88d::rda { struct Level2MessageInfo { - std::shared_ptr message; - bool headerValid; - bool messageValid; - - Level2MessageInfo() : - message(nullptr), headerValid(false), messageValid(false) - { - } + std::shared_ptr message {nullptr}; + bool headerValid {false}; + bool messageValid {false}; }; class Level2MessageFactory { -private: +public: explicit Level2MessageFactory() = delete; ~Level2MessageFactory() = delete; @@ -33,7 +24,6 @@ private: Level2MessageFactory(Level2MessageFactory&&) noexcept = delete; Level2MessageFactory& operator=(Level2MessageFactory&&) noexcept = delete; -public: struct Context; static std::shared_ptr CreateContext(); @@ -41,6 +31,4 @@ public: std::shared_ptr& ctx); }; -} // namespace rda -} // namespace wsr88d -} // namespace scwx +} // namespace scwx::wsr88d::rda diff --git a/wxdata/source/scwx/wsr88d/rda/level2_message_factory.cpp b/wxdata/source/scwx/wsr88d/rda/level2_message_factory.cpp index a659b734..b253cdf8 100644 --- a/wxdata/source/scwx/wsr88d/rda/level2_message_factory.cpp +++ b/wxdata/source/scwx/wsr88d/rda/level2_message_factory.cpp @@ -15,20 +15,16 @@ #include #include -namespace scwx -{ -namespace wsr88d -{ -namespace rda +namespace scwx::wsr88d::rda { static const std::string logPrefix_ = "scwx::wsr88d::rda::level2_message_factory"; static const auto logger_ = util::Logger::Create(logPrefix_); -typedef std::function(Level2MessageHeader&&, - std::istream&)> - CreateLevel2MessageFunction; +using CreateLevel2MessageFunction = + std::function(Level2MessageHeader&&, + std::istream&)>; static const std::unordered_map create_ {{1, DigitalRadarData::Create}, @@ -44,15 +40,12 @@ static const std::unordered_map struct Level2MessageFactory::Context { Context() : - messageData_ {}, - bufferedSize_ {}, - messageBuffer_ {messageData_}, - messageBufferStream_ {&messageBuffer_} + messageBuffer_ {messageData_}, messageBufferStream_ {&messageBuffer_} { } - std::vector messageData_; - size_t bufferedSize_; + std::vector messageData_ {}; + std::size_t bufferedSize_ {}; util::vectorbuf messageBuffer_; std::istream messageBufferStream_; bool bufferingData_ {false}; @@ -78,13 +71,16 @@ Level2MessageInfo Level2MessageFactory::Create(std::istream& is, if (info.headerValid) { - if (header.message_size() == 65535) + if (header.message_size() == std::numeric_limits::max()) { + // A message size of 65535 indicates a message with a single segment. + // The size is specified in the bytes normally reserved for the segment + // number and total number of segments. segment = 1; totalSegments = 1; dataSize = (static_cast(header.number_of_message_segments()) - << 16) + + << 16) + // NOLINT(cppcoreguidelines-avoid-magic-numbers) header.message_segment_number(); } else @@ -145,14 +141,16 @@ Level2MessageInfo Level2MessageFactory::Create(std::istream& is, logger_->debug("Bad size estimate, increasing size"); // Estimate remaining size - uint16_t remainingSegments = - std::max(totalSegments - segment + 1, 100u); - size_t remainingSize = remainingSegments * dataSize; + static const std::uint16_t kMinRemainingSegments_ = 100u; + std::uint16_t remainingSegments = std::max( + totalSegments - segment + 1, kMinRemainingSegments_); + std::size_t remainingSize = remainingSegments * dataSize; ctx->messageData_.resize(ctx->bufferedSize_ + remainingSize); } - is.read(ctx->messageData_.data() + ctx->bufferedSize_, dataSize); + is.read(&ctx->messageData_[ctx->bufferedSize_], + static_cast(dataSize)); ctx->bufferedSize_ += dataSize; if (is.eof()) @@ -166,7 +164,7 @@ Level2MessageInfo Level2MessageFactory::Create(std::istream& is, else if (segment == totalSegments) { ctx->messageBuffer_.update_read_pointers(ctx->bufferedSize_); - header.set_message_size(static_cast( + header.set_message_size(static_cast( ctx->bufferedSize_ / 2 + Level2MessageHeader::SIZE)); messageStream = &ctx->messageBufferStream_; @@ -188,7 +186,7 @@ Level2MessageInfo Level2MessageFactory::Create(std::istream& is, else if (info.headerValid) { // Seek to the end of the current message - is.seekg(dataSize, std::ios_base::cur); + is.seekg(static_cast(dataSize), std::ios_base::cur); } if (info.message == nullptr) @@ -199,6 +197,4 @@ Level2MessageInfo Level2MessageFactory::Create(std::istream& is, return info; } -} // namespace rda -} // namespace wsr88d -} // namespace scwx +} // namespace scwx::wsr88d::rda From ef7caf5519a8eadac197a0f65acafd222f8f5c2c Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Tue, 13 May 2025 21:42:27 -0500 Subject: [PATCH 05/13] RadarProductManager logging level fix --- scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp index 81f0fc52..18af3b02 100644 --- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp @@ -1460,7 +1460,7 @@ RadarProductManagerImpl::StoreRadarProductRecord( if (storedRecord != nullptr) { - logger_->error( + logger_->debug( "Level 2 product previously loaded, loading from cache"); } } From e49adafda9d385b47514806edcbd4098e2c05638 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Fri, 16 May 2025 23:50:42 -0500 Subject: [PATCH 06/13] Update RPG to Build 23.0 --- .../rpg/digital_raster_data_array_packet.hpp | 48 ++++ .../rpg/digital_raster_data_array_packet.cpp | 220 ++++++++++++++++++ .../wsr88d/rpg/level3_message_factory.cpp | 5 + .../source/scwx/wsr88d/rpg/packet_factory.cpp | 2 + .../wsr88d/rpg/product_description_block.cpp | 46 ++-- wxdata/wxdata.cmake | 2 + 6 files changed, 299 insertions(+), 24 deletions(-) create mode 100644 wxdata/include/scwx/wsr88d/rpg/digital_raster_data_array_packet.hpp create mode 100644 wxdata/source/scwx/wsr88d/rpg/digital_raster_data_array_packet.cpp diff --git a/wxdata/include/scwx/wsr88d/rpg/digital_raster_data_array_packet.hpp b/wxdata/include/scwx/wsr88d/rpg/digital_raster_data_array_packet.hpp new file mode 100644 index 00000000..76b0f2c3 --- /dev/null +++ b/wxdata/include/scwx/wsr88d/rpg/digital_raster_data_array_packet.hpp @@ -0,0 +1,48 @@ +#pragma once + +#include + +#include +#include + +namespace scwx::wsr88d::rpg +{ + +class DigitalRasterDataArrayPacket : public Packet +{ +public: + explicit DigitalRasterDataArrayPacket(); + ~DigitalRasterDataArrayPacket(); + + DigitalRasterDataArrayPacket(const DigitalRasterDataArrayPacket&) = delete; + DigitalRasterDataArrayPacket& + operator=(const DigitalRasterDataArrayPacket&) = delete; + + DigitalRasterDataArrayPacket(DigitalRasterDataArrayPacket&&) noexcept; + DigitalRasterDataArrayPacket& + operator=(DigitalRasterDataArrayPacket&&) noexcept; + + [[nodiscard]] std::uint16_t packet_code() const override; + [[nodiscard]] std::uint16_t i_coordinate_start() const; + [[nodiscard]] std::uint16_t j_coordinate_start() const; + [[nodiscard]] std::uint16_t i_scale_factor() const; + [[nodiscard]] std::uint16_t j_scale_factor() const; + [[nodiscard]] std::uint16_t number_of_cells() const; + [[nodiscard]] std::uint16_t number_of_rows() const; + + [[nodiscard]] std::uint16_t number_of_bytes_in_row(std::uint16_t r) const; + [[nodiscard]] const std::vector& level(std::uint16_t r) const; + + [[nodiscard]] std::size_t data_size() const override; + + bool Parse(std::istream& is) override; + + static std::shared_ptr + Create(std::istream& is); + +private: + class Impl; + std::unique_ptr p; +}; + +} // namespace scwx::wsr88d::rpg diff --git a/wxdata/source/scwx/wsr88d/rpg/digital_raster_data_array_packet.cpp b/wxdata/source/scwx/wsr88d/rpg/digital_raster_data_array_packet.cpp new file mode 100644 index 00000000..ece33807 --- /dev/null +++ b/wxdata/source/scwx/wsr88d/rpg/digital_raster_data_array_packet.cpp @@ -0,0 +1,220 @@ +#include +#include + +#include +#include + +namespace scwx::wsr88d::rpg +{ + +static const std::string logPrefix_ = + "scwx::wsr88d::rpg::digital_raster_data_array_packet"; +static const auto logger_ = util::Logger::Create(logPrefix_); + +class DigitalRasterDataArrayPacket::Impl +{ +public: + struct Row + { + std::uint16_t numberOfBytes_ {0}; + std::vector level_ {}; + }; + + explicit Impl() = default; + ~Impl() = default; + + Impl(const Impl&) = delete; + Impl& operator=(const Impl&) = delete; + Impl(const Impl&&) = delete; + Impl& operator=(const Impl&&) = delete; + + std::uint16_t packetCode_ {0}; + std::uint16_t iCoordinateStart_ {0}; + std::uint16_t jCoordinateStart_ {0}; + std::uint16_t iScaleFactor_ {0}; + std::uint16_t jScaleFactor_ {0}; + std::uint16_t numberOfCells_ {0}; + std::uint16_t numberOfRows_ {0}; + std::uint16_t numberOfBytesInRow_ {0}; + + // Repeat for each row + std::vector row_ {}; + + std::size_t dataSize_ {0}; +}; + +DigitalRasterDataArrayPacket::DigitalRasterDataArrayPacket() : + p(std::make_unique()) +{ +} +DigitalRasterDataArrayPacket::~DigitalRasterDataArrayPacket() = default; + +DigitalRasterDataArrayPacket::DigitalRasterDataArrayPacket( + DigitalRasterDataArrayPacket&&) noexcept = default; +DigitalRasterDataArrayPacket& DigitalRasterDataArrayPacket::operator=( + DigitalRasterDataArrayPacket&&) noexcept = default; + +std::uint16_t DigitalRasterDataArrayPacket::packet_code() const +{ + return p->packetCode_; +} + +std::uint16_t DigitalRasterDataArrayPacket::i_coordinate_start() const +{ + return p->iCoordinateStart_; +} + +std::uint16_t DigitalRasterDataArrayPacket::j_coordinate_start() const +{ + return p->jCoordinateStart_; +} + +std::uint16_t DigitalRasterDataArrayPacket::i_scale_factor() const +{ + return p->iScaleFactor_; +} + +std::uint16_t DigitalRasterDataArrayPacket::j_scale_factor() const +{ + return p->jScaleFactor_; +} + +std::uint16_t DigitalRasterDataArrayPacket::number_of_cells() const +{ + return p->numberOfCells_; +} + +std::uint16_t DigitalRasterDataArrayPacket::number_of_rows() const +{ + return p->numberOfRows_; +} + +std::uint16_t +DigitalRasterDataArrayPacket::number_of_bytes_in_row(std::uint16_t r) const +{ + return p->row_[r].numberOfBytes_; +} + +const std::vector& +DigitalRasterDataArrayPacket::level(std::uint16_t r) const +{ + return p->row_[r].level_; +} + +bool DigitalRasterDataArrayPacket::Parse(std::istream& is) +{ + bool blockValid = true; + std::size_t bytesRead = 0; + + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + + is.read(reinterpret_cast(&p->packetCode_), 2); + is.read(reinterpret_cast(&p->iCoordinateStart_), 2); + is.read(reinterpret_cast(&p->jCoordinateStart_), 2); + is.read(reinterpret_cast(&p->iScaleFactor_), 2); + is.read(reinterpret_cast(&p->jScaleFactor_), 2); + is.read(reinterpret_cast(&p->numberOfCells_), 2); + is.read(reinterpret_cast(&p->numberOfRows_), 2); + bytesRead += 14; + + p->packetCode_ = ntohs(p->packetCode_); + p->iCoordinateStart_ = ntohs(p->iCoordinateStart_); + p->jCoordinateStart_ = ntohs(p->jCoordinateStart_); + p->iScaleFactor_ = ntohs(p->iScaleFactor_); + p->jScaleFactor_ = ntohs(p->jScaleFactor_); + p->numberOfCells_ = ntohs(p->numberOfCells_); + p->numberOfRows_ = ntohs(p->numberOfRows_); + + if (is.eof()) + { + logger_->debug("Reached end of file"); + blockValid = false; + } + else + { + if (p->packetCode_ != 33) + { + logger_->warn("Invalid packet code: {}", p->packetCode_); + blockValid = false; + } + if (p->numberOfCells_ < 1 || p->numberOfCells_ > 1840) + { + logger_->warn("Invalid number of cells: {}", p->numberOfCells_); + blockValid = false; + } + if (p->numberOfRows_ < 1 || p->numberOfRows_ > 464) + { + logger_->warn("Invalid number of rows: {}", p->numberOfRows_); + blockValid = false; + } + } + + if (blockValid) + { + p->row_.resize(p->numberOfRows_); + + for (std::uint16_t r = 0; r < p->numberOfRows_; r++) + { + auto& row = p->row_[r]; + + is.read(reinterpret_cast(&row.numberOfBytes_), 2); + bytesRead += 2; + + row.numberOfBytes_ = ntohs(row.numberOfBytes_); + + if (row.numberOfBytes_ < 1 || row.numberOfBytes_ > 1840) + { + logger_->warn( + "Invalid number of bytes: {} (Row {})", row.numberOfBytes_, r); + blockValid = false; + break; + } + else if (row.numberOfBytes_ < p->numberOfCells_) + { + logger_->warn("Number of bytes < number of cells: {} < {} (Row {})", + row.numberOfBytes_, + p->numberOfCells_, + r); + blockValid = false; + break; + } + + // Read raster bins + std::size_t dataSize = p->numberOfCells_; + row.level_.resize(dataSize); + is.read(reinterpret_cast(row.level_.data()), + static_cast(dataSize)); + + is.seekg(static_cast(row.numberOfBytes_ - dataSize), + std::ios_base::cur); + bytesRead += row.numberOfBytes_; + } + } + + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + + p->dataSize_ = bytesRead; + + if (!ValidateMessage(is, bytesRead)) + { + blockValid = false; + } + + return blockValid; +} + +std::shared_ptr +DigitalRasterDataArrayPacket::Create(std::istream& is) +{ + std::shared_ptr packet = + std::make_shared(); + + if (!packet->Parse(is)) + { + packet.reset(); + } + + return packet; +} + +} // namespace scwx::wsr88d::rpg diff --git a/wxdata/source/scwx/wsr88d/rpg/level3_message_factory.cpp b/wxdata/source/scwx/wsr88d/rpg/level3_message_factory.cpp index 25675470..77af1672 100644 --- a/wxdata/source/scwx/wsr88d/rpg/level3_message_factory.cpp +++ b/wxdata/source/scwx/wsr88d/rpg/level3_message_factory.cpp @@ -119,9 +119,14 @@ static const std::unordered_map // {182, GraphicProductMessage::Create}, {184, GraphicProductMessage::Create}, {186, GraphicProductMessage::Create}, + {189, GraphicProductMessage::Create}, + {190, GraphicProductMessage::Create}, + {191, GraphicProductMessage::Create}, + {192, GraphicProductMessage::Create}, {193, GraphicProductMessage::Create}, {195, GraphicProductMessage::Create}, {196, GraphicProductMessage::Create}, + {197, GraphicProductMessage::Create}, {202, GraphicProductMessage::Create}}; std::shared_ptr Level3MessageFactory::Create(std::istream& is) diff --git a/wxdata/source/scwx/wsr88d/rpg/packet_factory.cpp b/wxdata/source/scwx/wsr88d/rpg/packet_factory.cpp index e3cd034b..eb85ebb4 100644 --- a/wxdata/source/scwx/wsr88d/rpg/packet_factory.cpp +++ b/wxdata/source/scwx/wsr88d/rpg/packet_factory.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -69,6 +70,7 @@ static const std::unordered_map create_ { {26, PointGraphicSymbolPacket::Create}, {28, GenericDataPacket::Create}, {29, GenericDataPacket::Create}, + {33, DigitalRasterDataArrayPacket::Create}, {0x0802, SetColorLevelPacket::Create}, {0x0E03, LinkedContourVectorPacket::Create}, {0x3501, UnlinkedContourVectorPacket::Create}, diff --git a/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp b/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp index 10fdbe72..d9417d27 100644 --- a/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp +++ b/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp @@ -21,28 +21,13 @@ static const std::string logPrefix_ = static const auto logger_ = util::Logger::Create(logPrefix_); static const std::set compressedProducts_ = { - 32, 94, 99, 134, 135, 138, 149, 152, 153, 154, 155, - 159, 161, 163, 165, 167, 168, 170, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 182, 186, 193, 195, 202}; + 32, 94, 99, 113, 134, 135, 138, 149, 152, 153, 154, 155, 159, + 161, 163, 165, 167, 168, 170, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 182, 186, 189, 190, 191, 192, 193, 195, 197, 202}; -static const std::set uncodedDataLevelProducts_ = {32, - 34, - 81, - 93, - 94, - 99, - 134, - 135, - 138, - 153, - 154, - 155, - 159, - 161, - 163, - 177, - 193, - 195}; +static const std::set uncodedDataLevelProducts_ = { + 32, 34, 81, 93, 94, 99, 134, 135, 138, 153, 154, 155, + 159, 161, 163, 177, 189, 190, 191, 192, 193, 195, 197}; static const std::unordered_map rangeMap_ { {19, 230}, {20, 460}, {27, 230}, {30, 230}, {31, 230}, {32, 230}, @@ -57,7 +42,8 @@ static const std::unordered_map rangeMap_ { {163, 300}, {165, 300}, {166, 230}, {167, 300}, {168, 300}, {169, 230}, {170, 230}, {171, 230}, {172, 230}, {173, 230}, {174, 230}, {175, 230}, {176, 230}, {177, 230}, {178, 300}, {179, 300}, {180, 89}, {181, 89}, - {182, 89}, {184, 89}, {186, 417}, {193, 460}, {195, 460}, {196, 50}}; + {182, 89}, {184, 89}, {186, 417}, {193, 460}, {195, 460}, {196, 50}, + {197, 230}}; static const std::unordered_map xResolutionMap_ { {19, 1000}, {20, 2000}, {27, 1000}, {30, 1000}, {31, 2000}, {32, 1000}, @@ -71,7 +57,7 @@ static const std::unordered_map xResolutionMap_ { {166, 250}, {167, 250}, {168, 250}, {169, 2000}, {170, 250}, {171, 2000}, {172, 250}, {173, 250}, {174, 250}, {175, 250}, {176, 250}, {177, 250}, {178, 1000}, {179, 1000}, {180, 150}, {181, 150}, {182, 150}, {184, 150}, - {186, 300}, {193, 250}, {195, 1000}}; + {186, 300}, {193, 250}, {195, 1000}, {197, 250}}; static const std::unordered_map yResolutionMap_ {{37, 1000}, {38, 4000}, @@ -86,7 +72,11 @@ static const std::unordered_map yResolutionMap_ {{37, 1000}, {90, 4000}, {97, 1000}, {98, 4000}, - {166, 250}}; + {166, 250}, + {189, 20}, + {190, 20}, + {191, 20}, + {192, 20}}; // GR uses different internal units than defined units in level 3 products static const std::unordered_map grScale_ { @@ -580,6 +570,10 @@ uint16_t ProductDescriptionBlock::number_of_levels() const break; case 134: + case 189: + case 190: + case 191: + case 192: numberOfLevels = 256; break; @@ -864,6 +858,10 @@ ProductDescriptionBlock::data_level_code(std::uint8_t level) const case 163: case 167: case 168: + case 189: + case 190: + case 191: + case 192: case 195: switch (level) { diff --git a/wxdata/wxdata.cmake b/wxdata/wxdata.cmake index 6a02a265..a30398a0 100644 --- a/wxdata/wxdata.cmake +++ b/wxdata/wxdata.cmake @@ -147,6 +147,7 @@ set(HDR_WSR88D_RPG include/scwx/wsr88d/rpg/ccb_header.hpp include/scwx/wsr88d/rpg/cell_trend_volume_scan_times.hpp include/scwx/wsr88d/rpg/digital_precipitation_data_array_packet.hpp include/scwx/wsr88d/rpg/digital_radial_data_array_packet.hpp + include/scwx/wsr88d/rpg/digital_raster_data_array_packet.hpp include/scwx/wsr88d/rpg/general_status_message.hpp include/scwx/wsr88d/rpg/generic_data_packet.hpp include/scwx/wsr88d/rpg/generic_radial_data_packet.hpp @@ -188,6 +189,7 @@ set(SRC_WSR88D_RPG source/scwx/wsr88d/rpg/ccb_header.cpp source/scwx/wsr88d/rpg/cell_trend_volume_scan_times.cpp source/scwx/wsr88d/rpg/digital_precipitation_data_array_packet.cpp source/scwx/wsr88d/rpg/digital_radial_data_array_packet.cpp + source/scwx/wsr88d/rpg/digital_raster_data_array_packet.cpp source/scwx/wsr88d/rpg/general_status_message.cpp source/scwx/wsr88d/rpg/generic_data_packet.cpp source/scwx/wsr88d/rpg/generic_radial_data_packet.cpp From 68a5baa5c4db933592a0f35c3bbdf3ed80c8ea53 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 17 May 2025 00:18:07 -0500 Subject: [PATCH 07/13] RPG clang-tidy cleanup --- .../wsr88d/rpg/level3_message_factory.hpp | 17 +- .../scwx/wsr88d/rpg/packet_factory.hpp | 17 +- .../wsr88d/rpg/product_description_block.hpp | 69 +++-- .../wsr88d/rpg/level3_message_factory.cpp | 20 +- .../source/scwx/wsr88d/rpg/packet_factory.cpp | 16 +- .../wsr88d/rpg/product_description_block.cpp | 288 ++++++++++-------- 6 files changed, 223 insertions(+), 204 deletions(-) diff --git a/wxdata/include/scwx/wsr88d/rpg/level3_message_factory.hpp b/wxdata/include/scwx/wsr88d/rpg/level3_message_factory.hpp index c2556434..2a5e42ca 100644 --- a/wxdata/include/scwx/wsr88d/rpg/level3_message_factory.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/level3_message_factory.hpp @@ -2,29 +2,22 @@ #include -namespace scwx -{ -namespace wsr88d -{ -namespace rpg +namespace scwx::wsr88d::rpg { class Level3MessageFactory { -private: +public: explicit Level3MessageFactory() = delete; ~Level3MessageFactory() = delete; - Level3MessageFactory(const Level3MessageFactory&) = delete; + Level3MessageFactory(const Level3MessageFactory&) = delete; Level3MessageFactory& operator=(const Level3MessageFactory&) = delete; - Level3MessageFactory(Level3MessageFactory&&) noexcept = delete; + Level3MessageFactory(Level3MessageFactory&&) noexcept = delete; Level3MessageFactory& operator=(Level3MessageFactory&&) noexcept = delete; -public: static std::shared_ptr Create(std::istream& is); }; -} // namespace rpg -} // namespace wsr88d -} // namespace scwx +} // namespace scwx::wsr88d::rpg diff --git a/wxdata/include/scwx/wsr88d/rpg/packet_factory.hpp b/wxdata/include/scwx/wsr88d/rpg/packet_factory.hpp index 889b8c3d..11e794e8 100644 --- a/wxdata/include/scwx/wsr88d/rpg/packet_factory.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/packet_factory.hpp @@ -2,29 +2,22 @@ #include -namespace scwx -{ -namespace wsr88d -{ -namespace rpg +namespace scwx::wsr88d::rpg { class PacketFactory { -private: +public: explicit PacketFactory() = delete; ~PacketFactory() = delete; - PacketFactory(const PacketFactory&) = delete; + PacketFactory(const PacketFactory&) = delete; PacketFactory& operator=(const PacketFactory&) = delete; - PacketFactory(PacketFactory&&) noexcept = delete; + PacketFactory(PacketFactory&&) noexcept = delete; PacketFactory& operator=(PacketFactory&&) noexcept = delete; -public: static std::shared_ptr Create(std::istream& is); }; -} // namespace rpg -} // namespace wsr88d -} // namespace scwx +} // namespace scwx::wsr88d::rpg diff --git a/wxdata/include/scwx/wsr88d/rpg/product_description_block.hpp b/wxdata/include/scwx/wsr88d/rpg/product_description_block.hpp index 30bdfdf2..a306460e 100644 --- a/wxdata/include/scwx/wsr88d/rpg/product_description_block.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/product_description_block.hpp @@ -12,8 +12,6 @@ namespace scwx::wsr88d::rpg { -class ProductDescriptionBlockImpl; - class ProductDescriptionBlock : public awips::Message { public: @@ -26,38 +24,38 @@ public: ProductDescriptionBlock(ProductDescriptionBlock&&) noexcept; ProductDescriptionBlock& operator=(ProductDescriptionBlock&&) noexcept; - [[nodiscard]] int16_t block_divider() const; - [[nodiscard]] float latitude_of_radar() const; - [[nodiscard]] float longitude_of_radar() const; - [[nodiscard]] int16_t height_of_radar() const; - [[nodiscard]] int16_t product_code() const; - [[nodiscard]] uint16_t operational_mode() const; - [[nodiscard]] uint16_t volume_coverage_pattern() const; - [[nodiscard]] int16_t sequence_number() const; - [[nodiscard]] uint16_t volume_scan_number() const; - [[nodiscard]] uint16_t volume_scan_date() const; - [[nodiscard]] uint32_t volume_scan_start_time() const; - [[nodiscard]] uint16_t generation_date_of_product() const; - [[nodiscard]] uint32_t generation_time_of_product() const; - [[nodiscard]] uint16_t elevation_number() const; - [[nodiscard]] uint16_t data_level_threshold(size_t i) const; - [[nodiscard]] uint8_t version() const; - [[nodiscard]] uint8_t spot_blank() const; - [[nodiscard]] uint32_t offset_to_symbology() const; - [[nodiscard]] uint32_t offset_to_graphic() const; - [[nodiscard]] uint32_t offset_to_tabular() const; + [[nodiscard]] std::int16_t block_divider() const; + [[nodiscard]] float latitude_of_radar() const; + [[nodiscard]] float longitude_of_radar() const; + [[nodiscard]] std::int16_t height_of_radar() const; + [[nodiscard]] std::int16_t product_code() const; + [[nodiscard]] std::uint16_t operational_mode() const; + [[nodiscard]] std::uint16_t volume_coverage_pattern() const; + [[nodiscard]] std::int16_t sequence_number() const; + [[nodiscard]] std::uint16_t volume_scan_number() const; + [[nodiscard]] std::uint16_t volume_scan_date() const; + [[nodiscard]] std::uint32_t volume_scan_start_time() const; + [[nodiscard]] std::uint16_t generation_date_of_product() const; + [[nodiscard]] std::uint32_t generation_time_of_product() const; + [[nodiscard]] std::uint16_t elevation_number() const; + [[nodiscard]] std::uint16_t data_level_threshold(size_t i) const; + [[nodiscard]] std::uint8_t version() const; + [[nodiscard]] std::uint8_t spot_blank() const; + [[nodiscard]] std::uint32_t offset_to_symbology() const; + [[nodiscard]] std::uint32_t offset_to_graphic() const; + [[nodiscard]] std::uint32_t offset_to_tabular() const; - [[nodiscard]] float range() const; - [[nodiscard]] uint16_t range_raw() const; - [[nodiscard]] float x_resolution() const; - [[nodiscard]] uint16_t x_resolution_raw() const; - [[nodiscard]] float y_resolution() const; - [[nodiscard]] uint16_t y_resolution_raw() const; + [[nodiscard]] float range() const; + [[nodiscard]] std::uint16_t range_raw() const; + [[nodiscard]] float x_resolution() const; + [[nodiscard]] std::uint16_t x_resolution_raw() const; + [[nodiscard]] float y_resolution() const; + [[nodiscard]] std::uint16_t y_resolution_raw() const; - [[nodiscard]] uint16_t threshold() const; - [[nodiscard]] float offset() const; - [[nodiscard]] float scale() const; - [[nodiscard]] uint16_t number_of_levels() const; + [[nodiscard]] std::uint16_t threshold() const; + [[nodiscard]] float offset() const; + [[nodiscard]] float scale() const; + [[nodiscard]] std::uint16_t number_of_levels() const; [[nodiscard]] std::optional data_level_code(std::uint8_t level) const; @@ -78,14 +76,15 @@ public: [[nodiscard]] bool IsCompressionEnabled() const; [[nodiscard]] bool IsDataLevelCoded() const; - [[nodiscard]] size_t data_size() const override; + [[nodiscard]] std::size_t data_size() const override; bool Parse(std::istream& is) override; - static constexpr size_t SIZE = 102u; + static constexpr std::size_t SIZE = 102u; private: - std::unique_ptr p; + class Impl; + std::unique_ptr p; }; } // namespace scwx::wsr88d::rpg diff --git a/wxdata/source/scwx/wsr88d/rpg/level3_message_factory.cpp b/wxdata/source/scwx/wsr88d/rpg/level3_message_factory.cpp index 77af1672..0d9d1725 100644 --- a/wxdata/source/scwx/wsr88d/rpg/level3_message_factory.cpp +++ b/wxdata/source/scwx/wsr88d/rpg/level3_message_factory.cpp @@ -9,22 +9,17 @@ #include #include -#include -namespace scwx -{ -namespace wsr88d -{ -namespace rpg +namespace scwx::wsr88d::rpg { static const std::string logPrefix_ = "scwx::wsr88d::rpg::level3_message_factory"; static const auto logger_ = util::Logger::Create(logPrefix_); -typedef std::function(Level3MessageHeader&&, - std::istream&)> - CreateLevel3MessageFunction; +using CreateLevel3MessageFunction = + std::function(Level3MessageHeader&&, + std::istream&)>; static const std::unordered_map // create_ {{2, GeneralStatusMessage::Create}, @@ -154,13 +149,12 @@ std::shared_ptr Level3MessageFactory::Create(std::istream& is) else if (headerValid) { // Seek to the end of the current message - is.seekg(header.length_of_message() - Level3MessageHeader::SIZE, + is.seekg(static_cast(header.length_of_message()) - + static_cast(Level3MessageHeader::SIZE), std::ios_base::cur); } return message; } -} // namespace rpg -} // namespace wsr88d -} // namespace scwx +} // namespace scwx::wsr88d::rpg diff --git a/wxdata/source/scwx/wsr88d/rpg/packet_factory.cpp b/wxdata/source/scwx/wsr88d/rpg/packet_factory.cpp index eb85ebb4..5458119c 100644 --- a/wxdata/source/scwx/wsr88d/rpg/packet_factory.cpp +++ b/wxdata/source/scwx/wsr88d/rpg/packet_factory.cpp @@ -28,18 +28,14 @@ #include -namespace scwx -{ -namespace wsr88d -{ -namespace rpg +namespace scwx::wsr88d::rpg { static const std::string logPrefix_ = "scwx::wsr88d::rpg::packet_factory"; static const auto logger_ = util::Logger::Create(logPrefix_); -typedef std::function(std::istream&)> - CreateMessageFunction; +using CreateMessageFunction = + std::function(std::istream&)>; static const std::unordered_map create_ { {1, TextAndSpecialSymbolPacket::Create}, @@ -83,7 +79,7 @@ std::shared_ptr PacketFactory::Create(std::istream& is) std::shared_ptr packet = nullptr; bool packetValid = true; - uint16_t packetCode; + std::uint16_t packetCode {0}; is.read(reinterpret_cast(&packetCode), 2); packetCode = ntohs(packetCode); @@ -110,6 +106,4 @@ std::shared_ptr PacketFactory::Create(std::istream& is) return packet; } -} // namespace rpg -} // namespace wsr88d -} // namespace scwx +} // namespace scwx::wsr88d::rpg diff --git a/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp b/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp index d9417d27..85550966 100644 --- a/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp +++ b/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -95,73 +96,57 @@ static const std::unordered_map grScale_ { {174, ((units::inches {1} * 0.01f) / units::millimeters {1})}, {175, ((units::inches {1} * 0.01f) / units::millimeters {1})}}; -class ProductDescriptionBlockImpl +class ProductDescriptionBlock::Impl { public: - explicit ProductDescriptionBlockImpl() : - blockDivider_ {0}, - latitudeOfRadar_ {0}, - longitudeOfRadar_ {0}, - heightOfRadar_ {0}, - productCode_ {0}, - operationalMode_ {0}, - volumeCoveragePattern_ {0}, - sequenceNumber_ {0}, - volumeScanNumber_ {0}, - volumeScanDate_ {0}, - volumeScanStartTime_ {0}, - generationDateOfProduct_ {0}, - generationTimeOfProduct_ {0}, - elevationNumber_ {0}, - version_ {0}, - spotBlank_ {0}, - offsetToSymbology_ {0}, - offsetToGraphic_ {0}, - offsetToTabular_ {0}, - parameters_ {0}, - halfwords_ {0} - { - } - ~ProductDescriptionBlockImpl() = default; + explicit Impl() = default; + ~Impl() = default; - uint16_t halfword(size_t i); + Impl(const Impl&) = delete; + Impl& operator=(const Impl&) = delete; + Impl(const Impl&&) = delete; + Impl& operator=(const Impl&&) = delete; - int16_t blockDivider_; - int32_t latitudeOfRadar_; - int32_t longitudeOfRadar_; - int16_t heightOfRadar_; - int16_t productCode_; - uint16_t operationalMode_; - uint16_t volumeCoveragePattern_; - int16_t sequenceNumber_; - uint16_t volumeScanNumber_; - uint16_t volumeScanDate_; - uint32_t volumeScanStartTime_; - uint16_t generationDateOfProduct_; - uint32_t generationTimeOfProduct_; + std::uint16_t halfword(std::size_t i); + + std::int16_t blockDivider_ {0}; + std::int32_t latitudeOfRadar_ {0}; + std::int32_t longitudeOfRadar_ {0}; + std::int16_t heightOfRadar_ {0}; + std::int16_t productCode_ {0}; + std::uint16_t operationalMode_ {0}; + std::uint16_t volumeCoveragePattern_ {0}; + std::int16_t sequenceNumber_ {0}; + std::uint16_t volumeScanNumber_ {0}; + std::uint16_t volumeScanDate_ {0}; + std::uint32_t volumeScanStartTime_ {0}; + std::uint16_t generationDateOfProduct_ {0}; + std::uint32_t generationTimeOfProduct_ {0}; // 27-28: Product dependent parameters 1 and 2 (Table V) - uint16_t elevationNumber_; + std::uint16_t elevationNumber_ {0}; // 30: Product dependent parameter 3 (Table V) // 31-46: Product dependent (Note 1) // 47-53: Product dependent parameters 4-10 (Table V, Note 3) - uint8_t version_; - uint8_t spotBlank_; - uint32_t offsetToSymbology_; - uint32_t offsetToGraphic_; - uint32_t offsetToTabular_; + std::uint8_t version_ {0}; + std::uint8_t spotBlank_ {0}; + std::uint32_t offsetToSymbology_ {0}; + std::uint32_t offsetToGraphic_ {0}; + std::uint32_t offsetToTabular_ {0}; - std::array parameters_; - std::array halfwords_; + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + std::array parameters_ {0}; + std::array halfwords_ {0}; + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) }; -uint16_t ProductDescriptionBlockImpl::halfword(size_t i) +std::uint16_t ProductDescriptionBlock::Impl::halfword(std::size_t i) { // Halfwords start at halfword 31 - return halfwords_[i - 31]; + // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers) + return halfwords_.at(i - 31); } -ProductDescriptionBlock::ProductDescriptionBlock() : - p(std::make_unique()) +ProductDescriptionBlock::ProductDescriptionBlock() : p(std::make_unique()) { } ProductDescriptionBlock::~ProductDescriptionBlock() = default; @@ -171,102 +156,104 @@ ProductDescriptionBlock::ProductDescriptionBlock( ProductDescriptionBlock& ProductDescriptionBlock::operator=( ProductDescriptionBlock&&) noexcept = default; -int16_t ProductDescriptionBlock::block_divider() const +std::int16_t ProductDescriptionBlock::block_divider() const { return p->blockDivider_; } float ProductDescriptionBlock::latitude_of_radar() const { - return p->latitudeOfRadar_ * 0.001f; + static constexpr float kScale = 0.001f; + return static_cast(p->latitudeOfRadar_) * kScale; } float ProductDescriptionBlock::longitude_of_radar() const { - return p->longitudeOfRadar_ * 0.001f; + static constexpr float kScale = 0.001f; + return static_cast(p->longitudeOfRadar_) * kScale; } -int16_t ProductDescriptionBlock::height_of_radar() const +std::int16_t ProductDescriptionBlock::height_of_radar() const { return p->heightOfRadar_; } -int16_t ProductDescriptionBlock::product_code() const +std::int16_t ProductDescriptionBlock::product_code() const { return p->productCode_; } -uint16_t ProductDescriptionBlock::operational_mode() const +std::uint16_t ProductDescriptionBlock::operational_mode() const { return p->operationalMode_; } -uint16_t ProductDescriptionBlock::volume_coverage_pattern() const +std::uint16_t ProductDescriptionBlock::volume_coverage_pattern() const { return p->volumeCoveragePattern_; } -int16_t ProductDescriptionBlock::sequence_number() const +std::int16_t ProductDescriptionBlock::sequence_number() const { return p->sequenceNumber_; } -uint16_t ProductDescriptionBlock::volume_scan_number() const +std::uint16_t ProductDescriptionBlock::volume_scan_number() const { return p->volumeScanNumber_; } -uint16_t ProductDescriptionBlock::volume_scan_date() const +std::uint16_t ProductDescriptionBlock::volume_scan_date() const { return p->volumeScanDate_; } -uint32_t ProductDescriptionBlock::volume_scan_start_time() const +std::uint32_t ProductDescriptionBlock::volume_scan_start_time() const { return p->volumeScanStartTime_; } -uint16_t ProductDescriptionBlock::generation_date_of_product() const +std::uint16_t ProductDescriptionBlock::generation_date_of_product() const { return p->generationDateOfProduct_; } -uint32_t ProductDescriptionBlock::generation_time_of_product() const +std::uint32_t ProductDescriptionBlock::generation_time_of_product() const { return p->generationTimeOfProduct_; } -uint16_t ProductDescriptionBlock::elevation_number() const +std::uint16_t ProductDescriptionBlock::elevation_number() const { return p->elevationNumber_; } -uint16_t ProductDescriptionBlock::data_level_threshold(size_t i) const +std::uint16_t ProductDescriptionBlock::data_level_threshold(std::size_t i) const { - return p->halfwords_[i]; + return p->halfwords_.at(i); } -uint8_t ProductDescriptionBlock::version() const +std::uint8_t ProductDescriptionBlock::version() const { return p->version_; } -uint8_t ProductDescriptionBlock::spot_blank() const +std::uint8_t ProductDescriptionBlock::spot_blank() const { return p->spotBlank_; } -uint32_t ProductDescriptionBlock::offset_to_symbology() const +std::uint32_t ProductDescriptionBlock::offset_to_symbology() const { return p->offsetToSymbology_; } -uint32_t ProductDescriptionBlock::offset_to_graphic() const +std::uint32_t ProductDescriptionBlock::offset_to_graphic() const { return p->offsetToGraphic_; } -uint32_t ProductDescriptionBlock::offset_to_tabular() const +std::uint32_t ProductDescriptionBlock::offset_to_tabular() const { return p->offsetToTabular_; } @@ -276,14 +263,14 @@ float ProductDescriptionBlock::range() const return range_raw(); } -uint16_t ProductDescriptionBlock::range_raw() const +std::uint16_t ProductDescriptionBlock::range_raw() const { - uint16_t range = 0; + std::uint16_t range = 0; auto it = rangeMap_.find(p->productCode_); if (it != rangeMap_.cend()) { - range = static_cast(it->second); + range = static_cast(it->second); } return range; @@ -291,17 +278,18 @@ uint16_t ProductDescriptionBlock::range_raw() const float ProductDescriptionBlock::x_resolution() const { - return x_resolution_raw() * 0.001f; + static constexpr float kScale = 0.001f; + return static_cast(x_resolution_raw()) * kScale; } -uint16_t ProductDescriptionBlock::x_resolution_raw() const +std::uint16_t ProductDescriptionBlock::x_resolution_raw() const { - uint16_t xResolution = 0; + std::uint16_t xResolution = 0; auto it = xResolutionMap_.find(p->productCode_); if (it != xResolutionMap_.cend()) { - xResolution = static_cast(it->second); + xResolution = static_cast(it->second); } return xResolution; @@ -309,25 +297,28 @@ uint16_t ProductDescriptionBlock::x_resolution_raw() const float ProductDescriptionBlock::y_resolution() const { - return y_resolution_raw() * 0.001f; + static constexpr float kScale = 0.001f; + return static_cast(y_resolution_raw()) * kScale; } -uint16_t ProductDescriptionBlock::y_resolution_raw() const +std::uint16_t ProductDescriptionBlock::y_resolution_raw() const { - uint16_t yResolution = 0; + std::uint16_t yResolution = 0; auto it = yResolutionMap_.find(p->productCode_); if (it != yResolutionMap_.cend()) { - yResolution = static_cast(it->second); + yResolution = static_cast(it->second); } return yResolution; } -uint16_t ProductDescriptionBlock::threshold() const +std::uint16_t ProductDescriptionBlock::threshold() const { - uint16_t threshold = 1; + std::uint16_t threshold = 1; + + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) switch (p->productCode_) { @@ -384,6 +375,8 @@ uint16_t ProductDescriptionBlock::threshold() const break; } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + return threshold; } @@ -391,6 +384,8 @@ float ProductDescriptionBlock::offset() const { float offset = 0.0f; + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + switch (p->productCode_) { case 32: @@ -406,7 +401,8 @@ float ProductDescriptionBlock::offset() const case 186: case 193: case 195: - offset = static_cast(p->halfword(31)) * 0.1f; + offset = + static_cast(static_cast(p->halfword(31))) * 0.1f; break; case 134: @@ -414,7 +410,7 @@ float ProductDescriptionBlock::offset() const break; case 135: - offset = static_cast(p->halfword(33)); + offset = static_cast(p->halfword(33)); break; case 159: @@ -435,6 +431,8 @@ float ProductDescriptionBlock::offset() const break; } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + return offset; } @@ -442,6 +440,8 @@ float ProductDescriptionBlock::scale() const { float scale = 1.0f; + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + switch (p->productCode_) { case 32: @@ -456,11 +456,11 @@ float ProductDescriptionBlock::scale() const case 186: case 193: case 195: - scale = p->halfword(32) * 0.1f; + scale = static_cast(p->halfword(32)) * 0.1f; break; case 81: - scale = p->halfword(32) * 0.001f; + scale = static_cast(p->halfword(32)) * 0.001f; break; case 134: @@ -472,7 +472,7 @@ float ProductDescriptionBlock::scale() const break; case 138: - scale = p->halfword(32) * 0.01f; + scale = static_cast(p->halfword(32)) * 0.01f; break; case 159: @@ -493,12 +493,16 @@ float ProductDescriptionBlock::scale() const break; } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + return scale; } -uint16_t ProductDescriptionBlock::number_of_levels() const +std::uint16_t ProductDescriptionBlock::number_of_levels() const { - uint16_t numberOfLevels = 16u; + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + + std::uint16_t numberOfLevels = 16u; switch (p->productCode_) { @@ -613,6 +617,8 @@ uint16_t ProductDescriptionBlock::number_of_levels() const break; } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + return numberOfLevels; } @@ -620,6 +626,8 @@ std::uint16_t ProductDescriptionBlock::log_start() const { std::uint16_t logStart = std::numeric_limits::max(); + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + switch (p->productCode_) { case 134: @@ -630,6 +638,8 @@ std::uint16_t ProductDescriptionBlock::log_start() const break; } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + return logStart; } @@ -637,6 +647,8 @@ float ProductDescriptionBlock::log_offset() const { float logOffset = 0.0f; + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + switch (p->productCode_) { case 134: @@ -647,6 +659,8 @@ float ProductDescriptionBlock::log_offset() const break; } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + return logOffset; } @@ -654,6 +668,8 @@ float ProductDescriptionBlock::log_scale() const { float logScale = 1.0f; + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + switch (p->productCode_) { case 134: @@ -664,6 +680,8 @@ float ProductDescriptionBlock::log_scale() const break; } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + return logScale; } @@ -682,6 +700,8 @@ float ProductDescriptionBlock::gr_scale() const std::uint8_t ProductDescriptionBlock::data_mask() const { + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + std::uint8_t dataMask = 0xff; switch (p->productCode_) @@ -694,6 +714,8 @@ std::uint8_t ProductDescriptionBlock::data_mask() const break; } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + return dataMask; } @@ -701,6 +723,8 @@ std::uint8_t ProductDescriptionBlock::topped_mask() const { std::uint8_t toppedMask = 0x00; + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + switch (p->productCode_) { case 135: @@ -711,6 +735,8 @@ std::uint8_t ProductDescriptionBlock::topped_mask() const break; } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + return toppedMask; } @@ -722,7 +748,7 @@ units::angle::degrees ProductDescriptionBlock::elevation() const { // Elevation is given in tenths of a degree // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers) - elevation = static_cast(p->parameters_[2]) * 0.1; + elevation = static_cast(p->parameters_[2]) * 0.1; } return units::angle::degrees {elevation}; @@ -737,11 +763,15 @@ bool ProductDescriptionBlock::IsCompressionEnabled() const { bool isCompressed = false; + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + if (compressedProducts_.contains(p->productCode_)) { isCompressed = (p->parameters_[7] == 1u); } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + return isCompressed; } @@ -750,7 +780,7 @@ bool ProductDescriptionBlock::IsDataLevelCoded() const return !uncodedDataLevelProducts_.contains(p->productCode_); } -size_t ProductDescriptionBlock::data_size() const +std::size_t ProductDescriptionBlock::data_size() const { return SIZE; } @@ -761,6 +791,8 @@ bool ProductDescriptionBlock::Parse(std::istream& is) const std::streampos blockStart = is.tellg(); + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + is.read(reinterpret_cast(&p->blockDivider_), 2); // 10 is.read(reinterpret_cast(&p->latitudeOfRadar_), 4); // 11-12 is.read(reinterpret_cast(&p->longitudeOfRadar_), 4); // 13-14 @@ -774,27 +806,31 @@ bool ProductDescriptionBlock::Parse(std::istream& is) is.read(reinterpret_cast(&p->volumeScanStartTime_), 4); // 22-23 is.read(reinterpret_cast(&p->generationDateOfProduct_), 2); // 24 is.read(reinterpret_cast(&p->generationTimeOfProduct_), 4); // 25-26 - is.read(reinterpret_cast(&p->parameters_[0]), 2 * 2); // 27-28 - is.read(reinterpret_cast(&p->elevationNumber_), 2); // 29 - is.read(reinterpret_cast(&p->parameters_[2]), 2); // 30 - is.read(reinterpret_cast(&p->halfwords_[0]), 16 * 2); // 31-46 - is.read(reinterpret_cast(&p->parameters_[3]), 7 * 2); // 47-53 - is.read(reinterpret_cast(&p->version_), 1); // 54 - is.read(reinterpret_cast(&p->spotBlank_), 1); // 54 - is.read(reinterpret_cast(&p->offsetToSymbology_), 4); // 55-56 - is.read(reinterpret_cast(&p->offsetToGraphic_), 4); // 57-58 - is.read(reinterpret_cast(&p->offsetToTabular_), 4); // 59-60 + is.read(reinterpret_cast(&p->parameters_[0]), + static_cast(2 * 2)); // 27-28 + is.read(reinterpret_cast(&p->elevationNumber_), 2); // 29 + is.read(reinterpret_cast(&p->parameters_[2]), 2); // 30 + is.read(reinterpret_cast(&p->halfwords_[0]), + static_cast(16 * 2)); // 31-46 + is.read(reinterpret_cast(&p->parameters_[3]), + static_cast(7 * 2)); // 47-53 + is.read(reinterpret_cast(&p->version_), 1); // 54 + is.read(reinterpret_cast(&p->spotBlank_), 1); // 54 + is.read(reinterpret_cast(&p->offsetToSymbology_), 4); // 55-56 + is.read(reinterpret_cast(&p->offsetToGraphic_), 4); // 57-58 + is.read(reinterpret_cast(&p->offsetToTabular_), 4); // 59-60 - p->blockDivider_ = ntohs(p->blockDivider_); - p->latitudeOfRadar_ = ntohl(p->latitudeOfRadar_); - p->longitudeOfRadar_ = ntohl(p->longitudeOfRadar_); - p->heightOfRadar_ = ntohs(p->heightOfRadar_); - p->productCode_ = ntohs(p->productCode_); - p->operationalMode_ = ntohs(p->operationalMode_); - p->volumeCoveragePattern_ = ntohs(p->volumeCoveragePattern_); - p->sequenceNumber_ = ntohs(p->sequenceNumber_); - p->volumeScanNumber_ = ntohs(p->volumeScanNumber_); - p->volumeScanDate_ = ntohs(p->volumeScanDate_); + p->blockDivider_ = static_cast(ntohs(p->blockDivider_)); + p->latitudeOfRadar_ = static_cast(ntohl(p->latitudeOfRadar_)); + p->longitudeOfRadar_ = + static_cast(ntohl(p->longitudeOfRadar_)); + p->heightOfRadar_ = static_cast(ntohs(p->heightOfRadar_)); + p->productCode_ = static_cast(ntohs(p->productCode_)); + p->operationalMode_ = ntohs(p->operationalMode_); + p->volumeCoveragePattern_ = ntohs(p->volumeCoveragePattern_); + p->sequenceNumber_ = static_cast(ntohs(p->sequenceNumber_)); + p->volumeScanNumber_ = ntohs(p->volumeScanNumber_); + p->volumeScanDate_ = ntohs(p->volumeScanDate_); p->volumeScanStartTime_ = ntohl(p->volumeScanStartTime_); p->generationDateOfProduct_ = ntohs(p->generationDateOfProduct_); p->generationTimeOfProduct_ = ntohl(p->generationTimeOfProduct_); @@ -827,6 +863,8 @@ bool ProductDescriptionBlock::Parse(std::istream& is) } } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + if (blockValid) { logger_->trace("Product code: {}", p->productCode_); @@ -844,6 +882,8 @@ bool ProductDescriptionBlock::Parse(std::istream& is) std::optional ProductDescriptionBlock::data_level_code(std::uint8_t level) const { + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + switch (p->productCode_) { case 32: @@ -1033,11 +1073,11 @@ ProductDescriptionBlock::data_level_code(std::uint8_t level) const if (number_of_levels() <= 16 && level < 16 && !uncodedDataLevelProducts_.contains(p->productCode_)) { - uint16_t th = data_level_threshold(level); + std::uint16_t th = data_level_threshold(level); if ((th & 0x8000u)) { // If bit 0 is one, then the LSB is coded - uint16_t lsb = th & 0x00ffu; + std::uint16_t lsb = th & 0x00ffu; switch (lsb) { @@ -1081,6 +1121,8 @@ ProductDescriptionBlock::data_level_code(std::uint8_t level) const } } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + return std::nullopt; } @@ -1099,6 +1141,8 @@ ProductDescriptionBlock::data_value(std::uint8_t level) const std::optional f = std::nullopt; + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + // Different products use different scale/offset formulas if (numberOfLevels > 16 || uncodedDataLevelProducts_.contains(p->productCode_)) @@ -1116,17 +1160,17 @@ ProductDescriptionBlock::data_value(std::uint8_t level) const case 174: case 175: case 176: - f = (level - dataOffset) / dataScale; + f = (static_cast(level) - dataOffset) / dataScale; break; case 134: if (level < log_start()) { - f = (level - dataOffset) / dataScale; + f = (static_cast(level) - dataOffset) / dataScale; } else { - f = expf((level - log_offset()) / log_scale()); + f = expf((static_cast(level) - log_offset()) / log_scale()); } break; @@ -1135,7 +1179,7 @@ ProductDescriptionBlock::data_value(std::uint8_t level) const [[fallthrough]]; default: - f = level * dataScale + dataOffset; + f = static_cast(level) * dataScale + dataOffset; break; } } @@ -1175,6 +1219,8 @@ ProductDescriptionBlock::data_value(std::uint8_t level) const } } + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + // Scale for GR compatibility if (f.has_value()) { From c0280fcfab95e1ecd29c704e21a83267b37cf31d Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 17 May 2025 00:25:07 -0500 Subject: [PATCH 08/13] Add missing data_size() function to DigitalRasterDataArrayPacket --- .../scwx/wsr88d/rpg/digital_raster_data_array_packet.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/wxdata/source/scwx/wsr88d/rpg/digital_raster_data_array_packet.cpp b/wxdata/source/scwx/wsr88d/rpg/digital_raster_data_array_packet.cpp index ece33807..c03c9244 100644 --- a/wxdata/source/scwx/wsr88d/rpg/digital_raster_data_array_packet.cpp +++ b/wxdata/source/scwx/wsr88d/rpg/digital_raster_data_array_packet.cpp @@ -101,6 +101,11 @@ DigitalRasterDataArrayPacket::level(std::uint16_t r) const return p->row_[r].level_; } +size_t DigitalRasterDataArrayPacket::data_size() const +{ + return p->dataSize_; +} + bool DigitalRasterDataArrayPacket::Parse(std::istream& is) { bool blockValid = true; From b0e7f24be26b9d19f1d89909de7ac07ea6b29cc0 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 17 May 2025 00:45:36 -0500 Subject: [PATCH 09/13] Fix RdaAdaptationData seek offset --- wxdata/source/scwx/wsr88d/rda/rda_adaptation_data.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wxdata/source/scwx/wsr88d/rda/rda_adaptation_data.cpp b/wxdata/source/scwx/wsr88d/rda/rda_adaptation_data.cpp index 05887f2a..7ccd5863 100644 --- a/wxdata/source/scwx/wsr88d/rda/rda_adaptation_data.cpp +++ b/wxdata/source/scwx/wsr88d/rda/rda_adaptation_data.cpp @@ -1339,7 +1339,7 @@ bool RdaAdaptationData::Parse(std::istream& is) ReadChar(is, p->slatdir_); // 1316-1319 ReadChar(is, p->slondir_); // 1320-1323 - is.seekg(3824, std::ios_base::cur); // 1324-2499 + is.seekg(1176, std::ios_base::cur); // 1324-2499 is.read(reinterpret_cast(&p->digRcvrClockFreq_), 8); // 2500-2507 is.read(reinterpret_cast(&p->cohoFreq_), 8); // 2508-2515 From 2a5068c4bb066331da043da9545b2b6eb2c538dd Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 17 May 2025 01:21:32 -0500 Subject: [PATCH 10/13] Fixing formatting --- .../wsr88d/rda/digital_radar_data_generic.hpp | 22 ++++++++++--------- .../scwx/wsr88d/rda/rda_status_data.cpp | 2 +- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/wxdata/include/scwx/wsr88d/rda/digital_radar_data_generic.hpp b/wxdata/include/scwx/wsr88d/rda/digital_radar_data_generic.hpp index 07f3c111..0441f17a 100644 --- a/wxdata/include/scwx/wsr88d/rda/digital_radar_data_generic.hpp +++ b/wxdata/include/scwx/wsr88d/rda/digital_radar_data_generic.hpp @@ -118,17 +118,19 @@ public: MomentDataBlock(MomentDataBlock&&) noexcept; MomentDataBlock& operator=(MomentDataBlock&&) noexcept; - [[nodiscard]] std::uint16_t number_of_data_moment_gates() const override; + [[nodiscard]] std::uint16_t number_of_data_moment_gates() const override; [[nodiscard]] units::kilometers data_moment_range() const override; - [[nodiscard]] std::int16_t data_moment_range_raw() const override; - [[nodiscard]] units::kilometers data_moment_range_sample_interval() const override; - [[nodiscard]] std::uint16_t data_moment_range_sample_interval_raw() const override; - [[nodiscard]] float snr_threshold() const; - [[nodiscard]] std::int16_t snr_threshold_raw() const override; - [[nodiscard]] std::uint8_t data_word_size() const override; - [[nodiscard]] float scale() const override; - [[nodiscard]] float offset() const override; - [[nodiscard]] const void* data_moments() const override; + [[nodiscard]] std::int16_t data_moment_range_raw() const override; + [[nodiscard]] units::kilometers + data_moment_range_sample_interval() const override; + [[nodiscard]] std::uint16_t + data_moment_range_sample_interval_raw() const override; + [[nodiscard]] float snr_threshold() const; + [[nodiscard]] std::int16_t snr_threshold_raw() const override; + [[nodiscard]] std::uint8_t data_word_size() const override; + [[nodiscard]] float scale() const override; + [[nodiscard]] float offset() const override; + [[nodiscard]] const void* data_moments() const override; static std::shared_ptr Create(const std::string& dataBlockType, diff --git a/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp b/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp index 375d46b8..81ff4463 100644 --- a/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp +++ b/wxdata/source/scwx/wsr88d/rda/rda_status_data.cpp @@ -304,7 +304,7 @@ bool RdaStatusData::Parse(std::istream& is) p->signalProcessingOptions_ = ntohs(p->signalProcessingOptions_); p->statusVersion_ = ntohs(p->statusVersion_); } - + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) if (!ValidateMessage(is, bytesRead)) From ade40806b660cebdf9eae2bceeea4414528b31aa Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 17 May 2025 15:38:26 -0500 Subject: [PATCH 11/13] AWIPS message byte swap cleanup --- wxdata/include/scwx/awips/message.hpp | 205 ++++++++++++++++---------- 1 file changed, 126 insertions(+), 79 deletions(-) diff --git a/wxdata/include/scwx/awips/message.hpp b/wxdata/include/scwx/awips/message.hpp index 486e7f06..12ec226c 100644 --- a/wxdata/include/scwx/awips/message.hpp +++ b/wxdata/include/scwx/awips/message.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include #include @@ -52,113 +53,159 @@ public: static float SwapFloat(float f) { - std::uint32_t temp; - std::memcpy(&temp, &f, sizeof(std::uint32_t)); - temp = ntohl(temp); - std::memcpy(&f, &temp, sizeof(float)); + if constexpr (std::endian::native == std::endian::little) + { + // Variable is initialized by memcpy + // NOLINTNEXTLINE(cppcoreguidelines-init-variables) + std::uint32_t temp; + std::memcpy(&temp, &f, sizeof(std::uint32_t)); + temp = ntohl(temp); + std::memcpy(&f, &temp, sizeof(float)); + } return f; } static double SwapDouble(double d) { - std::uint64_t temp; - std::memcpy(&temp, &d, sizeof(std::uint64_t)); - temp = ntohll(temp); - std::memcpy(&d, &temp, sizeof(float)); + if constexpr (std::endian::native == std::endian::little) + { + // Variable is initialized by memcpy + // NOLINTNEXTLINE(cppcoreguidelines-init-variables) + std::uint64_t temp; + std::memcpy(&temp, &d, sizeof(std::uint64_t)); + temp = Swap64(temp); + std::memcpy(&d, &temp, sizeof(float)); + } return d; } - template - static void SwapArray(std::array& arr, - std::size_t size = _Size) + static std::uint64_t Swap64(std::uint64_t value) { - std::transform(std::execution::par_unseq, - arr.begin(), - arr.begin() + size, - arr.begin(), - [](float f) { return SwapFloat(f); }); + if constexpr (std::endian::native == std::endian::little) + { + // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) + std::uint32_t high = ntohl(static_cast(value >> 32)); + std::uint32_t low = + ntohl(static_cast(value & 0xFFFFFFFFULL)); + return (static_cast(low) << 32) | high; + // NOLINTEND(cppcoreguidelines-avoid-magic-numbers) + } + else + { + return value; + } } - template - static void SwapArray(std::array& arr, - std::size_t size = _Size) + template + static void SwapArray(std::array& arr, + std::size_t size = kSize) { - std::transform(std::execution::par_unseq, - arr.begin(), - arr.begin() + size, - arr.begin(), - [](std::int16_t u) { return ntohs(u); }); + if constexpr (std::endian::native == std::endian::little) + { + std::transform(std::execution::par_unseq, + arr.begin(), + arr.begin() + size, + arr.begin(), + [](float f) { return SwapFloat(f); }); + } } - template - static void SwapArray(std::array& arr, - std::size_t size = _Size) + template + static void SwapArray(std::array& arr, + std::size_t size = kSize) { - std::transform(std::execution::par_unseq, - arr.begin(), - arr.begin() + size, - arr.begin(), - [](std::uint16_t u) { return ntohs(u); }); + if constexpr (std::endian::native == std::endian::little) + { + std::transform(std::execution::par_unseq, + arr.begin(), + arr.begin() + size, + arr.begin(), + [](std::int16_t u) { return ntohs(u); }); + } } - template - static void SwapArray(std::array& arr, - std::size_t size = _Size) + template + static void SwapArray(std::array& arr, + std::size_t size = kSize) { - std::transform(std::execution::par_unseq, - arr.begin(), - arr.begin() + size, - arr.begin(), - [](std::uint32_t u) { return ntohl(u); }); + if constexpr (std::endian::native == std::endian::little) + { + std::transform(std::execution::par_unseq, + arr.begin(), + arr.begin() + size, + arr.begin(), + [](std::uint16_t u) { return ntohs(u); }); + } + } + + template + static void SwapArray(std::array& arr, + std::size_t size = kSize) + { + if constexpr (std::endian::native == std::endian::little) + { + std::transform(std::execution::par_unseq, + arr.begin(), + arr.begin() + size, + arr.begin(), + [](std::uint32_t u) { return ntohl(u); }); + } } template static void SwapMap(std::map& m) { - std::for_each(std::execution::par_unseq, - m.begin(), - m.end(), - [](auto& p) { p.second = SwapFloat(p.second); }); + if constexpr (std::endian::native == std::endian::little) + { + std::for_each(std::execution::par_unseq, + m.begin(), + m.end(), + [](auto& p) { p.second = SwapFloat(p.second); }); + } } template static void SwapVector(std::vector& v) { - std::transform(std::execution::par_unseq, - v.begin(), - v.end(), - v.begin(), - [](T u) - { - if constexpr (std::is_same_v || - std::is_same_v) - { - return static_cast(ntohs(u)); - } - else if constexpr (std::is_same_v || - std::is_same_v) - { - return static_cast(ntohl(u)); - } - else if constexpr (std::is_same_v || - std::is_same_v) - { - return static_cast(ntohll(u)); - } - else if constexpr (std::is_same_v) - { - return SwapFloat(u); - } - else if constexpr (std::is_same_v) - { - return SwapDouble(u); - } - else - { - static_assert(std::is_same_v, - "Unsupported type for SwapVector"); - } - }); + if constexpr (std::endian::native == std::endian::little) + { + std::transform( + std::execution::par_unseq, + v.begin(), + v.end(), + v.begin(), + [](T u) + { + if constexpr (std::is_same_v || + std::is_same_v) + { + return static_cast(ntohs(u)); + } + else if constexpr (std::is_same_v || + std::is_same_v) + { + return static_cast(ntohl(u)); + } + else if constexpr (std::is_same_v || + std::is_same_v) + { + return static_cast(Swap64(u)); + } + else if constexpr (std::is_same_v) + { + return SwapFloat(u); + } + else if constexpr (std::is_same_v) + { + return SwapDouble(u); + } + else + { + static_assert(std::is_same_v, + "Unsupported type for SwapVector"); + } + }); + } } private: From 018052b78db1fdf2f3ed7af56fc6f944d5e14b4e Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 17 May 2025 15:44:41 -0500 Subject: [PATCH 12/13] Address RDA/RPG Build 23.0 clang-tidy comments --- wxdata/include/scwx/wsr88d/rda/rda_prf_data.hpp | 2 +- .../scwx/wsr88d/rpg/digital_raster_data_array_packet.hpp | 2 +- wxdata/source/scwx/wsr88d/rda/level2_message_factory.cpp | 4 ++-- wxdata/source/scwx/wsr88d/rda/rda_prf_data.cpp | 2 +- .../scwx/wsr88d/rpg/digital_raster_data_array_packet.cpp | 2 +- wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/wxdata/include/scwx/wsr88d/rda/rda_prf_data.hpp b/wxdata/include/scwx/wsr88d/rda/rda_prf_data.hpp index 1a04aacb..eb42268b 100644 --- a/wxdata/include/scwx/wsr88d/rda/rda_prf_data.hpp +++ b/wxdata/include/scwx/wsr88d/rda/rda_prf_data.hpp @@ -9,7 +9,7 @@ class RdaPrfData : public Level2Message { public: explicit RdaPrfData(); - ~RdaPrfData(); + ~RdaPrfData() override; RdaPrfData(const RdaPrfData&) = delete; RdaPrfData& operator=(const RdaPrfData&) = delete; diff --git a/wxdata/include/scwx/wsr88d/rpg/digital_raster_data_array_packet.hpp b/wxdata/include/scwx/wsr88d/rpg/digital_raster_data_array_packet.hpp index 76b0f2c3..c0309568 100644 --- a/wxdata/include/scwx/wsr88d/rpg/digital_raster_data_array_packet.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/digital_raster_data_array_packet.hpp @@ -12,7 +12,7 @@ class DigitalRasterDataArrayPacket : public Packet { public: explicit DigitalRasterDataArrayPacket(); - ~DigitalRasterDataArrayPacket(); + ~DigitalRasterDataArrayPacket() override; DigitalRasterDataArrayPacket(const DigitalRasterDataArrayPacket&) = delete; DigitalRasterDataArrayPacket& diff --git a/wxdata/source/scwx/wsr88d/rda/level2_message_factory.cpp b/wxdata/source/scwx/wsr88d/rda/level2_message_factory.cpp index b253cdf8..7fe5b77e 100644 --- a/wxdata/source/scwx/wsr88d/rda/level2_message_factory.cpp +++ b/wxdata/source/scwx/wsr88d/rda/level2_message_factory.cpp @@ -142,9 +142,9 @@ Level2MessageInfo Level2MessageFactory::Create(std::istream& is, // Estimate remaining size static const std::uint16_t kMinRemainingSegments_ = 100u; - std::uint16_t remainingSegments = std::max( + const std::uint16_t remainingSegments = std::max( totalSegments - segment + 1, kMinRemainingSegments_); - std::size_t remainingSize = remainingSegments * dataSize; + const std::size_t remainingSize = remainingSegments * dataSize; ctx->messageData_.resize(ctx->bufferedSize_ + remainingSize); } diff --git a/wxdata/source/scwx/wsr88d/rda/rda_prf_data.cpp b/wxdata/source/scwx/wsr88d/rda/rda_prf_data.cpp index d516309b..147714c7 100644 --- a/wxdata/source/scwx/wsr88d/rda/rda_prf_data.cpp +++ b/wxdata/source/scwx/wsr88d/rda/rda_prf_data.cpp @@ -42,7 +42,7 @@ bool RdaPrfData::Parse(std::istream& is) bool messageValid = true; std::size_t bytesRead = 0; - std::streampos isBegin = is.tellg(); + const std::streampos isBegin = is.tellg(); is.read(reinterpret_cast(&p->numberOfWaveforms_), 2); // 1 is.seekg(2, std::ios_base::cur); // 2 diff --git a/wxdata/source/scwx/wsr88d/rpg/digital_raster_data_array_packet.cpp b/wxdata/source/scwx/wsr88d/rpg/digital_raster_data_array_packet.cpp index c03c9244..2e0ef662 100644 --- a/wxdata/source/scwx/wsr88d/rpg/digital_raster_data_array_packet.cpp +++ b/wxdata/source/scwx/wsr88d/rpg/digital_raster_data_array_packet.cpp @@ -185,7 +185,7 @@ bool DigitalRasterDataArrayPacket::Parse(std::istream& is) } // Read raster bins - std::size_t dataSize = p->numberOfCells_; + const std::size_t dataSize = p->numberOfCells_; row.level_.resize(dataSize); is.read(reinterpret_cast(row.level_.data()), static_cast(dataSize)); diff --git a/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp b/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp index 85550966..2d70ad7b 100644 --- a/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp +++ b/wxdata/source/scwx/wsr88d/rpg/product_description_block.cpp @@ -1073,11 +1073,11 @@ ProductDescriptionBlock::data_level_code(std::uint8_t level) const if (number_of_levels() <= 16 && level < 16 && !uncodedDataLevelProducts_.contains(p->productCode_)) { - std::uint16_t th = data_level_threshold(level); + const std::uint16_t th = data_level_threshold(level); if ((th & 0x8000u)) { // If bit 0 is one, then the LSB is coded - std::uint16_t lsb = th & 0x00ffu; + const std::uint16_t lsb = th & 0x00ffu; switch (lsb) { From f3debc08de1befa8be3f60f187925771c6f62438 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 17 May 2025 17:12:23 -0500 Subject: [PATCH 13/13] clang-tidy updates for AWIPS message --- wxdata/include/scwx/awips/message.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/wxdata/include/scwx/awips/message.hpp b/wxdata/include/scwx/awips/message.hpp index 12ec226c..5cd81000 100644 --- a/wxdata/include/scwx/awips/message.hpp +++ b/wxdata/include/scwx/awips/message.hpp @@ -84,8 +84,9 @@ public: if constexpr (std::endian::native == std::endian::little) { // NOLINTBEGIN(cppcoreguidelines-avoid-magic-numbers) - std::uint32_t high = ntohl(static_cast(value >> 32)); - std::uint32_t low = + const std::uint32_t high = + ntohl(static_cast(value >> 32)); + const std::uint32_t low = ntohl(static_cast(value & 0xFFFFFFFFULL)); return (static_cast(low) << 32) | high; // NOLINTEND(cppcoreguidelines-avoid-magic-numbers)