From b04059d94fe045cee0d874e2b4b31d6950de3315 Mon Sep 17 00:00:00 2001
From: Federico Lolli <federico.lolli@skywarder.eu>
Date: Wed, 2 Oct 2024 15:17:14 +0200
Subject: [PATCH] [ARP] WIP fix for online update of initial antenna position

---
 src/boards/Groundstation/Automated/Hub.cpp    |  1 +
 .../Groundstation/Automated/SMA/SMA.cpp       | 50 +++++++++----------
 2 files changed, 25 insertions(+), 26 deletions(-)

diff --git a/src/boards/Groundstation/Automated/Hub.cpp b/src/boards/Groundstation/Automated/Hub.cpp
index 3a182058f..6833d510b 100644
--- a/src/boards/Groundstation/Automated/Hub.cpp
+++ b/src/boards/Groundstation/Automated/Hub.cpp
@@ -286,6 +286,7 @@ void Hub::dispatchIncomingMsg(const mavlink_message_t& msg)
         gpsState.latitude     = rocketST.ref_lat;
         gpsState.longitude    = rocketST.ref_lon;
         gpsState.height       = rocketST.ref_alt;
+        gpsState.fix          = 3;
 
         setRocketOrigin(gpsState);
 
diff --git a/src/boards/Groundstation/Automated/SMA/SMA.cpp b/src/boards/Groundstation/Automated/SMA/SMA.cpp
index d04b7f9c6..31d0b1bab 100644
--- a/src/boards/Groundstation/Automated/SMA/SMA.cpp
+++ b/src/boards/Groundstation/Automated/SMA/SMA.cpp
@@ -137,10 +137,32 @@ void SMA::setFatal() { fatalInit = true; };
 
 void SMA::update()
 {
-    GPSData rocketCoordinates;
+    GPSData rocketCoordinates, antennaCoordinates;
+    VN300Data vn300Data;
+
     Hub* hub          = static_cast<Hub*>(getModule<Groundstation::HubBase>());
+    auto* sensors     = getModule<Sensors>();
     rocketCoordinates = hub->getRocketOrigin();
 
+    // update antenna coordinates
+    vn300Data = sensors->getVN300LastSample();
+    if (vn300Data.fix_gps == 3)
+    {
+        // build the GPSData struct with the VN300 data
+        antennaCoordinates.gpsTimestamp  = vn300Data.insTimestamp;
+        antennaCoordinates.latitude      = vn300Data.latitude;
+        antennaCoordinates.longitude     = vn300Data.longitude;
+        antennaCoordinates.height        = vn300Data.altitude;
+        antennaCoordinates.velocityNorth = vn300Data.nedVelX;
+        antennaCoordinates.velocityEast  = vn300Data.nedVelY;
+        antennaCoordinates.velocityDown  = vn300Data.nedVelZ;
+        antennaCoordinates.satellites    = vn300Data.fix_gps;
+        antennaCoordinates.fix           = vn300Data.fix_gps;
+
+        // update follower with coordinates
+        follower.setAntennaCoordinates(antennaCoordinates);
+    }
+
     // update follower with the rocket GPS data
     follower.setRocketNASOrigin(rocketCoordinates);
 
@@ -160,32 +182,8 @@ void SMA::update()
         // in fix_antennas state, wait for the GPS fix of ARP
         case SMAState::FIX_ANTENNAS:
         {
-            VN300Data vn300Data;
-            GPSData antennaPosition;
-
-            auto* sensors = getModule<Sensors>();
-
-            vn300Data = sensors->getVN300LastSample();
-            if (vn300Data.fix_gps == 3)
+            if (antennaCoordinates.fix == 3)
             {
-                // build the GPSData struct with the VN300 data
-                antennaPosition.gpsTimestamp  = vn300Data.insTimestamp;
-                antennaPosition.latitude      = vn300Data.latitude;
-                antennaPosition.longitude     = vn300Data.longitude;
-                antennaPosition.height        = vn300Data.altitude;
-                antennaPosition.velocityNorth = vn300Data.nedVelX;
-                antennaPosition.velocityEast  = vn300Data.nedVelY;
-                antennaPosition.velocityDown  = vn300Data.nedVelZ;
-                antennaPosition.satellites    = vn300Data.fix_gps;
-                antennaPosition.fix           = vn300Data.fix_gps;
-
-                // update follower with coordinates
-                follower.setAntennaCoordinates(antennaPosition);
-
-                LOG_INFO(Logging::getLogger("automated_antennas"),
-                         "Antenna GPS position acquired !coord [{}, {}] [deg]",
-                         antennaPosition.latitude, antennaPosition.longitude);
-
                 // fix found, now move to the next state
                 EventBroker::getInstance().post(ARP_FIX_ANTENNAS, TOPIC_ARP);
             }
-- 
GitLab