diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 1d658fcf1..b98becada 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -22,15 +22,18 @@ All notable changes to GNSS-SDR will be documented in this file. ### Improvements in Interoperability: -- Fix setting of the signal source gain if the AGC is enabled when using the +- Fixed setting of the signal source gain if the AGC is enabled when using the AD9361 front-end. +- Fixed the regeneration of Galileo ephemeris from the reduced clock and + ephemeris data (CED) defined in the Galileo E1B INAV message introduced in + Galileo OS SIS ICD Issue 2.0. ### Improvements in Maintainability: - Rewritten Viterbi decoder for Galileo navigation messages: encapsulated in a class instead of being implemented as free inline functions. This improves memory management. -- Update GSL implementation to v0.39.0. See +- Updated GSL implementation to v0.39.0. See https://github.com/gsl-lite/gsl-lite/releases/tag/v0.39.0 ### Improvements in Reliability diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.cc b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.cc index 41b59795a..64d74ba4d 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.cc +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.cc @@ -85,6 +85,7 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs( d_remove_dat = conf.remove_dat; d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN()); d_frame_type = frame_type; + d_enable_reed_solomon_inav = false; // Viterbi decoder vars const int32_t nn = 2; // Coding rate 1/n @@ -123,6 +124,7 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs( d_max_symbols_without_valid_frame = GALILEO_INAV_PAGE_SYMBOLS * 30; // rise alarm 60 seconds without valid tlm if (conf.enable_reed_solomon == true) { + d_enable_reed_solomon_inav = true; d_inav_nav.enable_reed_solomon(); } break; @@ -609,6 +611,10 @@ void galileo_telemetry_decoder_gs::reset() d_sent_tlm_failed_msg = false; d_stat = 0; d_viterbi->reset(); + if (d_enable_reed_solomon_inav == true) + { + d_inav_nav.enable_reed_solomon(); + } DLOG(INFO) << "Telemetry decoder reset for satellite " << d_satellite; } diff --git a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.h b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.h index 68ac43e2d..471121065 100644 --- a/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.h +++ b/src/algorithms/telemetry_decoder/gnuradio_blocks/galileo_telemetry_decoder_gs.h @@ -143,6 +143,7 @@ private: bool d_print_cnav_page; bool d_enable_navdata_monitor; bool d_dump_crc_stats; + bool d_enable_reed_solomon_inav; }; diff --git a/src/core/system_parameters/galileo_inav_message.cc b/src/core/system_parameters/galileo_inav_message.cc index cdc980826..59a579716 100644 --- a/src/core/system_parameters/galileo_inav_message.cc +++ b/src/core/system_parameters/galileo_inav_message.cc @@ -248,6 +248,7 @@ bool Galileo_Inav_Message::have_new_ephemeris() // Check if we have a new ephem flag_ephemeris_4 = false; // clear the flag flag_all_ephemeris = true; IOD_ephemeris = IOD_nav_1; + enable_rs = false; // Do not retrieve reduced CED if we already have the full ephemeris set DLOG(INFO) << "Batch number: " << IOD_ephemeris; return true; } @@ -357,6 +358,7 @@ bool Galileo_Inav_Message::have_new_ephemeris() // Check if we have a new ephem flag_ephemeris_4 = false; // clear the flag flag_all_ephemeris = true; IOD_ephemeris = IOD_nav_1; + enable_rs = false; // Retrieve reduced CED only once DLOG(INFO) << "Batch number: " << IOD_ephemeris; return true; }