From a2b6a62103e1774f7452f9927fcd44ea59c489aa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicol=C3=B2=20Caruso?= <niccolo.caruso@skywarder.eu>
Date: Sat, 16 Nov 2024 08:16:11 +0100
Subject: [PATCH] [ARP] Log propagated NAS and main radio info

Boardstatus: Now logging informations about the radio in MainRadioLog structure
SMA: Now logging also the NAS state
---
 .../AutomatedAntennas/logdecoder.cpp          |  3 ++
 src/Groundstation/Automated/SMA/SMA.cpp       |  2 ++
 src/Groundstation/LyraGS/BoardStatus.cpp      |  5 ++++
 src/Groundstation/LyraGS/BoardStatus.h        | 30 +++++++++++++++++++
 4 files changed, 40 insertions(+)

diff --git a/scripts/logdecoder/AutomatedAntennas/logdecoder.cpp b/scripts/logdecoder/AutomatedAntennas/logdecoder.cpp
index 2495a7aff..09165a379 100644
--- a/scripts/logdecoder/AutomatedAntennas/logdecoder.cpp
+++ b/scripts/logdecoder/AutomatedAntennas/logdecoder.cpp
@@ -23,6 +23,7 @@
 #include <Groundstation/Automated/Actuators/ActuatorsData.h>
 #include <Groundstation/Automated/PinHandler/PinData.h>
 #include <Groundstation/Automated/SMA/SMAData.h>
+#include <Groundstation/LyraGS/BoardStatus.h>
 #include <algorithms/Follower/FollowerData.h>
 #include <algorithms/NAS/NASState.h>
 #include <logger/Deserializer.h>
@@ -50,6 +51,7 @@
 using namespace tscpp;
 using namespace Boardcore;
 using namespace Antennas;
+using namespace LyraGS;
 
 void registerTypes(Deserializer& ds)
 {
@@ -65,6 +67,7 @@ void registerTypes(Deserializer& ds)
     ds.registerType<GPSData>();
     ds.registerType<SMAStatus>();
     ds.registerType<PinChangeData>();
+    ds.registerType<MainRadioLog>();
 }
 
 void showUsage(const string& cmdName)
diff --git a/src/Groundstation/Automated/SMA/SMA.cpp b/src/Groundstation/Automated/SMA/SMA.cpp
index 57b170743..24c538b50 100644
--- a/src/Groundstation/Automated/SMA/SMA.cpp
+++ b/src/Groundstation/Automated/SMA/SMA.cpp
@@ -236,6 +236,7 @@ void SMA::update()
             AntennaAngles target = follower.getTargetAngles();
             Boardcore::Logger::getInstance().log(
                 Boardcore::AntennaAnglesLog(target, predicted.nPropagations));
+            Boardcore::Logger::getInstance().log(predicted.getNasState());
 
             // actuate the steppers
             auto steppers = getModule<Actuators>();
@@ -301,6 +302,7 @@ void SMA::update()
             AntennaAngles target = follower.getTargetAngles();
             Boardcore::Logger::getInstance().log(
                 Boardcore::AntennaAnglesLog(target, predicted.nPropagations));
+            Boardcore::Logger::getInstance().log(predicted.getNasState());
 
             // actuate the steppers
             steppers->setSpeed(StepperList::STEPPER_X, follow.horizontalSpeed);
diff --git a/src/Groundstation/LyraGS/BoardStatus.cpp b/src/Groundstation/LyraGS/BoardStatus.cpp
index 0b7f6bb91..b65ac904b 100644
--- a/src/Groundstation/LyraGS/BoardStatus.cpp
+++ b/src/Groundstation/LyraGS/BoardStatus.cpp
@@ -108,6 +108,11 @@ void BoardStatus::arpRoutine()
         tm.main_rx_rssi    = stats.rx_rssi;
 
         last_main_stats = stats;
+
+        Logger::getInstance().log(MainRadioLog{
+            tm.timestamp, tm.main_packet_tx_error_count, tm.main_tx_bitrate,
+            tm.main_packet_rx_success_count, tm.main_packet_rx_drop_count,
+            tm.main_rx_bitrate, tm.main_rx_rssi});
     }
 
     if (ethernet_present)
diff --git a/src/Groundstation/LyraGS/BoardStatus.h b/src/Groundstation/LyraGS/BoardStatus.h
index 3eb286799..4dcce99de 100644
--- a/src/Groundstation/LyraGS/BoardStatus.h
+++ b/src/Groundstation/LyraGS/BoardStatus.h
@@ -43,6 +43,36 @@ class RadioMain;
 class RadioPayload;
 class EthernetGS;
 
+/**
+ * @brief Logging struct for the main radio informations
+ *
+ */
+struct MainRadioLog
+{
+    uint64_t timestamp                    = 0;
+    uint16_t main_packet_tx_error_count   = 0;
+    uint32_t main_tx_bitrate              = 0;
+    uint16_t main_packet_rx_success_count = 0;
+    uint16_t main_packet_rx_drop_count    = 0;
+    uint32_t main_rx_bitrate              = 0;
+    float main_rx_rssi                    = 0;
+
+    static std::string header()
+    {
+        return "timestamp,main_packet_tx_error_count,main_tx_bitrate,main_"
+               "packet_rx_success_count,main_packet_rx_drop_count,main_rx_"
+               "bitrate,main_rx_rssi\n";
+    }
+
+    void print(std::ostream& os) const
+    {
+        os << timestamp << "," << main_packet_tx_error_count << ","
+           << main_tx_bitrate << "," << main_tx_bitrate << ","
+           << main_packet_rx_success_count << "," << main_packet_rx_drop_count
+           << "," << main_rx_bitrate << "," << main_rx_rssi << "\n";
+    }
+};
+
 /**
  * @brief Utility to calculate the bitrate
  */
-- 
GitLab