From 6c1bda38ca94287b70080567b1434ba7de770b5b Mon Sep 17 00:00:00 2001
From: joanvallve <jvallve@iri.upc.edu>
Date: Tue, 7 Jul 2020 17:12:06 +0200
Subject: [PATCH] SBAS bug fixed

---
 deps/RTKLIB                     |  2 +-
 include/gnss_utils/navigation.h |  5 -----
 src/navigation.cpp              | 34 +++++++++++++++++++++++++++++----
 src/receivers/ublox_raw.cpp     |  2 +-
 4 files changed, 32 insertions(+), 11 deletions(-)

diff --git a/deps/RTKLIB b/deps/RTKLIB
index 3f0bb15..c28e430 160000
--- a/deps/RTKLIB
+++ b/deps/RTKLIB
@@ -1 +1 @@
-Subproject commit 3f0bb15ea844df97592a5d0c96222da5db6566ae
+Subproject commit c28e43077f2fb431ce3e1cc306155342e7307c66
diff --git a/include/gnss_utils/navigation.h b/include/gnss_utils/navigation.h
index 929dec2..f4910da 100644
--- a/include/gnss_utils/navigation.h
+++ b/include/gnss_utils/navigation.h
@@ -132,11 +132,6 @@ inline bool Navigation::addFcb(const fcbd_t& fcb)
   return addToArray<fcbd_t>(fcb, nav_.fcb, nav_.nf, nav_.nfmax);
 }
 
-inline void Navigation::addSbasMessage(const sbsmsg_t& sbas_msg)
-{
-  sbsupdatecorr(&sbas_msg, &nav_);
-}
-
 inline void Navigation::freeEphemeris()
 {
   freeEph(nav_);
diff --git a/src/navigation.cpp b/src/navigation.cpp
index c0eb72c..8c76449 100644
--- a/src/navigation.cpp
+++ b/src/navigation.cpp
@@ -158,6 +158,25 @@ void Navigation::loadFromRinex(const std::string& rnx_file, gtime_t t_start, gti
               << std::endl;
 }
 
+void Navigation::addSbasMessage(const sbsmsg_t& sbas_msg)
+{
+    // init seph with array of size NSATSBS*2
+    if (nav_.seph == NULL)
+    {
+        std::cout << "Navigation::addSbasMessage: initializing sbas ephemerides array...\n";
+        if (!(nav_.seph =(seph_t *)malloc(sizeof(seph_t)*NSATSBS*2)))
+        {
+            std::cout << "Navigation::addSbasMessage: could not malloc sbas ephemerides!\n";
+            return;
+        }
+        nav_.ns=NSATSBS*2;
+        nav_.nsmax=NSATSBS*2;
+        for (auto i=0; i<NSATSBS*2; i++)
+            nav_.seph[i]=seph_t{0};
+    }
+    sbsupdatecorr(&sbas_msg, &nav_);
+}
+
 void Navigation::copyAllArrays(const nav_t& nav)
 {
   // GPS/QZS/GAL ephemeris
@@ -182,11 +201,18 @@ void Navigation::copyAllArrays(const nav_t& nav)
 
 void Navigation::copyEphemeris(const nav_t& nav)
 {
-  copyArray<eph_t>(nav.eph, nav.n, nav_.eph, nav_.n, nav_.nmax);
-  copyArray<geph_t>(nav.geph, nav.ng, nav_.geph, nav_.ng, nav_.ngmax);
-  copyArray<seph_t>(nav.seph, nav.ns, nav_.seph, nav_.ns, nav_.nsmax);
+    // Not SBAS ephemeris!
 
-  uniqueNavigation();
+    // copy
+    copyArray<eph_t>(nav.eph, nav.n, nav_.eph, nav_.n, nav_.nmax);
+    copyArray<geph_t>(nav.geph, nav.ng, nav_.geph, nav_.ng, nav_.ngmax);
+
+    // unique
+    uniqeph (&nav_);
+    uniqgeph(&nav_);
+
+    // wavelengths
+    updatenav(&nav_);
 }
 
 void Navigation::copyAlmanac(const nav_t& nav)
diff --git a/src/receivers/ublox_raw.cpp b/src/receivers/ublox_raw.cpp
index 6c2ba9a..afaf32b 100644
--- a/src/receivers/ublox_raw.cpp
+++ b/src/receivers/ublox_raw.cpp
@@ -29,7 +29,7 @@ RawDataType UBloxRaw::addDataStream(const std::vector<uint8_t>& data_stream)
         break;
 
       case NAV_EPH:  // Ephemeris
-        //std::cout << "Ephemeris received!\n";
+        std::cout << "Ephemeris received!\n";
         nav_.copyEphemeris(raw_data_.nav);
         break;
 
-- 
GitLab