From 055ab90f0731a2fb0ef4514777fa3600adc2d7f7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niccol=C3=B2=20Betto?= <niccolo.betto@skywarder.eu>
Date: Wed, 16 Apr 2025 16:54:56 +0200
Subject: [PATCH] [RIGv2] Close nitrogen valve after firing to stop
 pressurizing the OX

---
 src/RIGv2/Actuators/Actuators.cpp             |  2 +-
 .../GroundModeManager/GroundModeManager.cpp   | 23 +++++++++++--------
 src/common/Events.h                           | 11 +++++++++
 3 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/src/RIGv2/Actuators/Actuators.cpp b/src/RIGv2/Actuators/Actuators.cpp
index 6138b6901..9593345c8 100644
--- a/src/RIGv2/Actuators/Actuators.cpp
+++ b/src/RIGv2/Actuators/Actuators.cpp
@@ -420,7 +420,7 @@ void Actuators::updatePositionsTask()
     long long currentTime = getTime();
 
     // Iterate over all servos
-    for (uint8_t idx = 0; idx < 10; idx++)
+    for (uint8_t idx = 0; idx < infos.size(); idx++)
     {
         if (currentTime < infos[idx].closeTs)
         {
diff --git a/src/RIGv2/StateMachines/GroundModeManager/GroundModeManager.cpp b/src/RIGv2/StateMachines/GroundModeManager/GroundModeManager.cpp
index 31bdd3790..48eb6e201 100644
--- a/src/RIGv2/StateMachines/GroundModeManager/GroundModeManager.cpp
+++ b/src/RIGv2/StateMachines/GroundModeManager/GroundModeManager.cpp
@@ -322,6 +322,7 @@ State GroundModeManager::state_firing(const Event& event)
         }
 
         case TMTC_OPEN_NITROGEN:
+        case MOTOR_OPEN_CHAMBER:
         {
             // Open nitrogen
             uint32_t chamberTime = getModule<Registry>()->getOrSetDefaultUnsafe(
@@ -330,7 +331,15 @@ State GroundModeManager::state_firing(const Event& event)
 
             getModule<Actuators>()->openChamberWithTime(chamberTime);
 
-            return transition(&GroundModeManager::state_disarmed);
+            if (event == TMTC_OPEN_NITROGEN)
+            {
+                // Nitrogen TMTC causes automatic disarm
+                return transition(&GroundModeManager::state_disarmed);
+            }
+            else
+            {
+                return HANDLED;
+            }
         }
 
         case MOTOR_COOLING_TIMEOUT:  // Normal firing end
@@ -433,15 +442,8 @@ State GroundModeManager::state_oxidizer(const Event& event)
             return HANDLED;
         }
 
-        case MOTOR_OPEN_CHAMBER:
+        case MOTOR_MAIN_CLOSE:
         {
-            uint32_t chamberTime = getModule<Registry>()->getOrSetDefaultUnsafe(
-                CONFIG_ID_CHAMBER_TIME,
-                Config::GroundModeManager::DEFAULT_CHAMBER_VALVE_TIME);
-
-            // Open the chamber valve
-            getModule<Actuators>()->openChamberWithTime(chamberTime);
-
             return transition(&GroundModeManager::state_cooling);
         }
 
@@ -460,6 +462,9 @@ State GroundModeManager::state_cooling(const Event& event)
         {
             updateAndLogStatus(GroundModeManagerState::COOLING);
 
+            // Stop pressurizing the OX after the firing is over
+            getModule<Actuators>()->closeServo(ServosList::NITROGEN_VALVE);
+
             return HANDLED;
         }
 
diff --git a/src/common/Events.h b/src/common/Events.h
index 6a93c35fd..5e02ec862 100644
--- a/src/common/Events.h
+++ b/src/common/Events.h
@@ -294,16 +294,27 @@ inline std::string getEventString(uint8_t event)
         {MOTOR_START_TARS, "MOTOR_START_TARS"},
         {MOTOR_STOP_TARS, "MOTOR_STOP_TARS"},
         {MOTOR_OX_FIL_OPEN, "MOTOR_OX_FIL_OPEN"},
+        {MOTOR_OX_FIL_CLOSE, "MOTOR_OX_FIL_CLOSE"},
         {MOTOR_OX_REL_OPEN, "MOTOR_OX_REL_OPEN"},
+        {MOTOR_OX_REL_CLOSE, "MOTOR_OX_REL_CLOSE"},
         {MOTOR_OX_DET_OPEN, "MOTOR_OX_DET_OPEN"},
+        {MOTOR_OX_DET_CLOSE, "MOTOR_OX_DET_CLOSE"},
         {MOTOR_N2_3W_OPEN, "MOTOR_N2_3W_OPEN"},
+        {MOTOR_N2_3W_CLOSE, "MOTOR_N2_3W_CLOSE"},
         {MOTOR_N2_FIL_OPEN, "MOTOR_N2_FIL_OPEN"},
+        {MOTOR_N2_FIL_CLOSE, "MOTOR_N2_FIL_CLOSE"},
         {MOTOR_N2_REL_OPEN, "MOTOR_N2_REL_OPEN"},
+        {MOTOR_N2_REL_CLOSE, "MOTOR_N2_REL_CLOSE"},
         {MOTOR_N2_DET_OPEN, "MOTOR_N2_DET_OPEN"},
+        {MOTOR_N2_DET_CLOSE, "MOTOR_N2_DET_CLOSE"},
         {MOTOR_NITR_OPEN, "MOTOR_NITR_OPEN"},
+        {MOTOR_NITR_CLOSE, "MOTOR_NITR_CLOSE"},
         {MOTOR_OX_VEN_OPEN, "MOTOR_OX_VEN_OPEN"},
+        {MOTOR_OX_VEN_CLOSE, "MOTOR_OX_VEN_CLOSE"},
         {MOTOR_N2_QUE_OPEN, "MOTOR_N2_QUE_OPEN"},
+        {MOTOR_N2_QUE_CLOSE, "MOTOR_N2_QUE_CLOSE"},
         {MOTOR_MAIN_OPEN, "MOTOR_MAIN_OPEN"},
+        {MOTOR_MAIN_CLOSE, "MOTOR_MAIN_CLOSE"},
         {MOTOR_IGNITION, "MOTOR_IGNITION"},
         {MOTOR_MANUAL_ACTION, "MOTOR_MANUAL_ACTION"},
         {MOTOR_OPEN_OXIDANT, "MOTOR_OPEN_OXIDANT"},
-- 
GitLab