Defer setting error until ErrDisengagingIdler finishes
parent
26151fb176
commit
7688554581
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue