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."