From 9c383fe7831e003efb738485268e4b31a5f7b820 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niccol=C3=B2=20Betto?= <niccolo.betto@skywarder.eu>
Date: Wed, 27 Nov 2024 14:47:35 +0100
Subject: [PATCH] [RIGv2] Update registry for new valves

---
 src/RIGv2/Actuators/Actuators.cpp | 28 ++++++-------
 src/RIGv2/Radio/Radio.cpp         | 17 ++++++--
 src/RIGv2/Registry/Registry.cpp   | 67 +++++++++++++++++++++----------
 src/RIGv2/Registry/Registry.h     | 59 ++++++++++++++++++++-------
 4 files changed, 118 insertions(+), 53 deletions(-)

diff --git a/src/RIGv2/Actuators/Actuators.cpp b/src/RIGv2/Actuators/Actuators.cpp
index d2a92c244..f22a2aabb 100644
--- a/src/RIGv2/Actuators/Actuators.cpp
+++ b/src/RIGv2/Actuators/Actuators.cpp
@@ -168,8 +168,8 @@ Actuators::Actuators()
     info->flipped            = Config::Servos::FILLING_FLIPPED;
     info->openingEvent       = Common::Events::MOTOR_OPEN_FILLING_VALVE;
     info->closingEvent       = Common::Events::MOTOR_CLOSE_FILLING_VALVE;
-    info->openingTimeKey     = CONFIG_ID_FILLING_OPENING_TIME;
-    info->maxApertureKey     = CONFIG_ID_FILLING_MAX_APERTURE;
+    info->openingTimeKey     = CONFIG_ID_N2O_FILLING_OPENING_TIME;
+    info->maxApertureKey     = CONFIG_ID_N2O_FILLING_MAX_APERTURE;
     info->unsafeSetServoPosition(0.0f);
 
     info                     = getServo(ServosList::N2O_RELEASE_VALVE);
@@ -179,8 +179,8 @@ Actuators::Actuators()
     info->flipped            = Config::Servos::RELEASE_FLIPPED;
     info->openingEvent       = Common::Events::MOTOR_OPEN_RELEASE_VALVE;
     info->closingEvent       = Common::Events::MOTOR_CLOSE_RELEASE_VALVE;
-    info->openingTimeKey     = CONFIG_ID_RELEASE_OPENING_TIME;
-    info->maxApertureKey     = CONFIG_ID_RELEASE_MAX_APERTURE;
+    info->openingTimeKey     = CONFIG_ID_N2O_RELEASE_OPENING_TIME;
+    info->maxApertureKey     = CONFIG_ID_N2O_RELEASE_MAX_APERTURE;
     info->unsafeSetServoPosition(0.0f);
 
     info                     = getServo(ServosList::N2O_VENTING_VALVE);
@@ -190,8 +190,8 @@ Actuators::Actuators()
     info->flipped            = Config::Servos::VENTING_FLIPPED;
     info->openingEvent       = Common::Events::MOTOR_OPEN_VENTING_VALVE;
     info->closingEvent       = Common::Events::MOTOR_CLOSE_VENTING_VALVE;
-    info->openingTimeKey     = CONFIG_ID_VENTING_OPENING_TIME;
-    info->maxApertureKey     = CONFIG_ID_VENTING_MAX_APERTURE;
+    info->openingTimeKey     = CONFIG_ID_N2O_VENTING_OPENING_TIME;
+    info->maxApertureKey     = CONFIG_ID_N2O_VENTING_MAX_APERTURE;
     info->unsafeSetServoPosition(0.0f);
 
     info                     = getServo(ServosList::N2_FILLING_VALVE);
@@ -201,8 +201,8 @@ Actuators::Actuators()
     info->flipped            = Config::Servos::FILLING_FLIPPED;
     info->openingEvent       = Common::Events::MOTOR_OPEN_FILLING_VALVE;
     info->closingEvent       = Common::Events::MOTOR_CLOSE_FILLING_VALVE;
-    info->openingTimeKey     = CONFIG_ID_FILLING_OPENING_TIME;
-    info->maxApertureKey     = CONFIG_ID_FILLING_MAX_APERTURE;
+    info->openingTimeKey     = CONFIG_ID_N2_FILLING_OPENING_TIME;
+    info->maxApertureKey     = CONFIG_ID_N2_FILLING_MAX_APERTURE;
     info->unsafeSetServoPosition(0.0f);
 
     info                     = getServo(ServosList::N2_RELEASE_VALVE);
