diff --git a/src/logic/command_base.cpp b/src/logic/command_base.cpp index 5c27c62..f870f50 100644 --- a/src/logic/command_base.cpp +++ b/src/logic/command_base.cpp @@ -189,15 +189,17 @@ bool CommandBase::CheckToolIndex(uint8_t index) { void CommandBase::ErrDisengagingIdler() { if (!mi::idler.Engaged()) { state = ProgressCode::ERRWaitingForUser; + error = deferredErrorCode; + deferredErrorCode = ErrorCode::OK; // and clear the deferredEC just for safety mg::globals.IncDriveErrors(); mpu::pulley.Disable(); mui::userInput.Clear(); // remove all buffered events if any just before we wait for some input } } -void CommandBase::GoToErrDisengagingIdler(ErrorCode ec) { +void CommandBase::GoToErrDisengagingIdler(ErrorCode deferredEC) { state = ProgressCode::ERRDisengagingIdler; - error = ec; + deferredErrorCode = deferredEC; ml::leds.SetPairButOffOthers(mg::globals.ActiveSlot(), ml::off, ml::blink0); mi::idler.Disengage(); } diff --git a/src/logic/command_base.h b/src/logic/command_base.h index 5af61f7..05e5954 100644 --- a/src/logic/command_base.h +++ b/src/logic/command_base.h @@ -26,6 +26,7 @@ public: inline CommandBase() : state(ProgressCode::OK) , error(ErrorCode::OK) + , deferredErrorCode(ErrorCode::OK) , stateBeforeModuleFailed(ProgressCode::Empty) , errorBeforeModuleFailed(ErrorCode::OK) , recoveringMovableErrorAxisMask(0) {} @@ -105,7 +106,7 @@ protected: void ErrDisengagingIdler(); /// Transit the state machine into ErrDisengagingIdler - void GoToErrDisengagingIdler(ErrorCode ec); + void GoToErrDisengagingIdler(ErrorCode deferredEC); /// Transit the state machine into ErrEngagingIdler void GoToErrEngagingIdler(); @@ -115,6 +116,7 @@ protected: ProgressCode state; ///< current progress state of the state machine ErrorCode error; ///< current error code + ErrorCode deferredErrorCode; ///< planned error code - occurs when doing GoToErrDisengagingIdler - after the idler disengaged, the error is set (not before) ProgressCode stateBeforeModuleFailed; ///< saved state of the state machine before a common error happened ErrorCode errorBeforeModuleFailed; ///< saved error of the state machine before a common error happened uint8_t recoveringMovableErrorAxisMask;