Move some MarlinCore and MarlinUI code (#20832)
This commit is contained in:
		| @@ -43,6 +43,7 @@ | ||||
| #include <math.h> | ||||
|  | ||||
| #include "core/utility.h" | ||||
|  | ||||
| #include "module/motion.h" | ||||
| #include "module/planner.h" | ||||
| #include "module/endstops.h" | ||||
| @@ -57,6 +58,7 @@ | ||||
| #include "gcode/parser.h" | ||||
| #include "gcode/queue.h" | ||||
|  | ||||
| #include "feature/pause.h" | ||||
| #include "sd/cardreader.h" | ||||
|  | ||||
| #include "lcd/marlinui.h" | ||||
| @@ -139,7 +141,6 @@ | ||||
|  | ||||
| #if ENABLED(EXPERIMENTAL_I2CBUS) | ||||
|   #include "feature/twibus.h" | ||||
|   TWIBus i2c; | ||||
| #endif | ||||
|  | ||||
| #if ENABLED(I2C_POSITION_ENCODERS) | ||||
| @@ -173,10 +174,6 @@ | ||||
|   #include "feature/bedlevel/bedlevel.h" | ||||
| #endif | ||||
|  | ||||
| #if BOTH(ADVANCED_PAUSE_FEATURE, PAUSE_PARK_NO_STEPPER_TIMEOUT) | ||||
|   #include "feature/pause.h" | ||||
| #endif | ||||
|  | ||||
| #if ENABLED(GCODE_REPEAT_MARKERS) | ||||
|   #include "feature/repeat.h" | ||||
| #endif | ||||
| @@ -267,40 +264,12 @@ bool wait_for_heatup = true; | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if PIN_EXISTS(CHDK) | ||||
|   extern millis_t chdk_timeout; | ||||
| #endif | ||||
|  | ||||
| #if ENABLED(I2C_POSITION_ENCODERS) | ||||
|   I2CPositionEncodersMgr I2CPEM; | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * *************************************************************************** | ||||
|  * ******************************** FUNCTIONS ******************************** | ||||
|  * *************************************************************************** | ||||
|  */ | ||||
|  | ||||
| void setup_killpin() { | ||||
|   #if HAS_KILL | ||||
|     #if KILL_PIN_STATE | ||||
|       SET_INPUT_PULLDOWN(KILL_PIN); | ||||
|     #else | ||||
|       SET_INPUT_PULLUP(KILL_PIN); | ||||
|     #endif | ||||
|   #endif | ||||
| } | ||||
|  | ||||
| void setup_powerhold() { | ||||
|   #if HAS_SUICIDE | ||||
|     OUT_WRITE(SUICIDE_PIN, !SUICIDE_PIN_INVERTING); | ||||
|   #endif | ||||
|   #if ENABLED(PSU_CONTROL) | ||||
|     powersupply_on = ENABLED(PSU_DEFAULT_OFF); | ||||
|     if (ENABLED(PSU_DEFAULT_OFF)) PSU_OFF(); else PSU_ON(); | ||||
|   #endif | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Stepper Reset (RigidBoard, et.al.) | ||||
|  */ | ||||
| @@ -309,18 +278,6 @@ void setup_powerhold() { | ||||
|   void enableStepperDrivers()  { SET_INPUT(STEPPER_RESET_PIN); }      // Set to input, allowing pullups to pull the pin high | ||||
| #endif | ||||
|  | ||||
| #if ENABLED(EXPERIMENTAL_I2CBUS) && I2C_SLAVE_ADDRESS > 0 | ||||
|  | ||||
|   void i2c_on_receive(int bytes) { // just echo all bytes received to serial | ||||
|     i2c.receive(bytes); | ||||
|   } | ||||
|  | ||||
|   void i2c_on_request() {          // just send dummy data for now | ||||
|     i2c.reply("Hello World!\n"); | ||||
|   } | ||||
|  | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * Sensitive pin test for M42, M226 | ||||
|  */ | ||||
| @@ -342,17 +299,6 @@ bool pin_is_protected(const pin_t pin) { | ||||
|  | ||||
| #pragma GCC diagnostic pop | ||||
|  | ||||
| void protected_pin_err() { | ||||
|   SERIAL_ERROR_MSG(STR_ERR_PROTECTED_PIN); | ||||
| } | ||||
|  | ||||
| void quickstop_stepper() { | ||||
|   planner.quick_stop(); | ||||
|   planner.synchronize(); | ||||
|   set_current_from_steppers_for_axis(ALL_AXES); | ||||
|   sync_plan_position(); | ||||
| } | ||||
|  | ||||
| void enable_e_steppers() { | ||||
|   #define _ENA_E(N) ENABLE_AXIS_E##N(); | ||||
|   REPEAT(E_STEPPERS, _ENA_E) | ||||
| @@ -389,41 +335,6 @@ void disable_all_steppers() { | ||||
|   TERN_(EXTENSIBLE_UI, ExtUI::onSteppersDisabled()); | ||||
| } | ||||
|  | ||||
| #if ENABLED(G29_RETRY_AND_RECOVER) | ||||
|  | ||||
|   void event_probe_failure() { | ||||
|     #ifdef ACTION_ON_G29_FAILURE | ||||
|       host_action(PSTR(ACTION_ON_G29_FAILURE)); | ||||
|     #endif | ||||
|     #ifdef G29_FAILURE_COMMANDS | ||||
|       gcode.process_subcommands_now_P(PSTR(G29_FAILURE_COMMANDS)); | ||||
|     #endif | ||||
|     #if ENABLED(G29_HALT_ON_FAILURE) | ||||
|       #ifdef ACTION_ON_CANCEL | ||||
|         host_action_cancel(); | ||||
|       #endif | ||||
|       kill(GET_TEXT(MSG_LCD_PROBING_FAILED)); | ||||
|     #endif | ||||
|   } | ||||
|  | ||||
|   void event_probe_recover() { | ||||
|     TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_INFO, PSTR("G29 Retrying"), DISMISS_STR)); | ||||
|     #ifdef ACTION_ON_G29_RECOVER | ||||
|       host_action(PSTR(ACTION_ON_G29_RECOVER)); | ||||
|     #endif | ||||
|     #ifdef G29_RECOVER_COMMANDS | ||||
|       gcode.process_subcommands_now_P(PSTR(G29_RECOVER_COMMANDS)); | ||||
|     #endif | ||||
|   } | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if ENABLED(ADVANCED_PAUSE_FEATURE) | ||||
|   #include "feature/pause.h" | ||||
| #else | ||||
|   constexpr bool did_pause_print = false; | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * A Print Job exists when the timer is running or SD printing | ||||
|  */ | ||||
| @@ -511,8 +422,8 @@ inline void manage_inactivity(const bool ignore_stepper_queue=false) { | ||||
|  | ||||
|   // Prevent steppers timing-out in the middle of M600 | ||||
|   // unless PAUSE_PARK_NO_STEPPER_TIMEOUT is disabled | ||||
|   const bool parked_or_ignoring = ignore_stepper_queue || | ||||
|      (BOTH(ADVANCED_PAUSE_FEATURE, PAUSE_PARK_NO_STEPPER_TIMEOUT) && did_pause_print); | ||||
|   const bool parked_or_ignoring = ignore_stepper_queue | ||||
|                                || TERN0(PAUSE_PARK_NO_STEPPER_TIMEOUT, did_pause_print); | ||||
|  | ||||
|   // Reset both the M18/M84 activity timeout and the M85 max 'kill' timeout | ||||
|   if (parked_or_ignoring) gcode.reset_stepper_timeout(ms); | ||||
| @@ -550,6 +461,7 @@ inline void manage_inactivity(const bool ignore_stepper_queue=false) { | ||||
|   } | ||||
|  | ||||
|   #if PIN_EXISTS(CHDK) // Check if pin should be set to LOW (after M240 set it HIGH) | ||||
|     extern millis_t chdk_timeout; | ||||
|     if (chdk_timeout && ELAPSED(ms, chdk_timeout)) { | ||||
|       chdk_timeout = 0; | ||||
|       WRITE(CHDK_PIN, LOW); | ||||
| @@ -1038,13 +950,29 @@ void setup() { | ||||
|     SETUP_RUN(recovery.setup()); | ||||
|   #endif | ||||
|  | ||||
|   SETUP_RUN(setup_killpin()); | ||||
|   #if HAS_KILL | ||||
|     SETUP_LOG("KILL_PIN"); | ||||
|     #if KILL_PIN_STATE | ||||
|       SET_INPUT_PULLDOWN(KILL_PIN); | ||||
|     #else | ||||
|       SET_INPUT_PULLUP(KILL_PIN); | ||||
|     #endif | ||||
|   #endif | ||||
|  | ||||
|   #if HAS_TMC220x | ||||
|     SETUP_RUN(tmc_serial_begin()); | ||||
|   #endif | ||||
|  | ||||
|   SETUP_RUN(setup_powerhold()); | ||||
|   #if HAS_SUICIDE | ||||
|     SETUP_LOG("SUICIDE_PIN") | ||||
|     OUT_WRITE(SUICIDE_PIN, !SUICIDE_PIN_INVERTING); | ||||
|   #endif | ||||
|  | ||||
|   #if ENABLED(PSU_CONTROL) | ||||
|     SETUP_LOG("PSU_CONTROL"); | ||||
|     powersupply_on = ENABLED(PSU_DEFAULT_OFF); | ||||
|     if (ENABLED(PSU_DEFAULT_OFF)) PSU_OFF(); else PSU_ON(); | ||||
|   #endif | ||||
|  | ||||
|   #if HAS_STEPPER_RESET | ||||
|     SETUP_RUN(disableStepperDrivers()); | ||||
|   | ||||
| @@ -37,11 +37,6 @@ void stop(); | ||||
| void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep=false)); | ||||
| inline void idle_no_sleep() { idle(TERN_(ADVANCED_PAUSE_FEATURE, true)); } | ||||
|  | ||||
| #if ENABLED(EXPERIMENTAL_I2CBUS) | ||||
|   #include "feature/twibus.h" | ||||
|   extern TWIBus i2c; | ||||
| #endif | ||||
|  | ||||
| #if ENABLED(G38_PROBE_TARGET) | ||||
|   extern uint8_t G38_move;          // Flag to tell the ISR that G38 is in progress, and the type | ||||
|   extern bool G38_did_trigger;      // Flag from the ISR to indicate the endstop changed | ||||
| @@ -59,8 +54,6 @@ void disable_all_steppers(); | ||||
| void kill(PGM_P const lcd_error=nullptr, PGM_P const lcd_component=nullptr, const bool steppers_off=false); | ||||
| void minkill(const bool steppers_off=false); | ||||
|  | ||||
| void quickstop_stepper(); | ||||
|  | ||||
| // Global State of the firmware | ||||
| enum MarlinState : uint8_t { | ||||
|   MF_INITIALIZING =  0, | ||||
| @@ -103,7 +96,6 @@ extern bool wait_for_heatup; | ||||
| #endif | ||||
|  | ||||
| bool pin_is_protected(const pin_t pin); | ||||
| void protected_pin_err(); | ||||
|  | ||||
| #if HAS_SUICIDE | ||||
|   inline void suicide() { OUT_WRITE(SUICIDE_PIN, SUICIDE_PIN_INVERTING); } | ||||
| @@ -116,11 +108,6 @@ void protected_pin_err(); | ||||
|   inline bool kill_state() { return READ(KILL_PIN) == KILL_PIN_STATE; } | ||||
| #endif | ||||
|  | ||||
| #if ENABLED(G29_RETRY_AND_RECOVER) | ||||
|   void event_probe_recover(); | ||||
|   void event_probe_failure(); | ||||
| #endif | ||||
|  | ||||
| extern const char NUL_STR[], M112_KILL_STR[], G28_STR[], M21_STR[], M23_STR[], M24_STR[], | ||||
|                   SP_A_STR[], SP_B_STR[], SP_C_STR[], | ||||
|                   SP_P_STR[], SP_T_STR[], SP_X_STR[], SP_Y_STR[], SP_Z_STR[], SP_E_STR[], | ||||
|   | ||||
| @@ -33,7 +33,6 @@ | ||||
|  | ||||
| // External references | ||||
| extern bool wait_for_user, wait_for_heatup; | ||||
| void quickstop_stepper(); | ||||
|  | ||||
| class EmergencyParser { | ||||
|  | ||||
|   | ||||
| @@ -41,6 +41,8 @@ | ||||
|  | ||||
| #include <Wire.h> | ||||
|  | ||||
| I2CPositionEncodersMgr I2CPEM; | ||||
|  | ||||
| void I2CPositionEncoder::init(const uint8_t address, const AxisEnum axis) { | ||||
|   encoderAxis = axis; | ||||
|   i2cAddress = address; | ||||
|   | ||||
| @@ -137,10 +137,7 @@ static bool ensure_safe_temperature(const bool wait=true, const PauseMode mode=P | ||||
|       thermalManager.setTargetHotend(thermalManager.extrude_min_temp, active_extruder); | ||||
|   #endif | ||||
|  | ||||
|   #if HAS_LCD_MENU | ||||
|     lcd_pause_show_message(PAUSE_MESSAGE_HEATING, mode); | ||||
|   #endif | ||||
|   UNUSED(mode); | ||||
|   ui.pause_show_message(PAUSE_MESSAGE_HEATING, mode); UNUSED(mode); | ||||
|  | ||||
|   if (wait) return thermalManager.wait_for_hotend(active_extruder); | ||||
|  | ||||
| @@ -181,19 +178,13 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l | ||||
|   DEBUG_SECTION(lf, "load_filament", true); | ||||
|   DEBUG_ECHOLNPAIR("... slowlen:", slow_load_length, " fastlen:", fast_load_length, " purgelen:", purge_length, " maxbeep:", int(max_beep_count), " showlcd:", int(show_lcd), " pauseforuser:", int(pause_for_user), " pausemode:", int(mode) DXC_SAY); | ||||
|  | ||||
|   UNUSED(show_lcd); | ||||
|  | ||||
|   if (!ensure_safe_temperature(false, mode)) { | ||||
|     #if HAS_LCD_MENU | ||||
|       if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_STATUS, mode); | ||||
|     #endif | ||||
|     if (show_lcd) ui.pause_show_message(PAUSE_MESSAGE_STATUS, mode); | ||||
|     return false; | ||||
|   } | ||||
|  | ||||
|   if (pause_for_user) { | ||||
|     #if HAS_LCD_MENU | ||||
|       if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_INSERT, mode); | ||||
|     #endif | ||||
|     if (show_lcd) ui.pause_show_message(PAUSE_MESSAGE_INSERT, mode); | ||||
|     SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_INSERT)); | ||||
|  | ||||
|     first_impatient_beep(max_beep_count); | ||||
| @@ -217,9 +208,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   #if HAS_LCD_MENU | ||||
|     if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_LOAD, mode); | ||||
|   #endif | ||||
|   if (show_lcd) ui.pause_show_message(PAUSE_MESSAGE_LOAD, mode); | ||||
|  | ||||
|   #if ENABLED(DUAL_X_CARRIAGE) | ||||
|     const int8_t saved_ext        = active_extruder; | ||||
| @@ -250,9 +239,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l | ||||
|  | ||||
|   #if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE) | ||||
|  | ||||
|     #if HAS_LCD_MENU | ||||
|       if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_PURGE); | ||||
|     #endif | ||||
|     if (show_lcd) ui.pause_show_message(PAUSE_MESSAGE_PURGE); | ||||
|  | ||||
|     TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Filament Purging..."), CONTINUE_STR)); | ||||
|     TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired_P(PSTR("Filament Purging..."))); | ||||
| @@ -266,9 +253,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l | ||||
|     do { | ||||
|       if (purge_length > 0) { | ||||
|         // "Wait for filament purge" | ||||
|         #if HAS_LCD_MENU | ||||
|           if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_PURGE); | ||||
|         #endif | ||||
|         if (show_lcd) ui.pause_show_message(PAUSE_MESSAGE_PURGE); | ||||
|  | ||||
|         // Extrude filament to get into hotend | ||||
|         unscaled_e_move(purge_length, ADVANCED_PAUSE_PURGE_FEEDRATE); | ||||
| @@ -281,7 +266,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l | ||||
|           // Show "Purge More" / "Resume" menu and wait for reply | ||||
|           KEEPALIVE_STATE(PAUSED_FOR_USER); | ||||
|           wait_for_user = false; | ||||
|           lcd_pause_show_message(PAUSE_MESSAGE_OPTION); | ||||
|           ui.pause_show_message(PAUSE_MESSAGE_OPTION); | ||||
|           while (pause_menu_response == PAUSE_RESPONSE_WAIT_FOR) idle_no_sleep(); | ||||
|         } | ||||
|       #endif | ||||
| @@ -330,22 +315,16 @@ bool unload_filament(const float &unload_length, const bool show_lcd/*=false*/, | ||||
|     #endif | ||||
|   ); | ||||
|  | ||||
|   UNUSED(show_lcd); | ||||
|  | ||||
|   #if !BOTH(FILAMENT_UNLOAD_ALL_EXTRUDERS, MIXING_EXTRUDER) | ||||
|     constexpr float mix_multiplier = 1.0; | ||||
|   #endif | ||||
|  | ||||
|   if (!ensure_safe_temperature(false, mode)) { | ||||
|     #if HAS_LCD_MENU | ||||
|       if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_STATUS); | ||||
|     #endif | ||||
|     if (show_lcd) ui.pause_show_message(PAUSE_MESSAGE_STATUS); | ||||
|     return false; | ||||
|   } | ||||
|  | ||||
|   #if HAS_LCD_MENU | ||||
|     if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_UNLOAD, mode); | ||||
|   #endif | ||||
|   if (show_lcd) ui.pause_show_message(PAUSE_MESSAGE_UNLOAD, mode); | ||||
|  | ||||
|   // Retract filament | ||||
|   unscaled_e_move(-(FILAMENT_UNLOAD_PURGE_RETRACT) * mix_multiplier, (PAUSE_PARK_RETRACT_FEEDRATE) * mix_multiplier); | ||||
| @@ -479,7 +458,7 @@ void show_continue_prompt(const bool is_reload) { | ||||
|   DEBUG_SECTION(scp, "pause_print", true); | ||||
|   DEBUG_ECHOLNPAIR("... is_reload:", int(is_reload)); | ||||
|  | ||||
|   TERN_(HAS_LCD_MENU, lcd_pause_show_message(is_reload ? PAUSE_MESSAGE_INSERT : PAUSE_MESSAGE_WAITING)); | ||||
|   ui.pause_show_message(is_reload ? PAUSE_MESSAGE_INSERT : PAUSE_MESSAGE_WAITING); | ||||
|   SERIAL_ECHO_START(); | ||||
|   serialprintPGM(is_reload ? PSTR(_PMSG(STR_FILAMENT_CHANGE_INSERT) "\n") : PSTR(_PMSG(STR_FILAMENT_CHANGE_WAIT) "\n")); | ||||
| } | ||||
| @@ -520,7 +499,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep | ||||
|     // Wait for the user to press the button to re-heat the nozzle, then | ||||
|     // re-heat the nozzle, re-show the continue prompt, restart idle timers, start over | ||||
|     if (nozzle_timed_out) { | ||||
|       TERN_(HAS_LCD_MENU, lcd_pause_show_message(PAUSE_MESSAGE_HEAT)); | ||||
|       ui.pause_show_message(PAUSE_MESSAGE_HEAT); | ||||
|       SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_HEAT)); | ||||
|  | ||||
|       TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT(MSG_HEATER_TIMEOUT), GET_TEXT(MSG_REHEAT))); | ||||
| @@ -614,7 +593,7 @@ void resume_print(const float &slow_load_length/*=0*/, const float &fast_load_le | ||||
|     thermalManager.wait_for_hotend(active_extruder, false); | ||||
|   } | ||||
|  | ||||
|   TERN_(HAS_LCD_MENU, lcd_pause_show_message(PAUSE_MESSAGE_RESUME)); | ||||
|   ui.pause_show_message(PAUSE_MESSAGE_RESUME); | ||||
|  | ||||
|   // Check Temperature before moving hotend | ||||
|   ensure_safe_temperature(); | ||||
| @@ -653,7 +632,7 @@ void resume_print(const float &slow_load_length/*=0*/, const float &fast_load_le | ||||
|   // Write PLR now to update the z axis value | ||||
|   TERN_(POWER_LOSS_RECOVERY, if (recovery.enabled) recovery.save(true)); | ||||
|  | ||||
|   TERN_(HAS_LCD_MENU, lcd_pause_show_message(PAUSE_MESSAGE_STATUS)); | ||||
|   ui.pause_show_message(PAUSE_MESSAGE_STATUS); | ||||
|  | ||||
|   #ifdef ACTION_ON_RESUMED | ||||
|     host_action_resumed(); | ||||
|   | ||||
| @@ -101,4 +101,8 @@ bool unload_filament(const float &unload_length, const bool show_lcd=false, cons | ||||
|   #endif | ||||
| ); | ||||
|  | ||||
| #endif // ADVANCED_PAUSE_FEATURE | ||||
| #else // !ADVANCED_PAUSE_FEATURE | ||||
|  | ||||
|   constexpr uint8_t did_pause_print = 0; | ||||
|  | ||||
| #endif // !ADVANCED_PAUSE_FEATURE | ||||
|   | ||||
| @@ -59,6 +59,7 @@ bool FilamentMonitorBase::enabled = true, | ||||
| // Filament Runout event handler | ||||
| // | ||||
| #include "../MarlinCore.h" | ||||
| #include "../feature/pause.h" | ||||
| #include "../gcode/queue.h" | ||||
|  | ||||
| #if ENABLED(HOST_ACTION_COMMANDS) | ||||
| @@ -71,7 +72,7 @@ bool FilamentMonitorBase::enabled = true, | ||||
|  | ||||
| void event_filament_runout() { | ||||
|  | ||||
|   if (TERN0(ADVANCED_PAUSE_FEATURE, did_pause_print)) return;  // Action already in progress. Purge triggered repeated runout. | ||||
|   if (did_pause_print) return;  // Action already in progress. Purge triggered repeated runout. | ||||
|  | ||||
|   #if ENABLED(TOOLCHANGE_MIGRATION_FEATURE) | ||||
|     if (migration.in_progress) { | ||||
|   | ||||
| @@ -118,9 +118,7 @@ class TFilamentMonitor : public FilamentMonitorBase { | ||||
|  | ||||
|     // Give the response a chance to update its counter. | ||||
|     static inline void run() { | ||||
|       if ( enabled && !filament_ran_out | ||||
|         && (printingIsActive() || TERN0(ADVANCED_PAUSE_FEATURE, did_pause_print)) | ||||
|       ) { | ||||
|       if (enabled && !filament_ran_out && (printingIsActive() || did_pause_print)) { | ||||
|         TERN_(HAS_FILAMENT_RUNOUT_DISTANCE, cli()); // Prevent RunoutResponseDelayed::block_completed from accumulating here | ||||
|         response.run(); | ||||
|         sensor.run(); | ||||
| @@ -343,9 +341,7 @@ class FilamentSensorBase { | ||||
|       } | ||||
|  | ||||
|       static inline void block_completed(const block_t* const b) { | ||||
|         if (b->steps.x || b->steps.y || b->steps.z | ||||
|           || TERN0(ADVANCED_PAUSE_FEATURE, did_pause_print) // Allow pause purge move to re-trigger runout state | ||||
|         ) { | ||||
|         if (b->steps.x || b->steps.y || b->steps.z || did_pause_print) { // Allow pause purge move to re-trigger runout state | ||||
|           // Only trigger on extrusion with XYZ movement to allow filament change and retract/recover. | ||||
|           const uint8_t e = b->extruder; | ||||
|           const int32_t steps = b->steps.e; | ||||
|   | ||||
| @@ -28,6 +28,8 @@ | ||||
|  | ||||
| #include <Wire.h> | ||||
|  | ||||
| TWIBus i2c; | ||||
|  | ||||
| TWIBus::TWIBus() { | ||||
|   #if I2C_SLAVE_ADDRESS == 0 | ||||
|     Wire.begin();                  // No address joins the BUS as the master | ||||
| @@ -155,6 +157,14 @@ void TWIBus::flush() { | ||||
|     reset(); | ||||
|   } | ||||
|  | ||||
|   void i2c_on_receive(int bytes) { // just echo all bytes received to serial | ||||
|     i2c.receive(bytes); | ||||
|   } | ||||
|  | ||||
|   void i2c_on_request() {          // just send dummy data for now | ||||
|     i2c.reply("Hello World!\n"); | ||||
|   } | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if ENABLED(DEBUG_TWIBUS) | ||||
|   | ||||
| @@ -31,6 +31,17 @@ | ||||
| typedef void (*twiReceiveFunc_t)(int bytes); | ||||
| typedef void (*twiRequestFunc_t)(); | ||||
|  | ||||
| /** | ||||
|  * For a light i2c protocol that runs on two boards running Marlin see: | ||||
|  * See https://github.com/MarlinFirmware/Marlin/issues/4776#issuecomment-246262879 | ||||
|  */ | ||||
| #if I2C_SLAVE_ADDRESS > 0 | ||||
|  | ||||
|   void i2c_on_receive(int bytes); // Demo i2c onReceive handler | ||||
|   void i2c_on_request();          // Demo i2c onRequest handler | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #define TWIBUS_BUFFER_SIZE 32 | ||||
|  | ||||
| /** | ||||
| @@ -238,3 +249,5 @@ class TWIBus { | ||||
|       static inline void debug(const char[], uint8_t) {} | ||||
|     #endif | ||||
| }; | ||||
|  | ||||
| extern TWIBus i2c; | ||||
|   | ||||
| @@ -25,7 +25,8 @@ | ||||
| #if DISABLED(EMERGENCY_PARSER) | ||||
|  | ||||
| #include "../gcode.h" | ||||
| #include "../../MarlinCore.h" // for wait_for_heatup, kill, quickstop_stepper | ||||
| #include "../../MarlinCore.h" // for wait_for_heatup, kill | ||||
| #include "../../module/motion.h" // for quickstop_stepper | ||||
|  | ||||
| /** | ||||
|  * M108: Stop the waiting for heaters in M109, M190, M303. Does not affect the target temperature. | ||||
|   | ||||
| @@ -28,6 +28,8 @@ | ||||
| #include "../../MarlinCore.h" // for pin_is_protected and idle() | ||||
| #include "../../module/stepper.h" | ||||
|  | ||||
| void protected_pin_err(); | ||||
|  | ||||
| /** | ||||
|  * M226: Wait until the specified pin reaches the state required (M226 P<pin> S<state>) | ||||
|  */ | ||||
|   | ||||
| @@ -31,6 +31,10 @@ | ||||
|   #include "../../module/temperature.h" | ||||
| #endif | ||||
|  | ||||
| void protected_pin_err() { | ||||
|   SERIAL_ERROR_MSG(STR_ERR_PROTECTED_PIN); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * M42: Change pin status via GCode | ||||
|  * | ||||
|   | ||||
| @@ -26,7 +26,7 @@ | ||||
|  | ||||
| #include "../../gcode.h" | ||||
|  | ||||
| #include "../../../MarlinCore.h" // for i2c | ||||
| #include "../../../feature/twibus.h" | ||||
|  | ||||
| /** | ||||
|  * M260: Send data to a I2C slave device | ||||
|   | ||||
| @@ -27,13 +27,10 @@ | ||||
| #include "../../gcode.h" | ||||
| #include "../../parser.h" | ||||
| #include "../../../feature/pause.h" | ||||
| #include "../../../lcd/marlinui.h" | ||||
| #include "../../../module/motion.h" | ||||
| #include "../../../sd/cardreader.h" | ||||
| #include "../../../module/printcounter.h" | ||||
|  | ||||
| #if HAS_LCD_MENU | ||||
|   #include "../../../lcd/marlinui.h" | ||||
| #endif | ||||
| #include "../../../sd/cardreader.h" | ||||
|  | ||||
| #if ENABLED(POWER_LOSS_RECOVERY) | ||||
|   #include "../../../feature/powerloss.h" | ||||
| @@ -76,7 +73,7 @@ void GcodeSuite::M125() { | ||||
|  | ||||
|   const bool sd_printing = TERN0(SDSUPPORT, IS_SD_PRINTING()); | ||||
|  | ||||
|   TERN_(HAS_LCD_MENU, lcd_pause_show_message(PAUSE_MESSAGE_PARKING, PAUSE_MODE_PAUSE_PRINT)); | ||||
|   ui.pause_show_message(PAUSE_MESSAGE_PARKING, PAUSE_MODE_PAUSE_PRINT); | ||||
|  | ||||
|   // If possible, show an LCD prompt with the 'P' flag | ||||
|   const bool show_lcd = TERN0(HAS_LCD_MENU, parser.boolval('P')); | ||||
|   | ||||
| @@ -28,15 +28,12 @@ | ||||
| #include "../../../feature/pause.h" | ||||
| #include "../../../module/motion.h" | ||||
| #include "../../../module/printcounter.h" | ||||
| #include "../../../lcd/marlinui.h" | ||||
|  | ||||
| #if HAS_MULTI_EXTRUDER | ||||
|   #include "../../../module/tool_change.h" | ||||
| #endif | ||||
|  | ||||
| #if HAS_LCD_MENU | ||||
|   #include "../../../lcd/marlinui.h" | ||||
| #endif | ||||
|  | ||||
| #if ENABLED(MMU2_MENUS) | ||||
|   #include "../../../lcd/menu/menu_mmu2.h" | ||||
| #endif | ||||
| @@ -96,8 +93,8 @@ void GcodeSuite::M600() { | ||||
|   #endif | ||||
|  | ||||
|   // Show initial "wait for start" message | ||||
|   #if HAS_LCD_MENU && DISABLED(MMU2_MENUS) | ||||
|     lcd_pause_show_message(PAUSE_MESSAGE_CHANGING, PAUSE_MODE_PAUSE_PRINT, target_extruder); | ||||
|   #if DISABLED(MMU2_MENUS) | ||||
|     ui.pause_show_message(PAUSE_MESSAGE_CHANGING, PAUSE_MODE_PAUSE_PRINT, target_extruder); | ||||
|   #endif | ||||
|  | ||||
|   #if ENABLED(HOME_BEFORE_FILAMENT_CHANGE) | ||||
|   | ||||
| @@ -29,15 +29,12 @@ | ||||
| #include "../../../module/motion.h" | ||||
| #include "../../../module/temperature.h" | ||||
| #include "../../../feature/pause.h" | ||||
| #include "../../../lcd/marlinui.h" | ||||
|  | ||||
| #if HAS_MULTI_EXTRUDER | ||||
|   #include "../../../module/tool_change.h" | ||||
| #endif | ||||
|  | ||||
| #if HAS_LCD_MENU | ||||
|   #include "../../../lcd/marlinui.h" | ||||
| #endif | ||||
|  | ||||
| #if HAS_PRUSA_MMU2 | ||||
|   #include "../../../feature/mmu/mmu2.h" | ||||
| #endif | ||||
| @@ -82,7 +79,7 @@ void GcodeSuite::M701() { | ||||
|   if (parser.seenval('Z')) park_point.z = parser.linearval('Z'); | ||||
|  | ||||
|   // Show initial "wait for load" message | ||||
|   TERN_(HAS_LCD_MENU, lcd_pause_show_message(PAUSE_MESSAGE_LOAD, PAUSE_MODE_LOAD_FILAMENT, target_extruder)); | ||||
|   ui.pause_show_message(PAUSE_MESSAGE_LOAD, PAUSE_MODE_LOAD_FILAMENT, target_extruder); | ||||
|  | ||||
|   #if HAS_MULTI_EXTRUDER && (HAS_PRUSA_MMU1 || !HAS_MMU) | ||||
|     // Change toolhead if specified | ||||
| @@ -128,7 +125,7 @@ void GcodeSuite::M701() { | ||||
|   TERN_(MIXING_EXTRUDER, mixer.T(old_mixing_tool)); // Restore original mixing tool | ||||
|  | ||||
|   // Show status screen | ||||
|   TERN_(HAS_LCD_MENU, lcd_pause_show_message(PAUSE_MESSAGE_STATUS)); | ||||
|   ui.pause_show_message(PAUSE_MESSAGE_STATUS); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -180,7 +177,7 @@ void GcodeSuite::M702() { | ||||
|   if (parser.seenval('Z')) park_point.z = parser.linearval('Z'); | ||||
|  | ||||
|   // Show initial "wait for unload" message | ||||
|   TERN_(HAS_LCD_MENU, lcd_pause_show_message(PAUSE_MESSAGE_UNLOAD, PAUSE_MODE_UNLOAD_FILAMENT, target_extruder)); | ||||
|   ui.pause_show_message(PAUSE_MESSAGE_UNLOAD, PAUSE_MODE_UNLOAD_FILAMENT, target_extruder); | ||||
|  | ||||
|   #if HAS_MULTI_EXTRUDER && (HAS_PRUSA_MMU1 || !HAS_MMU) | ||||
|     // Change toolhead if specified | ||||
| @@ -232,7 +229,7 @@ void GcodeSuite::M702() { | ||||
|   TERN_(MIXING_EXTRUDER, mixer.T(old_mixing_tool)); // Restore original mixing tool | ||||
|  | ||||
|   // Show status screen | ||||
|   TERN_(HAS_LCD_MENU, lcd_pause_show_message(PAUSE_MESSAGE_STATUS)); | ||||
|   ui.pause_show_message(PAUSE_MESSAGE_STATUS); | ||||
| } | ||||
|  | ||||
| #endif // ADVANCED_PAUSE_FEATURE | ||||
|   | ||||
| @@ -61,7 +61,7 @@ GcodeSuite gcode; | ||||
|   #include "../feature/password/password.h" | ||||
| #endif | ||||
|  | ||||
| #include "../MarlinCore.h" // for idle() | ||||
| #include "../MarlinCore.h" // for idle, kill | ||||
|  | ||||
| // Inactivity shutdown | ||||
| millis_t GcodeSuite::previous_move_ms = 0, | ||||
| @@ -209,6 +209,31 @@ void GcodeSuite::dwell(millis_t time) { | ||||
|  */ | ||||
| #if BOTH(HAS_LEVELING, G29_RETRY_AND_RECOVER) | ||||
|  | ||||
|   void GcodeSuite::event_probe_recover() { | ||||
|     TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_INFO, PSTR("G29 Retrying"), DISMISS_STR)); | ||||
|     #ifdef ACTION_ON_G29_RECOVER | ||||
|       host_action(PSTR(ACTION_ON_G29_RECOVER)); | ||||
|     #endif | ||||
|     #ifdef G29_RECOVER_COMMANDS | ||||
|       process_subcommands_now_P(PSTR(G29_RECOVER_COMMANDS)); | ||||
|     #endif | ||||
|   } | ||||
|  | ||||
|   void GcodeSuite::event_probe_failure() { | ||||
|     #ifdef ACTION_ON_G29_FAILURE | ||||
|       host_action(PSTR(ACTION_ON_G29_FAILURE)); | ||||
|     #endif | ||||
|     #ifdef G29_FAILURE_COMMANDS | ||||
|       process_subcommands_now_P(PSTR(G29_FAILURE_COMMANDS)); | ||||
|     #endif | ||||
|     #if ENABLED(G29_HALT_ON_FAILURE) | ||||
|       #ifdef ACTION_ON_CANCEL | ||||
|         host_action_cancel(); | ||||
|       #endif | ||||
|       kill(GET_TEXT(MSG_LCD_PROBING_FAILED)); | ||||
|     #endif | ||||
|   } | ||||
|  | ||||
|   #ifndef G29_MAX_RETRIES | ||||
|     #define G29_MAX_RETRIES 0 | ||||
|   #endif | ||||
| @@ -216,7 +241,10 @@ void GcodeSuite::dwell(millis_t time) { | ||||
|   void GcodeSuite::G29_with_retry() { | ||||
|     uint8_t retries = G29_MAX_RETRIES; | ||||
|     while (G29()) { // G29 should return true for failed probes ONLY | ||||
|       if (retries--) event_probe_recover(); | ||||
|       if (retries) { | ||||
|         event_probe_recover(); | ||||
|         --retries; | ||||
|       } | ||||
|       else { | ||||
|         event_probe_failure(); | ||||
|         return; | ||||
|   | ||||
| @@ -452,6 +452,8 @@ private: | ||||
|  | ||||
|   #if HAS_LEVELING | ||||
|     #if ENABLED(G29_RETRY_AND_RECOVER) | ||||
|       static void event_probe_failure(); | ||||
|       static void event_probe_recover(); | ||||
|       static void G29_with_retry(); | ||||
|       #define G29_TYPE bool | ||||
|     #else | ||||
|   | ||||
| @@ -31,6 +31,7 @@ GCodeQueue queue; | ||||
|  | ||||
| #include "../lcd/marlinui.h" | ||||
| #include "../sd/cardreader.h" | ||||
| #include "../module/motion.h" | ||||
| #include "../module/planner.h" | ||||
| #include "../module/temperature.h" | ||||
| #include "../MarlinCore.h" | ||||
|   | ||||
| @@ -44,7 +44,7 @@ | ||||
| #endif | ||||
|  | ||||
| #if HAS_LEDS_OFF_FLAG | ||||
|   #include "../../MarlinCore.h" // for wait_for_user_response | ||||
|   #include "../../MarlinCore.h" // for wait_for_user_response() | ||||
|   #include "../../feature/leds/printer_event_leds.h" | ||||
| #endif | ||||
|  | ||||
|   | ||||
| @@ -544,6 +544,8 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop | ||||
|  | ||||
|       // Put Relevant Text on Display | ||||
|  | ||||
|       extern const char X_LBL[], Y_LBL[], Z_LBL[]; | ||||
|  | ||||
|       // Show X and Y positions at top of screen | ||||
|       u8g.setColorIndex(1); | ||||
|       if (PAGE_UNDER(7)) { | ||||
|   | ||||
| @@ -30,7 +30,6 @@ | ||||
|   ****************************************************************************/ | ||||
|  | ||||
| #include "../../../inc/MarlinConfig.h" | ||||
| #include "../../../MarlinCore.h" | ||||
|  | ||||
| /*********************** Encoder Set ***********************/ | ||||
|  | ||||
|   | ||||
| @@ -27,8 +27,8 @@ | ||||
| #include "../../ui_api.h" | ||||
|  | ||||
| #include "../../../../libs/numtostr.h" | ||||
| #include "../../../../module/motion.h"  // for A20 read printing speed feedrate_percentage | ||||
| #include "../../../../MarlinCore.h"     // for quickstop_stepper, disable_steppers, G28_STR | ||||
| #include "../../../../module/motion.h"  // for quickstop_stepper, A20 read printing speed, feedrate_percentage | ||||
| #include "../../../../MarlinCore.h"     // for disable_steppers, G28_STR | ||||
| #include "../../../../inc/MarlinConfig.h" | ||||
|  | ||||
| // command sending macro's with debugging capability | ||||
|   | ||||
| @@ -25,7 +25,8 @@ | ||||
|  | ||||
| #include "../../../../inc/MarlinConfigPre.h" | ||||
|  | ||||
| #include "../../../../MarlinCore.h" | ||||
| #include <stdlib.h>    // size_t | ||||
|  | ||||
| #if HAS_BED_PROBE | ||||
|   #include "../../../../module/probe.h" | ||||
| #endif | ||||
| @@ -96,7 +97,7 @@ private: | ||||
|   static void WritePGM(const char str[], uint8_t len); | ||||
|   static void ProcessRx(); | ||||
|  | ||||
|   static inline uint16_t swap16(const uint16_t value) { return (value & 0xffU) << 8U | (value >> 8U); } | ||||
|   static inline uint16_t swap16(const uint16_t value) { return (value & 0xFFU) << 8U | (value >> 8U); } | ||||
|   static rx_datagram_state_t rx_datagram_state; | ||||
|   static uint8_t rx_datagram_len; | ||||
|   static bool Initialized, no_reentrance; | ||||
|   | ||||
| @@ -23,8 +23,6 @@ | ||||
|  | ||||
| #if HAS_TFT_LVGL_UI | ||||
|  | ||||
| #include "../../../../MarlinCore.h" | ||||
|  | ||||
| #include "draw_ui.h" | ||||
| #include "tft_multi_language.h" | ||||
|  | ||||
|   | ||||
| @@ -39,6 +39,10 @@ | ||||
| #include "../../../../module/planner.h" | ||||
| #include "../../../../module/servo.h" | ||||
| #include "../../../../module/probe.h" | ||||
|  | ||||
| #if DISABLED(EMERGENCY_PARSER) | ||||
|   #include "../../../../module/motion.h" | ||||
| #endif | ||||
| #if ENABLED(POWER_LOSS_RECOVERY) | ||||
|   #include "../../../../feature/powerloss.h" | ||||
| #endif | ||||
|   | ||||
| @@ -1516,7 +1516,7 @@ void MarlinUI::update() { | ||||
|     LCD_MESSAGEPGM(MSG_PRINT_PAUSED); | ||||
|  | ||||
|     #if ENABLED(PARK_HEAD_ON_PAUSE) | ||||
|       TERN_(HAS_WIRED_LCD, lcd_pause_show_message(PAUSE_MESSAGE_PARKING, PAUSE_MODE_PAUSE_PRINT)); // Show message immediately to let user know about pause in progress | ||||
|       pause_show_message(PAUSE_MESSAGE_PARKING, PAUSE_MODE_PAUSE_PRINT); // Show message immediately to let user know about pause in progress | ||||
|       queue.inject_P(PSTR("M25 P\nM24")); | ||||
|     #elif ENABLED(SDSUPPORT) | ||||
|       queue.inject_P(PSTR("M25")); | ||||
|   | ||||
| @@ -51,15 +51,13 @@ | ||||
|   #include "../module/printcounter.h" | ||||
| #endif | ||||
|  | ||||
| #if BOTH(HAS_LCD_MENU, ADVANCED_PAUSE_FEATURE) | ||||
|   #include "../feature/pause.h" | ||||
|   #include "../module/motion.h" // for active_extruder | ||||
| #endif | ||||
|  | ||||
| #if HAS_WIRED_LCD | ||||
|  | ||||
|   #include "../MarlinCore.h" | ||||
|  | ||||
|   #if ENABLED(ADVANCED_PAUSE_FEATURE) | ||||
|     #include "../feature/pause.h" | ||||
|     #include "../module/motion.h" // for active_extruder | ||||
|   #endif | ||||
|  | ||||
|   enum LCDViewAction : uint8_t { | ||||
|     LCDVIEW_NONE, | ||||
|     LCDVIEW_REDRAW_NOW, | ||||
| @@ -87,12 +85,6 @@ | ||||
|     typedef void (*screenFunc_t)(); | ||||
|     typedef void (*menuAction_t)(); | ||||
|  | ||||
|     #if ENABLED(ADVANCED_PAUSE_FEATURE) | ||||
|       void lcd_pause_show_message(const PauseMessage message, | ||||
|                                   const PauseMode mode=PAUSE_MODE_SAME, | ||||
|                                   const uint8_t extruder=active_extruder); | ||||
|     #endif | ||||
|  | ||||
|     #if ENABLED(AUTO_BED_LEVELING_UBL) | ||||
|       void lcd_mesh_edit_setup(const float &initial); | ||||
|       float lcd_mesh_edit(); | ||||
| @@ -506,6 +498,13 @@ public: | ||||
|  | ||||
|   #endif | ||||
|  | ||||
|   #if BOTH(HAS_LCD_MENU, ADVANCED_PAUSE_FEATURE) | ||||
|     static void pause_show_message(const PauseMessage message, const PauseMode mode=PAUSE_MODE_SAME, const uint8_t extruder=active_extruder); | ||||
|   #else | ||||
|     static inline void _pause_show_message() {} | ||||
|     #define pause_show_message(...) _pause_show_message() | ||||
|   #endif | ||||
|  | ||||
|   // | ||||
|   // EEPROM: Reset / Init / Load / Store | ||||
|   // | ||||
|   | ||||
| @@ -161,6 +161,8 @@ void menu_advanced_settings(); | ||||
|   #include "../../module/motion.h" | ||||
|   #include "../../gcode/queue.h" | ||||
|  | ||||
|   extern const char G28_STR[]; | ||||
|  | ||||
|   void menu_tool_offsets() { | ||||
|  | ||||
|     auto _recalc_offsets = []{ | ||||
|   | ||||
| @@ -53,6 +53,7 @@ void _man_probe_pt(const xy_pos_t &xy) { | ||||
|  | ||||
| #if ENABLED(DELTA_AUTO_CALIBRATION) | ||||
|  | ||||
|   #include "../../MarlinCore.h" // for wait_for_user_response() | ||||
|   #include "../../gcode/gcode.h" | ||||
|  | ||||
|   #if ENABLED(HOST_PROMPT_SUPPORT) | ||||
| @@ -81,6 +82,7 @@ void _man_probe_pt(const xy_pos_t &xy) { | ||||
|   } | ||||
|  | ||||
|   void _lcd_delta_calibrate_home() { | ||||
|     extern const char G28_STR[]; | ||||
|     queue.inject_P(G28_STR); | ||||
|     ui.goto_screen(_lcd_calibrate_homing); | ||||
|   } | ||||
|   | ||||
| @@ -107,6 +107,8 @@ void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) { | ||||
|  */ | ||||
| #if E_STEPPERS > 1 || ENABLED(FILAMENT_LOAD_UNLOAD_GCODES) | ||||
|  | ||||
|   bool printingIsPaused(); | ||||
|  | ||||
|   void menu_change_filament() { | ||||
|     // Say "filament change" when no print is active | ||||
|     editable.int8 = printingIsPaused() ? PAUSE_MODE_PAUSE_PRINT : PAUSE_MODE_CHANGE_FILAMENT; | ||||
| @@ -315,7 +317,7 @@ FORCE_INLINE screenFunc_t ap_message_screen(const PauseMessage message) { | ||||
|   return nullptr; | ||||
| } | ||||
|  | ||||
| void lcd_pause_show_message( | ||||
| void MarlinUI::pause_show_message( | ||||
|   const PauseMessage message, | ||||
|   const PauseMode mode/*=PAUSE_MODE_SAME*/, | ||||
|   const uint8_t extruder/*=active_extruder*/ | ||||
|   | ||||
| @@ -51,6 +51,8 @@ | ||||
|   float manual_move_e_origin = 0; | ||||
| #endif | ||||
|  | ||||
| extern const char G28_STR[]; | ||||
|  | ||||
| // | ||||
| // "Motion" > "Move Axis" submenu | ||||
| // | ||||
|   | ||||
| @@ -27,7 +27,6 @@ | ||||
| #include "endstops.h" | ||||
| #include "stepper.h" | ||||
|  | ||||
| #include "../MarlinCore.h" | ||||
| #include "../sd/cardreader.h" | ||||
| #include "temperature.h" | ||||
| #include "../lcd/marlinui.h" | ||||
|   | ||||
| @@ -236,8 +236,17 @@ void report_current_position_projected() { | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * sync_plan_position | ||||
|  * | ||||
|  * Run out the planner buffer and re-sync the current | ||||
|  * position from the last-updated stepper positions. | ||||
|  */ | ||||
| void quickstop_stepper() { | ||||
|   planner.quick_stop(); | ||||
|   planner.synchronize(); | ||||
|   set_current_from_steppers_for_axis(ALL_AXES); | ||||
|   sync_plan_position(); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Set the planner/stepper positions directly from current_position with | ||||
|  * no kinematic translation. Used for homing axes and cartesian/core syncing. | ||||
|  */ | ||||
|   | ||||
| @@ -212,6 +212,8 @@ void report_current_position_projected(); | ||||
| void get_cartesian_from_steppers(); | ||||
| void set_current_from_steppers_for_axis(const AxisEnum axis); | ||||
|  | ||||
| void quickstop_stepper(); | ||||
|  | ||||
| /** | ||||
|  * sync_plan_position | ||||
|  * | ||||
|   | ||||
| @@ -38,7 +38,7 @@ | ||||
| #include "../gcode/gcode.h" | ||||
| #include "../lcd/marlinui.h" | ||||
|  | ||||
| #include "../MarlinCore.h" // for stop(), disable_e_steppers | ||||
| #include "../MarlinCore.h" // for stop(), disable_e_steppers(), wait_for_user_response() | ||||
|  | ||||
| #if HAS_LEVELING | ||||
|   #include "../feature/bedlevel/bedlevel.h" | ||||
|   | ||||
| @@ -27,14 +27,17 @@ | ||||
| // Useful when debugging thermocouples | ||||
| //#define IGNORE_THERMOCOUPLE_ERRORS | ||||
|  | ||||
| #include "../MarlinCore.h" | ||||
| #include "../HAL/shared/Delay.h" | ||||
| #include "../lcd/marlinui.h" | ||||
|  | ||||
| #include "temperature.h" | ||||
| #include "endstops.h" | ||||
|  | ||||
| #include "../MarlinCore.h" | ||||
| #include "planner.h" | ||||
| #include "../HAL/shared/Delay.h" | ||||
|  | ||||
| #include "../lcd/marlinui.h" | ||||
| #if ENABLED(EMERGENCY_PARSER) | ||||
|   #include "motion.h" | ||||
| #endif | ||||
|  | ||||
| #if ENABLED(DWIN_CREALITY_LCD) | ||||
|   #include "../lcd/dwin/e3v2/dwin.h" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user