Add mmu_continue_loading blocking variant and use it for usb printing, so that "ok" is not returned to the controller in case MMU load failed.

Known limitation: MMU load failed is not handled properly if it happens again after user clicked printer button to continue print.
This commit is contained in:
Marek Bel 2019-04-04 18:15:37 +02:00
parent a60a1cbef4
commit bf1a55ab02
3 changed files with 32 additions and 9 deletions

View File

@ -7014,7 +7014,7 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE))
if (mmu_enabled)
{
st_synchronize();
mmu_continue_loading();
mmu_continue_loading(is_usb_printing);
mmu_extruder = tmp_extruder; //filament change is finished
mmu_load_to_nozzle();
}
@ -7052,7 +7052,8 @@ if((eSoundMode==e_SOUND_MODE_LOUD)||(eSoundMode==e_SOUND_MODE_ONCE))
mmu_command(MmuCmd::T0 + tmp_extruder);
manage_response(true, true, MMU_TCODE_MOVE);
mmu_continue_loading();
mmu_continue_loading(is_usb_printing);
mmu_extruder = tmp_extruder; //filament change is finished
if (load_to_nozzle)// for single material usage with mmu

View File

@ -878,7 +878,7 @@ void mmu_M600_load_filament(bool automatic, float nozzle_temp)
mmu_command(MmuCmd::T0 + tmp_extruder);
manage_response(false, true, MMU_LOAD_MOVE);
mmu_continue_loading();
mmu_continue_loading(is_usb_printing);
mmu_extruder = tmp_extruder; //filament change is finished
mmu_load_to_nozzle();
@ -1363,7 +1363,7 @@ bFilamentAction=false; // NOT in "mmu_load_to_nozzle_
lcd_print(tmp_extruder + 1);
mmu_command(MmuCmd::T0 + tmp_extruder);
manage_response(true, true, MMU_TCODE_MOVE);
mmu_continue_loading();
mmu_continue_loading(false);
mmu_extruder = tmp_extruder; //filament change is finished
mmu_load_to_nozzle();
load_filament_final_feed();
@ -1464,7 +1464,10 @@ static void load_more()
st_synchronize();
}
void mmu_continue_loading()
//! @par blocking
//! * true blocking
//! * false non-blocking
void mmu_continue_loading(bool blocking)
{
if (ir_sensor_detected)
{
@ -1510,9 +1513,28 @@ void mmu_continue_loading()
setAllTargetHotends(0);
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);
if (blocking)
{
KEEPALIVE_STATE(PAUSED_FOR_USER);
lcd_consume_click();
while(!lcd_clicked()){
manage_heater();
manage_inactivity(true);
lcd_update(0);
}
KEEPALIVE_STATE(IN_HANDLER);
restore_print_from_ram_and_continue(0);
mmu_command(MmuCmd::T0 + tmp_extruder);
manage_response(true, true, MMU_TCODE_MOVE);
load_more();
}
else
{
mmu_fil_loaded = false; //so we can retry same T-code again
isPrintPaused = true;
mmu_command(MmuCmd::W0);
}
}
}
}

View File

@ -134,7 +134,7 @@ extern void mmu_eject_filament(uint8_t filament, bool recover);
#ifdef MMU_HAS_CUTTER
extern void mmu_cut_filament(uint8_t filament_nr);
#endif //MMU_HAS_CUTTER
extern void mmu_continue_loading();
extern void mmu_continue_loading(bool blocking);
extern void mmu_filament_ramming();
extern void mmu_wait_for_heater_blocking();
extern void mmu_load_step(bool synchronize = true);