diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 10c5437ed..5279776d5 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -5339,11 +5339,18 @@ if(eSoundMode!=e_SOUND_MODE_SILENT) card.pauseSDPrint(); break; - //! ### M26 - Set SD index + //! ### M26 S\ - Set SD index + //! Set position in SD card file to index in bytes. + //! This command is expected to be called after M23 and before M24. + //! Otherwise effect of this command is undefined. // ---------------------------------- case 26: if(card.cardOK && code_seen('S')) { - card.setIndex(code_value_long()); + long index = code_value_long(); + card.setIndex(index); + // We don't disable interrupt during update of sdpos_atomic + // as we expect, that SD card print is not active in this moment + sdpos_atomic = index; } break; @@ -9497,7 +9504,7 @@ void serialecho_temperatures() { SERIAL_PROTOCOL_F(degBed(), 1); SERIAL_PROTOCOLLN(""); } -extern uint32_t sdpos_atomic; + #ifdef UVLO_SUPPORT void uvlo_() diff --git a/Firmware/cmdqueue.h b/Firmware/cmdqueue.h index 6c81db296..13185f179 100644 --- a/Firmware/cmdqueue.h +++ b/Firmware/cmdqueue.h @@ -45,6 +45,8 @@ extern bool cmdbuffer_front_already_processed; // Debugging information will be sent to serial line. //#define CMDBUFFER_DEBUG +extern uint32_t sdpos_atomic; + extern int serial_count; extern boolean comment_mode; extern char *strchr_pointer;