diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 901796e342..6f76d4ec79 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -12,6 +12,15 @@ contact_links: - name: 👤 Professional Firmware Facebook group url: https://www.facebook.com/groups/513889302986197 about: Please ask and answer questions here. + - name: 🕹 Marlin on Discord + url: https://discord.com/servers/marlin-firmware-461605380783472640 + about: Join the Discord server for support and discussion. + - name: 🔗 Marlin Discussion Forum + url: https://reprap.org/forum/list.php?415 + about: A searchable web forum hosted by RepRap dot org. + - name: 📺 Marlin Videos on YouTube + url: https://www.youtube.com/results?search_query=marlin+firmware + about: Tutorials and more from Marlin users all around the world. Great for new users! - name: 💸 Want to donate? url: https://www.paypal.com/paypalme/andrewleduc about: Your contribution to this project is always welcome! diff --git a/.github/contributing.md b/.github/contributing.md index c9b31998e9..9455977528 100644 --- a/.github/contributing.md +++ b/.github/contributing.md @@ -43,7 +43,7 @@ We have a Message Board and a Facebook group where our knowledgable user communi If chat is more your speed, you can join the MarlinFirmware Discord server: -* Use the link https://discord.gg/n5NJ59y to join up as a General User. +* Use the link https://discord.com/servers/marlin-firmware-461605380783472640 to join up as a General User. * Even though our Discord is pretty active, it may take a while for community members to respond — please be patient! * Use the `#general` channel for general questions or discussion about Marlin. * Other channels exist for certain topics or are limited to Patrons. Check the channel list. diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 8f7630cc61..c3cf766de5 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -2570,7 +2570,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/Marlin/Version.h b/Marlin/Version.h index f978d0aa2a..f9a4e79a57 100644 --- a/Marlin/Version.h +++ b/Marlin/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-13" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/Marlin/src/HAL/STM32/pinsDebug.h b/Marlin/src/HAL/STM32/pinsDebug.h index faf04f45dd..f1ab929bbb 100644 --- a/Marlin/src/HAL/STM32/pinsDebug.h +++ b/Marlin/src/HAL/STM32/pinsDebug.h @@ -114,7 +114,7 @@ const XrefInfo pin_xref[] PROGMEM = { #ifndef NUM_ANALOG_LAST #define NUM_ANALOG_LAST ((NUM_ANALOG_FIRST) + (NUM_ANALOG_INPUTS) - 1) #endif -#define NUMBER_PINS_TOTAL ((NUM_DIGITAL_PINS) + TERN0(HAS_HIGH_ANALOG_PINS, NUM_ANALOG_INPUTS)) +#define NUMBER_PINS_TOTAL ((NUM_DIGITAL_PINS) PLUS_TERN0(HAS_HIGH_ANALOG_PINS, NUM_ANALOG_INPUTS)) #define isValidPin(P) (WITHIN(P, 0, (NUM_DIGITAL_PINS) - 1) || TERN0(HAS_HIGH_ANALOG_PINS, WITHIN(P, NUM_ANALOG_FIRST, NUM_ANALOG_LAST))) #define digitalRead_mod(Ard_num) extDigitalRead(Ard_num) // must use Arduino pin numbers when doing reads #define printPinNumber(Q) diff --git a/Marlin/src/core/types.h b/Marlin/src/core/types.h index 70ae8879af..4a88048dba 100644 --- a/Marlin/src/core/types.h +++ b/Marlin/src/core/types.h @@ -297,7 +297,7 @@ enum AxisEnum : uint8_t { #endif // Distinct axes, including all E and Core - NUM_AXIS_ENUMS, + NUM_AXIS_HEADS, // Most of the time we refer only to the single E_AXIS #if HAS_EXTRUDERS @@ -995,7 +995,7 @@ class AxisBits; class AxisBits { public: - typedef bits_t(NUM_AXIS_ENUMS) el; + typedef bits_t(NUM_AXIS_HEADS) el; union { el bits; // Axes x, y, z ... e0, e1, e2 ... hx, hy, hz @@ -1056,7 +1056,7 @@ class AxisBits { FI AxisBits& operator=(const el p) { set(p); return *this; } FI void reset() { set(0); } - FI void fill() { set(_BV(NUM_AXIS_ENUMS) - 1); } + FI void fill() { set(_BV(NUM_AXIS_HEADS) - 1); } #define MSET(pE,pX,pY,pZ,pI,pJ,pK,pU,pV,pW) LOGICAL_AXIS_CODE(e=pE, x=pX, y=pY, z=pZ, i=pI, j=pJ, k=pK, u=pU, v=pV, w=pW) diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index c856c5c11f..8a81217511 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -1200,9 +1200,9 @@ bool unified_bed_leveling::G29_parse_parameters() { } param.XY_seen.x = parser.seenval('X'); - float sx = param.XY_seen.x ? parser.value_float() : TERN(DWIN_LCD_PROUI, 0, current_position.x - TERN0(HAS_BED_PROBE, probe.offset.x)); + float sx = param.XY_seen.x ? parser.value_float() : TERN(DWIN_LCD_PROUI, 0, current_position.x MINUS_TERN0(HAS_BED_PROBE, probe.offset.x)); param.XY_seen.y = parser.seenval('Y'); - float sy = param.XY_seen.y ? parser.value_float() : TERN(DWIN_LCD_PROUI, 0, current_position.y - TERN0(HAS_BED_PROBE, probe.offset.y)); + float sy = param.XY_seen.y ? parser.value_float() : TERN(DWIN_LCD_PROUI, 0, current_position.y MINUS_TERN0(HAS_BED_PROBE, probe.offset.y)); if (param.XY_seen.x != param.XY_seen.y) { SERIAL_ECHOLNPGM("Both X & Y locations must be specified.\n"); @@ -1211,8 +1211,8 @@ bool unified_bed_leveling::G29_parse_parameters() { // If X or Y are not valid, use center of the bed values // (for UBL_HILBERT_CURVE default to lower-left corner instead) - if (!COORDINATE_OKAY(sx, X_MIN_BED, X_MAX_BED)) sx = TERN(UBL_HILBERT_CURVE, 0, X_CENTER - TERN0(HAS_BED_PROBE, probe.offset.x)); - if (!COORDINATE_OKAY(sy, Y_MIN_BED, Y_MAX_BED)) sy = TERN(UBL_HILBERT_CURVE, 0, Y_CENTER - TERN0(HAS_BED_PROBE, probe.offset.y)); + if (!COORDINATE_OKAY(sx, X_MIN_BED, X_MAX_BED)) sx = TERN(UBL_HILBERT_CURVE, 0, X_CENTER MINUS_TERN0(HAS_BED_PROBE, probe.offset.x)); + if (!COORDINATE_OKAY(sy, Y_MIN_BED, Y_MAX_BED)) sy = TERN(UBL_HILBERT_CURVE, 0, Y_CENTER MINUS_TERN0(HAS_BED_PROBE, probe.offset.y)); if (err_flag) return UBL_ERR; diff --git a/Marlin/src/feature/leds/leds.h b/Marlin/src/feature/leds/leds.h index da8ba42fba..a0e20df47c 100644 --- a/Marlin/src/feature/leds/leds.h +++ b/Marlin/src/feature/leds/leds.h @@ -90,7 +90,7 @@ typedef struct LEDColor { bool operator!=(const LEDColor &right) { return !operator==(right); } bool is_off() const { - return 3 > r + g + b + TERN0(HAS_WHITE_LED, w); + return 3 > r + g + b PLUS_TERN0(HAS_WHITE_LED, w); } } LEDColor; diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index 8e74e263ab..fb0b823729 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -208,7 +208,7 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENTLOAD))); #if ENABLED(HOST_PROMPT_SUPPORT) - const char tool = '0' + TERN0(MULTI_FILAMENT_SENSOR, active_extruder); + const char tool = '0' PLUS_TERN0(MULTI_FILAMENT_SENSOR, active_extruder); hostui.prompt_do(PROMPT_USER_CONTINUE, F("Load Filament T"), tool, FPSTR(CONTINUE_STR)); #endif @@ -540,6 +540,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep KEEPALIVE_STATE(PAUSED_FOR_USER); TERN_(HOST_PROMPT_SUPPORT, hostui.continue_prompt(GET_TEXT_F(MSG_NOZZLE_PARKED))); TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_NOZZLE_PARKED))); + TERN_(DWIN_LCD_PROUI, LCD_MESSAGE(MSG_NOZZLE_PARKED)); wait_for_user = true; // LCD click or M108 will clear this while (wait_for_user) { impatient_beep(max_beep_count); diff --git a/Marlin/src/feature/powerloss.cpp b/Marlin/src/feature/powerloss.cpp index bdece3d173..3a01f02fac 100644 --- a/Marlin/src/feature/powerloss.cpp +++ b/Marlin/src/feature/powerloss.cpp @@ -440,7 +440,7 @@ void PrintJobRecovery::resume() { // establish the current position as best we can. // - #if ENABLED(DWIN_LCD_PROUI) && DISABLED(NOZZLE_CLEAN_FEATURE) + #if ENABLED(DWIN_LCD_PROUI) && (DISABLED(NOZZLE_CLEAN_FEATURE) || defined(WIPE_SEQUENCE_COMMANDS)) xyze_pos_t save_pos = info.current_position; #endif @@ -502,9 +502,16 @@ void PrintJobRecovery::resume() { #endif #endif - #if ENABLED(DWIN_LCD_PROUI) && DISABLED(NOZZLE_CLEAN_FEATURE) + #if ENABLED(DWIN_LCD_PROUI) && (DISABLED(NOZZLE_CLEAN_FEATURE) || defined(WIPE_SEQUENCE_COMMANDS)) // Parking head to allow clean before of heating the hotend - gcode.process_subcommands_now(F("G27")); + #if ENABLED(NOZZLE_PARK_FEATURE) + gcode.process_subcommands_now(F("G27P3\nG27P2")); + #else + const_float_t zpos = current_position.z + TERN(NOZZLE_PARK_FEATURE, NOZZLE_PARK_Z_RAISE_MIN, Z_POST_CLEARANCE); + _MIN(zpos, Z_MAX_POS); + const int16_t ypos = TERN(NOZZLE_PARK_FEATURE, TERN(PROUI_EX, PRO_data.Park_point.y, DEF_NOZZLE_PARK_POINT.y), Y_MAX_POS); + gcode.process_subcommands_now(TS(F("G0F600Z"), zpos, F("\nG0F2000Y"), ypos, F("\nM400"))); + #endif DWIN_Popup_Continue(ICON_Leveling_0, GET_TEXT_F(MSG_NOZZLE_PARKED), GET_TEXT_F(MSG_NOZZLE_CLEAN)); wait_for_user_response(); info.current_position = save_pos; @@ -578,7 +585,7 @@ void PrintJobRecovery::resume() { PROCESS_SUBCOMMANDS_NOW(TS(F("G1F3000E"), (POWER_LOSS_PURGE_LEN) + (POWER_LOSS_RETRACT_LEN))); #endif - #if ENABLED(NOZZLE_CLEAN_FEATURE) + #if ENABLED(NOZZLE_CLEAN_FEATURE) && !defined(WIPE_SEQUENCE_COMMANDS) PROCESS_SUBCOMMANDS_NOW(F("G12")); #endif diff --git a/Marlin/src/feature/runout.cpp b/Marlin/src/feature/runout.cpp index 46d1812b5e..8884c7a35e 100644 --- a/Marlin/src/feature/runout.cpp +++ b/Marlin/src/feature/runout.cpp @@ -98,7 +98,7 @@ void event_filament_runout(const uint8_t extruder) { TERN_(DWIN_LCD_PROUI, LCD_MESSAGE(MSG_RUNOUT_SENSOR)); #if ANY(HOST_PROMPT_SUPPORT, HOST_ACTION_COMMANDS, MULTI_FILAMENT_SENSOR) - const char tool = '0' + TERN0(MULTI_FILAMENT_SENSOR, extruder); + const char tool = '0' PLUS_TERN0(MULTI_FILAMENT_SENSOR, extruder); #endif //action:out_of_filament diff --git a/Marlin/src/gcode/bedlevel/G26.cpp b/Marlin/src/gcode/bedlevel/G26.cpp index f27254079f..abf8a1a301 100644 --- a/Marlin/src/gcode/bedlevel/G26.cpp +++ b/Marlin/src/gcode/bedlevel/G26.cpp @@ -132,11 +132,11 @@ #endif #ifndef G26_XY_FEEDRATE - #define G26_XY_FEEDRATE (PLANNER_XY_FEEDRATE() / 3.0) + #define G26_XY_FEEDRATE (PLANNER_XY_FEEDRATE_MM_S / 3.0) #endif #ifndef G26_XY_FEEDRATE_TRAVEL - #define G26_XY_FEEDRATE_TRAVEL (PLANNER_XY_FEEDRATE() / 1.5) + #define G26_XY_FEEDRATE_TRAVEL (PLANNER_XY_FEEDRATE_MM_S / 1.5) #endif #if CROSSHAIRS_SIZE >= INTERSECTION_CIRCLE_RADIUS @@ -783,7 +783,7 @@ void GcodeSuite::G26() { g26.recover_filament(destination); - { REMEMBER(fr, feedrate_mm_s, PLANNER_XY_FEEDRATE() * 0.1f); + { REMEMBER(fr, feedrate_mm_s, PLANNER_XY_FEEDRATE_MM_S * 0.1f); plan_arc(endpoint, arc_offset, false, 0); // Draw a counter-clockwise arc destination = current_position; } diff --git a/Marlin/src/gcode/bedlevel/G42.cpp b/Marlin/src/gcode/bedlevel/G42.cpp index 2a4737e8a7..f55f149616 100644 --- a/Marlin/src/gcode/bedlevel/G42.cpp +++ b/Marlin/src/gcode/bedlevel/G42.cpp @@ -27,9 +27,12 @@ #include "../gcode.h" #include "../../MarlinCore.h" // for IsRunning() #include "../../module/motion.h" -#include "../../module/probe.h" // for probe.offset #include "../../feature/bedlevel/bedlevel.h" +#if HAS_PROBE_XY_OFFSET + #include "../../module/probe.h" // for probe.offset +#endif + /** * G42: Move X & Y axes to mesh coordinates (I & J) * diff --git a/Marlin/src/gcode/bedlevel/M420.cpp b/Marlin/src/gcode/bedlevel/M420.cpp index c495da3018..8711bab9c8 100644 --- a/Marlin/src/gcode/bedlevel/M420.cpp +++ b/Marlin/src/gcode/bedlevel/M420.cpp @@ -27,7 +27,10 @@ #include "../gcode.h" #include "../../feature/bedlevel/bedlevel.h" #include "../../module/planner.h" -#include "../../module/probe.h" + +#if ENABLED(MARLIN_DEV_MODE) + #include "../../module/probe.h" +#endif #if ENABLED(EEPROM_SETTINGS) #include "../../module/settings.h" diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 8a0eeb858b..654f38fa2c 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -40,7 +40,9 @@ #include "../../feature/tmc_util.h" #endif -#include "../../module/probe.h" +#if HAS_BED_PROBE + #include "../../module/probe.h" +#endif #if ENABLED(BLTOUCH) #include "../../feature/bltouch.h" diff --git a/Marlin/src/gcode/calibrate/G34_M422.cpp b/Marlin/src/gcode/calibrate/G34_M422.cpp index 7a27a61b9d..2fbbf18af0 100644 --- a/Marlin/src/gcode/calibrate/G34_M422.cpp +++ b/Marlin/src/gcode/calibrate/G34_M422.cpp @@ -276,7 +276,7 @@ void GcodeSuite::G34() { SERIAL_EOL(); - SString<15 + TERN0(TRIPLE_Z, 30) + TERN0(QUAD_Z, 45)> msg(F("1:2="), p_float_t(ABS(z_measured[1] - z_measured[0]), 3)); + SString<15 PLUS_TERN0(TRIPLE_Z, 30) PLUS_TERN0(QUAD_Z, 45)> msg(F("1:2="), p_float_t(ABS(z_measured[1] - z_measured[0]), 3)); #if TRIPLE_Z msg.append(F(" 3-2="), p_float_t(ABS(z_measured[2] - z_measured[1]), 3)) .append(F(" 3-1="), p_float_t(ABS(z_measured[2] - z_measured[0]), 3)); diff --git a/Marlin/src/gcode/calibrate/M48.cpp b/Marlin/src/gcode/calibrate/M48.cpp index ce15244063..f00f32e2de 100644 --- a/Marlin/src/gcode/calibrate/M48.cpp +++ b/Marlin/src/gcode/calibrate/M48.cpp @@ -25,7 +25,6 @@ #if ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST) #include "../gcode.h" -#include "../../module/motion.h" #include "../../module/probe.h" #include "../../lcd/marlinui.h" diff --git a/Marlin/src/gcode/control/M997.cpp b/Marlin/src/gcode/control/M997.cpp index 511b2512b6..c1422becdc 100644 --- a/Marlin/src/gcode/control/M997.cpp +++ b/Marlin/src/gcode/control/M997.cpp @@ -26,9 +26,7 @@ #if ENABLED(EXTENSIBLE_UI) #include "../../lcd/extui/ui_api.h" -#endif - -#if ENABLED(DWIN_LCD_PROUI) +#elif ENABLED(DWIN_LCD_PROUI) #include "../../lcd/e3v2/proui/dwin.h" #endif diff --git a/Marlin/src/gcode/feature/ft_motion/M493.cpp b/Marlin/src/gcode/feature/ft_motion/M493.cpp index 9dce3e97ce..d96e463af1 100644 --- a/Marlin/src/gcode/feature/ft_motion/M493.cpp +++ b/Marlin/src/gcode/feature/ft_motion/M493.cpp @@ -61,13 +61,13 @@ void say_shaping() { // FT Shaping #if HAS_X_AXIS - if (CMPNSTR_HAS_SHAPER(X_AXIS)) { + if (AXIS_HAS_SHAPER(X)) { SERIAL_ECHOPGM(" with " AXIS_0_NAME); say_shaper_type(X_AXIS); } #endif #if HAS_Y_AXIS - if (CMPNSTR_HAS_SHAPER(Y_AXIS)) { + if (AXIS_HAS_SHAPER(Y)) { SERIAL_ECHOPGM(" and with " AXIS_1_NAME); say_shaper_type(Y_AXIS); } @@ -80,7 +80,7 @@ void say_shaping() { dynamic = z_based || g_based; // FT Dynamic Frequency Mode - if (CMPNSTR_HAS_SHAPER(X_AXIS) || CMPNSTR_HAS_SHAPER(Y_AXIS)) { + if (AXIS_HAS_SHAPER(X) || AXIS_HAS_SHAPER(Y)) { #if HAS_DYNAMIC_FREQ SERIAL_ECHOPGM("Dynamic Frequency Mode "); switch (ftMotion.cfg.dynFreqMode) { @@ -201,8 +201,11 @@ void GcodeSuite::M493() { if (active != ftMotion.cfg.active) { switch (active) { - case false: flag.reset_ft = true; - case true: flag.report_h = true; + case false: + flag.reset_ft = true; + // fall-thru + case true: + flag.report_h = true; ftMotion.cfg.active = active; break; } @@ -267,7 +270,7 @@ void GcodeSuite::M493() { // Dynamic frequency mode parameter. if (parser.seenval('D')) { - if (CMPNSTR_HAS_SHAPER(X_AXIS) || CMPNSTR_HAS_SHAPER(Y_AXIS)) { + if (AXIS_HAS_SHAPER(X) || AXIS_HAS_SHAPER(Y)) { const dynFreqMode_t val = dynFreqMode_t(parser.value_byte()); switch (val) { #if HAS_DYNAMIC_FREQ_MM @@ -301,7 +304,7 @@ void GcodeSuite::M493() { // Parse frequency parameter (X axis). if (parser.seenval('A')) { - if (CMPNSTR_HAS_SHAPER(X_AXIS)) { + if (AXIS_HAS_SHAPER(X)) { const float val = parser.value_float(); /// TODO: Frequency minimum is dependent on the shaper used; the above check isn't always correct. if (WITHIN(val, FTM_MIN_SHAPE_FREQ, (FTM_FS) / 2)) { @@ -330,7 +333,7 @@ void GcodeSuite::M493() { // Parse zeta parameter (X axis). if (parser.seenval('I')) { const float val = parser.value_float(); - if (CMPNSTR_HAS_SHAPER(X_AXIS)) { + if (AXIS_HAS_SHAPER(X)) { if (WITHIN(val, 0.01f, 1.0f)) { ftMotion.cfg.zeta[0] = val; flag.update = true; @@ -345,7 +348,7 @@ void GcodeSuite::M493() { // Parse vtol parameter (X axis). if (parser.seenval('Q')) { const float val = parser.value_float(); - if (CMPNSTR_IS_EISHAPER(X_AXIS)) { + if (AXIS_HAS_EISHAPER(X)) { if (WITHIN(val, 0.00f, 1.0f)) { ftMotion.cfg.vtol[0] = val; flag.update = true; @@ -363,7 +366,7 @@ void GcodeSuite::M493() { // Parse frequency parameter (Y axis). if (parser.seenval('B')) { - if (CMPNSTR_HAS_SHAPER(Y_AXIS)) { + if (AXIS_HAS_SHAPER(Y)) { const float val = parser.value_float(); if (WITHIN(val, FTM_MIN_SHAPE_FREQ, (FTM_FS) / 2)) { ftMotion.cfg.baseFreq[Y_AXIS] = val; @@ -391,7 +394,7 @@ void GcodeSuite::M493() { // Parse zeta parameter (Y axis). if (parser.seenval('J')) { const float val = parser.value_float(); - if (CMPNSTR_HAS_SHAPER(Y_AXIS)) { + if (AXIS_HAS_SHAPER(Y)) { if (WITHIN(val, 0.01f, 1.0f)) { ftMotion.cfg.zeta[1] = val; flag.update = true; @@ -406,7 +409,7 @@ void GcodeSuite::M493() { // Parse vtol parameter (Y axis). if (parser.seenval('R')) { const float val = parser.value_float(); - if (CMPNSTR_IS_EISHAPER(Y_AXIS)) { + if (AXIS_HAS_EISHAPER(Y)) { if (WITHIN(val, 0.00f, 1.0f)) { ftMotion.cfg.vtol[1] = val; flag.update = true; diff --git a/Marlin/src/gcode/lcd/M73.cpp b/Marlin/src/gcode/lcd/M73.cpp index bbc1e2c6be..e826f8d57d 100644 --- a/Marlin/src/gcode/lcd/M73.cpp +++ b/Marlin/src/gcode/lcd/M73.cpp @@ -29,10 +29,6 @@ #include "../../sd/cardreader.h" #include "../../libs/numtostr.h" -#if ENABLED(DWIN_LCD_PROUI) - #include "../../lcd/e3v2/proui/dwin.h" -#endif - /** * M73: Set percentage complete (for display on LCD) * diff --git a/Marlin/src/gcode/sd/M1001.cpp b/Marlin/src/gcode/sd/M1001.cpp index c49909646e..a00ca61228 100644 --- a/Marlin/src/gcode/sd/M1001.cpp +++ b/Marlin/src/gcode/sd/M1001.cpp @@ -49,8 +49,6 @@ #if ENABLED(EXTENSIBLE_UI) #include "../../lcd/extui/ui_api.h" -#elif ENABLED(DWIN_LCD_PROUI) - #include "../../lcd/e3v2/proui/dwin.h" #endif #if ENABLED(HOST_ACTION_COMMANDS) diff --git a/Marlin/src/gcode/temp/M303.cpp b/Marlin/src/gcode/temp/M303.cpp index 652f0db4d4..1a9d485e46 100644 --- a/Marlin/src/gcode/temp/M303.cpp +++ b/Marlin/src/gcode/temp/M303.cpp @@ -82,7 +82,7 @@ void GcodeSuite::M303() { TERN_(DWIN_LCD_PROUI, DWIN_M303(c, hid, temp);) TERN_(EXTENSIBLE_UI, ExtUI::onStartM303(c, hid, temp)); - IF_DISABLED(BUSY_WHILE_HEATING, KEEPALIVE_STATE(NOT_BUSY);) + IF_DISABLED(BUSY_WHILE_HEATING, KEEPALIVE_STATE(NOT_BUSY)); LCD_MESSAGE(MSG_PID_AUTOTUNE); thermalManager.PID_autotune(temp, hid, c, u); diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index de64a0a49c..419d0c9170 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -70,6 +70,8 @@ #undef FILAMENT_RUNOUT_SENSOR #undef FILAMENT_RUNOUT_DISTANCE_MM #undef DISABLE_OTHER_EXTRUDERS + #undef THERMAL_PROTECTION_HYSTERESIS + #undef THERMAL_PROTECTION_PERIOD #endif #define E_OPTARG(N) OPTARG(HAS_MULTI_EXTRUDER, N) @@ -201,6 +203,10 @@ #undef HOTEND_OFFSET_Z #endif +// +// Remove irrelevant Configuration.h settings +// + // Clean up E-stepper-based settings... #if E_STEPPERS <= 7 #undef INVERT_E7_DIR @@ -235,6 +241,72 @@ #endif #endif +// Clean up unused temperature sensors and sub-options + +#if !TEMP_SENSOR_0 + #undef TEMP_SENSOR_0 +#endif +#if !TEMP_SENSOR_1 + #undef TEMP_SENSOR_1 +#endif +#if !TEMP_SENSOR_2 + #undef TEMP_SENSOR_2 +#endif +#if !TEMP_SENSOR_3 + #undef TEMP_SENSOR_3 +#endif +#if !TEMP_SENSOR_4 + #undef TEMP_SENSOR_4 +#endif +#if !TEMP_SENSOR_5 + #undef TEMP_SENSOR_5 +#endif +#if !TEMP_SENSOR_6 + #undef TEMP_SENSOR_6 +#endif +#if !TEMP_SENSOR_7 + #undef TEMP_SENSOR_7 +#endif + +#if TEMP_SENSOR_BED + #define HAS_HEATED_BED 1 +#else + #undef TEMP_SENSOR_BED + #undef THERMAL_PROTECTION_BED_HYSTERESIS + #undef THERMAL_PROTECTION_BED_PERIOD + #undef MAX_BED_POWER +#endif +#if !TEMP_SENSOR_CHAMBER + #undef TEMP_SENSOR_CHAMBER + #undef THERMAL_PROTECTION_CHAMBER_HYSTERESIS + #undef THERMAL_PROTECTION_CHAMBER_PERIOD + #undef CHAMBER_AUTO_FAN_PIN + #undef CHAMBER_AUTO_FAN_SPEED + #undef CHAMBER_AUTO_FAN_TEMPERATURE + #undef MAX_CHAMBER_POWER +#endif +#if !TEMP_SENSOR_COOLER + #undef TEMP_SENSOR_COOLER + #undef COOLER_AUTO_FAN_PIN + #undef COOLER_AUTO_FAN_SPEED + #undef COOLER_AUTO_FAN_TEMPERATURE +#endif +#if !TEMP_SENSOR_PROBE + #undef TEMP_SENSOR_PROBE +#endif +#if !TEMP_SENSOR_REDUNDANT + #undef TEMP_SENSOR_REDUNDANT +#endif +#if !TEMP_SENSOR_BOARD + #undef TEMP_SENSOR_BOARD +#endif +#if !TEMP_SENSOR_SOC + #undef TEMP_SENSOR_SOC +#endif +#if !SOFT_PWM_SCALE + #undef SOFT_PWM_SCALE +#endif + /** * Number of Linear Axes (e.g., XYZIJKUVW) * All the logical axes except for the tool (E) axis @@ -296,12 +368,20 @@ #endif #endif +#if HAS_Z_AXIS + #ifdef Z4_DRIVER_TYPE + #define NUM_Z_STEPPERS 4 + #elif defined(Z3_DRIVER_TYPE) + #define NUM_Z_STEPPERS 3 + #elif defined(Z2_DRIVER_TYPE) + #define NUM_Z_STEPPERS 2 + #else + #define NUM_Z_STEPPERS 1 + #endif +#endif + #if !HAS_X_AXIS #undef AVOID_OBSTACLES - #undef ENDSTOPPULLUP_XMIN - #undef ENDSTOPPULLUP_XMAX - #undef X_MIN_ENDSTOP_HIT_STATE - #undef X_MAX_ENDSTOP_HIT_STATE #undef X2_DRIVER_TYPE #undef X_ENABLE_ON #undef DISABLE_X @@ -312,14 +392,12 @@ #undef MANUAL_X_HOME_POS #undef MIN_SOFTWARE_ENDSTOPS #undef MAX_SOFTWARE_ENDSTOPS + #undef MIN_SOFTWARE_ENDSTOP_X + #undef MAX_SOFTWARE_ENDSTOP_X #endif #if !HAS_Y_AXIS #undef AVOID_OBSTACLES - #undef ENDSTOPPULLUP_YMIN - #undef ENDSTOPPULLUP_YMAX - #undef Y_MIN_ENDSTOP_HIT_STATE - #undef Y_MAX_ENDSTOP_HIT_STATE #undef Y2_DRIVER_TYPE #undef Y_ENABLE_ON #undef DISABLE_Y @@ -332,21 +410,7 @@ #undef MAX_SOFTWARE_ENDSTOP_Y #endif -#if HAS_Z_AXIS - #ifdef Z4_DRIVER_TYPE - #define NUM_Z_STEPPERS 4 - #elif defined(Z3_DRIVER_TYPE) - #define NUM_Z_STEPPERS 3 - #elif defined(Z2_DRIVER_TYPE) - #define NUM_Z_STEPPERS 2 - #else - #define NUM_Z_STEPPERS 1 - #endif -#else - #undef ENDSTOPPULLUP_ZMIN - #undef ENDSTOPPULLUP_ZMAX - #undef Z_MIN_ENDSTOP_HIT_STATE - #undef Z_MAX_ENDSTOP_HIT_STATE +#if !HAS_Z_AXIS #undef Z2_DRIVER_TYPE #undef Z3_DRIVER_TYPE #undef Z4_DRIVER_TYPE @@ -363,10 +427,6 @@ #endif #if !HAS_I_AXIS - #undef ENDSTOPPULLUP_IMIN - #undef ENDSTOPPULLUP_IMAX - #undef I_MIN_ENDSTOP_HIT_STATE - #undef I_MAX_ENDSTOP_HIT_STATE #undef I_ENABLE_ON #undef DISABLE_I #undef INVERT_I_DIR @@ -379,10 +439,6 @@ #endif #if !HAS_J_AXIS - #undef ENDSTOPPULLUP_JMIN - #undef ENDSTOPPULLUP_JMAX - #undef J_MIN_ENDSTOP_HIT_STATE - #undef J_MAX_ENDSTOP_HIT_STATE #undef J_ENABLE_ON #undef DISABLE_J #undef INVERT_J_DIR @@ -395,10 +451,6 @@ #endif #if !HAS_K_AXIS - #undef ENDSTOPPULLUP_KMIN - #undef ENDSTOPPULLUP_KMAX - #undef K_MIN_ENDSTOP_HIT_STATE - #undef K_MAX_ENDSTOP_HIT_STATE #undef K_ENABLE_ON #undef DISABLE_K #undef INVERT_K_DIR @@ -411,10 +463,6 @@ #endif #if !HAS_U_AXIS - #undef ENDSTOPPULLUP_UMIN - #undef ENDSTOPPULLUP_UMAX - #undef U_MIN_ENDSTOP_HIT_STATE - #undef U_MAX_ENDSTOP_HIT_STATE #undef U_ENABLE_ON #undef DISABLE_U #undef INVERT_U_DIR @@ -427,10 +475,6 @@ #endif #if !HAS_V_AXIS - #undef ENDSTOPPULLUP_VMIN - #undef ENDSTOPPULLUP_VMAX - #undef V_MIN_ENDSTOP_HIT_STATE - #undef V_MAX_ENDSTOP_HIT_STATE #undef V_ENABLE_ON #undef DISABLE_V #undef INVERT_V_DIR @@ -443,10 +487,6 @@ #endif #if !HAS_W_AXIS - #undef ENDSTOPPULLUP_WMIN - #undef ENDSTOPPULLUP_WMAX - #undef W_MIN_ENDSTOP_HIT_STATE - #undef W_MAX_ENDSTOP_HIT_STATE #undef W_ENABLE_ON #undef DISABLE_W #undef INVERT_W_DIR @@ -1159,6 +1199,19 @@ #endif #endif +/** + * Unused LCD options + */ +#if NONE(HAS_MARLINUI_HD44780, IS_DWIN_MARLINUI, IS_TFTGLCD_PANEL) && !MB(SIMULATED) + #undef DISPLAY_CHARSET_HD44780 +#endif +#if !HAS_MARLINUI_HD44780 + #undef LCD_INFO_SCREEN_STYLE +#endif +#if NONE(HAS_MARLINUI_U8GLIB, HAS_TFT_LVGL_UI) + #undef LCD_LANGUAGE +#endif + /** * Disable unused SINGLENOZZLE sub-options */ @@ -1591,6 +1644,14 @@ #define PROBE_SELECTED 1 #endif +#if !HAS_MESH + #undef MESH_INSET +#endif + +#if DISABLED(ENABLE_LEVELING_FADE_HEIGHT) + #undef DEFAULT_LEVELING_FADE_HEIGHT +#endif + #ifdef GRID_MAX_POINTS_X #define GRID_MAX_POINTS ((GRID_MAX_POINTS_X) * (GRID_MAX_POINTS_Y)) #define GRID_LOOP(A,B) for (uint8_t A = 0; A < GRID_MAX_POINTS_X; ++A) for (uint8_t B = 0; B < GRID_MAX_POINTS_Y; ++B) diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index a98a5eb7e4..f2f41c2515 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -83,6 +83,9 @@ // Convenience override for a BLTouch alone #if ENABLED(BLTOUCH) + #ifndef BLTOUCH_DELAY + #define BLTOUCH_DELAY 500 + #endif #ifdef BLTOUCH_HS_MODE #define HAS_BLTOUCH_HS_MODE 1 #endif @@ -622,6 +625,10 @@ #define HAS_MAX31865 1 #endif +#if !HAS_MAX_TC + #undef THERMOCOUPLE_MAX_ERRORS +#endif + #if TEMP_SENSOR_3 == -4 #define TEMP_SENSOR_3_IS_AD8495 1 #elif TEMP_SENSOR_3 == -3 @@ -819,6 +826,15 @@ #endif #endif +#if !ANY_THERMISTOR_IS(-1) + #undef TEMP_SENSOR_AD595_GAIN + #undef TEMP_SENSOR_AD595_OFFSET +#endif +#if !ANY_THERMISTOR_IS(-4) + #undef TEMP_SENSOR_AD8495_GAIN + #undef TEMP_SENSOR_AD8495_OFFSET +#endif + #if HAS_MULTI_EXTRUDER || HAS_MULTI_HOTEND || HAS_PRUSA_MMU2 || (ENABLED(MIXING_EXTRUDER) && MIXING_VIRTUAL_TOOLS > 1) #define HAS_TOOLCHANGE 1 #endif @@ -869,6 +885,10 @@ #define HAS_PRINT_PROGRESS 1 #endif +#if !ALL(HAS_MARLINUI_MENU, HAS_MEDIA) + #undef SD_MENU_CONFIRM_START +#endif + #if DISABLED(SET_PROGRESS_MANUALLY) #undef SET_REMAINING_TIME #undef SET_INTERACTION_TIME diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index f9dea32865..12b93723c8 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -387,8 +387,10 @@ #undef Z_SAFE_HOMING #endif -#ifndef MESH_INSET - #define MESH_INSET 0 +#ifdef MESH_INSET + #define _MESH_INSET (MESH_INSET) +#else + #define _MESH_INSET 0 #endif /** @@ -397,7 +399,7 @@ #if ENABLED(Z_SAFE_HOMING) #if ENABLED(AUTO_BED_LEVELING_UBL) // Home close to center so grid points have z heights very close to 0 - #define _SAFE_POINT(A) (((GRID_MAX_POINTS_##A) / 2) * (A##_BED_SIZE - 2 * (MESH_INSET)) / (GRID_MAX_POINTS_##A - 1) + MESH_INSET) + #define _SAFE_POINT(A) (((GRID_MAX_POINTS_##A) / 2) * (A##_BED_SIZE - 2 * _MESH_INSET) / (GRID_MAX_POINTS_##A - 1) + _MESH_INSET) #else #define _SAFE_POINT(A) A##_CENTER #endif @@ -428,13 +430,6 @@ #define MAX_AUTORETRACT 99 #endif -/** - * Provide a DEFAULT_VOLUMETRIC_EXTRUDER_LIMIT in case NO_VOLUMETRICS is enabled - */ -#ifndef DEFAULT_VOLUMETRIC_EXTRUDER_LIMIT - #define DEFAULT_VOLUMETRIC_EXTRUDER_LIMIT 0.00 -#endif - /** * LCD Contrast for Graphical Displays */ @@ -750,18 +745,20 @@ #if ENABLED(X_DUAL_ENDSTOPS) #if X_HOME_TO_MAX #ifndef X2_MAX_ENDSTOP_HIT_STATE - #if X2_STOP_PIN == X_MIN_PIN - #define X2_MAX_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif X2_STOP_PIN == X_MAX_PIN - #define X2_MAX_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif X2_STOP_PIN == Y_MIN_PIN - #define X2_MAX_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif X2_STOP_PIN == Y_MAX_PIN - #define X2_MAX_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif X2_STOP_PIN == Z_MIN_PIN - #define X2_MAX_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif X2_STOP_PIN == Z_MAX_PIN - #define X2_MAX_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #if PIN_EXISTS(X2_STOP) + #if X2_STOP_PIN == X_MIN_PIN + #define X2_MAX_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE + #elif X2_STOP_PIN == X_MAX_PIN + #define X2_MAX_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE + #elif X2_STOP_PIN == Y_MIN_PIN + #define X2_MAX_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE + #elif X2_STOP_PIN == Y_MAX_PIN + #define X2_MAX_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE + #elif X2_STOP_PIN == Z_MIN_PIN + #define X2_MAX_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE + #elif X2_STOP_PIN == Z_MAX_PIN + #define X2_MAX_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #endif #endif #endif #if !PIN_EXISTS(X2_MAX) @@ -772,18 +769,20 @@ #endif #else #ifndef X2_MIN_ENDSTOP_HIT_STATE - #if X2_STOP_PIN == X_MIN_PIN - #define X2_MIN_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif X2_STOP_PIN == X_MAX_PIN - #define X2_MIN_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif X2_STOP_PIN == Y_MIN_PIN - #define X2_MIN_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif X2_STOP_PIN == Y_MAX_PIN - #define X2_MIN_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif X2_STOP_PIN == Z_MIN_PIN - #define X2_MIN_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif X2_STOP_PIN == Z_MAX_PIN - #define X2_MIN_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #if PIN_EXISTS(X2_STOP) + #if X2_STOP_PIN == X_MIN_PIN + #define X2_MIN_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE + #elif X2_STOP_PIN == X_MAX_PIN + #define X2_MIN_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE + #elif X2_STOP_PIN == Y_MIN_PIN + #define X2_MIN_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE + #elif X2_STOP_PIN == Y_MAX_PIN + #define X2_MIN_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE + #elif X2_STOP_PIN == Z_MIN_PIN + #define X2_MIN_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE + #elif X2_STOP_PIN == Z_MAX_PIN + #define X2_MIN_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #endif #endif #endif #if !PIN_EXISTS(X2_MIN) @@ -807,18 +806,20 @@ #if ENABLED(Y_DUAL_ENDSTOPS) #if Y_HOME_TO_MAX #ifndef Y2_MAX_ENDSTOP_HIT_STATE - #if Y2_STOP_PIN == X_MIN_PIN - #define Y2_MAX_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Y2_STOP_PIN == X_MAX_PIN - #define Y2_MAX_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Y2_STOP_PIN == Y_MIN_PIN - #define Y2_MAX_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Y2_STOP_PIN == Y_MAX_PIN - #define Y2_MAX_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Y2_STOP_PIN == Z_MIN_PIN - #define Y2_MAX_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Y2_STOP_PIN == Z_MAX_PIN - #define Y2_MAX_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #if PIN_EXISTS(Y2_STOP) + #if Y2_STOP_PIN == X_MIN_PIN + #define Y2_MAX_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE + #elif Y2_STOP_PIN == X_MAX_PIN + #define Y2_MAX_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE + #elif Y2_STOP_PIN == Y_MIN_PIN + #define Y2_MAX_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE + #elif Y2_STOP_PIN == Y_MAX_PIN + #define Y2_MAX_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE + #elif Y2_STOP_PIN == Z_MIN_PIN + #define Y2_MAX_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE + #elif Y2_STOP_PIN == Z_MAX_PIN + #define Y2_MAX_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #endif #endif #endif #if !PIN_EXISTS(Y2_MAX) @@ -829,18 +830,20 @@ #endif #else #ifndef Y2_MIN_ENDSTOP_HIT_STATE - #if Y2_STOP_PIN == X_MIN_PIN - #define Y2_MIN_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Y2_STOP_PIN == X_MAX_PIN - #define Y2_MIN_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Y2_STOP_PIN == Y_MIN_PIN - #define Y2_MIN_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Y2_STOP_PIN == Y_MAX_PIN - #define Y2_MIN_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Y2_STOP_PIN == Z_MIN_PIN - #define Y2_MIN_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Y2_STOP_PIN == Z_MAX_PIN - #define Y2_MIN_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #if PIN_EXISTS(Y2_STOP) + #if Y2_STOP_PIN == X_MIN_PIN + #define Y2_MIN_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE + #elif Y2_STOP_PIN == X_MAX_PIN + #define Y2_MIN_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE + #elif Y2_STOP_PIN == Y_MIN_PIN + #define Y2_MIN_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE + #elif Y2_STOP_PIN == Y_MAX_PIN + #define Y2_MIN_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE + #elif Y2_STOP_PIN == Z_MIN_PIN + #define Y2_MIN_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE + #elif Y2_STOP_PIN == Z_MAX_PIN + #define Y2_MIN_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #endif #endif #endif #if !PIN_EXISTS(Y2_MIN) @@ -865,18 +868,20 @@ #if Z_HOME_TO_MAX #ifndef Z2_MAX_ENDSTOP_HIT_STATE - #if Z2_STOP_PIN == X_MIN_PIN - #define Z2_MAX_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Z2_STOP_PIN == X_MAX_PIN - #define Z2_MAX_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Z2_STOP_PIN == Y_MIN_PIN - #define Z2_MAX_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Z2_STOP_PIN == Y_MAX_PIN - #define Z2_MAX_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Z2_STOP_PIN == Z_MIN_PIN - #define Z2_MAX_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Z2_STOP_PIN == Z_MAX_PIN - #define Z2_MAX_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #if PIN_EXISTS(Z2_STOP) + #if Z2_STOP_PIN == X_MIN_PIN + #define Z2_MAX_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE + #elif Z2_STOP_PIN == X_MAX_PIN + #define Z2_MAX_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE + #elif Z2_STOP_PIN == Y_MIN_PIN + #define Z2_MAX_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE + #elif Z2_STOP_PIN == Y_MAX_PIN + #define Z2_MAX_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE + #elif Z2_STOP_PIN == Z_MIN_PIN + #define Z2_MAX_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE + #elif Z2_STOP_PIN == Z_MAX_PIN + #define Z2_MAX_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #endif #endif #endif #if !PIN_EXISTS(Z2_MAX) @@ -887,18 +892,20 @@ #endif #else #ifndef Z2_MIN_ENDSTOP_HIT_STATE - #if Z2_STOP_PIN == X_MIN_PIN - #define Z2_MIN_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Z2_STOP_PIN == X_MAX_PIN - #define Z2_MIN_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Z2_STOP_PIN == Y_MIN_PIN - #define Z2_MIN_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Z2_STOP_PIN == Y_MAX_PIN - #define Z2_MIN_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Z2_STOP_PIN == Z_MIN_PIN - #define Z2_MIN_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Z2_STOP_PIN == Z_MAX_PIN - #define Z2_MIN_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #if PIN_EXISTS(Z2_STOP) + #if Z2_STOP_PIN == X_MIN_PIN + #define Z2_MIN_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE + #elif Z2_STOP_PIN == X_MAX_PIN + #define Z2_MIN_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE + #elif Z2_STOP_PIN == Y_MIN_PIN + #define Z2_MIN_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE + #elif Z2_STOP_PIN == Y_MAX_PIN + #define Z2_MIN_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE + #elif Z2_STOP_PIN == Z_MIN_PIN + #define Z2_MIN_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE + #elif Z2_STOP_PIN == Z_MAX_PIN + #define Z2_MIN_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #endif #endif #endif #if !PIN_EXISTS(Z2_MIN) @@ -918,18 +925,20 @@ #if NUM_Z_STEPPERS >= 3 #if Z_HOME_TO_MAX #ifndef Z3_MAX_ENDSTOP_HIT_STATE - #if Z3_STOP_PIN == X_MIN_PIN - #define Z3_MAX_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Z3_STOP_PIN == X_MAX_PIN - #define Z3_MAX_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Z3_STOP_PIN == Y_MIN_PIN - #define Z3_MAX_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Z3_STOP_PIN == Y_MAX_PIN - #define Z3_MAX_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Z3_STOP_PIN == Z_MIN_PIN - #define Z3_MAX_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Z3_STOP_PIN == Z_MAX_PIN - #define Z3_MAX_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #if PIN_EXISTS(Z3_STOP) + #if Z3_STOP_PIN == X_MIN_PIN + #define Z3_MAX_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE + #elif Z3_STOP_PIN == X_MAX_PIN + #define Z3_MAX_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE + #elif Z3_STOP_PIN == Y_MIN_PIN + #define Z3_MAX_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE + #elif Z3_STOP_PIN == Y_MAX_PIN + #define Z3_MAX_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE + #elif Z3_STOP_PIN == Z_MIN_PIN + #define Z3_MAX_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE + #elif Z3_STOP_PIN == Z_MAX_PIN + #define Z3_MAX_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #endif #endif #endif #if !PIN_EXISTS(Z3_MAX) @@ -940,18 +949,20 @@ #endif #else #ifndef Z3_MIN_ENDSTOP_HIT_STATE - #if Z3_STOP_PIN == X_MIN_PIN - #define Z3_MIN_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Z3_STOP_PIN == X_MAX_PIN - #define Z3_MIN_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Z3_STOP_PIN == Y_MIN_PIN - #define Z3_MIN_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Z3_STOP_PIN == Y_MAX_PIN - #define Z3_MIN_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Z3_STOP_PIN == Z_MIN_PIN - #define Z3_MIN_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Z3_STOP_PIN == Z_MAX_PIN - #define Z3_MIN_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #if PIN_EXISTS(Z3_STOP) + #if Z3_STOP_PIN == X_MIN_PIN + #define Z3_MIN_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE + #elif Z3_STOP_PIN == X_MAX_PIN + #define Z3_MIN_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE + #elif Z3_STOP_PIN == Y_MIN_PIN + #define Z3_MIN_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE + #elif Z3_STOP_PIN == Y_MAX_PIN + #define Z3_MIN_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE + #elif Z3_STOP_PIN == Z_MIN_PIN + #define Z3_MIN_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE + #elif Z3_STOP_PIN == Z_MAX_PIN + #define Z3_MIN_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #endif #endif #endif #if !PIN_EXISTS(Z3_MIN) @@ -972,18 +983,20 @@ #if NUM_Z_STEPPERS >= 4 #if Z_HOME_TO_MAX #ifndef Z4_MAX_ENDSTOP_HIT_STATE - #if Z4_STOP_PIN == X_MIN_PIN - #define Z4_MAX_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Z4_STOP_PIN == X_MAX_PIN - #define Z4_MAX_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Z4_STOP_PIN == Y_MIN_PIN - #define Z4_MAX_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Z4_STOP_PIN == Y_MAX_PIN - #define Z4_MAX_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Z4_STOP_PIN == Z_MIN_PIN - #define Z4_MAX_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Z4_STOP_PIN == Z_MAX_PIN - #define Z4_MAX_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #if PIN_EXISTS(Z4_STOP) + #if Z4_STOP_PIN == X_MIN_PIN + #define Z4_MAX_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE + #elif Z4_STOP_PIN == X_MAX_PIN + #define Z4_MAX_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE + #elif Z4_STOP_PIN == Y_MIN_PIN + #define Z4_MAX_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE + #elif Z4_STOP_PIN == Y_MAX_PIN + #define Z4_MAX_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE + #elif Z4_STOP_PIN == Z_MIN_PIN + #define Z4_MAX_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE + #elif Z4_STOP_PIN == Z_MAX_PIN + #define Z4_MAX_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #endif #endif #endif #if !PIN_EXISTS(Z4_MAX) @@ -994,18 +1007,20 @@ #endif #else #ifndef Z4_MIN_ENDSTOP_HIT_STATE - #if Z4_STOP_PIN == X_MIN_PIN - #define Z4_MIN_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE - #elif Z4_STOP_PIN == X_MAX_PIN - #define Z4_MIN_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE - #elif Z4_STOP_PIN == Y_MIN_PIN - #define Z4_MIN_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE - #elif Z4_STOP_PIN == Y_MAX_PIN - #define Z4_MIN_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE - #elif Z4_STOP_PIN == Z_MIN_PIN - #define Z4_MIN_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE - #elif Z4_STOP_PIN == Z_MAX_PIN - #define Z4_MIN_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #if PIN_EXISTS(Z4_STOP) + #if Z4_STOP_PIN == X_MIN_PIN + #define Z4_MIN_ENDSTOP_HIT_STATE X_MIN_ENDSTOP_HIT_STATE + #elif Z4_STOP_PIN == X_MAX_PIN + #define Z4_MIN_ENDSTOP_HIT_STATE X_MAX_ENDSTOP_HIT_STATE + #elif Z4_STOP_PIN == Y_MIN_PIN + #define Z4_MIN_ENDSTOP_HIT_STATE Y_MIN_ENDSTOP_HIT_STATE + #elif Z4_STOP_PIN == Y_MAX_PIN + #define Z4_MIN_ENDSTOP_HIT_STATE Y_MAX_ENDSTOP_HIT_STATE + #elif Z4_STOP_PIN == Z_MIN_PIN + #define Z4_MIN_ENDSTOP_HIT_STATE Z_MIN_ENDSTOP_HIT_STATE + #elif Z4_STOP_PIN == Z_MAX_PIN + #define Z4_MIN_ENDSTOP_HIT_STATE Z_MAX_ENDSTOP_HIT_STATE + #endif #endif #endif #if !PIN_EXISTS(Z4_MIN) @@ -2330,6 +2345,138 @@ #endif #endif +#if !USE_X_MIN + #undef ENDSTOPPULLUP_XMIN + #undef ENDSTOPPULLDOWN_XMIN +#endif +#if !USE_X_MAX + #undef ENDSTOPPULLUP_XMAX + #undef ENDSTOPPULLDOWN_XMAX +#endif +#if !USE_Y_MIN + #undef ENDSTOPPULLUP_YMIN + #undef ENDSTOPPULLDOWN_YMIN +#endif +#if !USE_Y_MAX + #undef ENDSTOPPULLUP_YMAX + #undef ENDSTOPPULLDOWN_YMAX +#endif +#if !USE_Z_MIN + #undef ENDSTOPPULLUP_ZMIN + #undef ENDSTOPPULLDOWN_ZMIN +#endif +#if !USE_Z_MAX + #undef ENDSTOPPULLUP_ZMAX + #undef ENDSTOPPULLDOWN_ZMAX +#endif +#if !USE_I_MIN + #undef ENDSTOPPULLUP_IMIN + #undef ENDSTOPPULLDOWN_IMIN +#endif +#if !USE_I_MAX + #undef ENDSTOPPULLUP_IMAX + #undef ENDSTOPPULLDOWN_IMAX +#endif +#if !USE_J_MIN + #undef ENDSTOPPULLUP_JMIN + #undef ENDSTOPPULLDOWN_JMIN +#endif +#if !USE_J_MAX + #undef ENDSTOPPULLUP_JMAX + #undef ENDSTOPPULLDOWN_JMAX +#endif +#if !USE_K_MIN + #undef ENDSTOPPULLUP_KMIN + #undef ENDSTOPPULLDOWN_KMIN +#endif +#if !USE_K_MAX + #undef ENDSTOPPULLUP_KMAX + #undef ENDSTOPPULLDOWN_KMAX +#endif +#if !USE_U_MIN + #undef ENDSTOPPULLUP_UMIN + #undef ENDSTOPPULLDOWN_UMIN +#endif +#if !USE_U_MAX + #undef ENDSTOPPULLUP_UMAX + #undef ENDSTOPPULLDOWN_UMAX +#endif +#if !USE_V_MIN + #undef ENDSTOPPULLUP_VMIN + #undef ENDSTOPPULLDOWN_VMIN +#endif +#if !USE_V_MAX + #undef ENDSTOPPULLUP_VMAX + #undef ENDSTOPPULLDOWN_VMAX +#endif +#if !USE_W_MIN + #undef ENDSTOPPULLUP_WMIN + #undef ENDSTOPPULLDOWN_WMIN +#endif +#if !USE_W_MAX + #undef ENDSTOPPULLUP_WMAX + #undef ENDSTOPPULLDOWN_WMAX +#endif + +#define PCAT(P) P##_PIN +#define NEED_HIT_STATE(P) (USE_##P || (PIN_EXISTS(P##_PIN) && ((defined(X2_STOP_PIN) && X2_STOP_PIN == PCAT(P)) || (defined(Y2_STOP_PIN) && Y2_STOP_PIN == PCAT(P)) || (defined(Z2_STOP_PIN) && Z2_STOP_PIN == PCAT(P)) || (defined(Z3_STOP_PIN) && Z3_STOP_PIN == PCAT(P)) || (defined(Z4_STOP_PIN) && Z4_STOP_PIN == PCAT(P))))) +#if !NEED_HIT_STATE(X_MIN) + #undef X_MIN_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(X_MAX) + #undef X_MAX_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(Y_MIN) + #undef Y_MIN_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(Y_MAX) + #undef Y_MAX_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(Z_MIN) + #undef Z_MIN_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(Z_MAX) + #undef Z_MAX_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(I_MIN) + #undef I_MIN_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(I_MAX) + #undef I_MAX_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(J_MIN) + #undef J_MIN_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(J_MAX) + #undef J_MAX_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(K_MIN) + #undef K_MIN_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(K_MAX) + #undef K_MAX_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(U_MIN) + #undef U_MIN_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(U_MAX) + #undef U_MAX_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(V_MIN) + #undef V_MIN_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(V_MAX) + #undef V_MAX_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(W_MIN) + #undef W_MIN_ENDSTOP_HIT_STATE +#endif +#if !NEED_HIT_STATE(W_MAX) + #undef W_MAX_ENDSTOP_HIT_STATE +#endif +#undef NEED_HIT_STATE +#undef PCAT + // // ADC Temp Sensors (Thermistor or Thermocouple with amplifier ADC interface) // @@ -2557,8 +2704,10 @@ #if HAS_TEMP_COOLER && PIN_EXISTS(COOLER_AUTO_FAN) #define HAS_AUTO_COOLER_FAN 1 #endif - -#if ANY(HAS_AUTO_FAN_0, HAS_AUTO_FAN_1, HAS_AUTO_FAN_2, HAS_AUTO_FAN_3, HAS_AUTO_FAN_4, HAS_AUTO_FAN_5, HAS_AUTO_FAN_6, HAS_AUTO_FAN_7, HAS_AUTO_CHAMBER_FAN, HAS_AUTO_COOLER_FAN) +#if ANY(HAS_AUTO_FAN_0, HAS_AUTO_FAN_1, HAS_AUTO_FAN_2, HAS_AUTO_FAN_3, HAS_AUTO_FAN_4, HAS_AUTO_FAN_5, HAS_AUTO_FAN_6, HAS_AUTO_FAN_7) + #define HAS_E_AUTO_FAN 1 +#endif +#if ANY(HAS_E_AUTO_FAN, HAS_AUTO_CHAMBER_FAN, HAS_AUTO_COOLER_FAN) #define HAS_AUTO_FAN 1 #define _FANOVERLAP(I,T) (T##_AUTO_FAN_PIN == E##I##_AUTO_FAN_PIN) #if HAS_AUTO_CHAMBER_FAN @@ -2616,6 +2765,19 @@ #define HAS_AUTO_REPORTING 1 #endif +#if !HAS_AUTO_CHAMBER_FAN + #undef CHAMBER_AUTO_FAN_SPEED + #undef CHAMBER_AUTO_FAN_TEMPERATURE +#endif +#if !HAS_AUTO_COOLER_FAN + #undef COOLER_AUTO_FAN_SPEED + #undef COOLER_AUTO_FAN_TEMPERATURE +#endif +#if !HAS_E_AUTO_FAN + #undef EXTRUDER_AUTO_FAN_SPEED + #undef EXTRUDER_AUTO_FAN_TEMPERATURE +#endif + #if !HAS_AUTO_CHAMBER_FAN || AUTO_CHAMBER_IS_E #undef AUTO_POWER_CHAMBER_FAN #endif @@ -2734,6 +2896,10 @@ #if PIN_EXISTS(FANMUX0) #define HAS_FANMUX 1 // Part Cooling fan multipliexer +#else + #undef FANMUX0_PIN + #undef FANMUX1_PIN + #undef FANMUX2_PIN #endif /** @@ -2839,6 +3005,8 @@ #endif #if ANY(HAS_X_MS_PINS, HAS_X2_MS_PINS, HAS_Y_MS_PINS, HAS_Y2_MS_PINS, HAS_SOME_Z_MS_PINS, HAS_I_MS_PINS, HAS_J_MS_PINS, HAS_K_MS_PINS, HAS_U_MS_PINS, HAS_V_MS_PINS, HAS_W_MS_PINS, HAS_SOME_E_MS_PINS) #define HAS_MICROSTEPS 1 +#else + #undef MICROSTEP_MODES #endif /** @@ -3087,20 +3255,12 @@ * Bed Probing bounds */ -#ifndef PROBING_MARGIN - #define PROBING_MARGIN 0 -#endif - #if IS_KINEMATIC #undef PROBING_MARGIN_LEFT #undef PROBING_MARGIN_RIGHT #undef PROBING_MARGIN_FRONT #undef PROBING_MARGIN_BACK - #define PROBING_MARGIN_LEFT 0 - #define PROBING_MARGIN_RIGHT 0 - #define PROBING_MARGIN_FRONT 0 - #define PROBING_MARGIN_BACK 0 -#else +#elif PROBING_MARGIN #ifndef PROBING_MARGIN_LEFT #define PROBING_MARGIN_LEFT PROBING_MARGIN #endif @@ -3114,6 +3274,18 @@ #define PROBING_MARGIN_BACK PROBING_MARGIN #endif #endif +#ifndef PROBING_MARGIN_LEFT + #define PROBING_MARGIN_LEFT 0 +#endif +#ifndef PROBING_MARGIN_RIGHT + #define PROBING_MARGIN_RIGHT 0 +#endif +#ifndef PROBING_MARGIN_FRONT + #define PROBING_MARGIN_FRONT 0 +#endif +#ifndef PROBING_MARGIN_BACK + #define PROBING_MARGIN_BACK 0 +#endif #if ENABLED(DELTA) /** @@ -3133,10 +3305,6 @@ #endif #endif -#ifndef DEFAULT_LEVELING_FADE_HEIGHT - #define DEFAULT_LEVELING_FADE_HEIGHT 0.0 -#endif - #if ENABLED(SEGMENT_LEVELED_MOVES) && !defined(LEVELED_SEGMENT_LENGTH) #define LEVELED_SEGMENT_LENGTH 5 #endif @@ -3149,16 +3317,16 @@ // Probing points may be verified at compile time within the radius // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(PRINTABLE_RADIUS),"bad probe point!") // so that may be added to SanityCheck.h in the future. - #define _MESH_MIN_X (X_MIN_BED + (MESH_INSET)) - #define _MESH_MIN_Y (Y_MIN_BED + (MESH_INSET)) - #define _MESH_MAX_X (X_MAX_BED - (MESH_INSET)) - #define _MESH_MAX_Y (Y_MAX_BED - (MESH_INSET)) + #define _MESH_MIN_X (X_MIN_BED + _MESH_INSET) + #define _MESH_MIN_Y (Y_MIN_BED + _MESH_INSET) + #define _MESH_MAX_X (X_MAX_BED - _MESH_INSET) + #define _MESH_MAX_Y (Y_MAX_BED - _MESH_INSET) #else // Boundaries for Cartesian probing based on set limits - #define _MESH_MIN_X (_MAX(X_MIN_BED + (MESH_INSET), X_MIN_POS)) // UBL is careful not to probe off the bed. It doesn't - #define _MESH_MIN_Y (_MAX(Y_MIN_BED + (MESH_INSET), Y_MIN_POS)) // need NOZZLE_TO_PROBE_OFFSET in the mesh dimensions. - #define _MESH_MAX_X (_MIN(X_MAX_BED - (MESH_INSET), X_MAX_POS)) - #define _MESH_MAX_Y (_MIN(Y_MAX_BED - (MESH_INSET), Y_MAX_POS)) + #define _MESH_MIN_X (_MAX(X_MIN_BED + _MESH_INSET, X_MIN_POS)) // UBL is careful not to probe off the bed. It doesn't + #define _MESH_MIN_Y (_MAX(Y_MIN_BED + _MESH_INSET, Y_MIN_POS)) // need NOZZLE_TO_PROBE_OFFSET in the mesh dimensions. + #define _MESH_MAX_X (_MIN(X_MAX_BED - _MESH_INSET, X_MAX_POS)) + #define _MESH_MAX_Y (_MIN(Y_MAX_BED - _MESH_INSET, Y_MAX_POS)) #endif // These may be overridden in Configuration.h if a smaller area is desired diff --git a/Marlin/src/inc/MarlinConfigPre.h b/Marlin/src/inc/MarlinConfigPre.h index af75827bde..f629f5c258 100644 --- a/Marlin/src/inc/MarlinConfigPre.h +++ b/Marlin/src/inc/MarlinConfigPre.h @@ -34,7 +34,6 @@ #include "../HAL/platforms.h" #endif -#include "../core/macros.h" #include "../core/boards.h" #include "../../Configuration.h" //#include "../../../configurations/_Undef_Configuration.h" //**EXPERIMENTAL** Uncomment to use diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index 8dbed3145c..f2a59cb3ea 100644 --- a/Marlin/src/inc/Version.h +++ b/Marlin/src/inc/Version.h @@ -42,7 +42,7 @@ * version was tagged. */ #ifndef STRING_DISTRIBUTION_DATE - #define STRING_DISTRIBUTION_DATE "2024-08-03" + #define STRING_DISTRIBUTION_DATE "2024-08-13" #endif /** diff --git a/Marlin/src/lcd/dogm/dogm_Statusscreen.h b/Marlin/src/lcd/dogm/dogm_Statusscreen.h index c8edae94f1..6f2105f720 100644 --- a/Marlin/src/lcd/dogm/dogm_Statusscreen.h +++ b/Marlin/src/lcd/dogm/dogm_Statusscreen.h @@ -652,7 +652,7 @@ #if STATUS_BED_WIDTH && !STATUS_HEATERS_WIDTH #ifndef STATUS_BED_X - #define STATUS_BED_X (LCD_PIXEL_WIDTH - (STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH + STATUS_BED_BYTEWIDTH) * 8 - TERN0(STATUS_HEAT_PERCENT, 4)) + #define STATUS_BED_X (LCD_PIXEL_WIDTH - (STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH + STATUS_BED_BYTEWIDTH) * 8 MINUS_TERN0(STATUS_HEAT_PERCENT, 4)) #endif #ifndef STATUS_BED_HEIGHT diff --git a/Marlin/src/lcd/dogm/status/bed.h b/Marlin/src/lcd/dogm/status/bed.h index 27f5617ef7..c7e2c8e323 100644 --- a/Marlin/src/lcd/dogm/status/bed.h +++ b/Marlin/src/lcd/dogm/status/bed.h @@ -134,5 +134,5 @@ #endif #ifndef STATUS_BED_X - #define STATUS_BED_X (LCD_PIXEL_WIDTH - (STATUS_BED_BYTEWIDTH + STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8 - TERN0(STATUS_HEAT_PERCENT, 4)) + #define STATUS_BED_X (LCD_PIXEL_WIDTH - (STATUS_BED_BYTEWIDTH + STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8 MINUS_TERN0(STATUS_HEAT_PERCENT, 4)) #endif diff --git a/Marlin/src/lcd/e3v2/proui/bedlevel_tools.cpp b/Marlin/src/lcd/e3v2/proui/bedlevel_tools.cpp index 13911d36aa..0a890a4b76 100644 --- a/Marlin/src/lcd/e3v2/proui/bedlevel_tools.cpp +++ b/Marlin/src/lcd/e3v2/proui/bedlevel_tools.cpp @@ -28,11 +28,7 @@ #include "../../../module/probe.h" #include "../../../gcode/gcode.h" #include "../../../module/planner.h" -#include "../../../gcode/queue.h" -#include "../../../libs/least_squares_fit.h" -#include "../../../libs/vector_3.h" -#include "dwin_popup.h" #include "bedlevel_tools.h" #define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE) @@ -48,6 +44,8 @@ uint8_t BedLevelToolsClass::tilt_grid = 2; bool drawing_mesh = false; #if ENABLED(AUTO_BED_LEVELING_UBL) +#include "../../../libs/least_squares_fit.h" +#include "../../../libs/vector_3.h" bool BedLevelToolsClass::create_plane_from_mesh() { struct linear_fit_data lsf_results; @@ -104,23 +102,17 @@ void BedLevelToolsClass::manual_value_update(const uint8_t mesh_x, const uint8_t void BedLevelToolsClass::manual_move(const uint8_t mesh_x, const uint8_t mesh_y, bool zmove/*=false*/) { gcode.process_subcommands_now(F("G28O")); - if (zmove) { - planner.synchronize(); - current_position.z = goto_mesh_value ? bedlevel.z_values[mesh_x][mesh_y] : Z_CLEARANCE_BETWEEN_PROBES; - planner.buffer_line(current_position, homing_feedrate(Z_AXIS), active_extruder); - planner.synchronize(); - } - else { + if (!zmove) { DWIN_Show_Popup(ICON_BLTouch, F("Moving to Point"), F("Please wait until done.")); HMI_SaveProcessID(NothingToDo); - gcode.process_subcommands_now(F("G0F600Z" STRINGIFY(Z_CLEARANCE_BETWEEN_PROBES))); + gcode.process_subcommands_now(TS(F("G0F600Z"), p_float_t(Z_CLEARANCE_BETWEEN_PROBES, 3))); //gcode.process_subcommands_now(F("G0F600Z" STRINGIFY(Z_CLEARANCE_BETWEEN_PROBES))); gcode.process_subcommands_now(TS(F("G42F4000I"), mesh_x, F("J"), mesh_y)); - planner.synchronize(); - current_position.z = goto_mesh_value ? bedlevel.z_values[mesh_x][mesh_y] : Z_CLEARANCE_BETWEEN_PROBES; - planner.buffer_line(current_position, homing_feedrate(Z_AXIS), active_extruder); - planner.synchronize(); - HMI_ReturnScreen(); } + planner.synchronize(); + current_position.z = goto_mesh_value ? bedlevel.z_values[mesh_x][mesh_y] : Z_CLEARANCE_BETWEEN_PROBES; + planner.buffer_line(current_position, homing_feedrate(Z_AXIS), active_extruder); + planner.synchronize(); + if (!zmove) HMI_ReturnScreen(); } // Move / Probe methods @@ -212,6 +204,17 @@ bool BedLevelToolsClass::meshValidate() { : uint16_t(round(0x3F * -z / rmax)) << 5) // Green for negative mesh point | _MIN(0x1F, (uint8_t(abs(z) * 0.4))) // + Blue stepping for every mm ); // RGB565 colors: https://rgbcolorpicker.com/565 + + /* + const int16_t v = round(z * 100); + const uint16_t color = isnan(z) ? Color_Grey : DWINUI::RainbowInt(v, -rmax, rmax); + const uint16_t color = isnan(z) ? Color_Grey : ( // Gray if undefined + (z > 0 ? uint16_t(round(0x1F * z / rmax)) << 11 // Red for positive mesh point + : uint16_t(round(0x3F * -z / rmax)) << 5) // Green for negative mesh point + | _MIN(0x1F, (uint8_t(abs(z) * 0.4))) // + Blue stepping for every mm + ); // RGB565 colors: https://rgbcolorpicker.com/565 + */ + DWIN_Draw_Rectangle(1, color, start_x_px, start_y_px, end_x_px, end_y_px); safe_delay(10); LCD_SERIAL.flushTX(); diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 5121558ae9..d0cf47c6ad 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -1901,8 +1901,8 @@ void DWIN_HomingDone() { void DWIN_Print_Started() { DEBUG_ECHOLNPGM("DWIN_Print_Started: ", SD_Printing()); TERN_(HAS_GCODE_PREVIEW, if (Host_Printing()) { preview.invalidate(); }) - ui.progress_reset(); - ui.reset_remaining_time(); + TERN_(SET_PROGRESS_PERCENT, ui.progress_reset();) + TERN_(SET_REMAINING_TIME, ui.reset_remaining_time();) HMI_flag.pause_flag = false; HMI_flag.abort_flag = false; select_print.reset(); @@ -1935,11 +1935,10 @@ void DWIN_Print_Finished() { #ifdef SD_FINISHED_RELEASECOMMAND queue.inject(F(SD_FINISHED_RELEASECOMMAND)); #else - const_float_t zpos = current_position.z + TERN(NOZZLE_PARK_FEATURE, - NOZZLE_PARK_Z_RAISE_MIN, Z_POST_CLEARANCE); + const_float_t zpos = current_position.z + TERN(NOZZLE_PARK_FEATURE, NOZZLE_PARK_Z_RAISE_MIN, Z_POST_CLEARANCE); _MIN(zpos, Z_MAX_POS); const int16_t ypos = TERN(NOZZLE_PARK_FEATURE, TERN(PROUI_EX, PRO_data.Park_point.y, DEF_NOZZLE_PARK_POINT.y), Y_MAX_POS); - queue.inject(TS(F("G0F600Z"), zpos, F("\nG0F2000Y"), ypos)); + queue.inject(TS(F("G0F600Z"), zpos, F("\nG0F2000Y"), ypos, F("\nM400"))); #endif } } @@ -2680,7 +2679,7 @@ void ApplyMove() { #else void RaiseHead() { LCD_MESSAGE(MSG_TOOL_CHANGE_ZLIFT); - gcode.process_subcommands_now(TS(F("G0F600Z"), float(_MIN(current_position.z + (Z_POST_CLEARANCE), Z_MAX_POS)))); + gcode.process_subcommands_now(TS(F("G0F600Z"), float(_MIN(current_position.z + (Z_POST_CLEARANCE), Z_MAX_POS, F("\nM400"))))); } #endif @@ -2842,6 +2841,7 @@ TERN(HAS_BED_PROBE, float, void) tram(uint8_t point OPTARG(HAS_BED_PROBE, bool s F("G90\nG0F600Z" STRINGIFY(Z_CLEARANCE_BETWEEN_PROBES) "\nG0F5000X"), p_float_t(xpos, 1), F("Y"), p_float_t(ypos, 1), F("\nG0F600Z0") #endif )); + planner.synchronize(); } else { if (stow_probe) { probe.stow(); } @@ -2862,6 +2862,7 @@ TERN(HAS_BED_PROBE, float, void) tram(uint8_t point OPTARG(HAS_BED_PROBE, bool s F("G90\nG0F600Z" STRINGIFY(Z_CLEARANCE_BETWEEN_PROBES) "\nG0F5000X"), p_float_t(xpos, 1), F("Y"), p_float_t(ypos, 1), F("\nG0F600Z0") #endif )); + planner.synchronize(); #endif // HAS_BED_PROBE } // Bed Tramming @@ -2968,7 +2969,7 @@ TERN(HAS_BED_PROBE, float, void) tram(uint8_t point OPTARG(HAS_BED_PROBE, bool s #if ENABLED(MESH_BED_LEVELING) void ManualMeshStart() { - LCD_MESSAGE(MSG_UBL_BUILD_MESH_MENU); + LCD_MESSAGE(MSG_UBL_CONTINUE_MESH); gcode.process_subcommands_now(F("G28XYO\nG28Z\nM211S0\nG29S1")); #ifdef MANUAL_PROBE_START_Z const uint8_t line = CurrentMenu->line(MMeshMoveZItem->pos); @@ -3483,7 +3484,7 @@ void Draw_Tune_Menu() { FanSpeedItem = EDIT_ITEM(ICON_FanSpeed, MSG_FAN_SPEED, onDrawPInt8Menu, SetFanSpeed, &thermalManager.fan_speed[EXT]); #endif #if HAS_ZOFFSET_ITEM && ANY(BABYSTEP_ZPROBE_OFFSET, JUST_BABYSTEP) - EDIT_ITEM(ICON_Zoffset, MSG_ZPROBE_ZOFFSET, onDrawPFloat2Menu, SetZOffset, &BABY_Z_VAR); + EDIT_ITEM(ICON_Zoffset, MSG_ZOFFSET, onDrawPFloat2Menu, SetZOffset, &BABY_Z_VAR); #endif #if ALL(PROUI_TUNING_GRAPH, PROUI_ITEM_PLOT) #if ANY(PIDTEMP, MPCTEMP) @@ -4519,10 +4520,10 @@ void Draw_MaxAccel_Menu() { void HostShutDown() { Goto_Popup(PopUp_HostShutDown, OnClick_HostShutDown); } #endif -#if ENABLED(DEBUG_DWIN) - void DWIN_Debug(PGM_P msg) { - DEBUG_ECHOLNPGM_P(msg); - DWIN_Popup_Continue(ICON_Control_1, STR_DEBUG_PREFIX, msg); +#if DEBUG_DWIN + void DWIN_Debug(PGM_P msg1, PGM_P msg2, PGM_P msg3, PGM_P msg4) { + DEBUG_ECHOLNPGM_P(msg1, msg2, msg3, msg4); + DWIN_Debug_Popup(msg1, msg2, msg3, msg4); wait_for_user_response(); Draw_Main_Area(); } @@ -4591,7 +4592,7 @@ void Draw_AdvancedSettings_Menu() { checkkey = Menu; if (SET_MENU(AdvancedSettings, MSG_MESH_LEVELING, 10)) { BACK_ITEM(Goto_Main_Menu); - MENU_ITEM(ICON_ManualMesh, MSG_UBL_CONTINUE_MESH, onDrawMenuItem, ManualMeshStart); + MENU_ITEM(ICON_ManualMesh, MSG_MANUAL_MESH, onDrawMenuItem, ManualMeshStart); MMeshMoveZItem = EDIT_ITEM(ICON_Zoffset, MSG_MESH_EDIT_Z, onDrawPFloat2Menu, SetMMeshMoveZ, ¤t_position.z); MENU_ITEM(ICON_AxisD, MSG_LEVEL_BED_NEXT_POINT, onDrawMenuItem, ManualMeshContinue); MENU_ITEM(ICON_PrintSize, MSG_MESH_SETTINGS, onDrawSubMenu, Draw_MeshSet_Menu); diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 1ef3483ed8..129d26b772 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -240,6 +240,7 @@ void Init(); void DWIN_InitScreen(); void DWIN_HandleScreen(); void DWIN_CheckStatusMessage(); +void DWIN_DrawStatusMessage(); void DWIN_HomingStart(); void DWIN_HomingDone(); void DWIN_Print_Started(); @@ -404,5 +405,5 @@ void Draw_MaxAccel_Menu(); #endif #if DEBUG_DWIN - void DWIN_Debug(PGM_P msg); + void DWIN_Debug(PGM_P msg1=nullptr, PGM_P msg2=nullptr, PGM_P msg3=nullptr, PGM_P msg4=nullptr); #endif diff --git a/Marlin/src/lcd/e3v2/proui/dwin_popup.h b/Marlin/src/lcd/e3v2/proui/dwin_popup.h index 0ac4882eaf..733f603d8b 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin_popup.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_popup.h @@ -81,3 +81,19 @@ void DWIN_Popup_Continue(const uint8_t icon, T amsg1, U amsg2) { HMI_SaveProcessID(WaitResponse); DWIN_Show_Popup(icon, amsg1, amsg2, BTN_Continue); // Button Continue } + +#if DEBUG_DWIN + template + void DWIN_Debug_Popup(T amsg1=nullptr, U amsg2=nullptr, V amsg3=nullptr, W amsg4=nullptr) { + HMI_SaveProcessID(WaitResponse); + DWINUI::ClearMainArea(); + Draw_Popup_Bkgd(); + DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 160, STR_DEBUG_PREFIX); + if (amsg1) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 180, amsg1); + if (amsg2) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 210, amsg2); + if (amsg3) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 240, amsg3); + if (amsg4) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 270, amsg4); + DWINUI::Draw_Button(BTN_Confirm, 86, 300, true); + DWIN_UpdateLCD(); + } +#endif diff --git a/Marlin/src/lcd/e3v2/proui/proui.h b/Marlin/src/lcd/e3v2/proui/proui.h index 29b6c2d6af..b736c9c106 100644 --- a/Marlin/src/lcd/e3v2/proui/proui.h +++ b/Marlin/src/lcd/e3v2/proui/proui.h @@ -234,4 +234,4 @@ typedef struct { extern HMI_data_t HMI_data; -static constexpr size_t eeprom_data_size = sizeof(HMI_data_t) + TERN0(PROUI_EX, sizeof(PRO_data_t)); +static constexpr size_t eeprom_data_size = sizeof(HMI_data_t) PLUS_TERN0(PROUI_EX, sizeof(PRO_data_t)); diff --git a/Marlin/src/lcd/extui/ia_creality/ia_creality_rts.cpp b/Marlin/src/lcd/extui/ia_creality/ia_creality_rts.cpp index 557d4f8579..00249ff08f 100644 --- a/Marlin/src/lcd/extui/ia_creality/ia_creality_rts.cpp +++ b/Marlin/src/lcd/extui/ia_creality/ia_creality_rts.cpp @@ -1622,6 +1622,9 @@ void RTS::handleData() { float meshVal = float(recdat.data[0] - (recdat.data[0] >= 32768 ? 65536 : 0)) / 1000; + #ifndef Z_PROBE_LOW_POINT + #define Z_PROBE_LOW_POINT -2 + #endif LIMIT(meshVal, Z_PROBE_LOW_POINT, Z_CLEARANCE_BETWEEN_PROBES); xy_uint8_t point = { xPnt, yPnt }; setMeshPoint(point, meshVal); diff --git a/Marlin/src/lcd/extui/mks_ui/draw_number_key.cpp b/Marlin/src/lcd/extui/mks_ui/draw_number_key.cpp index 448062d47c..7ca15e712e 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_number_key.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_number_key.cpp @@ -71,6 +71,7 @@ static void disp_key_value() { TERN_(HAS_TRINAMIC_CONFIG, float milliamps); switch (value) { + default: break; case PrintAcceleration: dtostrf(planner.settings.acceleration, 1, 1, public_buf_m); break; @@ -223,6 +224,7 @@ static void disp_key_value() { static void set_value_confirm() { switch (value) { + default: break; case PrintAcceleration: planner.settings.acceleration = atof(key_value); break; case RetractAcceleration: planner.settings.retract_acceleration = atof(key_value); break; case TravelAcceleration: planner.settings.travel_acceleration = atof(key_value); break; diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp index cb740dc423..c95113bd75 100644 --- a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp +++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp @@ -92,35 +92,24 @@ lv_point_t line_points[4][2] = { {{PARA_UI_POS_X, PARA_UI_POS_Y*3 + PARA_UI_SIZE_Y}, {TFT_WIDTH, PARA_UI_POS_Y*3 + PARA_UI_SIZE_Y}}, {{PARA_UI_POS_X, PARA_UI_POS_Y*4 + PARA_UI_SIZE_Y}, {TFT_WIDTH, PARA_UI_POS_Y*4 + PARA_UI_SIZE_Y}} }; +enum CfgLang : uint8_t { + LANG_en = LANG_ENGLISH, + LANG_zh_CN = LANG_SIMPLE_CHINESE, + LANG_zh_TW = LANG_COMPLEX_CHINESE, + LANG_jp_kana = LANG_JAPAN, + LANG_de = LANG_GERMAN, + LANG_fr = LANG_FRENCH, + LANG_ru = LANG_RUSSIAN, + LANG_ko_KR = LANG_KOREAN, + LANG_tr = LANG_TURKISH, + LANG_es = LANG_SPANISH, + LANG_el = LANG_GREEK, + LANG_it = LANG_ITALY, + LANG_pt = LANG_PORTUGUESE +}; void gCfgItems_init() { gCfgItems.multiple_language = MULTI_LANGUAGE_ENABLE; - #if 1 // LCD_LANGUAGE == en - gCfgItems.language = LANG_ENGLISH; - #elif LCD_LANGUAGE == zh_CN - gCfgItems.language = LANG_SIMPLE_CHINESE; - #elif LCD_LANGUAGE == zh_TW - gCfgItems.language = LANG_COMPLEX_CHINESE; - #elif LCD_LANGUAGE == jp_kana - gCfgItems.language = LANG_JAPAN; - #elif LCD_LANGUAGE == de - gCfgItems.language = LANG_GERMAN; - #elif LCD_LANGUAGE == fr - gCfgItems.language = LANG_FRENCH; - #elif LCD_LANGUAGE == ru - gCfgItems.language = LANG_RUSSIAN; - #elif LCD_LANGUAGE == ko_KR - gCfgItems.language = LANG_KOREAN; - #elif LCD_LANGUAGE == tr - gCfgItems.language = LANG_TURKISH; - #elif LCD_LANGUAGE == es - gCfgItems.language = LANG_SPANISH; - #elif LCD_LANGUAGE == el - gCfgItems.language = LANG_GREEK; - #elif LCD_LANGUAGE == it - gCfgItems.language = LANG_ITALY; - #elif LCD_LANGUAGE == pt - gCfgItems.language = LANG_PORTUGUESE; - #endif + gCfgItems.language = CAT(LANG_, LCD_LANGUAGE); gCfgItems.leveling_mode = 0; gCfgItems.from_flash_pic = false; gCfgItems.curFilesize = 0; diff --git a/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp b/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp index 19b2cd8597..e3f748bf8d 100644 --- a/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp +++ b/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp @@ -38,8 +38,10 @@ #include "../../../sd/cardreader.h" #include "../../../module/planner.h" #include "../../../module/servo.h" -#include "../../../module/probe.h" +#if HAS_Z_SERVO_PROBE + #include "../../../module/probe.h" +#endif #if DISABLED(EMERGENCY_PARSER) #include "../../../module/motion.h" #endif diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index 77de555379..ae7702e8a4 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -50,7 +50,6 @@ #include "../../gcode/gcode.h" #include "../../module/motion.h" #include "../../module/planner.h" -#include "../../module/probe.h" #include "../../module/temperature.h" #include "../../module/printcounter.h" #include "../../libs/duration_t.h" @@ -82,6 +81,10 @@ #include "../../feature/backlash.h" #endif +#if HAS_BED_PROBE + #include "../../module/probe.h" +#endif + #if HAS_LEVELING #include "../../feature/bedlevel/bedlevel.h" #endif diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 8230a7678b..b97729ad42 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -141,12 +141,14 @@ namespace LanguageNarrow_en { LSTR MSG_PREHEAT_1_ALL = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" All"); LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Bed"); LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Settings"); + LSTR MSG_PREHEAT_2 = _UxGT("Preheat ") PREHEAT_2_LABEL; LSTR MSG_PREHEAT_2_SETTINGS = _UxGT("Preheat ") PREHEAT_2_LABEL _UxGT(" Settings"); LSTR MSG_PREHEAT_3 = PREHEAT_3_LABEL; LSTR MSG_PREHEAT_3_SETTINGS = PREHEAT_3_LABEL _UxGT(" Settings"); LSTR MSG_PREHEAT_4 = _UxGT("Preheat ") PREHEAT_4_LABEL; LSTR MSG_PREHEAT_4_SETTINGS = _UxGT("Preheat ") PREHEAT_4_LABEL _UxGT(" Settings"); + LSTR MSG_PREHEAT_M = _UxGT("Preheat $"); LSTR MSG_PREHEAT_M_H = _UxGT("Preheat $ ~"); LSTR MSG_PREHEAT_M_END = _UxGT("Preheat $ End"); @@ -351,7 +353,7 @@ namespace LanguageNarrow_en { LSTR MSG_NOZZLE_N = _UxGT("Nozzle ~"); LSTR MSG_NOZZLE_PARKED = _UxGT("Nozzle Parked"); LSTR MSG_NOZZLE_STANDBY = _UxGT("Nozzle Standby"); - LSTR MSG_NOZZLE_CLEAN = _UxGT("Clean and press continue"); + LSTR MSG_NOZZLE_CLEAN = _UxGT("Clean and Press Continue"); LSTR MSG_BED = _UxGT("Bed"); LSTR MSG_CHAMBER = _UxGT("Enclosure"); LSTR MSG_COOLER = _UxGT("Laser Coolant"); @@ -655,10 +657,10 @@ namespace LanguageNarrow_en { LSTR MSG_ZPROBE_OFFSETS = _UxGT("Probe Offsets"); LSTR MSG_ZPROBE_XOFFSET = _UxGT("Probe X Offset"); LSTR MSG_ZPROBE_YOFFSET = _UxGT("Probe Y Offset"); - LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z-Offset"); + LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Probe Z Offset"); LSTR MSG_ZPROBE_MARGIN = _UxGT("Probe Margin"); LSTR MSG_ZPROBE_MULTIPLE = _UxGT("Multiple Probing"); - LSTR MSG_ZOFFSET = _UxGT("Z Offset"); + LSTR MSG_ZOFFSET = _UxGT("Z-Offset"); LSTR MSG_Z_FEED_RATE = _UxGT("Z Feed Rate"); LSTR MSG_ENABLE_HS_MODE = _UxGT("Enable HS Mode"); LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Center Nozzle on Bed"); @@ -707,7 +709,7 @@ namespace LanguageNarrow_en { LSTR MSG_BILINEAR_LEVELING = _UxGT("Bilinear Leveling"); LSTR MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling"); LSTR MSG_MESH_LEVELING = _UxGT("Mesh Leveling"); - LSTR MSG_MESH_DONE = _UxGT("Mesh probing done"); + LSTR MSG_MESH_DONE = _UxGT("Mesh Probing Done"); LSTR MSG_MESH_POINTS = _UxGT("Mesh Points"); LSTR MSG_MESH_SETTINGS = _UxGT("Mesh Settings"); LSTR MSG_INFO_PRINTER_STATS_MENU = _UxGT("Printer Stats"); diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 59d534c407..6b68f1af24 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -65,10 +65,10 @@ MarlinUI ui; constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; #if ALL(PROUI_MESH_EDIT, HAS_MESH) - float MarlinUI::mesh_min_x = TERN(PROUI_EX, PRO_data, HMI_data).mesh_min_x; - float MarlinUI::mesh_max_x = TERN(PROUI_EX, PRO_data, HMI_data).mesh_max_x; - float MarlinUI::mesh_min_y = TERN(PROUI_EX, PRO_data, HMI_data).mesh_min_y; - float MarlinUI::mesh_max_y = TERN(PROUI_EX, PRO_data, HMI_data).mesh_max_y; + float MarlinUI::mesh_min_x = DEF_MESH_MIN_X; + float MarlinUI::mesh_max_x = DEF_MESH_MAX_X; + float MarlinUI::mesh_min_y = DEF_MESH_MIN_Y; + float MarlinUI::mesh_max_y = DEF_MESH_MAX_Y; #endif #ifdef BED_SCREW_INSET @@ -842,7 +842,7 @@ void MarlinUI::init() { // Add a manual move to the queue? if (axis == NO_AXIS_ENUM || PENDING(millis(), start_time) || planner.is_full()) return; - const feedRate_t fr_mm_s = (axis < LOGICAL_AXES) ? manual_feedrate_mm_s[axis] : XY_PROBE_FEEDRATE_MM_S; + const feedRate_t fr_mm_s = (axis < LOGICAL_AXES) ? manual_feedrate_mm_s[axis] : PLANNER_XY_FEEDRATE_MM_S; /** * For a rotational axis apply the "inch" to "mm" conversion factor. This mimics behaviour of the G-code G1 @@ -1647,7 +1647,7 @@ void MarlinUI::host_notify(const char * const cstr) { TERN_(STATUS_MESSAGE_SCROLLING, reset_status_scroll()); TERN_(EXTENSIBLE_UI, ExtUI::onStatusChanged(status_message)); - TERN_(DWIN_LCD_PROUI, DWIN_CheckStatusMessage()); + TERN_(DWIN_LCD_PROUI, DWIN_CheckStatusMessage(); DWIN_DrawStatusMessage();); } #if ENABLED(STATUS_MESSAGE_SCROLLING) diff --git a/Marlin/src/lcd/menu/menu_motion.cpp b/Marlin/src/lcd/menu/menu_motion.cpp index 08676ce50e..5ec2948129 100644 --- a/Marlin/src/lcd/menu/menu_motion.cpp +++ b/Marlin/src/lcd/menu/menu_motion.cpp @@ -416,9 +416,9 @@ void menu_move() { void menu_ft_motion() { // Define stuff ahead of the menu loop - MString<20> shaper_name[1 + ENABLED(HAS_Y_AXIS)] {}; + MString<20> shaper_name[NUM_AXES_SHAPED] {}; #if HAS_X_AXIS - for (uint_fast8_t a = X_AXIS; a <= TERN(HAS_Y_AXIS, Y_AXIS, X_AXIS); ++a) + for (uint_fast8_t a = X_AXIS; a < NUM_AXES_SHAPED; ++a) shaper_name[a] = get_shaper_name(AxisEnum(a)); #endif #if HAS_DYNAMIC_FREQ @@ -441,10 +441,10 @@ void menu_move() { SUBMENU_N(X_AXIS, MSG_FTM_CMPN_MODE, menu_ftm_cmpn_x); MENU_ITEM_ADDON_START_RJ(5); lcd_put_u8str(shaper_name[X_AXIS]); MENU_ITEM_ADDON_END(); - if (CMPNSTR_HAS_SHAPER(X_AXIS)) { + if (AXIS_HAS_SHAPER(X)) { EDIT_ITEM_FAST_N(float42_52, X_AXIS, MSG_FTM_BASE_FREQ_N, &c.baseFreq[X_AXIS], FTM_MIN_SHAPE_FREQ, (FTM_FS) / 2, ftMotion.update_shaping_params); EDIT_ITEM_FAST_N(float42_52, X_AXIS, MSG_FTM_ZETA_N, &c.zeta[0], 0.0f, 1.0f, ftMotion.update_shaping_params); - if (CMPNSTR_IS_EISHAPER(X_AXIS)) + if (AXIS_HAS_EISHAPER(X)) EDIT_ITEM_FAST_N(float42_52, X_AXIS, MSG_FTM_VTOL_N, &c.vtol[0], 0.0f, 1.0f, ftMotion.update_shaping_params); } #endif @@ -452,10 +452,10 @@ void menu_move() { SUBMENU_N(Y_AXIS, MSG_FTM_CMPN_MODE, menu_ftm_cmpn_y); MENU_ITEM_ADDON_START_RJ(5); lcd_put_u8str(shaper_name[Y_AXIS]); MENU_ITEM_ADDON_END(); - if (CMPNSTR_HAS_SHAPER(Y_AXIS)) { + if (AXIS_HAS_SHAPER(Y)) { EDIT_ITEM_FAST_N(float42_52, Y_AXIS, MSG_FTM_BASE_FREQ_N, &c.baseFreq[Y_AXIS], FTM_MIN_SHAPE_FREQ, (FTM_FS) / 2, ftMotion.update_shaping_params); EDIT_ITEM_FAST_N(float42_52, Y_AXIS, MSG_FTM_ZETA_N, &c.zeta[1], 0.0f, 1.0f, ftMotion.update_shaping_params); - if (CMPNSTR_IS_EISHAPER(Y_AXIS)) + if (AXIS_HAS_EISHAPER(Y)) EDIT_ITEM_FAST_N(float42_52, Y_AXIS, MSG_FTM_VTOL_N, &c.vtol[1], 0.0f, 1.0f, ftMotion.update_shaping_params); } #endif @@ -483,9 +483,9 @@ void menu_move() { void menu_tune_ft_motion() { // Define stuff ahead of the menu loop - MString<20> shaper_name[1 + ENABLED(HAS_Y_AXIS)] {}; + MString<20> shaper_name[NUM_AXES_SHAPED] {}; #if HAS_X_AXIS - for (uint_fast8_t a = X_AXIS; a <= TERN(HAS_Y_AXIS, Y_AXIS, X_AXIS); ++a) + for (uint_fast8_t a = X_AXIS; a < NUM_AXES_SHAPED; ++a) shaper_name[a] = get_shaper_name(AxisEnum(a)); #endif #if HAS_DYNAMIC_FREQ diff --git a/Marlin/src/lcd/tft/ui_color_ui.cpp b/Marlin/src/lcd/tft/ui_color_ui.cpp index c30ffb8dbf..3d589bfb6a 100644 --- a/Marlin/src/lcd/tft/ui_color_ui.cpp +++ b/Marlin/src/lcd/tft/ui_color_ui.cpp @@ -247,21 +247,21 @@ void MarlinUI::draw_status_screen() { tft.set_background(COLOR_BACKGROUND); tft.add_rectangle(0, 0, COORDINATES_W, COORDINATES_H, COLOR_AXIS_HOMED); - #if ENABLED(HAS_X_AXIS) && defined(X_MARK_X) && defined(X_MARK_Y) && defined(X_VALUE_X) && defined(X_VALUE_Y) + #if HAS_X_AXIS && defined(X_MARK_X) && defined(X_MARK_Y) && defined(X_VALUE_X) && defined(X_VALUE_Y) tft.add_text(X_MARK_X, X_MARK_Y, COLOR_AXIS_HOMED , "X"); const bool nhx = axis_should_home(X_AXIS); tft_string.set(blink && nhx ? "?" : ftostr4sign(LOGICAL_X_POSITION(current_position.x))); tft.add_text(X_VALUE_X, X_VALUE_Y, nhx ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); #endif - #if ENABLED(HAS_Y_AXIS) && defined(Y_MARK_X) && defined(Y_MARK_Y) && defined(Y_VALUE_X) && defined(Y_VALUE_Y) + #if HAS_Y_AXIS && defined(Y_MARK_X) && defined(Y_MARK_Y) && defined(Y_VALUE_X) && defined(Y_VALUE_Y) tft.add_text(Y_MARK_X, Y_MARK_Y, COLOR_AXIS_HOMED , "Y"); const bool nhy = axis_should_home(Y_AXIS); tft_string.set(blink && nhy ? "?" : ftostr4sign(LOGICAL_Y_POSITION(current_position.y))); tft.add_text(Y_VALUE_X, Y_VALUE_Y, nhy ? COLOR_AXIS_NOT_HOMED : COLOR_AXIS_HOMED, tft_string); #endif - #if ENABLED(HAS_Z_AXIS) && defined(Z_MARK_X) && defined(Z_MARK_Y) && defined(Z_VALUE_X) && defined(Z_VALUE_Y) && defined(Z_VALUE_OFFSET) + #if HAS_Z_AXIS && defined(Z_MARK_X) && defined(Z_MARK_Y) && defined(Z_VALUE_X) && defined(Z_VALUE_Y) && defined(Z_VALUE_OFFSET) tft.add_text(Z_MARK_X, Z_MARK_Y, COLOR_AXIS_HOMED , "Z"); uint16_t offset = Z_VALUE_OFFSET; const bool nhz = axis_should_home(Z_AXIS); diff --git a/Marlin/src/module/ft_motion.cpp b/Marlin/src/module/ft_motion.cpp index ec06f8b74b..e1aa776ea5 100644 --- a/Marlin/src/module/ft_motion.cpp +++ b/Marlin/src/module/ft_motion.cpp @@ -349,15 +349,13 @@ void FTMotion::loop() { void FTMotion::update_shaping_params() { #if HAS_X_AXIS - shaping.x.ena = CMPNSTR_HAS_SHAPER(X_AXIS); - if (shaping.x.ena) { + if ((shaping.x.ena = AXIS_HAS_SHAPER(X))) { shaping.x.set_axis_shaping_A(cfg.shaper[X_AXIS], cfg.zeta[X_AXIS], cfg.vtol[X_AXIS]); shaping.x.set_axis_shaping_N(cfg.shaper[X_AXIS], cfg.baseFreq[X_AXIS], cfg.zeta[X_AXIS]); } #endif #if HAS_Y_AXIS - shaping.y.ena = CMPNSTR_HAS_SHAPER(Y_AXIS); - if (shaping.y.ena) { + if ((shaping.y.ena = AXIS_HAS_SHAPER(Y))) { shaping.y.set_axis_shaping_A(cfg.shaper[Y_AXIS], cfg.zeta[Y_AXIS], cfg.vtol[Y_AXIS]); shaping.y.set_axis_shaping_N(cfg.shaper[Y_AXIS], cfg.baseFreq[Y_AXIS], cfg.zeta[Y_AXIS]); } @@ -664,7 +662,7 @@ void FTMotion::makeVector() { * - Tests for delta are moved outside the loop. * - Two functions are used for command computation with an array of function pointers. */ -static void (*command_set[SUM_TERN(HAS_EXTRUDERS, NUM_AXES, 1)])(int32_t&, int32_t&, ft_command_t&, int32_t, int32_t); +static void (*command_set[LOGICAL_AXES])(int32_t&, int32_t&, ft_command_t&, int32_t, int32_t); static void command_set_pos(int32_t &e, int32_t &s, ft_command_t &b, int32_t bd, int32_t bs) { if (e < FTM_CTS_COMPARE_VAL) return; diff --git a/Marlin/src/module/ft_motion.h b/Marlin/src/module/ft_motion.h index 4851a8cc7d..eb717a91db 100644 --- a/Marlin/src/module/ft_motion.h +++ b/Marlin/src/module/ft_motion.h @@ -36,23 +36,25 @@ #endif #endif +#define NUM_AXES_SHAPED TERN(HAS_Y_AXIS, 2, 1) + typedef struct FTConfig { bool active = ENABLED(FTM_IS_DEFAULT_MOTION); // Active (else standard motion) #if HAS_X_AXIS - ftMotionShaper_t shaper[1 + ENABLED(HAS_Y_AXIS)] = // Shaper type + ftMotionShaper_t shaper[NUM_AXES_SHAPED] = // Shaper type { FTM_DEFAULT_SHAPER_X OPTARG(HAS_Y_AXIS, FTM_DEFAULT_SHAPER_Y) }; - float baseFreq[1 + ENABLED(HAS_Y_AXIS)] = // Base frequency. [Hz] + float baseFreq[NUM_AXES_SHAPED] = // Base frequency. [Hz] { FTM_SHAPING_DEFAULT_X_FREQ OPTARG(HAS_Y_AXIS, FTM_SHAPING_DEFAULT_Y_FREQ) }; - float zeta[1 + ENABLED(HAS_Y_AXIS)] = // Damping factor + float zeta[NUM_AXES_SHAPED] = // Damping factor { FTM_SHAPING_ZETA_X OPTARG(HAS_Y_AXIS, FTM_SHAPING_ZETA_Y) }; - float vtol[1 + ENABLED(HAS_Y_AXIS)] = // Vibration Level + float vtol[NUM_AXES_SHAPED] = // Vibration Level { FTM_SHAPING_V_TOL_X OPTARG(HAS_Y_AXIS, FTM_SHAPING_V_TOL_Y) }; #endif #if HAS_DYNAMIC_FREQ dynFreqMode_t dynFreqMode = FTM_DEFAULT_DYNFREQ_MODE; // Dynamic frequency mode configuration. - float dynFreqK[1 + ENABLED(HAS_Y_AXIS)] = { 0.0f }; // Scaling / gain for dynamic frequency. [Hz/mm] or [Hz/g] + float dynFreqK[NUM_AXES_SHAPED] = { 0.0f }; // Scaling / gain for dynamic frequency. [Hz/mm] or [Hz/g] #else static constexpr dynFreqMode_t dynFreqMode = dynFreqMode_DISABLED; #endif diff --git a/Marlin/src/module/ft_types.h b/Marlin/src/module/ft_types.h index 51cd548a03..d43340b73b 100644 --- a/Marlin/src/module/ft_types.h +++ b/Marlin/src/module/ft_types.h @@ -41,8 +41,8 @@ enum dynFreqMode_t : uint8_t { dynFreqMode_MASS_BASED = 2 }; -#define CMPNSTR_HAS_SHAPER(A) (ftMotion.cfg.shaper[A] != ftMotionShaper_NONE) -#define CMPNSTR_IS_EISHAPER(A) WITHIN(ftMotion.cfg.shaper[A], ftMotionShaper_EI, ftMotionShaper_3HEI) +#define AXIS_HAS_SHAPER(A) (ftMotion.cfg.shaper[_AXIS(A)] != ftMotionShaper_NONE) +#define AXIS_HAS_EISHAPER(A) WITHIN(ftMotion.cfg.shaper[_AXIS(A)], ftMotionShaper_EI, ftMotionShaper_3HEI) typedef struct XYZEarray xyze_trajectory_t; typedef struct XYZEarray xyze_trajectoryMod_t; diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index f5517472f1..df25fe9c9c 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -573,7 +573,7 @@ void do_blocking_move_to(NUM_AXIS_ARGS_(const_float_t) const_feedRate_t fr_mm_s/ if (DEBUGGING(LEVELING)) DEBUG_XYZ("> ", NUM_AXIS_ARGS()); #endif - const feedRate_t xy_feedrate = fr_mm_s ?: feedRate_t(XY_PROBE_FEEDRATE_MM_S); + const feedRate_t xy_feedrate = fr_mm_s ?: feedRate_t(PLANNER_XY_FEEDRATE_MM_S); #if HAS_Z_AXIS const feedRate_t z_feedrate = fr_mm_s ?: homing_feedrate(Z_AXIS); @@ -1496,7 +1496,7 @@ float get_move_distance(const xyze_pos_t &diff OPTARG(HAS_ROTATIONAL_AXES, bool if (planner.buffer_line(raised, fr_zfast)) { // 2. Move to the current native XY and raised Z. Presumably this is a null move. xyze_pos_t curpos = current_position; curpos.z = raised_parked_position.z; - if (planner.buffer_line(curpos, PLANNER_XY_FEEDRATE())) { + if (planner.buffer_line(curpos, PLANNER_XY_FEEDRATE_MM_S)) { // 3. Lower Z back down line_to_current_position(fr_zfast); } diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index 5ba65115f6..60c76f745a 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -64,7 +64,7 @@ extern xyz_pos_t cartes; #elif defined(XY_PROBE_FEEDRATE) #define XY_PROBE_FEEDRATE_MM_S MMM_TO_MMS(XY_PROBE_FEEDRATE) #else - #define XY_PROBE_FEEDRATE_MM_S PLANNER_XY_FEEDRATE() + #define XY_PROBE_FEEDRATE_MM_S PLANNER_XY_FEEDRATE_MM_S #endif #if HAS_BED_PROBE @@ -395,8 +395,8 @@ void do_blocking_move_to(const xyze_pos_t &raw, const_feedRate_t fr_mm_s=0.0f); void do_blocking_move_to_xyzijku_v(const xyze_pos_t &raw, const_float_t v, const_feedRate_t fr_mm_s=0.0f); #endif #if HAS_W_AXIS - void do_blocking_move_to_w(const float rw, const feedRate_t &fr_mm_s=0.0f); - void do_blocking_move_to_xyzijkuv_w(const xyze_pos_t &raw, const float w, const feedRate_t &fr_mm_s=0.0f); + void do_blocking_move_to_w(const_float_t rw, const_feedRate_t fr_mm_s=0.0f); + void do_blocking_move_to_xyzijkuv_w(const xyze_pos_t &raw, const_float_t w, const_feedRate_t fr_mm_s=0.0f); #endif #if HAS_Y_AXIS diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index 6d0a9d4050..33884de530 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -1115,7 +1115,13 @@ class Planner { #endif // HAS_JUNCTION_DEVIATION }; -#define PLANNER_XY_FEEDRATE() _MIN(planner.settings.max_feedrate_mm_s[X_AXIS], planner.settings.max_feedrate_mm_s[Y_AXIS]) +#if HAS_Y_AXIS + #define PLANNER_XY_FEEDRATE_MM_S _MIN(planner.settings.max_feedrate_mm_s[X_AXIS], planner.settings.max_feedrate_mm_s[Y_AXIS]) +#elif HAS_X_AXIS + #define PLANNER_XY_FEEDRATE_MM_S planner.settings.max_feedrate_mm_s[X_AXIS] +#else + #define PLANNER_XY_FEEDRATE_MM_S 60.0f +#endif #define ANY_AXIS_MOVES(BLOCK) \ (false NUM_AXIS_GANG( \ diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 90668466d4..db599cac48 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -377,7 +377,7 @@ FORCE_INLINE void probe_specific_action(const bool deploy) { TERN_(HOST_PROMPT_SUPPORT, hostui.continue_prompt(ds_fstr)); TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(ds_fstr)); - TERN_(DWIN_LCD_PROUI, DWIN_Popup_Continue(ICON_BLTouch, ds_fstr, FPSTR(CONTINUE_STR))); + TERN_(DWIN_LCD_PROUI, DWIN_Popup_Continue(ICON_BLTouch, ds_fstr, F(""))); TERN_(HAS_RESUME_CONTINUE, wait_for_user_response()); ui.reset_status(); diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h index 0169178d70..553bfdcca8 100644 --- a/Marlin/src/module/probe.h +++ b/Marlin/src/module/probe.h @@ -357,9 +357,11 @@ class Probe { static void refresh_largest_sensorless_adj(); #endif -private: //run_z_probes - static bool probe_down_to_z(const_float_t z, const_feedRate_t fr_mm_s); - static float run_z_probes(const bool sanity_check=true, const_float_t z_min_point=Z_PROBE_LOW_POINT, const_float_t z_clearance=Z_TWEEN_SAFE_CLEARANCE); +private: + #if HAS_BED_PROBE + static bool probe_down_to_z(const_float_t z, const_feedRate_t fr_mm_s); + static float run_z_probes(const bool sanity_check=true, const_float_t z_min_point=Z_PROBE_LOW_POINT, const_float_t z_clearance=Z_TWEEN_SAFE_CLEARANCE); + #endif }; extern Probe probe; diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 76f205f124..d145a8eba6 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -1007,7 +1007,10 @@ void MarlinSettings::postprocess() { // Global Leveling // { - const float planner_z_fade_height = TERN(ENABLE_LEVELING_FADE_HEIGHT, planner.z_fade_height, (DEFAULT_LEVELING_FADE_HEIGHT)); + #ifndef DEFAULT_LEVELING_FADE_HEIGHT + #define DEFAULT_LEVELING_FADE_HEIGHT 0 + #endif + const float planner_z_fade_height = TERN(ENABLE_LEVELING_FADE_HEIGHT, planner.z_fade_height, DEFAULT_LEVELING_FADE_HEIGHT); EEPROM_WRITE(planner_z_fade_height); } @@ -1415,7 +1418,7 @@ void MarlinSettings::postprocess() { #if ENABLED(VOLUMETRIC_EXTRUDER_LIMIT) EEPROM_WRITE(planner.volumetric_extruder_limit); #else - dummyf = DEFAULT_VOLUMETRIC_EXTRUDER_LIMIT; + dummyf = 0.0; for (uint8_t q = EXTRUDERS; q--;) EEPROM_WRITE(dummyf); #endif } @@ -2865,7 +2868,7 @@ void MarlinSettings::postprocess() { EEPROM_READ(dwin_data); if (!validating) DWIN_CopySettingsFrom(dwin_data); } - #endif // DWIN_LCD_PROUI + #endif // // Case Light Brightness @@ -3186,7 +3189,7 @@ void MarlinSettings::postprocess() { #if ANY(EEPROM_AUTO_INIT, EEPROM_INIT_NOW) (void)save(); SERIAL_ECHO_MSG("EEPROM Initialized"); - #if PROUI_EX + #if ENABLED(DWIN_LCD_PROUI) safe_delay(200); RebootPrinter(); #endif @@ -3224,109 +3227,96 @@ void MarlinSettings::postprocess() { void MarlinSettings::store_mesh(const int8_t slot) { - #if ENABLED(AUTO_BED_LEVELING_UBL) - const int16_t a = calc_num_meshes(); - if (!WITHIN(slot, 0, a - 1)) { - ubl_invalid_slot(a); - DEBUG_ECHOLNPGM("E2END=", persistentStore.capacity() - 1, " meshes_end=", meshes_end, " slot=", slot); - DEBUG_EOL(); - return; - } + const int16_t a = calc_num_meshes(); + if (!WITHIN(slot, 0, a - 1)) { + ubl_invalid_slot(a); + DEBUG_ECHOLNPGM("E2END=", persistentStore.capacity() - 1, " meshes_end=", meshes_end, " slot=", slot); + DEBUG_EOL(); + return; + } - int pos = mesh_slot_offset(slot); - uint16_t crc = 0; + int pos = mesh_slot_offset(slot); + uint16_t crc = 0; - #if ENABLED(OPTIMIZED_MESH_STORAGE) - #if ANY(PROUI_EX, PROUI_GRID_PNTS) - int16_t z_mesh_store[GRID_LIMIT][GRID_LIMIT]; - #else - int16_t z_mesh_store[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; - #endif - bedlevel.set_store_from_mesh(bedlevel.z_values, z_mesh_store); - uint8_t * const src = (uint8_t*)&z_mesh_store; + #if ENABLED(OPTIMIZED_MESH_STORAGE) + #if ANY(PROUI_EX, PROUI_GRID_PNTS) + int16_t z_mesh_store[GRID_LIMIT][GRID_LIMIT]; #else - uint8_t * const src = (uint8_t*)&bedlevel.z_values; + int16_t z_mesh_store[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; #endif - - // Write crc to MAT along with other data, or just tack on to the beginning or end - persistentStore.access_start(); - const bool status = persistentStore.write_data(pos, src, MESH_STORE_SIZE, &crc); - persistentStore.access_finish(); - - if (status) SERIAL_ECHOLNPGM("?Unable to save mesh data."); - else DEBUG_ECHOLNPGM("Mesh saved in slot ", slot); - + bedlevel.set_store_from_mesh(bedlevel.z_values, z_mesh_store); + uint8_t * const src = (uint8_t*)&z_mesh_store; #else + uint8_t * const src = (uint8_t*)&bedlevel.z_values; + #endif - // Other mesh types + // Write crc to MAT along with other data, or just tack on to the beginning or end + persistentStore.access_start(); + const bool status = persistentStore.write_data(pos, src, MESH_STORE_SIZE, &crc); + persistentStore.access_finish(); + + if (status) SERIAL_ECHOLNPGM("?Unable to save mesh data."); + else DEBUG_ECHOLNPGM("Mesh saved in slot ", slot); - #endif } void MarlinSettings::load_mesh(const int8_t slot, void * const into/*=nullptr*/) { - #if ENABLED(AUTO_BED_LEVELING_UBL) - - const int16_t a = settings.calc_num_meshes(); + const int16_t a = settings.calc_num_meshes(); - if (!WITHIN(slot, 0, a - 1)) { - ubl_invalid_slot(a); - return; - } + if (!WITHIN(slot, 0, a - 1)) { + ubl_invalid_slot(a); + return; + } - int pos = mesh_slot_offset(slot); - uint16_t crc = 0; - #if ENABLED(OPTIMIZED_MESH_STORAGE) - #if ANY(PROUI_EX, PROUI_GRID_PNTS) - int16_t z_mesh_store[GRID_LIMIT][GRID_LIMIT]; - #else - int16_t z_mesh_store[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; - #endif - uint8_t * const dest = (uint8_t*)&z_mesh_store; + int pos = mesh_slot_offset(slot); + uint16_t crc = 0; + #if ENABLED(OPTIMIZED_MESH_STORAGE) + #if ANY(PROUI_EX, PROUI_GRID_PNTS) + int16_t z_mesh_store[GRID_LIMIT][GRID_LIMIT]; #else - uint8_t * const dest = into ? (uint8_t*)into : (uint8_t*)&bedlevel.z_values; - #endif - - persistentStore.access_start(); - uint16_t status = persistentStore.read_data(pos, dest, MESH_STORE_SIZE, &crc); - persistentStore.access_finish(); - - #if ENABLED(OPTIMIZED_MESH_STORAGE) - if (into) { - #if ANY(PROUI_EX, PROUI_GRID_PNTS) - float z_values[GRID_LIMIT][GRID_LIMIT]; - #else - float z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; - #endif - bedlevel.set_mesh_from_store(z_mesh_store, z_values); - memcpy(into, z_values, sizeof(z_values)); - } - else - bedlevel.set_mesh_from_store(z_mesh_store, bedlevel.z_values); + int16_t z_mesh_store[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; #endif + uint8_t * const dest = (uint8_t*)&z_mesh_store; + #else + uint8_t * const dest = into ? (uint8_t*)into : (uint8_t*)&bedlevel.z_values; + #endif - #if ENABLED(DWIN_LCD_PROUI) - if (bedLevelTools.meshValidate()) { - ui.status_printf(0, GET_TEXT_F(MSG_MESH_LOADED), slot); - } - else { - status = true; - bedlevel.invalidate(); - LCD_MESSAGE(MSG_UBL_MESH_INVALID); - DONE_BUZZ(false); - } - #endif + persistentStore.access_start(); + uint16_t status = persistentStore.read_data(pos, dest, MESH_STORE_SIZE, &crc); + persistentStore.access_finish(); - if (status) SERIAL_ECHOLNPGM("?Unable to load mesh data."); - else DEBUG_ECHOLNPGM("Mesh loaded from slot ", slot); + #if ENABLED(OPTIMIZED_MESH_STORAGE) + if (into) { + #if ANY(PROUI_EX, PROUI_GRID_PNTS) + float z_values[GRID_LIMIT][GRID_LIMIT]; + #else + float z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; + #endif + bedlevel.set_mesh_from_store(z_mesh_store, z_values); + memcpy(into, z_values, sizeof(z_values)); + } + else + bedlevel.set_mesh_from_store(z_mesh_store, bedlevel.z_values); + #endif - EEPROM_FINISH(); + #if ENABLED(DWIN_LCD_PROUI) + if (bedLevelTools.meshValidate()) { + ui.status_printf(0, GET_TEXT_F(MSG_MESH_LOADED), slot); + } + else { + status = true; + bedlevel.invalidate(); + LCD_MESSAGE(MSG_UBL_MESH_INVALID); + DONE_BUZZ(false); + } + #endif - #else + if (status) SERIAL_ECHOLNPGM("?Unable to load mesh data."); + else DEBUG_ECHOLNPGM("Mesh loaded from slot ", slot); - // Other mesh types + EEPROM_FINISH(); - #endif } //void MarlinSettings::delete_mesh() { return; } @@ -3501,10 +3491,10 @@ void MarlinSettings::reset() { // MESH_INSET workaround // #if ALL(PROUI_MESH_EDIT, HAS_MESH) - ui.mesh_min_x = TERN(PROUI_EX, PRO_data, HMI_data).mesh_min_x; - ui.mesh_max_x = TERN(PROUI_EX, PRO_data, HMI_data).mesh_max_x; - ui.mesh_min_y = TERN(PROUI_EX, PRO_data, HMI_data).mesh_min_y; - ui.mesh_max_y = TERN(PROUI_EX, PRO_data, HMI_data).mesh_max_y; + ui.mesh_min_x = DEF_MESH_MIN_X; + ui.mesh_max_x = DEF_MESH_MAX_X; + ui.mesh_min_y = DEF_MESH_MIN_Y; + ui.mesh_max_y = DEF_MESH_MAX_Y; #endif // @@ -3540,7 +3530,7 @@ void MarlinSettings::reset() { // // Global Leveling // - TERN_(ENABLE_LEVELING_FADE_HEIGHT, new_z_fade_height = (DEFAULT_LEVELING_FADE_HEIGHT)); + TERN_(ENABLE_LEVELING_FADE_HEIGHT, new_z_fade_height = DEFAULT_LEVELING_FADE_HEIGHT); TERN_(HAS_LEVELING, reset_bed_level()); // diff --git a/Marlin/src/module/stepper/cycles.h b/Marlin/src/module/stepper/cycles.h index b01d199cd8..2988eb3871 100644 --- a/Marlin/src/module/stepper/cycles.h +++ b/Marlin/src/module/stepper/cycles.h @@ -135,15 +135,13 @@ constexpr uint32_t isr_shaping_loop_cycles(const int R) { #if ENABLED(LIN_ADVANCE) // Estimate the minimum LA loop time - constexpr uint32_t min_isr_la_loop_cycles = (isr_stepper_cycles - // ToDo: ??? - // HELP ME: What is what? - // Directions are set up for MIXING_STEPPERS - like before. - // Finding the right stepper may last up to MIXING_STEPPERS loops in get_next_stepper(). - // These loops are a bit faster than advancing a bresenham counter. - // Always only one E stepper is stepped. - * TERN1(MIXING_EXTRUDER, (MIXING_STEPPERS)) - ); + constexpr uint32_t min_isr_la_loop_cycles = MUL_TERN(MIXING_EXTRUDER, isr_stepper_cycles, MIXING_STEPPERS); + // ToDo: ??? + // HELP ME: What is what? + // Directions are set up for MIXING_STEPPERS - like before. + // Finding the right stepper may last up to MIXING_STEPPERS loops in get_next_stepper(). + // These loops are a bit faster than advancing a bresenham counter. + // Always only one E stepper is stepped. #endif diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 2b875ba515..8839b57278 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -70,6 +70,52 @@ #include "../feature/spindle_laser.h" #endif +#ifndef TEMP_SENSOR_0 + #define TEMP_SENSOR_0 0 +#endif +#ifndef TEMP_SENSOR_1 + #define TEMP_SENSOR_1 0 +#endif +#ifndef TEMP_SENSOR_2 + #define TEMP_SENSOR_2 0 +#endif +#ifndef TEMP_SENSOR_3 + #define TEMP_SENSOR_3 0 +#endif +#ifndef TEMP_SENSOR_4 + #define TEMP_SENSOR_4 0 +#endif +#ifndef TEMP_SENSOR_5 + #define TEMP_SENSOR_5 0 +#endif +#ifndef TEMP_SENSOR_6 + #define TEMP_SENSOR_6 0 +#endif +#ifndef TEMP_SENSOR_7 + #define TEMP_SENSOR_7 0 +#endif +#ifndef TEMP_SENSOR_BED + #define TEMP_SENSOR_BED 0 +#endif +#ifndef TEMP_SENSOR_BOARD + #define TEMP_SENSOR_BOARD 0 +#endif +#ifndef TEMP_SENSOR_CHAMBER + #define TEMP_SENSOR_CHAMBER 0 +#endif +#ifndef TEMP_SENSOR_COOLER + #define TEMP_SENSOR_COOLER 0 +#endif +#ifndef TEMP_SENSOR_PROBE + #define TEMP_SENSOR_PROBE 0 +#endif +#ifndef TEMP_SENSOR_REDUNDANT + #define TEMP_SENSOR_REDUNDANT 0 +#endif +#ifndef TEMP_SENSOR_SOC + #define TEMP_SENSOR_SOC 0 +#endif + // MAX TC related macros #define TEMP_SENSOR_IS_MAX(n, M) (ENABLED(TEMP_SENSOR_##n##_IS_MAX##M) || (ENABLED(TEMP_SENSOR_REDUNDANT_IS_MAX##M) && REDUNDANT_TEMP_MATCH(SOURCE, E##n))) diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index bb4e76c25b..25d3a0bade 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -39,25 +39,25 @@ #if NONE(FET_ORDER_EEF, FET_ORDER_EEB, FET_ORDER_EFF, FET_ORDER_EFB, FET_ORDER_SF) #if MB(RAMPS_13_EFB, RAMPS_14_EFB, RAMPS_PLUS_EFB, RAMPS_14_RE_ARM_EFB, RAMPS_SMART_EFB, RAMPS_DUO_EFB, RAMPS4DUE_EFB, RAMPS_BTT_16_PLUS_EFB) - #define FET_ORDER_EFB 1 + #define FET_ORDER_EFB #elif MB(RAMPS_13_EEB, RAMPS_14_EEB, RAMPS_PLUS_EEB, RAMPS_14_RE_ARM_EEB, RAMPS_SMART_EEB, RAMPS_DUO_EEB, RAMPS4DUE_EEB, RAMPS_BTT_16_PLUS_EEB) - #define FET_ORDER_EEB 1 + #define FET_ORDER_EEB #elif MB(RAMPS_13_EFF, RAMPS_14_EFF, RAMPS_PLUS_EFF, RAMPS_14_RE_ARM_EFF, RAMPS_SMART_EFF, RAMPS_DUO_EFF, RAMPS4DUE_EFF, RAMPS_BTT_16_PLUS_EFF) - #define FET_ORDER_EFF 1 + #define FET_ORDER_EFF #elif MB(RAMPS_13_EEF, RAMPS_14_EEF, RAMPS_PLUS_EEF, RAMPS_14_RE_ARM_EEF, RAMPS_SMART_EEF, RAMPS_DUO_EEF, RAMPS4DUE_EEF, RAMPS_BTT_16_PLUS_EEF) - #define FET_ORDER_EEF 1 + #define FET_ORDER_EEF #elif MB(RAMPS_13_SF, RAMPS_14_SF, RAMPS_PLUS_SF, RAMPS_14_RE_ARM_SF, RAMPS_SMART_SF, RAMPS_DUO_SF, RAMPS4DUE_SF, RAMPS_BTT_16_PLUS_SF) - #define FET_ORDER_SF 1 - #elif HAS_MULTI_HOTEND || (HAS_EXTRUDERS && HAS_CUTTER) + #define FET_ORDER_SF + #elif ANY(HAS_MULTI_HOTEND, HEATERS_PARALLEL) || ALL(HAS_EXTRUDERS, HAS_CUTTER) #if TEMP_SENSOR_BED - #define FET_ORDER_EEB 1 + #define FET_ORDER_EEB #else - #define FET_ORDER_EEF 1 + #define FET_ORDER_EEF #endif #elif TEMP_SENSOR_BED - #define FET_ORDER_EFB 1 + #define FET_ORDER_EFB #else - #define FET_ORDER_EFF 1 + #define FET_ORDER_EFF #endif #endif @@ -175,7 +175,7 @@ #elif MB(MKS_GEN_13) #include "ramps/pins_MKS_GEN_13.h" // ATmega2560, ATmega1280 env:mega2560 env:mega1280 #elif MB(MKS_GEN_L) - #include "ramps/pins_MKS_GEN_L.h" // ATmega2560, ATmega1280 env:mega2560 env:mega1280 + #include "ramps/pins_MKS_GEN_L.h" // ATmega2560 env:mega2560 #elif MB(KFB_2) #include "ramps/pins_BIQU_KFB_2.h" // ATmega2560 env:mega2560 #elif MB(ZRIB_V20) @@ -1008,7 +1008,7 @@ #error "BOARD_STM32F1R is now BOARD_STM32F103RE. Please update your configuration." #elif MB(STM32F103R) #error "BOARD_STM32F103R is now BOARD_STM32F103RE. Please update your configuration." - #elif MOTHERBOARD == BOARD_ESP32 + #elif MB(ESP32) #error "BOARD_ESP32 is now BOARD_ESPRESSIF_ESP32. Please update your configuration." #elif MB(STEVAL) #error "BOARD_STEVAL_3DP001V1 (BOARD_STEVAL) is no longer supported in Marlin." diff --git a/README.md b/README.md index ae1fb548a9..289d5eb7ea 100644 --- a/README.md +++ b/README.md @@ -45,18 +45,17 @@ New ICON's have been added, and old ones enhanced. Whoever edited them before sa #### Important Info regarding HC32: > [!WARNING] > -> **FOREWARNING**: So far everything has been working great - as normal - except there are reports of it restarting after saving with no other negative effects. So far, that is the only issue. I just wanted to give advance notice. +> **FOREWARNING**: So far everything has been working great - as normal - except there is an issue with the initialization of the SD card media. If you get a message saying this has failed, just reinsert the card or reboot. Keep trying if this doesn't work the first time. Also using Gcode Thumbnail Preview is giving issues with freezing so this has been disabled for now. + +> [!CAUTION] +> +> The screen may **freeze and restart** when the SD card is inserted. This means that everything *so far* seems to work correctly as it should, except for when an **SD card is inserted**, so printing may not be possible *unless* you use USB serial interface to upload the file (through a slicer or something like Pronterface). > [!TIP] > H32->HC32 support is currently only in the branch **HC32-<Month>**. You can find the original repo here [@shadow578/Marlin-H32](https://github.com/shadow578/Marlin-H32) > > HC32 support has recently been added to the [Marlin Firmware](https://github.com/MarlinFirmware/Marlin) repository. Please post any [Issues](https://github.com/MarlinFirmware/Marlin/issues) there first, otherwise if there are any ProUI specific issues or anything else to report please do so under [Issues tab](https://github.com/classicrocker883/MRiscoCProUI/issues) here. -> [!CAUTION] -> Previous Issue of it restarting when saving/store settings has been fixed in the more recent ProUI version (October Rev.1). -_HOWEVER_, now there is a current Issue to be addressed: -The screen may **freeze and restart** when the SD card is inserted. This means that everything *so far* seems to work correctly as it should, except for when an **SD card is inserted**, so printing may not be possible *unless* you use USB serial interface to upload the file (through a slicer or something like Pronterface). -If this is an inconvenience then you can use an earlier version which can allow the **SD Card** to be used.
#### Other Information: @@ -159,7 +158,7 @@ Please consider making a donation, as large or as small and as often as you'd li The Issue Queue is reserved for Bug Reports and Feature Requests. Please use the following resources for help with configuration and troubleshooting: - [Marlin Documentation](https://marlinfw.org) - Official Marlin documentation -- [Marlin Discord](https://discord.gg/n5NJ59y) - Discuss issues with Marlin users and developers +- [Marlin Discord](https://discord.com/servers/marlin-firmware-461605380783472640) - Discuss issues with Marlin users and developers - Facebook Group ["Marlin Firmware"](https://www.facebook.com/groups/1049718498464482/) - RepRap.org [Marlin Forum](https://forums.reprap.org/list.php?415) - Facebook Group ["Marlin Firmware for 3D Printers"](https://www.facebook.com/groups/3Dtechtalk/) diff --git a/buildroot/share/PlatformIO/scripts/configuration.py b/buildroot/share/PlatformIO/scripts/configuration.py index 64cf76e1c4..e8482b477d 100755 --- a/buildroot/share/PlatformIO/scripts/configuration.py +++ b/buildroot/share/PlatformIO/scripts/configuration.py @@ -110,7 +110,7 @@ def disable_all_options(): match = regex.match(line) if match: name = match[3].upper() - if name in ('CONFIGURATION_H_VERSION', 'CONFIGURATION_ADV_H_VERSION'): continue + if name in ('CONFIGURATION_H_VERSION', 'CONFIGURATION_ADV_H_VERSION', 'CONFIG_EXAMPLES_DIR'): continue if name.startswith('_'): continue found = True # Comment out the define diff --git a/buildroot/share/PlatformIO/scripts/schema.py b/buildroot/share/PlatformIO/scripts/schema.py index 381ee57a95..381a7865c9 100755 --- a/buildroot/share/PlatformIO/scripts/schema.py +++ b/buildroot/share/PlatformIO/scripts/schema.py @@ -80,7 +80,7 @@ def load_boards(): return '' # -# Extract the current configuration files in the form of a structured schema. +# Extract the specified configuration files in the form of a structured schema. # Contains the full schema for the configuration files, not just the enabled options, # Contains the current values of the options, not just data structure, so "schema" is a slight misnomer. # @@ -99,9 +99,9 @@ def load_boards(): # - requires = The conditions that must be met for the define to be enabled # - comment = The comment for the define, if it has one # - units = The units for the define, if it has one -# - options = The options for the define, if it has one +# - options = The options for the define, if it has any # -def extract(): +def extract_files(filekey): # Load board names from boards.h boards = load_boards() @@ -114,10 +114,8 @@ class Parse: GET_SENSORS = 4 # Gathering temperature sensor options ERROR = 9 # Syntax error - # List of files to process, with shorthand - filekey = { 'Configuration.h':'basic', 'Configuration_adv.h':'advanced' } # A JSON object to store the data - sch_out = { 'basic':{}, 'advanced':{} } + sch_out = { key:{} for key in filekey.values() } # Regex for #define NAME [VALUE] [COMMENT] with sanitized line defgrep = re.compile(r'^(//)?\s*(#define)\s+([A-Za-z0-9_]+)\s*(.*?)\s*(//.+)?$') # Pattern to match a float value @@ -180,6 +178,12 @@ class Parse: cfield = 'notes' if 'comment' in last_added_ref else 'comment' last_added_ref[cfield] = cline + # + # Add the given comment line to the comment buffer, unless: + # - The line starts with ':' and JSON values to assign to 'opt'. + # - The line starts with '@section' so a new section needs to be returned. + # - The line starts with '======' so just skip it. + # def use_comment(c, opt, sec, bufref): if c.startswith(':'): # If the comment starts with : then it has magic JSON d = c[1:].strip() # Strip the leading : @@ -199,7 +203,7 @@ def use_comment(c, opt, sec, bufref): # The comment will be applied to the next #define. if state == Parse.SLASH_COMMENT: if not defmatch and the_line.startswith('//'): - use_comment(the_line[2:].strip(), options_json, section, comment_buff) + options_json, section = use_comment(the_line[2:].strip(), options_json, section, comment_buff) continue else: state = Parse.NORMAL @@ -219,7 +223,7 @@ def use_comment(c, opt, sec, bufref): state = Parse.NORMAL - # Strip the leading '*' from block comments + # Strip the leading '* ' from block comments cline = re.sub(r'^\* ?', '', cline) # Collect temperature sensors @@ -412,6 +416,13 @@ def atomize(s): return sch_out +# +# Extract the current configuration files in the form of a structured schema. +# +def extract(): + # List of files to process, with shorthand + return extract_files({ 'Configuration.h':'basic', 'Configuration_adv.h':'advanced' }) + def dump_json(schema:dict, jpath:Path): with jpath.open('w') as jfile: json.dump(schema, jfile, ensure_ascii=False, indent=2) diff --git a/buildroot/share/PlatformIO/scripts/signature.py b/buildroot/share/PlatformIO/scripts/signature.py index 8723969c00..2df4e099f8 100755 --- a/buildroot/share/PlatformIO/scripts/signature.py +++ b/buildroot/share/PlatformIO/scripts/signature.py @@ -35,18 +35,27 @@ def enabled_defines(filepath): ''' outdict = {} section = "user" - spatt = re.compile(r".*@section +([-a-zA-Z0-9_\s]+)$") # must match @section ... + spatt = re.compile(r".*@section +([-a-zA-Z0-9_\s]+)$") # @section ... f = open(filepath, encoding="utf8").read().split("\n") - # Get the full contents of the file and remove all block comments. - # This will avoid false positives from #defines in comments - f = re.sub(r'/\*.*?\*/', '', '\n'.join(f), flags=re.DOTALL).split("\n") - + incomment = False for line in f: sline = line.strip() + m = re.match(spatt, sline) # @section ... if m: section = m.group(1).strip() ; continue + + if incomment: + if '*/' in sline: + incomment = False + continue + else: + mpos, spos = sline.find('/*'), sline.find('//') + if mpos >= 0 and (spos < 0 or spos > mpos): + incomment = True + continue + if sline[:7] == "#define": # Extract the key here (we don't care about the value) kv = sline[8:].strip().split() @@ -70,6 +79,11 @@ def compress_file(filepath, storedname, outpath): with zipfile.ZipFile(outpath, 'w', compression=zipfile.ZIP_BZIP2, compresslevel=9) as zipf: zipf.write(filepath, arcname=storedname, compress_type=zipfile.ZIP_BZIP2, compresslevel=9) +ignore = ('CONFIGURATION_H_VERSION', 'CONFIGURATION_ADV_H_VERSION', 'CONFIG_EXAMPLES_DIR', 'CONFIG_EXPORT') + +# +# Compute a build signature and/or export the configuration +# def compute_build_signature(env): ''' Compute the build signature by extracting all configuration settings and @@ -81,11 +95,17 @@ def compute_build_signature(env): env.Append(BUILD_SIGNATURE=1) build_path = Path(env['PROJECT_BUILD_DIR'], env['PIOENV']) - marlin_json = build_path / 'marlin_config.json' + json_name = 'marlin_config.json' + marlin_json = build_path / json_name marlin_zip = build_path / 'mc.zip' + # ANSI colors + green = "\u001b[32m" + yellow = "\u001b[33m" + red = "\u001b[31m" + # Definitions from these files will be kept - header_paths = [ 'Marlin/Configuration.h', 'Marlin/Configuration_adv.h' ] + header_paths = ('Marlin/Configuration.h', 'Marlin/Configuration_adv.h') # Check if we can skip processing hashes = '' @@ -100,7 +120,7 @@ def compute_build_signature(env): conf = json.load(infile) same_hash = conf['__INITIAL_HASH'] == hashes if same_hash: - compress_file(marlin_json, 'marlin_config.json', marlin_zip) + compress_file(marlin_json, json_name, marlin_zip) except: pass @@ -179,25 +199,28 @@ def tryint(key): extended_dump = config_dump > 100 if extended_dump: config_dump -= 100 + # Get the schema class for exports that require it + if config_dump in (3, 4) or (extended_dump and config_dump in (2, 5)): + try: + conf_schema = schema.extract() + except Exception as exc: + print(red + "Error: " + str(exc)) + conf_schema = None + # # Produce an INI file if CONFIG_EXPORT == 2 # if config_dump == 2: - print("Generating config.ini ...") + print(yellow + "Generating config.ini ...") ini_fmt = '{0:40} = {1}' ext_fmt = '{0:40} {1}' - ignore = ('CONFIGURATION_H_VERSION', 'CONFIGURATION_ADV_H_VERSION', 'CONFIG_EXAMPLES_DIR', 'CONFIG_EXPORT') if extended_dump: # Extended export will dump config options by section # We'll use Schema class to get the sections - try: - conf_schema = schema.extract() - except Exception as exc: - print("Error: " + str(exc)) - exit(1) + if not conf_schema: exit(1) # Then group options by schema @section sections = {} @@ -305,27 +328,22 @@ def tryint(key): for header in real_config: outfile.write(f'\n[{filegrp[header]}]\n') for name in sorted(real_config[header]): - if name not in ignore: - val = real_config[header][name]['value'] - if val == '': val = 'on' - outfile.write(ini_fmt.format(name.lower(), val) + '\n') + if name in ignore: continue + val = real_config[header][name]['value'] + if val == '': val = 'on' + outfile.write(ini_fmt.format(name.lower(), val) + '\n') # # CONFIG_EXPORT 3 = schema.json, 4 = schema.yml # - if config_dump >= 3: - try: - conf_schema = schema.extract() - except Exception as exc: - print("Error: " + str(exc)) - conf_schema = None + if config_dump in (3, 4): if conf_schema: # # 3 = schema.json # if config_dump in (3, 13): - print("Generating schema.json ...") + print(yellow + "Generating schema.json ...") schema.dump_json(conf_schema, build_path / 'schema.json') if config_dump == 13: schema.group_options(conf_schema) @@ -335,7 +353,7 @@ def tryint(key): # 4 = schema.yml # elif config_dump == 4: - print("Generating schema.yml ...") + print(yellow + "Generating schema.yml ...") try: import yaml except ImportError: @@ -355,7 +373,7 @@ def tryint(key): json_data = {} if extended_dump: - print("Extended dump ...") + print(yellow + "Extended dump ...") for header in real_config: confs = real_config[header] json_data[header] = {} @@ -395,7 +413,7 @@ def tryint(key): # Compress the JSON file as much as we can if not same_hash: - compress_file(marlin_json, 'marlin_config.json', marlin_zip) + compress_file(marlin_json, json_name, marlin_zip) # Generate a C source file containing the entire ZIP file as an array with open('Marlin/src/mczip.h','wb') as result_file: diff --git a/buildroot/share/extras/file_header.h b/buildroot/share/extras/file_header.h index 0c868aebb3..79c9c363e2 100644 --- a/buildroot/share/extras/file_header.h +++ b/buildroot/share/extras/file_header.h @@ -1,6 +1,6 @@ /** * Marlin 3D Printer Firmware - * Copyright (c) 2023 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * Copyright (c) 2024 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] * * Based on Sprinter and grbl. * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm diff --git a/buildroot/tests/DUE b/buildroot/tests/DUE index 590d76606c..3c4876b44e 100755 --- a/buildroot/tests/DUE +++ b/buildroot/tests/DUE @@ -13,6 +13,7 @@ opt_set MOTHERBOARD BOARD_RAMPS4DUE_EFB \ GRID_MAX_POINTS_X 16 \ E0_AUTO_FAN_PIN 8 FANMUX0_PIN 53 EXTRUDER_AUTO_FAN_SPEED 100 \ TEMP_SENSOR_CHAMBER 3 TEMP_CHAMBER_PIN 6 HEATER_CHAMBER_PIN 45 \ + BACKLASH_MEASUREMENT_FEEDRATE 600 \ TRAMMING_POINT_XY '{{20,20},{20,20},{20,20},{20,20},{20,20}}' TRAMMING_POINT_NAME_5 '"Point 5"' opt_enable S_CURVE_ACCELERATION EEPROM_SETTINGS GCODE_MACROS \ FIX_MOUNTED_PROBE Z_SAFE_HOMING CODEPENDENT_XY_HOMING \ diff --git a/buildroot/tests/rambo b/buildroot/tests/rambo index a7deb02c9f..74a1db2516 100755 --- a/buildroot/tests/rambo +++ b/buildroot/tests/rambo @@ -14,8 +14,8 @@ opt_set MOTHERBOARD BOARD_RAMBO \ EXTRUDERS 2 TEMP_SENSOR_0 -2 TEMP_SENSOR_1 1 TEMP_SENSOR_BED 2 \ TEMP_SENSOR_PROBE 1 TEMP_PROBE_PIN 12 \ TEMP_SENSOR_CHAMBER 3 TEMP_CHAMBER_PIN 3 HEATER_CHAMBER_PIN 45 \ - GRID_MAX_POINTS_X 16 AUTO_POWER_E_TEMP 80 \ - FANMUX0_PIN 53 FIL_MOTION1_PIN 45 + GRID_MAX_POINTS_X 16 BACKLASH_MEASUREMENT_FEEDRATE 600 \ + AUTO_POWER_E_TEMP 80 FANMUX0_PIN 53 FIL_MOTION1_PIN 45 opt_disable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN USE_WATCHDOG opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER LCD_PROGRESS_BAR LCD_PROGRESS_BAR_TEST \ FIX_MOUNTED_PROBE CODEPENDENT_XY_HOMING PIDTEMPBED PTC_PROBE PTC_BED \ diff --git a/buildroot/tests/teensy35 b/buildroot/tests/teensy35 index bba6859432..c7830aeaac 100755 --- a/buildroot/tests/teensy35 +++ b/buildroot/tests/teensy35 @@ -98,7 +98,7 @@ exec_test $1 $2 "Teensy 3.5/3.6 COREXY" "$3" # Enable COREXZ # restore_configs -opt_set MOTHERBOARD BOARD_TEENSY35_36 +opt_set MOTHERBOARD BOARD_TEENSY35_36 BACKLASH_MEASUREMENT_FEEDRATE 600 opt_enable COREXZ BACKLASH_COMPENSATION BACKLASH_GCODE CORE_BACKLASH exec_test $1 $2 "Teensy 3.5/3.6 COREXZ | BACKLASH" "$3" diff --git a/configurations/Andrew427/Configuration-MP.h b/configurations/Andrew427/Configuration-MP.h index 5187641cba..6d6eabc5be 100644 --- a/configurations/Andrew427/Configuration-MP.h +++ b/configurations/Andrew427/Configuration-MP.h @@ -2569,7 +2569,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Andrew427/Configuration.h b/configurations/Andrew427/Configuration.h index cb6c0c10f5..771b8cba25 100644 --- a/configurations/Andrew427/Configuration.h +++ b/configurations/Andrew427/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/BTT_SKR-Mini-E3-V2/MM/Configuration.h b/configurations/BTT_SKR-Mini-E3-V2/MM/Configuration.h index 9a2b9365c8..36954f4319 100644 --- a/configurations/BTT_SKR-Mini-E3-V2/MM/Configuration.h +++ b/configurations/BTT_SKR-Mini-E3-V2/MM/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/BTT_SKR-Mini-E3-V2/MM/Version.h b/configurations/BTT_SKR-Mini-E3-V2/MM/Version.h index 81737ecc15..d2c8e8b870 100644 --- a/configurations/BTT_SKR-Mini-E3-V2/MM/Version.h +++ b/configurations/BTT_SKR-Mini-E3-V2/MM/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/BTT_SKR-Mini-E3-V2/UBL/Configuration.h b/configurations/BTT_SKR-Mini-E3-V2/UBL/Configuration.h index a01586fde9..af75af094c 100644 --- a/configurations/BTT_SKR-Mini-E3-V2/UBL/Configuration.h +++ b/configurations/BTT_SKR-Mini-E3-V2/UBL/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/BTT_SKR-Mini-E3-V2/UBL/Version.h b/configurations/BTT_SKR-Mini-E3-V2/UBL/Version.h index b4de8ef2c7..9962e52bc1 100644 --- a/configurations/BTT_SKR-Mini-E3-V2/UBL/Version.h +++ b/configurations/BTT_SKR-Mini-E3-V2/UBL/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/BTT_SKR-Mini-E3-V3/MM/Configuration.h b/configurations/BTT_SKR-Mini-E3-V3/MM/Configuration.h index c1fad8858e..406414923e 100644 --- a/configurations/BTT_SKR-Mini-E3-V3/MM/Configuration.h +++ b/configurations/BTT_SKR-Mini-E3-V3/MM/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/BTT_SKR-Mini-E3-V3/MM/Version.h b/configurations/BTT_SKR-Mini-E3-V3/MM/Version.h index 81737ecc15..d2c8e8b870 100644 --- a/configurations/BTT_SKR-Mini-E3-V3/MM/Version.h +++ b/configurations/BTT_SKR-Mini-E3-V3/MM/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/BTT_SKR-Mini-E3-V3/UBL/Configuration.h b/configurations/BTT_SKR-Mini-E3-V3/UBL/Configuration.h index 75b876921f..d660590f53 100644 --- a/configurations/BTT_SKR-Mini-E3-V3/UBL/Configuration.h +++ b/configurations/BTT_SKR-Mini-E3-V3/UBL/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/BTT_SKR-Mini-E3-V3/UBL/Version.h b/configurations/BTT_SKR-Mini-E3-V3/UBL/Version.h index b4de8ef2c7..9962e52bc1 100644 --- a/configurations/BTT_SKR-Mini-E3-V3/UBL/Version.h +++ b/configurations/BTT_SKR-Mini-E3-V3/UBL/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Creality Ender/BLT/Configuration.h b/configurations/Creality Ender/BLT/Configuration.h index c8852d9c45..892e45bcad 100644 --- a/configurations/Creality Ender/BLT/Configuration.h +++ b/configurations/Creality Ender/BLT/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Creality Ender/BLT/Version.h b/configurations/Creality Ender/BLT/Version.h index 8f152a3954..121e278a06 100644 --- a/configurations/Creality Ender/BLT/Version.h +++ b/configurations/Creality Ender/BLT/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Creality Ender/Default/Configuration.h b/configurations/Creality Ender/Default/Configuration.h index 582384550d..3893724d56 100644 --- a/configurations/Creality Ender/Default/Configuration.h +++ b/configurations/Creality Ender/Default/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Creality Ender/Default/Version.h b/configurations/Creality Ender/Default/Version.h index d0b98aa0ff..19f4e438d7 100644 --- a/configurations/Creality Ender/Default/Version.h +++ b/configurations/Creality Ender/Default/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Creality Ender/E3-Free-runs/MM/Configuration.h b/configurations/Creality Ender/E3-Free-runs/MM/Configuration.h index b31675f945..0cbcbf0915 100644 --- a/configurations/Creality Ender/E3-Free-runs/MM/Configuration.h +++ b/configurations/Creality Ender/E3-Free-runs/MM/Configuration.h @@ -2566,7 +2566,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Creality Ender/E3-Free-runs/MM/Version.h b/configurations/Creality Ender/E3-Free-runs/MM/Version.h index e358856b36..a16236ca97 100644 --- a/configurations/Creality Ender/E3-Free-runs/MM/Version.h +++ b/configurations/Creality Ender/E3-Free-runs/MM/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Creality Ender/E3-Free-runs/UBL/Configuration.h b/configurations/Creality Ender/E3-Free-runs/UBL/Configuration.h index e04db759fa..bc8f2698e0 100644 --- a/configurations/Creality Ender/E3-Free-runs/UBL/Configuration.h +++ b/configurations/Creality Ender/E3-Free-runs/UBL/Configuration.h @@ -2566,7 +2566,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Creality Ender/E3-Free-runs/UBL/Version.h b/configurations/Creality Ender/E3-Free-runs/UBL/Version.h index 5428f0468d..ebcd0a1a4e 100644 --- a/configurations/Creality Ender/E3-Free-runs/UBL/Version.h +++ b/configurations/Creality Ender/E3-Free-runs/UBL/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Creality Ender/MM/Configuration.h b/configurations/Creality Ender/MM/Configuration.h index 11bd4ef5f6..a3602b7593 100644 --- a/configurations/Creality Ender/MM/Configuration.h +++ b/configurations/Creality Ender/MM/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Creality Ender/MM/Version.h b/configurations/Creality Ender/MM/Version.h index 290406428c..8589a03d2a 100644 --- a/configurations/Creality Ender/MM/Version.h +++ b/configurations/Creality Ender/MM/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Creality Ender/S1/UBL/Configuration.h b/configurations/Creality Ender/S1/UBL/Configuration.h index 83a76373a2..32518e22ae 100644 --- a/configurations/Creality Ender/S1/UBL/Configuration.h +++ b/configurations/Creality Ender/S1/UBL/Configuration.h @@ -2566,7 +2566,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Creality Ender/S1/UBL/Version.h b/configurations/Creality Ender/S1/UBL/Version.h index d5fc2805c0..98250ff457 100644 --- a/configurations/Creality Ender/S1/UBL/Version.h +++ b/configurations/Creality Ender/S1/UBL/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Creality Ender/UBL/Configuration.h b/configurations/Creality Ender/UBL/Configuration.h index d4b6c86ae3..a633e08f2c 100644 --- a/configurations/Creality Ender/UBL/Configuration.h +++ b/configurations/Creality Ender/UBL/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Creality Ender/UBL/Version.h b/configurations/Creality Ender/UBL/Version.h index e2e5d8b25c..fe6609db36 100644 --- a/configurations/Creality Ender/UBL/Version.h +++ b/configurations/Creality Ender/UBL/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Voxelab Aquila 427/BLT/Configuration.h b/configurations/Voxelab Aquila 427/BLT/Configuration.h index 698f817597..a78b0af752 100644 --- a/configurations/Voxelab Aquila 427/BLT/Configuration.h +++ b/configurations/Voxelab Aquila 427/BLT/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Voxelab Aquila 427/BLT/Version.h b/configurations/Voxelab Aquila 427/BLT/Version.h index 369e1b8861..420d208ffd 100644 --- a/configurations/Voxelab Aquila 427/BLT/Version.h +++ b/configurations/Voxelab Aquila 427/BLT/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Voxelab Aquila 427/Default/Configuration.h b/configurations/Voxelab Aquila 427/Default/Configuration.h index 6c4e7a7ac4..77404f5603 100644 --- a/configurations/Voxelab Aquila 427/Default/Configuration.h +++ b/configurations/Voxelab Aquila 427/Default/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Voxelab Aquila 427/Default/Version.h b/configurations/Voxelab Aquila 427/Default/Version.h index 4e0874da31..f0938217bd 100644 --- a/configurations/Voxelab Aquila 427/Default/Version.h +++ b/configurations/Voxelab Aquila 427/Default/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Voxelab Aquila 427/MM/Configuration.h b/configurations/Voxelab Aquila 427/MM/Configuration.h index 6455103e89..2c489ee425 100644 --- a/configurations/Voxelab Aquila 427/MM/Configuration.h +++ b/configurations/Voxelab Aquila 427/MM/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Voxelab Aquila 427/MM/Version.h b/configurations/Voxelab Aquila 427/MM/Version.h index 81737ecc15..d2c8e8b870 100644 --- a/configurations/Voxelab Aquila 427/MM/Version.h +++ b/configurations/Voxelab Aquila 427/MM/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Voxelab Aquila 427/UBL/Configuration.h b/configurations/Voxelab Aquila 427/UBL/Configuration.h index 38242201a1..77dcfea74d 100644 --- a/configurations/Voxelab Aquila 427/UBL/Configuration.h +++ b/configurations/Voxelab Aquila 427/UBL/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Voxelab Aquila 427/UBL/Version.h b/configurations/Voxelab Aquila 427/UBL/Version.h index b4de8ef2c7..9962e52bc1 100644 --- a/configurations/Voxelab Aquila 427/UBL/Version.h +++ b/configurations/Voxelab Aquila 427/UBL/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Voxelab Aquila/BLT/Configuration.h b/configurations/Voxelab Aquila/BLT/Configuration.h index 74fcf9db5c..4e370ed20c 100644 --- a/configurations/Voxelab Aquila/BLT/Configuration.h +++ b/configurations/Voxelab Aquila/BLT/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Voxelab Aquila/BLT/Version.h b/configurations/Voxelab Aquila/BLT/Version.h index 369e1b8861..420d208ffd 100644 --- a/configurations/Voxelab Aquila/BLT/Version.h +++ b/configurations/Voxelab Aquila/BLT/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Voxelab Aquila/Default/Configuration.h b/configurations/Voxelab Aquila/Default/Configuration.h index 7eacb3958a..87aca53866 100644 --- a/configurations/Voxelab Aquila/Default/Configuration.h +++ b/configurations/Voxelab Aquila/Default/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Voxelab Aquila/Default/Version.h b/configurations/Voxelab Aquila/Default/Version.h index 4e0874da31..f0938217bd 100644 --- a/configurations/Voxelab Aquila/Default/Version.h +++ b/configurations/Voxelab Aquila/Default/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Voxelab Aquila/MM/Configuration.h b/configurations/Voxelab Aquila/MM/Configuration.h index 07e7bf1e1a..d54a82d11a 100644 --- a/configurations/Voxelab Aquila/MM/Configuration.h +++ b/configurations/Voxelab Aquila/MM/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Voxelab Aquila/MM/Version.h b/configurations/Voxelab Aquila/MM/Version.h index 81737ecc15..d2c8e8b870 100644 --- a/configurations/Voxelab Aquila/MM/Version.h +++ b/configurations/Voxelab Aquila/MM/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Voxelab Aquila/UBL/Configuration.h b/configurations/Voxelab Aquila/UBL/Configuration.h index c2bd56f33d..191534edfd 100644 --- a/configurations/Voxelab Aquila/UBL/Configuration.h +++ b/configurations/Voxelab Aquila/UBL/Configuration.h @@ -2568,7 +2568,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Voxelab Aquila/UBL/Version.h b/configurations/Voxelab Aquila/UBL/Version.h index b4de8ef2c7..9962e52bc1 100644 --- a/configurations/Voxelab Aquila/UBL/Version.h +++ b/configurations/Voxelab Aquila/UBL/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/Voxelab Aquila/X3/Configuration.h b/configurations/Voxelab Aquila/X3/Configuration.h index 4525cfbc66..6ed6644244 100644 --- a/configurations/Voxelab Aquila/X3/Configuration.h +++ b/configurations/Voxelab Aquila/X3/Configuration.h @@ -2570,7 +2570,7 @@ //#define NOZZLE_CLEAN_HEATUP // Heat up the nozzle instead of skipping wipe // Explicit wipe G-code script applies to a G12 with no arguments. - #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" + #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // PrusaSlicer Start G-code Purge Line #endif diff --git a/configurations/Voxelab Aquila/X3/Version.h b/configurations/Voxelab Aquila/X3/Version.h index 2a5d99ce33..ca3cf5ae72 100644 --- a/configurations/Voxelab Aquila/X3/Version.h +++ b/configurations/Voxelab Aquila/X3/Version.h @@ -41,7 +41,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ -//#define STRING_DISTRIBUTION_DATE "2024-08-03" +//#define STRING_DISTRIBUTION_DATE "2024-08-07" #define STRING_DISTRIBUTION_DATE __DATE__ #define STRING_DISTRIBUTION_TIME __TIME__ diff --git a/configurations/_Define_Configuration.h b/configurations/_Define_Configuration.h index a96c2e45c1..9c4f943be5 100644 --- a/configurations/_Define_Configuration.h +++ b/configurations/_Define_Configuration.h @@ -845,7 +845,7 @@ // #define NOZZLE_CLEAN_NO_Y // #define NOZZLE_CLEAN_MIN_TEMP 170 // #define NOZZLE_CLEAN_HEATUP -// #define WIPE_SEQUENCE_COMMANDS "G0 X2 Y200 Z50\nG0 Z0.3\nG0 Z0.3\nG92 E0\nG1 Y140 E10 F1500\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200\nG92 E0" +// #define WIPE_SEQUENCE_COMMANDS "G0X2Y200Z50\nG0Z0.3\nG0Z0.3\nG92E0\nG1Y140E10F1500\nG1X2.3F5000\nG92E0\nG1Y10E10F1200\nG92E0" // #define PRINTJOB_TIMER_AUTOSTART // #define PRINTCOUNTER // #define PRINTCOUNTER_SAVE_INTERVAL 60