From 14fba81e14fc9930c72fa287ac7e515764065263 Mon Sep 17 00:00:00 2001
From: Federico Mandelli <federicomandelli@skywarder.eu>
Date: Wed, 22 May 2024 11:57:58 +0200
Subject: [PATCH] [WingController] Added flare in flight sequence (last minute
 fix, to be improved)

---
 .../WingController/WingController.cpp         | 35 ++++++++++++++++---
 1 file changed, 30 insertions(+), 5 deletions(-)

diff --git a/src/boards/Parafoil/StateMachines/WingController/WingController.cpp b/src/boards/Parafoil/StateMachines/WingController/WingController.cpp
index f0542e62a..bac52cd90 100644
--- a/src/boards/Parafoil/StateMachines/WingController/WingController.cpp
+++ b/src/boards/Parafoil/StateMachines/WingController/WingController.cpp
@@ -145,12 +145,9 @@ State WingController::state_calibration(const Boardcore::Event& event)
         {
             logStatus(WingControllerState::CALIBRATION);
 
-            modules.get<Actuators>()->startTwirl();
+            flare();
             calibrationTimeoutEventId = EventBroker::getInstance().postDelayed(
-                DPL_WES_CAL_DONE, TOPIC_DPL, WES_CALIBRATION_TIMEOUT);
-
-            modules.get<WindEstimation>()
-                ->startWindEstimationSchemeCalibration();
+                DPL_SERVO_ACTUATION_DETECTED, TOPIC_DPL, 2000);
 
             return HANDLED;
         }
@@ -163,6 +160,34 @@ State WingController::state_calibration(const Boardcore::Event& event)
         {
             return tranSuper(&WingController::state_flying);
         }
+        case DPL_SERVO_ACTUATION_DETECTED:
+        {
+            reset();
+            calibrationTimeoutEventId = EventBroker::getInstance().postDelayed(
+                DPL_WIGGLE, TOPIC_DPL, 1000);
+
+            return HANDLED;
+        }
+        case DPL_WIGGLE:
+        {
+            flare();
+            calibrationTimeoutEventId = EventBroker::getInstance().postDelayed(
+                DPL_NC_OPEN, TOPIC_DPL, 2000);
+
+            return HANDLED;
+        }
+        case DPL_NC_OPEN:
+        {
+            reset();
+            calibrationTimeoutEventId = EventBroker::getInstance().postDelayed(
+                DPL_WES_CAL_DONE, TOPIC_DPL, WES_CALIBRATION_TIMEOUT);
+            modules.get<WindEstimation>()
+                ->startWindEstimationSchemeCalibration();
+
+            modules.get<Actuators>()->startTwirl();
+
+            return HANDLED;
+        }
         case DPL_WES_CAL_DONE:
         {
             modules.get<Actuators>()->stopTwirl();
-- 
GitLab