Skip to content

Commit 6bc795d

Browse files
InsanityAutomationDarred
authored andcommitted
✨ Improve pause/filament change for ExtUI (MarlinFirmware#22655)
1 parent ca9e0f4 commit 6bc795d

File tree

6 files changed

+24
-14
lines changed

6 files changed

+24
-14
lines changed

Marlin/Configuration_adv.h

+2
Original file line numberDiff line numberDiff line change
@@ -2422,6 +2422,8 @@
24222422
#define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety.
24232423
#define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed.
24242424
#define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change.
2425+
//#define FILAMENT_CHANGE_RESUME_ON_INSERT // Automatically continue / load filament when runout sensor is triggered again.
2426+
//#define PAUSE_REHEAT_FAST_RESUME // Reduce number of waits by not prompting again post-timeout before continuing.
24252427

24262428
//#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
24272429
//#define HOME_BEFORE_FILAMENT_CHANGE // If needed, home before parking for filament change

Marlin/src/feature/pause.cpp

+12-4
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,16 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load
203203

204204
while (wait_for_user) {
205205
impatient_beep(max_beep_count);
206+
#if BOTH(FILAMENT_CHANGE_RESUME_ON_INSERT, FILAMENT_RUNOUT_SENSOR)
207+
#if ENABLED(MULTI_FILAMENT_SENSOR)
208+
#define _CASE_INSERTED(N) case N-1: if (READ(FIL_RUNOUT##N##_PIN) != FIL_RUNOUT##N##_STATE) wait_for_user = false; break;
209+
switch (active_extruder) {
210+
REPEAT_S(1, INCREMENT(NUM_RUNOUT_SENSORS), _CASE_INSERTED)
211+
}
212+
#else
213+
if (READ(FIL_RUNOUT_PIN) != FIL_RUNOUT_STATE) wait_for_user = false;
214+
#endif
215+
#endif
206216
idle_no_sleep();
207217
}
208218
}
@@ -545,14 +555,12 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
545555
HOTEND_LOOP() thermalManager.heater_idle[e].start(nozzle_timeout);
546556

547557
TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT(MSG_REHEATDONE), CONTINUE_STR));
548-
549558
TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_REHEATDONE)));
550-
551559
TERN_(DWIN_CREALITY_LCD_ENHANCED, ui.set_status_P(GET_TEXT(MSG_REHEATDONE)));
552560

553-
wait_for_user = true;
554-
nozzle_timed_out = false;
561+
IF_DISABLED(PAUSE_REHEAT_FAST_RESUME, wait_for_user = true);
555562

563+
nozzle_timed_out = false;
556564
first_impatient_beep(max_beep_count);
557565
}
558566
idle_no_sleep();

