From 741edd4c6569cba6deb54ebe110bf513922b4e1f Mon Sep 17 00:00:00 2001 From: Vladslav P Date: Sat, 4 Jul 2026 04:23:01 +0300 Subject: [PATCH] PVT: Fix missing SNR in NMEA sentences Propagate SNR from all bands instead of L1 only to rtkpos. Signed-off-by: Vladslav P --- src/algorithms/libs/rtklib/rtklib_pntpos.cc | 5 ++++- src/algorithms/libs/rtklib/rtklib_solution.cc | 11 ++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/algorithms/libs/rtklib/rtklib_pntpos.cc b/src/algorithms/libs/rtklib/rtklib_pntpos.cc index e0a3097b9..676ade859 100644 --- a/src/algorithms/libs/rtklib/rtklib_pntpos.cc +++ b/src/algorithms/libs/rtklib/rtklib_pntpos.cc @@ -1162,7 +1162,10 @@ int pntpos(const obsd_t *obs, int n, const nav_t *nav, { ssat[obs[i].sat - 1].azel[0] = azel_[i * 2]; ssat[obs[i].sat - 1].azel[1] = azel_[1 + i * 2]; - ssat[obs[i].sat - 1].snr[0] = obs[i].SNR[0]; + for (int j = 0; j < NFREQ; j++) + { + ssat[obs[i].sat - 1].snr[j] = obs[i].SNR[j]; + } if (!vsat[i]) { continue; diff --git a/src/algorithms/libs/rtklib/rtklib_solution.cc b/src/algorithms/libs/rtklib/rtklib_solution.cc index 0b7266019..bf20b3ecb 100644 --- a/src/algorithms/libs/rtklib/rtklib_solution.cc +++ b/src/algorithms/libs/rtklib/rtklib_solution.cc @@ -34,6 +34,7 @@ #include "rtklib_solution.h" #include "rtklib_rtkcmn.h" #include "rtklib_rtksvr.h" +#include #include #include #include @@ -1955,7 +1956,7 @@ int outnmea_gsv(unsigned char *buff, const sol_t *sol, az += 360.0; } el = ssat[sats[k] - 1].azel[1] * R2D; - snr = ssat[sats[k] - 1].snr[0] * 0.25; + snr = *std::max_element(std::begin(ssat[sats[k] - 1].snr), std::end(ssat[sats[k] - 1].snr)) * 0.25; p += std::snprintf(p, MAXSOLBUF - (s - p), ",%02d,%02.0f,%03.0f,%02.0f", prn, el, az, snr); } else @@ -2001,7 +2002,7 @@ int outnmea_gsv(unsigned char *buff, const sol_t *sol, az += 360.0; } el = ssat[sats[k] - 1].azel[1] * R2D; - snr = ssat[sats[k] - 1].snr[0] * 0.25; + snr = *std::max_element(std::begin(ssat[sats[k] - 1].snr), std::end(ssat[sats[k] - 1].snr)) * 0.25; p += std::snprintf(p, MAXSOLBUF - (s - p), ",%02d,%02.0f,%03.0f,%02.0f", prn, el, az, snr); } else @@ -2046,7 +2047,7 @@ int outnmea_gsv(unsigned char *buff, const sol_t *sol, az += 360.0; } el = ssat[sats[k] - 1].azel[1] * R2D; - snr = ssat[sats[k] - 1].snr[0] * 0.25; + snr = *std::max_element(std::begin(ssat[sats[k] - 1].snr), std::end(ssat[sats[k] - 1].snr)) * 0.25; p += std::snprintf(p, MAXSOLBUF - (s - p), ",%02d,%02.0f,%03.0f,%02.0f", prn, el, az, snr); } else @@ -2091,7 +2092,7 @@ int outnmea_gsv(unsigned char *buff, const sol_t *sol, az += 360.0; } el = ssat[sats[k] - 1].azel[1] * R2D; - snr = ssat[sats[k] - 1].snr[0] * 0.25; + snr = *std::max_element(std::begin(ssat[sats[k] - 1].snr), std::end(ssat[sats[k] - 1].snr)) * 0.25; p += std::snprintf(p, MAXSOLBUF - (s - p), ",%02d,%02.0f,%03.0f,%02.0f", prn, el, az, snr); } else @@ -2136,7 +2137,7 @@ int outnmea_gsv(unsigned char *buff, const sol_t *sol, az += 360.0; } el = ssat[sats[k] - 1].azel[1] * R2D; - snr = ssat[sats[k] - 1].snr[0] * 0.25; + snr = *std::max_element(std::begin(ssat[sats[k] - 1].snr), std::end(ssat[sats[k] - 1].snr)) * 0.25; p += std::snprintf(p, MAXSOLBUF - (s - p), ",%02d,%02.0f,%03.0f,%02.0f", prn, el, az, snr); } else