/// @file cut_filament.h #pragma once #include #include "command_base.h" #include "unload_filament.h" #include "feed_to_finda.h" #include "retract_from_finda.h" namespace logic { /// @brief A high-level command state machine - handles the complex logic of cutting filament class CutFilament : public CommandBase { public: inline constexpr CutFilament() : CommandBase() , cutSlot(0) , savedSelectorFeedRate_mm_s(0) {} /// Restart the automaton /// @param param index of filament slot to perform cut onto bool Reset(uint8_t param) override; /// @returns true if the state machine finished its job, false otherwise bool StepInner() override; ProgressCode State() const override; ErrorCode Error() const override; private: UnloadFilament unl; ///< a high-level command/operation may be used as a building block of other operations as well FeedToFinda feed; RetractFromFinda retract; uint8_t cutSlot; uint16_t savedSelectorFeedRate_mm_s; void SelectFilamentSlot(); void MoveSelector(uint8_t slot); }; /// The one and only instance of CutFilament state machine in the FW extern CutFilament cutFilament; } // namespace logic