From ab3497161a37ae309e030a23e0f8e3f3eb61daea Mon Sep 17 00:00:00 2001 From: ThomasToka <117008525+ThomasToka@users.noreply.github.com> Date: Fri, 12 Jan 2024 06:56:45 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20PLR=20pos/sdpos=20(#26365)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Scott Lahteine --- Marlin/src/feature/powerloss.cpp | 10 ++++++---- Marlin/src/gcode/feature/powerloss/M1000.cpp | 1 + Marlin/src/gcode/queue.cpp | 4 ++++ Marlin/src/gcode/queue.h | 4 ++-- Marlin/src/lcd/extui/ia_creality/ia_creality_extui.cpp | 8 ++++---- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/Marlin/src/feature/powerloss.cpp b/Marlin/src/feature/powerloss.cpp index ce34b3a95cec..7c90bb684a03 100644 --- a/Marlin/src/feature/powerloss.cpp +++ b/Marlin/src/feature/powerloss.cpp @@ -358,7 +358,9 @@ void PrintJobRecovery::write() { * Resume the saved print job */ void PrintJobRecovery::resume() { - const uint32_t resume_sdpos = info.sdpos; // Get here before the stepper ISR overwrites it + // Get these fields before any moves because stepper.cpp overwrites them + const xyze_pos_t resume_pos = info.current_position; + const uint32_t resume_sdpos = info.sdpos; // Apply the dry-run flag if enabled if (info.flag.dryrun) marlin_debug_flags |= MARLIN_DEBUG_DRYRUN; @@ -400,7 +402,7 @@ void PrintJobRecovery::resume() { #endif // Interpret the saved Z according to flags - const float z_print = info.current_position.z, + const float z_print = resume_pos.z, z_raised = z_print + info.zraise; // @@ -540,7 +542,7 @@ void PrintJobRecovery::resume() { // Move back over to the saved XY PROCESS_SUBCOMMANDS_NOW(TS( - F("G1F3000X"), p_float_t(info.current_position.x, 3), 'Y', p_float_t(info.current_position.y, 3) + F("G1F3000X"), p_float_t(resume_pos.x, 3), 'Y', p_float_t(resume_pos.y, 3) )); // Move back down to the saved Z for printing @@ -550,7 +552,7 @@ void PrintJobRecovery::resume() { PROCESS_SUBCOMMANDS_NOW(TS(F("G1F"), info.feedrate)); // Restore E position with G92.9 - PROCESS_SUBCOMMANDS_NOW(TS(F("G92.9E"), p_float_t(info.current_position.e, 3))); + PROCESS_SUBCOMMANDS_NOW(TS(F("G92.9E"), p_float_t(resume_pos.e, 3))); TERN_(GCODE_REPEAT_MARKERS, repeat = info.stored_repeat); TERN_(HAS_HOME_OFFSET, home_offset = info.home_offset); diff --git a/Marlin/src/gcode/feature/powerloss/M1000.cpp b/Marlin/src/gcode/feature/powerloss/M1000.cpp index 033bcf4ebbdc..c735b72cedbb 100644 --- a/Marlin/src/gcode/feature/powerloss/M1000.cpp +++ b/Marlin/src/gcode/feature/powerloss/M1000.cpp @@ -65,6 +65,7 @@ inline void plr_error(FSTR_P const prefix) { * M1000: Resume from power-loss (undocumented) * - With 'S' go to the Resume/Cancel menu * ...unless the bed temperature is already above a configured minimum temperature. + * - With 'C' execute a cancel selection * - With no parameters, run recovery commands */ void GcodeSuite::M1000() { diff --git a/Marlin/src/gcode/queue.cpp b/Marlin/src/gcode/queue.cpp index db06af82f061..6b34a3b46b04 100644 --- a/Marlin/src/gcode/queue.cpp +++ b/Marlin/src/gcode/queue.cpp @@ -91,6 +91,10 @@ PGM_P GCodeQueue::injected_commands_P; // = nullptr */ char GCodeQueue::injected_commands[64]; // = { 0 } +/** + * Commit the accumulated G-code command to the ring buffer, + * also setting its origin info. + */ void GCodeQueue::RingBuffer::commit_command(const bool skip_ok OPTARG(HAS_MULTI_SERIAL, serial_index_t serial_ind/*=-1*/) ) { diff --git a/Marlin/src/gcode/queue.h b/Marlin/src/gcode/queue.h index 91cad1f08d94..7281a48bb702 100644 --- a/Marlin/src/gcode/queue.h +++ b/Marlin/src/gcode/queue.h @@ -80,11 +80,11 @@ class GCodeQueue { void advance_pos(uint8_t &p, const int inc) { if (++p >= BUFSIZE) p = 0; length += inc; } void commit_command(const bool skip_ok - OPTARG(HAS_MULTI_SERIAL, serial_index_t serial_ind = serial_index_t()) + OPTARG(HAS_MULTI_SERIAL, serial_index_t serial_ind=serial_index_t()) ); bool enqueue(const char *cmd, const bool skip_ok=true - OPTARG(HAS_MULTI_SERIAL, serial_index_t serial_ind = serial_index_t()) + OPTARG(HAS_MULTI_SERIAL, serial_index_t serial_ind=serial_index_t()) ); void ok_to_send(); diff --git a/Marlin/src/lcd/extui/ia_creality/ia_creality_extui.cpp b/Marlin/src/lcd/extui/ia_creality/ia_creality_extui.cpp index 2d6c2aa96e68..490e427b855c 100644 --- a/Marlin/src/lcd/extui/ia_creality/ia_creality_extui.cpp +++ b/Marlin/src/lcd/extui/ia_creality/ia_creality_extui.cpp @@ -342,10 +342,10 @@ void onSettingsLoaded(const bool success) { // Called when power-loss state is detected } void onPowerLossResume() { - startprogress = 254; - show_status = true; - tpShowStatus = false; - no_reentry = false; + startprogress = 254; + show_status = true; + tpShowStatus = false; + no_reentry = false; rts.sendData(ExchangePageBase + 76, ExchangepageAddr); } #endif