@@ -212,8 +212,8 @@ Actuators::Actuators()
     info->flipped            = Config::Servos::RELEASE_FLIPPED;
     info->openingEvent       = Common::Events::MOTOR_OPEN_RELEASE_VALVE;
     info->closingEvent       = Common::Events::MOTOR_CLOSE_RELEASE_VALVE;
-    info->openingTimeKey     = CONFIG_ID_RELEASE_OPENING_TIME;
-    info->maxApertureKey     = CONFIG_ID_RELEASE_MAX_APERTURE;
+    info->openingTimeKey     = CONFIG_ID_N2_RELEASE_OPENING_TIME;
+    info->maxApertureKey     = CONFIG_ID_N2_RELEASE_MAX_APERTURE;
     info->unsafeSetServoPosition(0.0f);
 
     info                     = getServo(ServosList::N2_DETACH_SERVO);
@@ -222,8 +222,8 @@ Actuators::Actuators()
     info->limit              = Config::Servos::DISCONNECT_LIMIT;
     info->flipped            = Config::Servos::DISCONNECT_FLIPPED;
     info->openingEvent       = Common::Events::MOTOR_DISCONNECT;
-    info->openingTimeKey     = CONFIG_ID_DISCONNECT_OPENING_TIME;
-    info->maxApertureKey     = CONFIG_ID_DISCONNECT_MAX_APERTURE;
+    info->openingTimeKey     = CONFIG_ID_N2_DETACH_OPENING_TIME;
+    info->maxApertureKey     = CONFIG_ID_N2_DETACH_MAX_APERTURE;
     info->unsafeSetServoPosition(0.0f);
 
     info                     = getServo(ServosList::MAIN_VALVE);
@@ -244,8 +244,8 @@ Actuators::Actuators()
     info->flipped            = Config::Servos::MAIN_FLIPPED;
     info->openingEvent       = 0;
     info->closingEvent       = 0;
-    info->openingTimeKey     = CONFIG_ID_MAIN_OPENING_TIME;
-    info->maxApertureKey     = CONFIG_ID_MAIN_MAX_APERTURE;
+    info->openingTimeKey     = CONFIG_ID_NITROGEN_OPENING_TIME;
+    info->maxApertureKey     = CONFIG_ID_NITROGEN_MAX_APERTURE;
     info->unsafeSetServoPosition(0.0f);
 }
 
diff --git a/src/RIGv2/Radio/Radio.cpp b/src/RIGv2/Radio/Radio.cpp
index fe44a57c2..09c2aba51 100644
--- a/src/RIGv2/Radio/Radio.cpp
+++ b/src/RIGv2/Radio/Radio.cpp
@@ -364,6 +364,17 @@ void Radio::enqueueRegistry()
             mavlink_message_t msg;
             const char* name = configurationIdToName(id);
 
