From b7f8a7d554ce6de35b8b23e4991d98f9e0da5dcc Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Sat, 26 Feb 2022 13:03:53 +0100 Subject: [PATCH] Compute PVT solutions when using GPS L5 signals even if the satellite is reported as not healthy in the CNAV message (Fixes: #588) --- docs/CHANGELOG.md | 5 +++++ src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index c1c58e872..df6b88cda 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -14,6 +14,11 @@ All notable changes to GNSS-SDR will be documented in this file. ## [Unreleased](https://github.com/gnss-sdr/gnss-sdr/tree/next) +### Improvements in Availability: + +- Compute PVT solutions when using GPS L5 signals even if the satellite is + reported as not healthy in the CNAV message. + ### Improvements in Reliability: - Fix some defects detected by Coverity Scan 2021.12.1. diff --git a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc index b9dfff0ab..62934c891 100644 --- a/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc +++ b/src/algorithms/PVT/gnuradio_blocks/rtklib_pvt_gs.cc @@ -1254,8 +1254,9 @@ void rtklib_pvt_gs::msg_handler_telemetry(const pmt::pmt_t& msg) } if (gps_cnav_ephemeris->signal_health != 0) { - std::cout << TEXT_RED << "Satellite " << Gnss_Satellite(std::string("GPS"), gps_cnav_ephemeris->PRN) - << " is not healthy, not used for navigation" << TEXT_RESET << '\n'; + std::cout << "Satellite " << Gnss_Satellite(std::string("GPS"), gps_cnav_ephemeris->PRN) + << " does not report a healthy status in the CNAV message," + << " use PVT solutions at your own risk.\n"; } DLOG(INFO) << "New GPS CNAV ephemeris record has arrived "; } @@ -2023,7 +2024,7 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item if (tmp_eph_iter_cnav != d_internal_pvt_solver->gps_cnav_ephemeris_map.cend()) { const uint32_t prn_aux = tmp_eph_iter_cnav->second.PRN; - if ((prn_aux == in[i][epoch].PRN) && (((std::string(in[i][epoch].Signal) == std::string("2S")) || (std::string(in[i][epoch].Signal) == std::string("L5"))) && (tmp_eph_iter_cnav->second.signal_health == 0))) + if ((prn_aux == in[i][epoch].PRN) && (((std::string(in[i][epoch].Signal) == std::string("2S")) || (std::string(in[i][epoch].Signal) == std::string("L5"))))) { store_valid_observable = true; }