Defer setting error until ErrDisengagingIdler finishes

pull/190/head
D.R.racer 2022-07-19 18:19:55 +02:00 committed by DRracer
parent 26151fb176
commit 7688554581
2 changed files with 7 additions and 3 deletions

View File

@ -189,15 +189,17 @@ bool CommandBase::CheckToolIndex(uint8_t index) {
void CommandBase::ErrDisengagingIdler() { void CommandBase::ErrDisengagingIdler() {
if (!mi::idler.Engaged()) { if (!mi::idler.Engaged()) {
state = ProgressCode::ERRWaitingForUser; state = ProgressCode::ERRWaitingForUser;
error = deferredErrorCode;
deferredErrorCode = ErrorCode::OK; // and clear the deferredEC just for safety
mg::globals.IncDriveErrors(); mg::globals.IncDriveErrors();
mpu::pulley.Disable(); mpu::pulley.Disable();
mui::userInput.Clear(); // remove all buffered events if any just before we wait for some input 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; state = ProgressCode::ERRDisengagingIdler;
error = ec; deferredErrorCode = deferredEC;
ml::leds.SetPairButOffOthers(mg::globals.ActiveSlot(), ml::off, ml::blink0); ml::leds.SetPairButOffOthers(mg::globals.ActiveSlot(), ml::off, ml::blink0);
mi::idler.Disengage(); mi::idler.Disengage();
} }

View File

@ -26,6 +26,7 @@ public:
inline CommandBase() inline CommandBase()
: state(ProgressCode::OK) : state(ProgressCode::OK)
, error(ErrorCode::OK) , error(ErrorCode::OK)
, deferredErrorCode(ErrorCode::OK)
, stateBeforeModuleFailed(ProgressCode::Empty) , stateBeforeModuleFailed(ProgressCode::Empty)
, errorBeforeModuleFailed(ErrorCode::OK) , errorBeforeModuleFailed(ErrorCode::OK)
, recoveringMovableErrorAxisMask(0) {} , recoveringMovableErrorAxisMask(0) {}
@ -105,7 +106,7 @@ protected:
void ErrDisengagingIdler(); void ErrDisengagingIdler();
/// Transit the state machine into ErrDisengagingIdler /// Transit the state machine into ErrDisengagingIdler
void GoToErrDisengagingIdler(ErrorCode ec); void GoToErrDisengagingIdler(ErrorCode deferredEC);
/// Transit the state machine into ErrEngagingIdler /// Transit the state machine into ErrEngagingIdler
void GoToErrEngagingIdler(); void GoToErrEngagingIdler();
@ -115,6 +116,7 @@ protected:
ProgressCode state; ///< current progress state of the state machine ProgressCode state; ///< current progress state of the state machine
ErrorCode error; ///< current error code 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 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 ErrorCode errorBeforeModuleFailed; ///< saved error of the state machine before a common error happened
uint8_t recoveringMovableErrorAxisMask; uint8_t recoveringMovableErrorAxisMask;