Marlin/src/lcd/extui/ui_api.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -1037,6 +1037,8 @@ namespace ExtUI {
10371037

10381038
#if M600_PURGE_MORE_RESUMABLE
10391039
void setPauseMenuResponse(PauseMenuResponse response) { pause_menu_response = response; }
1040+
PauseMessage pauseModeStatus = PAUSE_MESSAGE_STATUS;
1041+
PauseMode getPauseMode() { return pause_mode;}
10401042
#endif
10411043

10421044
void printFile(const char *filename) {

Marlin/src/lcd/extui/ui_api.h

+2
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,8 @@ namespace ExtUI {
234234

235235
#if M600_PURGE_MORE_RESUMABLE
236236
void setPauseMenuResponse(PauseMenuResponse);
237+
extern PauseMessage pauseModeStatus;
238+
PauseMode getPauseMode();
237239
#endif
238240

239241
#if ENABLED(LIN_ADVANCE)

Marlin/src/lcd/marlinui.cpp

+2-7
Original file line numberDiff line numberDiff line change
@@ -1723,9 +1723,8 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
17231723
const PauseMode mode/*=PAUSE_MODE_SAME*/,
17241724
const uint8_t extruder/*=active_extruder*/
17251725
) {
1726-
if (mode == PAUSE_MODE_SAME)
1727-
return;
17281726
pause_mode = mode;
1727+
ExtUI::pauseModeStatus = message;
17291728
switch (message) {
17301729
case PAUSE_MESSAGE_PARKING: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_PAUSE_PRINT_PARKING));
17311730
case PAUSE_MESSAGE_CHANGING: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_INIT));
@@ -1734,11 +1733,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
17341733
case PAUSE_MESSAGE_INSERT: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_INSERT));
17351734
case PAUSE_MESSAGE_LOAD: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_LOAD));
17361735
case PAUSE_MESSAGE_PURGE:
1737-
#if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
1738-
ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_CONT_PURGE));
1739-
#else
1740-
ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_PURGE));
1741-
#endif
1736+
ExtUI::onUserConfirmRequired_P(GET_TEXT(TERN(ADVANCED_PAUSE_CONTINUOUS_PURGE, MSG_FILAMENT_CHANGE_CONT_PURGE, MSG_FILAMENT_CHANGE_PURGE)));
17421737
case PAUSE_MESSAGE_RESUME: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_RESUME));
17431738
case PAUSE_MESSAGE_HEAT: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_HEAT));
17441739
case PAUSE_MESSAGE_HEATING: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_HEATING));

buildroot/tests/BIGTREE_GTR_V1_0

+4-3
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ opt_set MOTHERBOARD BOARD_BTT_GTR_V1_0 SERIAL_PORT -1 \
1212
# Not necessary to enable auto-fan for all extruders to hit problematic code paths
1313
opt_set E0_AUTO_FAN_PIN PC10 E1_AUTO_FAN_PIN PC11 E2_AUTO_FAN_PIN PC12 NEOPIXEL_PIN PF13 \
1414
X_DRIVER_TYPE TMC2208 Y_DRIVER_TYPE TMC2130 \
15-
FIL_RUNOUT_PIN 3 FIL_RUNOUT2_PIN 4 FIL_RUNOUT3_PIN 5 FIL_RUNOUT4_PIN 6 FIL_RUNOUT5_PIN 7 FIL_RUNOUT6_PIN 8 FIL_RUNOUT7_PIN 9 FIL_RUNOUT8_PIN 10 \
16-
FIL_RUNOUT4_STATE HIGH FIL_RUNOUT8_STATE HIGH
15+
NUM_RUNOUT_SENSORS 8 FIL_RUNOUT_PIN 3 FIL_RUNOUT2_PIN 4 FIL_RUNOUT3_PIN 5 FIL_RUNOUT4_PIN 6 FIL_RUNOUT5_PIN 7 \
16+
FIL_RUNOUT6_PIN 8 FIL_RUNOUT7_PIN 9 FIL_RUNOUT8_PIN 10 FIL_RUNOUT4_STATE HIGH FIL_RUNOUT8_STATE HIGH \
17+
FILAMENT_RUNOUT_SCRIPT '"M600 T%c"'
1718
opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER BLTOUCH NEOPIXEL_LED Z_SAFE_HOMING NOZZLE_PARK_FEATURE ADVANCED_PAUSE_FEATURE \
18-
FILAMENT_RUNOUT_SENSOR FIL_RUNOUT4_PULLUP FIL_RUNOUT8_PULLUP
19+
FILAMENT_RUNOUT_SENSOR FIL_RUNOUT4_PULLUP FIL_RUNOUT8_PULLUP FILAMENT_CHANGE_RESUME_ON_INSERT PAUSE_REHEAT_FAST_RESUME
1920
exec_test $1 $2 "BigTreeTech GTR | 8 Extruders | Auto-Fan | Mixed TMC Drivers | Runout Sensors w/ distinct states" "$3"
2021

2122
restore_configs

0 commit comments

Comments
 (0)