From c03b01125b41bbd4f9f97622e47c9c212f4bcc14 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Wed, 25 Oct 2023 17:13:17 +0200 Subject: [PATCH] Set Ready --- Firmware/Marlin.h | 13 +++++++++++++ Firmware/Marlin_main.cpp | 27 ++++++++++++++++++++++++++- Firmware/cardreader.cpp | 2 ++ Firmware/cmdqueue.cpp | 5 +++-- Firmware/messages.cpp | 1 + Firmware/messages.h | 1 + Firmware/ultralcd.cpp | 15 ++++++++++++++- Firmware/util.h | 4 +++- lang/po/Firmware.pot | 5 +++++ lang/po/Firmware_cs.po | 5 +++++ lang/po/Firmware_de.po | 5 +++++ lang/po/Firmware_es.po | 5 +++++ lang/po/Firmware_fr.po | 5 +++++ lang/po/Firmware_hr.po | 5 +++++ lang/po/Firmware_hu.po | 5 +++++ lang/po/Firmware_it.po | 5 +++++ lang/po/Firmware_nl.po | 5 +++++ lang/po/Firmware_no.po | 5 +++++ lang/po/Firmware_pl.po | 5 +++++ lang/po/Firmware_ro.po | 5 +++++ lang/po/Firmware_sk.po | 5 +++++ lang/po/Firmware_sv.po | 5 +++++ 22 files changed, 133 insertions(+), 5 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 8bb757c5ef..572a40c95e 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -316,6 +316,19 @@ bool printJobOngoing(); bool printer_active(); +enum class PrinterStatus : uint8_t +{ + NotReady = 0, + IsReady = 1, + Idle = 2, + SDPrintingFinished = 3, + HostPrintingFinished = 4, + IsSDPrinting = 5, + IsHostPrinting = 6, +}; + +extern PrinterStatus printer_status; + //! Beware - mcode_in_progress is set as soon as the command gets really processed, //! which is not the same as posting the M600 command into the command queue //! There can be a considerable lag between posting M600 and its real processing which might result diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 5cc53da95a..047a994221 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -519,6 +519,8 @@ bool __attribute__((noinline)) printer_active() { || mesh_bed_leveling_flag; } +PrinterStatus printer_status; + // Currently only used in one place, allowed to be inlined bool check_fsensor() { return printJobOngoing() @@ -1731,7 +1733,7 @@ void loop() usb_timer.start(); } else if (usb_timer.expired(10000)) { //just need to check if it expired. Nothing else is needed to be done. - ; + printer_status = PrinterStatus::HostPrintingFinished; //set printer state to show LCD menu after finished SD print and report correctly M862.7 Q when USB times out } #ifdef PRUSA_M28 @@ -5815,6 +5817,22 @@ SERIAL_PROTOCOLPGM("\n\n"); #endif // Z_PROBE_REPEATABILITY_TEST #endif // ENABLE_AUTO_BED_LEVELING + /*! + ### M72 - Set Ready M72: Set Ready + #### Usage + + M72 [ S ] + + #### Parameters + - `S` - Set printer ready + */ + case 72: + { + if(code_seen('S')) printer_status = PrinterStatus(code_value_uint8()); + break; + } + + /*! ### M73 - Set/get print progress M73: Set/Get build percentage #### Usage @@ -7892,6 +7910,8 @@ SERIAL_PROTOCOLPGM("\n\n"); - M862.3 { P"" | Q } - M862.4 { P | Q } - M862.5 { P | Q } + - M862.6 Not used but reserved + - M862.7 { Q } When run with P<> argument, the check is performed against the input value. When run with Q argument, the current value is shown. @@ -7974,6 +7994,11 @@ SERIAL_PROTOCOLPGM("\n\n"); else if(code_seen('Q')) SERIAL_PROTOCOLLN(GCODE_LEVEL); break; + case ClPrintChecking::_Features: // ~ .6 + break; + case ClPrintChecking::_PrinterState: // ~.7 + SERIAL_PROTOCOLLN((int)printer_status); + break; } break; } diff --git a/Firmware/cardreader.cpp b/Firmware/cardreader.cpp index 1d6c50ec6e..dead09942b 100644 --- a/Firmware/cardreader.cpp +++ b/Firmware/cardreader.cpp @@ -273,6 +273,7 @@ void CardReader::startFileprint() if(cardOK) { sdprinting = true; + printer_status = PrinterStatus::IsSDPrinting; //set printer state to hide LCD menu and report correctly M862.7 Q while SD printing #ifdef SDCARD_SORT_ALPHA //flush_presort(); #endif @@ -1018,6 +1019,7 @@ void CardReader::printingHasFinished() else { sdprinting = false; + printer_status = PrinterStatus::SDPrintingFinished; //set printer state to show LCD menu after finished SD print if(SD_FINISHED_STEPPERRELEASE) { finishAndDisableSteppers(); diff --git a/Firmware/cmdqueue.cpp b/Firmware/cmdqueue.cpp index 39030cb106..96bdc3d8de 100755 --- a/Firmware/cmdqueue.cpp +++ b/Firmware/cmdqueue.cpp @@ -479,9 +479,10 @@ void get_command() allow_when_stopped = true; // Handle the USB timer - if ((*cmd_start == 'G') && !(IS_SD_PRINTING)) + if ((*cmd_start == 'G') && !(IS_SD_PRINTING)) { usb_timer.start(); - + printer_status = PrinterStatus::IsHostPrinting; //set printer state busy printing to hide LCD menu and report correctly M862.7 Q while USB printing + } if (allow_when_stopped == false && Stopped == true) { // Stopped can be set either during error states (thermal error: cannot continue), or // when a printer-initiated action is processed. In such case the printer will send to diff --git a/Firmware/messages.cpp b/Firmware/messages.cpp index afdda7d0d0..c4cb7a75b8 100644 --- a/Firmware/messages.cpp +++ b/Firmware/messages.cpp @@ -101,6 +101,7 @@ const char MSG_SELFTEST_MOTOR[] PROGMEM_I1 = ISTR("Motor"); ////MSG_SELFTEST_MOT const char MSG_SELFTEST_FILAMENT_SENSOR[] PROGMEM_I1 = ISTR("Filament sensor"); ////MSG_SELFTEST_FILAMENT_SENSOR c=17 const char MSG_SELFTEST_WIRINGERROR[] PROGMEM_I1 = ISTR("Wiring error"); ////MSG_SELFTEST_WIRINGERROR c=18 const char MSG_SETTINGS[] PROGMEM_I1 = ISTR("Settings"); ////MSG_SETTINGS c=18 +const char MSG_SET_READY[] PROGMEM_I1 = ISTR("Set Ready"); ////MSG_SET_READY c=13 const char MSG_SELECT_LANGUAGE[] PROGMEM_I1 = ISTR("Select language"); ////MSG_SELECT_LANGUAGE c=18 const char MSG_SORTING_FILES[] PROGMEM_I1 = ISTR("Sorting files"); ////MSG_SORTING_FILES c=20 const char MSG_TOTAL[] PROGMEM_I1 = ISTR("Total"); ////MSG_TOTAL c=6 diff --git a/Firmware/messages.h b/Firmware/messages.h index 3b5511a16c..6b58679c7e 100644 --- a/Firmware/messages.h +++ b/Firmware/messages.h @@ -103,6 +103,7 @@ extern const char MSG_SELFTEST_MOTOR[]; extern const char MSG_SELFTEST_FILAMENT_SENSOR[]; extern const char MSG_SELFTEST_WIRINGERROR[]; extern const char MSG_SETTINGS[]; +extern const char MSG_SET_READY[]; extern const char MSG_SELECT_LANGUAGE[]; extern const char MSG_SORTING_FILES[]; extern const char MSG_TOTAL[]; diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 76996806ab..cec791c290 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -5121,6 +5121,16 @@ static void lcd_sheet_menu() MENU_END(); } +//! @brief Set printer state +//! Sets the printer state for next print via LCD menu +//! @endcode +static void lcd_printer_status_toggle() +{ + if (printer_status == PrinterStatus::NotReady) printer_status = PrinterStatus::IsReady; + else printer_status = PrinterStatus::NotReady; + enquecommandf_P(PSTR("M118 A1 action:%s"), (printer_status == PrinterStatus::NotReady) ? "not_ready" : "ready"); +} + //! @brief Show Main Menu //! //! @code{.unparsed} @@ -5193,7 +5203,9 @@ static void lcd_main_menu() } else if (!Stopped) { MENU_ITEM_SUBMENU_P(_i("Preheat"), lcd_preheat_menu);////MSG_PREHEAT c=18 } - + if (printer_status < PrinterStatus::IsSDPrinting) { + MENU_ITEM_TOGGLE_P(_T(MSG_SET_READY), (printer_status == PrinterStatus::IsReady) ? _T(MSG_YES) : _T(MSG_NO), lcd_printer_status_toggle); + } if (mesh_bed_leveling_flag == false && homing_flag == false && !isPrintPaused && !processing_tcode) { if (usb_timer.running()) { MENU_ITEM_FUNCTION_P(_T(MSG_PAUSE_PRINT), lcd_pause_usb_print); @@ -5648,6 +5660,7 @@ void print_stop(bool interactive) // return to status is required to continue processing in the main loop! lcd_commands_type = LcdCommands::StopPrint; + printer_status = PrinterStatus::NotReady; //set printer state to show LCD menu after print has been stopped and report correctly M862.7 Q lcd_return_to_status(); } diff --git a/Firmware/util.h b/Firmware/util.h index d06d466dbf..f5b63a0c45 100644 --- a/Firmware/util.h +++ b/Firmware/util.h @@ -32,7 +32,9 @@ enum class ClPrintChecking:uint_least8_t _Model=2, _Smodel=3, _Version=4, - _Gcode=5 + _Gcode=5, + _Features=6, + _PrinterState=7 }; enum class ClNozzleDiameter:uint_least8_t diff --git a/lang/po/Firmware.pot b/lang/po/Firmware.pot index cf88ff9572..c83a39f1c7 100644 --- a/lang/po/Firmware.pot +++ b/lang/po/Firmware.pot @@ -1939,6 +1939,11 @@ msgstr "" msgid "Sensor verified, remove the filament now." msgstr "" +#. MSG_SET_READY c=13 +#: ../../Firmware/messages.cpp:104 ../../Firmware/ultralcd.cpp:5204 +msgid "Set Ready" +msgstr "" + #. MSG_SET_TEMPERATURE c=20 #: ../../Firmware/ultralcd.cpp:2706 msgid "Set temperature:" diff --git a/lang/po/Firmware_cs.po b/lang/po/Firmware_cs.po index c8b357d392..3dc6451800 100644 --- a/lang/po/Firmware_cs.po +++ b/lang/po/Firmware_cs.po @@ -2555,6 +2555,11 @@ msgstr "Citlivost" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Mesh Bed Leveling selhal. Spusťte kalibraci osy Z." +#. MSG_SET_READY c=13 +#: ../../Firmware/messages.cpp:104 ../../Firmware/ultralcd.cpp:5204 +msgid "Set Ready" +msgstr "Připravit" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Vyjmete stary filament a stisknete tlacitko pro zavedeni noveho." diff --git a/lang/po/Firmware_de.po b/lang/po/Firmware_de.po index bd0ad9edd0..cbc2696b1b 100644 --- a/lang/po/Firmware_de.po +++ b/lang/po/Firmware_de.po @@ -2583,6 +2583,11 @@ msgstr "Sensitivität" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "MeshBett Ausgleich fehlgeschlagen. Z Kalibrierung ausführen." +#. MSG_SET_READY c=13 +#: ../../Firmware/messages.cpp:104 ../../Firmware/ultralcd.cpp:5204 +msgid "Set Ready" +msgstr "Bereit setzen" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Entferne das alte Fil. und drücke den Knopf, um das neue zu laden." diff --git a/lang/po/Firmware_es.po b/lang/po/Firmware_es.po index 8cc80a3eca..0acc67da03 100644 --- a/lang/po/Firmware_es.po +++ b/lang/po/Firmware_es.po @@ -2578,6 +2578,11 @@ msgstr "Sensibilidad" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Nivelación fallida. Ejecute la calibración Z." +#. MSG_SET_READY c=13 +#: ../../Firmware/messages.cpp:104 ../../Firmware/ultralcd.cpp:5204 +msgid "Set Ready" +msgstr "Listo" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "" #~ "Retira el fil. viejo y presiona el dial para comenzar a cargar el nuevo." diff --git a/lang/po/Firmware_fr.po b/lang/po/Firmware_fr.po index 00b6788c2a..2067f8e2bf 100644 --- a/lang/po/Firmware_fr.po +++ b/lang/po/Firmware_fr.po @@ -2590,6 +2590,11 @@ msgstr "Sensibilité" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Mesh bed leveling a échoué. Veuillez procéder à l'étalonnage Z." +#. MSG_SET_READY c=13 +#: ../../Firmware/messages.cpp:104 ../../Firmware/ultralcd.cpp:5204 +msgid "Set Ready" +msgstr "Ensemb. prête" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "" #~ "Retirez l'ancien fil. puis appuyez sur le bouton pour charger le nouveau." diff --git a/lang/po/Firmware_hr.po b/lang/po/Firmware_hr.po index fbe1b8f082..d06e4e60d3 100644 --- a/lang/po/Firmware_hr.po +++ b/lang/po/Firmware_hr.po @@ -2572,6 +2572,11 @@ msgstr "Osjetljivost" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Niveliranje podloge nije uspijelo. Pokrenite Z kalibraciju." +#. MSG_SET_READY c=13 +#: ../../Firmware/messages.cpp:104 ../../Firmware/ultralcd.cpp:5204 +msgid "Set Ready" +msgstr "Set spreman" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Uklonite stari fil. i pritisnite gumb za pocetak stavljanja novog." diff --git a/lang/po/Firmware_hu.po b/lang/po/Firmware_hu.po index 23a201feb8..b3397b6a74 100644 --- a/lang/po/Firmware_hu.po +++ b/lang/po/Firmware_hu.po @@ -2577,6 +2577,11 @@ msgstr "Érzékenység" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Sikertelen asztal szintezés. Kérjük, futtasd a Z kalibrálást." +#. MSG_SET_READY c=13 +#: ../../Firmware/messages.cpp:104 ../../Firmware/ultralcd.cpp:5204 +msgid "Set Ready" +msgstr "Készen áll" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Vedd ki a regi fil., majd nyomd meg a gombot az uj fil. betoltesehez." diff --git a/lang/po/Firmware_it.po b/lang/po/Firmware_it.po index d6998c891b..d4e6bbec73 100644 --- a/lang/po/Firmware_it.po +++ b/lang/po/Firmware_it.po @@ -2578,6 +2578,11 @@ msgstr "Sensibilità" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Livellamento piano fallito. Si prega di eseguire la calibrazione Z." +#. MSG_SET_READY c=13 +#: ../../Firmware/messages.cpp:104 ../../Firmware/ultralcd.cpp:5204 +msgid "Set Ready" +msgstr "Impos. Pronta" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Rimuovi il fil. precedente e premi la manopola per caricare il nuovo." diff --git a/lang/po/Firmware_nl.po b/lang/po/Firmware_nl.po index 1e8e62e616..b112a9d326 100644 --- a/lang/po/Firmware_nl.po +++ b/lang/po/Firmware_nl.po @@ -2580,6 +2580,11 @@ msgstr "Sensitiviteit" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Bed leveling mislukt. Voer de Z-kalibratie uit." +#. MSG_SET_READY c=13 +#: ../../Firmware/messages.cpp:104 ../../Firmware/ultralcd.cpp:5204 +msgid "Set Ready" +msgstr "Gereed zetten" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "" #~ "Verwijder de oude filament en druk op de knop om nieuwe filament te laden." diff --git a/lang/po/Firmware_no.po b/lang/po/Firmware_no.po index a0f7db8837..60a659f810 100644 --- a/lang/po/Firmware_no.po +++ b/lang/po/Firmware_no.po @@ -2554,6 +2554,11 @@ msgstr "Sensitivitet" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Sengeplanering feilet. Kjør Z-kalibrering." +#. MSG_SET_READY c=13 +#: ../../Firmware/messages.cpp:104 ../../Firmware/ultralcd.cpp:5204 +msgid "Set Ready" +msgstr "Gjør klar" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Ta bort det gamle filamentet og trykk valghjulet for å laste et nytt." diff --git a/lang/po/Firmware_pl.po b/lang/po/Firmware_pl.po index d1788d1254..72680adc90 100644 --- a/lang/po/Firmware_pl.po +++ b/lang/po/Firmware_pl.po @@ -2572,6 +2572,11 @@ msgstr "Czułość" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Poziomowanie stołu nieudane. Proszę uruchomić kalibrację Z." +#. MSG_SET_READY c=13 +#: ../../Firmware/messages.cpp:104 ../../Firmware/ultralcd.cpp:5204 +msgid "Set Ready" +msgstr "Ust. gotowość" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Wyciągnij poprzedni filament i naciśnij pokrętło aby załadować nowy." diff --git a/lang/po/Firmware_ro.po b/lang/po/Firmware_ro.po index 3880edca00..3107e6a736 100644 --- a/lang/po/Firmware_ro.po +++ b/lang/po/Firmware_ro.po @@ -2578,6 +2578,11 @@ msgstr "Sensibilitate" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Nivelarea patului a eșuat. Rulează Calibrare Z." +#. MSG_SET_READY c=13 +#: ../../Firmware/messages.cpp:104 ../../Firmware/ultralcd.cpp:5204 +msgid "Set Ready" +msgstr "Set pregătit" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Scoateți fil. vechi și apăsați butonul pentru a încărca unul nou." diff --git a/lang/po/Firmware_sk.po b/lang/po/Firmware_sk.po index 8c5a4d8701..b81e6422ae 100644 --- a/lang/po/Firmware_sk.po +++ b/lang/po/Firmware_sk.po @@ -2560,6 +2560,11 @@ msgstr "Citlivosť" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Vyrovnanie platne zlyhalo. Spustite kalibráciu Z." +#. MSG_SET_READY c=13 +#: ../../Firmware/messages.cpp:104 ../../Firmware/ultralcd.cpp:5204 +msgid "Set Ready" +msgstr "Pripravte sa" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Vyberte starý filament a stlačte tlačidlo pre zavedenie nového." diff --git a/lang/po/Firmware_sv.po b/lang/po/Firmware_sv.po index 7ed3119079..96e63abace 100644 --- a/lang/po/Firmware_sv.po +++ b/lang/po/Firmware_sv.po @@ -2567,6 +2567,11 @@ msgstr "Känslighet" msgid "Mesh bed leveling failed. Please run Z calibration." msgstr "Bäddnivelleringen felade. Kör Z-kalibrering." +#. MSG_SET_READY c=13 +#: ../../Firmware/messages.cpp:104 ../../Firmware/ultralcd.cpp:5204 +msgid "Set Ready" +msgstr "Gör klar" + #~ msgid "Remove old filament and press the knob to start loading new filament." #~ msgstr "Ta bort det gamla fil. och tryck på knappen för att börja ladda nytt."