Skip to content

Commit

Permalink
Pause SD queue early on M25 (MarlinFirmware#21317)
Browse files Browse the repository at this point in the history
  • Loading branch information
thinkyhead committed Mar 12, 2021
1 parent 8532c2b commit 71f2617
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 1 deletion.
3 changes: 3 additions & 0 deletions Marlin/src/gcode/host/M115.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,9 @@ void GcodeSuite::M115() {
// REPEAT (M808)
cap_line(PSTR("REPEAT"), ENABLED(GCODE_REPEAT_MARKERS));

// SD_WRITE (M928, M28, M29)
cap_line(PSTR("SD_WRITE"), ENABLED(SDSUPPORT) && DISABLED(SDCARD_READONLY));

// AUTOREPORT_SD_STATUS (M27 extension)
cap_line(PSTR("AUTOREPORT_SD_STATUS"), ENABLED(AUTO_REPORT_SD_STATUS));

Expand Down
8 changes: 7 additions & 1 deletion Marlin/src/gcode/queue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -567,14 +567,20 @@ void GCodeQueue::get_serial_commands() {
const bool is_eol = ISEOL(sd_char);
if (is_eol || card_eof) {


// Reset stream state, terminate the buffer, and commit a non-empty command
if (!is_eol && sd_count) ++sd_count; // End of file with no newline
if (!process_line_done(sd_input_state, command.buffer, sd_count)) {

// M808 L saves the sdpos of the next line. M808 loops to a new sdpos.
TERN_(GCODE_REPEAT_MARKERS, repeat.early_parse_M808(command.buffer));

#if DISABLED(PARK_HEAD_ON_PAUSE)
// When M25 is non-blocking it can still suspend SD commands
// Otherwise the M125 handler needs to know SD printing is active
if (command.buffer[0] == 'M' && command.buffer[1] == '2' && command.buffer[2] == '5' && !NUMERIC(command.buffer[3]))
card.pauseSDPrint();
#endif

// Put the new command into the buffer (no "ok" sent)
ring_buffer.commit_command(true);

Expand Down
4 changes: 4 additions & 0 deletions Marlin/src/gcode/sd/M24_M25.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@ void GcodeSuite::M24() {

/**
* M25: Pause SD Print
*
* With PARK_HEAD_ON_PAUSE:
* Invoke M125 to store the current position and move to the park
* position. M24 will move the head back before resuming the print.
*/
void GcodeSuite::M25() {

Expand Down

0 comments on commit 71f2617

Please sign in to comment.