From 1f8fb66db8a6ce75751d079cab06b56122106e6e Mon Sep 17 00:00:00 2001
From: Angelo Prete <angelo.prete@skywarder.eu>
Date: Fri, 22 Mar 2024 19:15:22 +0100
Subject: [PATCH] [Parafoil] Reintroduced control delay

---
 src/boards/Parafoil/Configs/FlightModeManagerConfig.h       | 4 +++-
 .../StateMachines/FlightModeManager/FlightModeManager.cpp   | 6 +++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/boards/Parafoil/Configs/FlightModeManagerConfig.h b/src/boards/Parafoil/Configs/FlightModeManagerConfig.h
index c7f1b9a56..bb1843eb7 100644
--- a/src/boards/Parafoil/Configs/FlightModeManagerConfig.h
+++ b/src/boards/Parafoil/Configs/FlightModeManagerConfig.h
@@ -1,5 +1,5 @@
 /* Copyright (c) 2022 Skyward Experimental Rocketry
- * Author: Federico Mandelli
+ * Author: Federico Mandelli, Angelo Prete
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
@@ -25,4 +25,6 @@
 namespace Parafoil
 {
 constexpr unsigned int LOGGING_DELAY = 5 * 1000;  // [ms]
+constexpr unsigned int CONTROL_DELAY   = 5 * 1000; // [ms]
+
 }  // namespace Parafoil
diff --git a/src/boards/Parafoil/StateMachines/FlightModeManager/FlightModeManager.cpp b/src/boards/Parafoil/StateMachines/FlightModeManager/FlightModeManager.cpp
index 31788a9a0..14ba646b8 100644
--- a/src/boards/Parafoil/StateMachines/FlightModeManager/FlightModeManager.cpp
+++ b/src/boards/Parafoil/StateMachines/FlightModeManager/FlightModeManager.cpp
@@ -346,16 +346,20 @@ State FlightModeManager::state_ready(const Event& event)
 
 State FlightModeManager::state_wing_descent(const Event& event)
 {
+    static uint16_t controlDelayId;
+
     switch (event)
     {
         case EV_ENTRY:
         {
             logStatus(FlightModeManagerState::WING_DESCENT);
-            EventBroker::getInstance().post(FLIGHT_WING_DESCENT, TOPIC_FLIGHT);
+            controlDelayId = EventBroker::getInstance().postDelayed(
+                FLIGHT_WING_DESCENT, TOPIC_FLIGHT, CONTROL_DELAY);
             return HANDLED;
         }
         case EV_EXIT:
         {
+            EventBroker::getInstance().removeDelayed(controlDelayId);
             return HANDLED;
         }
         case EV_EMPTY:
-- 
GitLab