Skip to content

Commit

Permalink
🚸 Emergency Parse M524 (MarlinFirmware#24761)
Browse files Browse the repository at this point in the history
  • Loading branch information
arekm authored and Andy-Big committed Jul 2, 2023
1 parent e299376 commit b63e3ab
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 1 deletion.
3 changes: 3 additions & 0 deletions Marlin/src/feature/e_parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@
// Static data members
bool EmergencyParser::killed_by_M112, // = false
EmergencyParser::quickstop_by_M410,
#if ENABLED(SDSUPPORT)
EmergencyParser::sd_abort_by_M524,
#endif
EmergencyParser::enabled;

#if ENABLED(HOST_PROMPT_SUPPORT)
Expand Down
20 changes: 19 additions & 1 deletion Marlin/src/feature/e_parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ class EmergencyParser {

public:

// Currently looking for: M108, M112, M410, M876 S[0-9], S000, P000, R000
// Currently looking for: M108, M112, M410, M524, M876 S[0-9], S000, P000, R000
enum State : uint8_t {
EP_RESET,
EP_N,
Expand All @@ -60,6 +60,9 @@ class EmergencyParser {
EP_M10, EP_M108,
EP_M11, EP_M112,
EP_M4, EP_M41, EP_M410,
#if ENABLED(SDSUPPORT)
EP_M5, EP_M52, EP_M524,
#endif
#if ENABLED(HOST_PROMPT_SUPPORT)
EP_M8, EP_M87, EP_M876, EP_M876S, EP_M876SN,
#endif
Expand All @@ -78,6 +81,10 @@ class EmergencyParser {
static bool killed_by_M112;
static bool quickstop_by_M410;

#if ENABLED(SDSUPPORT)
static bool sd_abort_by_M524;
#endif

#if ENABLED(HOST_PROMPT_SUPPORT)
static uint8_t M876_reason;
#endif
Expand Down Expand Up @@ -147,6 +154,9 @@ class EmergencyParser {
case ' ': break;
case '1': state = EP_M1; break;
case '4': state = EP_M4; break;
#if ENABLED(SDSUPPORT)
case '5': state = EP_M5; break;
#endif
#if ENABLED(HOST_PROMPT_SUPPORT)
case '8': state = EP_M8; break;
#endif
Expand All @@ -167,6 +177,11 @@ class EmergencyParser {
case EP_M4: state = (c == '1') ? EP_M41 : EP_IGNORE; break;
case EP_M41: state = (c == '0') ? EP_M410 : EP_IGNORE; break;

#if ENABLED(SDSUPPORT)
case EP_M5: state = (c == '2') ? EP_M52 : EP_IGNORE; break;
case EP_M52: state = (c == '4') ? EP_M524 : EP_IGNORE; break;
#endif

#if ENABLED(HOST_PROMPT_SUPPORT)

case EP_M8: state = (c == '7') ? EP_M87 : EP_IGNORE; break;
Expand Down Expand Up @@ -202,6 +217,9 @@ class EmergencyParser {
case EP_M108: wait_for_user = wait_for_heatup = false; print_job_timer.heating_stop(); break;
case EP_M112: killed_by_M112 = true; break;
case EP_M410: quickstop_by_M410 = true; break;
#if ENABLED(SDSUPPORT)
case EP_M524: sd_abort_by_M524 = true; break;
#endif
#if ENABLED(HOST_PROMPT_SUPPORT)
case EP_M876SN: hostui.handle_response(M876_reason); break;
#endif
Expand Down
6 changes: 6 additions & 0 deletions Marlin/src/module/temperature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1863,6 +1863,12 @@ void Temperature::task() {
emergency_parser.quickstop_by_M410 = false; // quickstop_stepper may call idle so clear this now!
quickstop_stepper();
}

if (emergency_parser.sd_abort_by_M524) { // abort SD print immediately
emergency_parser.sd_abort_by_M524 = false;
card.flag.abort_sd_printing = true;
gcode.process_subcommands_now(F("M524"));
}
#endif

if (!updateTemperaturesIfReady()) return; // Will also reset the watchdog if temperatures are ready
Expand Down

0 comments on commit b63e3ab

Please sign in to comment.