From b5c59ee6f75c2bc8691a12454fec4bfedabbdb1f Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Thu, 14 Feb 2019 22:49:36 +0100 Subject: [PATCH 1/2] Fix defects detected by Coverity Scan --- .../PVT/libs/monitor_pvt_udp_sink.cc | 32 ++++++++++++++++++- .../PVT/libs/monitor_pvt_udp_sink.h | 2 +- src/algorithms/PVT/libs/pvt_conf.cc | 3 ++ src/algorithms/PVT/libs/rtklib_solver.cc | 29 +++++++++++++++++ .../libs/rtklib/rtklib_conversions.cc | 2 ++ .../beidou_b1i_telemetry_decoder_cc.cc | 1 + .../gnuradio_blocks/dll_pll_veml_tracking.cc | 1 + src/core/receiver/control_thread.cc | 4 ++- src/core/receiver/gnss_flowgraph.cc | 2 +- .../gps_navigation_message.cc | 1 + src/main/main.cc | 15 ++++++--- 11 files changed, 83 insertions(+), 9 deletions(-) diff --git a/src/algorithms/PVT/libs/monitor_pvt_udp_sink.cc b/src/algorithms/PVT/libs/monitor_pvt_udp_sink.cc index 3dc8c8b08..2982ec401 100644 --- a/src/algorithms/PVT/libs/monitor_pvt_udp_sink.cc +++ b/src/algorithms/PVT/libs/monitor_pvt_udp_sink.cc @@ -34,6 +34,7 @@ #include #include + Monitor_Pvt_Udp_Sink::Monitor_Pvt_Udp_Sink(std::vector addresses, const uint16_t& port) : socket{io_service} { for (const auto& address : addresses) @@ -41,9 +42,38 @@ Monitor_Pvt_Udp_Sink::Monitor_Pvt_Udp_Sink(std::vector addresses, c boost::asio::ip::udp::endpoint endpoint(boost::asio::ip::address::from_string(address, error), port); endpoints.push_back(endpoint); } + monitor_pvt.TOW_at_current_symbol_ms = 0U; + monitor_pvt.week = 0U; + monitor_pvt.RX_time = 0.0; + monitor_pvt.user_clk_offset = 0.0; + monitor_pvt.pos_x = 0.0; + monitor_pvt.pos_y = 0.0; + monitor_pvt.pos_z = 0.0; + monitor_pvt.vel_x = 0.0; + monitor_pvt.vel_y = 0.0; + monitor_pvt.vel_z = 0.0; + monitor_pvt.cov_xx = 0.0; + monitor_pvt.cov_yy = 0.0; + monitor_pvt.cov_zz = 0.0; + monitor_pvt.cov_xy = 0.0; + monitor_pvt.cov_yz = 0.0; + monitor_pvt.cov_zx = 0.0; + monitor_pvt.latitude = 0.0; + monitor_pvt.longitude = 0.0; + monitor_pvt.height = 0.0; + monitor_pvt.valid_sats = 0; + monitor_pvt.solution_status = 0; + monitor_pvt.solution_type = 0; + monitor_pvt.AR_ratio_factor = 0.0; + monitor_pvt.AR_ratio_threshold = 0.0; + monitor_pvt.gdop = 0.0; + monitor_pvt.pdop = 0.0; + monitor_pvt.hdop = 0.0; + monitor_pvt.vdop = 0.0; } -bool Monitor_Pvt_Udp_Sink::write_monitor_pvt(Monitor_Pvt monitor_pvt) + +bool Monitor_Pvt_Udp_Sink::write_monitor_pvt(const Monitor_Pvt& monitor_pvt) { std::ostringstream archive_stream; boost::archive::binary_oarchive oa{archive_stream}; diff --git a/src/algorithms/PVT/libs/monitor_pvt_udp_sink.h b/src/algorithms/PVT/libs/monitor_pvt_udp_sink.h index bec163986..bf132bad4 100644 --- a/src/algorithms/PVT/libs/monitor_pvt_udp_sink.h +++ b/src/algorithms/PVT/libs/monitor_pvt_udp_sink.h @@ -39,7 +39,7 @@ class Monitor_Pvt_Udp_Sink { public: Monitor_Pvt_Udp_Sink(std::vector addresses, const uint16_t &port); - bool write_monitor_pvt(Monitor_Pvt monitor_pvt); + bool write_monitor_pvt(const Monitor_Pvt &monitor_pvt); private: boost::asio::io_service io_service; diff --git a/src/algorithms/PVT/libs/pvt_conf.cc b/src/algorithms/PVT/libs/pvt_conf.cc index 0f528f438..6a1e1023c 100644 --- a/src/algorithms/PVT/libs/pvt_conf.cc +++ b/src/algorithms/PVT/libs/pvt_conf.cc @@ -67,4 +67,7 @@ Pvt_Conf::Pvt_Conf() kml_output_path = std::string("."); xml_output_path = std::string("."); rtcm_output_file_path = std::string("."); + + monitor_enabled = false; + udp_port = 0; } diff --git a/src/algorithms/PVT/libs/rtklib_solver.cc b/src/algorithms/PVT/libs/rtklib_solver.cc index 0a9115622..7ad5da2c8 100644 --- a/src/algorithms/PVT/libs/rtklib_solver.cc +++ b/src/algorithms/PVT/libs/rtklib_solver.cc @@ -103,6 +103,35 @@ rtklib_solver::rtklib_solver(int nchannels, std::string dump_filename, bool flag } } } + // PVT MONITOR + monitor_pvt.TOW_at_current_symbol_ms = 0U; + monitor_pvt.week = 0U; + monitor_pvt.RX_time = 0.0; + monitor_pvt.user_clk_offset = 0.0; + monitor_pvt.pos_x = 0.0; + monitor_pvt.pos_y = 0.0; + monitor_pvt.pos_z = 0.0; + monitor_pvt.vel_x = 0.0; + monitor_pvt.vel_y = 0.0; + monitor_pvt.vel_z = 0.0; + monitor_pvt.cov_xx = 0.0; + monitor_pvt.cov_yy = 0.0; + monitor_pvt.cov_zz = 0.0; + monitor_pvt.cov_xy = 0.0; + monitor_pvt.cov_yz = 0.0; + monitor_pvt.cov_zx = 0.0; + monitor_pvt.latitude = 0.0; + monitor_pvt.longitude = 0.0; + monitor_pvt.height = 0.0; + monitor_pvt.valid_sats = 0; + monitor_pvt.solution_status = 0; + monitor_pvt.solution_type = 0; + monitor_pvt.AR_ratio_factor = 0.0; + monitor_pvt.AR_ratio_threshold = 0.0; + monitor_pvt.gdop = 0.0; + monitor_pvt.pdop = 0.0; + monitor_pvt.hdop = 0.0; + monitor_pvt.vdop = 0.0; } bool rtklib_solver::save_matfile() diff --git a/src/algorithms/libs/rtklib/rtklib_conversions.cc b/src/algorithms/libs/rtklib/rtklib_conversions.cc index ffd595c44..6008fdfd4 100644 --- a/src/algorithms/libs/rtklib/rtklib_conversions.cc +++ b/src/algorithms/libs/rtklib/rtklib_conversions.cc @@ -388,6 +388,7 @@ alm_t alm_to_rtklib(const Gps_Almanac& gps_alm) rtklib_alm.week = gps_alm.i_WNa; gtime_t toa; toa.time = gps_alm.i_Toa; + toa.sec = 0.0; rtklib_alm.toa = toa; rtklib_alm.A = gps_alm.d_sqrt_A * gps_alm.d_sqrt_A; rtklib_alm.e = gps_alm.d_e_eccentricity; @@ -416,6 +417,7 @@ alm_t alm_to_rtklib(const Galileo_Almanac& gal_alm) rtklib_alm.week = gal_alm.i_WNa; gtime_t toa; toa.time = gal_alm.i_Toa; + toa.sec = 0.0; rtklib_alm.toa = toa; rtklib_alm.A = 5440.588203494 + gal_alm.d_Delta_sqrt_A; rtklib_alm.A = rtklib_alm.A * rtklib_alm.A; diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_cc.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_cc.cc index 8da254729..7a39e31ec 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_cc.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/beidou_b1i_telemetry_decoder_cc.cc @@ -123,6 +123,7 @@ beidou_b1i_telemetry_decoder_cc::beidou_b1i_telemetry_decoder_cc( d_preamble_index = 0; d_flag_frame_sync = false; d_TOW_at_current_symbol_ms = 0; + d_TOW_at_Preamble_ms = 0U; Flag_valid_word = false; d_CRC_error_counter = 0; d_flag_preamble = false; diff --git a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking.cc b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking.cc index 518e5dfda..36fdaed0e 100644 --- a/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking.cc +++ b/src/algorithms/tracking/gnuradio_blocks/dll_pll_veml_tracking.cc @@ -99,6 +99,7 @@ dll_pll_veml_tracking::dll_pll_veml_tracking(const Dll_Pll_Conf &conf_) : gr::bl d_secondary_code_length = 0U; d_secondary_code_string = nullptr; d_preambles_symbols = nullptr; + d_preamble_length_symbols = 0; signal_type = std::string(trk_parameters.signal); std::map map_signal_pretty_name; diff --git a/src/core/receiver/control_thread.cc b/src/core/receiver/control_thread.cc index 6bb4f7b9d..0b9115d94 100644 --- a/src/core/receiver/control_thread.cc +++ b/src/core/receiver/control_thread.cc @@ -879,7 +879,7 @@ std::vector> ControlThread::get_visible_sats(time // 2. Compute rx GPS time from UTC time gtime_t utc_gtime; utc_gtime.time = rx_utc_time; - utc_gtime.sec = 0; + utc_gtime.sec = 0.0; gtime_t gps_gtime = utc2gpst(utc_gtime); // 3. loop through all the available ephemeris or almanac and compute satellite positions and elevations @@ -950,6 +950,7 @@ std::vector> ControlThread::get_visible_sats(time double clock_bias_s; gtime_t aux_gtime; aux_gtime.time = fmod(utc2gpst(gps_gtime).time + 345600, 604800); + aux_gtime.sec = 0.0; alm2pos(aux_gtime, &rtklib_alm, &r_sat[0], &clock_bias_s); double Az, El, dist_m; arma::vec r_sat_eb_e = arma::vec{r_sat[0], r_sat[1], r_sat[2]}; @@ -977,6 +978,7 @@ std::vector> ControlThread::get_visible_sats(time double clock_bias_s; gtime_t gal_gtime; gal_gtime.time = fmod(utc2gpst(gps_gtime).time + 345600, 604800); + gal_gtime.sec = 0.0; alm2pos(gal_gtime, &rtklib_alm, &r_sat[0], &clock_bias_s); double Az, El, dist_m; arma::vec r_sat_eb_e = arma::vec{r_sat[0], r_sat[1], r_sat[2]}; diff --git a/src/core/receiver/gnss_flowgraph.cc b/src/core/receiver/gnss_flowgraph.cc index 5989d9940..126dffbd1 100644 --- a/src/core/receiver/gnss_flowgraph.cc +++ b/src/core/receiver/gnss_flowgraph.cc @@ -418,7 +418,7 @@ void GNSSFlowgraph::connect() { decimation--; }; - double acq_fs = fs / decimation; + double acq_fs = static_cast(fs) / static_cast(decimation); if (decimation > 1) { diff --git a/src/core/system_parameters/gps_navigation_message.cc b/src/core/system_parameters/gps_navigation_message.cc index e38f6bdb2..e551551dc 100644 --- a/src/core/system_parameters/gps_navigation_message.cc +++ b/src/core/system_parameters/gps_navigation_message.cc @@ -115,6 +115,7 @@ void Gps_Navigation_Message::reset() d_beta1 = 0.0; d_beta2 = 0.0; d_beta3 = 0.0; + d_A2 = 0.0; d_A1 = 0.0; d_A0 = 0.0; d_t_OT = 0; diff --git a/src/main/main.cc b/src/main/main.cc index 77620833f..62641fd25 100644 --- a/src/main/main.cc +++ b/src/main/main.cc @@ -132,17 +132,22 @@ int main(int argc, char** argv) } } - std::unique_ptr control_thread(new ControlThread()); - - // record startup time std::chrono::time_point start, end; start = std::chrono::system_clock::now(); - - int return_code; + int return_code = 0; try { + std::unique_ptr control_thread(new ControlThread()); + // record startup time + start = std::chrono::system_clock::now(); return_code = control_thread->run(); } + catch (const boost::thread_resource_error& e) + { + std::cout << "Failed to create boost thread." << std::endl; + google::ShutDownCommandLineFlags(); + return 1; + } catch (const boost::exception& e) { if (GOOGLE_STRIP_LOG == 0) From 890752601d538915cd3fbf534bd5a19383d4c812 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Thu, 14 Feb 2019 23:44:38 +0100 Subject: [PATCH 2/2] Fix defects detected by Coverity Scan --- src/algorithms/libs/beidou_b1i_signal_processing.cc | 2 +- src/core/system_parameters/beidou_dnav_navigation_message.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/algorithms/libs/beidou_b1i_signal_processing.cc b/src/algorithms/libs/beidou_b1i_signal_processing.cc index d95b2844e..61e1ffa47 100644 --- a/src/algorithms/libs/beidou_b1i_signal_processing.cc +++ b/src/algorithms/libs/beidou_b1i_signal_processing.cc @@ -57,7 +57,7 @@ void beidou_b1i_code_gen_int(int32_t* _dest, int32_t _prn, uint32_t _chip_shift) prn_idx = _prn - 1; /* A simple error check */ - if ((prn_idx < 0) || (prn_idx > 51)) + if ((prn_idx < 0) || (prn_idx > 32)) { return; } diff --git a/src/core/system_parameters/beidou_dnav_navigation_message.cc b/src/core/system_parameters/beidou_dnav_navigation_message.cc index 9a83d1598..52f1ea88b 100644 --- a/src/core/system_parameters/beidou_dnav_navigation_message.cc +++ b/src/core/system_parameters/beidou_dnav_navigation_message.cc @@ -831,7 +831,7 @@ int32_t Beidou_Dnav_Navigation_Message::d2_subframe_decoder(std::string const& s d_eccentricity_msb = static_cast(read_navigation_unsigned(subframe_bits, D2_E_MSB)); d_eccentricity_msb_bits = (read_navigation_unsigned(subframe_bits, D2_E_MSB)); // Adjust for lsb in next page (shift number of lsb to the left) - d_eccentricity_msb = static_cast((static_cast(d_eccentricity_msb) << 22)); + d_eccentricity_msb = d_eccentricity_msb << 22; d_eccentricity_msb_bits = d_eccentricity_msb_bits << 22; // Set system flags for message reception