idler/selector: simplify init

The homing is always invalidated in all cases. Let's simply invalidate
the homing only in the init method. The state machine's Ready state then
decides when it is OK to perform the homing move.

We shouldn't need to guess the axis's position, and should assume its not correct. Currently the init methods are only called during the boot up sequence.

Change in memory:
Flash: -126 bytes
SRAM: 0 bytes
pull/343/head
Guðni Már Gilbert 2024-12-25 01:37:30 +00:00
parent 88a241c741
commit 3e68bb41e3
2 changed files with 6 additions and 16 deletions

View File

@ -135,6 +135,7 @@ bool Idler::Step() {
return false; return false;
case Ready: case Ready:
if (!homingValid && mg::globals.FilamentLoaded() < mg::InFSensor) { if (!homingValid && mg::globals.FilamentLoaded() < mg::InFSensor) {
// home the Idler only in case we don't have filament loaded in the printer (or at least we think we don't)
PlanHome(); PlanHome();
return false; return false;
} }
@ -146,14 +147,8 @@ bool Idler::Step() {
} }
void Idler::Init() { void Idler::Init() {
if (mg::globals.FilamentLoaded() < mg::InFSensor) { // Re-home axis at first opportunity. See 'Ready' state.
// home the Idler only in case we don't have filament loaded in the printer (or at least we think we don't) InvalidateHoming();
PlanHome();
} else {
// otherwise assume the Idler is at its idle position (that's where it usually is)
mm::motion.SetPosition(mm::Idler, SlotPosition(IdleSlotIndex()).v);
InvalidateHoming(); // and plan homing sequence ASAP
}
} }
} // namespace idler } // namespace idler

View File

@ -122,6 +122,7 @@ bool Selector::Step() {
return false; return false;
case Ready: case Ready:
if (!homingValid && mg::globals.FilamentLoaded() < mg::InSelector && (!mf::finda.Pressed())) { if (!homingValid && mg::globals.FilamentLoaded() < mg::InSelector && (!mf::finda.Pressed())) {
// home the Selector only in case we don't have filament loaded (or at least we think we don't)
PlanHome(); PlanHome();
return false; return false;
} }
@ -133,14 +134,8 @@ bool Selector::Step() {
} }
void Selector::Init() { void Selector::Init() {
if (mg::globals.FilamentLoaded() < mg::FilamentLoadState::InSelector && (!mf::finda.Pressed())) { // Re-home axis at first opportunity. See 'Ready' state.
// home the Selector only in case we don't have filament loaded (or at least we think we don't) InvalidateHoming();
PlanHome();
} else {
// otherwise set selector's position according to know slot positions (and pretend it is correct)
mm::motion.SetPosition(mm::Selector, SlotPosition(mg::globals.ActiveSlot()).v);
InvalidateHoming(); // and plan homing sequence ASAP
}
} }
} // namespace selector } // namespace selector