diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index f19aaef968..b4ddc80454 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -202,7 +202,7 @@ const char NUL_STR[] PROGMEM = "", SP_Z_LBL[] PROGMEM = " Z:", SP_E_LBL[] PROGMEM = " E:"; -bool Running = true; +MarlinState marlin_state = MF_INITIALIZING; // For M109 and M190, this flag may be cleared (by M108) to exit the wait loop bool wait_for_heatup = true; @@ -839,7 +839,7 @@ void stop() { SERIAL_ERROR_MSG(STR_ERR_STOPPED); LCD_MESSAGEPGM(MSG_STOPPED); safe_delay(350); // allow enough time for messages to get out before stopping - Running = false; + marlin_state = MF_STOPPED; } } @@ -1183,6 +1183,8 @@ void setup() { SETUP_RUN(max7219.init()); #endif + marlin_state = MF_RUNNING; + SETUP_LOG("setup() completed."); } diff --git a/Marlin/src/MarlinCore.h b/Marlin/src/MarlinCore.h index 141ce7156e..3bce72ab80 100644 --- a/Marlin/src/MarlinCore.h +++ b/Marlin/src/MarlinCore.h @@ -76,9 +76,19 @@ void minkill(const bool steppers_off=false); void quickstop_stepper(); -extern bool Running; -inline bool IsRunning() { return Running; } -inline bool IsStopped() { return !Running; } +// Global State of the firmware +enum MarlinState : uint8_t { + MF_INITIALIZING = 0, + MF_RUNNING = _BV(0), + MF_PAUSED = _BV(1), + MF_WAITING = _BV(2), + MF_STOPPED = _BV(3), + MF_KILLED = _BV(7) +}; + +extern MarlinState marlin_state; +inline bool IsRunning() { return marlin_state == MF_RUNNING; } +inline bool IsStopped() { return marlin_state != MF_RUNNING; } bool printingIsActive(); bool printingIsPaused(); diff --git a/Marlin/src/gcode/control/M999.cpp b/Marlin/src/gcode/control/M999.cpp index c498e66cab..79cd5e1854 100644 --- a/Marlin/src/gcode/control/M999.cpp +++ b/Marlin/src/gcode/control/M999.cpp @@ -23,7 +23,7 @@ #include "../gcode.h" #include "../../lcd/ultralcd.h" // for lcd_reset_alert_level -#include "../../MarlinCore.h" // for Running +#include "../../MarlinCore.h" // for marlin_state #include "../queue.h" // for flush_and_request_resend /** @@ -37,7 +37,7 @@ * */ void GcodeSuite::M999() { - Running = true; + marlin_state = MF_RUNNING; ui.reset_alert_level(); if (parser.boolval('S')) return; diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index d0b1ddf0a3..f16a3af046 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -765,7 +765,7 @@ int16_t Temperature::getHeaterPower(const heater_ind_t heater_id) { // inline void loud_kill(PGM_P const lcd_msg, const heater_ind_t heater) { - Running = false; + marlin_state = MF_KILLED; #if USE_BEEPER for (uint8_t i = 20; i--;) { WRITE(BEEPER_PIN, HIGH); delay(25); @@ -2003,7 +2003,7 @@ void Temperature::init() { /** SERIAL_ECHO_START(); - SERIAL_ECHOPGM("Thermal Thermal Runaway Running. Heater ID: "); + SERIAL_ECHOPGM("Thermal Runaway Running. Heater ID: "); if (heater_id == H_CHAMBER) SERIAL_ECHOPGM("chamber"); if (heater_id < 0) SERIAL_ECHOPGM("bed"); else SERIAL_ECHO(heater_id); SERIAL_ECHOPAIR(" ; State:", sm.state, " ; Timer:", sm.timer, " ; Temperature:", current, " ; Target Temp:", target);