mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-30 23:40:06 +00:00 
			
		
		
		
	Parse Performance/Maintenance Data (Message Type 3)
This commit is contained in:
		
							parent
							
								
									e440d8c657
								
							
						
					
					
						commit
						2fc12d44db
					
				
					 10 changed files with 2854 additions and 86 deletions
				
			
		|  | @ -2,6 +2,18 @@ | ||||||
| 
 | 
 | ||||||
| #include <scwx/wsr88d/rda/message_header.hpp> | #include <scwx/wsr88d/rda/message_header.hpp> | ||||||
| 
 | 
 | ||||||
|  | #include <array> | ||||||
|  | #include <execution> | ||||||
|  | #include <istream> | ||||||
|  | #include <map> | ||||||
|  | #include <string> | ||||||
|  | 
 | ||||||
|  | #ifdef WIN32 | ||||||
|  | #   include <WinSock2.h> | ||||||
|  | #else | ||||||
|  | #   include <arpa/inet.h> | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| namespace scwx | namespace scwx | ||||||
| { | { | ||||||
| namespace wsr88d | namespace wsr88d | ||||||
|  | @ -22,7 +34,54 @@ protected: | ||||||
|    Message(Message&&) noexcept; |    Message(Message&&) noexcept; | ||||||
|    Message& operator=(Message&&) noexcept; |    Message& operator=(Message&&) noexcept; | ||||||
| 
 | 
 | ||||||
|    bool ValidateSize(std::istream& is, size_t bytesRead) const; |    bool ValidateMessage(std::istream& is, size_t bytesRead) const; | ||||||
|  | 
 | ||||||
|  |    static void ReadBoolean(std::istream& is, bool& value) | ||||||
|  |    { | ||||||
|  |       std::string data(4, ' '); | ||||||
|  |       is.read(reinterpret_cast<char*>(&data[0]), 4); | ||||||
|  |       value = (data.at(0) == 'T'); | ||||||
|  |    } | ||||||
|  | 
 | ||||||
|  |    static void ReadChar(std::istream& is, char& value) | ||||||
|  |    { | ||||||
|  |       std::string data(4, ' '); | ||||||
|  |       is.read(reinterpret_cast<char*>(&data[0]), 4); | ||||||
|  |       value = data.at(0); | ||||||
|  |    } | ||||||
|  | 
 | ||||||
|  |    static float SwapFloat(float f) | ||||||
|  |    { | ||||||
|  |       return ntohf(*reinterpret_cast<uint32_t*>(&f)); | ||||||
|  |    } | ||||||
|  | 
 | ||||||
|  |    template<size_t _Size> | ||||||
|  |    static void SwapFloatArray(std::array<float, _Size>& arr) | ||||||
|  |    { | ||||||
|  |       std::transform(std::execution::par_unseq, | ||||||
|  |                      arr.begin(), | ||||||
|  |                      arr.end(), | ||||||
|  |                      arr.begin(), | ||||||
|  |                      [](float f) { return SwapFloat(f); }); | ||||||
|  |    } | ||||||
|  | 
 | ||||||
|  |    template<size_t _Size> | ||||||
|  |    static void SwapUInt16Array(std::array<uint16_t, _Size>& arr) | ||||||
|  |    { | ||||||
|  |       std::transform(std::execution::par_unseq, | ||||||
|  |                      arr.begin(), | ||||||
|  |                      arr.end(), | ||||||
|  |                      arr.begin(), | ||||||
|  |                      [](uint16_t u) { return ntohs(u); }); | ||||||
|  |    } | ||||||
|  | 
 | ||||||
|  |    template<typename T> | ||||||
|  |    static void SwapFloatMap(std::map<T, float>& m) | ||||||
|  |    { | ||||||
|  |       std::for_each(std::execution::par_unseq, m.begin(), m.end(), [](auto& p) { | ||||||
|  |          p.second = SwapFloat(p.second); | ||||||
|  |       }); | ||||||
|  |    } | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
|    virtual ~Message(); |    virtual ~Message(); | ||||||
|  |  | ||||||
							
								
								
									
										290
									
								
								wxdata/include/scwx/wsr88d/rda/performance_maintenance_data.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										290
									
								
								wxdata/include/scwx/wsr88d/rda/performance_maintenance_data.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,290 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <scwx/wsr88d/rda/message.hpp> | ||||||
|  | 
 | ||||||
|  | namespace scwx | ||||||
|  | { | ||||||
|  | namespace wsr88d | ||||||
|  | { | ||||||
|  | namespace rda | ||||||
|  | { | ||||||
|  | 
 | ||||||
|  | class PerformanceMaintenanceDataImpl; | ||||||
|  | 
 | ||||||
|  | class PerformanceMaintenanceData : public Message | ||||||
|  | { | ||||||
|  | public: | ||||||
|  |    explicit PerformanceMaintenanceData(); | ||||||
|  |    ~PerformanceMaintenanceData(); | ||||||
|  | 
 | ||||||
|  |    PerformanceMaintenanceData(const Message&) = delete; | ||||||
|  |    PerformanceMaintenanceData& | ||||||
|  |    operator=(const PerformanceMaintenanceData&) = delete; | ||||||
|  | 
 | ||||||
|  |    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; | ||||||
|  |    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; | ||||||
|  |    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; | ||||||
|  |    int32_t            gps_satellites() 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; | ||||||
|  |    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_bias() 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           generatl_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           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; | ||||||
|  | 
 | ||||||
|  |    bool Parse(std::istream& is); | ||||||
|  | 
 | ||||||
|  |    static std::unique_ptr<PerformanceMaintenanceData> | ||||||
|  |    Create(MessageHeader&& header, std::istream& is); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |    std::unique_ptr<PerformanceMaintenanceDataImpl> p; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | } // namespace rda
 | ||||||
|  | } // namespace wsr88d
 | ||||||
|  | } // namespace scwx
 | ||||||
|  | @ -2,8 +2,6 @@ | ||||||
| 
 | 
 | ||||||
| #include <scwx/wsr88d/rda/message.hpp> | #include <scwx/wsr88d/rda/message.hpp> | ||||||
| 
 | 
 | ||||||
| #include <string> |  | ||||||
| 
 |  | ||||||
| namespace scwx | namespace scwx | ||||||
| { | { | ||||||
| namespace wsr88d | namespace wsr88d | ||||||
|  |  | ||||||
|  | @ -10,12 +10,6 @@ | ||||||
| #include <boost/iostreams/filter/bzip2.hpp> | #include <boost/iostreams/filter/bzip2.hpp> | ||||||
| #include <boost/log/trivial.hpp> | #include <boost/log/trivial.hpp> | ||||||
| 
 | 
 | ||||||
| #ifdef WIN32 |  | ||||||
| #   include <WinSock2.h> |  | ||||||
| #else |  | ||||||
| #   include <arpa/inet.h> |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| namespace scwx | namespace scwx | ||||||
| { | { | ||||||
| namespace wsr88d | namespace wsr88d | ||||||
|  |  | ||||||
|  | @ -1,16 +1,9 @@ | ||||||
| #include <scwx/wsr88d/rda/clutter_filter_map.hpp> | #include <scwx/wsr88d/rda/clutter_filter_map.hpp> | ||||||
| 
 | 
 | ||||||
| #include <istream> |  | ||||||
| #include <vector> | #include <vector> | ||||||
| 
 | 
 | ||||||
| #include <boost/log/trivial.hpp> | #include <boost/log/trivial.hpp> | ||||||
| 
 | 
 | ||||||
| #ifdef WIN32 |  | ||||||
| #   include <WinSock2.h> |  | ||||||
| #else |  | ||||||
| #   include <arpa/inet.h> |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| namespace scwx | namespace scwx | ||||||
| { | { | ||||||
| namespace wsr88d | namespace wsr88d | ||||||
|  | @ -205,7 +198,7 @@ bool ClutterFilterMap::Parse(std::istream& is) | ||||||
|       } |       } | ||||||
|    } |    } | ||||||
| 
 | 
 | ||||||
|    if (!ValidateSize(is, bytesRead)) |    if (!ValidateMessage(is, bytesRead)) | ||||||
|    { |    { | ||||||
|       messageValid = false; |       messageValid = false; | ||||||
|    } |    } | ||||||
|  |  | ||||||
|  | @ -1,7 +1,5 @@ | ||||||
| #include <scwx/wsr88d/rda/message.hpp> | #include <scwx/wsr88d/rda/message.hpp> | ||||||
| 
 | 
 | ||||||
| #include <istream> |  | ||||||
| 
 |  | ||||||
| #include <boost/log/trivial.hpp> | #include <boost/log/trivial.hpp> | ||||||
| 
 | 
 | ||||||
| namespace scwx | namespace scwx | ||||||
|  | @ -28,12 +26,23 @@ Message::~Message() = default; | ||||||
| Message::Message(Message&&) noexcept = default; | Message::Message(Message&&) noexcept = default; | ||||||
| Message& Message::operator=(Message&&) noexcept = default; | Message& Message::operator=(Message&&) noexcept = default; | ||||||
| 
 | 
 | ||||||
| bool Message::ValidateSize(std::istream& is, size_t bytesRead) const | bool Message::ValidateMessage(std::istream& is, size_t bytesRead) const | ||||||
| { | { | ||||||
|    bool   messageValid = true; |    bool   messageValid = true; | ||||||
|    size_t dataSize     = header().message_size() * 2 - header().SIZE; |    size_t dataSize     = header().message_size() * 2 - header().SIZE; | ||||||
| 
 | 
 | ||||||
|    if (bytesRead != dataSize) |    if (is.eof()) | ||||||
|  |    { | ||||||
|  |       BOOST_LOG_TRIVIAL(warning) << logPrefix_ << "Reached end of file"; | ||||||
|  |       messageValid = false; | ||||||
|  |    } | ||||||
|  |    else if (is.fail()) | ||||||
|  |    { | ||||||
|  |       BOOST_LOG_TRIVIAL(warning) | ||||||
|  |          << logPrefix_ << "Could not read from input stream"; | ||||||
|  |       messageValid = false; | ||||||
|  |    } | ||||||
|  |    else if (bytesRead != dataSize) | ||||||
|    { |    { | ||||||
|       is.seekg(static_cast<std::streamoff>(dataSize) - |       is.seekg(static_cast<std::streamoff>(dataSize) - | ||||||
|                   static_cast<std::streamoff>(bytesRead), |                   static_cast<std::streamoff>(bytesRead), | ||||||
|  |  | ||||||
|  | @ -2,9 +2,9 @@ | ||||||
| 
 | 
 | ||||||
| #include <scwx/util/vectorbuf.hpp> | #include <scwx/util/vectorbuf.hpp> | ||||||
| #include <scwx/wsr88d/rda/clutter_filter_map.hpp> | #include <scwx/wsr88d/rda/clutter_filter_map.hpp> | ||||||
|  | #include <scwx/wsr88d/rda/performance_maintenance_data.hpp> | ||||||
| #include <scwx/wsr88d/rda/rda_adaptation_data.hpp> | #include <scwx/wsr88d/rda/rda_adaptation_data.hpp> | ||||||
| 
 | 
 | ||||||
| #include <istream> |  | ||||||
| #include <unordered_map> | #include <unordered_map> | ||||||
| #include <vector> | #include <vector> | ||||||
| 
 | 
 | ||||||
|  | @ -23,7 +23,9 @@ typedef std::function<std::unique_ptr<Message>(MessageHeader&&, std::istream&)> | ||||||
|    CreateMessageFunction; |    CreateMessageFunction; | ||||||
| 
 | 
 | ||||||
| static const std::unordered_map<uint8_t, CreateMessageFunction> create_ { | static const std::unordered_map<uint8_t, CreateMessageFunction> create_ { | ||||||
|    {15, ClutterFilterMap::Create}, {18, RdaAdaptationData::Create}}; |    {3, PerformanceMaintenanceData::Create}, | ||||||
|  |    {15, ClutterFilterMap::Create}, | ||||||
|  |    {18, RdaAdaptationData::Create}}; | ||||||
| 
 | 
 | ||||||
| static std::vector<char> messageData_; | static std::vector<char> messageData_; | ||||||
| static size_t            bufferedSize_; | static size_t            bufferedSize_; | ||||||
|  |  | ||||||
							
								
								
									
										2483
									
								
								wxdata/source/scwx/wsr88d/rda/performance_maintenance_data.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2483
									
								
								wxdata/source/scwx/wsr88d/rda/performance_maintenance_data.cpp
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -1,18 +1,7 @@ | ||||||
| #include <scwx/wsr88d/rda/rda_adaptation_data.hpp> | #include <scwx/wsr88d/rda/rda_adaptation_data.hpp> | ||||||
| 
 | 
 | ||||||
| #include <array> |  | ||||||
| #include <execution> |  | ||||||
| #include <istream> |  | ||||||
| #include <map> |  | ||||||
| 
 |  | ||||||
| #include <boost/log/trivial.hpp> | #include <boost/log/trivial.hpp> | ||||||
| 
 | 
 | ||||||
| #ifdef WIN32 |  | ||||||
| #   include <WinSock2.h> |  | ||||||
| #else |  | ||||||
| #   include <arpa/inet.h> |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| namespace scwx | namespace scwx | ||||||
| { | { | ||||||
| namespace wsr88d | namespace wsr88d | ||||||
|  | @ -23,14 +12,6 @@ namespace rda | ||||||
| static const std::string logPrefix_ = | static const std::string logPrefix_ = | ||||||
|    "[scwx::wsr88d::rda::rda_adaptation_data] "; |    "[scwx::wsr88d::rda::rda_adaptation_data] "; | ||||||
| 
 | 
 | ||||||
| static void  ReadBoolean(std::istream& is, bool& value); |  | ||||||
| static void  ReadChar(std::istream& is, char& value); |  | ||||||
| static float SwapFloat(float f); |  | ||||||
| template<size_t _Size> |  | ||||||
| static void SwapFloatArray(std::array<float, _Size>& arr); |  | ||||||
| template<typename T> |  | ||||||
| static void SwapFloatMap(std::map<T, float>& m); |  | ||||||
| 
 |  | ||||||
| struct AntManualSetup | struct AntManualSetup | ||||||
| { | { | ||||||
|    int32_t  ielmin_; |    int32_t  ielmin_; | ||||||
|  | @ -1757,13 +1738,7 @@ bool RdaAdaptationData::Parse(std::istream& is) | ||||||
|    p->txbBaseline_          = SwapFloat(p->txbBaseline_); |    p->txbBaseline_          = SwapFloat(p->txbBaseline_); | ||||||
|    p->txbAlarmThresh_       = SwapFloat(p->txbAlarmThresh_); |    p->txbAlarmThresh_       = SwapFloat(p->txbAlarmThresh_); | ||||||
| 
 | 
 | ||||||
|    if (is.eof()) |    if (!ValidateMessage(is, bytesRead)) | ||||||
|    { |  | ||||||
|       BOOST_LOG_TRIVIAL(warning) << logPrefix_ << "Reached end of file (1)"; |  | ||||||
|       messageValid = false; |  | ||||||
|    } |  | ||||||
| 
 |  | ||||||
|    if (!ValidateSize(is, bytesRead)) |  | ||||||
|    { |    { | ||||||
|       messageValid = false; |       messageValid = false; | ||||||
|    } |    } | ||||||
|  | @ -1781,43 +1756,6 @@ RdaAdaptationData::Create(MessageHeader&& header, std::istream& is) | ||||||
|    return message; |    return message; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void ReadBoolean(std::istream& is, bool& value) |  | ||||||
| { |  | ||||||
|    std::string data(4, ' '); |  | ||||||
|    is.read(reinterpret_cast<char*>(&data[0]), 4); |  | ||||||
|    value = (data.at(0) == 'T'); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static void ReadChar(std::istream& is, char& value) |  | ||||||
| { |  | ||||||
|    std::string data(4, ' '); |  | ||||||
|    is.read(reinterpret_cast<char*>(&data[0]), 4); |  | ||||||
|    value = data.at(0); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static float SwapFloat(float f) |  | ||||||
| { |  | ||||||
|    return ntohf(*reinterpret_cast<uint32_t*>(&f)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| template<size_t _Size> |  | ||||||
| static void SwapFloatArray(std::array<float, _Size>& arr) |  | ||||||
| { |  | ||||||
|    std::transform(std::execution::par_unseq, |  | ||||||
|                   arr.begin(), |  | ||||||
|                   arr.end(), |  | ||||||
|                   arr.begin(), |  | ||||||
|                   [](float f) { return SwapFloat(f); }); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| template<typename T> |  | ||||||
| static void SwapFloatMap(std::map<T, float>& m) |  | ||||||
| { |  | ||||||
|    std::for_each(std::execution::par_unseq, m.begin(), m.end(), [](auto& p) { |  | ||||||
|       p.second = SwapFloat(p.second); |  | ||||||
|    }); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| } // namespace rda
 | } // namespace rda
 | ||||||
| } // namespace wsr88d
 | } // namespace wsr88d
 | ||||||
| } // namespace scwx
 | } // namespace scwx
 | ||||||
|  |  | ||||||
|  | @ -12,11 +12,13 @@ set(HDR_WSR88D_RDA include/scwx/wsr88d/rda/clutter_filter_map.hpp | ||||||
|                    include/scwx/wsr88d/rda/message.hpp |                    include/scwx/wsr88d/rda/message.hpp | ||||||
|                    include/scwx/wsr88d/rda/message_factory.hpp |                    include/scwx/wsr88d/rda/message_factory.hpp | ||||||
|                    include/scwx/wsr88d/rda/message_header.hpp |                    include/scwx/wsr88d/rda/message_header.hpp | ||||||
|  |                    include/scwx/wsr88d/rda/performance_maintenance_data.hpp | ||||||
|                    include/scwx/wsr88d/rda/rda_adaptation_data.hpp) |                    include/scwx/wsr88d/rda/rda_adaptation_data.hpp) | ||||||
| set(SRC_WSR88D_RDA source/scwx/wsr88d/rda/clutter_filter_map.cpp | set(SRC_WSR88D_RDA source/scwx/wsr88d/rda/clutter_filter_map.cpp | ||||||
|                    source/scwx/wsr88d/rda/message.cpp |                    source/scwx/wsr88d/rda/message.cpp | ||||||
|                    source/scwx/wsr88d/rda/message_factory.cpp |                    source/scwx/wsr88d/rda/message_factory.cpp | ||||||
|                    source/scwx/wsr88d/rda/message_header.cpp |                    source/scwx/wsr88d/rda/message_header.cpp | ||||||
|  |                    source/scwx/wsr88d/rda/performance_maintenance_data.cpp | ||||||
|                    source/scwx/wsr88d/rda/rda_adaptation_data.cpp) |                    source/scwx/wsr88d/rda/rda_adaptation_data.cpp) | ||||||
| 
 | 
 | ||||||
| add_library(wxdata OBJECT ${HDR_UTIL} | add_library(wxdata OBJECT ${HDR_UTIL} | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat