diff --git a/src/logic/CMakeLists.txt b/src/logic/CMakeLists.txt index f879f93..295dcb0 100644 --- a/src/logic/CMakeLists.txt +++ b/src/logic/CMakeLists.txt @@ -7,6 +7,7 @@ target_sources( feed_to_finda.cpp home.cpp load_filament.cpp + move_selector.cpp no_command.cpp retract_from_finda.cpp set_mode.cpp diff --git a/src/logic/feed_to_finda.cpp b/src/logic/feed_to_finda.cpp index 4dba06c..2b1838a 100644 --- a/src/logic/feed_to_finda.cpp +++ b/src/logic/feed_to_finda.cpp @@ -71,7 +71,8 @@ bool FeedToFinda::Step() { mg::globals.SetFilamentLoaded(mg::globals.ActiveSlot(), mg::FilamentLoadState::InSelector); dbg_logic_P(PSTR("Feed to Finda --> Idler disengaged")); dbg_logic_fP(PSTR("Pulley end steps %u"), mpu::pulley.CurrentPositionPulley_mm()); - state = OK; + state = mui::userInput.AnyEvent() ? Stopped : OK; + mui::userInput.Clear(); return true; // return immediately to allow for a seamless planning of another move (like feeding to bondtech) } else if (mm::motion.PlannedMoves(mm::Pulley) < 2) { // plan another move to make the illusion of unlimited moves diff --git a/src/logic/feed_to_finda.h b/src/logic/feed_to_finda.h index 4adae0c..cd25857 100644 --- a/src/logic/feed_to_finda.h +++ b/src/logic/feed_to_finda.h @@ -19,7 +19,8 @@ struct FeedToFinda { UnloadBackToPTFE, DisengagingIdler, OK, - Failed + Failed, + Stopped }; inline FeedToFinda() diff --git a/src/logic/load_filament.cpp b/src/logic/load_filament.cpp index 5d92982..7d7abd6 100644 --- a/src/logic/load_filament.cpp +++ b/src/logic/load_filament.cpp @@ -58,12 +58,19 @@ bool LoadFilament::StepInner() { switch (state) { case ProgressCode::FeedingToFinda: if (feed.Step()) { - if (feed.State() == FeedToFinda::Failed) { - // @@TODO - try to repeat 6x - push/pull sequence - probably something to put into feed_to_finda as an option + switch (feed.State()) { + case FeedToFinda::Failed: // @@TODO - try to repeat 6x - push/pull sequence - probably something to put into feed_to_finda as an option GoToErrDisengagingIdler(ErrorCode::FINDA_DIDNT_SWITCH_ON); // signal loading error - } else { + break; + case FeedToFinda::OK: state = ProgressCode::RetractingFromFinda; retract.Reset(); + break; + case FeedToFinda::Stopped: + // the user stopped the load for whatever reason + // - we are considering the LoadFlament operation as completed + state = ProgressCode::OK; + break; } } break;