diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 039eebc9..3f59d584 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -43,6 +43,7 @@ namespace Idle, GetFinda, WaitCmd, //!< wait for command response + Pause, GetDrvError, //!< get power failures count }; } @@ -308,6 +309,12 @@ void mmu_loop(void) mmu_puts_P(PSTR("S3\n")); //send power failures request mmu_state = S::GetDrvError; } + else if (mmu_cmd == MmuCmd::W0) + { + DEBUG_PRINTF_P(PSTR("MMU <= 'W0'\n")); + mmu_puts_P(PSTR("W0\n")); + mmu_state = S::Pause; + } mmu_last_cmd = mmu_cmd; mmu_cmd = MmuCmd::None; } @@ -387,6 +394,21 @@ void mmu_loop(void) mmu_state = S::Idle; } return; + case S::Pause: + if (mmu_rx_ok() > 0) + { + DEBUG_PRINTF_P(PSTR("MMU => 'ok', resume print\n")); + mmu_attempt_nr = 0; + mmu_last_cmd = MmuCmd::None; + mmu_ready = true; + mmu_state = S::Idle; + lcd_resume_print(); + } + if (mmu_cmd != MmuCmd::None) + { + mmu_state = S::Idle; + } + return; case S::GetDrvError: if (mmu_rx_ok() > 0) { @@ -1405,6 +1427,7 @@ void mmu_continue_loading() lcd_setstatuspgm(_i("MMU load failed "));////MSG_RECOVERING_PRINT c=20 r=1 mmu_fil_loaded = false; //so we can retry same T-code again isPrintPaused = true; + mmu_command(MmuCmd::W0); } } } diff --git a/Firmware/mmu.h b/Firmware/mmu.h index 80e12cab..71930ae7 100644 --- a/Firmware/mmu.h +++ b/Firmware/mmu.h @@ -54,6 +54,7 @@ enum class MmuCmd : uint_least8_t E4, R0, S3, + W0, }; inline MmuCmd operator+ (MmuCmd cmd, uint8_t filament)