Fix disappearing menu items when Filament Action completes

An example is when Unloading filament with MMU.

After the unload completes successfully, some menu items disappeared.
Because mFilamentBack() was not called

Change in memory:
Flash: -56 bytes
SRAM: 0 bytes
This commit is contained in:
Guðni Már Gilbert 2023-08-04 11:13:02 +00:00 committed by DRracer
parent 1bf33bd1aa
commit 0e469c054f
1 changed files with 24 additions and 21 deletions

View File

@ -1837,10 +1837,15 @@ void mFilamentBack()
eFilamentAction = FilamentAction::None;
}
/// Reset the menu stack and clear the planned filament action flag
static void mFilamentDone()
{
menu_back(bFilamentPreheatState ? 1 : 2);
mFilamentBack();
}
void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
{
uint8_t nLevel;
setTargetHotend((float)nTemp);
if (!shouldPreheatOnlyNozzle()) setTargetBed((float)nTempBed);
@ -1869,6 +1874,7 @@ void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
// then continue with the filament action if any is set
if (bFilamentSkipPreheat || abs((int)current_temperature[0] - nTemp) < TEMP_HYSTERESIS)
{
menu_func_t filamentActionMenu = nullptr;
switch (eFilamentAction)
{
case FilamentAction::Load:
@ -1877,9 +1883,7 @@ void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
if (bFilamentWaitingFlag) menu_submenu(mFilamentPrompt, true);
else
{
nLevel = bFilamentPreheatState ? 1 : 2;
menu_back(nLevel);
mFilamentDone();
if (eFilamentAction == FilamentAction::AutoLoad) {
// loading no longer cancellable
eFilamentAction = FilamentAction::Load;
@ -1892,30 +1896,21 @@ void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
}
break;
case FilamentAction::MmuLoad:
nLevel = bFilamentPreheatState ? 1 : 2;
menu_back(nLevel);
menu_submenu(mmu_load_to_nozzle_menu, true);
filamentActionMenu = mmu_load_to_nozzle_menu;
break;
case FilamentAction::MmuLoadingTest:
nLevel = bFilamentPreheatState ? 1 : 2;
menu_back(nLevel);
menu_submenu(mmu_loading_test_menu, true);
filamentActionMenu = mmu_loading_test_menu;
break;
case FilamentAction::MmuUnLoad:
nLevel = bFilamentPreheatState ? 1 : 2;
menu_back(nLevel);
mFilamentDone();
MMU2::mmu2.unload();
break;
case FilamentAction::MmuEject:
nLevel = bFilamentPreheatState ? 1 : 2;
menu_back(nLevel);
menu_submenu(mmu_fil_eject_menu, true);
filamentActionMenu = mmu_fil_eject_menu;
break;
case FilamentAction::MmuCut:
#ifdef MMU_HAS_CUTTER
nLevel=bFilamentPreheatState?1:2;
menu_back(nLevel);
menu_submenu(mmu_cut_filament_menu, true);
filamentActionMenu = mmu_cut_filament_menu;
#endif //MMU_HAS_CUTTER
break;
case FilamentAction::None:
@ -1924,8 +1919,16 @@ void mFilamentItem(uint16_t nTemp, uint16_t nTempBed)
// handled earlier
break;
}
if (bFilamentWaitingFlag) Sound_MakeSound(e_SOUND_TYPE_StandardPrompt);
bFilamentWaitingFlag = false;
if (bFilamentWaitingFlag) {
Sound_MakeSound(e_SOUND_TYPE_StandardPrompt);
bFilamentWaitingFlag = false;
}
if (filamentActionMenu) {
// Reset the menu stack and filament action before entering action menu
mFilamentDone();
menu_submenu(filamentActionMenu, true);
}
}
else // still preheating, continue updating LCD UI
{