|
|
@ -342,6 +342,30 @@ void PrintJobRecovery::resume() { |
|
|
|
gcode.process_subcommands_now_P(PSTR("M420 S0 Z0")); |
|
|
|
#endif |
|
|
|
|
|
|
|
#if HAS_HEATED_BED |
|
|
|
const int16_t bt = info.target_temperature_bed; |
|
|
|
if (bt) { |
|
|
|
// Restore the bed temperature
|
|
|
|
sprintf_P(cmd, PSTR("M190 S%i"), bt); |
|
|
|
gcode.process_subcommands_now(cmd); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// Restore all hotend temperatures
|
|
|
|
#if HAS_HOTEND |
|
|
|
HOTEND_LOOP() { |
|
|
|
const int16_t et = info.target_temperature[e]; |
|
|
|
if (et) { |
|
|
|
#if HAS_MULTI_HOTEND |
|
|
|
sprintf_P(cmd, PSTR("T%i S"), e); |
|
|
|
gcode.process_subcommands_now(cmd); |
|
|
|
#endif |
|
|
|
sprintf_P(cmd, PSTR("M109 S%i"), et); |
|
|
|
gcode.process_subcommands_now(cmd); |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// Reset E, raise Z, home XY...
|
|
|
|
#if Z_HOME_DIR > 0 |
|
|
|
|
|
|
@ -353,20 +377,11 @@ void PrintJobRecovery::resume() { |
|
|
|
|
|
|
|
#else // "G92.9 E0 ..."
|
|
|
|
|
|
|
|
// Set Z to 0, raise Z by info.zraise, and Home (XY only for Cartesian)
|
|
|
|
// with no raise. (Only do simulated homing in Marlin Dev Mode.)
|
|
|
|
|
|
|
|
sprintf_P(cmd, PSTR("G92.9 E0 " |
|
|
|
#if ENABLED(BACKUP_POWER_SUPPLY) |
|
|
|
"Z%s" // Z was already raised at outage
|
|
|
|
#else |
|
|
|
"Z0\nG1Z%s" // Set Z=0 and Raise Z now
|
|
|
|
#endif |
|
|
|
), |
|
|
|
dtostrf(info.zraise, 1, 3, str_1) |
|
|
|
); |
|
|
|
// If a Z raise occurred at outage restore Z, otherwise raise Z now
|
|
|
|
sprintf_P(cmd, PSTR("G92.9 E0 " TERN(BACKUP_POWER_SUPPLY, "Z%s", "Z0\nG1Z%s")), dtostrf(info.zraise, 1, 3, str_1)); |
|
|
|
gcode.process_subcommands_now(cmd); |
|
|
|
|
|
|
|
// Home safely with no Z raise
|
|
|
|
gcode.process_subcommands_now_P(PSTR( |
|
|
|
"G28R0" // No raise during G28
|
|
|
|
#if IS_CARTESIAN && DISABLED(POWER_LOSS_RECOVER_ZHOME) |
|
|
@ -404,30 +419,6 @@ void PrintJobRecovery::resume() { |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
#if HAS_HEATED_BED |
|
|
|
const int16_t bt = info.target_temperature_bed; |
|
|
|
if (bt) { |
|
|
|
// Restore the bed temperature
|
|
|
|
sprintf_P(cmd, PSTR("M190 S%i"), bt); |
|
|
|
gcode.process_subcommands_now(cmd); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// Restore all hotend temperatures
|
|
|
|
#if HAS_HOTEND |
|
|
|
HOTEND_LOOP() { |
|
|
|
const int16_t et = info.target_temperature[e]; |
|
|
|
if (et) { |
|
|
|
#if HAS_MULTI_HOTEND |
|
|
|
sprintf_P(cmd, PSTR("T%i S"), e); |
|
|
|
gcode.process_subcommands_now(cmd); |
|
|
|
#endif |
|
|
|
sprintf_P(cmd, PSTR("M109 S%i"), et); |
|
|
|
gcode.process_subcommands_now(cmd); |
|
|
|
} |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
// Select the previously active tool (with no_move)
|
|
|
|
#if HAS_MULTI_EXTRUDER |
|
|
|
sprintf_P(cmd, PSTR("T%i S"), info.active_extruder); |
|
|
|