Browse Source

Abort SD printing more safely (#10407)

Allow the current command to complete when aborting an SD print, otherwise some commands (G28, G29, etc.) will cause trouble.
pull/1/head
Scott Lahteine 7 years ago
committed by GitHub
parent
commit
6c7a17dba6
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 20
      Marlin/src/Marlin.cpp
  2. 16
      Marlin/src/lcd/ultralcd.cpp
  3. 6
      Marlin/src/lcd/ultralcd.h

20
Marlin/src/Marlin.cpp

@ -898,6 +898,26 @@ void loop() {
#endif
for (;;) {
#if ENABLED(SDSUPPORT) && ENABLED(ULTIPANEL)
if (abort_sd_printing) {
abort_sd_printing = false;
card.stopSDPrint(
#if SD_RESORT
true
#endif
);
clear_command_queue();
quickstop_stepper();
print_job_timer.stop();
thermalManager.disable_all_heaters();
#if FAN_COUNT > 0
for (uint8_t i = 0; i < FAN_COUNT; i++) fanSpeeds[i] = 0;
#endif
wait_for_heatup = false;
}
#endif // SDSUPPORT && ULTIPANEL
if (commands_in_queue < BUFSIZE) get_available_commands();
advance_command_queue();
endstops.report_state();

16
Marlin/src/lcd/ultralcd.cpp

@ -836,20 +836,10 @@ void kill_screen(const char* lcd_msg) {
lcd_reset_status();
}
bool abort_sd_printing; // =false
void lcd_sdcard_stop() {
card.stopSDPrint(
#if SD_RESORT
true
#endif
);
clear_command_queue();
quickstop_stepper();
print_job_timer.stop();
thermalManager.disable_all_heaters();
#if FAN_COUNT > 0
for (uint8_t i = 0; i < FAN_COUNT; i++) fanSpeeds[i] = 0;
#endif
wait_for_heatup = false;
abort_sd_printing = true;
lcd_setstatusPGM(PSTR(MSG_PRINT_ABORTED), -1);
lcd_return_to_status();
}

6
Marlin/src/lcd/ultralcd.h

@ -261,4 +261,10 @@ void lcd_reset_status();
void lcd_reselect_last_file();
#endif
#if ENABLED(ULTIPANEL) && ENABLED(SDSUPPORT)
extern bool abort_sd_printing;
#else
constexpr bool abort_sd_printing = false;
#endif
#endif // ULTRALCD_H

Loading…
Cancel
Save