Merge pull request #4523 from 3d-gussner/MK3_Improve_PP_Crash
Improve Host Power Panic and Crash
This commit is contained in:
commit
aa92375e62
|
|
@ -617,7 +617,7 @@ void crashdet_detected(uint8_t mask)
|
||||||
// ask whether to resume printing
|
// ask whether to resume printing
|
||||||
lcd_puts_at_P(0, 1, _T(MSG_RESUME_PRINT));
|
lcd_puts_at_P(0, 1, _T(MSG_RESUME_PRINT));
|
||||||
lcd_putc('?');
|
lcd_putc('?');
|
||||||
uint8_t yesno = lcd_show_yes_no_and_wait(false);
|
uint8_t yesno = lcd_show_yes_no_and_wait(false, LCD_LEFT_BUTTON_CHOICE);
|
||||||
if (yesno == LCD_LEFT_BUTTON_CHOICE)
|
if (yesno == LCD_LEFT_BUTTON_CHOICE)
|
||||||
{
|
{
|
||||||
enquecommand_P(PSTR("CRASH_RECOVER"));
|
enquecommand_P(PSTR("CRASH_RECOVER"));
|
||||||
|
|
@ -1589,11 +1589,15 @@ void setup()
|
||||||
#ifdef DEBUG_UVLO_AUTOMATIC_RECOVER
|
#ifdef DEBUG_UVLO_AUTOMATIC_RECOVER
|
||||||
puts_P(_N("Normal recovery!"));
|
puts_P(_N("Normal recovery!"));
|
||||||
#endif
|
#endif
|
||||||
const uint8_t btn = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_RECOVER_PRINT), false);
|
if (eeprom_read_byte((uint8_t*)EEPROM_UVLO) == PowerPanic::PRINT_TYPE_USB) {
|
||||||
if ( btn == LCD_LEFT_BUTTON_CHOICE) {
|
recover_print(0);
|
||||||
recover_print(0);
|
} else {
|
||||||
} else { // LCD_MIDDLE_BUTTON_CHOICE
|
const uint8_t btn = lcd_show_fullscreen_message_yes_no_and_wait_P(_T(MSG_RECOVER_PRINT), false);
|
||||||
eeprom_update_byte((uint8_t*)EEPROM_UVLO, PowerPanic::NO_PENDING_RECOVERY);
|
if ( btn == LCD_LEFT_BUTTON_CHOICE) {
|
||||||
|
recover_print(0);
|
||||||
|
} else { // LCD_MIDDLE_BUTTON_CHOICE
|
||||||
|
eeprom_update_byte((uint8_t*)EEPROM_UVLO, PowerPanic::NO_PENDING_RECOVERY);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -4110,6 +4114,9 @@ void process_commands()
|
||||||
{
|
{
|
||||||
// M24 - Start SD print
|
// M24 - Start SD print
|
||||||
enquecommand_P(MSG_M24);
|
enquecommand_P(MSG_M24);
|
||||||
|
|
||||||
|
// Print is recovered, clear the recovery flag
|
||||||
|
eeprom_update_byte((uint8_t*)EEPROM_UVLO, PowerPanic::NO_PENDING_RECOVERY);
|
||||||
}
|
}
|
||||||
else if (eeprom_read_byte((uint8_t*)EEPROM_UVLO_PRINT_TYPE) == PowerPanic::PRINT_TYPE_USB)
|
else if (eeprom_read_byte((uint8_t*)EEPROM_UVLO_PRINT_TYPE) == PowerPanic::PRINT_TYPE_USB)
|
||||||
{
|
{
|
||||||
|
|
@ -4121,13 +4128,7 @@ void process_commands()
|
||||||
// Park the extruder to the side and don't resume the print
|
// Park the extruder to the side and don't resume the print
|
||||||
// we must assume that the host as not fully booted up at this point
|
// we must assume that the host as not fully booted up at this point
|
||||||
lcd_pause_print();
|
lcd_pause_print();
|
||||||
|
|
||||||
// Used by M79 to differentiate from a normal pause
|
|
||||||
SetPrinterState(PrinterState::PowerPanicWaitingForHost);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print is recovered, clear the recovery flag
|
|
||||||
eeprom_update_byte((uint8_t*)EEPROM_UVLO, PowerPanic::NO_PENDING_RECOVERY);
|
|
||||||
}
|
}
|
||||||
else if (code_seen_P(PSTR("MMURES"))) // PRUSA MMURES
|
else if (code_seen_P(PSTR("MMURES"))) // PRUSA MMURES
|
||||||
{
|
{
|
||||||
|
|
@ -5986,15 +5987,12 @@ Sigma_Exit:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GetPrinterState() == PrinterState::PowerPanicWaitingForHost && print_job_timer.isPaused()) {
|
if (eeprom_read_byte((uint8_t*)EEPROM_UVLO_PRINT_TYPE) == PowerPanic::PRINT_TYPE_USB && print_job_timer.isPaused()) {
|
||||||
// The print is in a paused state. The print was recovered following a power panic
|
// The print is in a paused state. The print was recovered following a power panic
|
||||||
// but up to this point the printer has been waiting for the M79 from the host
|
// but up to this point the printer has been waiting for the M79 from the host
|
||||||
// Send action to the host, so the host can resume the print. It is up to the host
|
// Send action to the host, so the host can resume the print. It is up to the host
|
||||||
// to resume the print correctly.
|
// to resume the print correctly.
|
||||||
SERIAL_ECHOLNRPGM(MSG_OCTOPRINT_UVLO_RECOVERY_READY);
|
SERIAL_ECHOLNRPGM(MSG_OCTOPRINT_UVLO_RECOVERY_READY);
|
||||||
|
|
||||||
// Update the state so the action is not repeated again
|
|
||||||
SetPrinterState(PrinterState::IsHostPrinting);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
#include "messages.h"
|
#include "messages.h"
|
||||||
#include "language.h"
|
#include "language.h"
|
||||||
#include "stopwatch.h"
|
#include "stopwatch.h"
|
||||||
|
#include "power_panic.h"
|
||||||
|
|
||||||
// Reserve BUFSIZE lines of length MAX_CMD_SIZE plus CMDBUFFER_RESERVE_FRONT.
|
// Reserve BUFSIZE lines of length MAX_CMD_SIZE plus CMDBUFFER_RESERVE_FRONT.
|
||||||
char cmdbuffer[BUFSIZE * (MAX_CMD_SIZE + 1) + CMDBUFFER_RESERVE_FRONT];
|
char cmdbuffer[BUFSIZE * (MAX_CMD_SIZE + 1) + CMDBUFFER_RESERVE_FRONT];
|
||||||
|
|
@ -483,6 +484,7 @@ void get_command()
|
||||||
if ((*cmd_start == 'G') && (GetPrinterState() != PrinterState::IsSDPrinting)) {
|
if ((*cmd_start == 'G') && (GetPrinterState() != PrinterState::IsSDPrinting)) {
|
||||||
usb_timer.start();
|
usb_timer.start();
|
||||||
SetPrinterState(PrinterState::IsHostPrinting); //set printer state busy printing to hide LCD menu while USB printing
|
SetPrinterState(PrinterState::IsHostPrinting); //set printer state busy printing to hide LCD menu while USB printing
|
||||||
|
eeprom_update_byte((uint8_t*)EEPROM_UVLO, PowerPanic::NO_PENDING_RECOVERY);
|
||||||
}
|
}
|
||||||
if (allow_when_stopped == false && Stopped == true) {
|
if (allow_when_stopped == false && Stopped == true) {
|
||||||
// Stopped can be set either during error states (thermal error: cannot continue), or
|
// Stopped can be set either during error states (thermal error: cannot continue), or
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,6 @@ enum class PrinterState : uint8_t
|
||||||
HostPrintingFinished = 4,
|
HostPrintingFinished = 4,
|
||||||
IsSDPrinting = 5,
|
IsSDPrinting = 5,
|
||||||
IsHostPrinting = 6,
|
IsHostPrinting = 6,
|
||||||
PowerPanicWaitingForHost = 7,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
PrinterState GetPrinterState();
|
PrinterState GetPrinterState();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue