diff --git a/src/boards/Payload/Configs/FlightModeManagerConfig.h b/src/boards/Payload/Configs/FlightModeManagerConfig.h index d76d78b3a60546b8c6d849029d504e49024b1823..95462eb059799913265967f5f4bd0f9fa7b2328a 100644 --- a/src/boards/Payload/Configs/FlightModeManagerConfig.h +++ b/src/boards/Payload/Configs/FlightModeManagerConfig.h @@ -26,5 +26,6 @@ namespace Payload { constexpr unsigned int MISSION_TIMEOUT = 15 * 60 * 1000; +constexpr unsigned int APOGEE_TIMEOUT = 20 * 1000; -} +} // namespace Payload diff --git a/src/boards/Payload/StateMachines/FlightModeManager/FlightModeManager.cpp b/src/boards/Payload/StateMachines/FlightModeManager/FlightModeManager.cpp index 89cbe102077686717bf88267492bb09435ea036c..9253e42d9cf6873822e69b00308bfc46c38a7fa2 100644 --- a/src/boards/Payload/StateMachines/FlightModeManager/FlightModeManager.cpp +++ b/src/boards/Payload/StateMachines/FlightModeManager/FlightModeManager.cpp @@ -420,15 +420,24 @@ State FlightModeManager::state_flying(const Event& event) State FlightModeManager::state_ascending(const Event& event) { + static uint16_t apogeeDetectionEventId = -1; + switch (event) { case EV_ENTRY: { logStatus(FlightModeManagerState::ASCENDING); + + apogeeDetectionEventId = + EventBroker::getInstance().postDelayed<APOGEE_TIMEOUT>( + FLIGHT_APOGEE_DETECTED, TOPIC_FLIGHT); + return HANDLED; } case EV_EXIT: { + EventBroker::getInstance().removeDelayed(apogeeDetectionEventId); + return HANDLED; } case EV_EMPTY: