From 649f3754945390f55e8a14551560271badd26352 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 3 Mar 2018 23:14:01 -0600 Subject: [PATCH] Fix: M112 calling kill from interrupt (#9923) Fix #9906 --- Marlin/src/HAL/HAL_AVR/MarlinSerial.cpp | 4 +++- Marlin/src/HAL/HAL_AVR/MarlinSerial.h | 4 ++++ Marlin/src/HAL/HAL_DUE/MarlinSerial_Due.cpp | 4 +++- Marlin/src/HAL/HAL_DUE/MarlinSerial_Due.h | 4 ++++ Marlin/src/module/temperature.cpp | 4 ++++ 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Marlin/src/HAL/HAL_AVR/MarlinSerial.cpp b/Marlin/src/HAL/HAL_AVR/MarlinSerial.cpp index 38f384671e..c156594381 100644 --- a/Marlin/src/HAL/HAL_AVR/MarlinSerial.cpp +++ b/Marlin/src/HAL/HAL_AVR/MarlinSerial.cpp @@ -81,6 +81,8 @@ #if ENABLED(EMERGENCY_PARSER) + bool killed_by_M112; // = false + #include "../../module/stepper.h" // Currently looking for: M108, M112, M410 @@ -155,7 +157,7 @@ wait_for_user = wait_for_heatup = false; break; case state_M112: - kill(PSTR(MSG_KILLED)); + killed_by_M112 = true; break; case state_M410: quickstop_stepper(); diff --git a/Marlin/src/HAL/HAL_AVR/MarlinSerial.h b/Marlin/src/HAL/HAL_AVR/MarlinSerial.h index 4bddd5f505..5e21535e48 100644 --- a/Marlin/src/HAL/HAL_AVR/MarlinSerial.h +++ b/Marlin/src/HAL/HAL_AVR/MarlinSerial.h @@ -94,6 +94,10 @@ extern ring_buffer_pos_t rx_max_enqueued; #endif + #if ENABLED(EMERGENCY_PARSER) + extern bool killed_by_M112; + #endif + class MarlinSerial { //: public Stream public: diff --git a/Marlin/src/HAL/HAL_DUE/MarlinSerial_Due.cpp b/Marlin/src/HAL/HAL_DUE/MarlinSerial_Due.cpp index ef8745876d..4d7aa945ef 100644 --- a/Marlin/src/HAL/HAL_DUE/MarlinSerial_Due.cpp +++ b/Marlin/src/HAL/HAL_DUE/MarlinSerial_Due.cpp @@ -108,6 +108,8 @@ #if ENABLED(EMERGENCY_PARSER) + bool killed_by_M112; // = false + // Currently looking for: M108, M112, M410 // If you alter the parser please don't forget to update the capabilities in Conditionals_post.h @@ -180,7 +182,7 @@ wait_for_user = wait_for_heatup = false; break; case state_M112: - kill(PSTR(MSG_KILLED)); + killed_by_M112 = true; break; case state_M410: quickstop_stepper(); diff --git a/Marlin/src/HAL/HAL_DUE/MarlinSerial_Due.h b/Marlin/src/HAL/HAL_DUE/MarlinSerial_Due.h index a28beaeb14..01dcd05d52 100644 --- a/Marlin/src/HAL/HAL_DUE/MarlinSerial_Due.h +++ b/Marlin/src/HAL/HAL_DUE/MarlinSerial_Due.h @@ -74,6 +74,10 @@ extern ring_buffer_pos_t rx_max_enqueued; #endif +#if ENABLED(EMERGENCY_PARSER) + extern bool killed_by_M112; +#endif + class MarlinSerial { public: diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index ec3797e6a1..bdee6e6bb0 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -750,6 +750,10 @@ void Temperature::manage_heater() { static bool last_pause_state; #endif + #if ENABLED(EMERGENCY_PARSER) + if (killed_by_M112) kill(PSTR(MSG_KILLED)); + #endif + if (!temp_meas_ready) return; updateTemperaturesFromRawValues(); // also resets the watchdog