diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 7a3a81195..83e39048a 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 Interoperability: + +- Enabled multi-band processing off-loading to the FPGA when using the MAX2771 + RF front-end. + ### Improvements in Maintainability: - Added a CI job to detect lines longer than 512 characters (avoid this @@ -27,7 +32,7 @@ All notable changes to GNSS-SDR will be documented in this file. ### Improvements in Portability: -- Fix building option `-DENABLE_ION=ON` when using CMake >= 4.0. +- Fixed building option `-DENABLE_ION=ON` when using CMake >= 4.0. - Updated `gsl-lite` to v1.0.1. See the [gsl-lite release](https://github.com/gsl-lite/gsl-lite/releases/tag/v1.0.1). @@ -38,6 +43,9 @@ All notable changes to GNSS-SDR will be documented in this file. PDF format. It requires `numpy` and `matplotlib`. - `File_Signal_Source` fixed file length and sample skip calculations on 32-bit systems. +- Fixed tracking the same PRN in multiple channels. Previously, this could + happen when the number of acquisition channels was close to the number of + available PRNs for a given signal. See the definitions of concepts and metrics at https://gnss-sdr.org/design-forces/ diff --git a/src/core/receiver/gnss_flowgraph.cc b/src/core/receiver/gnss_flowgraph.cc index 232b0b530..feaf930cb 100644 --- a/src/core/receiver/gnss_flowgraph.cc +++ b/src/core/receiver/gnss_flowgraph.cc @@ -2192,6 +2192,14 @@ Gnss_Signal GNSSFlowgraph::search_next_signal(const std::string& searched_signal std::string assist_signal = ""; auto& available_signals = available_signals_map_.at(searched_signal); + if (available_signals.empty()) + { + const auto& entry = signal_mapping.at(searched_signal); + const auto& gnss_system_str = entry.first; + const auto& signal_pretty_str = entry.second; + throw std::runtime_error("More ACQUISITION channels than PRNs for signal " + gnss_system_str + " " + signal_pretty_str); + } + switch (mapStringValues_[searched_signal]) { case evGPS_2S: @@ -2250,7 +2258,11 @@ Gnss_Signal GNSSFlowgraph::search_next_signal(const std::string& searched_signal { result = available_signals.front(); available_signals.pop_front(); - available_signals.push_back(result); + const std::string sys = result.get_satellite().get_system(); + if ((sys == "Glonass") || (sys == "Beidou")) + { + available_signals.push_back(result); + } } return result; diff --git a/src/core/system_parameters/gnss_satellite.h b/src/core/system_parameters/gnss_satellite.h index e7a2759f8..c4585ce3a 100644 --- a/src/core/system_parameters/gnss_satellite.h +++ b/src/core/system_parameters/gnss_satellite.h @@ -54,7 +54,7 @@ public: void update_PRN(uint32_t PRN); //!< Updates the PRN Number when information is decoded, only applies to GLONASS GNAV messages uint32_t get_PRN() const; //!< Gets satellite's PRN int32_t get_rf_link() const; //!< Gets the satellite's rf link - std::string get_system() const; //!< Gets the satellite system {"GPS", "GLONASS", "SBAS", "Galileo", "Beidou"} + std::string get_system() const; //!< Gets the satellite system {"GPS", "Glonass", "SBAS", "Galileo", "Beidou"} std::string get_system_short() const; //!< Gets the satellite system {"G", "R", "SBAS", "E", "C"} std::string get_block() const; //!< Gets the satellite block. If GPS, returns {"IIA", "IIR", "IIR-M", "IIF"} std::string what_block(const std::string& system_, uint32_t PRN_); //!< Gets the block of a given satellite