diff --git a/src/gui/MItem_input_shaper.cpp b/src/gui/MItem_input_shaper.cpp index ad766e9a15..ba55eb4c24 100644 --- a/src/gui/MItem_input_shaper.cpp +++ b/src/gui/MItem_input_shaper.cpp @@ -115,6 +115,17 @@ MI_IS_CALIB::MI_IS_CALIB() void MI_IS_CALIB::click([[maybe_unused]] IWindowMenu &window_menu) { marlin_client::gcode("M1959"); } + +// dev item, no need to translate +MI_IS_CALIB_RESULT::MI_IS_CALIB_RESULT(const char *label, const char *gcode) + : IWindowMenuItem { _(label), nullptr, is_enabled_t::yes, is_hidden_t::dev } + , gcode { gcode } { +} + +void MI_IS_CALIB_RESULT::click(IWindowMenu &) { + marlin_client::gcode(gcode); +} + #endif MI_IS_RESTORE_DEFAULTS::MI_IS_RESTORE_DEFAULTS() diff --git a/src/gui/MItem_input_shaper.hpp b/src/gui/MItem_input_shaper.hpp index b9ab466bc0..74ec6b1cca 100644 --- a/src/gui/MItem_input_shaper.hpp +++ b/src/gui/MItem_input_shaper.hpp @@ -109,4 +109,39 @@ class MI_IS_CALIB : public IWindowMenuItem { protected: virtual void click(IWindowMenu &window_menu) override; }; + +class MI_IS_CALIB_RESULT : public IWindowMenuItem { +private: + const char *gcode; + +protected: + MI_IS_CALIB_RESULT(const char *label, const char *gcode); + + virtual void click(IWindowMenu &) final; +}; + +class MI_IS_CALIB_RESULT_UNKNOWN final : public MI_IS_CALIB_RESULT { +public: + MI_IS_CALIB_RESULT_UNKNOWN() + : MI_IS_CALIB_RESULT("Set Result Unknown", "M1959 W0") {} +}; + +class MI_IS_CALIB_RESULT_SKIPPED final : public MI_IS_CALIB_RESULT { +public: + MI_IS_CALIB_RESULT_SKIPPED() + : MI_IS_CALIB_RESULT("Set Result Skipped", "M1959 W1") {} +}; + +class MI_IS_CALIB_RESULT_PASSED final : public MI_IS_CALIB_RESULT { +public: + MI_IS_CALIB_RESULT_PASSED() + : MI_IS_CALIB_RESULT("Set Result Passed", "M1959 W2") {} +}; + +class MI_IS_CALIB_RESULT_FAILED final : public MI_IS_CALIB_RESULT { +public: + MI_IS_CALIB_RESULT_FAILED() + : MI_IS_CALIB_RESULT("Set Result Failed", "M1959 W3") {} +}; + #endif diff --git a/src/gui/screen_menu_input_shaper.hpp b/src/gui/screen_menu_input_shaper.hpp index d4583ce274..b001b643ad 100644 --- a/src/gui/screen_menu_input_shaper.hpp +++ b/src/gui/screen_menu_input_shaper.hpp @@ -16,6 +16,10 @@ using ScreenMenuInputShaper = ScreenMenu< MI_RETURN, #if HAS_INPUT_SHAPER_CALIBRATION() MI_IS_CALIB, + MI_IS_CALIB_RESULT_UNKNOWN, + MI_IS_CALIB_RESULT_SKIPPED, + MI_IS_CALIB_RESULT_PASSED, + MI_IS_CALIB_RESULT_FAILED, #endif MI_IS_ENABLE_EDITING, MI_IS_X_ONOFF, diff --git a/src/marlin_stubs/M1959.cpp b/src/marlin_stubs/M1959.cpp index aa06030829..029cddfee0 100644 --- a/src/marlin_stubs/M1959.cpp +++ b/src/marlin_stubs/M1959.cpp @@ -585,6 +585,17 @@ static void M1959_internal(PhasesInputShaperCalibration phase) { namespace PrusaGcodeSuite { void M1959() { + if (parser.seen('W')) { + switch (const uint8_t w = parser.value_byte()) { + case 0: + case 1: + case 2: + case 3: + set_test_result(static_cast(w)); + } + return; + } + switch (get_test_result()) { case TestResult_Unknown: // Do not run calibration on the initial wizard after factory reset,