+            // A safe copy function for key names
+            auto copyKeyName = [](auto& dest, const char* src)
+            {
+                // Ensure dest is not a pointer
+                static_assert(sizeof(dest) != sizeof(char*));
+
+                constexpr size_t maxKeyLen = sizeof(dest) / sizeof(dest[0]) - 1;
+                std::strncpy(dest, src, maxKeyLen);
+                dest[maxKeyLen] = '\0';  // Ensure null-termination
+            };
+
             switch (value.getType())
             {
                 case TypesEnum::UINT32:
@@ -372,7 +383,7 @@ void Radio::enqueueRegistry()
 
                     tm.timestamp = TimestampTimer::getTimestamp();
                     tm.key_id    = id;
-                    strcpy(tm.key_name, name);
+                    copyKeyName(tm.key_name, name);
                     value.get(tm.value);
 
                     mavlink_msg_registry_int_tm_encode(
@@ -386,7 +397,7 @@ void Radio::enqueueRegistry()
 
                     tm.timestamp = TimestampTimer::getTimestamp();
                     tm.key_id    = id;
-                    strcpy(tm.key_name, name);
+                    copyKeyName(tm.key_name, name);
                     value.get(tm.value);
 
                     mavlink_msg_registry_float_tm_encode(
@@ -400,7 +411,7 @@ void Radio::enqueueRegistry()
 
                     tm.timestamp = TimestampTimer::getTimestamp();
                     tm.key_id    = id;
-                    strcpy(tm.key_name, name);
+                    copyKeyName(tm.key_name, name);
                     Coordinates coord;
                     value.get(coord);
                     tm.latitude  = coord.latitude;
diff --git a/src/RIGv2/Registry/Registry.cpp b/src/RIGv2/Registry/Registry.cpp
index 847764c60..2fa748947 100644
--- a/src/RIGv2/Registry/Registry.cpp
+++ b/src/RIGv2/Registry/Registry.cpp
@@ -33,32 +33,57 @@ const char* RIGv2::configurationIdToName(ConfigurationId id)
 {
     switch (id)
     {
-        case CONFIG_ID_FILLING_OPENING_TIME:
-            return "FillingOpeningTime";
-        case CONFIG_ID_VENTING_OPENING_TIME:
-            return "VentingOpeningTime";
+        case CONFIG_ID_N2O_FILLING_OPENING_TIME:
+            return "N2O_FILLING_OPENING_TIME";
+        case CONFIG_ID_N2O_FILLING_MAX_APERTURE:
+            return "N2O_FILLING_MAX_APERTURE";
+        case CONFIG_ID_N2O_RELEASE_OPENING_TIME:
+            return "N2O_RELEASE_OPENING_TIME";
+        case CONFIG_ID_N2O_RELEASE_MAX_APERTURE:
+            return "N2O_RELEASE_MAX_APERTURE";
+        case CONFIG_ID_N2O_DETACH_OPENING_TIME:
+            return "N2O_DETACH_OPENING_TIME";
+        case CONFIG_ID_N2O_DETACH_MAX_APERTURE:
+            return "N2O_DETACH_MAX_APERTURE";
+        case CONFIG_ID_N2O_VENTING_OPENING_TIME:
+            return "N2O_VENTING_OPENING_TIME";
+        case CONFIG_ID_N2O_VENTING_MAX_APERTURE:
+            return "N2O_VENTING_MAX_APERTURE";
+        case CONFIG_ID_N2_FILLING_OPENING_TIME:
+            return "N2_FILLING_OPENING_TIME";
+        case CONFIG_ID_N2_FILLING_MAX_APERTURE:
+            return "N2_FILLING_MAX_APERTURE";
+        case CONFIG_ID_N2_RELEASE_OPENING_TIME:
+            return "N2_RELEASE_OPENING_TIME";
+        case CONFIG_ID_N2_RELEASE_MAX_APERTURE:
+            return "N2_RELEASE_MAX_APERTURE";
+        case CONFIG_ID_N2_DETACH_OPENING_TIME:
+            return "N2_DETACH_OPENING_TIME";
+        case CONFIG_ID_N2_DETACH_MAX_APERTURE:
+            return "N2_DETACH_MAX_APERTURE";
+        case CONFIG_ID_N2_QUENCHING_OPENING_TIME:
+            return "N2_QUENCHING_OPENING_TIME";
+        case CONFIG_ID_N2_QUENCHING_MAX_APERTURE:
+            return "N2_QUENCHING_MAX_APERTURE";
         case CONFIG_ID_MAIN_OPENING_TIME:
-            return "MainOpeningTime";
-        case CONFIG_ID_RELEASE_OPENING_TIME:
-            return "ReleaseOpeningTime";
-        case CONFIG_ID_DISCONNECT_OPENING_TIME:
-            return "DisconOpeningTime";
-        case CONFIG_ID_FILLING_MAX_APERTURE:
-            return "FillingMaxAperture";
-        case CONFIG_ID_VENTING_MAX_APERTURE:
-            return "VentingMaxAperture";
+            return "MAIN_OPENING_TIME";
         case CONFIG_ID_MAIN_MAX_APERTURE:
-            return "MainMaxAperture";
-        case CONFIG_ID_RELEASE_MAX_APERTURE:
-            return "ReleaseMaxAperture";
-        case CONFIG_ID_DISCONNECT_MAX_APERTURE:
-            return "DisconMaxAperture";
+            return "MAIN_MAX_APERTURE";
+        case CONFIG_ID_NITROGEN_OPENING_TIME:
+            return "NITROGEN_OPENING_TIME";
+        case CONFIG_ID_NITROGEN_MAX_APERTURE:
+            return "NITROGEN_MAX_APERTURE";
         case CONFIG_ID_IGNITION_TIME:
-            return "IgnitionTime";
+            return "IGNITION_TIME";
         case CONFIG_ID_DEFAULT_OPENING_TIME:
-            return "DefOpeningTime";
+            return "DEFAULT_OPENING_TIME";
         case CONFIG_ID_DEFAULT_MAX_APERTURE:
-            return "DefMaxAperture";
+            return "DEFAULT_MAX_APERTURE";
+        case CONFIG_ID_CHAMBER_TIME:
+            return "CHAMBER_TIME";
+        case CONFIG_ID_CHAMBER_DELAY:
+            return "CHAMBER_DELAY";
+
         default:
             return "<invalid>";
     }
diff --git a/src/RIGv2/Registry/Registry.h b/src/RIGv2/Registry/Registry.h
index 1f9b99b61..b1f8e4cd2 100644
--- a/src/RIGv2/Registry/Registry.h
+++ b/src/RIGv2/Registry/Registry.h
@@ -30,21 +30,50 @@ namespace RIGv2
 
 enum ConfigurationKeys
 {
-    CONFIG_ID_FILLING_OPENING_TIME    = 1,
-    CONFIG_ID_VENTING_OPENING_TIME    = 2,
-    CONFIG_ID_MAIN_OPENING_TIME       = 3,
-    CONFIG_ID_RELEASE_OPENING_TIME    = 4,
-    CONFIG_ID_DISCONNECT_OPENING_TIME = 5,
-    CONFIG_ID_FILLING_MAX_APERTURE    = 6,
-    CONFIG_ID_VENTING_MAX_APERTURE    = 7,
-    CONFIG_ID_MAIN_MAX_APERTURE       = 8,
-    CONFIG_ID_RELEASE_MAX_APERTURE    = 9,
-    CONFIG_ID_DISCONNECT_MAX_APERTURE = 10,
-    CONFIG_ID_IGNITION_TIME           = 11,
-    CONFIG_ID_DEFAULT_OPENING_TIME    = 12,
-    CONFIG_ID_DEFAULT_MAX_APERTURE    = 13,
-    CONFIG_ID_CHAMBER_TIME            = 14,
-    CONFIG_ID_CHAMBER_DELAY           = 15,
+    // N2O
+    CONFIG_ID_N2O_FILLING_OPENING_TIME,
+    CONFIG_ID_N2O_FILLING_MAX_APERTURE,
+
+    CONFIG_ID_N2O_RELEASE_OPENING_TIME,
+    CONFIG_ID_N2O_RELEASE_MAX_APERTURE,
+
+    CONFIG_ID_N2O_DETACH_OPENING_TIME,
+    CONFIG_ID_N2O_DETACH_MAX_APERTURE,
+
+    CONFIG_ID_N2O_VENTING_OPENING_TIME,
+    CONFIG_ID_N2O_VENTING_MAX_APERTURE,
+
+    // N2
+    CONFIG_ID_N2_FILLING_OPENING_TIME,
+    CONFIG_ID_N2_FILLING_MAX_APERTURE,
+
+    CONFIG_ID_N2_RELEASE_OPENING_TIME,
+    CONFIG_ID_N2_RELEASE_MAX_APERTURE,
+
+    CONFIG_ID_N2_DETACH_OPENING_TIME,
+    CONFIG_ID_N2_DETACH_MAX_APERTURE,
+
+    CONFIG_ID_N2_QUENCHING_OPENING_TIME,
+    CONFIG_ID_N2_QUENCHING_MAX_APERTURE,
+
+    // Main & Nitrogen
+    CONFIG_ID_MAIN_OPENING_TIME,
+    CONFIG_ID_MAIN_MAX_APERTURE,
+
+    CONFIG_ID_NITROGEN_OPENING_TIME,
+    CONFIG_ID_NITROGEN_MAX_APERTURE,
+
+    // Ignition parameters
+    CONFIG_ID_IGNITION_TIME,
+
+    // Default valve parameters
+    CONFIG_ID_DEFAULT_OPENING_TIME,
+    CONFIG_ID_DEFAULT_MAX_APERTURE,
+
+    // Chamber valve parameters
+    CONFIG_ID_CHAMBER_TIME,   // Time the chamber valve stays open
+    CONFIG_ID_CHAMBER_DELAY,  // Delay of opening the chamber valve after
+                              // opening the main valve
 };
 
 const char* configurationIdToName(Boardcore::ConfigurationId id);
-- 
GitLab