From c44b5fd13acd7f399e2efbafc4f04bfdec54721c Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 18 Sep 2019 16:41:43 -0500 Subject: [PATCH 001/120] Try to fit logo by narrowing icons --- Marlin/src/lcd/dogm/dogm_Statusscreen.h | 66 ++++++++++++++----------- 1 file changed, 38 insertions(+), 28 deletions(-) diff --git a/Marlin/src/lcd/dogm/dogm_Statusscreen.h b/Marlin/src/lcd/dogm/dogm_Statusscreen.h index 46fc9f7f196b..a09e77880986 100644 --- a/Marlin/src/lcd/dogm/dogm_Statusscreen.h +++ b/Marlin/src/lcd/dogm/dogm_Statusscreen.h @@ -1206,20 +1206,42 @@ #define STATUS_FAN_WIDTH 0 #endif +#define _EXTRA_WIDTH (STATUS_FAN_WIDTH + STATUS_CHAMBER_WIDTH + STATUS_BED_WIDTH) + +// +// Heater Bitmap X Space Requirements +// +#if !defined(STATUS_HEATERS_XSPACE) && (STATUS_HOTEND1_WIDTH || STATUS_HEATERS_WIDTH) + #if (HOTENDS == 3 || HOTENDS == 4) && ENABLED(STATUS_COMBINE_HEATERS) + // If more heaters or they're combined, 3 bytes + #define STATUS_HEATERS_XSPACE 24 + #elif STATUS_LOGO_WIDTH > (LCD_PIXEL_WIDTH - (_EXTRA_WIDTH) - 26 * (HOTENDS)) // 128 - (20 + 24 + 26) == 58 + // If the logo won't fit at 26 width + #define STATUS_HEATERS_XSPACE 24 + #else + #define STATUS_HEATERS_XSPACE 26 + #endif +#endif + #if ENABLED(CUSTOM_STATUS_SCREEN_IMAGE) - #if STATUS_HOTEND1_WIDTH - #define HAS_SPACES ((LCD_PIXEL_WIDTH - (HOTENDS * STATUS_HOTEND1_WIDTH) - STATUS_BED_WIDTH - STATUS_CHAMBER_WIDTH - STATUS_FAN_WIDTH - 24) < STATUS_LOGO_WIDTH ? true : false) + // + // Disable the logo bitmap if insufficient space + // + #if STATUS_HEATERS_XSPACE + #define _HEATERS_WIDTH (HOTENDS * (STATUS_HEATERS_XSPACE)) // as many hotends as possible #elif STATUS_HEATERS_WIDTH - #define HAS_SPACES (((LCD_PIXEL_WIDTH - STATUS_HEATERS_WIDTH - STATUS_BED_WIDTH - STATUS_CHAMBER_WIDTH - STATUS_FAN_WIDTH - 20) < STATUS_LOGO_WIDTH) ? true : false) + #define _HEATERS_WIDTH STATUS_HEATERS_WIDTH + #else + #error "Status screen heaters region was not specified." #endif - - #if HAS_SPACES + #if STATUS_LOGO_WIDTH > (LCD_PIXEL_WIDTH - (_EXTRA_WIDTH + _HEATERS_WIDTH)) + #warning "Unable to fit custom Status Screen logo. Disabling." #undef STATUS_LOGO_WIDTH #endif #if (HOTENDS > 1 && STATUS_LOGO_WIDTH && BED_OR_CHAMBER_OR_FAN) || (HOTENDS >= 3 && !BED_OR_CHAMBER_OR_FAN) - #define _STATUS_HEATERS_X(H,S,N) (((LCD_PIXEL_WIDTH - (H * (S + N)) - STATUS_LOGO_WIDTH - STATUS_BED_WIDTH - STATUS_CHAMBER_WIDTH - STATUS_FAN_WIDTH) / 2) + STATUS_LOGO_WIDTH) + #define _STATUS_HEATERS_X(H,S,N) ((LCD_PIXEL_WIDTH - (H * (S + N)) - (_EXTRA_WIDTH) + (STATUS_LOGO_WIDTH)) / 2) #if STATUS_HOTEND1_WIDTH #if HOTENDS > 2 #define STATUS_HEATERS_X _STATUS_HEATERS_X(HOTENDS, STATUS_HOTEND1_WIDTH, 6) @@ -1259,33 +1281,21 @@ #endif // -// Heater Bitmap Properties +// Hotend Heater Bitmap starting X position // -#if STATUS_HOTEND1_WIDTH || STATUS_HEATERS_WIDTH - - #ifndef STATUS_HEATERS_XSPACE - #if (HOTENDS == 3 || HOTENDS == 4) && ENABLED(STATUS_COMBINE_HEATERS) - #define STATUS_HEATERS_XSPACE 24 - #else - #define STATUS_HEATERS_XSPACE 26 // Like the included bitmaps - #endif - #endif - - #ifndef STATUS_HEATERS_X - #if STATUS_LOGO_BYTEWIDTH - #define STATUS_HEATERS_X (STATUS_LOGO_BYTEWIDTH * 8) - #elif ((STATUS_CHAMBER_WIDTH || STATUS_FAN_WIDTH) && (STATUS_BED_WIDTH && STATUS_HOTEND_BITMAPS == 3)) || \ - ((STATUS_CHAMBER_WIDTH || STATUS_FAN_WIDTH || STATUS_BED_WIDTH) && STATUS_HOTEND_BITMAPS == 4) +#if !defined(STATUS_HEATERS_X) && (STATUS_HOTEND1_WIDTH || STATUS_HEATERS_WIDTH) + #if STATUS_LOGO_BYTEWIDTH + #define STATUS_HEATERS_X (STATUS_LOGO_BYTEWIDTH * 8) + #elif ((STATUS_CHAMBER_WIDTH || STATUS_FAN_WIDTH) && (STATUS_BED_WIDTH && STATUS_HOTEND_BITMAPS == 3)) || \ + ((STATUS_CHAMBER_WIDTH || STATUS_FAN_WIDTH || STATUS_BED_WIDTH) && STATUS_HOTEND_BITMAPS == 4) + #define STATUS_HEATERS_X 5 + #else + #if ENABLED(STATUS_COMBINE_HEATERS) && HAS_HEATED_BED && HOTENDS <= 4 #define STATUS_HEATERS_X 5 #else - #if ENABLED(STATUS_COMBINE_HEATERS) && HAS_HEATED_BED && HOTENDS <= 4 - #define STATUS_HEATERS_X 5 - #else - #define STATUS_HEATERS_X 8 // Like the included bitmaps - #endif + #define STATUS_HEATERS_X 8 // Like the included bitmaps #endif #endif - #endif #if STATUS_HOTEND1_WIDTH From bcf630d8d1417ec4aca3348ef2bbe9c060788368 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 18 Sep 2019 14:06:41 -0500 Subject: [PATCH 002/120] Clarify a sanity check --- Marlin/src/inc/SanityCheck.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 3920b2d59947..0b93522a20f3 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -837,7 +837,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS */ #if ENABLED(MIXING_EXTRUDER) #if EXTRUDERS > 1 - #error "MIXING_EXTRUDER currently only supports one extruder." + #error "For MIXING_EXTRUDER set MIXING_STEPPERS > 1 instead of EXTRUDERS > 1." #elif MIXING_STEPPERS < 2 #error "You must set MIXING_STEPPERS >= 2 for a mixing extruder." #elif ENABLED(FILAMENT_SENSOR) From 252f31b6f15fd9a012e64925d86d435fc59e3d35 Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Wed, 18 Sep 2019 15:04:13 -0700 Subject: [PATCH 003/120] Fix/improve backoff feedrates (#15300) --- Marlin/src/module/motion.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index a1f0cbf1502b..930584889c0c 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -1658,7 +1658,12 @@ void homeaxis(const AxisEnum axis) { ]; if (backoff_mm) { current_position[axis] -= ABS(backoff_mm) * axis_home_dir; - line_to_current_position(Z_PROBE_SPEED_FAST); + line_to_current_position( + #if HOMING_Z_WITH_PROBE + (axis == Z_AXIS) ? MMM_TO_MMS(Z_PROBE_SPEED_FAST) : + #endif + homing_feedrate(axis) + ); } #endif From 12e0581f249d7aafb394a6b9ca511a9b5f337cba Mon Sep 17 00:00:00 2001 From: Evgeny Zyatkov Date: Thu, 19 Sep 2019 01:06:01 +0300 Subject: [PATCH 004/120] SKR Pro Neopixel support (#15274) --- platformio.ini | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/platformio.ini b/platformio.ini index d448876e5ff3..14844d41817a 100644 --- a/platformio.ini +++ b/platformio.ini @@ -486,8 +486,13 @@ extra_scripts = pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py build_flags = ${common.build_flags} -DUSBCON -DUSBD_USE_CDC -DUSBD_VID=0x0483 -DUSB_PRODUCT=\"STM32F407ZG\" -DTARGET_STM32F4 -DSTM32F407_5ZX -DVECT_TAB_OFFSET=0x8000 -DHAVE_HWSERIAL6 -lib_deps = ${common.lib_deps} -lib_ignore = Adafruit NeoPixel, SailfishLCD, SailfishRGB_LED, SlowSoftI2CMaster +lib_deps = + U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/bugfix.zip + LiquidCrystal@1.3.4 + TMCStepper@<1.0.0 + Adafruit NeoPixel + LiquidTWI2=https://github.com/lincomatic/LiquidTWI2/archive/master.zip + Arduino-L6470=https://github.com/ameyer/Arduino-L6470/archive/dev.zip src_filter = ${common.default_src_filter} + monitor_speed = 250000 From 7f117bfc60aa3fd71e3d53892be39c7cd2d3d96c Mon Sep 17 00:00:00 2001 From: Marcio Teixeira Date: Wed, 18 Sep 2019 18:35:03 -0600 Subject: [PATCH 005/120] EXTENSIBLE_UI Joystick support (#15303) --- Marlin/src/feature/joystick.cpp | 76 +++++++++++-------- Marlin/src/feature/joystick.h | 2 +- .../ftdi_eve_lib/extended/event_loop.cpp | 8 +- .../lulzbot/screens/bio_confirm_home_e.cpp | 8 +- .../lulzbot/screens/bio_confirm_home_xyz.cpp | 5 +- .../screens/bio_printing_dialog_box.cpp | 1 + .../lib/lulzbot/screens/bio_status_screen.cpp | 50 +++++++----- .../lib/lulzbot/screens/main_menu.cpp | 2 +- Marlin/src/lcd/extensible_ui/ui_api.cpp | 25 ++++-- Marlin/src/lcd/extensible_ui/ui_api.h | 7 ++ 10 files changed, 114 insertions(+), 70 deletions(-) diff --git a/Marlin/src/feature/joystick.cpp b/Marlin/src/feature/joystick.cpp index efadeeff3033..45507339c565 100644 --- a/Marlin/src/feature/joystick.cpp +++ b/Marlin/src/feature/joystick.cpp @@ -36,6 +36,10 @@ Joystick joystick; +#if ENABLED(EXTENSIBLE_UI) + #include "../lcd/extensible_ui/ui_api.h" +#endif + #if HAS_JOY_ADC_X temp_info_t Joystick::x; // = { 0 } #endif @@ -65,35 +69,39 @@ Joystick joystick; } #endif -void Joystick::calculate(float norm_jog[XYZ]) { - // Do nothing if enable pin (active-low) is not LOW - #if HAS_JOY_ADC_EN - if (READ(JOY_EN_PIN)) return; - #endif - - auto _normalize_joy = [](float &adc, const int16_t raw, const int16_t (&joy_limits)[4]) { - if (WITHIN(raw, joy_limits[0], joy_limits[3])) { - // within limits, check deadzone - if (raw > joy_limits[2]) - adc = (raw - joy_limits[2]) / float(joy_limits[3] - joy_limits[2]); - else if (raw < joy_limits[1]) - adc = (raw - joy_limits[1]) / float(joy_limits[1] - joy_limits[0]); // negative value - } - }; - - #if HAS_JOY_ADC_X - static constexpr int16_t joy_x_limits[4] = JOY_X_LIMITS; - _normalize_joy(norm_jog[X_AXIS], x.raw, joy_x_limits); - #endif - #if HAS_JOY_ADC_Y - static constexpr int16_t joy_y_limits[4] = JOY_Y_LIMITS; - _normalize_joy(norm_jog[Y_AXIS], y.raw, joy_y_limits); - #endif - #if HAS_JOY_ADC_Z - static constexpr int16_t joy_z_limits[4] = JOY_Z_LIMITS; - _normalize_joy(norm_jog[Z_AXIS], z.raw, joy_z_limits); - #endif -} +#if HAS_JOY_ADC_X || HAS_JOY_ADC_Y || HAS_JOY_ADC_Z + + void Joystick::calculate(float (&norm_jog)[XYZ]) { + // Do nothing if enable pin (active-low) is not LOW + #if HAS_JOY_ADC_EN + if (READ(JOY_EN_PIN)) return; + #endif + + auto _normalize_joy = [](float &adc, const int16_t raw, const int16_t (&joy_limits)[4]) { + if (WITHIN(raw, joy_limits[0], joy_limits[3])) { + // within limits, check deadzone + if (raw > joy_limits[2]) + adc = (raw - joy_limits[2]) / float(joy_limits[3] - joy_limits[2]); + else if (raw < joy_limits[1]) + adc = (raw - joy_limits[1]) / float(joy_limits[1] - joy_limits[0]); // negative value + } + }; + + #if HAS_JOY_ADC_X + static constexpr int16_t joy_x_limits[4] = JOY_X_LIMITS; + _normalize_joy(norm_jog[X_AXIS], x.raw, joy_x_limits); + #endif + #if HAS_JOY_ADC_Y + static constexpr int16_t joy_y_limits[4] = JOY_Y_LIMITS; + _normalize_joy(norm_jog[Y_AXIS], y.raw, joy_y_limits); + #endif + #if HAS_JOY_ADC_Z + static constexpr int16_t joy_z_limits[4] = JOY_Z_LIMITS; + _normalize_joy(norm_jog[Z_AXIS], z.raw, joy_z_limits); + #endif + } + +#endif #if ENABLED(POLL_JOG) @@ -122,11 +130,19 @@ void Joystick::calculate(float norm_jog[XYZ]) { float norm_jog[XYZ] = { 0 }; // Use ADC values and defined limits. The active zone is normalized: -1..0 (dead) 0..1 - joystick.calculate(norm_jog); + #if HAS_JOY_ADC_X || HAS_JOY_ADC_Y || HAS_JOY_ADC_Z + joystick.calculate(norm_jog); + #endif // Other non-joystick poll-based jogging could be implemented here // with "jogging" encapsulated as a more general class. + #if ENABLED(EXTENSIBLE_UI) + norm_jog[X_AXIS] = ExtUI::norm_jog[X_AXIS]; + norm_jog[Y_AXIS] = ExtUI::norm_jog[Y_AXIS]; + norm_jog[Z_AXIS] = ExtUI::norm_jog[Z_AXIS]; + #endif + // Jogging value maps continuously (quadratic relationship) to feedrate float move_dist[XYZ] = { 0 }, hypot2 = 0; LOOP_XYZ(i) if (norm_jog[i]) { diff --git a/Marlin/src/feature/joystick.h b/Marlin/src/feature/joystick.h index 57dd5deeb577..e96120517e96 100644 --- a/Marlin/src/feature/joystick.h +++ b/Marlin/src/feature/joystick.h @@ -46,7 +46,7 @@ class Joystick { #if ENABLED(JOYSTICK_DEBUG) static void report(); #endif - static void calculate(float norm_jog[XYZ]); + static void calculate(float (&norm_jog)[XYZ]); static void inject_jog_moves(); }; diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/event_loop.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/event_loop.cpp index a9194fdaba74..3fe868ec7e9d 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/event_loop.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/event_loop.cpp @@ -156,9 +156,11 @@ namespace FTDI { if (!UIData::flags.bits.touch_debouncing) { if (tag == pressed_tag) { // The user is holding down a button. - if (touch_timer.elapsed(1000 / TOUCH_REPEATS_PER_SECOND) && current_screen.onTouchHeld(tag)) { - current_screen.onRefresh(); - if (UIData::flags.bits.touch_repeat_sound) sound.play(repeat_sound); + if (touch_timer.elapsed(1000 / TOUCH_REPEATS_PER_SECOND)) { + if (current_screen.onTouchHeld(tag)) { + current_screen.onRefresh(); + if (UIData::flags.bits.touch_repeat_sound) sound.play(repeat_sound); + } touch_timer.start(); } } diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp index c43a80e1c329..ec6b6045e77d 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp @@ -36,13 +36,7 @@ void BioConfirmHomeE::onRedraw(draw_mode_t) { bool BioConfirmHomeE::onTouchEnd(uint8_t tag) { switch (tag) { case 1: - SpinnerDialogBox::enqueueAndWait_P(F( - "G112\n" /* Home extruder */ - LULZBOT_AXIS_LEVELING_COMMANDS /* Level X axis */ - "G0 X115 Z50 F6000\n" /* Goto loading position */ - "M400\n" /* Wait for moves to finish */ - "M18 X Y" /* Unlock motors */ - )); + SpinnerDialogBox::enqueueAndWait_P(F(LULZBOT_HOME_E_COMMANDS)); current_screen.forget(); break; case 2: diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp index 091a2baaf3ce..71fc02bd1491 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp @@ -36,10 +36,7 @@ void BioConfirmHomeXYZ::onRedraw(draw_mode_t) { bool BioConfirmHomeXYZ::onTouchEnd(uint8_t tag) { switch (tag) { case 1: - SpinnerDialogBox::enqueueAndWait_P(F( - "G28 X Y Z\n" /* Home all axis */ - "G0 X115 Z50 F6000" /* Move to park position */ - )); + SpinnerDialogBox::enqueueAndWait_P(F(LULZBOT_HOME_XYZ_COMMANDS)); current_screen.forget(); break; case 2: diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_printing_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_printing_dialog_box.cpp index 93e3335574f2..c24eb53a74d9 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_printing_dialog_box.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_printing_dialog_box.cpp @@ -141,6 +141,7 @@ void BioPrintingDialogBox::setStatusMessage(const char* message) { } void BioPrintingDialogBox::onIdle() { + reset_menu_timeout(); if (refresh_timer.elapsed(STATUS_UPDATE_INTERVAL)) { onRefresh(); refresh_timer.start(); diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp index f414fef47beb..3f8b3d611ae4 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp @@ -37,6 +37,9 @@ #define POLY(A) PolyUI::poly_reader_t(A, sizeof(A)/sizeof(A[0])) const uint8_t shadow_depth = 5; +const float max_speed = 0.30; +const float min_speed = 0.05; +const uint8_t num_speeds = 10; using namespace FTDI; using namespace Theme; @@ -248,7 +251,7 @@ void StatusScreen::onRedraw(draw_mode_t what) { } bool StatusScreen::onTouchStart(uint8_t) { - increment = fine_motion ? 0.25 : 1; + increment = min_speed; return true; } @@ -263,6 +266,11 @@ bool StatusScreen::onTouchEnd(uint8_t tag) { jog_xy = true; injectCommands_P(PSTR("M17")); } + jog(0, 0, 0); + break; + case 5: + case 6: + jog(0, 0, 0); break; case 9: GOTO_SCREEN(FilesScreen); break; case 10: GOTO_SCREEN(MainMenu); break; @@ -280,25 +288,31 @@ bool StatusScreen::onTouchEnd(uint8_t tag) { bool StatusScreen::onTouchHeld(uint8_t tag) { if (tag >= 1 && tag <= 4 && !jog_xy) return false; - if (ExtUI::isMoving()) return false; // Don't allow moves to accumulate - #define UI_INCREMENT_AXIS(axis) MoveAxisScreen::setManualFeedrate(axis, increment); UI_INCREMENT(AxisPosition_mm, axis); - #define UI_DECREMENT_AXIS(axis) MoveAxisScreen::setManualFeedrate(axis, increment); UI_DECREMENT(AxisPosition_mm, axis); + const float s = fine_motion ? min_speed : increment; switch (tag) { - case 1: UI_DECREMENT_AXIS(X); break; - case 2: UI_INCREMENT_AXIS(X); break; - case 4: UI_DECREMENT_AXIS(Y); break; // NOTE: Y directions inverted because bed rather than needle moves - case 3: UI_INCREMENT_AXIS(Y); break; - case 5: UI_DECREMENT_AXIS(Z); break; - case 6: UI_INCREMENT_AXIS(Z); break; - case 7: UI_DECREMENT_AXIS(E0); break; - case 8: UI_INCREMENT_AXIS(E0); break; - default: return false; + case 1: jog(-s, 0, 0); break; + case 2: jog( s, 0, 0); break; + case 4: jog( 0, -s, 0); break; // NOTE: Y directions inverted because bed rather than needle moves + case 3: jog( 0, s, 0); break; + case 5: jog( 0, 0, -s); break; + case 6: jog( 0, 0, s); break; + case 7: + if (ExtUI::isMoving()) return false; + MoveAxisScreen::setManualFeedrate(E0, 1); + UI_INCREMENT(AxisPosition_mm, E0); + current_screen.onRefresh(); + break; + case 8: + if (ExtUI::isMoving()) return false; + MoveAxisScreen::setManualFeedrate(E0, 1); + UI_DECREMENT(AxisPosition_mm, E0); + current_screen.onRefresh(); + break; + default: + return false; } - #undef UI_DECREMENT_AXIS - #undef UI_INCREMENT_AXIS - if (increment < 10 && !fine_motion) - increment += 0.5; - current_screen.onRefresh(); + if (increment < max_speed) + increment += (max_speed - min_speed) / num_speeds; return false; } diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/main_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/main_menu.cpp index 827e3b5a1555..ae6dd58c241a 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/main_menu.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/main_menu.cpp @@ -69,7 +69,7 @@ void MainMenu::onRedraw(draw_mode_t what) { #else #define GRID_ROWS 5 #define GRID_COLS 2 - .tag(2).button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXT(AUTO_HOME)) + .tag(2).button( BTN_POS(1,1), BTN_SIZE(1,1), GET_TEXTF(AUTO_HOME)) #if ENABLED(NOZZLE_CLEAN_FEATURE) .enabled(1) #else diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp index 851e8179ba16..28b2ec006a39 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.cpp +++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp @@ -102,12 +102,16 @@ #include "../../feature/host_actions.h" #endif -static struct { - uint8_t printer_killed : 1; - uint8_t manual_motion : 1; -} flags; - namespace ExtUI { + static struct { + uint8_t printer_killed : 1; + uint8_t manual_motion : 1; + } flags; + + #if ENABLED(JOYSTICK) + float norm_jog[XYZ]; + #endif + #ifdef __SAM3X8E__ /** * Implement a special millis() to allow time measurement @@ -193,6 +197,14 @@ namespace ExtUI { #endif } + void jog(float dx, float dy, float dz) { + #if ENABLED(JOYSTICK) + norm_jog[X] = dx; + norm_jog[Y] = dy; + norm_jog[Z] = dz; + #endif + } + bool isHeaterIdle(const extruder_t extruder) { return false #if HOTENDS && HEATER_IDLE_HANDLER @@ -1037,9 +1049,10 @@ void MarlinUI::update() { } void MarlinUI::kill_screen(PGM_P const msg) { + using namespace ExtUI; if (!flags.printer_killed) { flags.printer_killed = true; - ExtUI::onPrinterKilled(msg); + onPrinterKilled(msg); } } diff --git a/Marlin/src/lcd/extensible_ui/ui_api.h b/Marlin/src/lcd/extensible_ui/ui_api.h index 29cfea61fe44..6d040e2db925 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.h +++ b/Marlin/src/lcd/extensible_ui/ui_api.h @@ -45,6 +45,11 @@ #include "../../inc/MarlinConfig.h" namespace ExtUI { + + #if ENABLED(JOYSTICK) + extern float norm_jog[]; + #endif + // The ExtUI implementation can store up to this many bytes // in the EEPROM when the methods onStoreSettings and // onLoadSettings are called. @@ -79,6 +84,8 @@ namespace ExtUI { void enableHeater(const heater_t); void enableHeater(const extruder_t); + void jog(float dx, float dy, float dz); + /** * Getters and setters * Should be used by the EXTENSIBLE_UI to query or change Marlin's state. From 86e0b9eb05f26863262c4b089fd186986b5aed14 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 19 Sep 2019 00:00:08 -0500 Subject: [PATCH 006/120] [cron] Bump distribution date --- Marlin/src/inc/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index dbb1b6b4a945..52712e1e1f25 100644 --- a/Marlin/src/inc/Version.h +++ b/Marlin/src/inc/Version.h @@ -51,7 +51,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ - #define STRING_DISTRIBUTION_DATE "2019-09-18" + #define STRING_DISTRIBUTION_DATE "2019-09-19" /** * Required minimum Configuration.h and Configuration_adv.h file versions. From 1803c27afb6a2991415e465b06c869a88c8666ab Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 19 Sep 2019 01:28:31 -0500 Subject: [PATCH 007/120] Fix macros for overloaded comparisons --- Marlin/src/core/macros.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h index a24aea3ef7e4..3a10340559b2 100644 --- a/Marlin/src/core/macros.h +++ b/Marlin/src/core/macros.h @@ -103,14 +103,14 @@ // C++11 solution that is standards compliant. template static inline constexpr void NOLESS(V& v, const N n) { - if (v < n) v = n; + if (n > v) v = n; } template static inline constexpr void NOMORE(V& v, const N n) { - if (v > n) v = n; + if (n < v) v = n; } template static inline constexpr void LIMIT(V& v, const N1 n1, const N2 n2) { - if (v < n1) v = n1; - else if (v > n2) v = n2; + if (n1 > v) v = n1; + else if (n2 < v) v = n2; } #else @@ -120,21 +120,21 @@ #define NOLESS(v, n) \ do{ \ __typeof__(n) _n = (n); \ - if (v < _n) v = _n; \ + if (_n > v) v = _n; \ }while(0) #define NOMORE(v, n) \ do{ \ __typeof__(n) _n = (n); \ - if (v > _n) v = _n; \ + if (_n < v) v = _n; \ }while(0) #define LIMIT(v, n1, n2) \ do{ \ __typeof__(n1) _n1 = (n1); \ __typeof__(n2) _n2 = (n2); \ - if (v < _n1) v = _n1; \ - else if (v > _n2) v = _n2; \ + if (_n1 > v) v = _n1; \ + else if (_n2 < v) v = _n2; \ }while(0) #endif From f412267766696276a870646f6b7e0237da6a3a50 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 19 Sep 2019 16:21:50 -0500 Subject: [PATCH 008/120] Fix "Auto Build window hidden behind" --- buildroot/share/atom/auto_build.py | 1 + 1 file changed, 1 insertion(+) diff --git a/buildroot/share/atom/auto_build.py b/buildroot/share/atom/auto_build.py index 0faa8ca0c445..c159953aae72 100644 --- a/buildroot/share/atom/auto_build.py +++ b/buildroot/share/atom/auto_build.py @@ -149,6 +149,7 @@ def kill_session(): kill_session_() root_get_answer = tk.Tk() + root_get_answer.attributes("-topmost", True) root_get_answer.chk_state_1 = 1 # declare variables used by TK and enable From 6a312fae8066788466cf129f048be53b59ab17f6 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Thu, 19 Sep 2019 19:44:07 -0400 Subject: [PATCH 009/120] Add before/after dir change delays (#15314) --- Marlin/Configuration_adv.h | 5 ++-- Marlin/src/inc/Conditionals_post.h | 22 ++++++++------- Marlin/src/module/stepper.cpp | 27 ++++++++++++++----- config/default/Configuration_adv.h | 5 ++-- .../3DFabXYZ/Migbot/Configuration_adv.h | 5 ++-- .../ADIMLab/Gantry v1/Configuration_adv.h | 5 ++-- .../ADIMLab/Gantry v2/Configuration_adv.h | 5 ++-- .../AlephObjects/TAZ4/Configuration_adv.h | 5 ++-- .../Alfawise/U20-bltouch/Configuration_adv.h | 5 ++-- .../examples/Alfawise/U20/Configuration_adv.h | 5 ++-- .../AliExpress/UM2pExt/Configuration_adv.h | 5 ++-- config/examples/Anet/A2/Configuration_adv.h | 5 ++-- .../examples/Anet/A2plus/Configuration_adv.h | 5 ++-- config/examples/Anet/A6/Configuration_adv.h | 5 ++-- config/examples/Anet/A8/Configuration_adv.h | 5 ++-- .../examples/Anet/A8plus/Configuration_adv.h | 5 ++-- config/examples/Anet/E16/Configuration_adv.h | 5 ++-- .../examples/AnyCubic/i3/Configuration_adv.h | 5 ++-- config/examples/ArmEd/Configuration_adv.h | 5 ++-- .../BIBO/TouchX/cyclops/Configuration_adv.h | 5 ++-- .../BIBO/TouchX/default/Configuration_adv.h | 5 ++-- .../examples/BQ/Hephestos/Configuration_adv.h | 5 ++-- .../BQ/Hephestos_2/Configuration_adv.h | 5 ++-- config/examples/BQ/WITBOX/Configuration_adv.h | 5 ++-- config/examples/Cartesio/Configuration_adv.h | 5 ++-- .../Creality/CR-10/Configuration_adv.h | 5 ++-- .../Creality/CR-10S/Configuration_adv.h | 5 ++-- .../Creality/CR-10_5S/Configuration_adv.h | 5 ++-- .../Creality/CR-10mini/Configuration_adv.h | 5 ++-- .../Creality/CR-20 Pro/Configuration_adv.h | 5 ++-- .../Creality/CR-20/Configuration_adv.h | 5 ++-- .../Creality/CR-8/Configuration_adv.h | 5 ++-- .../Creality/Ender-2/Configuration_adv.h | 5 ++-- .../Creality/Ender-3/Configuration_adv.h | 5 ++-- .../Creality/Ender-4/Configuration_adv.h | 5 ++-- .../Creality/Ender-5/Configuration_adv.h | 5 ++-- .../Dagoma/Disco Ultimate/Configuration_adv.h | 5 ++-- .../Sidewinder X1/Configuration_adv.h | 5 ++-- .../examples/Einstart-S/Configuration_adv.h | 5 ++-- .../FYSETC/AIO_II/Configuration_adv.h | 5 ++-- .../Cheetah 1.2/BLTouch/Configuration_adv.h | 5 ++-- .../Cheetah 1.2/base/Configuration_adv.h | 5 ++-- .../Cheetah/BLTouch/Configuration_adv.h | 5 ++-- .../FYSETC/Cheetah/base/Configuration_adv.h | 5 ++-- .../examples/FYSETC/F6_13/Configuration_adv.h | 5 ++-- config/examples/Felix/Configuration_adv.h | 5 ++-- .../FlashForge/CreatorPro/Configuration_adv.h | 5 ++-- .../FolgerTech/i3-2020/Configuration_adv.h | 5 ++-- .../Formbot/Raptor/Configuration_adv.h | 5 ++-- .../Formbot/T_Rex_2+/Configuration_adv.h | 5 ++-- .../Formbot/T_Rex_3/Configuration_adv.h | 5 ++-- .../examples/Geeetech/A10/Configuration_adv.h | 5 ++-- .../Geeetech/A10M/Configuration_adv.h | 5 ++-- .../Geeetech/A20M/Configuration_adv.h | 5 ++-- .../Geeetech/MeCreator2/Configuration_adv.h | 5 ++-- .../Prusa i3 Pro C/Configuration_adv.h | 5 ++-- .../Prusa i3 Pro W/Configuration_adv.h | 5 ++-- config/examples/HMS434/Configuration_adv.h | 5 ++-- .../Infitary/i3-M508/Configuration_adv.h | 5 ++-- .../examples/JGAurora/A1/Configuration_adv.h | 5 ++-- .../examples/JGAurora/A5/Configuration_adv.h | 5 ++-- .../examples/JGAurora/A5S/Configuration_adv.h | 5 ++-- .../examples/MakerParts/Configuration_adv.h | 5 ++-- .../examples/Malyan/M150/Configuration_adv.h | 5 ++-- .../examples/Malyan/M200/Configuration_adv.h | 5 ++-- .../Micromake/C1/enhanced/Configuration_adv.h | 5 ++-- config/examples/Mks/Robin/Configuration_adv.h | 5 ++-- config/examples/Mks/Sbase/Configuration_adv.h | 5 ++-- .../RapideLite/RL200/Configuration_adv.h | 5 ++-- config/examples/RigidBot/Configuration_adv.h | 5 ++-- config/examples/SCARA/Configuration_adv.h | 5 ++-- .../Black_STM32F407VET6/Configuration_adv.h | 5 ++-- .../examples/Sanguinololu/Configuration_adv.h | 5 ++-- .../Tevo/Michelangelo/Configuration_adv.h | 5 ++-- .../Tevo/Tarantula Pro/Configuration_adv.h | 5 ++-- .../Tornado/V1 (MKS Base)/Configuration_adv.h | 5 ++-- .../V2 (MKS GEN-L)/Configuration_adv.h | 5 ++-- config/examples/TheBorg/Configuration_adv.h | 5 ++-- config/examples/TinyBoy2/Configuration_adv.h | 5 ++-- .../examples/Tronxy/X3A/Configuration_adv.h | 5 ++-- .../Tronxy/X5S-2E/Configuration_adv.h | 5 ++-- .../UltiMachine/Archim1/Configuration_adv.h | 5 ++-- .../UltiMachine/Archim2/Configuration_adv.h | 5 ++-- .../examples/VORONDesign/Configuration_adv.h | 5 ++-- .../Velleman/K8200/Configuration_adv.h | 5 ++-- .../Velleman/K8400/Configuration_adv.h | 5 ++-- .../WASP/PowerWASP/Configuration_adv.h | 5 ++-- .../Wanhao/Duplicator 6/Configuration_adv.h | 5 ++-- .../Duplicator i3 Mini/Configuration_adv.h | 5 ++-- .../delta/Anycubic/Kossel/Configuration_adv.h | 5 ++-- .../Dreammaker/Overlord/Configuration_adv.h | 5 ++-- .../Overlord_Pro/Configuration_adv.h | 5 ++-- .../FLSUN/auto_calibrate/Configuration_adv.h | 5 ++-- .../delta/FLSUN/kossel/Configuration_adv.h | 5 ++-- .../FLSUN/kossel_mini/Configuration_adv.h | 5 ++-- .../Geeetech/Rostock 301/Configuration_adv.h | 5 ++-- .../delta/MKS/SBASE/Configuration_adv.h | 5 ++-- .../Tevo Little Monster/Configuration_adv.h | 5 ++-- .../delta/generic/Configuration_adv.h | 5 ++-- .../delta/kossel_mini/Configuration_adv.h | 5 ++-- .../delta/kossel_xl/Configuration_adv.h | 5 ++-- .../gCreate/gMax1.5+/Configuration_adv.h | 5 ++-- config/examples/makibox/Configuration_adv.h | 5 ++-- .../tvrrug/Round2/Configuration_adv.h | 5 ++-- config/examples/wt150/Configuration_adv.h | 5 ++-- 105 files changed, 342 insertions(+), 222 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 6aee0c1eaff3..665e77753da6 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 1d9724094325..e9a4f1f382e0 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -547,26 +547,30 @@ #define TRINAMICS (HAS_TRINAMIC || HAS_DRIVER(TMC2130_STANDALONE) || HAS_DRIVER(TMC2208_STANDALONE) || HAS_DRIVER(TMC2209_STANDALONE) || HAS_DRIVER(TMC26X_STANDALONE) || HAS_DRIVER(TMC2660_STANDALONE) || HAS_DRIVER(TMC5130_STANDALONE) || HAS_DRIVER(TMC5160_STANDALONE) || HAS_DRIVER(TMC2160_STANDALONE)) -#ifndef MINIMUM_STEPPER_DIR_DELAY +#ifndef MINIMUM_STEPPER_POST_DIR_DELAY #if HAS_DRIVER(TB6560) - #define MINIMUM_STEPPER_DIR_DELAY 15000 + #define MINIMUM_STEPPER_POST_DIR_DELAY 15000 #elif HAS_DRIVER(TB6600) - #define MINIMUM_STEPPER_DIR_DELAY 1500 + #define MINIMUM_STEPPER_POST_DIR_DELAY 1500 #elif HAS_DRIVER(DRV8825) - #define MINIMUM_STEPPER_DIR_DELAY 650 + #define MINIMUM_STEPPER_POST_DIR_DELAY 650 #elif HAS_DRIVER(LV8729) - #define MINIMUM_STEPPER_DIR_DELAY 500 + #define MINIMUM_STEPPER_POST_DIR_DELAY 500 #elif HAS_DRIVER(A5984) - #define MINIMUM_STEPPER_DIR_DELAY 400 + #define MINIMUM_STEPPER_POST_DIR_DELAY 400 #elif HAS_DRIVER(A4988) - #define MINIMUM_STEPPER_DIR_DELAY 200 + #define MINIMUM_STEPPER_POST_DIR_DELAY 200 #elif TRINAMICS - #define MINIMUM_STEPPER_DIR_DELAY 20 + #define MINIMUM_STEPPER_POST_DIR_DELAY 20 #else - #define MINIMUM_STEPPER_DIR_DELAY 0 // Expect at least 10µS since one Stepper ISR must transpire + #define MINIMUM_STEPPER_POST_DIR_DELAY 0 // Expect at least 10µS since one Stepper ISR must transpire #endif #endif +#ifndef MINIMUM_STEPPER_PRE_DIR_DELAY + #define MINIMUM_STEPPER_PRE_DIR_DELAY MINIMUM_STEPPER_POST_DIR_DELAY +#endif + #ifndef MINIMUM_STEPPER_PULSE #if HAS_DRIVER(TB6560) #define MINIMUM_STEPPER_PULSE 30 diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 8163416cb0d1..b806cb1142e8 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -358,6 +358,10 @@ void Stepper::set_directions() { uint8_t L6470_buf[MAX_L6470 + 1]; // chip command sequence - element 0 not used #endif + #if MINIMUM_STEPPER_PRE_DIR_DELAY > 0 + DELAY_NS(MINIMUM_STEPPER_PRE_DIR_DELAY); + #endif + #define SET_STEP_DIR(A) \ if (motor_direction(_AXIS(A))) { \ A##_APPLY_DIR(INVERT_## A##_DIR, false); \ @@ -426,8 +430,8 @@ void Stepper::set_directions() { #endif // A small delay may be needed after changing direction - #if MINIMUM_STEPPER_DIR_DELAY > 0 - DELAY_NS(MINIMUM_STEPPER_DIR_DELAY); + #if MINIMUM_STEPPER_POST_DIR_DELAY > 0 + DELAY_NS(MINIMUM_STEPPER_POST_DIR_DELAY); #endif } @@ -1887,6 +1891,10 @@ uint32_t Stepper::stepper_block_phase_isr() { else interval = LA_ADV_NEVER; + #if MINIMUM_STEPPER_PRE_DIR_DELAY > 0 + DELAY_NS(MINIMUM_STEPPER_PRE_DIR_DELAY); + #endif + #if ENABLED(MIXING_EXTRUDER) // We don't know which steppers will be stepped because LA loop follows, // with potentially multiple steps. Set all. @@ -1902,8 +1910,8 @@ uint32_t Stepper::stepper_block_phase_isr() { #endif // A small delay may be needed after changing direction - #if MINIMUM_STEPPER_DIR_DELAY > 0 - DELAY_NS(MINIMUM_STEPPER_DIR_DELAY); + #if MINIMUM_STEPPER_POST_DIR_DELAY > 0 + DELAY_NS(MINIMUM_STEPPER_POST_DIR_DELAY); #endif // Get the timer count and estimate the end of the pulse @@ -2353,8 +2361,9 @@ void Stepper::report_positions() { #define BABYSTEP_AXIS(AXIS, INVERT, DIR) { \ const uint8_t old_dir = _READ_DIR(AXIS); \ _ENABLE(AXIS); \ + DELAY_NS(MINIMUM_STEPPER_PRE_DIR_DELAY); \ _APPLY_DIR(AXIS, _INVERT_DIR(AXIS)^DIR^INVERT); \ - DELAY_NS(MINIMUM_STEPPER_DIR_DELAY); \ + DELAY_NS(MINIMUM_STEPPER_POST_DIR_DELAY); \ _SAVE_START; \ _APPLY_STEP(AXIS)(!_INVERT_STEP_PIN(AXIS), true); \ _PULSE_WAIT; \ @@ -2418,6 +2427,10 @@ void Stepper::report_positions() { enable_Y(); enable_Z(); + #if MINIMUM_STEPPER_PRE_DIR_DELAY > 0 + DELAY_NS(MINIMUM_STEPPER_PRE_DIR_DELAY); + #endif + const uint8_t old_x_dir_pin = X_DIR_READ(), old_y_dir_pin = Y_DIR_READ(), old_z_dir_pin = Z_DIR_READ(); @@ -2426,8 +2439,8 @@ void Stepper::report_positions() { Y_DIR_WRITE(INVERT_Y_DIR ^ z_direction); Z_DIR_WRITE(INVERT_Z_DIR ^ z_direction); - #if MINIMUM_STEPPER_DIR_DELAY > 0 - DELAY_NS(MINIMUM_STEPPER_DIR_DELAY); + #if MINIMUM_STEPPER_POST_DIR_DELAY > 0 + DELAY_NS(MINIMUM_STEPPER_POST_DIR_DELAY); #endif _SAVE_START; diff --git a/config/default/Configuration_adv.h b/config/default/Configuration_adv.h index 6aee0c1eaff3..665e77753da6 100644 --- a/config/default/Configuration_adv.h +++ b/config/default/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h index 218b7d791315..2a10317d7c4b 100644 --- a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h +++ b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h index dd3c9ac0e468..de24d84791fd 100644 --- a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h index ef5bcb83775a..56c406b63fb2 100644 --- a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/AlephObjects/TAZ4/Configuration_adv.h b/config/examples/AlephObjects/TAZ4/Configuration_adv.h index 2e578a821099..c598db0fd4d3 100644 --- a/config/examples/AlephObjects/TAZ4/Configuration_adv.h +++ b/config/examples/AlephObjects/TAZ4/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h index bee03c9c9a4d..c0bc1ea86d1e 100644 --- a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h +++ b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h @@ -1378,7 +1378,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1390,7 +1390,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Alfawise/U20/Configuration_adv.h b/config/examples/Alfawise/U20/Configuration_adv.h index f94e3490387a..a13605d7b1a0 100644 --- a/config/examples/Alfawise/U20/Configuration_adv.h +++ b/config/examples/Alfawise/U20/Configuration_adv.h @@ -1377,7 +1377,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1389,7 +1389,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/AliExpress/UM2pExt/Configuration_adv.h b/config/examples/AliExpress/UM2pExt/Configuration_adv.h index 58452f39144e..c56cdf81aa46 100644 --- a/config/examples/AliExpress/UM2pExt/Configuration_adv.h +++ b/config/examples/AliExpress/UM2pExt/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Anet/A2/Configuration_adv.h b/config/examples/Anet/A2/Configuration_adv.h index 63514e2f0646..53617ceb2ef8 100644 --- a/config/examples/Anet/A2/Configuration_adv.h +++ b/config/examples/Anet/A2/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Anet/A2plus/Configuration_adv.h b/config/examples/Anet/A2plus/Configuration_adv.h index 63514e2f0646..53617ceb2ef8 100644 --- a/config/examples/Anet/A2plus/Configuration_adv.h +++ b/config/examples/Anet/A2plus/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Anet/A6/Configuration_adv.h b/config/examples/Anet/A6/Configuration_adv.h index 1782244d367a..32799ec0640c 100644 --- a/config/examples/Anet/A6/Configuration_adv.h +++ b/config/examples/Anet/A6/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Anet/A8/Configuration_adv.h b/config/examples/Anet/A8/Configuration_adv.h index 3db14fcd39e1..dbe591d5fd1f 100644 --- a/config/examples/Anet/A8/Configuration_adv.h +++ b/config/examples/Anet/A8/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Anet/A8plus/Configuration_adv.h b/config/examples/Anet/A8plus/Configuration_adv.h index b1c08425190a..2745dffc63f9 100644 --- a/config/examples/Anet/A8plus/Configuration_adv.h +++ b/config/examples/Anet/A8plus/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Anet/E16/Configuration_adv.h b/config/examples/Anet/E16/Configuration_adv.h index 4c698f51ec01..6c504813d936 100644 --- a/config/examples/Anet/E16/Configuration_adv.h +++ b/config/examples/Anet/E16/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/AnyCubic/i3/Configuration_adv.h b/config/examples/AnyCubic/i3/Configuration_adv.h index 5881b5cac78e..f1beff557e07 100644 --- a/config/examples/AnyCubic/i3/Configuration_adv.h +++ b/config/examples/AnyCubic/i3/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/ArmEd/Configuration_adv.h b/config/examples/ArmEd/Configuration_adv.h index b6214ad32804..49f079dcd0de 100644 --- a/config/examples/ArmEd/Configuration_adv.h +++ b/config/examples/ArmEd/Configuration_adv.h @@ -1377,7 +1377,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1389,7 +1389,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h index 1836ce511f32..3927bbc47ecc 100644 --- a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/BIBO/TouchX/default/Configuration_adv.h b/config/examples/BIBO/TouchX/default/Configuration_adv.h index 04c746571547..13b1234e4dcd 100644 --- a/config/examples/BIBO/TouchX/default/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/default/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/BQ/Hephestos/Configuration_adv.h b/config/examples/BQ/Hephestos/Configuration_adv.h index 255e2f9452cd..7cad883fe17a 100644 --- a/config/examples/BQ/Hephestos/Configuration_adv.h +++ b/config/examples/BQ/Hephestos/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/BQ/Hephestos_2/Configuration_adv.h b/config/examples/BQ/Hephestos_2/Configuration_adv.h index d0524725bfe8..01f06aa9e4fe 100644 --- a/config/examples/BQ/Hephestos_2/Configuration_adv.h +++ b/config/examples/BQ/Hephestos_2/Configuration_adv.h @@ -1381,7 +1381,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1393,7 +1393,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/BQ/WITBOX/Configuration_adv.h b/config/examples/BQ/WITBOX/Configuration_adv.h index 255e2f9452cd..7cad883fe17a 100644 --- a/config/examples/BQ/WITBOX/Configuration_adv.h +++ b/config/examples/BQ/WITBOX/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Cartesio/Configuration_adv.h b/config/examples/Cartesio/Configuration_adv.h index 439d3588d9d7..25d44f656659 100644 --- a/config/examples/Cartesio/Configuration_adv.h +++ b/config/examples/Cartesio/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Creality/CR-10/Configuration_adv.h b/config/examples/Creality/CR-10/Configuration_adv.h index b445bc82af4d..b7282d86266a 100644 --- a/config/examples/Creality/CR-10/Configuration_adv.h +++ b/config/examples/Creality/CR-10/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Creality/CR-10S/Configuration_adv.h b/config/examples/Creality/CR-10S/Configuration_adv.h index ee5cf4d0ae2d..b25ae448ceb4 100644 --- a/config/examples/Creality/CR-10S/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Creality/CR-10_5S/Configuration_adv.h b/config/examples/Creality/CR-10_5S/Configuration_adv.h index 311ed11163de..0efbc18ef933 100644 --- a/config/examples/Creality/CR-10_5S/Configuration_adv.h +++ b/config/examples/Creality/CR-10_5S/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Creality/CR-10mini/Configuration_adv.h b/config/examples/Creality/CR-10mini/Configuration_adv.h index b1284640ec03..0937cbacff14 100644 --- a/config/examples/Creality/CR-10mini/Configuration_adv.h +++ b/config/examples/Creality/CR-10mini/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Creality/CR-20 Pro/Configuration_adv.h b/config/examples/Creality/CR-20 Pro/Configuration_adv.h index 896ebe35b713..177a6b599317 100644 --- a/config/examples/Creality/CR-20 Pro/Configuration_adv.h +++ b/config/examples/Creality/CR-20 Pro/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Creality/CR-20/Configuration_adv.h b/config/examples/Creality/CR-20/Configuration_adv.h index 28b28474e6b6..e7832f039c22 100644 --- a/config/examples/Creality/CR-20/Configuration_adv.h +++ b/config/examples/Creality/CR-20/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Creality/CR-8/Configuration_adv.h b/config/examples/Creality/CR-8/Configuration_adv.h index 373e584fd70d..73364e79f204 100644 --- a/config/examples/Creality/CR-8/Configuration_adv.h +++ b/config/examples/Creality/CR-8/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Creality/Ender-2/Configuration_adv.h b/config/examples/Creality/Ender-2/Configuration_adv.h index 344cf60e152f..c604d1bab373 100644 --- a/config/examples/Creality/Ender-2/Configuration_adv.h +++ b/config/examples/Creality/Ender-2/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Creality/Ender-3/Configuration_adv.h b/config/examples/Creality/Ender-3/Configuration_adv.h index 35949d4de19a..b580ea7e713a 100644 --- a/config/examples/Creality/Ender-3/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Creality/Ender-4/Configuration_adv.h b/config/examples/Creality/Ender-4/Configuration_adv.h index 831856eff71f..941c4d0817ec 100644 --- a/config/examples/Creality/Ender-4/Configuration_adv.h +++ b/config/examples/Creality/Ender-4/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Creality/Ender-5/Configuration_adv.h b/config/examples/Creality/Ender-5/Configuration_adv.h index e1672fdfc912..f0a7cf924fbc 100644 --- a/config/examples/Creality/Ender-5/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h index 26bb2113bc61..c1c0c5edfc95 100644 --- a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h +++ b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h index 83438aa82ab7..16d421f6063d 100755 --- a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h +++ b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Einstart-S/Configuration_adv.h b/config/examples/Einstart-S/Configuration_adv.h index d2c8bb3f85aa..1405df669e56 100644 --- a/config/examples/Einstart-S/Configuration_adv.h +++ b/config/examples/Einstart-S/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -#define MINIMUM_STEPPER_DIR_DELAY 0 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/FYSETC/AIO_II/Configuration_adv.h b/config/examples/FYSETC/AIO_II/Configuration_adv.h index 2d8b0f9ca3a4..5140adb975a0 100644 --- a/config/examples/FYSETC/AIO_II/Configuration_adv.h +++ b/config/examples/FYSETC/AIO_II/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h index bb461ba776e8..94e099fe8245 100644 --- a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h index bb461ba776e8..94e099fe8245 100644 --- a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h index bb461ba776e8..94e099fe8245 100644 --- a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h index bb461ba776e8..94e099fe8245 100644 --- a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/FYSETC/F6_13/Configuration_adv.h b/config/examples/FYSETC/F6_13/Configuration_adv.h index 563681b2b892..c3339920ca5f 100644 --- a/config/examples/FYSETC/F6_13/Configuration_adv.h +++ b/config/examples/FYSETC/F6_13/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Felix/Configuration_adv.h b/config/examples/Felix/Configuration_adv.h index 9dbf7b4e6c33..89008413afd2 100644 --- a/config/examples/Felix/Configuration_adv.h +++ b/config/examples/Felix/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/FlashForge/CreatorPro/Configuration_adv.h b/config/examples/FlashForge/CreatorPro/Configuration_adv.h index d6bbb07dac88..a4fbc6a81ae8 100644 --- a/config/examples/FlashForge/CreatorPro/Configuration_adv.h +++ b/config/examples/FlashForge/CreatorPro/Configuration_adv.h @@ -1372,7 +1372,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1384,7 +1384,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/FolgerTech/i3-2020/Configuration_adv.h b/config/examples/FolgerTech/i3-2020/Configuration_adv.h index c57f4955e42d..02e80ff5aec8 100644 --- a/config/examples/FolgerTech/i3-2020/Configuration_adv.h +++ b/config/examples/FolgerTech/i3-2020/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Formbot/Raptor/Configuration_adv.h b/config/examples/Formbot/Raptor/Configuration_adv.h index eb37b1836024..35ebe3d2e89b 100644 --- a/config/examples/Formbot/Raptor/Configuration_adv.h +++ b/config/examples/Formbot/Raptor/Configuration_adv.h @@ -1375,7 +1375,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1387,7 +1387,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h index 041b98e3b837..576615a47f7f 100644 --- a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h @@ -1377,7 +1377,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1389,7 +1389,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Formbot/T_Rex_3/Configuration_adv.h b/config/examples/Formbot/T_Rex_3/Configuration_adv.h index 7c040d9a01b2..bf045f50d87c 100644 --- a/config/examples/Formbot/T_Rex_3/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_3/Configuration_adv.h @@ -1377,7 +1377,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1389,7 +1389,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Geeetech/A10/Configuration_adv.h b/config/examples/Geeetech/A10/Configuration_adv.h index 2310bd538753..031fc5fbddd8 100644 --- a/config/examples/Geeetech/A10/Configuration_adv.h +++ b/config/examples/Geeetech/A10/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Geeetech/A10M/Configuration_adv.h b/config/examples/Geeetech/A10M/Configuration_adv.h index f65b3b846f5d..6ac35c3a8389 100644 --- a/config/examples/Geeetech/A10M/Configuration_adv.h +++ b/config/examples/Geeetech/A10M/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Geeetech/A20M/Configuration_adv.h b/config/examples/Geeetech/A20M/Configuration_adv.h index fb18981796a0..8572da54b91b 100644 --- a/config/examples/Geeetech/A20M/Configuration_adv.h +++ b/config/examples/Geeetech/A20M/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Geeetech/MeCreator2/Configuration_adv.h b/config/examples/Geeetech/MeCreator2/Configuration_adv.h index dbcf27fdaa21..b19f42923d91 100644 --- a/config/examples/Geeetech/MeCreator2/Configuration_adv.h +++ b/config/examples/Geeetech/MeCreator2/Configuration_adv.h @@ -1372,7 +1372,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1384,7 +1384,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h index 2310bd538753..031fc5fbddd8 100644 --- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h index 2310bd538753..031fc5fbddd8 100644 --- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/HMS434/Configuration_adv.h b/config/examples/HMS434/Configuration_adv.h index 34948a79a4e9..1eb8b3e4c49b 100644 --- a/config/examples/HMS434/Configuration_adv.h +++ b/config/examples/HMS434/Configuration_adv.h @@ -1297,7 +1297,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1309,7 +1309,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Infitary/i3-M508/Configuration_adv.h b/config/examples/Infitary/i3-M508/Configuration_adv.h index 5e7b3ff9bf08..7feb9fdab852 100644 --- a/config/examples/Infitary/i3-M508/Configuration_adv.h +++ b/config/examples/Infitary/i3-M508/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/JGAurora/A1/Configuration_adv.h b/config/examples/JGAurora/A1/Configuration_adv.h index 2dbaecfd87b5..edc9254e5457 100644 --- a/config/examples/JGAurora/A1/Configuration_adv.h +++ b/config/examples/JGAurora/A1/Configuration_adv.h @@ -1378,7 +1378,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1390,7 +1390,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/JGAurora/A5/Configuration_adv.h b/config/examples/JGAurora/A5/Configuration_adv.h index 06e4bf301401..d5c4b7b2c524 100644 --- a/config/examples/JGAurora/A5/Configuration_adv.h +++ b/config/examples/JGAurora/A5/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/JGAurora/A5S/Configuration_adv.h b/config/examples/JGAurora/A5S/Configuration_adv.h index 2dbaecfd87b5..edc9254e5457 100644 --- a/config/examples/JGAurora/A5S/Configuration_adv.h +++ b/config/examples/JGAurora/A5S/Configuration_adv.h @@ -1378,7 +1378,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1390,7 +1390,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/MakerParts/Configuration_adv.h b/config/examples/MakerParts/Configuration_adv.h index 4f5ed2e2c86e..680478f3acf2 100644 --- a/config/examples/MakerParts/Configuration_adv.h +++ b/config/examples/MakerParts/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Malyan/M150/Configuration_adv.h b/config/examples/Malyan/M150/Configuration_adv.h index 609e76f06007..3d86b30209a3 100644 --- a/config/examples/Malyan/M150/Configuration_adv.h +++ b/config/examples/Malyan/M150/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Malyan/M200/Configuration_adv.h b/config/examples/Malyan/M200/Configuration_adv.h index 5bf65565ccdc..e8aac1ffe400 100644 --- a/config/examples/Malyan/M200/Configuration_adv.h +++ b/config/examples/Malyan/M200/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Micromake/C1/enhanced/Configuration_adv.h b/config/examples/Micromake/C1/enhanced/Configuration_adv.h index dca753481a28..5473a13da6c6 100644 --- a/config/examples/Micromake/C1/enhanced/Configuration_adv.h +++ b/config/examples/Micromake/C1/enhanced/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Mks/Robin/Configuration_adv.h b/config/examples/Mks/Robin/Configuration_adv.h index c67cc8fea096..104b7cff84c3 100644 --- a/config/examples/Mks/Robin/Configuration_adv.h +++ b/config/examples/Mks/Robin/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Mks/Sbase/Configuration_adv.h b/config/examples/Mks/Sbase/Configuration_adv.h index a6f26f0f1a67..efffe298642d 100644 --- a/config/examples/Mks/Sbase/Configuration_adv.h +++ b/config/examples/Mks/Sbase/Configuration_adv.h @@ -1374,7 +1374,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1386,7 +1386,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/RapideLite/RL200/Configuration_adv.h b/config/examples/RapideLite/RL200/Configuration_adv.h index d20fae01309b..f399c620eaf5 100644 --- a/config/examples/RapideLite/RL200/Configuration_adv.h +++ b/config/examples/RapideLite/RL200/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/RigidBot/Configuration_adv.h b/config/examples/RigidBot/Configuration_adv.h index 4a674c49f5d5..f2f3294034e8 100644 --- a/config/examples/RigidBot/Configuration_adv.h +++ b/config/examples/RigidBot/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/SCARA/Configuration_adv.h b/config/examples/SCARA/Configuration_adv.h index d3f2fbe9882c..ab4a937c6bc9 100644 --- a/config/examples/SCARA/Configuration_adv.h +++ b/config/examples/SCARA/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h index 36545345c1cc..8225c2daef97 100644 --- a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h +++ b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Sanguinololu/Configuration_adv.h b/config/examples/Sanguinololu/Configuration_adv.h index aeb6e7d3a6c6..f3ee763eb5b4 100644 --- a/config/examples/Sanguinololu/Configuration_adv.h +++ b/config/examples/Sanguinololu/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Tevo/Michelangelo/Configuration_adv.h b/config/examples/Tevo/Michelangelo/Configuration_adv.h index 58eef0ce0a0f..25a8916bcb2d 100644 --- a/config/examples/Tevo/Michelangelo/Configuration_adv.h +++ b/config/examples/Tevo/Michelangelo/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h index 029f830d39d2..fb8651d11a49 100755 --- a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h +++ b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h @@ -1369,7 +1369,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1381,7 +1381,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h index a30269d65fb6..dfbf542cb088 100755 --- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h index a30269d65fb6..dfbf542cb088 100755 --- a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/TheBorg/Configuration_adv.h b/config/examples/TheBorg/Configuration_adv.h index 4712db14fdd9..d7ae37580de9 100644 --- a/config/examples/TheBorg/Configuration_adv.h +++ b/config/examples/TheBorg/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/TinyBoy2/Configuration_adv.h b/config/examples/TinyBoy2/Configuration_adv.h index eb0c034a5407..ddd3addcd1a8 100644 --- a/config/examples/TinyBoy2/Configuration_adv.h +++ b/config/examples/TinyBoy2/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Tronxy/X3A/Configuration_adv.h b/config/examples/Tronxy/X3A/Configuration_adv.h index dcd38386017f..3b40797c6f96 100644 --- a/config/examples/Tronxy/X3A/Configuration_adv.h +++ b/config/examples/Tronxy/X3A/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Tronxy/X5S-2E/Configuration_adv.h b/config/examples/Tronxy/X5S-2E/Configuration_adv.h index ec1c28df8be4..66f4262ef132 100644 --- a/config/examples/Tronxy/X5S-2E/Configuration_adv.h +++ b/config/examples/Tronxy/X5S-2E/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/UltiMachine/Archim1/Configuration_adv.h b/config/examples/UltiMachine/Archim1/Configuration_adv.h index 925cfa657c00..9aff4b9c1c4f 100644 --- a/config/examples/UltiMachine/Archim1/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim1/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/UltiMachine/Archim2/Configuration_adv.h b/config/examples/UltiMachine/Archim2/Configuration_adv.h index dfe2fa799fd1..9a84d4038036 100644 --- a/config/examples/UltiMachine/Archim2/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim2/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/VORONDesign/Configuration_adv.h b/config/examples/VORONDesign/Configuration_adv.h index 91c2f91b2c9d..5d389bc8c43a 100644 --- a/config/examples/VORONDesign/Configuration_adv.h +++ b/config/examples/VORONDesign/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Velleman/K8200/Configuration_adv.h b/config/examples/Velleman/K8200/Configuration_adv.h index 8d7597e4bac2..611aeebae631 100644 --- a/config/examples/Velleman/K8200/Configuration_adv.h +++ b/config/examples/Velleman/K8200/Configuration_adv.h @@ -1386,7 +1386,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1398,7 +1398,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Velleman/K8400/Configuration_adv.h b/config/examples/Velleman/K8400/Configuration_adv.h index 37cbdcf7c7d7..cb608b868495 100644 --- a/config/examples/Velleman/K8400/Configuration_adv.h +++ b/config/examples/Velleman/K8400/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/WASP/PowerWASP/Configuration_adv.h b/config/examples/WASP/PowerWASP/Configuration_adv.h index 5032034edeca..e2b679a3054c 100644 --- a/config/examples/WASP/PowerWASP/Configuration_adv.h +++ b/config/examples/WASP/PowerWASP/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h index 87a320bc99ad..faa61a82478f 100644 --- a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h @@ -1375,7 +1375,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1387,7 +1387,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h index dd7a16d9192b..0e9cce42baec 100644 --- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h index 173ca6caebd7..22b8c529fa32 100644 --- a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h +++ b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h @@ -1375,7 +1375,7 @@ #define MIN_STEPS_PER_SEGMENT 1 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1387,7 +1387,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h index 496a1de613f4..64d0c315bb1d 100644 --- a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h @@ -1375,7 +1375,7 @@ #define MIN_STEPS_PER_SEGMENT 1 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1387,7 +1387,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h index 496a1de613f4..64d0c315bb1d 100644 --- a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h @@ -1375,7 +1375,7 @@ #define MIN_STEPS_PER_SEGMENT 1 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1387,7 +1387,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h index d1bfdb761ce6..7bbbf1ab5c9f 100644 --- a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h +++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h @@ -1375,7 +1375,7 @@ #define MIN_STEPS_PER_SEGMENT 1 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1387,7 +1387,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/delta/FLSUN/kossel/Configuration_adv.h b/config/examples/delta/FLSUN/kossel/Configuration_adv.h index d1bfdb761ce6..7bbbf1ab5c9f 100644 --- a/config/examples/delta/FLSUN/kossel/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel/Configuration_adv.h @@ -1375,7 +1375,7 @@ #define MIN_STEPS_PER_SEGMENT 1 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1387,7 +1387,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h index f9fcff4a2cc0..c3bdd26a3244 100644 --- a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h @@ -1375,7 +1375,7 @@ #define MIN_STEPS_PER_SEGMENT 1 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1387,7 +1387,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h index 277de71277ce..fbed101e49b7 100644 --- a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h +++ b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h @@ -1375,7 +1375,7 @@ #define MIN_STEPS_PER_SEGMENT 1 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1387,7 +1387,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/delta/MKS/SBASE/Configuration_adv.h b/config/examples/delta/MKS/SBASE/Configuration_adv.h index 73c133290eb7..9b6614c356de 100644 --- a/config/examples/delta/MKS/SBASE/Configuration_adv.h +++ b/config/examples/delta/MKS/SBASE/Configuration_adv.h @@ -1375,7 +1375,7 @@ #define MIN_STEPS_PER_SEGMENT 1 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1387,7 +1387,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/delta/Tevo Little Monster/Configuration_adv.h b/config/examples/delta/Tevo Little Monster/Configuration_adv.h index 686f12673daf..f909a04d489d 100644 --- a/config/examples/delta/Tevo Little Monster/Configuration_adv.h +++ b/config/examples/delta/Tevo Little Monster/Configuration_adv.h @@ -1375,7 +1375,7 @@ #define MIN_STEPS_PER_SEGMENT 1 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1387,7 +1387,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/delta/generic/Configuration_adv.h b/config/examples/delta/generic/Configuration_adv.h index f9fcff4a2cc0..c3bdd26a3244 100644 --- a/config/examples/delta/generic/Configuration_adv.h +++ b/config/examples/delta/generic/Configuration_adv.h @@ -1375,7 +1375,7 @@ #define MIN_STEPS_PER_SEGMENT 1 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1387,7 +1387,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/delta/kossel_mini/Configuration_adv.h b/config/examples/delta/kossel_mini/Configuration_adv.h index f9fcff4a2cc0..c3bdd26a3244 100644 --- a/config/examples/delta/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/kossel_mini/Configuration_adv.h @@ -1375,7 +1375,7 @@ #define MIN_STEPS_PER_SEGMENT 1 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1387,7 +1387,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/delta/kossel_xl/Configuration_adv.h b/config/examples/delta/kossel_xl/Configuration_adv.h index 0642db57b809..47373c9b4fd5 100644 --- a/config/examples/delta/kossel_xl/Configuration_adv.h +++ b/config/examples/delta/kossel_xl/Configuration_adv.h @@ -1375,7 +1375,7 @@ #define MIN_STEPS_PER_SEGMENT 1 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1387,7 +1387,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/gCreate/gMax1.5+/Configuration_adv.h b/config/examples/gCreate/gMax1.5+/Configuration_adv.h index 5f130d7972cc..39ec6ffeadb4 100644 --- a/config/examples/gCreate/gMax1.5+/Configuration_adv.h +++ b/config/examples/gCreate/gMax1.5+/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/makibox/Configuration_adv.h b/config/examples/makibox/Configuration_adv.h index 990f47f19aeb..f709d899bdb6 100644 --- a/config/examples/makibox/Configuration_adv.h +++ b/config/examples/makibox/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/tvrrug/Round2/Configuration_adv.h b/config/examples/tvrrug/Round2/Configuration_adv.h index beb45435e2c9..5963edb9dc79 100644 --- a/config/examples/tvrrug/Round2/Configuration_adv.h +++ b/config/examples/tvrrug/Round2/Configuration_adv.h @@ -1373,7 +1373,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1385,7 +1385,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) diff --git a/config/examples/wt150/Configuration_adv.h b/config/examples/wt150/Configuration_adv.h index f00c85d0fa34..9f95d9460fed 100644 --- a/config/examples/wt150/Configuration_adv.h +++ b/config/examples/wt150/Configuration_adv.h @@ -1374,7 +1374,7 @@ #define MIN_STEPS_PER_SEGMENT 6 /** - * Minimum delay after setting the stepper DIR (in ns) + * Minimum delay before and after setting the stepper DIR (in ns) * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) * 20 : Minimum for TMC2xxx drivers * 200 : Minimum for A4988 drivers @@ -1386,7 +1386,8 @@ * * Override the default value based on the driver type set in Configuration.h. */ -//#define MINIMUM_STEPPER_DIR_DELAY 650 +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 /** * Minimum stepper driver pulse width (in µs) From de78b61d35536a2138971b798d00c18c261c424c Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 20 Sep 2019 00:00:10 -0500 Subject: [PATCH 010/120] [cron] Bump distribution date --- Marlin/src/inc/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index 52712e1e1f25..64f5644bc4db 100644 --- a/Marlin/src/inc/Version.h +++ b/Marlin/src/inc/Version.h @@ -51,7 +51,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ - #define STRING_DISTRIBUTION_DATE "2019-09-19" + #define STRING_DISTRIBUTION_DATE "2019-09-20" /** * Required minimum Configuration.h and Configuration_adv.h file versions. From 1452e41ead425a774db8be4c3e07444a5ec68315 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 20 Sep 2019 00:45:03 -0500 Subject: [PATCH 011/120] Auto Build fixes, updates (#15315) Co-Authored-By: shitcreek --- .../share/vscode/AutoBuildMarlin/README.md | 60 ++++------ .../vscode/AutoBuildMarlin/img/AB_icon.png | Bin 0 -> 4596 bytes .../vscode/AutoBuildMarlin/img/AB_menu.png | Bin 0 -> 19994 bytes .../AutoBuildMarlin/img/Activity_bar.png | Bin 0 -> 35925 bytes .../vscode/AutoBuildMarlin/img/B_small.png | Bin 0 -> 4694 bytes .../vscode/AutoBuildMarlin/img/C_small.png | Bin 0 -> 4664 bytes .../vscode/AutoBuildMarlin/img/T_small.png | Bin 0 -> 5038 bytes .../vscode/AutoBuildMarlin/img/U_small.png | Bin 0 -> 4297 bytes .../share/vscode/AutoBuildMarlin/logo.svg | 111 ++++++++++++++++++ .../share/vscode/AutoBuildMarlin/media/AB.svg | 12 -- .../vscode/AutoBuildMarlin/package-lock.json | 2 +- .../share/vscode/AutoBuildMarlin/package.json | 25 +++- .../vscode/AutoBuildMarlin/resources/AB.svg | 23 ++++ .../AutoBuildMarlin/resources/AB_menu.png | Bin 23890 -> 0 bytes .../resources/Activity_bar.png | Bin 38031 -> 0 bytes .../resources/B24x24_white.svg | 1 - .../resources/B32x32_white.svg | 1 - .../AutoBuildMarlin/resources/B48x48_dark.svg | 26 ++++ .../resources/B48x48_light.svg | 26 ++++ .../AutoBuildMarlin/resources/B_small.svg | 1 - .../AutoBuildMarlin/resources/Build.png | Bin 12348 -> 0 bytes .../resources/C32x32_white.svg | 1 - .../AutoBuildMarlin/resources/C48x48_dark.svg | 24 ++++ .../resources/C48x48_light.svg | 25 ++++ .../AutoBuildMarlin/resources/C_small.svg | 1 - .../AutoBuildMarlin/resources/Clean.png | Bin 3592 -> 0 bytes .../AutoBuildMarlin/resources/Open_Folder.png | Bin 16455 -> 0 bytes .../AutoBuildMarlin/resources/Open_Marlin.png | Bin 56824 -> 0 bytes .../resources/T32x32_white.svg | 1 - .../AutoBuildMarlin/resources/T48x48_dark.svg | 53 +++++++++ .../resources/T48x48_light.svg | 53 +++++++++ .../AutoBuildMarlin/resources/Traceback.png | Bin 8485 -> 0 bytes .../resources/U32x32_white.svg | 1 - .../AutoBuildMarlin/resources/U48x48_dark.svg | 26 ++++ .../resources/U48x48_light.svg | 26 ++++ .../AutoBuildMarlin/resources/U_small.svg | 1 - .../AutoBuildMarlin/resources/Upload.png | Bin 4297 -> 0 bytes .../resources/Ut32x32_white.svg | 1 - .../AutoBuildMarlin/resources/Ut_small.svg | 1 - .../resources/install_extensions.png | Bin 3341 -> 0 bytes .../resources/platformio_install.png | Bin 25656 -> 0 bytes .../resources/view_command_palette.png | Bin 10602 -> 0 bytes 42 files changed, 437 insertions(+), 65 deletions(-) create mode 100644 buildroot/share/vscode/AutoBuildMarlin/img/AB_icon.png create mode 100644 buildroot/share/vscode/AutoBuildMarlin/img/AB_menu.png create mode 100644 buildroot/share/vscode/AutoBuildMarlin/img/Activity_bar.png create mode 100644 buildroot/share/vscode/AutoBuildMarlin/img/B_small.png create mode 100644 buildroot/share/vscode/AutoBuildMarlin/img/C_small.png create mode 100644 buildroot/share/vscode/AutoBuildMarlin/img/T_small.png create mode 100644 buildroot/share/vscode/AutoBuildMarlin/img/U_small.png create mode 100644 buildroot/share/vscode/AutoBuildMarlin/logo.svg delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/media/AB.svg create mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/AB.svg delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/AB_menu.png delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/Activity_bar.png delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/B24x24_white.svg delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/B32x32_white.svg create mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/B48x48_dark.svg create mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/B48x48_light.svg delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/B_small.svg delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/Build.png delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/C32x32_white.svg create mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/C48x48_dark.svg create mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/C48x48_light.svg delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/C_small.svg delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/Clean.png delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/Open_Folder.png delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/Open_Marlin.png delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/T32x32_white.svg create mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/T48x48_dark.svg create mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/T48x48_light.svg delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/Traceback.png delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/U32x32_white.svg create mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/U48x48_dark.svg create mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/U48x48_light.svg delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/U_small.svg delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/Upload.png delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/Ut32x32_white.svg delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/Ut_small.svg delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/install_extensions.png delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/platformio_install.png delete mode 100644 buildroot/share/vscode/AutoBuildMarlin/resources/view_command_palette.png diff --git a/buildroot/share/vscode/AutoBuildMarlin/README.md b/buildroot/share/vscode/AutoBuildMarlin/README.md index e3e9323f527a..904f7f1abfb3 100644 --- a/buildroot/share/vscode/AutoBuildMarlin/README.md +++ b/buildroot/share/vscode/AutoBuildMarlin/README.md @@ -1,52 +1,40 @@ -# Auto Build support for Visual Studio Code -This `Visual Studio Code` extension provides access to the `Auto Build` script. +# Auto Build Marlin -## Installation +"AutoBuildMarlin" is a *Visual Studio Code* extension that provides a one-button interface to build and upload Marlin Firmware to your selected `MOTHERBOARD`, removing the need to edit your `platformio.ini` file or scroll through a long list of Marlin environments. -Get the MarlinFirmware repository from GitHub. Open the directory `buildroot/share/vscode` and copy the `AutoBuildMarlin` folder to the `Visual Studio Code` extension directory. Relaunch `Visual Studio Code` to complete the installation. +## Get PlatformIO -To find the `Visual Studio Code` extension directory: +Before you install AutoBuildMarlin you'll first need to [Install PlatformIO in VSCode](http://marlinfw.org/docs/basics/install_platformio_vscode.html). Once you have followed these instructions, continue below. -- Windows - Use Windows Explorer's address bar to open `C:/Users/USERNAME/.vscode/extensions`. -- Mac - Use the Finder's `Go` menu to open `~/.vscode/extensions`. -- Linux - In the Terminal type `open ~/.vscode/extensions`. +## Installing This Extension -### 3. Install the PlatformIO extension -Click on `View` > `Command Palette...` +- [Download Marlin Firmware](http://marlinfw.org/meta/download/) and unzip it to your documents folder. +- Open the directory `buildroot/share/vscode` and copy the "`AutoBuildMarlin`" folder to **the *Visual Studio Code* `extensions` directory**. +- Relaunch *Visual Studio Code* to complete the installation. -![](./resources/view_command_palette.png) +### To find your `extensions` directory: -Find and click on `Extensions: Install Extensions` - -![](./resources/install_extensions.png) - -Type `platformio` into the search box and click on `Install` under `PlatformIO IDE`. - -![](./resources/platformio_install.png) +- **Windows** - Use Windows Explorer's address bar to open `C:/Users/USERNAME/.vscode/extensions`. +- **Mac** - Use the Finder's `Go` menu to open `~/.vscode/extensions`. +- **Linux** - In the Terminal type `open ~/.vscode/extensions`. ## Usage -This extension adds the Auto Build icon ![](./media/AB.svg) to the Activities bar. - -### 1. Open the Marlin folder -Click on `File` > `Open Folder...` - -![](./resources/Open_Folder.png) +- Open up the downloaded *Marlin Firmware* project folder (***NOT the "Marlin" folder within***) in *Visual Studio Code*. (You may also use the **Import Project…** option from the "PlaformIO Home" page.) -This brings up the `Open Folder` dialog. Select the folder that has the `platformio.ini` file in it. +- With Marlin open, the "File Explorer" should be firmly rooted in your Marlin Firmware folder: -![](./resources/Open_Marlin.png) + ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/Activity_bar.png) -You should see something like the following. If not, click on the Explorer icon in the Activities bar. +- Click the **Marlin Auto Build** icon ![AutoBuild Icon](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/AB_icon.png) in the Activities Bar (on the left side of *Visual Studio Code* window) to bring up the **Marlin Auto Build** options bar. -![](./resources/Activity_bar.png) + ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/AB_menu.png) -### 2. Click on the Auto Build Icon ![](./media/AB.svg) -This brings up the Auto Build menu icon bar. -![](./resources/AB_menu.png) +- Click one of the four icons -### 3. Click on one of the four icons -- ![](./resources/B_small.svg) - Clicking on it starts `PIO Build` -- ![](./resources/C_small.svg) - Clicking on it starts `PIO Clean` -- ![](./resources/U_small.svg) - Clicking on it starts `PIO Upload` -- ![](./resources/Ut_small.svg) - Clicking on it starts `PIO Upload (traceback)` + Icon|Action + ----|------ + ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/B_small.png)|Start **PIO Build** to test your Marlin build + ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/C_small.png)|Start **PIO Clean** to delete old build files + ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/U_small.png)|Start **PIO Upload** to install Marlin on your board + ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/Ut_small.png)|Start **PIO Upload (traceback)** to install Marlin with debugging diff --git a/buildroot/share/vscode/AutoBuildMarlin/img/AB_icon.png b/buildroot/share/vscode/AutoBuildMarlin/img/AB_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..951fee8db659cb51044235434cad1ea84102ed13 GIT binary patch literal 4596 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 literal 0 HcmV?d00001 diff --git a/buildroot/share/vscode/AutoBuildMarlin/img/Activity_bar.png b/buildroot/share/vscode/AutoBuildMarlin/img/Activity_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..db049a853011de21e0c02daf663417059a2d3674 GIT binary patch literal 35925 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 literal 0 HcmV?d00001 diff --git a/buildroot/share/vscode/AutoBuildMarlin/img/T_small.png b/buildroot/share/vscode/AutoBuildMarlin/img/T_small.png new file mode 100644 index 0000000000000000000000000000000000000000..70af1ca3910dcfb6c4628566329a2ffb5f472e9d GIT binary patch literal 5038 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 literal 0 HcmV?d00001 diff --git a/buildroot/share/vscode/AutoBuildMarlin/img/U_small.png b/buildroot/share/vscode/AutoBuildMarlin/img/U_small.png new file mode 100644 index 0000000000000000000000000000000000000000..35c87b1c6cced31933bd6a4fc15833798dab02f5 GIT binary patch literal 4297 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 + + +Marlin Firmware image/svg+xmlMarlin Firmware Ahmet Cem TURANJoão BrázioMarlinFirmwaremarlin-logo-new + + \ No newline at end of file diff --git a/buildroot/share/vscode/AutoBuildMarlin/media/AB.svg b/buildroot/share/vscode/AutoBuildMarlin/media/AB.svg deleted file mode 100644 index ac6dbb8a9af4..000000000000 --- a/buildroot/share/vscode/AutoBuildMarlin/media/AB.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - VScode view icon - - Layer 2 - AB - - - Layer 1 - - - \ No newline at end of file diff --git a/buildroot/share/vscode/AutoBuildMarlin/package-lock.json b/buildroot/share/vscode/AutoBuildMarlin/package-lock.json index 69338349843a..9b333093a49e 100644 --- a/buildroot/share/vscode/AutoBuildMarlin/package-lock.json +++ b/buildroot/share/vscode/AutoBuildMarlin/package-lock.json @@ -1,6 +1,6 @@ { "name": "auto-build", - "version": "0.1.0", + "version": "2.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/buildroot/share/vscode/AutoBuildMarlin/package.json b/buildroot/share/vscode/AutoBuildMarlin/package.json index 3bff1098d798..8335b4ca07bf 100644 --- a/buildroot/share/vscode/AutoBuildMarlin/package.json +++ b/buildroot/share/vscode/AutoBuildMarlin/package.json @@ -2,8 +2,9 @@ "name": "auto-build", "displayName": "Auto Build Marlin", "description": "Auto Build Marlin for VS code", - "version": "0.1.0", + "version": "2.0.0", "publisher": "marlinfirmware", + "icon": "logo.svg", "engines": { "vscode": "^1.23.0" }, @@ -24,7 +25,7 @@ { "id": "auto-build", "title": "Auto Build Marlin", - "icon": "media/AB.svg" + "icon": "resources/AB.svg" } ] }, @@ -40,22 +41,34 @@ { "command": "piobuild", "title": "PIO Build", - "icon": "resources/B32x32_white.svg" + "icon": { + "light": "resources/B48x48_light.svg", + "dark": "resources/B48x48_dark.svg" + } }, { "command": "pioclean", "title": "PIO Clean", - "icon": "resources/C32x32_white.svg" + "icon": { + "light": "resources/C48x48_light.svg", + "dark": "resources/C48x48_dark.svg" + } }, { "command": "pioupload", "title": "PIO Upload", - "icon": "resources/U32x32_white.svg" + "icon": { + "light": "resources/U48x48_light.svg", + "dark": "resources/U48x48_dark.svg" + } }, { "command": "piotraceback", "title": "PIO Upload (traceback)", - "icon": "resources/Ut32x32_white.svg" + "icon": { + "light": "resources/T48x48_light.svg", + "dark": "resources/T48x48_dark.svg" + } } ], "menus": { diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/AB.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/AB.svg new file mode 100644 index 000000000000..79572763455f --- /dev/null +++ b/buildroot/share/vscode/AutoBuildMarlin/resources/AB.svg @@ -0,0 +1,23 @@ + + + + AutoBuildMarlin View + + + + + diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/AB_menu.png b/buildroot/share/vscode/AutoBuildMarlin/resources/AB_menu.png deleted file mode 100644 index 2cb282c918c61e8271375180897dca8029220959..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23890 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 diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/Activity_bar.png b/buildroot/share/vscode/AutoBuildMarlin/resources/Activity_bar.png deleted file mode 100644 index d78e2c82f4c8d2ada061f161b13e6e08a3ab9e61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38031 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

R?Ml8+yJwR*ikSoo<;p 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 diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/B24x24_white.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/B24x24_white.svg deleted file mode 100644 index 1d6c6672337c..000000000000 --- a/buildroot/share/vscode/AutoBuildMarlin/resources/B24x24_white.svg +++ /dev/null @@ -1 +0,0 @@ -B \ No newline at end of file diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/B32x32_white.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/B32x32_white.svg deleted file mode 100644 index 375b6f5f03a9..000000000000 --- a/buildroot/share/vscode/AutoBuildMarlin/resources/B32x32_white.svg +++ /dev/null @@ -1 +0,0 @@ -B \ No newline at end of file diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/B48x48_dark.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/B48x48_dark.svg new file mode 100644 index 000000000000..e3b0a4eada4f --- /dev/null +++ b/buildroot/share/vscode/AutoBuildMarlin/resources/B48x48_dark.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/B48x48_light.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/B48x48_light.svg new file mode 100644 index 000000000000..10fad6492857 --- /dev/null +++ b/buildroot/share/vscode/AutoBuildMarlin/resources/B48x48_light.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/B_small.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/B_small.svg deleted file mode 100644 index c830b2713a91..000000000000 --- a/buildroot/share/vscode/AutoBuildMarlin/resources/B_small.svg +++ /dev/null @@ -1 +0,0 @@ -B \ No newline at end of file diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/Build.png b/buildroot/share/vscode/AutoBuildMarlin/resources/Build.png deleted file mode 100644 index 86ed4782bed61f51c1116e13adfa34f736b10e20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12348 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 XDXgdVsRN1&pee|xN>{yn_5QyBGq&v2 diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/C32x32_white.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/C32x32_white.svg deleted file mode 100644 index 43f93ce040b6..000000000000 --- a/buildroot/share/vscode/AutoBuildMarlin/resources/C32x32_white.svg +++ /dev/null @@ -1 +0,0 @@ -C \ No newline at end of file diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/C48x48_dark.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/C48x48_dark.svg new file mode 100644 index 000000000000..9cb0e4e0a8e1 --- /dev/null +++ b/buildroot/share/vscode/AutoBuildMarlin/resources/C48x48_dark.svg @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/C48x48_light.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/C48x48_light.svg new file mode 100644 index 000000000000..d7dea1aae5a1 --- /dev/null +++ b/buildroot/share/vscode/AutoBuildMarlin/resources/C48x48_light.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/C_small.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/C_small.svg deleted file mode 100644 index f8ee33d7ade6..000000000000 --- a/buildroot/share/vscode/AutoBuildMarlin/resources/C_small.svg +++ /dev/null @@ -1 +0,0 @@ -C \ No newline at end of file diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/Clean.png b/buildroot/share/vscode/AutoBuildMarlin/resources/Clean.png deleted file mode 100644 index 6ce41877a66c5ac94cdeb7effc1a7183868a64c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3592 zcmbtXX*iqP7LJxfX=-SzJp`v$wdtXh3N<%c)R@#fJEux(o++BBm|8j5zO4`F`O%qmc!tI2~7zxq&XAq7Ssh8E`*L4ieVzHq`QwGjrPGDacK-W3B15%l6PY)E5*(PTa|V&9?H%$Fy=g zX?Gy{lDp#l-b;jsJxYq%5IfhNh!3|VOhkoev!3dA?A{h`Io@$x5DwRTu|{6q9pBL! zKCEj%?}WKG78CFk!N;FWtU_26FZK@00%pZ{4b$0I1^^O;F@P_>fw|s8;m4l14*52+ zxB)j6Q6c~kw+!G0pAo=c=x+isIBozh^aSA4e<6@O9y;lB?viQtnT0;AIC*!a@dXum zu(SAsNt%f#(IRBa9Z2%N3X^^m#EN#u%Td2jTKJ;>Qc*@cOnc|z-o`MD#n##T(Pq1Q zO5-~`i%s0zqD3lv4)5368u2o2+~1sRd#-bEK0ZGF+p5)#&F%~Z!9{GCbEb-qeX+CJ z;of>%wOe-}wYCt65^*h7EvMCsV))afklPmyyvc_LyY-HyhcAm+3@VA)o9oW%{+b{q zslELr#&$8o1^KIF1U=us7eb9qkV4iUT=>y*y?>;wdYa|HTv%&y(mf8IiFkv5j2eWZi zs#R^V9KGAju~&M(>0W!+o5fs8zb0(xLV`)kD}r^L*502Jx-ABo7@^l3aW^f3VZW0_nPb^ygo?y`9E=`( z*-r%=8G$@~O8ueHNnyK&jSYVWkreNWULq zN?7If{ra_g*xD@IV~(5MOF-^2Nwcd~^zyQNJpMA;TG{Q#+)J4IvPwk1r}AE}>P)O& zl4xx+Qe$&k2$M~CD?Go@`>HMZ*Xw~>cEte#Mj^#S2hu4@=Yg;W1qrL*7&6Q_qaKli z`jCDlwz4VEqJHh8xNH4IQie1-Q`nchvvB?fKW!tT>V=UuzOH%iXSZwpc=Z}zR}3VI``dQ%x2KiSW$m_Z{{xr>_h zz4~rAuNg4{K)Qavnb?BF|BzVvIZ_pm+4KGZ&3j*^>^COVtH zL>KOv3k!M_aZ7yP*QOa#VA&jDazw+UA1%DD%(65bNT=uS0{rHsn7f7b4!-YX&`-Tz zS^rYhdO18Ir$ZOK+G-w%_^F#{CJr&!o}4kO@Z+F^nDxoLjPgzkKd1AC&Wh>X@{Mv$ z2W*DoHAwYHg5|$x=Fy&BG=!rSP)d4*;@FC1edkw#Z{6+{=7sXiU%}_7FGn=K2%Jkb zh)^Qfp}0PEsI0RSlFiAq?1A#qvx`_m4AREC_Q;PIyBIX71RS?-FcSCPd(A!}vor zZL{^Pa7L1@=fNJOJ+)|bybq_jF`)C2rT3?c3ZuN2yNKTFi*4Y?T0!V#B$WA#V>m~> zK!!>K)jYcF)xhM@##HA>BGP1-CDsUGjM})QP;9=AF;FIhyLt$lE#k6+L7jIi?|kA} z*>9ucS=SFmG{{*HFYE7f_LWTKRs5G8fr|Yto!|N>Sj6UdR!BHBtLanfl!_sKN`2pE zY>ueFf5l0U3jWY)2Jx_muE%vU=VDJU#7+7(61DN;%eWD*0d|3aIVV_5n825T6)Y?9 zyJafV_bVDUdO=P_FseLT<9B$7_~5S(at1fq#83%ig4WJi zKMSv)G!=O5^?6#6-w?q!R((PO(*O%tU$_did6r_<7NTCkn&_*mm7VSMF%Td(;VkKn zk<8jbE?&^sn`ZD^R%TGY7D-#;h4mTpGQDWu!rP;-C(`BYhTb@_Ssr$>F@Y;nl#lAc zw-AF~;8!8m3SgM#+J_sL-OfcS&zr~fd9oM?9PTbcEM!SzrjrfnC=*6cXskA!K3;kh z*cvJaw4VgqK-J}39SYoDja%ENugfJ*CH6AssPr*Z-^;+V#)0Vh^6=-Y&t_N zIBBSE%0D-!(6XcI8kNF!+8v1#h|C3wt9*0|EpkajnUgf>1qbbXYfo}z zvg7+2LKut?%lR@Ad6Jm-a^%_QMrDdf*?=7pIapOw$`xYHQ>?2mVOI$?C6&+})T~N$ z>>A_p(UgNx)#MN9OMZVfWs!gHaJD$sP>)ZopbfK^ON!?<@{2ssb9Cn@UIfrOCNWOn z+`>wYNfA#`N=c%bal2V5Q};Poj+OF~^Y2%XRK_l#H`Ce*aAy#4YXwR2i9v}I8Jneu zywC{`piRZP?Va(*W#Ef8MD@!S-OiCr2}4A9;@*s`S>Xud379_JzaRvuhqp_MDR*hw-Ii>S z3?Nwjzesxi|Fr4v2nB?zP7P;fe_I_36G4eMnPM}oeWk(CrwrifGkiw4Het-XDoTXz z&+WF8g5y>PLG6(Lo(@h9n`TjgKMzE$^x*}BBT0!_r_dcM3FwL7%x9vQnEmE_lHYG9 zN0F7f!-_NyJoXNNZXG)yP#gL;dPXd9lq zZqnev(KUIl z=E_t{gVioJafT>^}2;td_}Ss_C; zE(;+H5p)-Q1)L=Ls!?-sLqh`7Ie4FV_9{%}=xio63wpe=zIe=AEib@kM}MNKFYJkw zH*IHrow<&m;C7SXSZr+ux8HtbQ}#-r#l7{DeOsNLbk}{^u}k|odJts`an5G-)u_Pj zmX#8v_+;_oHe%hOyM9_q%jgHtJzr*RhcG6DTc*K29I7_u*cThA6M)6m>$$3!*;XG7Ize_J^`$? z$5Bh_HjsQ>IdL~h=OJK^s~+4k17G>NejcfE1694J4?iY>#>r8R7?TEf`~8P$Gwk_! zjx(OPgSErjV;!)dLmiYz<{y7SpMAc-`TPMTLNtIMI~}Wjz3XLI4J4D1XLh?n_Yc%R0m2gA>Hq)$ diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/Open_Folder.png b/buildroot/share/vscode/AutoBuildMarlin/resources/Open_Folder.png deleted file mode 100644 index b8ae9ac9026776d8557ed5e327e823acc48d4fd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16455 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 YCQFsBuSrjjtHx85Rg;0gc^mXU03Aiy8~^|S diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/Open_Marlin.png b/buildroot/share/vscode/AutoBuildMarlin/resources/Open_Marlin.png deleted file mode 100644 index aa22232a8e5dba724bcf2196261f61e9aaafec3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56824 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 ValjG%8u&NWr3-o*x$4k|{|AQDbSD4+ diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/T32x32_white.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/T32x32_white.svg deleted file mode 100644 index fb3e249e8d40..000000000000 --- a/buildroot/share/vscode/AutoBuildMarlin/resources/T32x32_white.svg +++ /dev/null @@ -1 +0,0 @@ -T \ No newline at end of file diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/T48x48_dark.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/T48x48_dark.svg new file mode 100644 index 000000000000..b395ac858424 --- /dev/null +++ b/buildroot/share/vscode/AutoBuildMarlin/resources/T48x48_dark.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/T48x48_light.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/T48x48_light.svg new file mode 100644 index 000000000000..e7defea3766c --- /dev/null +++ b/buildroot/share/vscode/AutoBuildMarlin/resources/T48x48_light.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/Traceback.png b/buildroot/share/vscode/AutoBuildMarlin/resources/Traceback.png deleted file mode 100644 index 4ee9f976fb6adc4abed4d0a7c460dc8d1a977f19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8485 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 Vxwj;c|Jp!dc*Ruzv#vwL{{rss(%%38 diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/U32x32_white.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/U32x32_white.svg deleted file mode 100644 index 028c9e54743e..000000000000 --- a/buildroot/share/vscode/AutoBuildMarlin/resources/U32x32_white.svg +++ /dev/null @@ -1 +0,0 @@ -U \ No newline at end of file diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/U48x48_dark.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/U48x48_dark.svg new file mode 100644 index 000000000000..c1865b7353dc --- /dev/null +++ b/buildroot/share/vscode/AutoBuildMarlin/resources/U48x48_dark.svg @@ -0,0 +1,26 @@ + + + + + + + + + + diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/U48x48_light.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/U48x48_light.svg new file mode 100644 index 000000000000..ac481ea12c6b --- /dev/null +++ b/buildroot/share/vscode/AutoBuildMarlin/resources/U48x48_light.svg @@ -0,0 +1,26 @@ + + + + + + + + + + diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/U_small.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/U_small.svg deleted file mode 100644 index eb3a431b9d36..000000000000 --- a/buildroot/share/vscode/AutoBuildMarlin/resources/U_small.svg +++ /dev/null @@ -1 +0,0 @@ -U \ No newline at end of file diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/Upload.png b/buildroot/share/vscode/AutoBuildMarlin/resources/Upload.png deleted file mode 100644 index 8de383e5d1046500ad04d749f73ef68e94038d70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4297 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 \ No newline at end of file diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/Ut_small.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/Ut_small.svg deleted file mode 100644 index accc458a4255..000000000000 --- a/buildroot/share/vscode/AutoBuildMarlin/resources/Ut_small.svg +++ /dev/null @@ -1 +0,0 @@ -Ut \ No newline at end of file diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/install_extensions.png b/buildroot/share/vscode/AutoBuildMarlin/resources/install_extensions.png deleted file mode 100644 index 4904c1d758b87f31a28d6aaf0a9f9fea306a9a34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3341 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 CsiLX? diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/platformio_install.png b/buildroot/share/vscode/AutoBuildMarlin/resources/platformio_install.png deleted file mode 100644 index e1ff7fd3b352ae6d3963148cea6d5e62f36e6c86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25656 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 diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/view_command_palette.png b/buildroot/share/vscode/AutoBuildMarlin/resources/view_command_palette.png deleted file mode 100644 index 6fa3e9b016298c54e73bad997859c9adc5139058..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10602 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 Date: Thu, 19 Sep 2019 22:48:41 -0700 Subject: [PATCH 012/120] Fix BACKLASH_COMPENSATION compiler issues (#15307) --- Marlin/src/feature/backlash.h | 13 +++-------- Marlin/src/inc/SanityCheck.h | 12 ++++++++-- Marlin/src/module/configuration_store.cpp | 28 ++++++++--------------- 3 files changed, 23 insertions(+), 30 deletions(-) diff --git a/Marlin/src/feature/backlash.h b/Marlin/src/feature/backlash.h index 1eb06fe7764d..19d653491756 100644 --- a/Marlin/src/feature/backlash.h +++ b/Marlin/src/feature/backlash.h @@ -28,28 +28,21 @@ constexpr uint8_t all_on = 0xFF, all_off = 0x00; class Backlash { public: - #ifdef BACKLASH_DISTANCE_MM - #if ENABLED(BACKLASH_GCODE) - static float distance_mm[XYZ]; - #else - static const float distance_mm[XYZ]; - //static constexpr float distance_mm[XYZ] = BACKLASH_DISTANCE_MM; // compiler barks at this - #endif - #endif #if ENABLED(BACKLASH_GCODE) + static float distance_mm[XYZ]; static uint8_t correction; #ifdef BACKLASH_SMOOTHING_MM static float smoothing_mm; #endif + static inline void set_correction(const float &v) { correction = _MAX(0, _MIN(1.0, v)) * all_on; } static inline float get_correction() { return float(ui8_to_percent(correction)) / 100.0f; } #else static constexpr uint8_t correction = (BACKLASH_CORRECTION) * 0xFF; + static const float distance_mm[XYZ]; #ifdef BACKLASH_SMOOTHING_MM static constexpr float smoothing_mm = BACKLASH_SMOOTHING_MM; #endif - static inline void set_correction(float) { } - static inline float get_correction() { return float(ui8_to_percent(correction)) / 100.0f; } #endif #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 0b93522a20f3..bc6881c995f5 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2324,8 +2324,16 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2) #endif #endif -#if ENABLED(BACKLASH_COMPENSATION) && IS_CORE - #error "BACKLASH_COMPENSATION is incompatible with CORE kinematics." +#if ENABLED(BACKLASH_COMPENSATION) + #if IS_CORE + #error "BACKLASH_COMPENSATION is incompatible with CORE kinematics." + #endif + #ifndef BACKLASH_DISTANCE_MM + #error "BACKLASH_COMPENSATION requires BACKLASH_DISTANCE_MM" + #endif + #ifndef BACKLASH_CORRECTION + #error "BACKLASH_COMPENSATION requires BACKLASH_CORRECTION" + #endif #endif #if ENABLED(GRADIENT_MIX) && MIXING_VIRTUAL_TOOLS < 2 diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp index 905fde840766..b00f62f2c9f9 100644 --- a/Marlin/src/module/configuration_store.cpp +++ b/Marlin/src/module/configuration_store.cpp @@ -1189,17 +1189,14 @@ void MarlinSettings::postprocess() { // Backlash Compensation // { - #ifdef BACKLASH_DISTANCE_MM + #if ENABLED(BACKLASH_GCODE) const float (&backlash_distance_mm)[XYZ] = backlash.distance_mm; - #else - const float backlash_distance_mm[XYZ] = { 0 }; - #endif - #if ENABLED(BACKLASH_COMPENSATION) const uint8_t &backlash_correction = backlash.correction; #else + const float backlash_distance_mm[XYZ] = { 0 }; const uint8_t backlash_correction = 0; #endif - #ifdef BACKLASH_SMOOTHING_MM + #if ENABLED(BACKLASH_GCODE) && defined(BACKLASH_SMOOTHING_MM) const float &backlash_smoothing_mm = backlash.smoothing_mm; #else const float backlash_smoothing_mm = 3; @@ -1992,17 +1989,14 @@ void MarlinSettings::postprocess() { // Backlash Compensation // { - #ifdef BACKLASH_DISTANCE_MM + #if ENABLED(BACKLASH_GCODE) float (&backlash_distance_mm)[XYZ] = backlash.distance_mm; - #else - float backlash_distance_mm[XYZ]; - #endif - #if ENABLED(BACKLASH_COMPENSATION) uint8_t &backlash_correction = backlash.correction; #else + float backlash_distance_mm[XYZ]; uint8_t backlash_correction; #endif - #ifdef BACKLASH_SMOOTHING_MM + #if ENABLED(BACKLASH_GCODE) && defined(BACKLASH_SMOOTHING_MM) float &backlash_smoothing_mm = backlash.smoothing_mm; #else float backlash_smoothing_mm; @@ -2293,12 +2287,10 @@ void MarlinSettings::reset() { #if ENABLED(BACKLASH_GCODE) backlash.correction = (BACKLASH_CORRECTION) * 255; - #ifdef BACKLASH_DISTANCE_MM - constexpr float tmp[XYZ] = BACKLASH_DISTANCE_MM; - backlash.distance_mm[X_AXIS] = tmp[X_AXIS]; - backlash.distance_mm[Y_AXIS] = tmp[Y_AXIS]; - backlash.distance_mm[Z_AXIS] = tmp[Z_AXIS]; - #endif + constexpr float tmp[XYZ] = BACKLASH_DISTANCE_MM; + backlash.distance_mm[X_AXIS] = tmp[X_AXIS]; + backlash.distance_mm[Y_AXIS] = tmp[Y_AXIS]; + backlash.distance_mm[Z_AXIS] = tmp[Z_AXIS]; #ifdef BACKLASH_SMOOTHING_MM backlash.smoothing_mm = BACKLASH_SMOOTHING_MM; #endif From 6ed2bf631d2113da69d564401f5fdf307253593f Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Thu, 19 Sep 2019 22:50:11 -0700 Subject: [PATCH 013/120] Fix FILAMENT_RUNOUT_SCRIPT without ADVANCED_PAUSE_FEATURE build (#15313) --- Marlin/src/feature/runout.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Marlin/src/feature/runout.h b/Marlin/src/feature/runout.h index 672eea83cbb9..ab92c1f7c1e1 100644 --- a/Marlin/src/feature/runout.h +++ b/Marlin/src/feature/runout.h @@ -98,7 +98,11 @@ class TFilamentMonitor : public FilamentMonitorBase { // Give the response a chance to update its counter. static inline void run() { - if (enabled && !filament_ran_out && (IS_SD_PRINTING() || print_job_timer.isRunning() || did_pause_print)) { + if (enabled && !filament_ran_out && (IS_SD_PRINTING() || print_job_timer.isRunning() + #if ENABLED(ADVANCED_PAUSE_FEATURE) + || did_pause_print + #endif + )) { #ifdef FILAMENT_RUNOUT_DISTANCE_MM cli(); // Prevent RunoutResponseDelayed::block_completed from accumulating here #endif From 7d7404157aa76439bf6067a684ae84b1500b38c8 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 20 Sep 2019 03:37:47 -0500 Subject: [PATCH 014/120] Update AutoBuild README.md --- buildroot/share/vscode/AutoBuildMarlin/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildroot/share/vscode/AutoBuildMarlin/README.md b/buildroot/share/vscode/AutoBuildMarlin/README.md index 904f7f1abfb3..24123db9db5d 100644 --- a/buildroot/share/vscode/AutoBuildMarlin/README.md +++ b/buildroot/share/vscode/AutoBuildMarlin/README.md @@ -37,4 +37,4 @@ Before you install AutoBuildMarlin you'll first need to [Install PlatformIO in V ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/B_small.png)|Start **PIO Build** to test your Marlin build ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/C_small.png)|Start **PIO Clean** to delete old build files ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/U_small.png)|Start **PIO Upload** to install Marlin on your board - ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/Ut_small.png)|Start **PIO Upload (traceback)** to install Marlin with debugging + ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/T_small.png)|Start **PIO Upload (traceback)** to install Marlin with debugging From ed2c2bcd17c9a88b2dfa3941d3db55f36b7c0504 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 20 Sep 2019 19:48:48 -0500 Subject: [PATCH 015/120] Blend Auto Build icons --- .../share/vscode/AutoBuildMarlin/resources/B48x48_light.svg | 2 +- .../share/vscode/AutoBuildMarlin/resources/C48x48_light.svg | 2 +- .../share/vscode/AutoBuildMarlin/resources/T48x48_light.svg | 2 +- .../share/vscode/AutoBuildMarlin/resources/U48x48_light.svg | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/B48x48_light.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/B48x48_light.svg index 10fad6492857..adb6c43add18 100644 --- a/buildroot/share/vscode/AutoBuildMarlin/resources/B48x48_light.svg +++ b/buildroot/share/vscode/AutoBuildMarlin/resources/B48x48_light.svg @@ -11,7 +11,7 @@ version="1.1"> diff --git a/buildroot/share/vscode/AutoBuildMarlin/resources/C48x48_light.svg b/buildroot/share/vscode/AutoBuildMarlin/resources/C48x48_light.svg index d7dea1aae5a1..815ccf2e9a60 100644 --- a/buildroot/share/vscode/AutoBuildMarlin/resources/C48x48_light.svg +++ b/buildroot/share/vscode/AutoBuildMarlin/resources/C48x48_light.svg @@ -11,7 +11,7 @@ version="1.1"> Date: Fri, 20 Sep 2019 20:05:37 -0500 Subject: [PATCH 016/120] Force auto build output to top --- buildroot/share/atom/auto_build.py | 1 + 1 file changed, 1 insertion(+) diff --git a/buildroot/share/atom/auto_build.py b/buildroot/share/atom/auto_build.py index c159953aae72..6805a708dff5 100644 --- a/buildroot/share/atom/auto_build.py +++ b/buildroot/share/atom/auto_build.py @@ -943,6 +943,7 @@ def __init__(self): self.root = tk.Tk() + self.root.attributes("-topmost", True) self.frame = tk.Frame(self.root) self.frame.pack(fill='both', expand=True) From 13d725d24db1c0acea24d741391556c9c19ee811 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 20 Sep 2019 23:15:39 -0500 Subject: [PATCH 017/120] Tweak debug messages --- Marlin/src/gcode/calibrate/G28.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 420eb65c9f3a..4d5e203c97e7 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -124,7 +124,7 @@ return; } - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Z_SAFE_HOMING >>>"); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("home_z_safely >>>"); sync_plan_position(); @@ -142,7 +142,7 @@ if (position_is_reachable(destination[X_AXIS], destination[Y_AXIS])) { - if (DEBUGGING(LEVELING)) DEBUG_POS("Z_SAFE_HOMING", destination); + if (DEBUGGING(LEVELING)) DEBUG_POS("home_z_safely", destination); // This causes the carriage on Dual X to unpark #if ENABLED(DUAL_X_CARRIAGE) @@ -161,7 +161,7 @@ SERIAL_ECHO_MSG(MSG_ZPROBE_OUT); } - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< Z_SAFE_HOMING"); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< home_z_safely"); } #endif // Z_SAFE_HOMING From 97493dc62a8346957228f329a694844053c5bc58 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 20 Sep 2019 23:13:51 -0500 Subject: [PATCH 018/120] AutoBuildMarlin re-use VSCode terminal --- buildroot/share/atom/auto_build.py | 87 +++++++++++++++++++++++------- 1 file changed, 69 insertions(+), 18 deletions(-) diff --git a/buildroot/share/atom/auto_build.py b/buildroot/share/atom/auto_build.py index 6805a708dff5..c8a23dcbeca1 100644 --- a/buildroot/share/atom/auto_build.py +++ b/buildroot/share/atom/auto_build.py @@ -654,9 +654,6 @@ def line_print(line_input): global warning_continue global line_counter - - - # all '0' elements must precede all '1' elements or they'll be skipped platformio_highlights = [ ['Environment', 0, 'highlight_blue'], @@ -715,7 +712,6 @@ def write_to_screen_with_replace(text, highlights): # search for highlights & s # end - write_to_screen_with_replace - # scan the line line_counter = line_counter + 1 max_search = len(line_input) @@ -810,25 +806,76 @@ def write_to_screen_with_replace(text, highlights): # search for highlights & s # end - line_print +########################################################################## +# # +# run Platformio # +# # +########################################################################## -def run_PIO(dummy): + +# build platformio run -e target_env +# clean platformio run --target clean -e target_env +# upload platformio run --target upload -e target_env +# traceback platformio run --target upload -e target_env +# program platformio run --target program -e target_env +# test platformio test upload -e target_env +# remote platformio remote run --target upload -e target_env +# debug platformio debug -e target_env + + +def sys_PIO(): ########################################################################## # # - # run Platformio # + # run Platformio inside the same shell as this Python script # # # ########################################################################## + global build_type + global target_env + + import os + + print('build_type: ', build_type) + print('starting platformio') + + if build_type == 'build': + # pio_result = os.system("echo -en '\033c'") + pio_result = os.system('platformio run -e ' + target_env) + elif build_type == 'clean': + pio_result = os.system('platformio run --target clean -e ' + target_env) + elif build_type == 'upload': + pio_result = os.system('platformio run --target upload -e ' + target_env) + elif build_type == 'traceback': + pio_result = os.system('platformio run --target upload -e ' + target_env) + elif build_type == 'program': + pio_result = os.system('platformio run --target program -e ' + target_env) + elif build_type == 'test': + pio_result = os.system('platformio test upload -e ' + target_env) + elif build_type == 'remote': + pio_result = os.system('platformio remote run --target program -e ' + target_env) + elif build_type == 'debug': + pio_result = os.system('platformio debug -e ' + target_env) + else: + print('ERROR - unknown build type: ', build_type) + raise SystemExit(0) # kill everything + + # stream output from subprocess and split it into lines + #for line in iter(pio_subprocess.stdout.readline, ''): + # line_print(line.replace('\n', '')) - # build platformio run -e target_env - # clean platformio run --target clean -e target_env - # upload platformio run --target upload -e target_env - # traceback platformio run --target upload -e target_env - # program platformio run --target program -e target_env - # test platformio test upload -e target_env - # remote platformio remote run --target upload -e target_env - # debug platformio debug -e target_env + # append info used to run PlatformIO + # write_to_screen_queue('\nBoard name: ' + board_name + '\n') # put build info at the bottom of the screen + # write_to_screen_queue('Build type: ' + build_type + '\n') + # write_to_screen_queue('Environment used: ' + target_env + '\n') + # write_to_screen_queue(str(datetime.now()) + '\n') + +# end - sys_PIO + + + +def run_PIO(dummy): global build_type global target_env @@ -906,6 +953,7 @@ def run_PIO(dummy): # end - run_PIO + ######################################################################## import time @@ -926,7 +974,6 @@ def run_PIO(dummy): import tkFileDialog - class output_window(Text): # based on Super Text global continue_updates @@ -1238,10 +1285,14 @@ def main(): os.environ["TARGET_ENV"] = target_env os.environ["BOARD_NAME"] = board_name - auto_build = output_window() - auto_build.start_thread() # executes the "run_PIO" function + # Re-use the VSCode terminal, if possible + if os.environ.get('PLATFORMIO_CALLER', '') == 'vscode': + sys_PIO() + else: + auto_build = output_window() + auto_build.start_thread() # executes the "run_PIO" function - auto_build.root.mainloop() + auto_build.root.mainloop() From 7fc4f7b815949eb9ec4b8e7c5399d154d0f28c94 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 21 Sep 2019 00:00:13 -0500 Subject: [PATCH 019/120] [cron] Bump distribution date --- Marlin/src/inc/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index 64f5644bc4db..a772aafbee97 100644 --- a/Marlin/src/inc/Version.h +++ b/Marlin/src/inc/Version.h @@ -51,7 +51,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ - #define STRING_DISTRIBUTION_DATE "2019-09-20" + #define STRING_DISTRIBUTION_DATE "2019-09-21" /** * Required minimum Configuration.h and Configuration_adv.h file versions. From 4e5941fa572f701dd98015760e46023afa8d2a1e Mon Sep 17 00:00:00 2001 From: Giuliano Zaro <3684609+GMagician@users.noreply.github.com> Date: Sun, 22 Sep 2019 22:38:07 +0200 Subject: [PATCH 020/120] AutoBuild compatibility with Python3 (#15331) --- buildroot/share/atom/auto_build.py | 98 +++++++++++++++--------------- 1 file changed, 48 insertions(+), 50 deletions(-) diff --git a/buildroot/share/atom/auto_build.py b/buildroot/share/atom/auto_build.py index c8a23dcbeca1..3586676619c5 100644 --- a/buildroot/share/atom/auto_build.py +++ b/buildroot/share/atom/auto_build.py @@ -95,12 +95,7 @@ python_ver = sys.version_info[0] # major version - 2 or 3 -if python_ver == 2: - print("python version " + str(sys.version_info[0]) + "." + str(sys.version_info[1]) + "." + str(sys.version_info[2])) -else: - print("python version " + str(sys.version_info[0])) - print("This script only runs under python 2") - exit() +print("python version " + str(sys.version_info[0]) + "." + str(sys.version_info[1]) + "." + str(sys.version_info[2])) import platform current_OS = platform.system() @@ -135,9 +130,9 @@ def get_answer(board_name, cpu_label_txt, cpu_a_txt, cpu_b_txt): if python_ver == 2: - import Tkinter as tk + import Tkinter as tk else: - import tkinter as tk + import tkinter as tk def CPU_exit_3(): # forward declare functions @@ -615,9 +610,12 @@ def invalid_board(): # end - get_env # puts screen text into queue so that the parent thread can fetch the data from this thread -import Queue -IO_queue = Queue.Queue() -PIO_queue = Queue.Queue() +if python_ver == 2: + import Queue as queue +else: + import queue as queue +IO_queue = queue.Queue() +#PIO_queue = queue.Queue() not used! def write_to_screen_queue(text, format_tag = 'normal'): double_in = [text, format_tag] IO_queue.put(double_in, block = False) @@ -940,9 +938,13 @@ def run_PIO(dummy): raise SystemExit(0) # kill everything # stream output from subprocess and split it into lines - for line in iter(pio_subprocess.stdout.readline, ''): - line_print(line.replace('\n', '')) - + if python_ver == 2: + for line in iter(pio_subprocess.stdout.readline, ''): + line_print(line.replace('\n', '')) + else: + for line in iter(pio_subprocess.stdout.readline, b''): + line = line.decode('utf-8') + line_print(line.replace('\n', '')) # append info used to run PlatformIO write_to_screen_queue('\nBoard name: ' + board_name + '\n') # put build info at the bottom of the screen @@ -958,21 +960,22 @@ def run_PIO(dummy): import time import threading -import Tkinter as tk -import ttk -import Queue +if python_ver == 2: + import Tkinter as tk + import Queue as queue + import ttk + from Tkinter import Tk, Frame, Text, Scrollbar, Menu + #from tkMessageBox import askokcancel this is not used: removed + import tkFileDialog as fileDialog +else: + import tkinter as tk + import queue as queue + from tkinter import ttk, Tk, Frame, Text, Scrollbar, Menu + from tkinter import filedialog import subprocess import sys -que = Queue.Queue() -#IO_queue = Queue.Queue() - -from Tkinter import Tk, Frame, Text, Scrollbar, Menu -from tkMessageBox import askokcancel - -import tkFileDialog -from tkMessageBox import askokcancel -import tkFileDialog - +que = queue.Queue() +#IO_queue = queue.Queue() class output_window(Text): # based on Super Text @@ -1177,7 +1180,7 @@ def _open_selected_file(self): def _file_save_as(self): - self.filename = tkFileDialog.asksaveasfilename(defaultextension = '.txt') + self.filename = fileDialog.asksaveasfilename(defaultextension = '.txt') f = open(self.filename, 'w') f.write(self.get('1.0', 'end')) f.close() @@ -1267,33 +1270,28 @@ def _clear_all(self): def main(): - ########################################################################## - # # - # main program # - # # - ########################################################################## - - global build_type - global target_env - global board_name - - board_name, Marlin_ver = get_board_name() + ########################################################################## + # # + # main program # + # # + ########################################################################## - target_env = get_env(board_name, Marlin_ver) + global build_type + global target_env + global board_name - os.environ["BUILD_TYPE"] = build_type # let sub processes know what is happening - os.environ["TARGET_ENV"] = target_env - os.environ["BOARD_NAME"] = board_name + board_name, Marlin_ver = get_board_name() - # Re-use the VSCode terminal, if possible - if os.environ.get('PLATFORMIO_CALLER', '') == 'vscode': - sys_PIO() - else: - auto_build = output_window() - auto_build.start_thread() # executes the "run_PIO" function + target_env = get_env(board_name, Marlin_ver) - auto_build.root.mainloop() + # Re-use the VSCode terminal, if possible + if os.environ.get('PLATFORMIO_CALLER', '') == 'vscode': + sys_PIO() + else: + auto_build = output_window() + auto_build.start_thread() # executes the "run_PIO" function + auto_build.root.mainloop() From f5092e92a44697da1a04bb6b6e251180f0a3ee5a Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 22 Sep 2019 18:18:51 -0500 Subject: [PATCH 021/120] Enhanced A20M config --- config/examples/Geeetech/A20M/Configuration.h | 4 ++-- .../Geeetech/A20M/Configuration_adv.h | 20 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/config/examples/Geeetech/A20M/Configuration.h b/config/examples/Geeetech/A20M/Configuration.h index 798416d8ec43..3fe919c82708 100644 --- a/config/examples/Geeetech/A20M/Configuration.h +++ b/config/examples/Geeetech/A20M/Configuration.h @@ -766,7 +766,7 @@ * * See https://github.com/synthetos/TinyG/wiki/Jerk-Controlled-Motion-Explained */ -//#define S_CURVE_ACCELERATION +#define S_CURVE_ACCELERATION //=========================================================================== //============================= Z Probe Options ============================= @@ -1734,7 +1734,7 @@ // // ULTIPANEL as seen on Thingiverse. // -#define ULTIPANEL +//#define ULTIPANEL // // PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3) diff --git a/config/examples/Geeetech/A20M/Configuration_adv.h b/config/examples/Geeetech/A20M/Configuration_adv.h index 8572da54b91b..469fa3769078 100644 --- a/config/examples/Geeetech/A20M/Configuration_adv.h +++ b/config/examples/Geeetech/A20M/Configuration_adv.h @@ -934,7 +934,7 @@ #if ENABLED(POWER_LOSS_RECOVERY) #define POWER_LOSS_PIN 69 // Pin to detect power loss #define POWER_LOSS_STATE LOW // State of pin indicating power loss - //#define POWER_LOSS_PULL // Set pullup / pulldown as appropriate + #define POWER_LOSS_PULL // Set pullup / pulldown as appropriate //#define POWER_LOSS_PURGE_LEN 20 // (mm) Length of filament to purge on resume //#define POWER_LOSS_RETRACT_LEN 10 // (mm) Length of filament to retract on fail. Requires backup power. @@ -985,7 +985,7 @@ //#define LONG_FILENAME_HOST_SUPPORT // Enable this option to scroll long filenames in the SD card menu - //#define SCROLL_LONG_FILENAMES + #define SCROLL_LONG_FILENAMES // Leave the heaters on after Stop Print (not recommended!) //#define SD_ABORT_NO_COOLDOWN @@ -1153,12 +1153,12 @@ #define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames #define STATUS_HEAT_PERCENT // Show heating in a progress bar #define BOOT_MARLIN_LOGO_SMALL // Show a smaller Marlin logo on the Boot Screen (saving 399 bytes of flash) - //#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~‭3260 (or ~940) bytes of PROGMEM. + #define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~‭3260 (or ~940) bytes of PROGMEM. // Frivolous Game Options - //#define MARLIN_BRICKOUT - //#define MARLIN_INVADERS - //#define MARLIN_SNAKE + #define MARLIN_BRICKOUT + #define MARLIN_INVADERS + #define MARLIN_SNAKE //#define GAMES_EASTER_EGG // Add extra blank lines above the "Games" sub-menu #endif // HAS_GRAPHICAL_LCD @@ -1277,7 +1277,7 @@ #endif #endif - //#define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28 + #define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28 //#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping #if ENABLED(BABYSTEP_ZPROBE_OFFSET) @@ -1304,10 +1304,10 @@ * See http://marlinfw.org/docs/features/lin_advance.html for full instructions. * Mention @Sebastianv650 on GitHub to alert the author of any issues. */ -//#define LIN_ADVANCE +#define LIN_ADVANCE #if ENABLED(LIN_ADVANCE) //#define EXTRA_LIN_ADVANCE_K // Enable for second linear advance constants - #define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed + #define LIN_ADVANCE_K 0 // Unit: mm compression per 1mm/s extruder speed //#define LA_DEBUG // If enabled, this will generate debug information output over USB. #endif @@ -2380,7 +2380,7 @@ * - M206 and M428 are disabled. * - G92 will revert to its behavior from Marlin 1.0. */ -#define NO_WORKSPACE_OFFSETS +//#define NO_WORKSPACE_OFFSETS /** * Set the number of proportional font spaces required to fill up a typical character space. From 6c62732ae1db88734d23c3fd6ccfb7b3663790ab Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 22 Sep 2019 19:32:42 -0500 Subject: [PATCH 022/120] Handle no Timer 3C --- Marlin/src/HAL/HAL_AVR/fast_pwm.cpp | 39 ++++++++++++++++++----------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/Marlin/src/HAL/HAL_AVR/fast_pwm.cpp b/Marlin/src/HAL/HAL_AVR/fast_pwm.cpp index 55ca669a876f..282b70de7131 100644 --- a/Marlin/src/HAL/HAL_AVR/fast_pwm.cpp +++ b/Marlin/src/HAL/HAL_AVR/fast_pwm.cpp @@ -59,8 +59,8 @@ Timer get_pwm_timer(const pin_t pin) { #ifdef TCCR2 case TIMER2: { Timer timer = { - /*TCCRnQ*/ { &TCCR2, nullptr, nullptr}, - /*OCRnQ*/ { (uint16_t*)&OCR2, nullptr, nullptr}, + /*TCCRnQ*/ { &TCCR2, nullptr, nullptr }, + /*OCRnQ*/ { (uint16_t*)&OCR2, nullptr, nullptr }, /*ICRn*/ nullptr, /*n, q*/ 2, 0 }; @@ -70,8 +70,8 @@ Timer get_pwm_timer(const pin_t pin) { case TIMER2A: break; // protect TIMER2A case TIMER2B: { Timer timer = { - /*TCCRnQ*/ { &TCCR2A, &TCCR2B, nullptr}, - /*OCRnQ*/ { (uint16_t*)&OCR2A, (uint16_t*)&OCR2B, nullptr}, + /*TCCRnQ*/ { &TCCR2A, &TCCR2B, nullptr }, + /*OCRnQ*/ { (uint16_t*)&OCR2A, (uint16_t*)&OCR2B, nullptr }, /*ICRn*/ nullptr, /*n, q*/ 2, 1 }; @@ -81,8 +81,8 @@ Timer get_pwm_timer(const pin_t pin) { case TIMER2B: ++q; case TIMER2A: { Timer timer = { - /*TCCRnQ*/ { &TCCR2A, &TCCR2B, nullptr}, - /*OCRnQ*/ { (uint16_t*)&OCR2A, (uint16_t*)&OCR2B, nullptr}, + /*TCCRnQ*/ { &TCCR2A, &TCCR2B, nullptr }, + /*OCRnQ*/ { (uint16_t*)&OCR2A, (uint16_t*)&OCR2B, nullptr }, /*ICRn*/ nullptr, 2, q }; @@ -91,13 +91,24 @@ Timer get_pwm_timer(const pin_t pin) { #endif #endif #endif - #ifdef TCCR3A + #ifdef OCR3C case TIMER3C: ++q; case TIMER3B: ++q; case TIMER3A: { Timer timer = { - /*TCCRnQ*/ { &TCCR3A, &TCCR3B, &TCCR3C}, - /*OCRnQ*/ { &OCR3A, &OCR3B, &OCR3C}, + /*TCCRnQ*/ { &TCCR3A, &TCCR3B, &TCCR3C }, + /*OCRnQ*/ { &OCR3A, &OCR3B, &OCR3C }, + /*ICRn*/ &ICR3, + /*n, q*/ 3, q + }; + return timer; + } + #elif defined(OCR3B) + case TIMER3B: ++q; + case TIMER3A: { + Timer timer = { + /*TCCRnQ*/ { &TCCR3A, &TCCR3B, nullptr }, + /*OCRnQ*/ { &OCR3A, &OCR3B, nullptr }, /*ICRn*/ &ICR3, /*n, q*/ 3, q }; @@ -109,8 +120,8 @@ Timer get_pwm_timer(const pin_t pin) { case TIMER4B: ++q; case TIMER4A: { Timer timer = { - /*TCCRnQ*/ { &TCCR4A, &TCCR4B, &TCCR4C}, - /*OCRnQ*/ { &OCR4A, &OCR4B, &OCR4C}, + /*TCCRnQ*/ { &TCCR4A, &TCCR4B, &TCCR4C }, + /*OCRnQ*/ { &OCR4A, &OCR4B, &OCR4C }, /*ICRn*/ &ICR4, /*n, q*/ 4, q }; @@ -122,7 +133,7 @@ Timer get_pwm_timer(const pin_t pin) { case TIMER5B: ++q; case TIMER5A: { Timer timer = { - /*TCCRnQ*/ { &TCCR5A, &TCCR5B, &TCCR5C}, + /*TCCRnQ*/ { &TCCR5A, &TCCR5B, &TCCR5C }, /*OCRnQ*/ { &OCR5A, &OCR5B, &OCR5C }, /*ICRn*/ &ICR5, /*n, q*/ 5, q @@ -132,8 +143,8 @@ Timer get_pwm_timer(const pin_t pin) { #endif } Timer timer = { - /*TCCRnQ*/ { nullptr, nullptr, nullptr}, - /*OCRnQ*/ { nullptr, nullptr, nullptr}, + /*TCCRnQ*/ { nullptr, nullptr, nullptr }, + /*OCRnQ*/ { nullptr, nullptr, nullptr }, /*ICRn*/ nullptr, 0, 0 }; From 9e7e8e229ca686a8b3737987efaa63aaae15b2b9 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 23 Sep 2019 00:00:08 -0500 Subject: [PATCH 023/120] [cron] Bump distribution date --- Marlin/src/inc/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index a772aafbee97..4a3a0e2fbbcd 100644 --- a/Marlin/src/inc/Version.h +++ b/Marlin/src/inc/Version.h @@ -51,7 +51,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ - #define STRING_DISTRIBUTION_DATE "2019-09-21" + #define STRING_DISTRIBUTION_DATE "2019-09-23" /** * Required minimum Configuration.h and Configuration_adv.h file versions. From 938a49f9892b7a63478d08d6119874600633dacf Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 23 Sep 2019 19:13:05 -0500 Subject: [PATCH 024/120] Update DUE-tests --- buildroot/share/tests/DUE-tests | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildroot/share/tests/DUE-tests b/buildroot/share/tests/DUE-tests index 214a231a8f48..609790b5b8d2 100755 --- a/buildroot/share/tests/DUE-tests +++ b/buildroot/share/tests/DUE-tests @@ -33,7 +33,7 @@ opt_set E0_AUTO_FAN_PIN 8 opt_set EXTRUDER_AUTO_FAN_SPEED 100 opt_set TEMP_SENSOR_CHAMBER 3 opt_set HEATER_CHAMBER_PIN 45 -exec_test $1 $2 "RAMPS4DUE_EFB with EXTENSIBLE_UI, S-Curve, many options." +exec_test $1 $2 "RAMPS4DUE_EFB with ABL (Bilinear), EXTENSIBLE_UI, S-Curve, many options." restore_configs opt_set MOTHERBOARD BOARD_RADDS @@ -45,7 +45,7 @@ pins_set ramps/RAMPS X_MAX_PIN -1 pins_set ramps/RAMPS Y_MAX_PIN -1 opt_add Z2_MAX_PIN 2 opt_add Z3_MAX_PIN 3 -exec_test $1 $2 "RADDS with Z_TRIPLE_STEPPER_DRIVERS and Z_STEPPER_AUTO_ALIGN" +exec_test $1 $2 "RADDS with ABL (Bilinear), Z_TRIPLE_STEPPER_DRIVERS and Z_STEPPER_AUTO_ALIGN" # # Test SWITCHING_EXTRUDER From 5e13fe989f21bcbd4da1a567953dab8a18f96e11 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 23 Sep 2019 20:58:01 -0500 Subject: [PATCH 025/120] Rename some feedrate-oriented functions --- Marlin/src/gcode/bedlevel/abl/G29.cpp | 4 ++-- Marlin/src/gcode/calibrate/G28.cpp | 4 ++-- Marlin/src/gcode/calibrate/G33.cpp | 4 ++-- Marlin/src/gcode/calibrate/M48.cpp | 4 ++-- Marlin/src/gcode/probe/G30.cpp | 4 ++-- Marlin/src/gcode/probe/G38.cpp | 4 ++-- Marlin/src/module/motion.cpp | 7 +++++-- Marlin/src/module/motion.h | 5 +++-- 8 files changed, 20 insertions(+), 16 deletions(-) diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 0c08a132d5c3..b942654a302f 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -446,7 +446,7 @@ G29_TYPE GcodeSuite::G29() { } #endif - if (!faux) setup_for_endstop_or_probe_move(); + if (!faux) remember_feedrate_scaling_off(); #if ENABLED(AUTO_BED_LEVELING_BILINEAR) @@ -980,7 +980,7 @@ G29_TYPE GcodeSuite::G29() { } // !isnan(measured_z) // Restore state after probing - if (!faux) clean_up_after_endstop_or_probe_move(); + if (!faux) restore_feedrate_and_scaling(); if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< G29"); diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 4d5e203c97e7..aad4c4093c83 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -261,7 +261,7 @@ void GcodeSuite::G28(const bool always_home_all) { extruder_duplication_enabled = false; #endif - setup_for_endstop_or_probe_move(); + remember_feedrate_scaling_off(); endstops.enable(true); // Enable endstops for next homing move @@ -427,7 +427,7 @@ void GcodeSuite::G28(const bool always_home_all) { set_bed_leveling_enabled(leveling_was_active); #endif - clean_up_after_endstop_or_probe_move(); + restore_feedrate_and_scaling(); // Restore the active tool after homing #if HOTENDS > 1 && (DISABLED(DELTA) || ENABLED(DELTA_HOME_TO_SAFE_ZONE)) diff --git a/Marlin/src/gcode/calibrate/G33.cpp b/Marlin/src/gcode/calibrate/G33.cpp index 8bbdba9bb79f..1e3e84a1e421 100644 --- a/Marlin/src/gcode/calibrate/G33.cpp +++ b/Marlin/src/gcode/calibrate/G33.cpp @@ -84,7 +84,7 @@ void ac_setup(const bool reset_bed) { #endif planner.synchronize(); - setup_for_endstop_or_probe_move(); + remember_feedrate_scaling_off(); #if HAS_LEVELING if (reset_bed) reset_bed_level(); // After full calibration bed-level data is no longer valid @@ -102,7 +102,7 @@ void ac_cleanup( #if HAS_BED_PROBE STOW_PROBE(); #endif - clean_up_after_endstop_or_probe_move(); + restore_feedrate_and_scaling(); #if HOTENDS > 1 tool_change(old_tool_index, true); #endif diff --git a/Marlin/src/gcode/calibrate/M48.cpp b/Marlin/src/gcode/calibrate/M48.cpp index dd0039e9b22d..4557a94162dd 100644 --- a/Marlin/src/gcode/calibrate/M48.cpp +++ b/Marlin/src/gcode/calibrate/M48.cpp @@ -111,7 +111,7 @@ void GcodeSuite::M48() { set_bed_leveling_enabled(false); #endif - setup_for_endstop_or_probe_move(); + remember_feedrate_scaling_off(); float mean = 0.0, sigma = 0.0, min = 99999.9, max = -99999.9, sample_set[n_samples]; @@ -256,7 +256,7 @@ void GcodeSuite::M48() { #endif } - clean_up_after_endstop_or_probe_move(); + restore_feedrate_and_scaling(); // Re-enable bed level correction if it had been on #if HAS_LEVELING diff --git a/Marlin/src/gcode/probe/G30.cpp b/Marlin/src/gcode/probe/G30.cpp index 68bdb5d3b62c..b4525772c327 100644 --- a/Marlin/src/gcode/probe/G30.cpp +++ b/Marlin/src/gcode/probe/G30.cpp @@ -49,7 +49,7 @@ void GcodeSuite::G30() { set_bed_leveling_enabled(false); #endif - setup_for_endstop_or_probe_move(); + remember_feedrate_scaling_off(); const ProbePtRaise raise_after = parser.boolval('E', true) ? PROBE_PT_STOW : PROBE_PT_NONE; const float measured_z = probe_at_point(xpos, ypos, raise_after, 1); @@ -57,7 +57,7 @@ void GcodeSuite::G30() { if (!isnan(measured_z)) SERIAL_ECHOLNPAIR("Bed X: ", FIXFLOAT(xpos), " Y: ", FIXFLOAT(ypos), " Z: ", FIXFLOAT(measured_z)); - clean_up_after_endstop_or_probe_move(); + restore_feedrate_and_scaling(); #ifdef Z_AFTER_PROBING if (raise_after == PROBE_PT_STOW) move_z_after_probing(); diff --git a/Marlin/src/gcode/probe/G38.cpp b/Marlin/src/gcode/probe/G38.cpp index 14445213508e..33f5611a43ca 100644 --- a/Marlin/src/gcode/probe/G38.cpp +++ b/Marlin/src/gcode/probe/G38.cpp @@ -109,7 +109,7 @@ void GcodeSuite::G38(const int8_t subcode) { // Get X Y Z E F get_destination_from_command(); - setup_for_endstop_or_probe_move(); + remember_feedrate_scaling_off(); const bool error_on_fail = #if ENABLED(G38_PROBE_AWAY) @@ -128,7 +128,7 @@ void GcodeSuite::G38(const int8_t subcode) { break; } - clean_up_after_endstop_or_probe_move(); + restore_feedrate_and_scaling(); } #endif // G38_PROBE_TARGET diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index 930584889c0c..203194411788 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -439,12 +439,15 @@ void do_blocking_move_to_xy(const float &rx, const float &ry, const float &fr_mm // static float saved_feedrate_mm_s; static int16_t saved_feedrate_percentage; -void setup_for_endstop_or_probe_move() { +void remember_feedrate_and_scaling() { saved_feedrate_mm_s = feedrate_mm_s; saved_feedrate_percentage = feedrate_percentage; +} +void remember_feedrate_scaling_off() { + remember_feedrate_and_scaling(); feedrate_percentage = 100; } -void clean_up_after_endstop_or_probe_move() { +void restore_feedrate_and_scaling() { feedrate_mm_s = saved_feedrate_mm_s; feedrate_percentage = saved_feedrate_percentage; } diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index 3f9d0e9bda5a..f461aae0043e 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -203,8 +203,9 @@ FORCE_INLINE void do_blocking_move_to(const float (&raw)[XYZE], const float &fr_ do_blocking_move_to(raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS], fr_mm_s); } -void setup_for_endstop_or_probe_move(); -void clean_up_after_endstop_or_probe_move(); +void remember_feedrate_and_scaling(); +void remember_feedrate_scaling_off(); +void restore_feedrate_and_scaling(); // // Homing From 07eb2130467c40f4dbe4da969dc1a04746420d91 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 24 Sep 2019 00:00:11 -0500 Subject: [PATCH 026/120] [cron] Bump distribution date --- Marlin/src/inc/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index 4a3a0e2fbbcd..6e698073c587 100644 --- a/Marlin/src/inc/Version.h +++ b/Marlin/src/inc/Version.h @@ -51,7 +51,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ - #define STRING_DISTRIBUTION_DATE "2019-09-23" + #define STRING_DISTRIBUTION_DATE "2019-09-24" /** * Required minimum Configuration.h and Configuration_adv.h file versions. From 48e2f90304d15cd719d95a4417994abe0f516eac Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 24 Sep 2019 17:20:25 -0500 Subject: [PATCH 027/120] Improve TMC sanity checks --- Marlin/src/inc/SanityCheck.h | 65 ++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 14 deletions(-) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index bc6881c995f5..4b59f641cc01 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1044,8 +1044,9 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS + ENABLED(SOLENOID_PROBE) \ + ENABLED(Z_PROBE_ALLEN_KEY) \ + ENABLED(Z_PROBE_SLED) \ - + ENABLED(RACK_AND_PINION_PROBE) - #error "Please enable only one probe option: PROBE_MANUALLY, FIX_MOUNTED_PROBE, BLTOUCH, TOUCH_MI_PROBE, SOLENOID_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, or Z Servo." + + ENABLED(RACK_AND_PINION_PROBE) \ + + ENABLED(SENSORLESS_PROBING) + #error "Please enable only one probe option: PROBE_MANUALLY, SENSORLESS_PROBING, BLTOUCH, FIX_MOUNTED_PROBE, TOUCH_MI_PROBE, SOLENOID_PROBE, Z_PROBE_ALLEN_KEY, Z_PROBE_SLED, or Z Servo." #endif #if HAS_BED_PROBE @@ -2076,18 +2077,54 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #if ENABLED(DELTA) && !BOTH(STEALTHCHOP_XY, STEALTHCHOP_Z) #error "SENSORLESS_HOMING on DELTA currently requires STEALTHCHOP_XY and STEALTHCHOP_Z." - #elif X_SENSORLESS && X_HOME_DIR < 0 && (X_MIN_ENDSTOP_INVERTING != X_ENDSTOP_INVERTING || DISABLED(ENDSTOPPULLUP_XMIN)) - #error "SENSORLESS_HOMING requires X_MIN_ENDSTOP_INVERTING and ENDSTOPPULLUP_XMIN when homing to X_MIN." - #elif X_SENSORLESS && X_HOME_DIR > 0 && (X_MAX_ENDSTOP_INVERTING != X_ENDSTOP_INVERTING || DISABLED(ENDSTOPPULLUP_XMAX)) - #error "SENSORLESS_HOMING requires X_MAX_ENDSTOP_INVERTING and ENDSTOPPULLUP_XMAX when homing to X_MAX." - #elif Y_SENSORLESS && Y_HOME_DIR < 0 && (Y_MIN_ENDSTOP_INVERTING != Y_ENDSTOP_INVERTING || DISABLED(ENDSTOPPULLUP_YMIN)) - #error "SENSORLESS_HOMING requires Y_MIN_ENDSTOP_INVERTING and ENDSTOPPULLUP_YMIN when homing to Y_MIN." - #elif Y_SENSORLESS && Y_HOME_DIR > 0 && (Y_MAX_ENDSTOP_INVERTING != Y_ENDSTOP_INVERTING || DISABLED(ENDSTOPPULLUP_YMAX)) - #error "SENSORLESS_HOMING requires Y_MAX_ENDSTOP_INVERTING and ENDSTOPPULLUP_YMAX when homing to Y_MAX." - #elif Z_SENSORLESS && Z_HOME_DIR < 0 && (Z_MIN_ENDSTOP_INVERTING != Z_ENDSTOP_INVERTING || DISABLED(ENDSTOPPULLUP_ZMIN)) - #error "SENSORLESS_HOMING requires Z_MIN_ENDSTOP_INVERTING and ENDSTOPPULLUP_ZMIN when homing to Z_MIN." - #elif Z_SENSORLESS && Z_HOME_DIR > 0 && (Z_MAX_ENDSTOP_INVERTING != Z_ENDSTOP_INVERTING || DISABLED(ENDSTOPPULLUP_ZMAX)) - #error "SENSORLESS_HOMING requires Z_MAX_ENDSTOP_INVERTING and ENDSTOPPULLUP_ZMAX when homing to Z_MAX." + #elif X_SENSORLESS && X_HOME_DIR < 0 && DISABLED(ENDSTOPPULLUPS, ENDSTOPPULLUP_XMIN) + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_XMIN (or ENDSTOPPULLUPS) when homing to X_MIN." + #elif X_SENSORLESS && X_HOME_DIR > 0 && DISABLED(ENDSTOPPULLUPS, ENDSTOPPULLUP_XMAX) + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_XMAX (or ENDSTOPPULLUPS) when homing to X_MAX." + #elif Y_SENSORLESS && Y_HOME_DIR < 0 && DISABLED(ENDSTOPPULLUPS, ENDSTOPPULLUP_YMIN) + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_YMIN (or ENDSTOPPULLUPS) when homing to Y_MIN." + #elif Y_SENSORLESS && Y_HOME_DIR > 0 && DISABLED(ENDSTOPPULLUPS, ENDSTOPPULLUP_YMAX) + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_YMAX (or ENDSTOPPULLUPS) when homing to Y_MAX." + #elif Z_SENSORLESS && Z_HOME_DIR < 0 && DISABLED(ENDSTOPPULLUPS, ENDSTOPPULLUP_ZMIN) + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMIN (or ENDSTOPPULLUPS) when homing to Z_MIN." + #elif Z_SENSORLESS && Z_HOME_DIR > 0 && DISABLED(ENDSTOPPULLUPS, ENDSTOPPULLUP_ZMAX) + #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMAX (or ENDSTOPPULLUPS) when homing to Z_MAX." + #elif X_SENSORLESS && X_HOME_DIR < 0 && X_MIN_ENDSTOP_INVERTING != X_ENDSTOP_INVERTING + #if X_ENDSTOP_INVERTING + #error "SENSORLESS_HOMING requires X_MIN_ENDSTOP_INVERTING = true when homing to X_MIN." + #else + #error "SENSORLESS_HOMING requires X_MIN_ENDSTOP_INVERTING = false when homing TMC2209 to X_MIN." + #endif + #elif X_SENSORLESS && X_HOME_DIR > 0 && X_MAX_ENDSTOP_INVERTING != X_ENDSTOP_INVERTING + #if X_ENDSTOP_INVERTING + #error "SENSORLESS_HOMING requires X_MAX_ENDSTOP_INVERTING = true when homing to X_MAX." + #else + #error "SENSORLESS_HOMING requires X_MAX_ENDSTOP_INVERTING = false when homing TMC2209 to X_MAX." + #endif + #elif Y_SENSORLESS && Y_HOME_DIR < 0 && Y_MIN_ENDSTOP_INVERTING != Y_ENDSTOP_INVERTING + #if Y_ENDSTOP_INVERTING + #error "SENSORLESS_HOMING requires Y_MIN_ENDSTOP_INVERTING = true when homing to Y_MIN." + #else + #error "SENSORLESS_HOMING requires Y_MIN_ENDSTOP_INVERTING = false when homing TMC2209 to Y_MIN." + #endif + #elif Y_SENSORLESS && Y_HOME_DIR > 0 && Y_MAX_ENDSTOP_INVERTING != Y_ENDSTOP_INVERTING + #if Y_ENDSTOP_INVERTING + #error "SENSORLESS_HOMING requires Y_MAX_ENDSTOP_INVERTING = true when homing to Y_MAX." + #else + #error "SENSORLESS_HOMING requires Y_MAX_ENDSTOP_INVERTING = false when homing TMC2209 to Y_MAX." + #endif + #elif Z_SENSORLESS && Z_HOME_DIR < 0 && Z_MIN_ENDSTOP_INVERTING != Z_ENDSTOP_INVERTING + #if Z_ENDSTOP_INVERTING + #error "SENSORLESS_HOMING requires Z_MIN_ENDSTOP_INVERTING = true when homing to Z_MIN." + #else + #error "SENSORLESS_HOMING requires Z_MIN_ENDSTOP_INVERTING = false when homing TMC2209 to Z_MIN." + #endif + #elif Z_SENSORLESS && Z_HOME_DIR > 0 && Z_MAX_ENDSTOP_INVERTING != Z_ENDSTOP_INVERTING + #if Z_ENDSTOP_INVERTING + #error "SENSORLESS_HOMING requires Z_MAX_ENDSTOP_INVERTING = true when homing to Z_MAX." + #else + #error "SENSORLESS_HOMING requires Z_MAX_ENDSTOP_INVERTING = false when homing TMC2209 to Z_MAX." + #endif #elif ENDSTOP_NOISE_THRESHOLD #error "SENSORLESS_HOMING is incompatible with ENDSTOP_NOISE_THRESHOLD." #elif !(X_SENSORLESS || Y_SENSORLESS || Z_SENSORLESS) From 9aaa056286e3a32299012d1536f979e430f4d370 Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Tue, 24 Sep 2019 15:29:25 -0700 Subject: [PATCH 028/120] Fix SCARA build from Arduino IDE (#15317) --- Marlin/src/module/motion.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index f461aae0043e..ba1ac07f703e 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -261,11 +261,6 @@ void homeaxis(const AxisEnum axis); */ #if IS_KINEMATIC // (DELTA or SCARA) - - #if IS_SCARA - extern const float L1, L2; - #endif - #if HAS_SCARA_OFFSET extern float scara_home_offset[ABC]; // A and B angular offsets, Z mm offset #endif From 6fc4d4c3b765dbb1095355da7b12b6a1e9a7ad75 Mon Sep 17 00:00:00 2001 From: Bo Herrmannsen Date: Wed, 25 Sep 2019 00:30:56 +0200 Subject: [PATCH 029/120] Disable ARC_SUPPORT on Tevo Tornado (#15358) --- config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h | 2 +- config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h index dfbf542cb088..ae06f4e34465 100755 --- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h @@ -1344,7 +1344,7 @@ // // G2/G3 Arc Support // -#define ARC_SUPPORT // Disable this feature to save ~3226 bytes +//#define ARC_SUPPORT // Disable this feature to save ~3226 bytes #if ENABLED(ARC_SUPPORT) #define MM_PER_ARC_SEGMENT 1 // Length of each arc segment #define MIN_ARC_SEGMENTS 24 // Minimum number of segments in a complete circle diff --git a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h index dfbf542cb088..ae06f4e34465 100755 --- a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h @@ -1344,7 +1344,7 @@ // // G2/G3 Arc Support // -#define ARC_SUPPORT // Disable this feature to save ~3226 bytes +//#define ARC_SUPPORT // Disable this feature to save ~3226 bytes #if ENABLED(ARC_SUPPORT) #define MM_PER_ARC_SEGMENT 1 // Length of each arc segment #define MIN_ARC_SEGMENTS 24 // Minimum number of segments in a complete circle From bafcd084cc4b39b125caeacc319576a3ec792c15 Mon Sep 17 00:00:00 2001 From: Marcio Teixeira Date: Tue, 24 Sep 2019 16:46:00 -0600 Subject: [PATCH 030/120] LULZBOT_TOUCH_UI performance/cosmetic fixes (#15319) --- .../ftdi_eve_lib/extended/screen_types.h | 6 + .../lib/lulzbot/language/language_en.h | 20 +- .../base_numeric_adjustment_screen.cpp | 276 ++++++++++-------- .../lib/lulzbot/screens/base_screen.cpp | 8 +- .../lib/lulzbot/screens/bio_main_menu.cpp | 2 +- .../lib/lulzbot/screens/bio_status_screen.cpp | 35 ++- .../lib/lulzbot/screens/bio_tune_menu.cpp | 2 +- .../lib/lulzbot/screens/move_axis_screen.cpp | 37 +-- .../lib/lulzbot/screens/screens.h | 14 +- 9 files changed, 230 insertions(+), 170 deletions(-) diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.h index 44204b33565e..e42ff41d6718 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.h @@ -199,6 +199,9 @@ class CachedScreen { public: static void onRefresh() { + #if ENABLED(TOUCH_UI_DEBUG) + const uint32_t start_time = millis(); + #endif using namespace FTDI; DLCache dlcache(DL_SLOT); CommandProcessor cmd; @@ -220,5 +223,8 @@ class CachedScreen { cmd.cmd(DL::DL_DISPLAY); cmd.cmd(CMD_SWAP); cmd.execute(); + #if ENABLED(TOUCH_UI_DEBUG) + SERIAL_ECHOLNPAIR("Time to draw screen (ms): ", millis() - start_time); + #endif } }; diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h index 5731e4984bde..4182277cbba2 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h @@ -197,7 +197,7 @@ #else #define LULZBOT_BIOPRINTER_STRINGS ,\ MAIN_MENU, \ - UNLOCK_XY_AXIS, \ + RELEASE_XY_AXIS, \ LOAD_SYRINGE, \ BED_TEMPERATURE, \ LOADING_WARNING, \ @@ -302,7 +302,11 @@ namespace Language_en { PROGMEM Language_Str PLEASE_RESET = u8"Please reset"; PROGMEM Language_Str COLOR_TOUCH_PANEL = u8"Color Touch Panel"; - PROGMEM Language_Str ABOUT_ALEPH_OBJECTS = u8"(C) 2019 Aleph Objects, Inc.\n\nwww.lulzbot.com"; + #if ENABLED(TOUCH_UI_UTF8_COPYRIGHT) + PROGMEM Language_Str ABOUT_ALEPH_OBJECTS = u8"© 2019 Aleph Objects, Inc.\n\nwww.lulzbot.com"; + #else + PROGMEM Language_Str ABOUT_ALEPH_OBJECTS = u8"(C) 2019 Aleph Objects, Inc.\n\nwww.lulzbot.com"; + #endif PROGMEM Language_Str FIRMWARE_FOR_TOOLHEAD = u8"Firmware for toolhead:\n%s\n\n"; @@ -327,10 +331,14 @@ namespace Language_en { PROGMEM Language_Str UNITS_MILLIAMP = u8"mA"; PROGMEM Language_Str UNITS_MM = u8"mm"; PROGMEM Language_Str UNITS_MM_S = u8"mm/s"; - PROGMEM Language_Str UNITS_MM_S2 = u8"mm/s^2"; + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + PROGMEM Language_Str UNITS_MM_S2 = u8"mm/s²"; + #else + PROGMEM Language_Str UNITS_MM_S2 = u8"mm/s^2"; + #endif PROGMEM Language_Str UNITS_STEP_MM = u8"st/mm"; PROGMEM Language_Str UNITS_PERCENT = u8"%"; - #if defined(TOUCH_UI_USE_UTF8) && defined(TOUCH_UI_UTF8_WESTERN_CHARSET) + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) PROGMEM Language_Str UNITS_C = u8"°C"; #else PROGMEM Language_Str UNITS_C = u8" C"; @@ -399,10 +407,10 @@ namespace Language_en { #ifdef LULZBOT_USE_BIOPRINTER_UI PROGMEM Language_Str MAIN_MENU = u8"Main Menu"; - PROGMEM Language_Str UNLOCK_XY_AXIS = u8"Unlock XY Axis"; + PROGMEM Language_Str RELEASE_XY_AXIS = u8"Release XY Axis"; PROGMEM Language_Str LOAD_SYRINGE = u8"Load Syringe"; PROGMEM Language_Str BED_TEMPERATURE = u8"Bed Temperature"; - PROGMEM Language_Str LOADING_WARNING = u8"About to home to loading position.\nEnsure the top and the bed of the printer are clear.\n\nContinue?"; + PROGMEM Language_Str LOADING_WARNING = u8"About to home to loading position. Ensure the top and the bed of the printer are clear.\n\nContinue?"; PROGMEM Language_Str HOMING_WARNING = u8"About to re-home plunger and auto-level. Remove syringe prior to proceeding.\n\nContinue?"; #endif diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp index 9c8cca68e639..480315620cf3 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp @@ -33,34 +33,84 @@ using namespace Theme; #ifdef TOUCH_UI_PORTRAIT #define GRID_COLS 13 #define GRID_ROWS 10 + #define LAYOUT_FONT font_small #else #define GRID_COLS 18 #define GRID_ROWS 7 + #define LAYOUT_FONT font_medium #endif BaseNumericAdjustmentScreen::widgets_t::widgets_t(draw_mode_t what) : _what(what) { + CommandProcessor cmd; + if (what & BACKGROUND) { - CommandProcessor cmd; cmd.cmd(CLEAR_COLOR_RGB(bg_color)) - .cmd(CLEAR(true,true,true)); + .cmd(CLEAR(true,true,true)) + .colors(normal_btn) + .cmd(COLOR_RGB(bg_text_enabled)); } - if (what & FOREGROUND) { - CommandProcessor cmd; - cmd.font(font_medium) - .colors(action_btn) + cmd.font(font_medium); + _button(cmd, 1, #ifdef TOUCH_UI_PORTRAIT - .tag(1).button( BTN_POS(1,10), BTN_SIZE(13,1), GET_TEXTF(BACK)) + BTN_POS(1,10), BTN_SIZE(13,1), #else - .tag(1).button( BTN_POS(15,7), BTN_SIZE(4,1), GET_TEXTF(BACK)) + BTN_POS(15,7), BTN_SIZE(4,1), #endif - .colors(normal_btn); - } + GET_TEXTF(BACK), true, true + ); _line = 1; _units = F(""); } +/** + * Speed optimization for changing button style. + */ +void BaseNumericAdjustmentScreen::widgets_t::_button_style(CommandProcessor &cmd, BaseNumericAdjustmentScreen::widgets_t::style_t style) { + if (_style != style) { + const btn_colors *old_colors = &normal_btn; + const btn_colors *new_colors = &normal_btn; + + switch(_style) { + case BTN_ACTION: old_colors = &action_btn; break; + case BTN_TOGGLE: old_colors = &ui_toggle; break; + case BTN_DISABLED: old_colors = &disabled_btn; break; + default: break; + } + switch(style) { + case BTN_ACTION: new_colors = &action_btn; break; + case BTN_TOGGLE: new_colors = &ui_toggle; break; + case BTN_DISABLED: new_colors = &disabled_btn; break; + default: break; + } + + const bool rgb_changed = old_colors->rgb != new_colors->rgb; + const bool grad_changed = old_colors->grad != new_colors->grad; + const bool fg_changed = (old_colors->fg != new_colors->fg) || (_style == TEXT_AREA); + const bool bg_changed = old_colors->bg != new_colors->bg; + + if (rgb_changed) cmd.cmd(COLOR_RGB(new_colors->rgb)); + if (grad_changed) cmd.gradcolor(new_colors->grad); + if (fg_changed) cmd.fgcolor(new_colors->fg); + if (bg_changed) cmd.bgcolor(new_colors->bg); + + _style = style; + } +} + +/** + * Speed optimization for drawing buttons. Draw all unpressed buttons in the + * background layer and draw only the pressed button in the foreground layer. + */ +void BaseNumericAdjustmentScreen::widgets_t::_button(CommandProcessor &cmd, uint8_t tag, int16_t x, int16_t y, int16_t w, int16_t h, progmem_str text, bool enabled, bool highlight) { + if (_what & BACKGROUND) enabled = true; + if ((_what & BACKGROUND) || buttonIsPressed(tag) || highlight || !enabled) { + _button_style(cmd, (!enabled) ? BTN_DISABLED : (highlight ? BTN_ACTION : BTN_NORMAL)); + cmd.tag(enabled ? tag : 0).button(x, y, w, h, text); + } +} + BaseNumericAdjustmentScreen::widgets_t &BaseNumericAdjustmentScreen::widgets_t::precision(uint8_t decimals, precision_default_t initial) { _decimals = decimals; if (screen_data.BaseNumericAdjustmentScreen.increment == 0) { @@ -70,14 +120,17 @@ BaseNumericAdjustmentScreen::widgets_t &BaseNumericAdjustmentScreen::widgets_t:: } void BaseNumericAdjustmentScreen::widgets_t::heading(progmem_str label) { - CommandProcessor cmd; - cmd.font(font_medium).cmd(COLOR_RGB(bg_text_enabled)); if (_what & BACKGROUND) { - #ifdef TOUCH_UI_PORTRAIT - cmd.tag(0).fgcolor(bg_color).button( BTN_POS(1, _line), BTN_SIZE(12,1), label, OPT_FLAT); - #else - cmd.tag(0).fgcolor(bg_color).button( BTN_POS(5, _line), BTN_SIZE(8,1), label, OPT_FLAT); - #endif + CommandProcessor cmd; + cmd.font(font_medium) + .text( + #ifdef TOUCH_UI_PORTRAIT + BTN_POS(1, _line), BTN_SIZE(12,1), + #else + BTN_POS(5, _line), BTN_SIZE(8,1), + #endif + label + ); } _line++; @@ -93,8 +146,7 @@ void BaseNumericAdjustmentScreen::widgets_t::heading(progmem_str label) { #endif #endif -void BaseNumericAdjustmentScreen::widgets_t::_draw_increment_btn(uint8_t, const uint8_t tag) { - CommandProcessor cmd; +void BaseNumericAdjustmentScreen::widgets_t::_draw_increment_btn(CommandProcessor &cmd, uint8_t, const uint8_t tag) { const char *label = PSTR("?"); uint8_t pos; uint8_t & increment = screen_data.BaseNumericAdjustmentScreen.increment; @@ -112,48 +164,43 @@ void BaseNumericAdjustmentScreen::widgets_t::_draw_increment_btn(uint8_t, const default: label = PSTR("100" ); pos = _decimals + 2; break; } - cmd.tag(tag) - .colors(increment == tag ? action_btn : normal_btn) - #ifdef TOUCH_UI_PORTRAIT - .font(font_small); - #else - .font(font_medium); - #endif + const bool highlight = (_what & FOREGROUND) && (increment == tag); + switch (pos) { #ifdef TOUCH_UI_PORTRAIT - case 0: cmd.button( BTN_POS(5,_line), BTN_SIZE(2,1), progmem_str(label)); break; - case 1: cmd.button( BTN_POS(7,_line), BTN_SIZE(2,1), progmem_str(label)); break; - case 2: cmd.button( BTN_POS(9,_line), BTN_SIZE(2,1), progmem_str(label)); break; + case 0: _button(cmd, tag, BTN_POS(5,_line), BTN_SIZE(2,1), progmem_str(label), true, highlight); break; + case 1: _button(cmd, tag, BTN_POS(7,_line), BTN_SIZE(2,1), progmem_str(label), true, highlight); break; + case 2: _button(cmd, tag, BTN_POS(9,_line), BTN_SIZE(2,1), progmem_str(label), true, highlight); break; #else - case 0: cmd.button( BTN_POS(15,2), BTN_SIZE(4,1), progmem_str(label)); break; - case 1: cmd.button( BTN_POS(15,3), BTN_SIZE(4,1), progmem_str(label)); break; - case 2: cmd.button( BTN_POS(15,4), BTN_SIZE(4,1), progmem_str(label)); break; + case 0: _button(cmd, tag, BTN_POS(15,2), BTN_SIZE(4,1), progmem_str(label), true, highlight); break; + case 1: _button(cmd, tag, BTN_POS(15,3), BTN_SIZE(4,1), progmem_str(label), true, highlight); break; + case 2: _button(cmd, tag, BTN_POS(15,4), BTN_SIZE(4,1), progmem_str(label), true, highlight); break; #endif } - cmd.colors(normal_btn); } - void BaseNumericAdjustmentScreen::widgets_t::increments() { + CommandProcessor cmd; + + cmd.font(LAYOUT_FONT); + if (_what & BACKGROUND) { - CommandProcessor cmd; - cmd.fgcolor(bg_color) - .tag(0) - #ifdef TOUCH_UI_PORTRAIT - .font(font_small).button( BTN_POS(1, _line), BTN_SIZE(4,1), GET_TEXTF(INCREMENT), OPT_FLAT); - #else - .font(font_medium).button( BTN_POS(15,1), BTN_SIZE(4,1), GET_TEXTF(INCREMENT), OPT_FLAT); - #endif + cmd.text( + #ifdef TOUCH_UI_PORTRAIT + BTN_POS(1, _line), BTN_SIZE(4,1), + #else + BTN_POS(15, 1), BTN_SIZE(4,1), + #endif + GET_TEXTF(INCREMENT) + ); } - if (_what & FOREGROUND) { - _draw_increment_btn(_line+1, 245 - _decimals); - _draw_increment_btn(_line+1, 244 - _decimals); - _draw_increment_btn(_line+1, 243 - _decimals); - } + _draw_increment_btn(cmd, _line+1, 245 - _decimals); + _draw_increment_btn(cmd, _line+1, 244 - _decimals); + _draw_increment_btn(cmd, _line+1, 243 - _decimals); #ifdef TOUCH_UI_PORTRAIT - _line++; + _line++; #endif } @@ -161,19 +208,22 @@ void BaseNumericAdjustmentScreen::widgets_t::adjuster_sram_val(uint8_t tag, prog CommandProcessor cmd; if (_what & BACKGROUND) { - cmd.enabled(1) + _button_style(cmd, TEXT_AREA); + cmd.tag(0) .font(font_small) - .fgcolor(_color) .tag(0).button( BTN_POS(5,_line), BTN_SIZE(5,1), F(""), OPT_FLAT) - .cmd(COLOR_RGB(bg_text_enabled)) - .fgcolor(bg_color) .tag(0).button( BTN_POS(1,_line), BTN_SIZE(4,1), (progmem_str) label, OPT_FLAT); + .text( BTN_POS(1,_line), BTN_SIZE(4,1), label) + .fgcolor(_color).button( BTN_POS(5,_line), BTN_SIZE(5,1), F(""), OPT_FLAT); } - if (_what & FOREGROUND) { - cmd.colors(normal_btn) - .font(font_medium) - .tag(is_enabled ? tag : 0).enabled(is_enabled).button( BTN_POS(10,_line), BTN_SIZE(2,1), F("-")) - .tag(is_enabled ? tag+1 : 0).enabled(is_enabled).button( BTN_POS(12,_line), BTN_SIZE(2,1), F("+")) - .tag(0).font(font_small) .text ( BTN_POS(5,_line), BTN_SIZE(5,1), is_enabled ? value : "-"); + cmd.font(font_medium); + _button(cmd, tag, BTN_POS(10,_line), BTN_SIZE(2,1), F("-"), is_enabled); + _button(cmd, tag + 1, BTN_POS(12,_line), BTN_SIZE(2,1), F("+"), is_enabled); + + if ((_what & FOREGROUND) && is_enabled) { + _button_style(cmd, BTN_NORMAL); + cmd.tag(0) + .font(font_small) + .text(BTN_POS(5,_line), BTN_SIZE(5,1), value); } _line++; @@ -206,18 +256,9 @@ void BaseNumericAdjustmentScreen::widgets_t::adjuster(uint8_t tag, progmem_str l } void BaseNumericAdjustmentScreen::widgets_t::button(uint8_t tag, progmem_str label, bool is_enabled) { - if (_what & FOREGROUND) { - CommandProcessor cmd; - cmd.colors(normal_btn) - .tag(is_enabled ? tag : 0) - .enabled(is_enabled) - #ifdef TOUCH_UI_PORTRAIT - .font(font_small) - #else - .font(font_medium) - #endif - .button(BTN_POS(5,_line), BTN_SIZE(9,1), label); - } + CommandProcessor cmd; + cmd.font(LAYOUT_FONT); + _button(cmd, tag, BTN_POS(5,_line), BTN_SIZE(9,1), label, is_enabled); _line++; } @@ -226,89 +267,78 @@ void BaseNumericAdjustmentScreen::widgets_t::text_field(uint8_t tag, progmem_str CommandProcessor cmd; if (_what & BACKGROUND) { + _button_style(cmd, TEXT_AREA); cmd.enabled(1) + .tag(0) .font(font_small) - .cmd(COLOR_RGB(bg_text_enabled)) - .fgcolor(_color).tag(0).button( BTN_POS(5,_line), BTN_SIZE(9,1), F(""), OPT_FLAT) - .fgcolor(bg_color) .tag(0).button( BTN_POS(1,_line), BTN_SIZE(4,1), label, OPT_FLAT); + .text( BTN_POS(1,_line), BTN_SIZE(4,1), label) + .fgcolor(_color) + .tag(tag) + .button( BTN_POS(5,_line), BTN_SIZE(9,1), F(""), OPT_FLAT); } if (_what & FOREGROUND) { - cmd.colors(normal_btn) - .font(font_medium) - .tag(tag).font(font_small).text ( BTN_POS(5,_line), BTN_SIZE(9,1), is_enabled ? value : "-"); + cmd.font(font_small).text( BTN_POS(5,_line), BTN_SIZE(9,1), is_enabled ? value : "-"); } _line++; } void BaseNumericAdjustmentScreen::widgets_t::two_buttons(uint8_t tag1, progmem_str label1, uint8_t tag2, progmem_str label2, bool is_enabled) { - if (_what & FOREGROUND) { - CommandProcessor cmd; - cmd.enabled(is_enabled) - #ifdef TOUCH_UI_PORTRAIT - .font(font_small) - #else - .font(font_medium) - #endif - .tag(is_enabled ? tag1: 0).button(BTN_POS(5,_line), BTN_SIZE(4.5,1), label1) - .tag(is_enabled ? tag2: 0).button(BTN_POS(9.5,_line), BTN_SIZE(4.5,1), label2); - } + CommandProcessor cmd; + cmd.font(LAYOUT_FONT); + _button(cmd, tag1, BTN_POS(5,_line), BTN_SIZE(4.5,1), label1, is_enabled); + _button(cmd, tag2, BTN_POS(9.5,_line), BTN_SIZE(4.5,1), label2, is_enabled); _line++; } void BaseNumericAdjustmentScreen::widgets_t::toggle(uint8_t tag, progmem_str label, bool value, bool is_enabled) { + CommandProcessor cmd; + if (_what & BACKGROUND) { - CommandProcessor cmd; - cmd.fgcolor(bg_color) - .tag(0) - .font(font_small) - #ifdef TOUCH_UI_PORTRAIT - .button( BTN_POS(1, _line), BTN_SIZE( 8,1), label, OPT_FLAT); - #else - .button( BTN_POS(1, _line), BTN_SIZE(10,1), label, OPT_FLAT); - #endif + cmd.font(font_small) + .text( + #ifdef TOUCH_UI_PORTRAIT + BTN_POS(1, _line), BTN_SIZE( 8,1), + #else + BTN_POS(1, _line), BTN_SIZE(10,1), + #endif + label + ); } if (_what & FOREGROUND) { - CommandProcessor cmd; + _button_style(cmd, BTN_TOGGLE); cmd.tag(is_enabled ? tag : 0) .enabled(is_enabled) .font(font_small) - .colors(ui_toggle) - #ifdef TOUCH_UI_PORTRAIT - .toggle2(BTN_POS( 9,_line), BTN_SIZE(5,1), GET_TEXTF(NO), GET_TEXTF(YES), value); - #else - .toggle2(BTN_POS(10,_line), BTN_SIZE(4,1), GET_TEXTF(NO), GET_TEXTF(YES), value); - #endif + .toggle2( + #ifdef TOUCH_UI_PORTRAIT + BTN_POS( 9,_line), BTN_SIZE(5,1), + #else + BTN_POS(10,_line), BTN_SIZE(4,1), + #endif + GET_TEXTF(NO), GET_TEXTF(YES), value + ); } _line++; } void BaseNumericAdjustmentScreen::widgets_t::home_buttons(uint8_t tag) { + CommandProcessor cmd; + if (_what & BACKGROUND) { - CommandProcessor cmd; - cmd.fgcolor(bg_color) - .tag(0) - .font(font_small) - .button( BTN_POS(1, _line), BTN_SIZE(4,1), GET_TEXTF(HOME), OPT_FLAT); + cmd.font(font_small) + .text(BTN_POS(1, _line), BTN_SIZE(4,1), GET_TEXTF(HOME)); } - if (_what & FOREGROUND) { - CommandProcessor cmd; - cmd - #ifdef TOUCH_UI_PORTRAIT - .font(font_small) - #else - .font(font_medium) - #endif - .tag(tag+0).button(BTN_POS(5,_line), BTN_SIZE(2,1), GET_TEXTF(AXIS_X)) - .tag(tag+1).button(BTN_POS(7,_line), BTN_SIZE(2,1), GET_TEXTF(AXIS_Y)) - .tag(tag+2).button(BTN_POS(9,_line), BTN_SIZE(2,1), GET_TEXTF(AXIS_Z)) - .tag(tag+3).button(BTN_POS(11,_line), BTN_SIZE(3,1), GET_TEXTF(AXIS_ALL)); - } + cmd.font(LAYOUT_FONT); + _button(cmd, tag+0, BTN_POS(5,_line), BTN_SIZE(2,1), GET_TEXTF(AXIS_X)); + _button(cmd, tag+1, BTN_POS(7,_line), BTN_SIZE(2,1), GET_TEXTF(AXIS_Y)); + _button(cmd, tag+2, BTN_POS(9,_line), BTN_SIZE(2,1), GET_TEXTF(AXIS_Z)); + _button(cmd, tag+3, BTN_POS(11,_line), BTN_SIZE(3,1), GET_TEXTF(AXIS_ALL)); _line++; } @@ -316,11 +346,13 @@ void BaseNumericAdjustmentScreen::widgets_t::home_buttons(uint8_t tag) { void BaseNumericAdjustmentScreen::onEntry() { screen_data.BaseNumericAdjustmentScreen.increment = 0; // This will force the increment to be picked while drawing. BaseScreen::onEntry(); + CommandProcessor cmd; + cmd.set_button_style_callback(nullptr); } bool BaseNumericAdjustmentScreen::onTouchEnd(uint8_t tag) { switch (tag) { - case 1: GOTO_PREVIOUS(); return true; + case 1: GOTO_PREVIOUS(); return true; case 240 ... 245: screen_data.BaseNumericAdjustmentScreen.increment = tag; break; default: return current_screen.onTouchHeld(tag); } diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_screen.cpp index 662a55439a37..c0c7212a2278 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_screen.cpp @@ -36,6 +36,10 @@ void BaseScreen::onEntry() { UIScreen::onEntry(); } +bool BaseScreen::buttonIsPressed(uint8_t tag) { + return tag != 0 && EventLoop::get_pressed_tag() == tag; +} + bool BaseScreen::buttonStyleCallback(CommandProcessor &cmd, uint8_t tag, uint8_t &style, uint16_t &options, bool post) { if (post) { cmd.colors(normal_btn); @@ -48,7 +52,7 @@ bool BaseScreen::buttonStyleCallback(CommandProcessor &cmd, uint8_t tag, uint8_t } #endif - if (tag != 0 && EventLoop::get_pressed_tag() == tag) { + if (buttonIsPressed(tag)) { options = OPT_FLAT; } @@ -65,7 +69,7 @@ void BaseScreen::onIdle() { #ifdef LCD_TIMEOUT_TO_STATUS if ((millis() - last_interaction) > LCD_TIMEOUT_TO_STATUS) { reset_menu_timeout(); - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_MSG("Returning to status due to menu timeout"); #endif GOTO_SCREEN(StatusScreen); diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp index a42cb547aaae..403376a18022 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp @@ -46,7 +46,7 @@ void MainMenu::onRedraw(draw_mode_t what) { .colors(normal_btn) .font(font_medium) .tag(2).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(LOAD_SYRINGE)) - .tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(UNLOCK_XY_AXIS)) + .tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(RELEASE_XY_AXIS)) .tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(BED_TEMPERATURE)) .tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(INTERFACE_SETTINGS)) .tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(ADVANCED_SETTINGS)) diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp index 3f8b3d611ae4..bd32d3a8fff7 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp @@ -37,9 +37,10 @@ #define POLY(A) PolyUI::poly_reader_t(A, sizeof(A)/sizeof(A[0])) const uint8_t shadow_depth = 5; -const float max_speed = 0.30; -const float min_speed = 0.05; -const uint8_t num_speeds = 10; +const float max_speed = 1.00; +const float min_speed = 0.02; +const float emax_speed = 2.00; +const float emin_speed = 0.70; using namespace FTDI; using namespace Theme; @@ -251,7 +252,7 @@ void StatusScreen::onRedraw(draw_mode_t what) { } bool StatusScreen::onTouchStart(uint8_t) { - increment = min_speed; + increment = 0; return true; } @@ -288,7 +289,7 @@ bool StatusScreen::onTouchEnd(uint8_t tag) { bool StatusScreen::onTouchHeld(uint8_t tag) { if (tag >= 1 && tag <= 4 && !jog_xy) return false; - const float s = fine_motion ? min_speed : increment; + const float s = min_speed + (fine_motion ? 0 : (max_speed - min_speed) * sq(increment)); switch (tag) { case 1: jog(-s, 0, 0); break; case 2: jog( s, 0, 0); break; @@ -297,22 +298,20 @@ bool StatusScreen::onTouchHeld(uint8_t tag) { case 5: jog( 0, 0, -s); break; case 6: jog( 0, 0, s); break; case 7: - if (ExtUI::isMoving()) return false; - MoveAxisScreen::setManualFeedrate(E0, 1); - UI_INCREMENT(AxisPosition_mm, E0); - current_screen.onRefresh(); - break; case 8: + { if (ExtUI::isMoving()) return false; - MoveAxisScreen::setManualFeedrate(E0, 1); - UI_DECREMENT(AxisPosition_mm, E0); + const float feedrate = emin_speed + (fine_motion ? 0 : (emax_speed - emin_speed) * sq(increment)); + const float increment = 0.25 * feedrate * (tag == 7 ? -1 : 1); + MoveAxisScreen::setManualFeedrate(E0, feedrate); + UI_INCREMENT(AxisPosition_mm, E0); current_screen.onRefresh(); break; + } default: return false; } - if (increment < max_speed) - increment += (max_speed - min_speed) / num_speeds; + increment = min(1.0f, increment + 0.1f); return false; } @@ -325,11 +324,11 @@ void StatusScreen::setStatusMessage(const char * const str) { } void StatusScreen::onIdle() { - if (isPrintingFromMedia()) - BioPrintingDialogBox::show(); - if (refresh_timer.elapsed(STATUS_UPDATE_INTERVAL)) { - onRefresh(); + if (!EventLoop::is_touch_held()) + onRefresh(); + if (isPrintingFromMedia()) + BioPrintingDialogBox::show(); refresh_timer.start(); } } diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp index ab6f2dda892b..2b22876970a3 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp @@ -56,7 +56,7 @@ void TuneMenu::onRedraw(draw_mode_t what) { #endif .tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(NUDGE_NOZZLE)) .enabled(!isPrinting()).tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(LOAD_SYRINGE)) - .enabled(!isPrinting()).tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(UNLOCK_XY_AXIS)) + .enabled(!isPrinting()).tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(RELEASE_XY_AXIS)) .colors(action_btn) .tag(1).button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(BACK)); } #undef GRID_COLS diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp index a2edde8b3bd5..73f21bc8f569 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp @@ -46,30 +46,31 @@ void MoveAxisScreen::onRedraw(draw_mode_t what) { widgets_t w(what); w.precision(1); w.units(GET_TEXTF(UNITS_MM)); - w.heading( GET_TEXTF(MOVE_AXIS)); + w.heading( GET_TEXTF(MOVE_AXIS)); w.home_buttons(20); - w.color(Theme::x_axis ) .adjuster( 2, GET_TEXTF(AXIS_X), getAxisPosition_mm(X), canMove(X)); - w.color(Theme::y_axis ) .adjuster( 4, GET_TEXTF(AXIS_Y), getAxisPosition_mm(Y), canMove(Y)); - w.color(Theme::z_axis ) .adjuster( 6, GET_TEXTF(AXIS_Z), getAxisPosition_mm(Z), canMove(Z)); + w.color(Theme::x_axis).adjuster( 2, GET_TEXTF(AXIS_X), getAxisPosition_mm(X), canMove(X)); + w.color(Theme::y_axis).adjuster( 4, GET_TEXTF(AXIS_Y), getAxisPosition_mm(Y), canMove(Y)); + w.color(Theme::z_axis).adjuster( 6, GET_TEXTF(AXIS_Z), getAxisPosition_mm(Z), canMove(Z)); + w.color(Theme::e_axis); #if EXTRUDERS == 1 - w.color(Theme::e_axis) .adjuster( 8, GET_TEXTF(AXIS_E), screen_data.MoveAxisScreen.e_rel[0], canMove(E0)); + w.adjuster( 8, GET_TEXTF(AXIS_E), screen_data.MoveAxisScreen.e_rel[0], canMove(E0)); #elif EXTRUDERS > 1 - w.color(Theme::e_axis) .adjuster( 8, GET_TEXTF(AXIS_E1), screen_data.MoveAxisScreen.e_rel[0], canMove(E0)); - w.color(Theme::e_axis) .adjuster( 10, GET_TEXTF(AXIS_E2), screen_data.MoveAxisScreen.e_rel[1], canMove(E1)); + w.adjuster( 8, GET_TEXTF(AXIS_E1), screen_data.MoveAxisScreen.e_rel[0], canMove(E0)); + w.adjuster( 10, GET_TEXTF(AXIS_E2), screen_data.MoveAxisScreen.e_rel[1], canMove(E1)); #if EXTRUDERS > 2 - w.color(Theme::e_axis) .adjuster( 12, GET_TEXTF(AXIS_E3), screen_data.MoveAxisScreen.e_rel[2], canMove(E2)); + w.adjuster( 12, GET_TEXTF(AXIS_E3), screen_data.MoveAxisScreen.e_rel[2], canMove(E2)); #endif #if EXTRUDERS > 3 - w.color(Theme::e_axis) .adjuster( 14, GET_TEXTF(AXIS_E4), screen_data.MoveAxisScreen.e_rel[3], canMove(E3)); + w.adjuster( 14, GET_TEXTF(AXIS_E4), screen_data.MoveAxisScreen.e_rel[3], canMove(E3)); #endif #endif w.increments(); } bool MoveAxisScreen::onTouchHeld(uint8_t tag) { - #define UI_INCREMENT_AXIS(axis) setManualFeedrate(axis, increment); UI_INCREMENT(AxisPosition_mm, axis); - #define UI_DECREMENT_AXIS(axis) setManualFeedrate(axis, increment); UI_DECREMENT(AxisPosition_mm, axis); + #define UI_INCREMENT_AXIS(axis) UI_INCREMENT(AxisPosition_mm, axis); + #define UI_DECREMENT_AXIS(axis) UI_DECREMENT(AxisPosition_mm, axis); const float increment = getIncrement(); switch (tag) { case 2: UI_DECREMENT_AXIS(X); break; @@ -93,10 +94,10 @@ bool MoveAxisScreen::onTouchHeld(uint8_t tag) { case 14: UI_DECREMENT_AXIS(E3); screen_data.MoveAxisScreen.e_rel[3] -= increment; break; case 15: UI_INCREMENT_AXIS(E3); screen_data.MoveAxisScreen.e_rel[3] += increment; break; #endif - case 20: injectCommands_P(PSTR("G28 X")); break; - case 21: injectCommands_P(PSTR("G28 Y")); break; - case 22: injectCommands_P(PSTR("G28 Z")); break; - case 23: injectCommands_P(PSTR("G28")); break; + case 20: SpinnerDialogBox::enqueueAndWait_P(F("G28 X")); break; + case 21: SpinnerDialogBox::enqueueAndWait_P(F("G28 Y")); break; + case 22: SpinnerDialogBox::enqueueAndWait_P(F("G28 Z")); break; + case 23: SpinnerDialogBox::enqueueAndWait_P(F("G28")); break; default: return false; } @@ -109,9 +110,9 @@ float MoveAxisScreen::getManualFeedrate(uint8_t axis, float increment_mm) { // Compute feedrate so that the tool lags the adjuster when it is // being held down, this allows enough margin for the planner to // connect segments and even out the motion. - constexpr float max_manual_feedrate[XYZE] = MAX_MANUAL_FEEDRATE; - return min(max_manual_feedrate[axis]/60, abs(increment_mm * TOUCH_REPEATS_PER_SECOND * 0.80)); - return min(max_manual_feedrate[axis] / 60, abs(increment_mm * TOUCH_REPEATS_PER_SECOND * 0.80)); + constexpr float manual_feedrate[XYZE] = MANUAL_FEEDRATE; + return min(manual_feedrate[axis] / 60, abs(increment_mm * TOUCH_REPEATS_PER_SECOND * 0.80)); + return min(manual_feedrate[axis] / 60, abs(increment_mm * TOUCH_REPEATS_PER_SECOND * 0.80)); } void MoveAxisScreen::setManualFeedrate(ExtUI::axis_t axis, float increment_mm) { diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h index 7ab8f0790e25..c9850c0d8132 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h @@ -97,6 +97,8 @@ class BaseScreen : public UIScreen { static uint32_t last_interaction; #endif + static bool buttonIsPressed(uint8_t tag); + public: static bool buttonStyleCallback(CommandProcessor &, uint8_t, uint8_t &, uint16_t &, bool); @@ -353,10 +355,18 @@ class BaseNumericAdjustmentScreen : public BaseScreen { uint32_t _color; uint8_t _decimals; progmem_str _units; + enum style_t { + BTN_NORMAL, + BTN_ACTION, + BTN_TOGGLE, + BTN_DISABLED, + TEXT_AREA + } _style; protected: - void _draw_increment_btn(uint8_t line, const uint8_t tag); - + void _draw_increment_btn(CommandProcessor &, uint8_t line, const uint8_t tag); + void _button(CommandProcessor &, uint8_t tag, int16_t x, int16_t y, int16_t w, int16_t h, progmem_str, bool enabled = true, bool highlight = false); + void _button_style(CommandProcessor &cmd, style_t style); public: widgets_t(draw_mode_t); From bd2b44c4ed4221d30f3bceac90236632fe6a6411 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 24 Sep 2019 17:50:16 -0500 Subject: [PATCH 031/120] Require newest TMCStepper --- Marlin/src/module/stepper/trinamic.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/module/stepper/trinamic.h b/Marlin/src/module/stepper/trinamic.h index 711d46b65835..7fd50449d8cc 100644 --- a/Marlin/src/module/stepper/trinamic.h +++ b/Marlin/src/module/stepper/trinamic.h @@ -27,8 +27,8 @@ */ #include -#if TMCSTEPPER_VERSION < 0x000405 - #error "Update TMCStepper library to 0.4.5 or newer." +#if TMCSTEPPER_VERSION < 0x000500 + #error "Update TMCStepper library to 0.5.0 or newer." #endif #include "../../inc/MarlinConfig.h" From 4ff59d178dd04cc61c8ffdcd14259215cc004699 Mon Sep 17 00:00:00 2001 From: Marcio Teixeira Date: Tue, 24 Sep 2019 17:49:40 -0600 Subject: [PATCH 032/120] LULZBOT_TOUCH_UI extended character set (#15301) --- Marlin/Configuration_adv.h | 24 +- .../lcd/extensible_ui/lib/lulzbot/config.h | 26 +- .../lulzbot/ftdi_eve_lib/basic/commands.cpp | 18 +- .../lib/lulzbot/ftdi_eve_lib/compat.h | 3 +- .../ftdi_eve_lib/extended/command_processor.h | 60 +- .../ftdi_eve_lib/extended/dl_cache.cpp | 6 +- .../ftdi_eve_lib/extended/event_loop.cpp | 4 +- .../ftdi_eve_lib/extended/screen_types.cpp | 4 +- .../ftdi_eve_lib/extended/sound_player.cpp | 2 +- .../ftdi_eve_lib/extended/text_box.cpp | 11 +- .../extended/unicode/font_bitmaps.cpp | 2 +- .../western_char_set_bitmap_31.png | Bin 14018 -> 24548 bytes .../western_char_set_bitmap_31.svg | 182 +- .../extended/unicode/font_size_t.cpp | 2 +- .../extended/unicode/standard_char_set.cpp | 10 +- .../ftdi_eve_lib/extended/unicode/unicode.cpp | 31 +- .../ftdi_eve_lib/extended/unicode/unicode.h | 5 + .../extended/unicode/western_char_set.cpp | 117 +- .../unicode/western_char_set_bitmap_31.h | 1891 +++++++++++------ .../lulzbot/ftdi_eve_lib/extras/bitmap2cpp.py | 45 +- .../screens/bio_printing_dialog_box.cpp | 2 +- .../lib/lulzbot/screens/status_screen.cpp | 2 +- .../screens/touch_calibration_screen.cpp | 2 +- config/default/Configuration_adv.h | 24 +- .../3DFabXYZ/Migbot/Configuration_adv.h | 24 +- .../ADIMLab/Gantry v1/Configuration_adv.h | 24 +- .../ADIMLab/Gantry v2/Configuration_adv.h | 24 +- .../AlephObjects/TAZ4/Configuration_adv.h | 24 +- .../Alfawise/U20-bltouch/Configuration_adv.h | 24 +- .../examples/Alfawise/U20/Configuration_adv.h | 24 +- .../AliExpress/UM2pExt/Configuration_adv.h | 24 +- config/examples/Anet/A2/Configuration_adv.h | 24 +- .../examples/Anet/A2plus/Configuration_adv.h | 24 +- config/examples/Anet/A6/Configuration_adv.h | 24 +- config/examples/Anet/A8/Configuration_adv.h | 24 +- .../examples/Anet/A8plus/Configuration_adv.h | 24 +- config/examples/Anet/E16/Configuration_adv.h | 24 +- .../examples/AnyCubic/i3/Configuration_adv.h | 24 +- config/examples/ArmEd/Configuration_adv.h | 24 +- .../BIBO/TouchX/cyclops/Configuration_adv.h | 24 +- .../BIBO/TouchX/default/Configuration_adv.h | 24 +- .../examples/BQ/Hephestos/Configuration_adv.h | 24 +- .../BQ/Hephestos_2/Configuration_adv.h | 24 +- config/examples/BQ/WITBOX/Configuration_adv.h | 24 +- config/examples/Cartesio/Configuration_adv.h | 24 +- .../Creality/CR-10/Configuration_adv.h | 24 +- .../Creality/CR-10S/Configuration_adv.h | 24 +- .../Creality/CR-10_5S/Configuration_adv.h | 24 +- .../Creality/CR-10mini/Configuration_adv.h | 24 +- .../Creality/CR-20 Pro/Configuration_adv.h | 24 +- .../Creality/CR-20/Configuration_adv.h | 24 +- .../Creality/CR-8/Configuration_adv.h | 24 +- .../Creality/Ender-2/Configuration_adv.h | 24 +- .../Creality/Ender-3/Configuration_adv.h | 24 +- .../Creality/Ender-4/Configuration_adv.h | 24 +- .../Creality/Ender-5/Configuration_adv.h | 24 +- .../Dagoma/Disco Ultimate/Configuration_adv.h | 24 +- .../Sidewinder X1/Configuration_adv.h | 24 +- .../examples/Einstart-S/Configuration_adv.h | 24 +- .../FYSETC/AIO_II/Configuration_adv.h | 24 +- .../Cheetah 1.2/BLTouch/Configuration_adv.h | 24 +- .../Cheetah 1.2/base/Configuration_adv.h | 24 +- .../Cheetah/BLTouch/Configuration_adv.h | 24 +- .../FYSETC/Cheetah/base/Configuration_adv.h | 24 +- .../examples/FYSETC/F6_13/Configuration_adv.h | 24 +- config/examples/Felix/Configuration_adv.h | 24 +- .../FlashForge/CreatorPro/Configuration_adv.h | 24 +- .../FolgerTech/i3-2020/Configuration_adv.h | 24 +- .../Formbot/Raptor/Configuration_adv.h | 24 +- .../Formbot/T_Rex_2+/Configuration_adv.h | 24 +- .../Formbot/T_Rex_3/Configuration_adv.h | 24 +- .../examples/Geeetech/A10/Configuration_adv.h | 24 +- .../Geeetech/A10M/Configuration_adv.h | 24 +- .../Geeetech/A20M/Configuration_adv.h | 24 +- .../Geeetech/MeCreator2/Configuration_adv.h | 24 +- .../Prusa i3 Pro C/Configuration_adv.h | 24 +- .../Prusa i3 Pro W/Configuration_adv.h | 24 +- config/examples/HMS434/Configuration_adv.h | 79 + .../Infitary/i3-M508/Configuration_adv.h | 24 +- .../examples/JGAurora/A1/Configuration_adv.h | 24 +- .../examples/JGAurora/A5/Configuration_adv.h | 24 +- .../examples/JGAurora/A5S/Configuration_adv.h | 24 +- .../examples/MakerParts/Configuration_adv.h | 24 +- .../examples/Malyan/M150/Configuration_adv.h | 24 +- .../examples/Malyan/M200/Configuration_adv.h | 24 +- .../Micromake/C1/enhanced/Configuration_adv.h | 24 +- config/examples/Mks/Robin/Configuration_adv.h | 24 +- config/examples/Mks/Sbase/Configuration_adv.h | 24 +- .../RapideLite/RL200/Configuration_adv.h | 24 +- config/examples/RigidBot/Configuration_adv.h | 24 +- config/examples/SCARA/Configuration_adv.h | 24 +- .../Black_STM32F407VET6/Configuration_adv.h | 24 +- .../examples/Sanguinololu/Configuration_adv.h | 24 +- .../Tevo/Michelangelo/Configuration_adv.h | 24 +- .../Tevo/Tarantula Pro/Configuration_adv.h | 24 +- .../Tornado/V1 (MKS Base)/Configuration_adv.h | 24 +- .../V2 (MKS GEN-L)/Configuration_adv.h | 24 +- config/examples/TheBorg/Configuration_adv.h | 24 +- config/examples/TinyBoy2/Configuration_adv.h | 24 +- .../examples/Tronxy/X3A/Configuration_adv.h | 24 +- .../Tronxy/X5S-2E/Configuration_adv.h | 24 +- .../UltiMachine/Archim1/Configuration_adv.h | 24 +- .../UltiMachine/Archim2/Configuration_adv.h | 24 +- .../examples/VORONDesign/Configuration_adv.h | 24 +- .../Velleman/K8200/Configuration_adv.h | 24 +- .../Velleman/K8400/Configuration_adv.h | 24 +- .../WASP/PowerWASP/Configuration_adv.h | 24 +- .../Wanhao/Duplicator 6/Configuration_adv.h | 24 +- .../Duplicator i3 Mini/Configuration_adv.h | 24 +- .../delta/Anycubic/Kossel/Configuration_adv.h | 24 +- .../Dreammaker/Overlord/Configuration_adv.h | 24 +- .../Overlord_Pro/Configuration_adv.h | 24 +- .../FLSUN/auto_calibrate/Configuration_adv.h | 24 +- .../delta/FLSUN/kossel/Configuration_adv.h | 24 +- .../FLSUN/kossel_mini/Configuration_adv.h | 24 +- .../Geeetech/Rostock 301/Configuration_adv.h | 24 +- .../delta/MKS/SBASE/Configuration_adv.h | 24 +- .../Tevo Little Monster/Configuration_adv.h | 24 +- .../delta/generic/Configuration_adv.h | 24 +- .../delta/kossel_mini/Configuration_adv.h | 24 +- .../delta/kossel_xl/Configuration_adv.h | 24 +- .../gCreate/gMax1.5+/Configuration_adv.h | 24 +- config/examples/makibox/Configuration_adv.h | 24 +- .../tvrrug/Round2/Configuration_adv.h | 24 +- config/examples/wt150/Configuration_adv.h | 24 +- 125 files changed, 4010 insertions(+), 942 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 665e77753da6..b6ba665fcf55 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/config.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/config.h index 5e6d7255d9d2..458c9012065c 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/config.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/config.h @@ -76,10 +76,27 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED -// Enable UTF8 rendering capabilities. +// Enable UTF8 processing and rendering. Unsupported characters +// will be shown as '?'. //#define TOUCH_UI_USE_UTF8 -#ifdef TOUCH_UI_USE_UTF8 +#ifdef TOUCH_UI_USE_UTF8 + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #ifdef TOUCH_UI_UTF8_WESTERN_CHARSET + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif // When labels do not fit buttons, use smaller font @@ -97,14 +114,11 @@ //#define LCD_TIMEOUT_TO_STATUS 15000 // Enable this to debug the event framework -//#define UI_FRAMEWORK_DEBUG +//#define TOUCH_UI_DEBUG // Enable the developer's menu and screens //#define DEVELOPER_SCREENS -// Maximum feed rate for manual extrusion (mm/s) -#define MAX_MANUAL_FEEDRATE {50*60, 50*60, 4*60, 60} - // Sets the SPI speed in Hz #define SPI_FREQUENCY 8000000 >> SPI_SPEED diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.cpp index dd99bfc58ea0..87486a07d49f 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.cpp @@ -921,7 +921,7 @@ template bool CLCD::CommandFifo::_write_unaligned(T data, uint16_t len uint32_t bytes_tail, bytes_head; uint32_t command_read_ptr; - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) if (command_write_ptr == 0xFFFFFFFFul) { SERIAL_ECHO_START(); SERIAL_ECHOLNPGM("Attempt to write to FIFO before CommandFifo::Cmd_Start()."); @@ -940,7 +940,7 @@ template bool CLCD::CommandFifo::_write_unaligned(T data, uint16_t len } // Check for faults which can lock up the command processor if (has_fault()) { - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHOLNPGM("Fault waiting for space in the command processor"); #endif return false; @@ -985,7 +985,7 @@ void CLCD::CommandFifo::execute() { } void CLCD::CommandFifo::reset() { - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHOLNPGM("Resetting command processor"); #endif safe_delay(100); @@ -1004,7 +1004,7 @@ template bool CLCD::CommandFifo::write(T data, uint16_t len) { const uint8_t padding = MULTIPLE_OF_4(len) - len; if (has_fault()) { - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHOLNPGM("Faulted... ignoring write."); #endif return false; @@ -1014,7 +1014,7 @@ template bool CLCD::CommandFifo::write(T data, uint16_t len) { // management. uint16_t Command_Space = mem_read_32(REG::CMDB_SPACE) & 0x0FFF; if (Command_Space < (len + padding)) { - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); SERIAL_ECHOPAIR("Waiting for ", len + padding); SERIAL_ECHOPAIR(" bytes in command queue, now free: ", Command_Space); @@ -1022,13 +1022,13 @@ template bool CLCD::CommandFifo::write(T data, uint16_t len) { do { Command_Space = mem_read_32(REG::CMDB_SPACE) & 0x0FFF; if (has_fault()) { - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHOLNPGM("... fault"); #endif return false; } } while (Command_Space < len + padding); - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHOLNPGM("... done"); #endif } @@ -1070,7 +1070,7 @@ void CLCD::init() { for(counter = 0; counter < 250; counter++) { uint8_t device_id = mem_read_8(REG::ID); // Read Device ID, Should Be 0x7C; if (device_id == 0x7c) { - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); SERIAL_ECHOLNPGM("FTDI chip initialized "); #endif @@ -1080,7 +1080,7 @@ void CLCD::init() { delay(1); } if (counter == 249) { - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR("Timeout waiting for device ID, should be 124, got ", device_id); #endif diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/compat.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/compat.h index 808c33276929..18d0a5a1a83e 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/compat.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/compat.h @@ -208,7 +208,8 @@ #define SWITCH_ENABLED_ 1 #define ENABLED(b) _CAT(SWITCH_ENABLED_, b) #define DISABLED(b) !ENABLED(b) - #define ANY(A,B) ENABLED(A) || ENABLED(B) + #define ANY(A,B) (ENABLED(A) || ENABLED(B)) + #define BOTH(A,B) (ENABLED(A) && ENABLED(B)) // Remove compiler warning on an unused variable #ifndef UNUSED diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/command_processor.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/command_processor.h index 3d31328ae19e..a770ebbd2446 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/command_processor.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/command_processor.h @@ -310,15 +310,20 @@ class CommandProcessor : public CLCD::CommandFifo { int8_t apply_fit_text(int16_t w, int16_t h, T text) { using namespace FTDI; int8_t font = _font; + const bool is_utf8 = has_utf8_chars(text); for (;font >= 26;) { + int16_t width, height; #ifdef TOUCH_UI_USE_UTF8 - const int16_t width = get_utf8_text_width(text, font_size_t::from_romfont(font)); - const int16_t height = font_size_t::from_romfont(font).get_height(); - #else - CLCD::FontMetrics fm(font); - const int16_t width = fm.get_text_width(text); - const int16_t height = fm.height; + if (is_utf8) { + width = get_utf8_text_width(text, font_size_t::from_romfont(font)); + height = font_size_t::from_romfont(font).get_height(); + } else #endif + { + CLCD::FontMetrics fm(font); + width = fm.get_text_width(text); + height = fm.height; + } if (width < w && height < h) break; font--; } @@ -336,11 +341,11 @@ class CommandProcessor : public CLCD::CommandFifo { uint16_t text_width(T text) { using namespace FTDI; #ifdef TOUCH_UI_USE_UTF8 - return get_utf8_text_width(text, font_size_t::from_romfont(_font)); - #else - CLCD::FontMetrics fm(_font); - return fm.get_text_width(text); + if (has_utf8_chars(text)) + return get_utf8_text_width(text, font_size_t::from_romfont(_font)); #endif + CLCD::FontMetrics fm(_font); + return fm.get_text_width(text); } template @@ -353,11 +358,14 @@ class CommandProcessor : public CLCD::CommandFifo { const int8_t font = _font; #endif #ifdef TOUCH_UI_USE_UTF8 - draw_utf8_text(*this, x, y, text, font_size_t::from_romfont(font), options); - #else + if (has_utf8_chars(text)) + draw_utf8_text(*this, x, y, text, font_size_t::from_romfont(font), options); + else + #endif + { CLCD::CommandFifo::text(x, y, font, options); CLCD::CommandFifo::str(text); - #endif + } return *this; } @@ -389,20 +397,22 @@ class CommandProcessor : public CLCD::CommandFifo { #endif CLCD::CommandFifo::button(x, y, w, h, font, options); #ifdef TOUCH_UI_USE_UTF8 - apply_text_alignment(x, y, w, h, OPT_CENTER); - CLCD::CommandFifo::str(F("")); - if (!(options & FTDI::OPT_FLAT)) { - // Reproduce the black "shadow" the FTDI adds to the button label - CLCD::CommandFifo::cmd(SAVE_CONTEXT()); - CLCD::CommandFifo::cmd(COLOR_RGB(0x00000)); - draw_utf8_text(*this, x-1, y-1, text, font_size_t::from_romfont(font), OPT_CENTER); - CLCD::CommandFifo::cmd(RESTORE_CONTEXT()); + if (has_utf8_chars(text)) { + CLCD::CommandFifo::str(F("")); + apply_text_alignment(x, y, w, h, OPT_CENTER); + if (!(options & FTDI::OPT_FLAT)) { + // Reproduce the black "shadow" the FTDI adds to the button label + CLCD::CommandFifo::cmd(SAVE_CONTEXT()); + CLCD::CommandFifo::cmd(COLOR_RGB(0x00000)); + draw_utf8_text(*this, x-1, y-1, text, font_size_t::from_romfont(font), OPT_CENTER); + CLCD::CommandFifo::cmd(RESTORE_CONTEXT()); + } + // Draw the button label + draw_utf8_text(*this, x, y, text, font_size_t::from_romfont(font), OPT_CENTER); } - // Draw the button label - draw_utf8_text(*this, x, y, text, font_size_t::from_romfont(font), OPT_CENTER); - #else - CLCD::CommandFifo::str(text); + else #endif + CLCD::CommandFifo::str(text); if (_btn_style_callback && styleModified) _btn_style_callback(*this, _tag, _style, options, true); return *this; } diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp index fd6fde5f581d..b4018e979e24 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp @@ -128,14 +128,14 @@ bool DLCache::store(uint32_t num_bytes /* = 0*/) { if (dl_size > free_space) { // Not enough memory to cache the display list. - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); SERIAL_ECHOPAIR("Not enough space in GRAM to cache display list, free space: ", free_space); SERIAL_ECHOLNPAIR(" Required: ", dl_size); #endif return false; } else { - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); SERIAL_ECHOPAIR("Saving DL to RAMG cache, bytes: ", dl_size); SERIAL_ECHOLNPAIR(" Free space: ", free_space); @@ -164,7 +164,7 @@ void DLCache::load_slot() { void DLCache::append() { CLCD::CommandFifo cmd; cmd.append(dl_addr, dl_size); - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) cmd.execute(); wait_until_idle(); SERIAL_ECHO_START(); diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/event_loop.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/event_loop.cpp index 3fe868ec7e9d..f0f693bfd887 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/event_loop.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/event_loop.cpp @@ -124,7 +124,7 @@ namespace FTDI { switch (pressed_tag) { case UNPRESSED: if (tag != 0) { - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR("Touch start: ", tag); #endif @@ -189,7 +189,7 @@ namespace FTDI { if (UIData::flags.bits.touch_end_sound) sound.play(unpress_sound); - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR("Touch end: ", tag); #endif diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.cpp index 7dba952a0a67..ec1c0d1cbb4d 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.cpp @@ -31,7 +31,7 @@ uint8_t ScreenRef::lookupScreen(onRedraw_func_t onRedraw_ptr) { return type; } } - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); SERIAL_ECHOPAIR("Screen not found: ", (uintptr_t) onRedraw_ptr); #endif @@ -42,7 +42,7 @@ void ScreenRef::setScreen(onRedraw_func_t onRedraw_ptr) { uint8_t type = lookupScreen(onRedraw_ptr); if (type != 0xFF) { setType(type); - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR("New screen: ", type); #endif diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/sound_player.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/sound_player.cpp index e8c5e881c529..a58bdda738da 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/sound_player.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/sound_player.cpp @@ -36,7 +36,7 @@ namespace FTDI { void SoundPlayer::play(effect_t effect, note_t note) { - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); SERIAL_ECHOPAIR("Playing note ", note); SERIAL_ECHOLNPAIR(", instrument ", effect); diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/text_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/text_box.cpp index 3760e3a5cd93..75a445a926b0 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/text_box.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/text_box.cpp @@ -104,11 +104,14 @@ namespace FTDI { line[line_len - 1] = 0; #ifdef TOUCH_UI_USE_UTF8 - draw_utf8_text(cmd, x + dx, y + dy, line, fm.fs, options & ~OPT_CENTERY); - #else - cmd.CLCD::CommandFifo::text(x + dx, y + dy, font, options & ~OPT_CENTERY); - cmd.CLCD::CommandFifo::str(line); + if (has_utf8_chars(line)) { + draw_utf8_text(cmd, x + dx, y + dy, line, fm.fs, options & ~OPT_CENTERY); + } else #endif + { + cmd.CLCD::CommandFifo::text(x + dx, y + dy, font, options & ~OPT_CENTERY); + cmd.CLCD::CommandFifo::str(line); + } } y += fm.get_height(); diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/font_bitmaps.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/font_bitmaps.cpp index de1d4a600727..87baeb6d2023 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/font_bitmaps.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/font_bitmaps.cpp @@ -26,7 +26,7 @@ namespace FTDI { void write_rle_data(uint16_t addr, const uint8_t *data, size_t n) { - for (; n > 2; n -= 2) { + for (; n >= 2; n -= 2) { uint8_t count = pgm_read_byte(data++); uint8_t value = pgm_read_byte(data++); while (count--) CLCD::mem_write_8(addr++, value); diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/font_bitmaps/western_char_set_bitmap_31.png b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/font_bitmaps/western_char_set_bitmap_31.png index 5496b2f158126a6847f018c450b40f96ce06bd3c..ef681923db2338e076253ccba7c801920a39bbeb 100644 GIT binary patch literal 24548 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 F{|S$|&7J@N literal 14018 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

G>DC*>Yg5!VGd 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 diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/font_bitmaps/western_char_set_bitmap_31.svg b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/font_bitmaps/western_char_set_bitmap_31.svg index 1ff1445f79ce..f803126c2b7e 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/font_bitmaps/western_char_set_bitmap_31.svg +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/font_bitmaps/western_char_set_bitmap_31.svg @@ -11,13 +11,13 @@ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="38" - height="1225" - viewBox="0 0 10.054166 324.11458" + height="2107" + viewBox="0 0 10.054166 557.47707" version="1.1" id="svg8" - inkscape:version="0.92.1 r15371" - sodipodi:docname="western_european_bitmap_31.svg" - inkscape:export-filename="/home/aleph/git-repos/marlin-devel/tests/ftdi-eve-lib-examples/unicode_demo/src/ftdi_eve_lib/extended/unicode/font_bitmaps/western_european_bitmap_31.png" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" + sodipodi:docname="western_char_set_bitmap_31.svg" + inkscape:export-filename="/home/aleph/git-repos/marlin-devel/tests/ftdi-eve-lib-examples/unicode_demo/src/ftdi_eve_lib/extended/unicode/font_bitmaps/western_char_set_bitmap_31.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"> + transform="translate(0,260.47708)"> ̀ ́ ̂ ̃ ̈ ̊ ̧ıßØøÆæÐðÞþ«»¡¿¢£¤¥¹²³ºª©®±×÷¼½¾µ¦§¬¥ + id="tspan860" /> = ' ' && c < 128) ? c : '?'; uint8_t width = std_char_width(which); + if (c == '\t') { + // Special handling for the tab character + which = ' '; + width = std_char_width(' '); + } + // Draw the character if (cmd) ext_vertex2ii(*cmd, x, y, std_font, which); @@ -97,4 +103,4 @@ return true; } -#endif // FTDI_EXTENDED +#endif // FTDI_EXTENDED && TOUCH_UI_USE_UTF8 diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/unicode.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/unicode.cpp index 7900b1887041..d717f7f154e1 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/unicode.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/unicode.cpp @@ -21,10 +21,39 @@ #include "../ftdi_extended.h" -#if defined(FTDI_EXTENDED) && defined(TOUCH_UI_USE_UTF8) +#if defined(FTDI_EXTENDED) && ENABLED(TOUCH_UI_USE_UTF8) using namespace FTDI; + /** + * Return true if a string has UTF8 characters + * + * Parameters: + * + * c - Pointer to a string. + * + * Returns: True if the strings has UTF8 characters + */ + + bool FTDI::has_utf8_chars(const char *str) { + for (;;) { + const char c = *str++; + if (!c) break; + if ((c & 0xC0) == 0x80) return true; + } + return false; + } + + bool FTDI::has_utf8_chars(progmem_str _str) { + const char *str = (const char *) _str; + for (;;) { + const char c = pgm_read_byte(str++); + if (!c) break; + if ((c & 0xC0) == 0x80) return true; + } + return false; + } + /** * Return a character in a UTF8 string and increment the * pointer to the next character diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/unicode.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/unicode.h index 0b9c8f1ce1f3..fedb89d172e9 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/unicode.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/unicode.h @@ -38,6 +38,11 @@ namespace FTDI { (0xF0808080 | ((c & 0b000111000000000000000000) << 6) | ((c & 0b111111000000000000) << 4) | ((c & 0b111111000000) << 2) | (c & 0b111111)); } + /* Returns true if the string has UTF8 string characters */ + + bool has_utf8_chars(progmem_str str); + bool has_utf8_chars(const char *str); + /* Returns the next character in a UTF8 string and increments the * pointer to the next character */ diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/western_char_set.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/western_char_set.cpp index 150838487d86..688b68ae0c51 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/western_char_set.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/western_char_set.cpp @@ -21,7 +21,8 @@ #include "../ftdi_extended.h" -#if defined(FTDI_EXTENDED) && defined(TOUCH_UI_USE_UTF8) && defined(TOUCH_UI_UTF8_WESTERN_CHARSET) +#if defined(FTDI_EXTENDED) && BOTH(TOUCH_UI_USE_UTF8, TOUCH_UI_UTF8_WESTERN_CHARSET) + #include "western_char_set_bitmap_31.h" #define NUM_ELEMENTS(a) (sizeof(a)/sizeof(a[0])) @@ -44,7 +45,10 @@ DOT_ABOVE, CEDILLA, NO_DOT_I, +#if ENABLED(TOUCH_UI_UTF8_GERMANIC) SHARP_S, +#endif +#if ENABLED(TOUCH_UI_UTF8_SCANDINAVIAN) LRG_O_STROKE, SML_O_STROKE, LRG_AE, @@ -53,14 +57,49 @@ SML_ETH, LRG_THORN, SML_THORN, +#endif +#if ENABLED(TOUCH_UI_UTF8_PUNCTUATION) LEFT_DBL_QUOTE, RIGHT_DBL_QUOTE, INV_EXCLAMATION, INV_QUESTION, +#endif +#if ENABLED(TOUCH_UI_UTF8_CURRENCY) CENT_SIGN, POUND_SIGN, CURRENCY_SIGN, - YEN_SIGN + YEN_SIGN, +#endif +#if ENABLED(TOUCH_UI_UTF8_SUPERSCRIPTS) + SUPERSCRIPT_ONE, + SUPERSCRIPT_TWO, + SUPERSCRIPT_THREE, +#endif +#if ENABLED(TOUCH_UI_UTF8_ORDINALS) + MASCULINE_ORDINAL, + FEMININE_ORDINAL, +#endif +#if ENABLED(TOUCH_UI_UTF8_COPYRIGHT) + COPYRIGHT_SIGN, + REGISTERED_SIGN, +#endif +#if ENABLED(TOUCH_UI_UTF8_MATHEMATICS) + PLUS_MINUS_SIGN, + MULTIPLICATION_SIGN, + DIVISION_SIGN, +#endif +#if ENABLED(TOUCH_UI_UTF8_FRACTIONS) + FRACTION_QUARTER, + FRACTION_HALF, + FRACTION_THREE_FOURTHS, +#endif +#if ENABLED(TOUCH_UI_UTF8_SYMBOLS) + MICRON_SIGN, + PILCROW_SIGN, + BROKEN_BAR, + SECTION_SIGN, + NOT_SIGN +#endif }; /* Centerline of characters that can take accents */ @@ -105,22 +144,72 @@ uint8_t alt_data; // For accented characters, the centerline; else char width } char_recipe[] = { {0, 0, NO_DOT_I, 10 }, +#if ENABLED(TOUCH_UI_UTF8_PUNCTUATION) {UTF8('¡'), 0 , INV_EXCLAMATION, 13 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_CURRENCY) {UTF8('¢'), 0 , CENT_SIGN, 23 }, {UTF8('£'), 0 , POUND_SIGN, 24 }, {UTF8('¤'), 0 , CURRENCY_SIGN, 26 }, {UTF8('¥'), 0 , YEN_SIGN, 26 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_SYMBOLS) + {UTF8('¦'), 0 , BROKEN_BAR, 11 }, + {UTF8('§'), 0 , SECTION_SIGN, 21 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_COPYRIGHT) + {UTF8('©'), 0 , COPYRIGHT_SIGN, 38 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_ORDINALS) + {UTF8('ª'), 0 , FEMININE_ORDINAL, 19 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_PUNCTUATION) {UTF8('«'), 0 , LEFT_DBL_QUOTE, 23 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_SYMBOLS) + {UTF8('¬'), 0 , NOT_SIGN, 32 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_COPYRIGHT) + {UTF8('®'), 0 , REGISTERED_SIGN, 38 }, +#endif {UTF8('°'), 0 , DOT_ABOVE, 24 }, +#if ENABLED(TOUCH_UI_UTF8_MATHEMATICS) + {UTF8('±'), 0 , NOT_SIGN, 32 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_SUPERSCRIPTS) + {UTF8('²'), 0 , SUPERSCRIPT_TWO, 16 }, + {UTF8('³'), 0 , SUPERSCRIPT_THREE, 16 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_SYMBOLS) + {UTF8('µ'), 0 , MICRON_SIGN, 28 }, + {UTF8('¶'), 0 , PILCROW_SIGN, 24 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_SUPERSCRIPTS) + {UTF8('¹'), 0 , SUPERSCRIPT_ONE, 16 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_ORDINALS) + {UTF8('º'), 0 , MASCULINE_ORDINAL, 19 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_PUNCTUATION) {UTF8('»'), 0 , RIGHT_DBL_QUOTE, 24 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_FRACTIONS) + {UTF8('¼'), 0 , FRACTION_QUARTER, 40 }, + {UTF8('½'), 0 , FRACTION_HALF, 40 }, + {UTF8('¾'), 0 , FRACTION_THREE_FOURTHS, 40 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_PUNCTUATION) {UTF8('¿'), 0 , INV_QUESTION, 21 }, +#endif {UTF8('À'), 'A', GRAVE, mid_A}, {UTF8('Á'), 'A', ACUTE, mid_A}, {UTF8('Â'), 'A', CIRCUMFLEX, mid_A}, {UTF8('Ã'), 'A', TILDE, mid_A}, {UTF8('Ä'), 'A', DIAERESIS, mid_A}, {UTF8('Å'), 'A', DOT_ABOVE, mid_A}, - {UTF8('Æ'), 0 , LRG_AE, mid_E}, +#if ENABLED(TOUCH_UI_UTF8_SCANDINAVIAN) + {UTF8('Æ'), 0 , LRG_AE, 40}, +#endif {UTF8('Ç'), 'C', CEDILLA, mid_C}, {UTF8('È'), 'E', GRAVE, mid_E}, {UTF8('É'), 'E', ACUTE, mid_E}, @@ -130,28 +219,41 @@ {UTF8('Í'), 'I', ACUTE, mid_I}, {UTF8('Î'), 'I', CIRCUMFLEX, mid_I}, {UTF8('Ï'), 'I', DIAERESIS, mid_I}, +#if ENABLED(TOUCH_UI_UTF8_SCANDINAVIAN) {UTF8('Ð'), 0, LRG_ETH, 31 }, +#endif {UTF8('Ñ'), 'N', TILDE, mid_N}, {UTF8('Ò'), 'O', GRAVE, mid_O}, {UTF8('Ó'), 'O', ACUTE, mid_O}, {UTF8('Ô'), 'O', CIRCUMFLEX, mid_O}, {UTF8('Õ'), 'O', TILDE, mid_O}, {UTF8('Ö'), 'O', DIAERESIS, mid_O}, +#if ENABLED(TOUCH_UI_UTF8_MATHEMATICS) + {UTF8('×'), 0 , MULTIPLICATION_SIGN, 32 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_SCANDINAVIAN) {UTF8('Ø'), 0 , LRG_O_STROKE, 32 }, +#endif {UTF8('Ù'), 'U', GRAVE, mid_U}, {UTF8('Ú'), 'U', ACUTE, mid_U}, {UTF8('Û'), 'U', CIRCUMFLEX, mid_U}, {UTF8('Ü'), 'U', DIAERESIS, mid_U}, {UTF8('Ý'), 'Y', ACUTE, mid_Y}, +#if ENABLED(TOUCH_UI_UTF8_SCANDINAVIAN) {UTF8('Þ'), 0 , LRG_THORN, 25 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_GERMANIC) {UTF8('ß'), 0 , SHARP_S, 26 }, +#endif {UTF8('à'), 'a', GRAVE, mid_a}, {UTF8('á'), 'a', ACUTE, mid_a}, {UTF8('â'), 'a', CIRCUMFLEX, mid_a}, {UTF8('ã'), 'a', TILDE, mid_a}, {UTF8('ä'), 'a', DIAERESIS, mid_a}, {UTF8('å'), 'a', DOT_ABOVE, mid_a}, +#if ENABLED(TOUCH_UI_UTF8_SCANDINAVIAN) {UTF8('æ'), 0 , SML_AE, 40 }, +#endif {UTF8('ç'), 'c', CEDILLA, mid_c}, {UTF8('è'), 'e', GRAVE, mid_e}, {UTF8('é'), 'e', ACUTE, mid_e}, @@ -161,20 +263,29 @@ {UTF8('í'), 'i', ACUTE, mid_i}, {UTF8('î'), 'i', CIRCUMFLEX, mid_i}, {UTF8('ï'), 'i', DIAERESIS, mid_i}, +#if ENABLED(TOUCH_UI_UTF8_SCANDINAVIAN) {UTF8('ð'), 0, SML_ETH, 24 }, +#endif {UTF8('ñ'), 'n', TILDE, mid_n}, {UTF8('ò'), 'o', GRAVE, mid_o}, {UTF8('ó'), 'o', ACUTE, mid_o}, {UTF8('ô'), 'o', CIRCUMFLEX, mid_o}, {UTF8('õ'), 'o', TILDE, mid_o}, {UTF8('ö'), 'o', DIAERESIS, mid_o}, +#if ENABLED(TOUCH_UI_UTF8_MATHEMATICS) + {UTF8('÷'), 0 , DIVISION_SIGN, 32 }, +#endif +#if ENABLED(TOUCH_UI_UTF8_SCANDINAVIAN) {UTF8('ø'), 0 , SML_O_STROKE, 25 }, +#endif {UTF8('ù'), 'u', GRAVE, mid_u}, {UTF8('ú'), 'u', ACUTE, mid_u}, {UTF8('û'), 'u', CIRCUMFLEX, mid_u}, {UTF8('ü'), 'u', DIAERESIS, mid_u}, {UTF8('ý'), 'y', ACUTE, mid_y}, +#if ENABLED(TOUCH_UI_UTF8_SCANDINAVIAN) {UTF8('þ'), 0 , SML_THORN, 25 }, +#endif {UTF8('ÿ'), 'y', DIAERESIS, mid_y} }; diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/western_char_set_bitmap_31.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/western_char_set_bitmap_31.h index 08d252afbd39..2c1b8291b828 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/western_char_set_bitmap_31.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/western_char_set_bitmap_31.h @@ -28,638 +28,1289 @@ */ const unsigned char font[] PROGMEM = { + + /* 0 GRAVE */ 0x76, 0x00, 0x01, 0x08, 0x01, 0xee, 0x01, 0xe5, 0x11, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x20, 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xd0, 0x10, 0x00, 0x01, 0x01, 0x01, 0xdf, 0x01, 0xf9, 0x11, 0x00, 0x01, 0x2e, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf2, 0x11, 0x00, 0x01, 0x5f, 0x01, 0xfd, 0x11, 0x00, 0x01, 0x06, 0x01, 0x99, - 0x01, 0x40, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x20, 0x00, 0x01, 0x9e, - 0x01, 0xee, 0x01, 0x50, 0x0f, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xf8, - 0x10, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0xcf, - 0x01, 0xfc, 0x10, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xd1, 0x10, 0x00, - 0x01, 0x4f, 0x01, 0xfe, 0x01, 0x20, 0x0f, 0x00, 0x01, 0x01, 0x01, 0xef, - 0x01, 0xf3, 0x10, 0x00, 0x01, 0x07, 0x01, 0xaa, 0x01, 0x40, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, 0x1f, 0x00, 0x01, 0xcf, 0x01, 0xfc, 0x10, 0x00, - 0x01, 0x07, 0x02, 0xff, 0x01, 0x60, 0x0f, 0x00, 0x01, 0x2f, 0x02, 0xff, - 0x01, 0xf2, 0x0f, 0x00, 0x01, 0xcf, 0x01, 0xf6, 0x01, 0x6f, 0x01, 0xfb, - 0x0e, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xa0, 0x01, 0x0a, 0x01, 0xff, - 0x01, 0x60, 0x0d, 0x00, 0x01, 0x1f, 0x01, 0xfd, 0x01, 0x00, 0x01, 0x01, - 0x01, 0xdf, 0x01, 0xf1, 0x0d, 0x00, 0x01, 0xbf, 0x01, 0xf3, 0x02, 0x00, - 0x01, 0x3f, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x02, 0x01, 0x99, 0x01, 0x50, - 0x02, 0x00, 0x01, 0x05, 0x01, 0x99, 0x01, 0x20, 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0x1f, 0x00, 0x01, 0x11, 0x0d, 0x00, 0x01, 0x09, 0x01, 0xff, - 0x01, 0xc3, 0x02, 0x00, 0x01, 0xff, 0x01, 0x80, 0x0c, 0x00, 0x01, 0xaf, - 0x02, 0xff, 0x01, 0x50, 0x01, 0x01, 0x01, 0xff, 0x01, 0x60, 0x0b, 0x00, - 0x01, 0x02, 0x01, 0xff, 0x01, 0xd9, 0x01, 0xff, 0x01, 0xf7, 0x01, 0x07, - 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x20, - 0x01, 0x3e, 0x02, 0xff, 0x01, 0xfd, 0x0c, 0x00, 0x01, 0x09, 0x01, 0xfe, - 0x01, 0x00, 0x01, 0x02, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xf4, 0x0c, 0x00, - 0x01, 0x07, 0x01, 0xa8, 0x02, 0x00, 0x01, 0x06, 0x01, 0x98, 0x01, 0x20, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x41, 0x00, 0x02, 0x44, 0x02, 0x00, - 0x02, 0x44, 0x0d, 0x00, 0x02, 0xff, 0x01, 0x10, 0x01, 0x01, 0x02, 0xff, - 0x0d, 0x00, 0x02, 0xff, 0x01, 0x10, 0x01, 0x01, 0x02, 0xff, 0x0d, 0x00, - 0x02, 0xff, 0x01, 0x10, 0x01, 0x01, 0x02, 0xff, 0x0d, 0x00, 0x02, 0xcc, - 0x01, 0x10, 0x01, 0x01, 0x02, 0xcc, 0xff, 0x00, 0xff, 0x00, 0xf6, 0x00, - 0x01, 0x13, 0x01, 0x30, 0x10, 0x00, 0x01, 0x2b, 0x02, 0xff, 0x01, 0xa1, - 0x0e, 0x00, 0x01, 0x02, 0x01, 0xef, 0x02, 0xff, 0x01, 0xfd, 0x01, 0x10, - 0x0d, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0x94, 0x01, 0x5a, 0x01, 0xff, - 0x01, 0xb0, 0x0d, 0x00, 0x01, 0x4f, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x9f, - 0x01, 0xf2, 0x0d, 0x00, 0x01, 0x8f, 0x01, 0xf0, 0x02, 0x00, 0x01, 0x2f, - 0x01, 0xf6, 0x0d, 0x00, 0x01, 0x8f, 0x01, 0xe0, 0x02, 0x00, 0x01, 0x0f, - 0x01, 0xf7, 0x0d, 0x00, 0x01, 0x7f, 0x01, 0xf2, 0x02, 0x00, 0x01, 0x4f, - 0x01, 0xf5, 0x0d, 0x00, 0x01, 0x2f, 0x01, 0xfc, 0x01, 0x10, 0x01, 0x02, - 0x01, 0xdf, 0x01, 0xf0, 0x0d, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfb, - 0x01, 0xcf, 0x01, 0xff, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x9f, 0x02, 0xff, - 0x01, 0xf8, 0x0f, 0x00, 0x01, 0x03, 0x01, 0x9c, 0x01, 0xc9, 0x01, 0x30, - 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x93, 0x00, - 0x01, 0x06, 0x01, 0xff, 0x01, 0x20, 0x11, 0x00, 0x01, 0xcf, 0x01, 0xc0, - 0x11, 0x00, 0x01, 0x3f, 0x01, 0xf6, 0x11, 0x00, 0x01, 0x0f, 0x01, 0xfb, - 0x11, 0x00, 0x01, 0x3f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0x07, 0x01, 0xd9, - 0x01, 0x89, 0x01, 0xff, 0x01, 0xfb, 0x0e, 0x00, 0x01, 0x07, 0x03, 0xff, - 0x01, 0xf3, 0x0e, 0x00, 0x01, 0x04, 0x01, 0xbd, 0x01, 0xee, 0x01, 0xd9, - 0x01, 0x20, 0xff, 0x00, 0x61, 0x00, 0x01, 0x01, 0x01, 0x99, 0x01, 0x96, - 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, - 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, - 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, - 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, - 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, - 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, - 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, - 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, - 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, - 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, - 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, - 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, - 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, - 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, - 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0xff, 0x00, 0x58, 0x00, - 0x01, 0x35, 0x01, 0x66, 0x01, 0x52, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xaf, - 0x03, 0xff, 0x01, 0xe7, 0x0d, 0x00, 0x01, 0x7f, 0x05, 0xff, 0x01, 0xc1, - 0x0b, 0x00, 0x01, 0x07, 0x02, 0xff, 0x01, 0xfc, 0x01, 0xaa, 0x01, 0xdf, - 0x01, 0xff, 0x01, 0xfc, 0x0b, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xf9, - 0x01, 0x10, 0x01, 0x00, 0x01, 0x02, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x70, - 0x0a, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x80, 0x03, 0x00, 0x01, 0x0d, - 0x01, 0xff, 0x01, 0xe0, 0x0a, 0x00, 0x01, 0xef, 0x01, 0xff, 0x04, 0x00, - 0x01, 0x05, 0x01, 0xff, 0x01, 0xf3, 0x09, 0x00, 0x01, 0x02, 0x01, 0xff, - 0x01, 0xfb, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf7, 0x09, 0x00, - 0x01, 0x03, 0x01, 0xff, 0x01, 0xf9, 0x03, 0x00, 0x01, 0x03, 0x01, 0x9e, - 0x01, 0xff, 0x01, 0xf8, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, - 0x02, 0x00, 0x01, 0x01, 0x01, 0xaf, 0x02, 0xff, 0x01, 0xd7, 0x09, 0x00, - 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x1d, 0x01, 0xff, - 0x01, 0xfc, 0x01, 0x50, 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, - 0x02, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x70, 0x0b, 0x00, 0x01, 0x03, - 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfa, - 0x0c, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x05, - 0x01, 0xff, 0x01, 0xf4, 0x0c, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, - 0x01, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf4, 0x0c, 0x00, 0x01, 0x03, - 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xf9, - 0x0c, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x02, - 0x02, 0xff, 0x01, 0x50, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, - 0x02, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0xf8, 0x0b, 0x00, 0x01, 0x03, - 0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x1d, 0x02, 0xff, 0x01, 0xd3, - 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x01, - 0x01, 0xcf, 0x02, 0xff, 0x01, 0x70, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, - 0x01, 0xf8, 0x03, 0x00, 0x01, 0x07, 0x02, 0xff, 0x01, 0xfb, 0x09, 0x00, - 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x2b, 0x02, 0xff, - 0x01, 0xb0, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, - 0x01, 0x6f, 0x01, 0xff, 0x01, 0xf6, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, - 0x01, 0xf8, 0x05, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfd, 0x08, 0x00, - 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xdf, 0x01, 0xff, - 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xbf, - 0x01, 0xff, 0x01, 0x10, 0x07, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, - 0x06, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, - 0x01, 0xf8, 0x05, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfd, 0x08, 0x00, - 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x02, 0x01, 0x84, 0x03, 0x00, - 0x01, 0x2d, 0x01, 0xff, 0x01, 0xf8, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, - 0x01, 0xf8, 0x01, 0x02, 0x01, 0xff, 0x01, 0xec, 0x01, 0xa9, 0x01, 0xac, - 0x02, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, - 0x01, 0x02, 0x05, 0xff, 0x01, 0xfe, 0x01, 0x20, 0x08, 0x00, 0x01, 0x03, - 0x01, 0xee, 0x01, 0xe7, 0x01, 0x01, 0x01, 0xbf, 0x03, 0xff, 0x01, 0xfe, - 0x01, 0x80, 0x0e, 0x00, 0x01, 0x35, 0x01, 0x78, 0x01, 0x76, 0x01, 0x30, - 0xff, 0x00, 0x48, 0x00, 0x01, 0x40, 0x0a, 0x00, 0x01, 0x47, 0x01, 0x9a, - 0x01, 0xba, 0x01, 0x95, 0x01, 0x10, 0x02, 0x00, 0x01, 0x07, 0x01, 0xf8, - 0x08, 0x00, 0x01, 0x02, 0x01, 0xae, 0x04, 0xff, 0x01, 0xfc, 0x01, 0x50, - 0x01, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0x30, 0x07, 0x00, 0x01, 0x8f, - 0x06, 0xff, 0x01, 0xfc, 0x01, 0x23, 0x01, 0xff, 0x01, 0xf6, 0x07, 0x00, - 0x01, 0x1c, 0x03, 0xff, 0x01, 0xca, 0x01, 0x9b, 0x01, 0xdf, 0x02, 0xff, - 0x01, 0xfe, 0x01, 0xff, 0x01, 0x80, 0x07, 0x00, 0x01, 0xcf, 0x01, 0xff, - 0x01, 0xfd, 0x01, 0x50, 0x02, 0x00, 0x01, 0x02, 0x01, 0x9f, 0x02, 0xff, - 0x01, 0xfa, 0x07, 0x00, 0x01, 0x09, 0x02, 0xff, 0x01, 0x90, 0x04, 0x00, - 0x01, 0x03, 0x01, 0xef, 0x01, 0xff, 0x01, 0xf3, 0x07, 0x00, 0x01, 0x5f, - 0x01, 0xff, 0x01, 0xf9, 0x06, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0xfc, - 0x07, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xc0, 0x05, 0x00, 0x01, 0x06, - 0x03, 0xff, 0x01, 0x60, 0x05, 0x00, 0x01, 0x04, 0x02, 0xff, 0x01, 0x30, - 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xc0, - 0x05, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x02, - 0x01, 0xef, 0x01, 0xf7, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xf3, 0x05, 0x00, - 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf6, 0x05, 0x00, 0x01, 0x1d, 0x01, 0xff, - 0x01, 0xa0, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x3f, - 0x01, 0xff, 0x01, 0xf2, 0x05, 0x00, 0x01, 0xcf, 0x01, 0xfc, 0x01, 0x00, - 0x01, 0x09, 0x01, 0xff, 0x01, 0xfb, 0x05, 0x00, 0x01, 0x6f, 0x01, 0xff, - 0x01, 0xe0, 0x04, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xd1, 0x01, 0x00, - 0x01, 0x06, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x8f, 0x01, 0xff, - 0x01, 0xc0, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xfe, 0x01, 0x20, 0x01, 0x00, - 0x01, 0x03, 0x02, 0xff, 0x05, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0xb0, - 0x03, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xf4, 0x02, 0x00, 0x01, 0x02, - 0x02, 0xff, 0x01, 0x10, 0x04, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xa0, - 0x03, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0x60, 0x02, 0x00, 0x01, 0x01, - 0x02, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xa0, - 0x02, 0x00, 0x01, 0x01, 0x01, 0xef, 0x01, 0xf8, 0x03, 0x00, 0x01, 0x02, - 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0xb0, - 0x02, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xb0, 0x03, 0x00, 0x01, 0x03, - 0x02, 0xff, 0x01, 0x10, 0x04, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0xc0, - 0x02, 0x00, 0x01, 0xbf, 0x01, 0xfd, 0x04, 0x00, 0x01, 0x04, 0x02, 0xff, - 0x05, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x08, - 0x01, 0xff, 0x01, 0xe1, 0x04, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfe, - 0x05, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xf2, 0x01, 0x00, 0x01, 0x6f, - 0x01, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xfa, - 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf6, 0x01, 0x04, 0x01, 0xff, - 0x01, 0xf5, 0x05, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf7, 0x05, 0x00, - 0x01, 0x09, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x2e, 0x01, 0xff, 0x01, 0x70, - 0x05, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xf2, 0x05, 0x00, 0x01, 0x03, - 0x02, 0xff, 0x01, 0xef, 0x01, 0xf9, 0x06, 0x00, 0x01, 0xcf, 0x01, 0xff, - 0x01, 0xb0, 0x06, 0x00, 0x01, 0xcf, 0x02, 0xff, 0x01, 0xc0, 0x05, 0x00, - 0x01, 0x06, 0x02, 0xff, 0x01, 0x40, 0x06, 0x00, 0x01, 0x2f, 0x02, 0xff, - 0x01, 0x20, 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xfb, 0x07, 0x00, - 0x01, 0x0b, 0x02, 0xff, 0x01, 0xd2, 0x04, 0x00, 0x01, 0x06, 0x02, 0xff, - 0x01, 0xe1, 0x07, 0x00, 0x01, 0x5f, 0x03, 0xff, 0x01, 0x93, 0x02, 0x00, - 0x01, 0x05, 0x01, 0xcf, 0x02, 0xff, 0x01, 0x30, 0x06, 0x00, 0x01, 0x03, - 0x01, 0xff, 0x01, 0xfb, 0x03, 0xff, 0x01, 0xfd, 0x01, 0xde, 0x03, 0xff, - 0x01, 0xe3, 0x07, 0x00, 0x01, 0x1e, 0x01, 0xff, 0x01, 0x80, 0x01, 0x4d, - 0x06, 0xff, 0x01, 0xfa, 0x01, 0x10, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xfb, - 0x02, 0x00, 0x01, 0x5c, 0x04, 0xff, 0x01, 0xe9, 0x01, 0x30, 0x08, 0x00, - 0x01, 0x1c, 0x01, 0xc0, 0x03, 0x00, 0x01, 0x04, 0x01, 0x67, 0x01, 0x86, - 0x01, 0x53, 0x0b, 0x00, 0x01, 0x10, 0xff, 0x00, 0xbd, 0x00, 0x01, 0x02, - 0x01, 0x20, 0x0c, 0x00, 0x01, 0x02, 0x01, 0x32, 0x01, 0x10, 0x02, 0x00, - 0x01, 0x1e, 0x01, 0xe3, 0x0a, 0x00, 0x01, 0x01, 0x01, 0x7c, 0x02, 0xff, - 0x01, 0xfd, 0x01, 0x82, 0x01, 0x00, 0x01, 0xcf, 0x01, 0xf7, 0x0a, 0x00, - 0x01, 0x6e, 0x05, 0xff, 0x01, 0x8a, 0x01, 0xff, 0x01, 0xa0, 0x09, 0x00, - 0x01, 0x08, 0x07, 0xff, 0x01, 0xfc, 0x0a, 0x00, 0x01, 0x6f, 0x01, 0xff, - 0x01, 0xfc, 0x01, 0x50, 0x01, 0x00, 0x01, 0x3a, 0x02, 0xff, 0x01, 0xf1, - 0x09, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x90, 0x03, 0x00, 0x01, 0x7f, - 0x01, 0xff, 0x01, 0xf5, 0x09, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfc, - 0x03, 0x00, 0x01, 0x01, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xfd, 0x09, 0x00, - 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf3, 0x03, 0x00, 0x01, 0x0b, 0x03, 0xff, - 0x01, 0x30, 0x08, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xd0, 0x03, 0x00, - 0x01, 0x9f, 0x01, 0xfa, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x80, 0x08, 0x00, - 0x01, 0x7f, 0x01, 0xff, 0x01, 0x80, 0x02, 0x00, 0x01, 0x06, 0x01, 0xff, - 0x01, 0xc0, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xb0, 0x08, 0x00, 0x01, 0x9f, - 0x01, 0xff, 0x01, 0x50, 0x02, 0x00, 0x01, 0x3f, 0x01, 0xfe, 0x01, 0x10, - 0x01, 0x1f, 0x01, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0xaf, 0x01, 0xff, - 0x01, 0x40, 0x01, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xf3, 0x01, 0x00, - 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0xbf, 0x01, 0xff, - 0x01, 0x30, 0x01, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0x50, 0x01, 0x00, - 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0xaf, 0x01, 0xff, - 0x01, 0x30, 0x01, 0x00, 0x01, 0xbf, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x0f, - 0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x40, - 0x01, 0x08, 0x01, 0xff, 0x01, 0xb0, 0x02, 0x00, 0x01, 0x0f, 0x01, 0xff, - 0x01, 0xe0, 0x08, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0x60, 0x01, 0x5f, - 0x01, 0xfd, 0x03, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xc0, 0x08, 0x00, - 0x01, 0x4f, 0x01, 0xff, 0x01, 0xa3, 0x01, 0xff, 0x01, 0xe2, 0x03, 0x00, - 0x01, 0x7f, 0x01, 0xff, 0x01, 0x90, 0x08, 0x00, 0x01, 0x0f, 0x01, 0xff, - 0x01, 0xfe, 0x01, 0xff, 0x01, 0x40, 0x03, 0x00, 0x01, 0xcf, 0x01, 0xff, - 0x01, 0x50, 0x08, 0x00, 0x01, 0x0a, 0x02, 0xff, 0x01, 0xf6, 0x03, 0x00, - 0x01, 0x05, 0x01, 0xff, 0x01, 0xfe, 0x09, 0x00, 0x01, 0x02, 0x02, 0xff, - 0x01, 0xb0, 0x03, 0x00, 0x01, 0x2e, 0x01, 0xff, 0x01, 0xf8, 0x0a, 0x00, - 0x01, 0xbf, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x05, 0x01, 0xef, - 0x01, 0xff, 0x01, 0xd0, 0x09, 0x00, 0x01, 0x04, 0x03, 0xff, 0x01, 0xfc, - 0x01, 0xab, 0x01, 0xef, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x20, 0x09, 0x00, - 0x01, 0x2f, 0x01, 0xff, 0x01, 0xaf, 0x05, 0xff, 0x01, 0xd2, 0x09, 0x00, - 0x01, 0x01, 0x01, 0xdf, 0x01, 0xf5, 0x01, 0x04, 0x01, 0xbf, 0x03, 0xff, - 0x01, 0xd6, 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0x70, 0x01, 0x00, - 0x01, 0x01, 0x01, 0x46, 0x01, 0x76, 0x01, 0x52, 0x0c, 0x00, 0x01, 0x28, - 0xff, 0x00, 0x48, 0x00, 0x01, 0x14, 0x0b, 0x44, 0x01, 0x41, 0x06, 0x00, - 0x01, 0x8f, 0x0b, 0xff, 0x01, 0xf3, 0x06, 0x00, 0x01, 0xef, 0x0b, 0xff, - 0x01, 0xf3, 0x05, 0x00, 0x01, 0x05, 0x02, 0xff, 0x01, 0xee, 0x09, 0xff, - 0x01, 0xf3, 0x05, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf5, 0x01, 0x00, - 0x01, 0xdf, 0x01, 0xff, 0x01, 0x63, 0x06, 0x33, 0x01, 0x30, 0x05, 0x00, - 0x01, 0x3f, 0x01, 0xff, 0x01, 0xe0, 0x01, 0x00, 0x01, 0xdf, 0x01, 0xff, - 0x01, 0x40, 0x0c, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x80, 0x01, 0x00, - 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, 0x01, 0x01, 0x02, 0xff, - 0x01, 0x10, 0x01, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, - 0x01, 0x07, 0x01, 0xff, 0x01, 0xfa, 0x02, 0x00, 0x01, 0xdf, 0x01, 0xff, - 0x01, 0x40, 0x0b, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf3, 0x02, 0x00, - 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, 0x01, 0x4f, 0x01, 0xff, - 0x01, 0xd0, 0x02, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, - 0x01, 0xbf, 0x01, 0xff, 0x01, 0x60, 0x02, 0x00, 0x01, 0xdf, 0x01, 0xff, - 0x01, 0x40, 0x0a, 0x00, 0x01, 0x02, 0x01, 0xff, 0x01, 0xfe, 0x03, 0x00, - 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0a, 0x00, 0x01, 0x08, 0x01, 0xff, - 0x01, 0xf9, 0x03, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xed, 0x06, 0xdd, - 0x01, 0x80, 0x03, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x03, 0x00, - 0x01, 0xdf, 0x08, 0xff, 0x01, 0xa0, 0x03, 0x00, 0x01, 0x6f, 0x01, 0xff, - 0x01, 0xb0, 0x03, 0x00, 0x01, 0xdf, 0x08, 0xff, 0x01, 0xa0, 0x03, 0x00, - 0x01, 0xcf, 0x01, 0xff, 0x01, 0x40, 0x03, 0x00, 0x01, 0xdf, 0x01, 0xff, - 0x01, 0xa8, 0x06, 0x88, 0x01, 0x50, 0x02, 0x00, 0x01, 0x03, 0x01, 0xff, - 0x01, 0xfe, 0x04, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x09, 0x00, - 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf7, 0x04, 0x00, 0x01, 0xdf, 0x01, 0xff, - 0x01, 0x40, 0x09, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf4, 0x04, 0x33, - 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x09, 0x00, 0x01, 0x7f, 0x08, 0xff, - 0x01, 0x40, 0x09, 0x00, 0x01, 0xef, 0x08, 0xff, 0x01, 0x40, 0x08, 0x00, - 0x01, 0x05, 0x09, 0xff, 0x01, 0x40, 0x08, 0x00, 0x01, 0x0b, 0x01, 0xff, - 0x01, 0xf7, 0x05, 0x33, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x08, 0x00, - 0x01, 0x2f, 0x01, 0xff, 0x01, 0xe0, 0x05, 0x00, 0x01, 0xdf, 0x01, 0xff, - 0x01, 0x40, 0x08, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, - 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x08, 0x00, 0x02, 0xff, 0x01, 0x20, - 0x05, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x07, 0x00, 0x01, 0x06, - 0x01, 0xff, 0x01, 0xfb, 0x06, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xa8, - 0x06, 0x88, 0x01, 0x85, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf4, 0x06, 0x00, - 0x01, 0xdf, 0x08, 0xff, 0x01, 0xf9, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xe0, - 0x06, 0x00, 0x01, 0xdf, 0x08, 0xff, 0x01, 0xf9, 0x01, 0x8d, 0x01, 0xdd, - 0x01, 0x60, 0x06, 0x00, 0x01, 0xbd, 0x08, 0xdd, 0x01, 0xd8, 0xff, 0x00, - 0xe0, 0x00, 0x01, 0x01, 0x01, 0x34, 0x01, 0x31, 0x06, 0x00, 0x01, 0x12, - 0x01, 0x42, 0x01, 0x10, 0x05, 0x00, 0x01, 0x02, 0x01, 0x7b, 0x01, 0xef, - 0x02, 0xff, 0x01, 0xfb, 0x01, 0x60, 0x02, 0x00, 0x01, 0x03, 0x01, 0x9e, - 0x02, 0xff, 0x01, 0xfd, 0x01, 0x81, 0x04, 0x00, 0x01, 0xbf, 0x05, 0xff, - 0x01, 0xfe, 0x01, 0x40, 0x01, 0x01, 0x01, 0x9f, 0x05, 0xff, 0x01, 0x60, - 0x03, 0x00, 0x01, 0xdf, 0x02, 0xff, 0x01, 0xee, 0x03, 0xff, 0x01, 0xf5, - 0x01, 0x1d, 0x03, 0xff, 0x01, 0xef, 0x02, 0xff, 0x01, 0xf8, 0x03, 0x00, - 0x01, 0xdf, 0x01, 0xb6, 0x01, 0x20, 0x01, 0x00, 0x01, 0x01, 0x01, 0x5d, - 0x02, 0xff, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xe7, 0x01, 0x20, 0x01, 0x00, - 0x01, 0x29, 0x02, 0xff, 0x01, 0x50, 0x02, 0x00, 0x01, 0x71, 0x05, 0x00, - 0x01, 0xaf, 0x02, 0xff, 0x01, 0xfb, 0x01, 0x10, 0x03, 0x00, 0x01, 0x4f, - 0x01, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0x0d, 0x02, 0xff, 0x01, 0xd0, - 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf7, 0x08, 0x00, 0x01, 0x06, - 0x02, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0xef, 0x01, 0xfd, 0x08, 0x00, - 0x01, 0x03, 0x01, 0xff, 0x01, 0xfd, 0x06, 0x00, 0x01, 0x9f, 0x01, 0xff, - 0x04, 0x00, 0x01, 0x02, 0x01, 0x45, 0x02, 0x66, 0x01, 0x67, 0x01, 0xff, - 0x01, 0xf9, 0x06, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x03, 0x00, 0x01, 0x4a, - 0x06, 0xff, 0x01, 0xfb, 0x03, 0x66, 0x01, 0x67, 0x02, 0x77, 0x01, 0xaf, - 0x01, 0xff, 0x02, 0x00, 0x01, 0x1b, 0x10, 0xff, 0x01, 0x00, 0x01, 0x01, - 0x01, 0xdf, 0x02, 0xff, 0x01, 0xcb, 0x01, 0xa8, 0x01, 0x88, 0x01, 0x89, - 0x0a, 0xff, 0x01, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x40, - 0x03, 0x00, 0x01, 0x02, 0x01, 0xff, 0x01, 0xfa, 0x08, 0x77, 0x01, 0x00, - 0x01, 0x1f, 0x01, 0xff, 0x01, 0xd0, 0x04, 0x00, 0x01, 0x03, 0x01, 0xff, - 0x01, 0xf7, 0x09, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0x60, 0x04, 0x00, - 0x01, 0x05, 0x01, 0xff, 0x01, 0xfa, 0x09, 0x00, 0x01, 0x7f, 0x01, 0xff, - 0x01, 0x30, 0x04, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xfe, 0x09, 0x00, - 0x01, 0x7f, 0x01, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0x0f, 0x02, 0xff, - 0x01, 0x50, 0x08, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0x60, 0x04, 0x00, - 0x01, 0x8f, 0x02, 0xff, 0x01, 0xe1, 0x08, 0x00, 0x01, 0x3f, 0x01, 0xff, - 0x01, 0xd0, 0x03, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfe, 0x01, 0xff, - 0x01, 0xfc, 0x01, 0x10, 0x05, 0x00, 0x01, 0x45, 0x01, 0x00, 0x01, 0x0d, - 0x01, 0xff, 0x01, 0xfc, 0x01, 0x20, 0x01, 0x00, 0x01, 0x01, 0x01, 0x9f, - 0x01, 0xff, 0x01, 0xa2, 0x02, 0xff, 0x01, 0xe6, 0x01, 0x10, 0x02, 0x00, - 0x01, 0x02, 0x01, 0x8d, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x05, 0x02, 0xff, - 0x01, 0xfd, 0x01, 0xab, 0x01, 0xcf, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x00, - 0x01, 0x3f, 0x02, 0xff, 0x01, 0xfd, 0x01, 0xba, 0x01, 0xbc, 0x02, 0xff, - 0x01, 0xf8, 0x02, 0x00, 0x01, 0x7f, 0x05, 0xff, 0x01, 0xa0, 0x01, 0x00, - 0x01, 0x02, 0x01, 0xcf, 0x06, 0xff, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x03, - 0x01, 0xbf, 0x03, 0xff, 0x01, 0xb4, 0x03, 0x00, 0x01, 0x05, 0x01, 0xbf, - 0x04, 0xff, 0x01, 0xb7, 0x01, 0x10, 0x03, 0x00, 0x01, 0x01, 0x01, 0x46, - 0x01, 0x76, 0x01, 0x41, 0x06, 0x00, 0x01, 0x35, 0x01, 0x67, 0x01, 0x64, - 0x01, 0x20, 0xff, 0x00, 0x48, 0x00, 0x01, 0x34, 0x03, 0x44, 0x01, 0x43, - 0x01, 0x21, 0x0d, 0x00, 0x01, 0xbf, 0x05, 0xff, 0x01, 0xfe, 0x01, 0xb8, - 0x01, 0x40, 0x0a, 0x00, 0x01, 0xbf, 0x07, 0xff, 0x01, 0xfe, 0x01, 0x81, - 0x09, 0x00, 0x01, 0xbf, 0x08, 0xff, 0x01, 0xfe, 0x01, 0x60, 0x08, 0x00, - 0x01, 0xbf, 0x01, 0xff, 0x01, 0x61, 0x02, 0x11, 0x01, 0x23, 0x01, 0x58, - 0x01, 0xcf, 0x02, 0xff, 0x01, 0xf9, 0x08, 0x00, 0x01, 0xbf, 0x01, 0xff, - 0x01, 0x50, 0x04, 0x00, 0x01, 0x02, 0x01, 0x9f, 0x02, 0xff, 0x01, 0x80, - 0x07, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x05, 0x00, 0x01, 0x04, - 0x01, 0xef, 0x01, 0xff, 0x01, 0xf4, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xff, - 0x01, 0x50, 0x06, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xfd, 0x07, 0x00, - 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x06, 0x00, 0x01, 0x06, 0x02, 0xff, - 0x01, 0x50, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, - 0x01, 0xef, 0x01, 0xff, 0x01, 0xb0, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, - 0x01, 0x50, 0x07, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, - 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, 0x01, 0x3f, 0x01, 0xff, - 0x01, 0xf3, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, - 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf5, 0x04, 0x00, 0x01, 0x23, 0x01, 0x33, - 0x01, 0xcf, 0x01, 0xff, 0x01, 0x73, 0x02, 0x33, 0x01, 0x30, 0x04, 0x00, - 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf6, 0x04, 0x00, 0x01, 0xcf, 0x06, 0xff, - 0x01, 0xf2, 0x04, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf7, 0x04, 0x00, - 0x01, 0xcf, 0x06, 0xff, 0x01, 0xf2, 0x04, 0x00, 0x01, 0x0b, 0x01, 0xff, - 0x01, 0xf9, 0x04, 0x00, 0x01, 0x9b, 0x01, 0xbb, 0x01, 0xef, 0x01, 0xff, - 0x01, 0xdb, 0x02, 0xbb, 0x01, 0xb1, 0x04, 0x00, 0x01, 0x0c, 0x01, 0xff, - 0x01, 0xf8, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, - 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf7, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, - 0x01, 0x50, 0x07, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf6, 0x06, 0x00, - 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, 0x01, 0x1f, 0x01, 0xff, - 0x01, 0xf4, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, - 0x01, 0x5f, 0x01, 0xff, 0x01, 0xf1, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, - 0x01, 0x50, 0x07, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xd0, 0x06, 0x00, - 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x06, 0x00, 0x01, 0x01, 0x02, 0xff, - 0x01, 0x80, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x06, 0x00, - 0x01, 0x0b, 0x02, 0xff, 0x01, 0x20, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, - 0x01, 0x50, 0x06, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0xf9, 0x07, 0x00, - 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x05, 0x00, 0x01, 0x1a, 0x02, 0xff, - 0x01, 0xe1, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x04, 0x00, - 0x01, 0x29, 0x03, 0xff, 0x01, 0x30, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xff, - 0x01, 0xa7, 0x01, 0x77, 0x01, 0x78, 0x01, 0x9a, 0x01, 0xbf, 0x03, 0xff, - 0x01, 0xe3, 0x08, 0x00, 0x01, 0xbf, 0x08, 0xff, 0x01, 0xf9, 0x01, 0x10, - 0x08, 0x00, 0x01, 0xbf, 0x07, 0xff, 0x01, 0xd8, 0x01, 0x10, 0x09, 0x00, - 0x01, 0xad, 0x03, 0xdd, 0x01, 0xdc, 0x01, 0xbb, 0x01, 0xa7, 0x01, 0x41, - 0xff, 0x00, 0x50, 0x00, 0x01, 0x38, 0x01, 0x88, 0x01, 0x81, 0x10, 0x00, - 0x01, 0x0b, 0x01, 0xff, 0x01, 0xfc, 0x03, 0x00, 0x01, 0x5a, 0x01, 0x40, - 0x0c, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xb0, 0x01, 0x04, 0x01, 0xaf, - 0x01, 0xff, 0x01, 0xa0, 0x0c, 0x00, 0x01, 0x1e, 0x01, 0xff, 0x01, 0xfc, - 0x02, 0xff, 0x01, 0xd8, 0x01, 0x20, 0x0c, 0x00, 0x01, 0x07, 0x02, 0xff, - 0x01, 0xfd, 0x01, 0x82, 0x0d, 0x00, 0x01, 0x5a, 0x03, 0xff, 0x01, 0xf4, - 0x0d, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x87, 0x02, 0xff, - 0x01, 0x30, 0x0c, 0x00, 0x01, 0x6f, 0x01, 0xe9, 0x01, 0x30, 0x01, 0x00, - 0x01, 0x8f, 0x01, 0xff, 0x01, 0xe2, 0x0c, 0x00, 0x01, 0x03, 0x03, 0x00, - 0x01, 0x0a, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x10, 0x0e, 0x00, 0x01, 0x23, - 0x01, 0x44, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xb0, 0x0c, 0x00, 0x01, 0x02, - 0x01, 0x9e, 0x04, 0xff, 0x01, 0xf7, 0x0c, 0x00, 0x01, 0x7f, 0x06, 0xff, - 0x01, 0x30, 0x0a, 0x00, 0x01, 0x09, 0x02, 0xff, 0x01, 0xfe, 0x01, 0xcb, - 0x01, 0xdf, 0x02, 0xff, 0x01, 0xd0, 0x0a, 0x00, 0x01, 0x6f, 0x01, 0xff, - 0x01, 0xfb, 0x01, 0x30, 0x02, 0x00, 0x01, 0x4e, 0x01, 0xff, 0x01, 0xf5, - 0x09, 0x00, 0x01, 0x02, 0x02, 0xff, 0x01, 0x70, 0x03, 0x00, 0x01, 0x05, - 0x01, 0xff, 0x01, 0xfd, 0x09, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xfa, - 0x05, 0x00, 0x01, 0xef, 0x01, 0xff, 0x01, 0x20, 0x08, 0x00, 0x01, 0x0f, - 0x01, 0xff, 0x01, 0xf1, 0x05, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x70, - 0x08, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xa0, 0x05, 0x00, 0x01, 0x4f, - 0x01, 0xff, 0x01, 0xb0, 0x08, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x70, - 0x05, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xd0, 0x08, 0x00, 0x01, 0x9f, - 0x01, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, - 0x08, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x30, 0x05, 0x00, 0x01, 0x0e, - 0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x30, - 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x9f, - 0x01, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xe0, - 0x08, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x70, 0x05, 0x00, 0x01, 0x2f, - 0x01, 0xff, 0x01, 0xd0, 0x08, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xa0, - 0x05, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0x90, 0x08, 0x00, 0x01, 0x0f, - 0x01, 0xff, 0x01, 0xf1, 0x05, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, - 0x08, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xf9, 0x04, 0x00, 0x01, 0x05, - 0x01, 0xff, 0x01, 0xfe, 0x09, 0x00, 0x01, 0x02, 0x02, 0xff, 0x01, 0x60, - 0x03, 0x00, 0x01, 0x3e, 0x01, 0xff, 0x01, 0xf6, 0x0a, 0x00, 0x01, 0x7f, - 0x01, 0xff, 0x01, 0xf9, 0x01, 0x20, 0x01, 0x00, 0x01, 0x07, 0x02, 0xff, - 0x01, 0xb0, 0x0a, 0x00, 0x01, 0x09, 0x02, 0xff, 0x01, 0xfd, 0x01, 0xbd, - 0x02, 0xff, 0x01, 0xfd, 0x01, 0x10, 0x0b, 0x00, 0x01, 0x7f, 0x05, 0xff, - 0x01, 0xb0, 0x0c, 0x00, 0x01, 0x02, 0x01, 0xae, 0x03, 0xff, 0x01, 0xb4, - 0x0f, 0x00, 0x01, 0x35, 0x01, 0x65, 0x01, 0x40, 0xff, 0x00, 0x51, 0x00, - 0x02, 0x55, 0x11, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, - 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, - 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x05, 0xff, - 0x01, 0xed, 0x01, 0xa7, 0x01, 0x10, 0x0b, 0x00, 0x07, 0xff, 0x01, 0xfa, - 0x01, 0x10, 0x0a, 0x00, 0x08, 0xff, 0x01, 0xe2, 0x0a, 0x00, 0x02, 0xff, - 0x01, 0x65, 0x01, 0x55, 0x01, 0x56, 0x01, 0x7a, 0x02, 0xff, 0x01, 0xfe, - 0x01, 0x10, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x03, 0x00, 0x01, 0x1b, - 0x02, 0xff, 0x01, 0x80, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, - 0x01, 0xcf, 0x01, 0xff, 0x01, 0xf0, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, - 0x04, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xf3, 0x09, 0x00, 0x02, 0xff, - 0x01, 0x20, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf6, 0x09, 0x00, - 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf7, - 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x0d, 0x01, 0xff, - 0x01, 0xf7, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x0f, - 0x01, 0xff, 0x01, 0xf6, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, - 0x01, 0x4f, 0x01, 0xff, 0x01, 0xf3, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, + 0x01, 0x40, 0xff, 0x00, 0xff, 0x00, 0xa4, 0x00, + + /* 1 ACUTE */ + 0x7b, 0x00, 0x01, 0x9e, 0x01, 0xee, 0x01, 0x50, 0x0f, 0x00, 0x01, 0x05, + 0x01, 0xff, 0x01, 0xf8, 0x10, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xa0, + 0x10, 0x00, 0x01, 0xcf, 0x01, 0xfc, 0x10, 0x00, 0x01, 0x09, 0x01, 0xff, + 0x01, 0xd1, 0x10, 0x00, 0x01, 0x4f, 0x01, 0xfe, 0x01, 0x20, 0x0f, 0x00, + 0x01, 0x01, 0x01, 0xef, 0x01, 0xf3, 0x10, 0x00, 0x01, 0x07, 0x01, 0xaa, + 0x01, 0x40, 0xff, 0x00, 0xff, 0x00, 0xa5, 0x00, + + /* 2 CIRCUMFLEX */ + 0x79, 0x00, 0x01, 0xcf, 0x01, 0xfc, 0x10, 0x00, 0x01, 0x07, 0x02, 0xff, + 0x01, 0x60, 0x0f, 0x00, 0x01, 0x2f, 0x02, 0xff, 0x01, 0xf2, 0x0f, 0x00, + 0x01, 0xcf, 0x01, 0xf6, 0x01, 0x6f, 0x01, 0xfb, 0x0e, 0x00, 0x01, 0x06, + 0x01, 0xff, 0x01, 0xa0, 0x01, 0x0a, 0x01, 0xff, 0x01, 0x60, 0x0d, 0x00, + 0x01, 0x1f, 0x01, 0xfd, 0x01, 0x00, 0x01, 0x01, 0x01, 0xdf, 0x01, 0xf1, + 0x0d, 0x00, 0x01, 0xbf, 0x01, 0xf3, 0x02, 0x00, 0x01, 0x3f, 0x01, 0xfb, + 0x0c, 0x00, 0x01, 0x02, 0x01, 0x99, 0x01, 0x50, 0x02, 0x00, 0x01, 0x05, + 0x01, 0x99, 0x01, 0x20, 0xff, 0x00, 0xff, 0x00, 0xa2, 0x00, + + /* 3 TILDE */ + 0x7c, 0x00, 0x01, 0x11, 0x0d, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xc3, + 0x02, 0x00, 0x01, 0xff, 0x01, 0x80, 0x0c, 0x00, 0x01, 0xaf, 0x02, 0xff, + 0x01, 0x50, 0x01, 0x01, 0x01, 0xff, 0x01, 0x60, 0x0b, 0x00, 0x01, 0x02, + 0x01, 0xff, 0x01, 0xd9, 0x01, 0xff, 0x01, 0xf7, 0x01, 0x07, 0x01, 0xff, + 0x01, 0x40, 0x0b, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0x20, 0x01, 0x3e, + 0x02, 0xff, 0x01, 0xfd, 0x0c, 0x00, 0x01, 0x09, 0x01, 0xfe, 0x01, 0x00, + 0x01, 0x02, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xf4, 0x0c, 0x00, 0x01, 0x07, + 0x01, 0xa8, 0x02, 0x00, 0x01, 0x06, 0x01, 0x98, 0x01, 0x20, 0xff, 0x00, + 0xff, 0x00, 0xb6, 0x00, + + /* 4 DIAERESIS */ + 0x8a, 0x00, 0x02, 0x44, 0x02, 0x00, 0x02, 0x44, 0x0d, 0x00, 0x02, 0xff, + 0x01, 0x10, 0x01, 0x01, 0x02, 0xff, 0x0d, 0x00, 0x02, 0xff, 0x01, 0x10, + 0x01, 0x01, 0x02, 0xff, 0x0d, 0x00, 0x02, 0xff, 0x01, 0x10, 0x01, 0x01, + 0x02, 0xff, 0x0d, 0x00, 0x02, 0xcc, 0x01, 0x10, 0x01, 0x01, 0x02, 0xcc, + 0xff, 0x00, 0xff, 0x00, 0xc9, 0x00, + + /* 5 DOT_ABOVE / DEGREE_SIGN */ + 0x2d, 0x00, 0x01, 0x13, 0x01, 0x30, 0x10, 0x00, 0x01, 0x2b, 0x02, 0xff, + 0x01, 0xa1, 0x0e, 0x00, 0x01, 0x02, 0x01, 0xef, 0x02, 0xff, 0x01, 0xfd, + 0x01, 0x10, 0x0d, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0x94, 0x01, 0x5a, + 0x01, 0xff, 0x01, 0xb0, 0x0d, 0x00, 0x01, 0x4f, 0x01, 0xf7, 0x02, 0x00, + 0x01, 0x9f, 0x01, 0xf2, 0x0d, 0x00, 0x01, 0x8f, 0x01, 0xf0, 0x02, 0x00, + 0x01, 0x2f, 0x01, 0xf6, 0x0d, 0x00, 0x01, 0x8f, 0x01, 0xe0, 0x02, 0x00, + 0x01, 0x0f, 0x01, 0xf7, 0x0d, 0x00, 0x01, 0x7f, 0x01, 0xf2, 0x02, 0x00, + 0x01, 0x4f, 0x01, 0xf5, 0x0d, 0x00, 0x01, 0x2f, 0x01, 0xfc, 0x01, 0x10, + 0x01, 0x02, 0x01, 0xdf, 0x01, 0xf0, 0x0d, 0x00, 0x01, 0x08, 0x01, 0xff, + 0x01, 0xfb, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x60, 0x0e, 0x00, 0x01, 0x9f, + 0x02, 0xff, 0x01, 0xf8, 0x0f, 0x00, 0x01, 0x03, 0x01, 0x9c, 0x01, 0xc9, + 0x01, 0x30, 0xff, 0x00, 0xff, 0x00, 0xa4, 0x00, + + /* 6 CEDILLA */ + 0xff, 0x00, 0xff, 0x00, 0xee, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0x20, + 0x11, 0x00, 0x01, 0xcf, 0x01, 0xc0, 0x11, 0x00, 0x01, 0x3f, 0x01, 0xf6, + 0x11, 0x00, 0x01, 0x0f, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x3f, 0x01, 0xfd, + 0x0e, 0x00, 0x01, 0x07, 0x01, 0xd9, 0x01, 0x89, 0x01, 0xff, 0x01, 0xfb, + 0x0e, 0x00, 0x01, 0x07, 0x03, 0xff, 0x01, 0xf3, 0x0e, 0x00, 0x01, 0x04, + 0x01, 0xbd, 0x01, 0xee, 0x01, 0xd9, 0x01, 0x20, 0x2f, 0x00, + + /* 7 NO_DOT_I */ + 0xff, 0x00, 0x32, 0x00, 0x01, 0x01, 0x01, 0x99, 0x01, 0x96, 0x10, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, + 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, + 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, + 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, + 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, + 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, + 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, + 0x01, 0xf9, 0x10, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0x10, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xf9, 0xcd, 0x00, + +#if ENABLED(TOUCH_UI_UTF8_GERMANIC) + /* 8 SHARP_S */ + 0x8a, 0x00, 0x01, 0x35, 0x01, 0x66, 0x01, 0x52, 0x0e, 0x00, 0x01, 0x03, + 0x01, 0xaf, 0x03, 0xff, 0x01, 0xe7, 0x0d, 0x00, 0x01, 0x7f, 0x05, 0xff, + 0x01, 0xc1, 0x0b, 0x00, 0x01, 0x07, 0x02, 0xff, 0x01, 0xfc, 0x01, 0xaa, + 0x01, 0xdf, 0x01, 0xff, 0x01, 0xfc, 0x0b, 0x00, 0x01, 0x2f, 0x01, 0xff, + 0x01, 0xf9, 0x01, 0x10, 0x01, 0x00, 0x01, 0x02, 0x01, 0xcf, 0x01, 0xff, + 0x01, 0x70, 0x0a, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x80, 0x03, 0x00, + 0x01, 0x0d, 0x01, 0xff, 0x01, 0xe0, 0x0a, 0x00, 0x01, 0xef, 0x01, 0xff, + 0x04, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xf3, 0x09, 0x00, 0x01, 0x02, + 0x01, 0xff, 0x01, 0xfb, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf7, + 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf9, 0x03, 0x00, 0x01, 0x03, + 0x01, 0x9e, 0x01, 0xff, 0x01, 0xf8, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xf8, 0x02, 0x00, 0x01, 0x01, 0x01, 0xaf, 0x02, 0xff, 0x01, 0xd7, + 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x1d, + 0x01, 0xff, 0x01, 0xfc, 0x01, 0x50, 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xf8, 0x02, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x70, 0x0b, 0x00, + 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x01, 0x01, 0xff, + 0x01, 0xfa, 0x0c, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, + 0x01, 0x05, 0x01, 0xff, 0x01, 0xf4, 0x0c, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xf8, 0x01, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf4, 0x0c, 0x00, + 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x05, 0x01, 0xff, + 0x01, 0xf9, 0x0c, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x00, + 0x01, 0x02, 0x02, 0xff, 0x01, 0x50, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xf8, 0x02, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0xf8, 0x0b, 0x00, + 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x1d, 0x02, 0xff, + 0x01, 0xd3, 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, + 0x01, 0x01, 0x01, 0xcf, 0x02, 0xff, 0x01, 0x70, 0x09, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xf8, 0x03, 0x00, 0x01, 0x07, 0x02, 0xff, 0x01, 0xfb, + 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x2b, + 0x02, 0xff, 0x01, 0xb0, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, + 0x05, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xf6, 0x08, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfd, + 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xdf, + 0x01, 0xff, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, + 0x01, 0xbf, 0x01, 0xff, 0x01, 0x10, 0x07, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xf8, 0x06, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x08, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfd, + 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x01, 0x02, 0x01, 0x84, + 0x03, 0x00, 0x01, 0x2d, 0x01, 0xff, 0x01, 0xf8, 0x08, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xf8, 0x01, 0x02, 0x01, 0xff, 0x01, 0xec, 0x01, 0xa9, + 0x01, 0xac, 0x02, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xf8, 0x01, 0x02, 0x05, 0xff, 0x01, 0xfe, 0x01, 0x20, 0x08, 0x00, + 0x01, 0x03, 0x01, 0xee, 0x01, 0xe7, 0x01, 0x01, 0x01, 0xbf, 0x03, 0xff, + 0x01, 0xfe, 0x01, 0x80, 0x0e, 0x00, 0x01, 0x35, 0x01, 0x78, 0x01, 0x76, + 0x01, 0x30, 0xb4, 0x00, +#endif + +#if ENABLED(TOUCH_UI_UTF8_SCANDINAVIAN) + /* 9 LRG_O_STROKE */ + 0x93, 0x00, 0x01, 0x40, 0x0a, 0x00, 0x01, 0x47, 0x01, 0x9a, 0x01, 0xba, + 0x01, 0x95, 0x01, 0x10, 0x02, 0x00, 0x01, 0x07, 0x01, 0xf8, 0x08, 0x00, + 0x01, 0x02, 0x01, 0xaf, 0x04, 0xff, 0x01, 0xfc, 0x01, 0x50, 0x01, 0x00, + 0x01, 0x5f, 0x01, 0xff, 0x01, 0x30, 0x07, 0x00, 0x01, 0x8f, 0x06, 0xff, + 0x01, 0xfc, 0x01, 0x23, 0x01, 0xff, 0x01, 0xf6, 0x07, 0x00, 0x01, 0x1c, + 0x03, 0xff, 0x01, 0xca, 0x01, 0x9b, 0x01, 0xdf, 0x02, 0xff, 0x01, 0xfe, + 0x01, 0xff, 0x01, 0x80, 0x07, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0xfd, + 0x01, 0x50, 0x02, 0x00, 0x01, 0x02, 0x01, 0x9f, 0x02, 0xff, 0x01, 0xfa, + 0x07, 0x00, 0x01, 0x09, 0x02, 0xff, 0x01, 0x90, 0x04, 0x00, 0x01, 0x03, + 0x01, 0xef, 0x01, 0xff, 0x01, 0xf3, 0x07, 0x00, 0x01, 0x5f, 0x01, 0xff, + 0x01, 0xf9, 0x06, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0xfc, 0x07, 0x00, + 0x01, 0xdf, 0x01, 0xff, 0x01, 0xc0, 0x05, 0x00, 0x01, 0x06, 0x03, 0xff, + 0x01, 0x60, 0x05, 0x00, 0x01, 0x04, 0x02, 0xff, 0x01, 0x30, 0x05, 0x00, + 0x01, 0x4f, 0x01, 0xff, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xc0, 0x05, 0x00, + 0x01, 0x0b, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x02, 0x01, 0xef, + 0x01, 0xf7, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xf3, 0x05, 0x00, 0x01, 0x0f, + 0x01, 0xff, 0x01, 0xf6, 0x05, 0x00, 0x01, 0x1d, 0x01, 0xff, 0x01, 0xa0, + 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf8, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xff, + 0x01, 0xf2, 0x05, 0x00, 0x01, 0xcf, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x09, + 0x01, 0xff, 0x01, 0xfb, 0x05, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xe0, + 0x04, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xd1, 0x01, 0x00, 0x01, 0x06, + 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0xc0, + 0x04, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0x20, 0x01, 0x00, 0x01, 0x03, + 0x02, 0xff, 0x05, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0xb0, 0x03, 0x00, + 0x01, 0x05, 0x01, 0xff, 0x01, 0xf4, 0x02, 0x00, 0x01, 0x02, 0x02, 0xff, + 0x01, 0x10, 0x04, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xa0, 0x03, 0x00, + 0x01, 0x3f, 0x01, 0xff, 0x01, 0x60, 0x02, 0x00, 0x01, 0x01, 0x02, 0xff, + 0x01, 0x30, 0x04, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xa0, 0x02, 0x00, + 0x01, 0x01, 0x01, 0xef, 0x01, 0xf8, 0x03, 0x00, 0x01, 0x02, 0x02, 0xff, + 0x01, 0x20, 0x04, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0xb0, 0x02, 0x00, + 0x01, 0x0d, 0x01, 0xff, 0x01, 0xb0, 0x03, 0x00, 0x01, 0x03, 0x02, 0xff, + 0x01, 0x10, 0x04, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0xc0, 0x02, 0x00, + 0x01, 0xbf, 0x01, 0xfd, 0x04, 0x00, 0x01, 0x04, 0x02, 0xff, 0x05, 0x00, + 0x01, 0x6f, 0x01, 0xff, 0x01, 0xe0, 0x01, 0x00, 0x01, 0x08, 0x01, 0xff, + 0x01, 0xe1, 0x04, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfe, 0x05, 0x00, + 0x01, 0x2f, 0x01, 0xff, 0x01, 0xf2, 0x01, 0x00, 0x01, 0x6f, 0x01, 0xff, + 0x01, 0x30, 0x04, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xfa, 0x05, 0x00, + 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf6, 0x01, 0x04, 0x01, 0xff, 0x01, 0xf5, + 0x05, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf7, 0x05, 0x00, 0x01, 0x09, + 0x01, 0xff, 0x01, 0xfc, 0x01, 0x2e, 0x01, 0xff, 0x01, 0x70, 0x05, 0x00, + 0x01, 0x5f, 0x01, 0xff, 0x01, 0xf2, 0x05, 0x00, 0x01, 0x03, 0x02, 0xff, + 0x01, 0xef, 0x01, 0xfa, 0x06, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0xb0, + 0x06, 0x00, 0x01, 0xcf, 0x02, 0xff, 0x01, 0xc0, 0x05, 0x00, 0x01, 0x06, + 0x02, 0xff, 0x01, 0x40, 0x06, 0x00, 0x01, 0x2f, 0x02, 0xff, 0x01, 0x20, + 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xfb, 0x07, 0x00, 0x01, 0x0b, + 0x02, 0xff, 0x01, 0xd2, 0x04, 0x00, 0x01, 0x06, 0x02, 0xff, 0x01, 0xe1, + 0x07, 0x00, 0x01, 0x5f, 0x03, 0xff, 0x01, 0x93, 0x02, 0x00, 0x01, 0x05, + 0x01, 0xcf, 0x02, 0xff, 0x01, 0x30, 0x06, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xfb, 0x03, 0xff, 0x01, 0xfd, 0x01, 0xde, 0x03, 0xff, 0x01, 0xe3, + 0x07, 0x00, 0x01, 0x1e, 0x01, 0xff, 0x01, 0x80, 0x01, 0x4d, 0x06, 0xff, + 0x01, 0xfa, 0x01, 0x10, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xfb, 0x02, 0x00, + 0x01, 0x5c, 0x04, 0xff, 0x01, 0xe9, 0x01, 0x30, 0x08, 0x00, 0x01, 0x1c, + 0x01, 0xd0, 0x03, 0x00, 0x01, 0x04, 0x01, 0x67, 0x01, 0x86, 0x01, 0x53, + 0x0b, 0x00, 0x01, 0x10, 0xa8, 0x00, + + /* 10 SML_O_STROKE */ + 0xff, 0x00, 0x15, 0x00, 0x01, 0x02, 0x01, 0x20, 0x0c, 0x00, 0x01, 0x02, + 0x01, 0x32, 0x01, 0x10, 0x02, 0x00, 0x01, 0x1d, 0x01, 0xe3, 0x0a, 0x00, + 0x01, 0x01, 0x01, 0x7c, 0x02, 0xff, 0x01, 0xfd, 0x01, 0x82, 0x01, 0x00, + 0x01, 0xcf, 0x01, 0xf7, 0x0a, 0x00, 0x01, 0x6e, 0x05, 0xff, 0x01, 0x89, + 0x01, 0xff, 0x01, 0xa0, 0x09, 0x00, 0x01, 0x08, 0x07, 0xff, 0x01, 0xfc, + 0x0a, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x50, 0x01, 0x00, + 0x01, 0x3a, 0x02, 0xff, 0x01, 0xf1, 0x09, 0x00, 0x01, 0x01, 0x02, 0xff, + 0x01, 0x90, 0x03, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf5, 0x09, 0x00, + 0x01, 0x08, 0x01, 0xff, 0x01, 0xfc, 0x03, 0x00, 0x01, 0x01, 0x01, 0xdf, + 0x01, 0xff, 0x01, 0xfd, 0x09, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf3, + 0x03, 0x00, 0x01, 0x0b, 0x03, 0xff, 0x01, 0x30, 0x08, 0x00, 0x01, 0x3f, + 0x01, 0xff, 0x01, 0xd0, 0x03, 0x00, 0x01, 0x9f, 0x01, 0xfa, 0x01, 0x8f, + 0x01, 0xff, 0x01, 0x80, 0x08, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0x80, + 0x02, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xc0, 0x01, 0x3f, 0x01, 0xff, + 0x01, 0xb0, 0x08, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x50, 0x02, 0x00, + 0x01, 0x3f, 0x01, 0xfe, 0x01, 0x10, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xe0, + 0x08, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x40, 0x01, 0x00, 0x01, 0x02, + 0x01, 0xef, 0x01, 0xf3, 0x01, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, + 0x08, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x30, 0x01, 0x00, 0x01, 0x0d, + 0x01, 0xff, 0x01, 0x50, 0x01, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf0, + 0x08, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x30, 0x01, 0x00, 0x01, 0xbf, + 0x01, 0xf8, 0x02, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, + 0x01, 0x9f, 0x01, 0xff, 0x01, 0x40, 0x01, 0x08, 0x01, 0xff, 0x01, 0xb0, + 0x02, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0x60, 0x01, 0x5f, 0x01, 0xfd, 0x03, 0x00, 0x01, 0x3f, + 0x01, 0xff, 0x01, 0xc0, 0x08, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xa3, + 0x01, 0xff, 0x01, 0xe2, 0x03, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0x90, + 0x08, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xfe, 0x01, 0xff, 0x01, 0x40, + 0x03, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x08, 0x00, 0x01, 0x0a, + 0x02, 0xff, 0x01, 0xf6, 0x03, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xfe, + 0x09, 0x00, 0x01, 0x02, 0x02, 0xff, 0x01, 0xb0, 0x03, 0x00, 0x01, 0x2e, + 0x01, 0xff, 0x01, 0xf8, 0x0a, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0xf7, + 0x02, 0x00, 0x01, 0x05, 0x01, 0xef, 0x01, 0xff, 0x01, 0xd0, 0x09, 0x00, + 0x01, 0x04, 0x03, 0xff, 0x01, 0xfc, 0x01, 0xab, 0x01, 0xef, 0x01, 0xff, + 0x01, 0xfe, 0x01, 0x20, 0x09, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xaf, + 0x05, 0xff, 0x01, 0xd2, 0x09, 0x00, 0x01, 0x01, 0x01, 0xdf, 0x01, 0xf5, + 0x01, 0x04, 0x01, 0xbf, 0x03, 0xff, 0x01, 0xd6, 0x0a, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0x70, 0x01, 0x00, 0x01, 0x01, 0x01, 0x46, 0x01, 0x76, + 0x01, 0x52, 0x0c, 0x00, 0x01, 0x28, 0xa9, 0x00, + + /* 11 LRG_AE */ + 0x9e, 0x00, 0x01, 0x14, 0x0b, 0x44, 0x01, 0x41, 0x06, 0x00, 0x01, 0x8f, + 0x0b, 0xff, 0x01, 0xf3, 0x06, 0x00, 0x01, 0xef, 0x0b, 0xff, 0x01, 0xf3, + 0x05, 0x00, 0x01, 0x05, 0x02, 0xff, 0x01, 0xee, 0x09, 0xff, 0x01, 0xf3, + 0x05, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf5, 0x01, 0x00, 0x01, 0xdf, + 0x01, 0xff, 0x01, 0x63, 0x06, 0x33, 0x01, 0x30, 0x05, 0x00, 0x01, 0x3f, + 0x01, 0xff, 0x01, 0xe0, 0x01, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, + 0x0c, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x80, 0x01, 0x00, 0x01, 0xdf, + 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x10, + 0x01, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, 0x01, 0x07, + 0x01, 0xff, 0x01, 0xfa, 0x02, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, + 0x0b, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf3, 0x02, 0x00, 0x01, 0xdf, + 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xd0, + 0x02, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, 0x01, 0xbf, + 0x01, 0xff, 0x01, 0x60, 0x02, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, + 0x0a, 0x00, 0x01, 0x02, 0x01, 0xff, 0x01, 0xfe, 0x03, 0x00, 0x01, 0xdf, + 0x01, 0xff, 0x01, 0x40, 0x0a, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xf9, + 0x03, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xed, 0x06, 0xdd, 0x01, 0x80, + 0x03, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x03, 0x00, 0x01, 0xdf, + 0x08, 0xff, 0x01, 0xa0, 0x03, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xb0, + 0x03, 0x00, 0x01, 0xdf, 0x08, 0xff, 0x01, 0xa0, 0x03, 0x00, 0x01, 0xcf, + 0x01, 0xff, 0x01, 0x40, 0x03, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xa8, + 0x06, 0x88, 0x01, 0x50, 0x02, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfe, + 0x04, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x09, 0x00, 0x01, 0x0a, + 0x01, 0xff, 0x01, 0xf7, 0x04, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, + 0x09, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf4, 0x04, 0x33, 0x01, 0xdf, + 0x01, 0xff, 0x01, 0x40, 0x09, 0x00, 0x01, 0x7f, 0x08, 0xff, 0x01, 0x40, + 0x09, 0x00, 0x01, 0xef, 0x08, 0xff, 0x01, 0x40, 0x08, 0x00, 0x01, 0x05, + 0x09, 0xff, 0x01, 0x40, 0x08, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xf7, + 0x05, 0x33, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x08, 0x00, 0x01, 0x2f, + 0x01, 0xff, 0x01, 0xe0, 0x05, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, + 0x08, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x80, 0x05, 0x00, 0x01, 0xdf, + 0x01, 0xff, 0x01, 0x40, 0x08, 0x00, 0x02, 0xff, 0x01, 0x20, 0x05, 0x00, + 0x01, 0xdf, 0x01, 0xff, 0x01, 0x40, 0x07, 0x00, 0x01, 0x06, 0x01, 0xff, + 0x01, 0xfb, 0x06, 0x00, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xa8, 0x06, 0x88, + 0x01, 0x85, 0x01, 0x0d, 0x01, 0xff, 0x01, 0xf4, 0x06, 0x00, 0x01, 0xdf, + 0x08, 0xff, 0x01, 0xf9, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xe0, 0x06, 0x00, + 0x01, 0xdf, 0x08, 0xff, 0x01, 0xf9, 0x01, 0x8d, 0x01, 0xdd, 0x01, 0x60, + 0x06, 0x00, 0x01, 0xbd, 0x08, 0xdd, 0x01, 0xd8, 0xbe, 0x00, + + /* 12 SML_AE */ + 0xff, 0x00, 0x22, 0x00, 0x01, 0x01, 0x01, 0x34, 0x01, 0x31, 0x06, 0x00, + 0x01, 0x12, 0x01, 0x42, 0x01, 0x10, 0x05, 0x00, 0x01, 0x02, 0x01, 0x7b, + 0x01, 0xef, 0x02, 0xff, 0x01, 0xfb, 0x01, 0x60, 0x02, 0x00, 0x01, 0x03, + 0x01, 0x9e, 0x02, 0xff, 0x01, 0xfd, 0x01, 0x81, 0x04, 0x00, 0x01, 0xbf, + 0x05, 0xff, 0x01, 0xfe, 0x01, 0x40, 0x01, 0x01, 0x01, 0x9f, 0x05, 0xff, + 0x01, 0x60, 0x03, 0x00, 0x01, 0xdf, 0x02, 0xff, 0x01, 0xee, 0x03, 0xff, + 0x01, 0xf5, 0x01, 0x1d, 0x03, 0xff, 0x01, 0xef, 0x02, 0xff, 0x01, 0xf8, + 0x03, 0x00, 0x01, 0xdf, 0x01, 0xb6, 0x01, 0x30, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x5d, 0x02, 0xff, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xe7, 0x01, 0x20, + 0x01, 0x00, 0x01, 0x29, 0x02, 0xff, 0x01, 0x50, 0x02, 0x00, 0x01, 0x71, + 0x05, 0x00, 0x01, 0xaf, 0x02, 0xff, 0x01, 0xfb, 0x01, 0x10, 0x03, 0x00, + 0x01, 0x4f, 0x01, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0x0d, 0x02, 0xff, + 0x01, 0xd0, 0x04, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf7, 0x08, 0x00, + 0x01, 0x06, 0x02, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0xef, 0x01, 0xfd, + 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfd, 0x06, 0x00, 0x01, 0x9f, + 0x01, 0xff, 0x04, 0x00, 0x01, 0x02, 0x01, 0x45, 0x02, 0x66, 0x01, 0x67, + 0x01, 0xff, 0x01, 0xf9, 0x06, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x03, 0x00, + 0x01, 0x4a, 0x06, 0xff, 0x01, 0xfb, 0x03, 0x66, 0x01, 0x67, 0x02, 0x77, + 0x01, 0xaf, 0x01, 0xff, 0x02, 0x00, 0x01, 0x1b, 0x10, 0xff, 0x01, 0x00, + 0x01, 0x01, 0x01, 0xdf, 0x02, 0xff, 0x01, 0xca, 0x01, 0x98, 0x01, 0x88, + 0x01, 0x89, 0x0a, 0xff, 0x01, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xfd, + 0x01, 0x40, 0x03, 0x00, 0x01, 0x02, 0x01, 0xff, 0x01, 0xfa, 0x08, 0x77, + 0x01, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xd0, 0x04, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xf7, 0x09, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0x70, + 0x04, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xfa, 0x09, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xfe, + 0x09, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0x0f, + 0x02, 0xff, 0x01, 0x50, 0x08, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0x60, + 0x04, 0x00, 0x01, 0x8f, 0x02, 0xff, 0x01, 0xe1, 0x08, 0x00, 0x01, 0x3f, + 0x01, 0xff, 0x01, 0xd0, 0x03, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfe, + 0x01, 0xff, 0x01, 0xfc, 0x01, 0x10, 0x05, 0x00, 0x01, 0x45, 0x01, 0x00, + 0x01, 0x0d, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x20, 0x01, 0x00, 0x01, 0x01, + 0x01, 0x9f, 0x01, 0xff, 0x01, 0xa2, 0x02, 0xff, 0x01, 0xe6, 0x01, 0x10, + 0x02, 0x00, 0x01, 0x02, 0x01, 0x8d, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x05, + 0x02, 0xff, 0x01, 0xfd, 0x01, 0xab, 0x01, 0xcf, 0x01, 0xff, 0x01, 0xfc, + 0x01, 0x00, 0x01, 0x3f, 0x02, 0xff, 0x01, 0xfd, 0x01, 0xba, 0x01, 0xbc, + 0x02, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x7f, 0x05, 0xff, 0x01, 0xa0, + 0x01, 0x00, 0x01, 0x02, 0x01, 0xcf, 0x06, 0xff, 0x01, 0xf7, 0x02, 0x00, + 0x01, 0x03, 0x01, 0xbf, 0x03, 0xff, 0x01, 0xb4, 0x03, 0x00, 0x01, 0x05, + 0x01, 0xbf, 0x04, 0xff, 0x01, 0xb7, 0x01, 0x10, 0x03, 0x00, 0x01, 0x01, + 0x01, 0x46, 0x01, 0x76, 0x01, 0x41, 0x06, 0x00, 0x01, 0x35, 0x01, 0x67, + 0x01, 0x64, 0x01, 0x20, 0xad, 0x00, + + /* 13 LRG_ETH */ + 0x9a, 0x00, 0x01, 0x34, 0x03, 0x44, 0x01, 0x43, 0x01, 0x21, 0x0d, 0x00, + 0x01, 0xbf, 0x05, 0xff, 0x01, 0xfe, 0x01, 0xb8, 0x01, 0x40, 0x0a, 0x00, + 0x01, 0xbf, 0x07, 0xff, 0x01, 0xfe, 0x01, 0x81, 0x09, 0x00, 0x01, 0xbf, + 0x08, 0xff, 0x01, 0xfe, 0x01, 0x60, 0x08, 0x00, 0x01, 0xbf, 0x01, 0xff, + 0x01, 0x61, 0x02, 0x11, 0x01, 0x23, 0x01, 0x58, 0x01, 0xcf, 0x02, 0xff, + 0x01, 0xf9, 0x08, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x04, 0x00, + 0x01, 0x02, 0x01, 0x9f, 0x02, 0xff, 0x01, 0x80, 0x07, 0x00, 0x01, 0xbf, + 0x01, 0xff, 0x01, 0x50, 0x05, 0x00, 0x01, 0x04, 0x01, 0xef, 0x01, 0xff, + 0x01, 0xf4, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x06, 0x00, + 0x01, 0x2f, 0x01, 0xff, 0x01, 0xfd, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xff, + 0x01, 0x50, 0x06, 0x00, 0x01, 0x06, 0x02, 0xff, 0x01, 0x50, 0x06, 0x00, + 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, 0x01, 0xef, 0x01, 0xff, + 0x01, 0xb0, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, + 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf0, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, + 0x01, 0x50, 0x07, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xf3, 0x06, 0x00, + 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, 0x01, 0x0f, 0x01, 0xff, + 0x01, 0xf5, 0x04, 0x00, 0x01, 0x23, 0x01, 0x33, 0x01, 0xcf, 0x01, 0xff, + 0x01, 0x73, 0x02, 0x33, 0x01, 0x30, 0x04, 0x00, 0x01, 0x0d, 0x01, 0xff, + 0x01, 0xf6, 0x04, 0x00, 0x01, 0xcf, 0x06, 0xff, 0x01, 0xf2, 0x04, 0x00, + 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf7, 0x04, 0x00, 0x01, 0xcf, 0x06, 0xff, + 0x01, 0xf2, 0x04, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xf9, 0x04, 0x00, + 0x01, 0x9b, 0x01, 0xbb, 0x01, 0xef, 0x01, 0xff, 0x01, 0xdb, 0x02, 0xbb, + 0x01, 0xb1, 0x04, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, + 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, 0x01, 0x0d, 0x01, 0xff, + 0x01, 0xf7, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, + 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf6, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, + 0x01, 0x50, 0x07, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf4, 0x06, 0x00, + 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, 0x01, 0x5f, 0x01, 0xff, + 0x01, 0xf1, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, + 0x01, 0xaf, 0x01, 0xff, 0x01, 0xd0, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, + 0x01, 0x50, 0x06, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x80, 0x06, 0x00, + 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x06, 0x00, 0x01, 0x0b, 0x02, 0xff, + 0x01, 0x20, 0x06, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x06, 0x00, + 0x01, 0x8f, 0x01, 0xff, 0x01, 0xf9, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xff, + 0x01, 0x50, 0x05, 0x00, 0x01, 0x0a, 0x02, 0xff, 0x01, 0xe1, 0x07, 0x00, + 0x01, 0xbf, 0x01, 0xff, 0x01, 0x50, 0x04, 0x00, 0x01, 0x29, 0x03, 0xff, + 0x01, 0x30, 0x07, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0xa7, 0x01, 0x77, + 0x01, 0x78, 0x01, 0x9a, 0x01, 0xbf, 0x03, 0xff, 0x01, 0xe3, 0x08, 0x00, + 0x01, 0xbf, 0x08, 0xff, 0x01, 0xf9, 0x01, 0x10, 0x08, 0x00, 0x01, 0xbf, + 0x07, 0xff, 0x01, 0xd8, 0x01, 0x10, 0x09, 0x00, 0x01, 0xad, 0x03, 0xdd, + 0x01, 0xdc, 0x01, 0xcb, 0x01, 0xa7, 0x01, 0x41, 0xc7, 0x00, + + /* 14 SML_ETH */ + 0x88, 0x00, 0x01, 0x38, 0x01, 0x88, 0x01, 0x81, 0x10, 0x00, 0x01, 0x0b, + 0x01, 0xff, 0x01, 0xfc, 0x03, 0x00, 0x01, 0x5a, 0x01, 0x40, 0x0c, 0x00, + 0x01, 0xdf, 0x01, 0xff, 0x01, 0xb0, 0x01, 0x04, 0x01, 0xaf, 0x01, 0xff, + 0x01, 0xa0, 0x0c, 0x00, 0x01, 0x1e, 0x01, 0xff, 0x01, 0xfc, 0x02, 0xff, + 0x01, 0xd8, 0x01, 0x20, 0x0c, 0x00, 0x01, 0x07, 0x02, 0xff, 0x01, 0xfd, + 0x01, 0x82, 0x0d, 0x00, 0x01, 0x5a, 0x03, 0xff, 0x01, 0xf4, 0x0d, 0x00, + 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x87, 0x02, 0xff, 0x01, 0x30, + 0x0c, 0x00, 0x01, 0x6f, 0x01, 0xe9, 0x01, 0x30, 0x01, 0x00, 0x01, 0x8f, + 0x01, 0xff, 0x01, 0xe2, 0x0c, 0x00, 0x01, 0x03, 0x03, 0x00, 0x01, 0x0a, + 0x01, 0xff, 0x01, 0xfd, 0x01, 0x10, 0x0e, 0x00, 0x01, 0x23, 0x01, 0x44, + 0x01, 0xdf, 0x01, 0xff, 0x01, 0xb0, 0x0c, 0x00, 0x01, 0x02, 0x01, 0x9e, + 0x04, 0xff, 0x01, 0xf7, 0x0c, 0x00, 0x01, 0x7f, 0x06, 0xff, 0x01, 0x30, + 0x0a, 0x00, 0x01, 0x09, 0x02, 0xff, 0x01, 0xfe, 0x01, 0xcb, 0x01, 0xdf, + 0x02, 0xff, 0x01, 0xd0, 0x0a, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xfb, + 0x01, 0x30, 0x02, 0x00, 0x01, 0x4e, 0x01, 0xff, 0x01, 0xf5, 0x09, 0x00, + 0x01, 0x02, 0x02, 0xff, 0x01, 0x70, 0x03, 0x00, 0x01, 0x05, 0x01, 0xff, + 0x01, 0xfd, 0x09, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xfa, 0x05, 0x00, + 0x01, 0xef, 0x01, 0xff, 0x01, 0x20, 0x08, 0x00, 0x01, 0x0f, 0x01, 0xff, + 0x01, 0xf1, 0x05, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x70, 0x08, 0x00, + 0x01, 0x4f, 0x01, 0xff, 0x01, 0xa0, 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, + 0x01, 0xb0, 0x08, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x70, 0x05, 0x00, + 0x01, 0x1f, 0x01, 0xff, 0x01, 0xd0, 0x08, 0x00, 0x01, 0x9f, 0x01, 0xff, + 0x01, 0x40, 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, + 0x01, 0xaf, 0x01, 0xff, 0x01, 0x30, 0x05, 0x00, 0x01, 0x0e, 0x01, 0xff, + 0x01, 0xf0, 0x08, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x30, 0x05, 0x00, + 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x9f, 0x01, 0xff, + 0x01, 0x40, 0x05, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xe0, 0x08, 0x00, + 0x01, 0x8f, 0x01, 0xff, 0x01, 0x70, 0x05, 0x00, 0x01, 0x2f, 0x01, 0xff, + 0x01, 0xd0, 0x08, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xa0, 0x05, 0x00, + 0x01, 0x6f, 0x01, 0xff, 0x01, 0x90, 0x08, 0x00, 0x01, 0x0f, 0x01, 0xff, + 0x01, 0xf1, 0x05, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x08, 0x00, + 0x01, 0x09, 0x01, 0xff, 0x01, 0xf9, 0x04, 0x00, 0x01, 0x05, 0x01, 0xff, + 0x01, 0xfe, 0x09, 0x00, 0x01, 0x02, 0x02, 0xff, 0x01, 0x60, 0x03, 0x00, + 0x01, 0x3e, 0x01, 0xff, 0x01, 0xf6, 0x0a, 0x00, 0x01, 0x7f, 0x01, 0xff, + 0x01, 0xf9, 0x01, 0x20, 0x01, 0x00, 0x01, 0x07, 0x02, 0xff, 0x01, 0xb0, + 0x0a, 0x00, 0x01, 0x09, 0x02, 0xff, 0x01, 0xfd, 0x01, 0xbd, 0x02, 0xff, + 0x01, 0xfd, 0x01, 0x10, 0x0b, 0x00, 0x01, 0x7f, 0x05, 0xff, 0x01, 0xb0, + 0x0c, 0x00, 0x01, 0x02, 0x01, 0xae, 0x03, 0xff, 0x01, 0xb4, 0x0f, 0x00, + 0x01, 0x35, 0x01, 0x65, 0x01, 0x40, 0xb6, 0x00, + + /* 15 LRG_THORN */ + 0x9a, 0x00, 0x02, 0x55, 0x11, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, + 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, + 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, + 0x05, 0xff, 0x01, 0xed, 0x01, 0xa7, 0x01, 0x10, 0x0b, 0x00, 0x07, 0xff, + 0x01, 0xfa, 0x01, 0x10, 0x0a, 0x00, 0x08, 0xff, 0x01, 0xe2, 0x0a, 0x00, + 0x02, 0xff, 0x01, 0x65, 0x01, 0x55, 0x01, 0x56, 0x01, 0x7a, 0x02, 0xff, + 0x01, 0xfe, 0x01, 0x10, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x03, 0x00, + 0x01, 0x1b, 0x02, 0xff, 0x01, 0x80, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0xf0, 0x09, 0x00, 0x02, 0xff, - 0x01, 0x20, 0x03, 0x00, 0x01, 0x1b, 0x02, 0xff, 0x01, 0x80, 0x09, 0x00, - 0x02, 0xff, 0x01, 0x65, 0x02, 0x55, 0x01, 0x7a, 0x02, 0xff, 0x01, 0xfe, - 0x01, 0x10, 0x09, 0x00, 0x08, 0xff, 0x01, 0xe2, 0x0a, 0x00, 0x07, 0xff, - 0x01, 0xfa, 0x01, 0x10, 0x0a, 0x00, 0x05, 0xff, 0x01, 0xed, 0x01, 0xa7, - 0x01, 0x10, 0x0b, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, - 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, - 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, - 0x01, 0x20, 0x10, 0x00, 0x02, 0xcc, 0x01, 0x10, 0xff, 0x00, 0x53, 0x00, - 0x01, 0x02, 0x01, 0x99, 0x01, 0x94, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, - 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, - 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, - 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, - 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, - 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00, - 0x01, 0x13, 0x01, 0x54, 0x01, 0x20, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xff, - 0x01, 0xf7, 0x01, 0x00, 0x01, 0x5c, 0x02, 0xff, 0x01, 0xfd, 0x01, 0x70, - 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x01, 0x0a, 0x04, 0xff, - 0x01, 0xfd, 0x01, 0x20, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, - 0x01, 0xaf, 0x01, 0xff, 0x01, 0xec, 0x01, 0xdf, 0x02, 0xff, 0x01, 0xe1, - 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfd, 0x01, 0xff, 0x01, 0xc3, - 0x02, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xfc, 0x09, 0x00, 0x01, 0x03, - 0x02, 0xff, 0x01, 0xfa, 0x03, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xff, - 0x01, 0x60, 0x08, 0x00, 0x01, 0x03, 0x02, 0xff, 0x01, 0xe0, 0x04, 0x00, - 0x01, 0x5f, 0x01, 0xff, 0x01, 0xd0, 0x08, 0x00, 0x01, 0x03, 0x02, 0xff, - 0x01, 0x60, 0x04, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf3, 0x08, 0x00, - 0x01, 0x03, 0x02, 0xff, 0x05, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf7, - 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x02, - 0x01, 0xff, 0x01, 0xfb, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf9, - 0x06, 0x00, 0x01, 0xff, 0x01, 0xfd, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, - 0x01, 0xf8, 0x06, 0x00, 0x01, 0xef, 0x01, 0xfe, 0x08, 0x00, 0x01, 0x03, - 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xef, 0x01, 0xff, 0x08, 0x00, - 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xef, 0x01, 0xfe, - 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf9, 0x06, 0x00, 0x01, 0xff, - 0x01, 0xfd, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, - 0x01, 0x02, 0x01, 0xff, 0x01, 0xfb, 0x08, 0x00, 0x01, 0x03, 0x02, 0xff, - 0x05, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf8, 0x08, 0x00, 0x01, 0x03, - 0x02, 0xff, 0x01, 0x60, 0x04, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf3, - 0x08, 0x00, 0x01, 0x03, 0x02, 0xff, 0x01, 0xd0, 0x04, 0x00, 0x01, 0x5f, - 0x01, 0xff, 0x01, 0xd0, 0x08, 0x00, 0x01, 0x03, 0x02, 0xff, 0x01, 0xfa, - 0x03, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xff, 0x01, 0x60, 0x08, 0x00, - 0x01, 0x03, 0x01, 0xff, 0x01, 0xfd, 0x01, 0xff, 0x01, 0xc3, 0x02, 0x00, - 0x01, 0x6e, 0x01, 0xff, 0x01, 0xfc, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, - 0x01, 0xf7, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xec, 0x01, 0xcf, 0x02, 0xff, - 0x01, 0xe2, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x01, 0x0b, - 0x04, 0xff, 0x01, 0xfd, 0x01, 0x20, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, - 0x01, 0xf7, 0x01, 0x00, 0x01, 0x6c, 0x02, 0xff, 0x01, 0xfe, 0x01, 0x70, - 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x23, - 0x01, 0x54, 0x01, 0x20, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, + 0x01, 0x20, 0x04, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xf3, 0x09, 0x00, + 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf6, + 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x0d, 0x01, 0xff, + 0x01, 0xf7, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x0d, + 0x01, 0xff, 0x01, 0xf7, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, 0x04, 0x00, + 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf6, 0x09, 0x00, 0x02, 0xff, 0x01, 0x20, + 0x04, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xf3, 0x09, 0x00, 0x02, 0xff, + 0x01, 0x20, 0x04, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0xf0, 0x09, 0x00, + 0x02, 0xff, 0x01, 0x20, 0x03, 0x00, 0x01, 0x1b, 0x02, 0xff, 0x01, 0x80, + 0x09, 0x00, 0x02, 0xff, 0x01, 0x65, 0x02, 0x55, 0x01, 0x7a, 0x02, 0xff, + 0x01, 0xfe, 0x01, 0x10, 0x09, 0x00, 0x08, 0xff, 0x01, 0xe2, 0x0a, 0x00, + 0x07, 0xff, 0x01, 0xfa, 0x01, 0x10, 0x0a, 0x00, 0x05, 0xff, 0x01, 0xed, + 0x01, 0xa7, 0x01, 0x10, 0x0b, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, + 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, + 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, + 0x02, 0xff, 0x01, 0x20, 0x10, 0x00, 0x02, 0xcc, 0x01, 0x10, 0xcc, 0x00, + + /* 16 SML_THORN */ + 0x86, 0x00, 0x01, 0x02, 0x01, 0x99, 0x01, 0x94, 0x10, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, - 0x10, 0x00, 0x01, 0x01, 0x01, 0x66, 0x01, 0x63, 0xff, 0x00, 0x6c, 0x00, - 0x01, 0x30, 0x03, 0x00, 0x01, 0x02, 0x0d, 0x00, 0x01, 0x08, 0x01, 0xa0, - 0x02, 0x00, 0x01, 0x01, 0x01, 0xc6, 0x0d, 0x00, 0x01, 0xaf, 0x01, 0xa0, - 0x02, 0x00, 0x01, 0x1d, 0x01, 0xf6, 0x0c, 0x00, 0x01, 0x1c, 0x01, 0xff, - 0x01, 0xa0, 0x01, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xf6, 0x0b, 0x00, - 0x01, 0x01, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x50, 0x01, 0x00, 0x01, 0x3e, - 0x01, 0xff, 0x01, 0xe2, 0x0b, 0x00, 0x01, 0x2e, 0x01, 0xff, 0x01, 0xf4, - 0x01, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x20, 0x0a, 0x00, - 0x01, 0x04, 0x01, 0xef, 0x01, 0xfe, 0x01, 0x30, 0x01, 0x00, 0x01, 0x6f, - 0x01, 0xff, 0x01, 0xd1, 0x0b, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xd2, - 0x01, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfb, 0x0b, 0x00, 0x01, 0x06, - 0x01, 0xff, 0x01, 0xfc, 0x01, 0x10, 0x01, 0x00, 0x01, 0xaf, 0x01, 0xff, - 0x01, 0xa0, 0x0b, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xd0, 0x02, 0x00, - 0x01, 0xff, 0x01, 0xfa, 0x0c, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf8, - 0x02, 0x00, 0x01, 0xef, 0x01, 0xff, 0x01, 0x50, 0x0c, 0x00, 0x01, 0xaf, - 0x01, 0xff, 0x01, 0xa0, 0x01, 0x00, 0x01, 0x1c, 0x01, 0xff, 0x01, 0xf6, - 0x0c, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfb, 0x02, 0x00, 0x01, 0xbf, - 0x01, 0xff, 0x01, 0x90, 0x0c, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xd1, - 0x01, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xfa, 0x0c, 0x00, 0x01, 0x05, - 0x01, 0xff, 0x01, 0xfd, 0x01, 0x20, 0x01, 0x00, 0x01, 0x8f, 0x01, 0xff, - 0x01, 0xb0, 0x0c, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xa0, 0x01, 0x00, - 0x01, 0x07, 0x01, 0xff, 0x01, 0xf6, 0x0c, 0x00, 0x01, 0x02, 0x01, 0xef, - 0x01, 0xa0, 0x02, 0x00, 0x01, 0x5f, 0x01, 0xf6, 0x0d, 0x00, 0x01, 0x1d, - 0x01, 0xa0, 0x02, 0x00, 0x01, 0x04, 0x01, 0xe6, 0x0d, 0x00, 0x01, 0x01, - 0x01, 0x60, 0x03, 0x00, 0x01, 0x24, 0xff, 0x00, 0xff, 0x00, 0x46, 0x00, - 0x01, 0x20, 0x03, 0x00, 0x01, 0x20, 0x0d, 0x00, 0x01, 0x01, 0x01, 0xe3, - 0x03, 0x00, 0x01, 0x5d, 0x01, 0x10, 0x0c, 0x00, 0x01, 0x01, 0x01, 0xff, - 0x01, 0x50, 0x02, 0x00, 0x01, 0x5f, 0x01, 0xe2, 0x0c, 0x00, 0x01, 0x01, - 0x01, 0xff, 0x01, 0xf6, 0x02, 0x00, 0x01, 0x5f, 0x01, 0xfe, 0x01, 0x30, - 0x0c, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x80, 0x01, 0x00, 0x01, 0x2e, - 0x01, 0xff, 0x01, 0xf5, 0x0c, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xfa, - 0x01, 0x00, 0x01, 0x01, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x60, 0x0c, 0x00, - 0x01, 0x8f, 0x01, 0xff, 0x01, 0xb0, 0x01, 0x00, 0x01, 0x0b, 0x01, 0xff, - 0x01, 0xf9, 0x0c, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x10, - 0x01, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xa0, 0x0c, 0x00, 0x01, 0x5f, - 0x01, 0xff, 0x01, 0xd1, 0x01, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfb, - 0x0c, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xf5, 0x02, 0x00, 0x01, 0x9f, - 0x01, 0xff, 0x01, 0x10, 0x0b, 0x00, 0x01, 0x2d, 0x01, 0xff, 0x01, 0xf3, - 0x01, 0x00, 0x01, 0x04, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x10, 0x0a, 0x00, - 0x01, 0x03, 0x01, 0xef, 0x01, 0xff, 0x01, 0x40, 0x01, 0x00, 0x01, 0x5f, - 0x01, 0xff, 0x01, 0xd2, 0x0b, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xe3, - 0x01, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x10, 0x0a, 0x00, - 0x01, 0x05, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x10, 0x01, 0x00, 0x01, 0x9f, - 0x01, 0xff, 0x01, 0xb0, 0x0b, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xc1, - 0x01, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf9, 0x0b, 0x00, 0x01, 0x01, - 0x01, 0xff, 0x01, 0xfa, 0x02, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0x70, - 0x0b, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0x90, 0x02, 0x00, 0x01, 0x5f, - 0x01, 0xf6, 0x0c, 0x00, 0x01, 0x01, 0x01, 0xf8, 0x03, 0x00, 0x01, 0x5f, - 0x01, 0x40, 0x0c, 0x00, 0x01, 0x01, 0x01, 0x50, 0x03, 0x00, 0x01, 0x43, - 0xff, 0x00, 0xff, 0x00, 0x38, 0x00, 0x01, 0xad, 0x01, 0xdd, 0x01, 0x40, + 0x02, 0x00, 0x01, 0x13, 0x01, 0x54, 0x01, 0x20, 0x0b, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xf7, 0x01, 0x00, 0x01, 0x5c, 0x02, 0xff, 0x01, 0xfd, + 0x01, 0x70, 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x01, 0x0b, + 0x04, 0xff, 0x01, 0xfd, 0x01, 0x20, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xf7, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xec, 0x01, 0xdf, 0x02, 0xff, + 0x01, 0xe1, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfd, 0x01, 0xff, + 0x01, 0xc3, 0x02, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xfc, 0x09, 0x00, + 0x01, 0x03, 0x02, 0xff, 0x01, 0xfa, 0x03, 0x00, 0x01, 0x02, 0x01, 0xef, + 0x01, 0xff, 0x01, 0x60, 0x08, 0x00, 0x01, 0x03, 0x02, 0xff, 0x01, 0xe0, + 0x04, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xd0, 0x08, 0x00, 0x01, 0x03, + 0x02, 0xff, 0x01, 0x60, 0x04, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf3, + 0x08, 0x00, 0x01, 0x03, 0x02, 0xff, 0x05, 0x00, 0x01, 0x06, 0x01, 0xff, + 0x01, 0xf7, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x05, 0x00, + 0x01, 0x02, 0x01, 0xff, 0x01, 0xfb, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xf9, 0x06, 0x00, 0x01, 0xff, 0x01, 0xfd, 0x08, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xef, 0x01, 0xfe, 0x08, 0x00, + 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xef, 0x01, 0xff, + 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xef, + 0x01, 0xfe, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf9, 0x06, 0x00, + 0x01, 0xff, 0x01, 0xfd, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, + 0x05, 0x00, 0x01, 0x02, 0x01, 0xff, 0x01, 0xfb, 0x08, 0x00, 0x01, 0x03, + 0x02, 0xff, 0x05, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf8, 0x08, 0x00, + 0x01, 0x03, 0x02, 0xff, 0x01, 0x60, 0x04, 0x00, 0x01, 0x0c, 0x01, 0xff, + 0x01, 0xf3, 0x08, 0x00, 0x01, 0x03, 0x02, 0xff, 0x01, 0xd0, 0x04, 0x00, + 0x01, 0x5f, 0x01, 0xff, 0x01, 0xd0, 0x08, 0x00, 0x01, 0x03, 0x02, 0xff, + 0x01, 0xfa, 0x03, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xff, 0x01, 0x60, + 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfd, 0x01, 0xff, 0x01, 0xb3, + 0x02, 0x00, 0x01, 0x6e, 0x01, 0xff, 0x01, 0xfc, 0x09, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xf7, 0x01, 0xbf, 0x01, 0xff, 0x01, 0xec, 0x01, 0xcf, + 0x02, 0xff, 0x01, 0xe2, 0x09, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, + 0x01, 0x0b, 0x04, 0xff, 0x01, 0xfd, 0x01, 0x20, 0x09, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xf7, 0x01, 0x00, 0x01, 0x6c, 0x02, 0xff, 0x01, 0xfe, + 0x01, 0x70, 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00, + 0x01, 0x23, 0x01, 0x54, 0x01, 0x20, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, + 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, + 0x01, 0x03, 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, + 0x01, 0xf7, 0x10, 0x00, 0x01, 0x01, 0x01, 0x66, 0x01, 0x63, 0x22, 0x00, +#endif // TOUCH_UI_UTF8_SCANDINAVIAN + +#if ENABLED(TOUCH_UI_UTF8_PUNCTUATION) + /* 17 LEFT_DBL_QUOTE */ + 0xff, 0x00, 0x4a, 0x00, 0x01, 0x30, 0x03, 0x00, 0x01, 0x02, 0x0d, 0x00, + 0x01, 0x08, 0x01, 0xa0, 0x02, 0x00, 0x01, 0x01, 0x01, 0xc6, 0x0d, 0x00, + 0x01, 0xaf, 0x01, 0xa0, 0x02, 0x00, 0x01, 0x1d, 0x01, 0xf6, 0x0c, 0x00, + 0x01, 0x1c, 0x01, 0xff, 0x01, 0xa0, 0x01, 0x00, 0x01, 0x02, 0x01, 0xef, + 0x01, 0xf6, 0x0b, 0x00, 0x01, 0x01, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x50, + 0x01, 0x00, 0x01, 0x3e, 0x01, 0xff, 0x01, 0xe2, 0x0b, 0x00, 0x01, 0x2e, + 0x01, 0xff, 0x01, 0xf4, 0x01, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xfd, + 0x01, 0x20, 0x0a, 0x00, 0x01, 0x04, 0x01, 0xef, 0x01, 0xfe, 0x01, 0x30, + 0x01, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xd1, 0x0b, 0x00, 0x01, 0x5f, + 0x01, 0xff, 0x01, 0xd2, 0x01, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfb, + 0x0b, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x10, 0x01, 0x00, + 0x01, 0xaf, 0x01, 0xff, 0x01, 0xa0, 0x0b, 0x00, 0x01, 0x0c, 0x01, 0xff, + 0x01, 0xd0, 0x02, 0x00, 0x01, 0xff, 0x01, 0xfa, 0x0c, 0x00, 0x01, 0x0a, + 0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0xef, 0x01, 0xff, 0x01, 0x50, + 0x0c, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xa0, 0x01, 0x00, 0x01, 0x1c, + 0x01, 0xff, 0x01, 0xf6, 0x0c, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xfb, + 0x02, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x90, 0x0c, 0x00, 0x01, 0x6f, + 0x01, 0xff, 0x01, 0xd1, 0x01, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xfa, + 0x0c, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x20, 0x01, 0x00, + 0x01, 0x8f, 0x01, 0xff, 0x01, 0xb0, 0x0c, 0x00, 0x01, 0x4f, 0x01, 0xff, + 0x01, 0xa0, 0x01, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf6, 0x0c, 0x00, + 0x01, 0x02, 0x01, 0xef, 0x01, 0xa0, 0x02, 0x00, 0x01, 0x5f, 0x01, 0xf6, + 0x0d, 0x00, 0x01, 0x1d, 0x01, 0xa0, 0x02, 0x00, 0x01, 0x04, 0x01, 0xe6, + 0x0d, 0x00, 0x01, 0x01, 0x01, 0x60, 0x03, 0x00, 0x01, 0x24, 0xff, 0x00, + + /* 18 RIGHT_DBL_QUOTE */ + 0xff, 0x00, 0x46, 0x00, 0x01, 0x20, 0x03, 0x00, 0x01, 0x20, 0x0d, 0x00, + 0x01, 0x01, 0x01, 0xe3, 0x03, 0x00, 0x01, 0x5d, 0x01, 0x10, 0x0c, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0x50, 0x02, 0x00, 0x01, 0x5f, 0x01, 0xe2, + 0x0c, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf6, 0x02, 0x00, 0x01, 0x5f, + 0x01, 0xfe, 0x01, 0x30, 0x0c, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x80, + 0x01, 0x00, 0x01, 0x2e, 0x01, 0xff, 0x01, 0xf5, 0x0c, 0x00, 0x01, 0x0a, + 0x01, 0xff, 0x01, 0xfa, 0x01, 0x00, 0x01, 0x01, 0x01, 0xcf, 0x01, 0xff, + 0x01, 0x60, 0x0c, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0xb0, 0x01, 0x00, + 0x01, 0x0b, 0x01, 0xff, 0x01, 0xf9, 0x0c, 0x00, 0x01, 0x06, 0x01, 0xff, + 0x01, 0xfc, 0x01, 0x10, 0x01, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xa0, + 0x0c, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xd1, 0x01, 0x00, 0x01, 0x08, + 0x01, 0xff, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xf5, + 0x02, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x10, 0x0b, 0x00, 0x01, 0x2d, + 0x01, 0xff, 0x01, 0xf3, 0x01, 0x00, 0x01, 0x04, 0x01, 0xff, 0x01, 0xfe, + 0x01, 0x10, 0x0a, 0x00, 0x01, 0x03, 0x01, 0xef, 0x01, 0xff, 0x01, 0x40, + 0x01, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xd2, 0x0b, 0x00, 0x01, 0x4f, + 0x01, 0xff, 0x01, 0xe3, 0x01, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfc, + 0x01, 0x10, 0x0a, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x10, + 0x01, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0xb0, 0x0b, 0x00, 0x01, 0x6f, + 0x01, 0xff, 0x01, 0xc1, 0x01, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf9, + 0x0b, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xfa, 0x02, 0x00, 0x01, 0x5f, + 0x01, 0xff, 0x01, 0x70, 0x0b, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0x90, + 0x02, 0x00, 0x01, 0x5f, 0x01, 0xf6, 0x0c, 0x00, 0x01, 0x01, 0x01, 0xf8, + 0x03, 0x00, 0x01, 0x5f, 0x01, 0x40, 0x0c, 0x00, 0x01, 0x01, 0x01, 0x50, + 0x03, 0x00, 0x01, 0x43, 0xff, 0x00, 0x04, 0x00, + + /* 19 INV_EXCLAMATION */ + 0xff, 0x00, 0x34, 0x00, 0x01, 0xad, 0x01, 0xdd, 0x01, 0x40, 0x10, 0x00, + 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, + 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, + 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0x34, 0x01, 0x44, + 0x01, 0x10, 0x49, 0x00, 0x01, 0x02, 0x01, 0x22, 0x11, 0x00, 0x01, 0x6f, + 0x01, 0xff, 0x11, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x11, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0x10, 0x10, 0x00, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x20, + 0x10, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x30, 0x10, 0x00, 0x01, 0xaf, + 0x01, 0xff, 0x01, 0x30, 0x10, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x40, + 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, + 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, + 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, + 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, + 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, + 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0x34, - 0x01, 0x44, 0x01, 0x10, 0x49, 0x00, 0x01, 0x02, 0x01, 0x22, 0x11, 0x00, - 0x01, 0x6f, 0x01, 0xff, 0x11, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x11, 0x00, - 0x01, 0x7f, 0x01, 0xff, 0x01, 0x10, 0x10, 0x00, 0x01, 0x8f, 0x01, 0xff, - 0x01, 0x20, 0x10, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x30, 0x10, 0x00, - 0x01, 0xaf, 0x01, 0xff, 0x01, 0x30, 0x10, 0x00, 0x01, 0xbf, 0x01, 0xff, - 0x01, 0x40, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, - 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, - 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, - 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, - 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, - 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, - 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, - 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, - 0x01, 0x50, 0x10, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, - 0x01, 0x34, 0x01, 0x44, 0x01, 0x10, 0xff, 0x00, 0x69, 0x00, 0x02, 0xdd, - 0x11, 0x00, 0x02, 0xff, 0x11, 0x00, 0x02, 0xff, 0x11, 0x00, 0x02, 0xff, - 0x11, 0x00, 0x02, 0xff, 0x11, 0x00, 0x02, 0x44, 0x37, 0x00, 0x01, 0xbc, - 0x01, 0xcb, 0x11, 0x00, 0x01, 0xef, 0x01, 0xfe, 0x11, 0x00, 0x01, 0xef, - 0x01, 0xfe, 0x11, 0x00, 0x01, 0xef, 0x01, 0xfe, 0x11, 0x00, 0x01, 0xff, - 0x01, 0xfd, 0x10, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfb, 0x10, 0x00, - 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0xaf, 0x01, 0xff, - 0x01, 0xd0, 0x0f, 0x00, 0x01, 0x0a, 0x02, 0xff, 0x01, 0x30, 0x0f, 0x00, - 0x01, 0xaf, 0x01, 0xff, 0x01, 0xf4, 0x0f, 0x00, 0x01, 0x09, 0x02, 0xff, - 0x01, 0x40, 0x0f, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0xf4, 0x0f, 0x00, - 0x01, 0x03, 0x02, 0xff, 0x01, 0x40, 0x0f, 0x00, 0x01, 0x0a, 0x01, 0xff, - 0x01, 0xf8, 0x10, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, - 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf0, 0x10, 0x00, 0x01, 0x0f, 0x01, 0xff, - 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, - 0x01, 0x05, 0x01, 0xd0, 0x0a, 0x00, 0x01, 0x08, 0x02, 0xff, 0x01, 0x70, - 0x02, 0x00, 0x01, 0x05, 0x01, 0xcf, 0x01, 0xf0, 0x0a, 0x00, 0x01, 0x01, - 0x01, 0xef, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x98, 0x01, 0x8b, 0x02, 0xff, - 0x01, 0xf0, 0x0b, 0x00, 0x01, 0x3f, 0x06, 0xff, 0x01, 0xc0, 0x0b, 0x00, - 0x01, 0x02, 0x01, 0xcf, 0x04, 0xff, 0x01, 0xc5, 0x0d, 0x00, 0x01, 0x03, - 0x01, 0x8b, 0x01, 0xcc, 0x01, 0xb9, 0x01, 0x62, 0xe2, 0x00, 0x01, 0x01, - 0x01, 0x32, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, - 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, - 0x01, 0xfc, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x11, 0x00, 0x01, 0x39, - 0x01, 0xfd, 0x01, 0x42, 0x0e, 0x00, 0x01, 0x05, 0x01, 0xbf, 0x03, 0xff, - 0x01, 0xfb, 0x01, 0x50, 0x0b, 0x00, 0x01, 0x03, 0x01, 0xcf, 0x05, 0xff, - 0x01, 0xf6, 0x0b, 0x00, 0x01, 0x4f, 0x02, 0xff, 0x02, 0xfe, 0x01, 0xce, - 0x01, 0xff, 0x01, 0xf6, 0x0a, 0x00, 0x01, 0x02, 0x02, 0xff, 0x01, 0xe6, - 0x01, 0x05, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x38, 0x01, 0xe6, 0x0a, 0x00, - 0x01, 0x0c, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x10, 0x01, 0x05, 0x01, 0xfc, - 0x02, 0x00, 0x01, 0x02, 0x0a, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xe1, - 0x01, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0d, 0x00, 0x01, 0xcf, 0x01, 0xff, - 0x01, 0x60, 0x01, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0d, 0x00, 0x02, 0xff, - 0x02, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0c, 0x00, 0x01, 0x04, 0x01, 0xff, - 0x01, 0xfb, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0c, 0x00, 0x01, 0x06, - 0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0c, 0x00, - 0x01, 0x07, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfb, - 0x0c, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xf6, 0x02, 0x00, 0x01, 0x05, + 0x01, 0x44, 0x01, 0x10, 0x33, 0x00, + + /* 20 INV_QUESTION */ + 0xff, 0x00, 0x36, 0x00, 0x02, 0xdd, 0x11, 0x00, 0x02, 0xff, 0x11, 0x00, + 0x02, 0xff, 0x11, 0x00, 0x02, 0xff, 0x11, 0x00, 0x02, 0xff, 0x11, 0x00, + 0x02, 0x44, 0x37, 0x00, 0x01, 0xbc, 0x01, 0xcb, 0x11, 0x00, 0x01, 0xef, + 0x01, 0xfe, 0x11, 0x00, 0x01, 0xef, 0x01, 0xfe, 0x11, 0x00, 0x01, 0xef, + 0x01, 0xfe, 0x11, 0x00, 0x01, 0xff, 0x01, 0xfd, 0x10, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xfb, 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xf6, + 0x10, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xd0, 0x0f, 0x00, 0x01, 0x0a, + 0x02, 0xff, 0x01, 0x30, 0x0f, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xf4, + 0x0f, 0x00, 0x01, 0x09, 0x02, 0xff, 0x01, 0x40, 0x0f, 0x00, 0x01, 0x7f, + 0x01, 0xff, 0x01, 0xf4, 0x0f, 0x00, 0x01, 0x03, 0x02, 0xff, 0x01, 0x40, + 0x0f, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf8, 0x10, 0x00, 0x01, 0x0f, + 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xf0, + 0x10, 0x00, 0x01, 0x0f, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, + 0x01, 0xff, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x05, 0x01, 0xd0, 0x0a, 0x00, + 0x01, 0x08, 0x02, 0xff, 0x01, 0x70, 0x02, 0x00, 0x01, 0x05, 0x01, 0xcf, + 0x01, 0xf0, 0x0a, 0x00, 0x01, 0x01, 0x01, 0xef, 0x01, 0xff, 0x01, 0xfe, + 0x01, 0x98, 0x01, 0x8b, 0x02, 0xff, 0x01, 0xf0, 0x0b, 0x00, 0x01, 0x3f, + 0x06, 0xff, 0x01, 0xc0, 0x0b, 0x00, 0x01, 0x02, 0x01, 0xcf, 0x04, 0xff, + 0x01, 0xc5, 0x0d, 0x00, 0x01, 0x03, 0x01, 0x8b, 0x01, 0xcc, 0x01, 0xb9, + 0x01, 0x62, 0x31, 0x00, +#endif // TOUCH_UI_UTF8_PUNCTUATION + +#if ENABLED(TOUCH_UI_UTF8_CURRENCY) + /* 21 CENT_SIGN */ + 0xb1, 0x00, 0x01, 0x01, 0x01, 0x32, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, + 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, + 0x11, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfc, + 0x11, 0x00, 0x01, 0x39, 0x01, 0xfd, 0x01, 0x42, 0x0e, 0x00, 0x01, 0x05, + 0x01, 0xbf, 0x03, 0xff, 0x01, 0xfb, 0x01, 0x50, 0x0b, 0x00, 0x01, 0x03, + 0x01, 0xcf, 0x05, 0xff, 0x01, 0xf6, 0x0b, 0x00, 0x01, 0x4f, 0x02, 0xff, + 0x02, 0xfe, 0x01, 0xce, 0x01, 0xff, 0x01, 0xf6, 0x0a, 0x00, 0x01, 0x02, + 0x02, 0xff, 0x01, 0xe6, 0x01, 0x05, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x38, + 0x01, 0xe6, 0x0a, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x10, + 0x01, 0x05, 0x01, 0xfc, 0x02, 0x00, 0x01, 0x02, 0x0a, 0x00, 0x01, 0x5f, + 0x01, 0xff, 0x01, 0xe1, 0x01, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0d, 0x00, + 0x01, 0xcf, 0x01, 0xff, 0x01, 0x60, 0x01, 0x00, 0x01, 0x05, 0x01, 0xfc, + 0x0d, 0x00, 0x02, 0xff, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0c, 0x00, + 0x01, 0x04, 0x01, 0xff, 0x01, 0xfb, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfc, + 0x0c, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0c, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf7, 0x02, 0x00, - 0x01, 0x05, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf9, - 0x02, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x03, 0x01, 0xff, - 0x01, 0xfc, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x0d, 0x00, 0x02, 0xff, - 0x01, 0x10, 0x01, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x0d, 0x00, 0x01, 0xaf, - 0x01, 0xff, 0x01, 0x80, 0x01, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x0d, 0x00, - 0x01, 0x4f, 0x01, 0xff, 0x01, 0xf3, 0x01, 0x00, 0x01, 0x05, 0x01, 0xfb, - 0x0d, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x30, 0x01, 0x05, - 0x01, 0xfb, 0x02, 0x00, 0x01, 0x33, 0x0a, 0x00, 0x01, 0x01, 0x01, 0xef, - 0x01, 0xff, 0x01, 0xf9, 0x01, 0x35, 0x01, 0xfb, 0x01, 0x02, 0x01, 0x6c, - 0x01, 0xf6, 0x0b, 0x00, 0x01, 0x2d, 0x06, 0xff, 0x01, 0xf6, 0x0b, 0x00, - 0x01, 0x01, 0x01, 0x9f, 0x05, 0xff, 0x01, 0xf5, 0x0c, 0x00, 0x01, 0x02, - 0x01, 0x8d, 0x03, 0xff, 0x01, 0xc7, 0x01, 0x20, 0x0e, 0x00, 0x01, 0x06, - 0x01, 0xfc, 0x01, 0x20, 0x10, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, - 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, - 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, 0xf5, 0x00, - 0x01, 0x6b, 0x01, 0xdf, 0x01, 0xfd, 0x01, 0xc9, 0x01, 0x40, 0x0d, 0x00, - 0x01, 0x6e, 0x05, 0xff, 0x01, 0x30, 0x0b, 0x00, 0x01, 0x07, 0x06, 0xff, - 0x01, 0x30, 0x0b, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x85, - 0x01, 0x34, 0x01, 0x7b, 0x01, 0xff, 0x01, 0x30, 0x0b, 0x00, 0x01, 0xaf, - 0x01, 0xff, 0x01, 0xc1, 0x03, 0x00, 0x01, 0x18, 0x01, 0x30, 0x0a, 0x00, - 0x01, 0x01, 0x02, 0xff, 0x01, 0x30, 0x0f, 0x00, 0x01, 0x04, 0x01, 0xff, - 0x01, 0xfd, 0x10, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfa, 0x10, 0x00, - 0x01, 0x08, 0x01, 0xff, 0x01, 0xf8, 0x10, 0x00, 0x01, 0x09, 0x01, 0xff, - 0x01, 0xf7, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, - 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, - 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, - 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x0e, 0x00, 0x01, 0x0a, 0x07, 0xff, - 0x01, 0xf4, 0x0a, 0x00, 0x01, 0x0a, 0x07, 0xff, 0x01, 0xf4, 0x0a, 0x00, - 0x01, 0x08, 0x01, 0xdd, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xfe, 0x03, 0xdd, - 0x01, 0xd4, 0x0c, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, - 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, - 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, - 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, - 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, - 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, - 0x01, 0xf6, 0x0e, 0x00, 0x01, 0x4b, 0x01, 0xbb, 0x01, 0xbe, 0x01, 0xff, - 0x01, 0xfd, 0x05, 0xbb, 0x01, 0x70, 0x08, 0x00, 0x01, 0x6f, 0x09, 0xff, - 0x01, 0xa0, 0x08, 0x00, 0x01, 0x6f, 0x09, 0xff, 0x01, 0xa0, 0x08, 0x00, - 0x01, 0x4a, 0x09, 0xaa, 0x01, 0x60, 0xff, 0x00, 0xd2, 0x00, 0x01, 0x30, - 0x07, 0x00, 0x01, 0x01, 0x01, 0x40, 0x08, 0x00, 0x01, 0x0b, 0x01, 0xf5, - 0x07, 0x00, 0x01, 0x1d, 0x01, 0xf4, 0x08, 0x00, 0x01, 0xbf, 0x01, 0xff, - 0x01, 0x40, 0x05, 0x00, 0x01, 0x01, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x30, - 0x07, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xf4, 0x01, 0x00, 0x01, 0x6b, - 0x01, 0xdd, 0x01, 0xc8, 0x01, 0x20, 0x01, 0x1d, 0x01, 0xff, 0x01, 0xfa, - 0x08, 0x00, 0x01, 0x05, 0x02, 0xff, 0x01, 0x8e, 0x03, 0xff, 0x01, 0xfa, - 0x01, 0xdf, 0x01, 0xff, 0x01, 0xa0, 0x09, 0x00, 0x01, 0x5f, 0x07, 0xff, - 0x01, 0xfa, 0x0a, 0x00, 0x01, 0x05, 0x02, 0xff, 0x01, 0xe9, 0x01, 0x55, - 0x01, 0x7c, 0x02, 0xff, 0x01, 0xa0, 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, - 0x01, 0xfb, 0x01, 0x10, 0x02, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0xa0, - 0x0a, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xc0, 0x03, 0x00, 0x01, 0x07, - 0x01, 0xff, 0x01, 0xf2, 0x0a, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x30, - 0x04, 0x00, 0x01, 0xdf, 0x01, 0xf7, 0x0a, 0x00, 0x01, 0x4f, 0x01, 0xfd, - 0x05, 0x00, 0x01, 0x8f, 0x01, 0xfa, 0x0a, 0x00, 0x01, 0x6f, 0x01, 0xfc, - 0x05, 0x00, 0x01, 0x6f, 0x01, 0xfc, 0x0a, 0x00, 0x01, 0x5f, 0x01, 0xfc, - 0x05, 0x00, 0x01, 0x7f, 0x01, 0xfb, 0x0a, 0x00, 0x01, 0x3f, 0x01, 0xff, - 0x01, 0x10, 0x04, 0x00, 0x01, 0xbf, 0x01, 0xf8, 0x0a, 0x00, 0x01, 0x0e, - 0x01, 0xff, 0x01, 0x80, 0x03, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xf3, - 0x0a, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf5, 0x03, 0x00, 0x01, 0x1d, - 0x01, 0xff, 0x01, 0xc0, 0x0a, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x92, - 0x01, 0x00, 0x01, 0x16, 0x01, 0xef, 0x01, 0xff, 0x01, 0x60, 0x0a, 0x00, - 0x01, 0x1d, 0x03, 0xff, 0x01, 0xfe, 0x03, 0xff, 0x01, 0xf4, 0x09, 0x00, - 0x01, 0x01, 0x01, 0xdf, 0x05, 0xff, 0x01, 0xfe, 0x02, 0xff, 0x01, 0x40, - 0x08, 0x00, 0x01, 0x1d, 0x01, 0xff, 0x01, 0xfa, 0x01, 0x06, 0x01, 0xdf, - 0x01, 0xff, 0x01, 0xfe, 0x01, 0x81, 0x01, 0x5f, 0x01, 0xff, 0x01, 0xf4, - 0x08, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0xa0, 0x01, 0x00, 0x01, 0x01, - 0x01, 0x44, 0x01, 0x20, 0x01, 0x00, 0x01, 0x05, 0x02, 0xff, 0x01, 0x20, - 0x07, 0x00, 0x01, 0x4f, 0x01, 0xfa, 0x07, 0x00, 0x01, 0x4f, 0x01, 0xf8, - 0x08, 0x00, 0x01, 0x05, 0x01, 0xa0, 0x07, 0x00, 0x01, 0x05, 0x01, 0x80, - 0xff, 0x00, 0x84, 0x00, 0x01, 0x01, 0x01, 0x88, 0x01, 0x85, 0x07, 0x00, - 0x01, 0x38, 0x01, 0x88, 0x01, 0x40, 0x07, 0x00, 0x01, 0xcf, 0x01, 0xff, - 0x01, 0x10, 0x06, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x10, 0x07, 0x00, - 0x01, 0x3f, 0x01, 0xff, 0x01, 0x90, 0x05, 0x00, 0x01, 0x05, 0x01, 0xff, - 0x01, 0xf8, 0x08, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xf2, 0x05, 0x00, - 0x01, 0x0d, 0x01, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0x02, 0x01, 0xff, - 0x01, 0xfa, 0x05, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0x60, 0x09, 0x00, - 0x01, 0xaf, 0x01, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0xef, 0x01, 0xfd, - 0x0a, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xc0, 0x03, 0x00, 0x01, 0x07, - 0x01, 0xff, 0x01, 0xf5, 0x0a, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xf4, - 0x03, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0xc0, 0x0a, 0x00, 0x01, 0x01, - 0x01, 0xef, 0x01, 0xfd, 0x03, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x40, - 0x0b, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0x50, 0x01, 0x00, 0x01, 0x02, - 0x01, 0xff, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xe0, - 0x01, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf3, 0x0c, 0x00, 0x01, 0x06, - 0x01, 0xff, 0x01, 0xf7, 0x01, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xa0, - 0x0a, 0x00, 0x01, 0x2a, 0x02, 0xaa, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x10, - 0x01, 0xbf, 0x01, 0xff, 0x01, 0xca, 0x01, 0xaa, 0x01, 0xa5, 0x08, 0x00, - 0x01, 0x4f, 0x04, 0xff, 0x01, 0x83, 0x04, 0xff, 0x01, 0xf8, 0x08, 0x00, - 0x01, 0x3c, 0x02, 0xcc, 0x01, 0xce, 0x01, 0xff, 0x01, 0xfd, 0x01, 0xff, - 0x01, 0xfc, 0x02, 0xcc, 0x01, 0xc6, 0x0b, 0x00, 0x01, 0x03, 0x03, 0xff, - 0x01, 0x70, 0x0f, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xfe, 0x10, 0x00, - 0x01, 0x2f, 0x01, 0xff, 0x01, 0xf5, 0x0c, 0x00, 0x01, 0x01, 0x03, 0x11, - 0x01, 0x1e, 0x01, 0xff, 0x01, 0xf3, 0x03, 0x11, 0x01, 0x10, 0x08, 0x00, - 0x01, 0x4f, 0x09, 0xff, 0x01, 0xf8, 0x08, 0x00, 0x01, 0x4f, 0x09, 0xff, - 0x01, 0xf8, 0x08, 0x00, 0x01, 0x27, 0x03, 0x77, 0x01, 0x7e, 0x01, 0xff, - 0x01, 0xf8, 0x03, 0x77, 0x01, 0x73, 0x0c, 0x00, 0x01, 0x0e, 0x01, 0xff, - 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, - 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, - 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, - 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, - 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, - 0x01, 0x08, 0x01, 0x99, 0x01, 0x91, 0xc9, 0x00 + 0x01, 0x05, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xf6, + 0x02, 0x00, 0x01, 0x05, 0x01, 0xfc, 0x0c, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xf7, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x06, + 0x01, 0xff, 0x01, 0xf9, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x0c, 0x00, + 0x01, 0x03, 0x01, 0xff, 0x01, 0xfc, 0x02, 0x00, 0x01, 0x05, 0x01, 0xfb, + 0x0d, 0x00, 0x02, 0xff, 0x01, 0x10, 0x01, 0x00, 0x01, 0x05, 0x01, 0xfb, + 0x0d, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0x80, 0x01, 0x00, 0x01, 0x05, + 0x01, 0xfb, 0x0d, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xf3, 0x01, 0x00, + 0x01, 0x05, 0x01, 0xfb, 0x0d, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xfe, + 0x01, 0x30, 0x01, 0x05, 0x01, 0xfb, 0x02, 0x00, 0x01, 0x33, 0x0a, 0x00, + 0x01, 0x01, 0x01, 0xef, 0x01, 0xff, 0x01, 0xf9, 0x01, 0x35, 0x01, 0xfb, + 0x01, 0x02, 0x01, 0x6c, 0x01, 0xf6, 0x0b, 0x00, 0x01, 0x2d, 0x06, 0xff, + 0x01, 0xf6, 0x0b, 0x00, 0x01, 0x01, 0x01, 0x9f, 0x05, 0xff, 0x01, 0xf5, + 0x0c, 0x00, 0x01, 0x02, 0x01, 0x8d, 0x03, 0xff, 0x01, 0xc7, 0x01, 0x20, + 0x0e, 0x00, 0x01, 0x06, 0x01, 0xfc, 0x01, 0x20, 0x10, 0x00, 0x01, 0x05, + 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, + 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, 0x01, 0xfb, 0x11, 0x00, 0x01, 0x05, + 0x01, 0xfb, 0x57, 0x00, + + /* 22 POUND_SIGN */ + 0x9e, 0x00, 0x01, 0x6b, 0x01, 0xdf, 0x01, 0xfd, 0x01, 0xc9, 0x01, 0x40, + 0x0d, 0x00, 0x01, 0x6e, 0x05, 0xff, 0x01, 0x30, 0x0b, 0x00, 0x01, 0x07, + 0x06, 0xff, 0x01, 0x30, 0x0b, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0xfe, + 0x01, 0x85, 0x01, 0x34, 0x01, 0x7b, 0x01, 0xff, 0x01, 0x30, 0x0b, 0x00, + 0x01, 0xaf, 0x01, 0xff, 0x01, 0xc1, 0x03, 0x00, 0x01, 0x18, 0x01, 0x30, + 0x0a, 0x00, 0x01, 0x01, 0x02, 0xff, 0x01, 0x30, 0x0f, 0x00, 0x01, 0x04, + 0x01, 0xff, 0x01, 0xfd, 0x10, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xfa, + 0x10, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xf8, 0x10, 0x00, 0x01, 0x09, + 0x01, 0xff, 0x01, 0xf7, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, + 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, + 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, + 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x0e, 0x00, 0x01, 0x0a, + 0x07, 0xff, 0x01, 0xf4, 0x0a, 0x00, 0x01, 0x0a, 0x07, 0xff, 0x01, 0xf4, + 0x0a, 0x00, 0x01, 0x08, 0x01, 0xdd, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xfe, + 0x03, 0xdd, 0x01, 0xd4, 0x0c, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, + 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, + 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, + 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, + 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, + 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x0a, + 0x01, 0xff, 0x01, 0xf6, 0x0e, 0x00, 0x01, 0x4b, 0x01, 0xbb, 0x01, 0xbe, + 0x01, 0xff, 0x01, 0xfd, 0x05, 0xbb, 0x01, 0x70, 0x08, 0x00, 0x01, 0x6f, + 0x09, 0xff, 0x01, 0xa0, 0x08, 0x00, 0x01, 0x6f, 0x09, 0xff, 0x01, 0xa0, + 0x08, 0x00, 0x01, 0x4a, 0x09, 0xaa, 0x01, 0x60, 0xc5, 0x00, + + /* 23 CURRENCY_SIGN */ + 0xff, 0x00, 0x0d, 0x00, 0x01, 0x30, 0x07, 0x00, 0x01, 0x01, 0x01, 0x40, + 0x08, 0x00, 0x01, 0x0b, 0x01, 0xf5, 0x07, 0x00, 0x01, 0x1d, 0x01, 0xf4, + 0x08, 0x00, 0x01, 0xbf, 0x01, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0x01, + 0x01, 0xdf, 0x01, 0xff, 0x01, 0x30, 0x07, 0x00, 0x01, 0x5f, 0x01, 0xff, + 0x01, 0xf4, 0x01, 0x00, 0x01, 0x6b, 0x01, 0xdd, 0x01, 0xc8, 0x01, 0x20, + 0x01, 0x1d, 0x01, 0xff, 0x01, 0xfa, 0x08, 0x00, 0x01, 0x05, 0x02, 0xff, + 0x01, 0x8e, 0x03, 0xff, 0x01, 0xfa, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xa0, + 0x09, 0x00, 0x01, 0x5f, 0x07, 0xff, 0x01, 0xfa, 0x0a, 0x00, 0x01, 0x05, + 0x02, 0xff, 0x01, 0xe9, 0x01, 0x55, 0x01, 0x7c, 0x02, 0xff, 0x01, 0xa0, + 0x0a, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0xfb, 0x01, 0x10, 0x02, 0x00, + 0x01, 0x6f, 0x01, 0xff, 0x01, 0xa0, 0x0a, 0x00, 0x01, 0x0b, 0x01, 0xff, + 0x01, 0xc0, 0x03, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf2, 0x0a, 0x00, + 0x01, 0x1f, 0x01, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0xdf, 0x01, 0xf7, + 0x0a, 0x00, 0x01, 0x4f, 0x01, 0xfd, 0x05, 0x00, 0x01, 0x8f, 0x01, 0xfa, + 0x0a, 0x00, 0x01, 0x6f, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x6f, 0x01, 0xfc, + 0x0a, 0x00, 0x01, 0x5f, 0x01, 0xfc, 0x05, 0x00, 0x01, 0x7f, 0x01, 0xfb, + 0x0a, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0x10, 0x04, 0x00, 0x01, 0xbf, + 0x01, 0xf8, 0x0a, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0x80, 0x03, 0x00, + 0x01, 0x03, 0x01, 0xff, 0x01, 0xf3, 0x0a, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xf5, 0x03, 0x00, 0x01, 0x1d, 0x01, 0xff, 0x01, 0xc0, 0x0a, 0x00, + 0x01, 0x01, 0x02, 0xff, 0x01, 0x92, 0x01, 0x00, 0x01, 0x16, 0x01, 0xef, + 0x01, 0xff, 0x01, 0x60, 0x0a, 0x00, 0x01, 0x1d, 0x03, 0xff, 0x01, 0xfe, + 0x03, 0xff, 0x01, 0xf4, 0x09, 0x00, 0x01, 0x01, 0x01, 0xdf, 0x05, 0xff, + 0x01, 0xfe, 0x02, 0xff, 0x01, 0x40, 0x08, 0x00, 0x01, 0x1d, 0x01, 0xff, + 0x01, 0xfa, 0x01, 0x06, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x81, + 0x01, 0x5f, 0x01, 0xff, 0x01, 0xf4, 0x08, 0x00, 0x01, 0xcf, 0x01, 0xff, + 0x01, 0xa0, 0x01, 0x00, 0x01, 0x01, 0x01, 0x44, 0x01, 0x20, 0x01, 0x00, + 0x01, 0x05, 0x02, 0xff, 0x01, 0x20, 0x07, 0x00, 0x01, 0x4f, 0x01, 0xfa, + 0x07, 0x00, 0x01, 0x4f, 0x01, 0xf8, 0x08, 0x00, 0x01, 0x05, 0x01, 0xa0, + 0x07, 0x00, 0x01, 0x05, 0x01, 0x80, 0xeb, 0x00, + + /* 24 YEN_SIGN */ + 0x98, 0x00, 0x01, 0x01, 0x01, 0x88, 0x01, 0x85, 0x07, 0x00, 0x01, 0x38, + 0x01, 0x88, 0x01, 0x40, 0x07, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x10, + 0x06, 0x00, 0x01, 0xcf, 0x01, 0xff, 0x01, 0x10, 0x07, 0x00, 0x01, 0x3f, + 0x01, 0xff, 0x01, 0x90, 0x05, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xf8, + 0x08, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xf2, 0x05, 0x00, 0x01, 0x0d, + 0x01, 0xff, 0x01, 0xe0, 0x08, 0x00, 0x01, 0x02, 0x01, 0xff, 0x01, 0xfa, + 0x05, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0x60, 0x09, 0x00, 0x01, 0xaf, + 0x01, 0xff, 0x01, 0x30, 0x04, 0x00, 0x01, 0xef, 0x01, 0xfd, 0x0a, 0x00, + 0x01, 0x1f, 0x01, 0xff, 0x01, 0xc0, 0x03, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xf5, 0x0a, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xf4, 0x03, 0x00, + 0x01, 0x1f, 0x01, 0xff, 0x01, 0xc0, 0x0a, 0x00, 0x01, 0x01, 0x01, 0xef, + 0x01, 0xfd, 0x03, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x40, 0x0b, 0x00, + 0x01, 0x7f, 0x01, 0xff, 0x01, 0x50, 0x01, 0x00, 0x01, 0x02, 0x01, 0xff, + 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xe0, 0x01, 0x00, + 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf3, 0x0c, 0x00, 0x01, 0x06, 0x01, 0xff, + 0x01, 0xf7, 0x01, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xa0, 0x0a, 0x00, + 0x01, 0x2a, 0x02, 0xaa, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x10, 0x01, 0xbf, + 0x01, 0xff, 0x01, 0xca, 0x01, 0xaa, 0x01, 0xa5, 0x08, 0x00, 0x01, 0x4f, + 0x04, 0xff, 0x01, 0x83, 0x04, 0xff, 0x01, 0xf8, 0x08, 0x00, 0x01, 0x3c, + 0x02, 0xcc, 0x01, 0xce, 0x01, 0xff, 0x01, 0xfd, 0x01, 0xff, 0x01, 0xfc, + 0x02, 0xcc, 0x01, 0xc6, 0x0b, 0x00, 0x01, 0x03, 0x03, 0xff, 0x01, 0x70, + 0x0f, 0x00, 0x01, 0xaf, 0x01, 0xff, 0x01, 0xfe, 0x10, 0x00, 0x01, 0x2f, + 0x01, 0xff, 0x01, 0xf5, 0x0c, 0x00, 0x01, 0x01, 0x03, 0x11, 0x01, 0x1e, + 0x01, 0xff, 0x01, 0xf3, 0x03, 0x11, 0x01, 0x10, 0x08, 0x00, 0x01, 0x4f, + 0x09, 0xff, 0x01, 0xf8, 0x08, 0x00, 0x01, 0x4f, 0x09, 0xff, 0x01, 0xf8, + 0x08, 0x00, 0x01, 0x27, 0x03, 0x77, 0x01, 0x7e, 0x01, 0xff, 0x01, 0xf8, + 0x03, 0x77, 0x01, 0x73, 0x0c, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, + 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, + 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, + 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, + 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, + 0x10, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, 0x01, 0x08, + 0x01, 0x99, 0x01, 0x91, 0xc9, 0x00, +#endif // TOUCH_UI_UTF8_CURRENCY + +#if ENABLED(TOUCH_UI_UTF8_SUPERSCRIPTS) + /* 25 SUPERSCRIPT_ONE */ + 0x99, 0x00, 0x01, 0x01, 0x01, 0x36, 0x01, 0x9b, 0x01, 0xbb, 0x01, 0x20, + 0x0e, 0x00, 0x01, 0x3f, 0x03, 0xff, 0x01, 0x20, 0x0e, 0x00, 0x01, 0x3f, + 0x01, 0xfe, 0x01, 0xbe, 0x01, 0xff, 0x01, 0x20, 0x0e, 0x00, 0x01, 0x14, + 0x01, 0x10, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, 0x10, 0x00, 0x01, 0x0b, + 0x01, 0xff, 0x01, 0x20, 0x10, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, + 0x10, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, 0x10, 0x00, 0x01, 0x0b, + 0x01, 0xff, 0x01, 0x20, 0x10, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, + 0x10, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, 0x10, 0x00, 0x01, 0x0b, + 0x01, 0xff, 0x01, 0x20, 0x10, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, + 0x10, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, 0x10, 0x00, 0x01, 0x0b, + 0x01, 0xff, 0x01, 0x20, 0x0f, 0x00, 0x01, 0x11, 0x01, 0x1c, 0x01, 0xff, + 0x01, 0x31, 0x01, 0x11, 0x0d, 0x00, 0x01, 0x0d, 0x05, 0xff, 0x01, 0x40, + 0x0c, 0x00, 0x01, 0x0d, 0x05, 0xff, 0x01, 0x40, 0x0c, 0x00, 0x01, 0x01, + 0x05, 0x22, 0xff, 0x00, 0xc2, 0x00, + + /* 26 SUPERSCRIPT_TWO */ + 0x88, 0x00, 0x01, 0x01, 0x10, 0x00, 0x01, 0x16, 0x01, 0xae, 0x01, 0xff, + 0x01, 0xfd, 0x01, 0x92, 0x0e, 0x00, 0x05, 0xff, 0x01, 0x60, 0x0d, 0x00, + 0x01, 0xfe, 0x01, 0x84, 0x01, 0x22, 0x01, 0x5c, 0x01, 0xff, 0x01, 0xf3, + 0x0d, 0x00, 0x01, 0x50, 0x03, 0x00, 0x01, 0xcf, 0x01, 0xfa, 0x11, 0x00, + 0x01, 0x5f, 0x01, 0xfc, 0x11, 0x00, 0x01, 0x5f, 0x01, 0xfb, 0x11, 0x00, + 0x01, 0xcf, 0x01, 0xf4, 0x10, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xa0, + 0x10, 0x00, 0x01, 0x6f, 0x01, 0xfe, 0x01, 0x10, 0x0f, 0x00, 0x01, 0x05, + 0x01, 0xff, 0x01, 0xe2, 0x10, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x01, 0x30, + 0x0f, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xe3, 0x10, 0x00, 0x01, 0x6f, + 0x01, 0xfe, 0x01, 0x20, 0x0f, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xd1, + 0x10, 0x00, 0x01, 0xaf, 0x01, 0xfd, 0x01, 0x43, 0x03, 0x33, 0x0c, 0x00, + 0x01, 0x01, 0x06, 0xff, 0x0c, 0x00, 0x01, 0x01, 0x06, 0xff, 0x0d, 0x00, + 0x06, 0x22, 0xff, 0x00, 0xc2, 0x00, + + /* 27 SUPERSCRIPT_THREE */ + 0x88, 0x00, 0x01, 0x01, 0x01, 0x10, 0x0f, 0x00, 0x01, 0x39, 0x01, 0xce, + 0x02, 0xff, 0x01, 0xb5, 0x0e, 0x00, 0x01, 0x7f, 0x04, 0xff, 0x01, 0xb0, + 0x0d, 0x00, 0x01, 0x6b, 0x01, 0x73, 0x01, 0x22, 0x01, 0x38, 0x01, 0xff, + 0x01, 0xf9, 0x11, 0x00, 0x01, 0x5f, 0x01, 0xff, 0x11, 0x00, 0x01, 0x0f, + 0x01, 0xff, 0x11, 0x00, 0x01, 0x4f, 0x01, 0xfc, 0x10, 0x00, 0x01, 0x27, + 0x01, 0xff, 0x01, 0xf3, 0x0e, 0x00, 0x01, 0x0c, 0x02, 0xff, 0x01, 0xfa, + 0x01, 0x20, 0x0e, 0x00, 0x01, 0x0c, 0x02, 0xff, 0x01, 0xfb, 0x01, 0x40, + 0x0e, 0x00, 0x01, 0x01, 0x01, 0x23, 0x01, 0x49, 0x01, 0xff, 0x01, 0xf6, + 0x11, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0x10, 0x10, 0x00, 0x01, 0x0b, + 0x01, 0xff, 0x01, 0x50, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0x60, + 0x10, 0x00, 0x01, 0x1e, 0x01, 0xff, 0x01, 0x40, 0x0c, 0x00, 0x01, 0xa4, + 0x02, 0x00, 0x01, 0x05, 0x01, 0xdf, 0x01, 0xfd, 0x0d, 0x00, 0x02, 0xff, + 0x01, 0xde, 0x02, 0xff, 0x01, 0xe3, 0x0d, 0x00, 0x01, 0xae, 0x03, 0xff, + 0x01, 0xe9, 0x01, 0x10, 0x0e, 0x00, 0x01, 0x24, 0x01, 0x55, 0x01, 0x52, + 0xff, 0x00, 0xc4, 0x00, +#endif // TOUCH_UI_UTF8_SUPERSCRIPTS + +#if ENABLED(TOUCH_UI_UTF8_ORDINALS) + /* 28 MASCULINE_ORDINAL */ + 0x89, 0x00, 0x01, 0x01, 0x01, 0x10, 0x0f, 0x00, 0x01, 0x01, 0x01, 0x8d, + 0x02, 0xff, 0x01, 0xb4, 0x0e, 0x00, 0x01, 0x4f, 0x04, 0xff, 0x01, 0xa0, + 0x0c, 0x00, 0x01, 0x04, 0x01, 0xff, 0x01, 0xfc, 0x01, 0x63, 0x01, 0x48, + 0x01, 0xff, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xa0, + 0x02, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0x60, 0x0b, 0x00, 0x01, 0x6f, + 0x01, 0xfe, 0x03, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xd0, 0x0b, 0x00, + 0x01, 0xbf, 0x01, 0xf7, 0x04, 0x00, 0x01, 0xff, 0x01, 0xf2, 0x0b, 0x00, + 0x01, 0xef, 0x01, 0xf3, 0x04, 0x00, 0x01, 0xcf, 0x01, 0xf6, 0x0b, 0x00, + 0x01, 0xff, 0x01, 0xf1, 0x04, 0x00, 0x01, 0xaf, 0x01, 0xf7, 0x0b, 0x00, + 0x01, 0xff, 0x01, 0xf1, 0x04, 0x00, 0x01, 0xaf, 0x01, 0xf7, 0x0b, 0x00, + 0x01, 0xff, 0x01, 0xf2, 0x04, 0x00, 0x01, 0xbf, 0x01, 0xf6, 0x0b, 0x00, + 0x01, 0xcf, 0x01, 0xf6, 0x04, 0x00, 0x01, 0xef, 0x01, 0xf4, 0x0b, 0x00, + 0x01, 0x8f, 0x01, 0xfc, 0x03, 0x00, 0x01, 0x04, 0x01, 0xff, 0x01, 0xf0, + 0x0b, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0x60, 0x02, 0x00, 0x01, 0x1d, + 0x01, 0xff, 0x01, 0x90, 0x0b, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xf8, + 0x01, 0x10, 0x01, 0x04, 0x01, 0xdf, 0x01, 0xfe, 0x01, 0x10, 0x0c, 0x00, + 0x01, 0xaf, 0x04, 0xff, 0x01, 0xe3, 0x0d, 0x00, 0x01, 0x05, 0x01, 0xdf, + 0x02, 0xff, 0x01, 0xfa, 0x01, 0x10, 0x0e, 0x00, 0x01, 0x02, 0x01, 0x56, + 0x01, 0x64, 0x21, 0x00, 0x01, 0x16, 0x06, 0x66, 0x01, 0x40, 0x0b, 0x00, + 0x01, 0x3f, 0x06, 0xff, 0x01, 0xb0, 0x0b, 0x00, 0x01, 0x3f, 0x06, 0xff, + 0x01, 0xb0, 0x0b, 0x00, 0x01, 0x01, 0x06, 0x11, 0xff, 0x00, 0x75, 0x00, + + /* 29 FEMININE_ORDINAL */ + 0x89, 0x00, 0x01, 0x12, 0x01, 0x10, 0x0f, 0x00, 0x01, 0x49, 0x01, 0xdf, + 0x02, 0xff, 0x01, 0xb4, 0x0d, 0x00, 0x01, 0x07, 0x05, 0xff, 0x01, 0xa0, + 0x0c, 0x00, 0x01, 0x07, 0x01, 0xfc, 0x01, 0x74, 0x01, 0x33, 0x01, 0x59, + 0x01, 0xff, 0x01, 0xf8, 0x0c, 0x00, 0x01, 0x03, 0x01, 0x20, 0x03, 0x00, + 0x01, 0x3f, 0x01, 0xff, 0x01, 0x10, 0x10, 0x00, 0x01, 0x09, 0x01, 0xff, + 0x01, 0x50, 0x0e, 0x00, 0x01, 0x01, 0x01, 0x11, 0x01, 0x16, 0x01, 0xff, + 0x01, 0x80, 0x0c, 0x00, 0x01, 0x05, 0x01, 0xae, 0x04, 0xff, 0x01, 0x90, + 0x0b, 0x00, 0x01, 0x01, 0x01, 0xcf, 0x05, 0xff, 0x01, 0xa0, 0x0b, 0x00, + 0x01, 0x0d, 0x01, 0xff, 0x01, 0xe9, 0x01, 0x65, 0x01, 0x44, 0x01, 0x48, + 0x01, 0xff, 0x01, 0xa0, 0x0b, 0x00, 0x01, 0x5f, 0x01, 0xfd, 0x01, 0x10, + 0x02, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xa0, 0x0b, 0x00, 0x01, 0x9f, + 0x01, 0xf6, 0x03, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xa0, 0x0b, 0x00, + 0x01, 0xaf, 0x01, 0xf5, 0x03, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x01, 0xa0, + 0x0b, 0x00, 0x01, 0x9f, 0x01, 0xfa, 0x03, 0x00, 0x01, 0xaf, 0x01, 0xff, + 0x01, 0xa0, 0x0b, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0xa2, 0x01, 0x00, + 0x01, 0x3b, 0x02, 0xff, 0x01, 0xa0, 0x0b, 0x00, 0x01, 0x0a, 0x04, 0xff, + 0x01, 0xe7, 0x01, 0xff, 0x01, 0xa0, 0x0c, 0x00, 0x01, 0x8f, 0x02, 0xff, + 0x01, 0xf9, 0x01, 0x15, 0x01, 0xff, 0x01, 0xa0, 0x0d, 0x00, 0x01, 0x46, + 0x01, 0x64, 0x02, 0x00, 0x01, 0x11, 0x1f, 0x00, 0x01, 0x16, 0x06, 0x66, + 0x01, 0x40, 0x0b, 0x00, 0x01, 0x3f, 0x06, 0xff, 0x01, 0xb0, 0x0b, 0x00, + 0x01, 0x3f, 0x06, 0xff, 0x01, 0xb0, 0x0b, 0x00, 0x01, 0x01, 0x06, 0x11, + 0xff, 0x00, 0x75, 0x00, +#endif // TOUCH_UI_UTF8_ORDINALS + +#if ENABLED(TOUCH_UI_UTF8_COPYRIGHT) + /* 30 COPYRIGHT_SIGN */ + 0xa0, 0x00, 0x01, 0x01, 0x01, 0x45, 0x01, 0x76, 0x01, 0x43, 0x0e, 0x00, + 0x01, 0x28, 0x01, 0xdf, 0x03, 0xff, 0x01, 0xe9, 0x01, 0x40, 0x0b, 0x00, + 0x01, 0x19, 0x02, 0xff, 0x01, 0xdb, 0x01, 0xab, 0x01, 0xce, 0x01, 0xff, + 0x01, 0xfb, 0x01, 0x30, 0x09, 0x00, 0x01, 0x03, 0x01, 0xef, 0x01, 0xfb, + 0x01, 0x50, 0x03, 0x00, 0x01, 0x38, 0x01, 0xff, 0x01, 0xf7, 0x09, 0x00, + 0x01, 0x6f, 0x01, 0xfc, 0x01, 0x30, 0x05, 0x00, 0x01, 0x19, 0x01, 0xff, + 0x01, 0xa0, 0x07, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xa0, 0x07, 0x00, + 0x01, 0x5f, 0x01, 0xfb, 0x07, 0x00, 0x01, 0x3f, 0x01, 0xf8, 0x03, 0x00, + 0x01, 0x46, 0x01, 0x88, 0x01, 0x65, 0x01, 0x10, 0x01, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0x80, 0x06, 0x00, 0x01, 0xef, 0x01, 0xa0, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x9f, 0x03, 0xff, 0x01, 0xfc, 0x01, 0x60, 0x01, 0x00, + 0x01, 0x4f, 0x01, 0xf4, 0x05, 0x00, 0x01, 0x08, 0x01, 0xfd, 0x02, 0x00, + 0x01, 0x4e, 0x02, 0xff, 0x01, 0xed, 0x01, 0xef, 0x01, 0xff, 0x01, 0xb0, + 0x01, 0x00, 0x01, 0x08, 0x01, 0xfd, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xf4, + 0x01, 0x00, 0x01, 0x04, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x61, 0x01, 0x00, + 0x01, 0x01, 0x01, 0x4a, 0x01, 0xa0, 0x02, 0x00, 0x01, 0xef, 0x01, 0x60, + 0x04, 0x00, 0x01, 0x6f, 0x01, 0xc0, 0x01, 0x00, 0x01, 0x0e, 0x01, 0xff, + 0x01, 0xc1, 0x07, 0x00, 0x01, 0x7f, 0x01, 0xb0, 0x04, 0x00, 0x01, 0xbf, + 0x01, 0x60, 0x01, 0x00, 0x01, 0x7f, 0x01, 0xff, 0x01, 0x10, 0x07, 0x00, + 0x01, 0x1f, 0x01, 0xf0, 0x04, 0x00, 0x01, 0xff, 0x01, 0x20, 0x01, 0x00, + 0x01, 0xdf, 0x01, 0xf9, 0x08, 0x00, 0x01, 0x0d, 0x01, 0xf4, 0x03, 0x00, + 0x01, 0x01, 0x01, 0xfe, 0x01, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf4, + 0x08, 0x00, 0x01, 0x0a, 0x01, 0xf6, 0x03, 0x00, 0x01, 0x03, 0x01, 0xfd, + 0x01, 0x00, 0x01, 0x02, 0x01, 0xff, 0x01, 0xf1, 0x08, 0x00, 0x01, 0x08, + 0x01, 0xf8, 0x03, 0x00, 0x01, 0x04, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x03, + 0x01, 0xff, 0x01, 0xf0, 0x08, 0x00, 0x01, 0x07, 0x01, 0xf9, 0x03, 0x00, + 0x01, 0x03, 0x01, 0xfd, 0x01, 0x00, 0x01, 0x02, 0x01, 0xff, 0x01, 0xf1, + 0x08, 0x00, 0x01, 0x08, 0x01, 0xf8, 0x03, 0x00, 0x01, 0x01, 0x01, 0xfe, + 0x01, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf3, 0x08, 0x00, 0x01, 0x09, + 0x01, 0xf7, 0x04, 0x00, 0x01, 0xff, 0x01, 0x10, 0x01, 0x00, 0x01, 0xdf, + 0x01, 0xf8, 0x08, 0x00, 0x01, 0x0c, 0x01, 0xf5, 0x04, 0x00, 0x01, 0xbf, + 0x01, 0x60, 0x01, 0x00, 0x01, 0x8f, 0x01, 0xfe, 0x01, 0x10, 0x07, 0x00, + 0x01, 0x1f, 0x01, 0xf1, 0x04, 0x00, 0x01, 0x6f, 0x01, 0xb0, 0x01, 0x00, + 0x01, 0x1f, 0x01, 0xff, 0x01, 0xb0, 0x07, 0x00, 0x01, 0x6f, 0x01, 0xc0, + 0x04, 0x00, 0x01, 0x1f, 0x01, 0xf4, 0x01, 0x00, 0x01, 0x05, 0x01, 0xff, + 0x01, 0xfd, 0x01, 0x50, 0x02, 0x00, 0x01, 0x29, 0x01, 0xa0, 0x02, 0x00, + 0x01, 0xef, 0x01, 0x60, 0x04, 0x00, 0x01, 0x08, 0x01, 0xfd, 0x02, 0x00, + 0x01, 0x6f, 0x02, 0xff, 0x01, 0xdb, 0x01, 0xce, 0x01, 0xff, 0x01, 0xb0, + 0x01, 0x00, 0x01, 0x07, 0x01, 0xfd, 0x05, 0x00, 0x01, 0x01, 0x01, 0xef, + 0x01, 0x90, 0x01, 0x00, 0x01, 0x02, 0x01, 0xbf, 0x03, 0xff, 0x01, 0xfe, + 0x01, 0x70, 0x01, 0x00, 0x01, 0x4f, 0x01, 0xf4, 0x06, 0x00, 0x01, 0x4f, + 0x01, 0xf7, 0x02, 0x00, 0x01, 0x01, 0x01, 0x58, 0x01, 0x9a, 0x01, 0x86, + 0x01, 0x30, 0x01, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0x80, 0x06, 0x00, + 0x01, 0x06, 0x01, 0xff, 0x01, 0x90, 0x07, 0x00, 0x01, 0x4f, 0x01, 0xfb, + 0x08, 0x00, 0x01, 0x6f, 0x01, 0xfc, 0x01, 0x30, 0x05, 0x00, 0x01, 0x18, + 0x01, 0xff, 0x01, 0xb0, 0x08, 0x00, 0x01, 0x04, 0x01, 0xef, 0x01, 0xfa, + 0x01, 0x40, 0x03, 0x00, 0x01, 0x27, 0x01, 0xef, 0x01, 0xf8, 0x0a, 0x00, + 0x01, 0x19, 0x02, 0xff, 0x01, 0xca, 0x01, 0x9a, 0x01, 0xbe, 0x01, 0xff, + 0x01, 0xfc, 0x01, 0x30, 0x0b, 0x00, 0x01, 0x29, 0x01, 0xdf, 0x03, 0xff, + 0x01, 0xfa, 0x01, 0x40, 0x0d, 0x00, 0x01, 0x02, 0x01, 0x46, 0x01, 0x76, + 0x01, 0x53, 0xc5, 0x00, + + /* 31 REGISTERED_SIGN */ + 0xa0, 0x00, 0x01, 0x02, 0x01, 0x46, 0x01, 0x76, 0x01, 0x53, 0x0e, 0x00, + 0x01, 0x28, 0x01, 0xdf, 0x03, 0xff, 0x01, 0xea, 0x01, 0x40, 0x0b, 0x00, + 0x01, 0x19, 0x02, 0xff, 0x01, 0xcb, 0x01, 0x9a, 0x01, 0xce, 0x01, 0xff, + 0x01, 0xfc, 0x01, 0x30, 0x09, 0x00, 0x01, 0x04, 0x01, 0xef, 0x01, 0xfa, + 0x01, 0x40, 0x03, 0x00, 0x01, 0x38, 0x01, 0xff, 0x01, 0xf8, 0x09, 0x00, + 0x01, 0x6f, 0x01, 0xfc, 0x01, 0x30, 0x05, 0x00, 0x01, 0x18, 0x01, 0xff, + 0x01, 0xa0, 0x07, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0x90, 0x07, 0x00, + 0x01, 0x4f, 0x01, 0xfb, 0x07, 0x00, 0x01, 0x3f, 0x01, 0xf7, 0x01, 0x00, + 0x01, 0x13, 0x02, 0x33, 0x01, 0x32, 0x03, 0x00, 0x01, 0x02, 0x01, 0xff, + 0x01, 0x80, 0x06, 0x00, 0x01, 0xef, 0x01, 0xa0, 0x01, 0x00, 0x01, 0x7f, + 0x03, 0xff, 0x01, 0xfd, 0x01, 0x81, 0x02, 0x00, 0x01, 0x4f, 0x01, 0xf5, + 0x05, 0x00, 0x01, 0x08, 0x01, 0xfd, 0x02, 0x00, 0x01, 0x7f, 0x01, 0xff, + 0x01, 0xdd, 0x01, 0xef, 0x01, 0xff, 0x01, 0xfe, 0x01, 0x30, 0x01, 0x00, + 0x01, 0x08, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x1f, 0x01, 0xf4, 0x02, 0x00, + 0x01, 0x7f, 0x01, 0xfa, 0x02, 0x00, 0x01, 0x3c, 0x01, 0xff, 0x01, 0xd0, + 0x02, 0x00, 0x01, 0xef, 0x01, 0x60, 0x04, 0x00, 0x01, 0x6f, 0x01, 0xc0, + 0x02, 0x00, 0x01, 0x7f, 0x01, 0xfa, 0x02, 0x00, 0x01, 0x02, 0x01, 0xff, + 0x01, 0xf3, 0x02, 0x00, 0x01, 0x7f, 0x01, 0xb0, 0x04, 0x00, 0x01, 0xbf, + 0x01, 0x60, 0x02, 0x00, 0x01, 0x7f, 0x01, 0xfa, 0x03, 0x00, 0x01, 0xff, + 0x01, 0xf4, 0x02, 0x00, 0x01, 0x1f, 0x01, 0xf0, 0x04, 0x00, 0x01, 0xff, + 0x01, 0x10, 0x02, 0x00, 0x01, 0x7f, 0x01, 0xfa, 0x03, 0x00, 0x01, 0xff, + 0x01, 0xf2, 0x02, 0x00, 0x01, 0x0c, 0x01, 0xf5, 0x03, 0x00, 0x01, 0x01, + 0x01, 0xfe, 0x03, 0x00, 0x01, 0x7f, 0x01, 0xfa, 0x02, 0x00, 0x01, 0x08, + 0x01, 0xff, 0x01, 0xe0, 0x02, 0x00, 0x01, 0x0a, 0x01, 0xf6, 0x03, 0x00, + 0x01, 0x03, 0x01, 0xfd, 0x03, 0x00, 0x01, 0x7f, 0x01, 0xfd, 0x01, 0x88, + 0x01, 0x9a, 0x01, 0xef, 0x01, 0xfe, 0x01, 0x30, 0x02, 0x00, 0x01, 0x08, + 0x01, 0xf8, 0x03, 0x00, 0x01, 0x04, 0x01, 0xfc, 0x03, 0x00, 0x01, 0x7f, + 0x03, 0xff, 0x01, 0xfe, 0x01, 0x91, 0x03, 0x00, 0x01, 0x07, 0x01, 0xf9, + 0x03, 0x00, 0x01, 0x03, 0x01, 0xfd, 0x03, 0x00, 0x01, 0x7f, 0x01, 0xfc, + 0x01, 0x78, 0x01, 0xdf, 0x01, 0xfd, 0x01, 0x20, 0x03, 0x00, 0x01, 0x08, + 0x01, 0xf8, 0x03, 0x00, 0x01, 0x01, 0x01, 0xfe, 0x03, 0x00, 0x01, 0x7f, + 0x01, 0xfa, 0x01, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xc0, 0x03, 0x00, + 0x01, 0x09, 0x01, 0xf6, 0x04, 0x00, 0x01, 0xff, 0x01, 0x10, 0x02, 0x00, + 0x01, 0x7f, 0x01, 0xfa, 0x02, 0x00, 0x01, 0xdf, 0x01, 0xf8, 0x03, 0x00, + 0x01, 0x0c, 0x01, 0xf5, 0x04, 0x00, 0x01, 0xbf, 0x01, 0x60, 0x02, 0x00, + 0x01, 0x7f, 0x01, 0xfa, 0x02, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0x30, + 0x02, 0x00, 0x01, 0x1f, 0x01, 0xf1, 0x04, 0x00, 0x01, 0x6f, 0x01, 0xc0, + 0x02, 0x00, 0x01, 0x7f, 0x01, 0xfa, 0x02, 0x00, 0x01, 0x09, 0x01, 0xff, + 0x01, 0xd0, 0x02, 0x00, 0x01, 0x6f, 0x01, 0xb0, 0x04, 0x00, 0x01, 0x1f, + 0x01, 0xf4, 0x02, 0x00, 0x01, 0x7f, 0x01, 0xfa, 0x02, 0x00, 0x01, 0x01, + 0x01, 0xef, 0x01, 0xf7, 0x02, 0x00, 0x01, 0xef, 0x01, 0x60, 0x04, 0x00, + 0x01, 0x08, 0x01, 0xfd, 0x02, 0x00, 0x01, 0x7f, 0x01, 0xfa, 0x03, 0x00, + 0x01, 0x6f, 0x01, 0xff, 0x01, 0x20, 0x01, 0x08, 0x01, 0xfe, 0x06, 0x00, + 0x01, 0xef, 0x01, 0xa0, 0x01, 0x00, 0x01, 0x5a, 0x01, 0xa6, 0x03, 0x00, + 0x01, 0x09, 0x01, 0xaa, 0x01, 0x60, 0x01, 0x4f, 0x01, 0xf4, 0x06, 0x00, + 0x01, 0x3f, 0x01, 0xf8, 0x08, 0x00, 0x01, 0x03, 0x01, 0xff, 0x01, 0x80, + 0x06, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0x90, 0x07, 0x00, 0x01, 0x4f, + 0x01, 0xfb, 0x08, 0x00, 0x01, 0x6f, 0x01, 0xfc, 0x01, 0x30, 0x05, 0x00, + 0x01, 0x19, 0x01, 0xff, 0x01, 0xa0, 0x08, 0x00, 0x01, 0x04, 0x01, 0xef, + 0x01, 0xfa, 0x01, 0x40, 0x03, 0x00, 0x01, 0x38, 0x01, 0xef, 0x01, 0xf8, + 0x0a, 0x00, 0x01, 0x19, 0x02, 0xff, 0x01, 0xcb, 0x01, 0x9a, 0x01, 0xce, + 0x01, 0xff, 0x01, 0xfc, 0x01, 0x30, 0x0b, 0x00, 0x01, 0x28, 0x01, 0xdf, + 0x03, 0xff, 0x01, 0xea, 0x01, 0x40, 0x0d, 0x00, 0x01, 0x02, 0x01, 0x45, + 0x01, 0x76, 0x01, 0x43, 0xc5, 0x00, +#endif // TOUCH_UI_UTF8_COPYRIGHT + +#if ENABLED(TOUCH_UI_UTF8_MATHEMATICS) + /* 32 PLUS_MINUS_SIGN */ + 0xeb, 0x00, 0x01, 0x02, 0x01, 0x77, 0x01, 0x70, 0x10, 0x00, 0x01, 0x06, + 0x01, 0xff, 0x01, 0xf0, 0x10, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf0, + 0x10, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf0, 0x10, 0x00, 0x01, 0x06, + 0x01, 0xff, 0x01, 0xf0, 0x10, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf0, + 0x10, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf0, 0x10, 0x00, 0x01, 0x06, + 0x01, 0xff, 0x01, 0xf0, 0x0b, 0x00, 0x01, 0x6a, 0x04, 0xaa, 0x01, 0xac, + 0x01, 0xff, 0x01, 0xfa, 0x05, 0xaa, 0x01, 0x20, 0x05, 0x00, 0x01, 0x9f, + 0x0c, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0x9f, 0x0c, 0xff, 0x01, 0x40, + 0x05, 0x00, 0x01, 0x7c, 0x04, 0xcc, 0x01, 0xcd, 0x01, 0xff, 0x01, 0xfc, + 0x05, 0xcc, 0x01, 0x30, 0x0a, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf0, + 0x10, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf0, 0x10, 0x00, 0x01, 0x06, + 0x01, 0xff, 0x01, 0xf0, 0x10, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf0, + 0x10, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf0, 0x10, 0x00, 0x01, 0x06, + 0x01, 0xff, 0x01, 0xf0, 0x10, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf0, + 0x10, 0x00, 0x01, 0x03, 0x01, 0x99, 0x01, 0x90, 0x44, 0x00, 0x01, 0x9f, + 0x0c, 0xff, 0x01, 0x30, 0x05, 0x00, 0x01, 0x9f, 0x0c, 0xff, 0x01, 0x40, + 0x05, 0x00, 0x01, 0x9f, 0x0c, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0x47, + 0x0c, 0x77, 0x01, 0x10, 0xc1, 0x00, + + /* 33 MULTIPLICATION_SIGN */ + 0xff, 0x00, 0x0e, 0x00, 0x01, 0x09, 0x01, 0xb0, 0x07, 0x00, 0x01, 0x03, + 0x01, 0xe4, 0x08, 0x00, 0x01, 0x9f, 0x01, 0xfb, 0x07, 0x00, 0x01, 0x3e, + 0x01, 0xff, 0x01, 0x40, 0x06, 0x00, 0x01, 0x01, 0x01, 0xef, 0x01, 0xff, + 0x01, 0xb0, 0x05, 0x00, 0x01, 0x03, 0x01, 0xef, 0x01, 0xff, 0x01, 0xa0, + 0x07, 0x00, 0x01, 0x2e, 0x01, 0xff, 0x01, 0xfb, 0x05, 0x00, 0x01, 0x3e, + 0x01, 0xff, 0x01, 0xfb, 0x08, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xff, + 0x01, 0xb0, 0x03, 0x00, 0x01, 0x03, 0x01, 0xef, 0x01, 0xff, 0x01, 0xb0, + 0x09, 0x00, 0x01, 0x2e, 0x01, 0xff, 0x01, 0xfb, 0x03, 0x00, 0x01, 0x3e, + 0x01, 0xff, 0x01, 0xfb, 0x0a, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xff, + 0x01, 0xb0, 0x01, 0x00, 0x01, 0x03, 0x01, 0xef, 0x01, 0xff, 0x01, 0xb0, + 0x0b, 0x00, 0x01, 0x2e, 0x01, 0xff, 0x01, 0xfb, 0x01, 0x00, 0x01, 0x3e, + 0x01, 0xff, 0x01, 0xfb, 0x0c, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xff, + 0x01, 0xb3, 0x01, 0xef, 0x01, 0xff, 0x01, 0xb0, 0x0d, 0x00, 0x01, 0x3e, + 0x03, 0xff, 0x01, 0xfb, 0x0e, 0x00, 0x01, 0x03, 0x01, 0xef, 0x02, 0xff, + 0x01, 0xb0, 0x0f, 0x00, 0x01, 0x5f, 0x02, 0xff, 0x01, 0x10, 0x0e, 0x00, + 0x01, 0x03, 0x01, 0xef, 0x02, 0xff, 0x01, 0xb0, 0x0e, 0x00, 0x01, 0x3e, + 0x03, 0xff, 0x01, 0xfb, 0x0d, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xff, + 0x01, 0xb3, 0x01, 0xef, 0x01, 0xff, 0x01, 0xb0, 0x0c, 0x00, 0x01, 0x2e, + 0x01, 0xff, 0x01, 0xfb, 0x01, 0x00, 0x01, 0x2e, 0x01, 0xff, 0x01, 0xfb, + 0x0b, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xff, 0x01, 0xb0, 0x01, 0x00, + 0x01, 0x02, 0x01, 0xef, 0x01, 0xff, 0x01, 0xb0, 0x0a, 0x00, 0x01, 0x2e, + 0x01, 0xff, 0x01, 0xfb, 0x03, 0x00, 0x01, 0x2e, 0x01, 0xff, 0x01, 0xfb, + 0x09, 0x00, 0x01, 0x02, 0x01, 0xef, 0x01, 0xff, 0x01, 0xb0, 0x03, 0x00, + 0x01, 0x02, 0x01, 0xef, 0x01, 0xff, 0x01, 0xb0, 0x08, 0x00, 0x01, 0x2e, + 0x01, 0xff, 0x01, 0xfb, 0x05, 0x00, 0x01, 0x2e, 0x01, 0xff, 0x01, 0xfb, + 0x07, 0x00, 0x01, 0x01, 0x01, 0xef, 0x01, 0xff, 0x01, 0xb0, 0x05, 0x00, + 0x01, 0x02, 0x01, 0xef, 0x01, 0xff, 0x01, 0xa0, 0x07, 0x00, 0x01, 0x8f, + 0x01, 0xfb, 0x07, 0x00, 0x01, 0x2e, 0x01, 0xff, 0x01, 0x40, 0x07, 0x00, + 0x01, 0x09, 0x01, 0xb0, 0x07, 0x00, 0x01, 0x02, 0x01, 0xe4, 0xe9, 0x00, + + /* 34 DIVISION_SIGN */ + 0xff, 0x00, 0x25, 0x00, 0x01, 0x17, 0x01, 0x77, 0x01, 0x76, 0x10, 0x00, + 0x01, 0x2f, 0x01, 0xff, 0x01, 0xfc, 0x10, 0x00, 0x01, 0x2f, 0x01, 0xff, + 0x01, 0xfc, 0x10, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xfc, 0x10, 0x00, + 0x01, 0x2f, 0x01, 0xff, 0x01, 0xfc, 0x10, 0x00, 0x01, 0x17, 0x01, 0x77, + 0x01, 0x76, 0x31, 0x00, 0x01, 0x24, 0x0c, 0x44, 0x01, 0x10, 0x05, 0x00, + 0x01, 0x9f, 0x0c, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0x9f, 0x0c, 0xff, + 0x01, 0x40, 0x05, 0x00, 0x01, 0x9f, 0x0c, 0xff, 0x01, 0x40, 0x05, 0x00, + 0x01, 0x12, 0x0c, 0x22, 0x31, 0x00, 0x01, 0x18, 0x01, 0x88, 0x01, 0x87, + 0x10, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xfc, 0x10, 0x00, 0x01, 0x2f, + 0x01, 0xff, 0x01, 0xfc, 0x10, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xfc, + 0x10, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0xfc, 0x10, 0x00, 0x01, 0x16, + 0x01, 0x66, 0x01, 0x65, 0xff, 0x00, 0x01, 0x00, +#endif // TOUCH_UI_UTF8_MATHEMATICS + +#if ENABLED(TOUCH_UI_UTF8_FRACTIONS) + /* 35 FRACTION_QUARTER */ + 0x92, 0x00, 0x01, 0x01, 0x01, 0x44, 0x01, 0x40, 0x04, 0x00, 0x01, 0x04, + 0x01, 0x79, 0x01, 0xce, 0x01, 0xee, 0x01, 0x20, 0x07, 0x00, 0x01, 0x0a, + 0x01, 0xff, 0x01, 0x90, 0x04, 0x00, 0x01, 0x3f, 0x03, 0xff, 0x01, 0x20, + 0x07, 0x00, 0x01, 0x3f, 0x01, 0xfe, 0x01, 0x10, 0x04, 0x00, 0x01, 0x3f, + 0x01, 0xdb, 0x01, 0x8d, 0x01, 0xff, 0x01, 0x20, 0x07, 0x00, 0x01, 0xdf, + 0x01, 0xf5, 0x05, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x0b, 0x01, 0xff, + 0x01, 0x20, 0x06, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xc0, 0x07, 0x00, + 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, + 0x01, 0x20, 0x07, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, 0x06, 0x00, + 0x01, 0xaf, 0x01, 0xf8, 0x08, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, + 0x05, 0x00, 0x01, 0x04, 0x01, 0xff, 0x01, 0xe1, 0x08, 0x00, 0x01, 0x0b, + 0x01, 0xff, 0x01, 0x20, 0x05, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0x50, + 0x08, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, 0x05, 0x00, 0x01, 0x7f, + 0x01, 0xfc, 0x09, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, 0x04, 0x00, + 0x01, 0x01, 0x01, 0xff, 0x01, 0xf2, 0x09, 0x00, 0x01, 0x0b, 0x01, 0xff, + 0x01, 0x20, 0x04, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0x80, 0x09, 0x00, + 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x4f, 0x01, 0xfe, + 0x0a, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0xdf, + 0x01, 0xf5, 0x0a, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, 0x03, 0x00, + 0x01, 0x07, 0x01, 0xff, 0x01, 0xb0, 0x04, 0x00, 0x01, 0x37, 0x01, 0x77, + 0x02, 0x00, 0x01, 0x04, 0x01, 0x55, 0x01, 0x5d, 0x01, 0xff, 0x01, 0x75, + 0x01, 0x55, 0x01, 0x10, 0x01, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x20, + 0x03, 0x00, 0x01, 0x01, 0x01, 0xef, 0x01, 0xff, 0x02, 0x00, 0x01, 0x0d, + 0x05, 0xff, 0x01, 0x40, 0x01, 0x00, 0x01, 0xaf, 0x01, 0xf8, 0x04, 0x00, + 0x01, 0x0c, 0x02, 0xff, 0x02, 0x00, 0x01, 0x0c, 0x05, 0xee, 0x01, 0x40, + 0x01, 0x04, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x8f, 0x01, 0xbe, + 0x01, 0xff, 0x09, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0x50, 0x03, 0x00, + 0x01, 0x04, 0x01, 0xfe, 0x01, 0x1e, 0x01, 0xff, 0x09, 0x00, 0x01, 0x7f, + 0x01, 0xfc, 0x04, 0x00, 0x01, 0x1e, 0x01, 0xf4, 0x01, 0x0e, 0x01, 0xff, + 0x08, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf2, 0x04, 0x00, 0x01, 0xbf, + 0x01, 0x80, 0x01, 0x0e, 0x01, 0xff, 0x08, 0x00, 0x01, 0x0b, 0x01, 0xff, + 0x01, 0x80, 0x03, 0x00, 0x01, 0x08, 0x01, 0xfc, 0x01, 0x00, 0x01, 0x0e, + 0x01, 0xff, 0x08, 0x00, 0x01, 0x4f, 0x01, 0xfe, 0x04, 0x00, 0x01, 0x4f, + 0x01, 0xe1, 0x01, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x08, 0x00, 0x01, 0xdf, + 0x01, 0xf5, 0x03, 0x00, 0x01, 0x01, 0x01, 0xef, 0x01, 0x40, 0x01, 0x00, + 0x01, 0x0e, 0x01, 0xff, 0x07, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xb0, + 0x03, 0x00, 0x01, 0x0b, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x0e, 0x01, 0xff, + 0x07, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0x20, 0x03, 0x00, 0x01, 0x3f, + 0x01, 0xf8, 0x02, 0x88, 0x01, 0x8f, 0x01, 0xff, 0x01, 0x88, 0x06, 0x00, + 0x01, 0xbf, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x4f, 0x06, 0xff, 0x05, 0x00, + 0x01, 0x04, 0x01, 0xff, 0x01, 0xe0, 0x04, 0x00, 0x01, 0x2a, 0x03, 0xaa, + 0x01, 0xaf, 0x01, 0xff, 0x01, 0xaa, 0x05, 0x00, 0x01, 0x0d, 0x01, 0xff, + 0x01, 0x50, 0x08, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x06, 0x00, 0x01, 0x8f, + 0x01, 0xfb, 0x09, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x05, 0x00, 0x01, 0x02, + 0x01, 0xff, 0x01, 0xf2, 0x09, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x05, 0x00, + 0x01, 0x0b, 0x01, 0xff, 0x01, 0x80, 0x09, 0x00, 0x01, 0x05, 0x01, 0x66, + 0xbf, 0x00, + + /* 36 FRACTION_HALF */ + 0x92, 0x00, 0x01, 0x01, 0x01, 0x44, 0x01, 0x40, 0x04, 0x00, 0x01, 0x04, + 0x01, 0x7a, 0x01, 0xce, 0x01, 0xee, 0x01, 0x20, 0x07, 0x00, 0x01, 0x0a, + 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, 0x01, 0x3f, 0x03, 0xff, 0x01, 0x20, + 0x07, 0x00, 0x01, 0x4f, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x3f, 0x01, 0xda, + 0x01, 0x7d, 0x01, 0xff, 0x01, 0x20, 0x07, 0x00, 0x01, 0xdf, 0x01, 0xf5, + 0x07, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, 0x06, 0x00, 0x01, 0x07, + 0x01, 0xff, 0x01, 0xc0, 0x07, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, + 0x06, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x01, 0x20, 0x07, 0x00, 0x01, 0x0b, + 0x01, 0xff, 0x01, 0x20, 0x06, 0x00, 0x01, 0xaf, 0x01, 0xf8, 0x08, 0x00, + 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, 0x05, 0x00, 0x01, 0x04, 0x01, 0xff, + 0x01, 0xe0, 0x08, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, 0x05, 0x00, + 0x01, 0x0d, 0x01, 0xff, 0x01, 0x50, 0x08, 0x00, 0x01, 0x0b, 0x01, 0xff, + 0x01, 0x20, 0x05, 0x00, 0x01, 0x7f, 0x01, 0xfc, 0x09, 0x00, 0x01, 0x0b, + 0x01, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf2, + 0x09, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, 0x04, 0x00, 0x01, 0x0a, + 0x01, 0xff, 0x01, 0x80, 0x09, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0x20, + 0x04, 0x00, 0x01, 0x4f, 0x01, 0xfe, 0x0a, 0x00, 0x01, 0x0b, 0x01, 0xff, + 0x01, 0x20, 0x04, 0x00, 0x01, 0xdf, 0x01, 0xf5, 0x0a, 0x00, 0x01, 0x0b, + 0x01, 0xff, 0x01, 0x20, 0x03, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xb0, + 0x01, 0x00, 0x01, 0x04, 0x01, 0x8a, 0x01, 0xcc, 0x01, 0xa7, 0x01, 0x10, + 0x02, 0x00, 0x01, 0x04, 0x01, 0x55, 0x01, 0x5d, 0x01, 0xff, 0x01, 0x75, + 0x01, 0x55, 0x01, 0x10, 0x01, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0x20, + 0x01, 0x06, 0x04, 0xff, 0x01, 0xf7, 0x02, 0x00, 0x01, 0x0d, 0x05, 0xff, + 0x01, 0x40, 0x01, 0x00, 0x01, 0xbf, 0x01, 0xf8, 0x01, 0x00, 0x01, 0x08, + 0x01, 0xff, 0x01, 0xa7, 0x01, 0x68, 0x01, 0xdf, 0x01, 0xff, 0x01, 0x70, + 0x01, 0x00, 0x01, 0x0b, 0x05, 0xdd, 0x01, 0x40, 0x01, 0x04, 0x01, 0xff, + 0x01, 0xe0, 0x01, 0x00, 0x01, 0x05, 0x01, 0x60, 0x02, 0x00, 0x01, 0x08, + 0x01, 0xff, 0x01, 0xf1, 0x08, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0x50, + 0x06, 0x00, 0x01, 0xef, 0x01, 0xf4, 0x08, 0x00, 0x01, 0x7f, 0x01, 0xfb, + 0x07, 0x00, 0x01, 0xcf, 0x01, 0xf3, 0x07, 0x00, 0x01, 0x02, 0x01, 0xff, + 0x01, 0xf2, 0x06, 0x00, 0x01, 0x02, 0x01, 0xff, 0x01, 0xe0, 0x07, 0x00, + 0x01, 0x0b, 0x01, 0xff, 0x01, 0x80, 0x06, 0x00, 0x01, 0x0d, 0x01, 0xff, + 0x01, 0x50, 0x07, 0x00, 0x01, 0x4f, 0x01, 0xfe, 0x07, 0x00, 0x01, 0xaf, + 0x01, 0xfa, 0x08, 0x00, 0x01, 0xdf, 0x01, 0xf5, 0x06, 0x00, 0x01, 0x09, + 0x01, 0xff, 0x01, 0xc0, 0x07, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xb0, + 0x06, 0x00, 0x01, 0x8f, 0x01, 0xfd, 0x01, 0x10, 0x07, 0x00, 0x01, 0x2f, + 0x01, 0xff, 0x01, 0x20, 0x05, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xc1, + 0x08, 0x00, 0x01, 0xbf, 0x01, 0xf8, 0x06, 0x00, 0x01, 0xaf, 0x01, 0xfb, + 0x08, 0x00, 0x01, 0x05, 0x01, 0xff, 0x01, 0xe0, 0x05, 0x00, 0x01, 0x0b, + 0x01, 0xff, 0x01, 0xa0, 0x08, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0x50, + 0x04, 0x00, 0x01, 0x01, 0x01, 0xcf, 0x01, 0xf9, 0x09, 0x00, 0x01, 0x8f, + 0x01, 0xfb, 0x05, 0x00, 0x01, 0x09, 0x01, 0xff, 0x01, 0xfe, 0x03, 0xee, + 0x01, 0xe6, 0x04, 0x00, 0x01, 0x02, 0x01, 0xff, 0x01, 0xf2, 0x05, 0x00, + 0x01, 0x0a, 0x05, 0xff, 0x01, 0xf7, 0x04, 0x00, 0x01, 0x0a, 0x01, 0xee, + 0x01, 0x70, 0x05, 0x00, 0x01, 0x04, 0x05, 0x66, 0x01, 0x62, 0xbe, 0x00, + + /* 37 FRACTION_THREE_FOURTHS */ + 0x87, 0x00, 0x01, 0x02, 0x01, 0x34, 0x01, 0x42, 0x08, 0x00, 0x01, 0x01, + 0x01, 0x55, 0x01, 0x50, 0x04, 0x00, 0x01, 0x4c, 0x03, 0xff, 0x01, 0xe9, + 0x01, 0x10, 0x06, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0x80, 0x04, 0x00, + 0x01, 0x7f, 0x01, 0xff, 0x01, 0xfe, 0x02, 0xff, 0x01, 0xe2, 0x06, 0x00, + 0x01, 0x4f, 0x01, 0xfe, 0x05, 0x00, 0x01, 0x47, 0x01, 0x30, 0x01, 0x00, + 0x01, 0x05, 0x01, 0xef, 0x01, 0xfb, 0x06, 0x00, 0x01, 0xdf, 0x01, 0xf5, + 0x09, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x05, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xb0, 0x09, 0x00, 0x01, 0x1f, 0x01, 0xff, 0x05, 0x00, 0x01, 0x2f, + 0x01, 0xff, 0x01, 0x20, 0x09, 0x00, 0x01, 0x6f, 0x01, 0xfb, 0x05, 0x00, + 0x01, 0xbf, 0x01, 0xf8, 0x07, 0x00, 0x01, 0x03, 0x01, 0x44, 0x01, 0x5a, + 0x01, 0xff, 0x01, 0xd1, 0x04, 0x00, 0x01, 0x04, 0x01, 0xff, 0x01, 0xe0, + 0x07, 0x00, 0x01, 0x0c, 0x02, 0xff, 0x01, 0xe7, 0x05, 0x00, 0x01, 0x0d, + 0x01, 0xff, 0x01, 0x50, 0x07, 0x00, 0x01, 0x0b, 0x01, 0xef, 0x01, 0xff, + 0x01, 0xfe, 0x01, 0x70, 0x04, 0x00, 0x01, 0x7f, 0x01, 0xfb, 0x0a, 0x00, + 0x01, 0x16, 0x01, 0xdf, 0x01, 0xf9, 0x03, 0x00, 0x01, 0x02, 0x01, 0xff, + 0x01, 0xf2, 0x0b, 0x00, 0x01, 0x1e, 0x01, 0xff, 0x01, 0x20, 0x02, 0x00, + 0x01, 0x0b, 0x01, 0xff, 0x01, 0x80, 0x0b, 0x00, 0x01, 0x0a, 0x01, 0xff, + 0x01, 0x60, 0x02, 0x00, 0x01, 0x4f, 0x01, 0xfe, 0x0c, 0x00, 0x01, 0x0a, + 0x01, 0xff, 0x01, 0x60, 0x02, 0x00, 0x01, 0xdf, 0x01, 0xf5, 0x0c, 0x00, + 0x01, 0x2f, 0x01, 0xff, 0x01, 0x30, 0x01, 0x00, 0x01, 0x08, 0x01, 0xff, + 0x01, 0xb0, 0x04, 0x00, 0x01, 0x47, 0x01, 0x77, 0x02, 0x00, 0x01, 0xd7, + 0x01, 0x42, 0x01, 0x01, 0x01, 0x38, 0x01, 0xef, 0x01, 0xfc, 0x02, 0x00, + 0x01, 0x2f, 0x01, 0xff, 0x01, 0x20, 0x03, 0x00, 0x01, 0x02, 0x02, 0xff, + 0x02, 0x00, 0x05, 0xff, 0x01, 0xc1, 0x02, 0x00, 0x01, 0xbf, 0x01, 0xf8, + 0x04, 0x00, 0x01, 0x0c, 0x02, 0xff, 0x02, 0x00, 0x01, 0x7b, 0x01, 0xef, + 0x02, 0xff, 0x01, 0xb6, 0x02, 0x00, 0x01, 0x04, 0x01, 0xff, 0x01, 0xe0, + 0x04, 0x00, 0x01, 0x9f, 0x01, 0xbe, 0x01, 0xff, 0x04, 0x00, 0x01, 0x22, + 0x01, 0x10, 0x03, 0x00, 0x01, 0x0d, 0x01, 0xff, 0x01, 0x50, 0x03, 0x00, + 0x01, 0x04, 0x01, 0xfe, 0x01, 0x1e, 0x01, 0xff, 0x09, 0x00, 0x01, 0x8f, + 0x01, 0xfb, 0x04, 0x00, 0x01, 0x1e, 0x01, 0xf3, 0x01, 0x0e, 0x01, 0xff, + 0x08, 0x00, 0x01, 0x02, 0x01, 0xff, 0x01, 0xf2, 0x04, 0x00, 0x01, 0xcf, + 0x01, 0x70, 0x01, 0x0e, 0x01, 0xff, 0x08, 0x00, 0x01, 0x0b, 0x01, 0xff, + 0x01, 0x80, 0x03, 0x00, 0x01, 0x08, 0x01, 0xfb, 0x01, 0x00, 0x01, 0x0e, + 0x01, 0xff, 0x08, 0x00, 0x01, 0x5f, 0x01, 0xfe, 0x04, 0x00, 0x01, 0x4f, + 0x01, 0xe1, 0x01, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x08, 0x00, 0x01, 0xdf, + 0x01, 0xf4, 0x03, 0x00, 0x01, 0x01, 0x01, 0xef, 0x01, 0x40, 0x01, 0x00, + 0x01, 0x0e, 0x01, 0xff, 0x07, 0x00, 0x01, 0x08, 0x01, 0xff, 0x01, 0xb0, + 0x03, 0x00, 0x01, 0x0b, 0x01, 0xf8, 0x02, 0x00, 0x01, 0x0e, 0x01, 0xff, + 0x07, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0x20, 0x03, 0x00, 0x01, 0x3f, + 0x01, 0xf9, 0x02, 0x99, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x99, 0x06, 0x00, + 0x01, 0xbf, 0x01, 0xf8, 0x04, 0x00, 0x01, 0x4f, 0x06, 0xff, 0x05, 0x00, + 0x01, 0x05, 0x01, 0xff, 0x01, 0xd0, 0x04, 0x00, 0x01, 0x29, 0x03, 0x99, + 0x01, 0x9f, 0x01, 0xff, 0x01, 0x99, 0x05, 0x00, 0x01, 0x0d, 0x01, 0xff, + 0x01, 0x40, 0x08, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x06, 0x00, 0x01, 0x8f, + 0x01, 0xfb, 0x09, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x05, 0x00, 0x01, 0x02, + 0x01, 0xff, 0x01, 0xf2, 0x09, 0x00, 0x01, 0x0e, 0x01, 0xff, 0x05, 0x00, + 0x01, 0x0a, 0x01, 0xee, 0x01, 0x70, 0x09, 0x00, 0x01, 0x04, 0x01, 0x55, + 0xbf, 0x00, +#endif // TOUCH_UI_UTF8_FRACTIONS + +#if ENABLED(TOUCH_UI_UTF8_SYMBOLS) + /* 38 MICRON_SIGN */ + 0xff, 0x00, 0x1f, 0x00, 0x01, 0x02, 0x01, 0x44, 0x01, 0x40, 0x05, 0x00, + 0x01, 0x14, 0x01, 0x44, 0x01, 0x10, 0x08, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xf3, 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0x70, 0x08, 0x00, + 0x01, 0x07, 0x01, 0xff, 0x01, 0xf3, 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, + 0x01, 0x70, 0x08, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf3, 0x05, 0x00, + 0x01, 0x4f, 0x01, 0xff, 0x01, 0x70, 0x08, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xf3, 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0x70, 0x08, 0x00, + 0x01, 0x07, 0x01, 0xff, 0x01, 0xf3, 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, + 0x01, 0x70, 0x08, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf3, 0x05, 0x00, + 0x01, 0x4f, 0x01, 0xff, 0x01, 0x70, 0x08, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xf3, 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0x70, 0x08, 0x00, + 0x01, 0x07, 0x01, 0xff, 0x01, 0xf3, 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, + 0x01, 0x70, 0x08, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf3, 0x05, 0x00, + 0x01, 0x4f, 0x01, 0xff, 0x01, 0x70, 0x08, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xf3, 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0x70, 0x08, 0x00, + 0x01, 0x07, 0x01, 0xff, 0x01, 0xf3, 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, + 0x01, 0x70, 0x08, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf3, 0x05, 0x00, + 0x01, 0x4f, 0x01, 0xff, 0x01, 0x70, 0x08, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xf3, 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, 0x01, 0x70, 0x08, 0x00, + 0x01, 0x07, 0x01, 0xff, 0x01, 0xf3, 0x05, 0x00, 0x01, 0x4f, 0x01, 0xff, + 0x01, 0x70, 0x08, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf4, 0x05, 0x00, + 0x01, 0x6f, 0x01, 0xff, 0x01, 0x70, 0x08, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xf6, 0x05, 0x00, 0x01, 0x9f, 0x01, 0xff, 0x01, 0x70, 0x08, 0x00, + 0x01, 0x07, 0x01, 0xff, 0x01, 0xfa, 0x05, 0x00, 0x01, 0xef, 0x01, 0xff, + 0x01, 0x70, 0x08, 0x00, 0x01, 0x07, 0x02, 0xff, 0x01, 0x20, 0x03, 0x00, + 0x01, 0x07, 0x02, 0xff, 0x01, 0x70, 0x08, 0x00, 0x01, 0x07, 0x02, 0xff, + 0x01, 0xd2, 0x03, 0x00, 0x01, 0x6f, 0x02, 0xff, 0x01, 0xa0, 0x08, 0x00, + 0x01, 0x07, 0x03, 0xff, 0x01, 0xa6, 0x01, 0x55, 0x01, 0x8d, 0x03, 0xff, + 0x01, 0xf9, 0x01, 0xa4, 0x07, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf7, + 0x05, 0xff, 0x01, 0x5d, 0x02, 0xff, 0x01, 0xf4, 0x07, 0x00, 0x01, 0x07, + 0x01, 0xff, 0x01, 0xf3, 0x01, 0x5f, 0x03, 0xff, 0x01, 0xf5, 0x01, 0x06, + 0x02, 0xff, 0x01, 0xf4, 0x07, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf3, + 0x01, 0x01, 0x01, 0x7c, 0x01, 0xdd, 0x01, 0xc7, 0x01, 0x10, 0x01, 0x00, + 0x01, 0x6c, 0x01, 0xdb, 0x01, 0x50, 0x07, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xf3, 0x10, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf3, 0x10, 0x00, + 0x01, 0x07, 0x01, 0xff, 0x01, 0xf3, 0x10, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xf3, 0x10, 0x00, 0x01, 0x07, 0x01, 0xff, 0x01, 0xf3, 0x10, 0x00, + 0x01, 0x07, 0x01, 0xff, 0x01, 0xf3, 0x10, 0x00, 0x01, 0x07, 0x01, 0xff, + 0x01, 0xf3, 0x10, 0x00, 0x01, 0x07, 0x01, 0xee, 0x01, 0xe3, 0x35, 0x00, + + /* 39 PILCROW_SIGN */ + 0x9c, 0x00, 0x01, 0x16, 0x01, 0x9b, 0x04, 0xcc, 0x01, 0xca, 0x0b, 0x00, + 0x01, 0x19, 0x06, 0xff, 0x01, 0xfd, 0x0a, 0x00, 0x01, 0x03, 0x01, 0xef, + 0x03, 0xff, 0x01, 0xfb, 0x01, 0xaa, 0x01, 0xaf, 0x01, 0xfd, 0x0a, 0x00, + 0x01, 0x2e, 0x04, 0xff, 0x01, 0xf2, 0x01, 0x00, 0x01, 0x0f, 0x01, 0xfd, + 0x0a, 0x00, 0x01, 0xbf, 0x04, 0xff, 0x01, 0xf2, 0x01, 0x00, 0x01, 0x0f, + 0x01, 0xfd, 0x09, 0x00, 0x01, 0x03, 0x05, 0xff, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x09, 0x00, 0x01, 0x08, 0x05, 0xff, 0x01, 0xf2, + 0x01, 0x00, 0x01, 0x0f, 0x01, 0xfd, 0x09, 0x00, 0x01, 0x0b, 0x05, 0xff, + 0x01, 0xf2, 0x01, 0x00, 0x01, 0x0f, 0x01, 0xfd, 0x09, 0x00, 0x01, 0x0c, + 0x05, 0xff, 0x01, 0xf2, 0x01, 0x00, 0x01, 0x0f, 0x01, 0xfd, 0x09, 0x00, + 0x01, 0x0b, 0x05, 0xff, 0x01, 0xf2, 0x01, 0x00, 0x01, 0x0f, 0x01, 0xfd, + 0x09, 0x00, 0x01, 0x0a, 0x05, 0xff, 0x01, 0xf2, 0x01, 0x00, 0x01, 0x0f, + 0x01, 0xfd, 0x09, 0x00, 0x01, 0x06, 0x05, 0xff, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0a, 0x00, 0x01, 0xef, 0x04, 0xff, 0x01, 0xf2, + 0x01, 0x00, 0x01, 0x0f, 0x01, 0xfd, 0x0a, 0x00, 0x01, 0x6f, 0x04, 0xff, + 0x01, 0xf2, 0x01, 0x00, 0x01, 0x0f, 0x01, 0xfd, 0x0a, 0x00, 0x01, 0x08, + 0x04, 0xff, 0x01, 0xf2, 0x01, 0x00, 0x01, 0x0f, 0x01, 0xfd, 0x0b, 0x00, + 0x01, 0x5e, 0x03, 0xff, 0x01, 0xf2, 0x01, 0x00, 0x01, 0x0f, 0x01, 0xfd, + 0x0c, 0x00, 0x01, 0x6b, 0x02, 0xff, 0x01, 0xf2, 0x01, 0x00, 0x01, 0x0f, + 0x01, 0xfd, 0x0d, 0x00, 0x01, 0x01, 0x01, 0xcf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0xbf, 0x01, 0xf2, 0x01, 0x00, + 0x01, 0x0f, 0x01, 0xfd, 0x0e, 0x00, 0x01, 0x34, 0x01, 0x40, 0x01, 0x00, + 0x01, 0x04, 0x01, 0x43, 0x7a, 0x00, + + /* 40 BROKEN_BAR */ + 0xad, 0x00, 0x01, 0x07, 0x01, 0x99, 0x01, 0x60, 0x10, 0x00, 0x01, 0x0c, + 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, + 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, + 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, + 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, + 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, + 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, + 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, + 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, + 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, + 0x10, 0x00, 0x01, 0x08, 0x01, 0xbb, 0x01, 0x70, 0x6f, 0x00, 0x01, 0x0b, + 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, + 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, + 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, + 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, + 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, + 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, + 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, + 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, + 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, + 0x10, 0x00, 0x01, 0x0c, 0x01, 0xff, 0x01, 0xa0, 0x10, 0x00, 0x01, 0x04, + 0x01, 0x55, 0x01, 0x30, 0x47, 0x00, + + /* 41 SECTION_SIGN */ + 0x89, 0x00, 0x01, 0x35, 0x01, 0x64, 0x01, 0x31, 0x0e, 0x00, 0x01, 0x01, + 0x01, 0x9e, 0x03, 0xff, 0x01, 0xd9, 0x01, 0x30, 0x0c, 0x00, 0x01, 0x2e, + 0x05, 0xff, 0x01, 0xb0, 0x0c, 0x00, 0x01, 0xef, 0x01, 0xff, 0x01, 0xfb, + 0x01, 0x98, 0x01, 0xae, 0x01, 0xff, 0x01, 0xb0, 0x0b, 0x00, 0x01, 0x07, + 0x01, 0xff, 0x01, 0xfc, 0x01, 0x10, 0x02, 0x00, 0x01, 0x39, 0x01, 0xa0, + 0x0b, 0x00, 0x01, 0x0b, 0x01, 0xff, 0x01, 0xf2, 0x10, 0x00, 0x01, 0x0c, + 0x01, 0xff, 0x01, 0xf0, 0x10, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xf3, + 0x10, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x20, 0x10, 0x00, + 0x01, 0xdf, 0x01, 0xff, 0x01, 0xe4, 0x10, 0x00, 0x01, 0x1d, 0x02, 0xff, + 0x01, 0xa1, 0x0f, 0x00, 0x01, 0x4e, 0x03, 0xff, 0x01, 0x70, 0x0d, 0x00, + 0x01, 0x06, 0x01, 0xff, 0x01, 0xf9, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xfd, + 0x01, 0x30, 0x0c, 0x00, 0x01, 0x3f, 0x01, 0xff, 0x01, 0x60, 0x01, 0x07, + 0x02, 0xff, 0x01, 0xf8, 0x0c, 0x00, 0x01, 0xbf, 0x01, 0xf9, 0x02, 0x00, + 0x01, 0x19, 0x02, 0xff, 0x01, 0xc0, 0x0b, 0x00, 0x01, 0xff, 0x01, 0xf3, + 0x03, 0x00, 0x01, 0x4e, 0x01, 0xff, 0x01, 0xfb, 0x0a, 0x00, 0x01, 0x01, + 0x01, 0xff, 0x01, 0xf2, 0x03, 0x00, 0x01, 0x01, 0x01, 0xdf, 0x01, 0xff, + 0x01, 0x40, 0x09, 0x00, 0x01, 0x01, 0x01, 0xff, 0x01, 0xf7, 0x04, 0x00, + 0x01, 0x2f, 0x01, 0xff, 0x01, 0x90, 0x0a, 0x00, 0x01, 0xdf, 0x01, 0xff, + 0x01, 0x20, 0x03, 0x00, 0x01, 0x0a, 0x01, 0xff, 0x01, 0xb0, 0x0a, 0x00, + 0x01, 0x6f, 0x01, 0xff, 0x01, 0xf5, 0x03, 0x00, 0x01, 0x08, 0x01, 0xff, + 0x01, 0xa0, 0x0a, 0x00, 0x01, 0x0a, 0x02, 0xff, 0x01, 0x91, 0x02, 0x00, + 0x01, 0x0c, 0x01, 0xff, 0x01, 0x70, 0x0b, 0x00, 0x01, 0x8f, 0x01, 0xff, + 0x01, 0xfe, 0x01, 0x60, 0x01, 0x00, 0x01, 0x6f, 0x01, 0xff, 0x01, 0x10, + 0x0b, 0x00, 0x01, 0x03, 0x01, 0xdf, 0x01, 0xff, 0x01, 0xfd, 0x01, 0x46, + 0x01, 0xff, 0x01, 0xf5, 0x0d, 0x00, 0x01, 0x07, 0x04, 0xff, 0x01, 0x50, + 0x0e, 0x00, 0x01, 0x2a, 0x02, 0xff, 0x01, 0xf5, 0x10, 0x00, 0x01, 0x4e, + 0x01, 0xff, 0x01, 0xfe, 0x01, 0x20, 0x0f, 0x00, 0x01, 0x01, 0x01, 0xcf, + 0x01, 0xff, 0x01, 0xc0, 0x10, 0x00, 0x01, 0x1e, 0x01, 0xff, 0x01, 0xf3, + 0x10, 0x00, 0x01, 0x06, 0x01, 0xff, 0x01, 0xf6, 0x10, 0x00, 0x01, 0x05, + 0x01, 0xff, 0x01, 0xf6, 0x0b, 0x00, 0x01, 0x01, 0x04, 0x00, 0x01, 0x0a, + 0x01, 0xff, 0x01, 0xf3, 0x0b, 0x00, 0x01, 0x08, 0x01, 0xe8, 0x01, 0x20, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x8f, 0x01, 0xff, 0x01, 0xe0, 0x0b, 0x00, + 0x01, 0x08, 0x01, 0xff, 0x01, 0xfe, 0x01, 0xcb, 0x01, 0xdf, 0x02, 0xff, + 0x01, 0x40, 0x0b, 0x00, 0x01, 0x08, 0x05, 0xff, 0x01, 0xf5, 0x0d, 0x00, + 0x01, 0x49, 0x01, 0xdf, 0x02, 0xff, 0x01, 0xe8, 0x01, 0x20, 0x0f, 0x00, + 0x01, 0x12, 0x01, 0x21, 0x7f, 0x00, + + /* 42 NOT_SIGN */ + 0xff, 0x00, 0x7f, 0x00, 0x01, 0x12, 0x0c, 0x22, 0x06, 0x00, 0x01, 0x9f, + 0x0c, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0x9f, 0x0c, 0xff, 0x01, 0x40, + 0x05, 0x00, 0x01, 0x9f, 0x0c, 0xff, 0x01, 0x40, 0x05, 0x00, 0x01, 0x24, + 0x0a, 0x44, 0x01, 0x6f, 0x01, 0xff, 0x01, 0x40, 0x10, 0x00, 0x01, 0x2f, + 0x01, 0xff, 0x01, 0x40, 0x10, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0x40, + 0x10, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0x40, 0x10, 0x00, 0x01, 0x2f, + 0x01, 0xff, 0x01, 0x40, 0x10, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0x40, + 0x10, 0x00, 0x01, 0x2f, 0x01, 0xff, 0x01, 0x40, 0x10, 0x00, 0x01, 0x2f, + 0x01, 0xff, 0x01, 0x40, 0x10, 0x00, 0x01, 0x17, 0x01, 0x77, 0x01, 0x10, + 0xff, 0x00, 0x34, 0x00 +#endif // TOUCH_UI_UTF8_SYMBOLS }; + diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extras/bitmap2cpp.py b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extras/bitmap2cpp.py index 1c331ab0b191..c295dfc5b8d4 100755 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extras/bitmap2cpp.py +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extras/bitmap2cpp.py @@ -1,6 +1,6 @@ #!/usr/bin/python -# Written By Marcio Teixeira 2018 - Aleph Objects, Inc. +# Written By Marcio Teixeira 2019 - Aleph Objects, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -38,13 +38,16 @@ def pack_rle(data): return rle class WriteSource: - def __init__(self): - self.values = [] + def __init__(self, lines_in_blocks): + self.blocks = [] + self.values = [] + self.block_size = lines_in_blocks + self.rows = 0 def add_pixel(self, value): self.values.append(value) - def convert_to_4bpp(self, data): + def convert_to_4bpp(self, data, chunk_size = 0): # Invert the image data = map(lambda i: 255 - i, data) # Quanitize 8-bit values into 4-bits @@ -60,30 +63,46 @@ def convert_to_4bpp(self, data): # Convert values into hex strings return map(lambda a: "0x" + format(a, '02x'), data) - def end_row(self): + def end_row(self, y): # Pad each row into even number of values if len(self.values) & 1: self.values.append(0) + self.rows += 1 + if self.block_size and (self.rows % self.block_size) == 0: + self.blocks.append(self.values) + self.values = [] + def write(self): - data = self.convert_to_4bpp(self.values) - data = ', '.join(data) - data = textwrap.fill(data, 75, initial_indent = ' ', subsequent_indent = ' ') + if len(self.values): + self.blocks.append(self.values) + + block_strs = []; + for b in self.blocks: + data = self.convert_to_4bpp(b) + data = ', '.join(data) + data = textwrap.fill(data, 75, initial_indent = ' ', subsequent_indent = ' ') + block_strs.append(data) print("const unsigned char font[] PROGMEM = {") - print(data); - print("};") + for i, b in enumerate(block_strs): + if i: + print(',') + print('\n /* {} */'.format(i)) + print(b, end='') + print("\n};") if __name__ == "__main__": parser = argparse.ArgumentParser(description='Converts a grayscale bitmap into a 16-level RLE packed C array for use as font data') parser.add_argument("input") + parser.add_argument('--char_height', help='Adds a separator every so many lines', type=int) args = parser.parse_args() - img = Image.open(args.input).convert('L') + writer = WriteSource(args.char_height) - writer = WriteSource() + img = Image.open(args.input).convert('L') for y in range(img.height): for x in range(img.width): writer.add_pixel(img.getpixel((x,y))) - writer.end_row() + writer.end_row(y) writer.write() diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_printing_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_printing_dialog_box.cpp index c24eb53a74d9..bcf9fb855016 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_printing_dialog_box.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_printing_dialog_box.cpp @@ -130,7 +130,7 @@ void BioPrintingDialogBox::setStatusMessage(const char* message) { draw_interaction_buttons(BACKGROUND); storeBackground(); - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR("New status message: ", message); #endif diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/status_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/status_screen.cpp index b5a8857ee7d8..81fc86d5a488 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/status_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/status_screen.cpp @@ -333,7 +333,7 @@ void StatusScreen::setStatusMessage(const char* message) { storeBackground(); - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR("New status message: ", message); #endif diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp index 2e513d320c62..4effca9fed62 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp @@ -51,7 +51,7 @@ void TouchCalibrationScreen::onEntry() { .execute(); while (CLCD::is_touching()) { - #ifdef UI_FRAMEWORK_DEBUG + #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); SERIAL_ECHOLNPGM("Waiting for touch release"); #endif diff --git a/config/default/Configuration_adv.h b/config/default/Configuration_adv.h index 665e77753da6..b6ba665fcf55 100644 --- a/config/default/Configuration_adv.h +++ b/config/default/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h index 2a10317d7c4b..6017b0812de5 100644 --- a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h +++ b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h index de24d84791fd..b2969a1c64a2 100644 --- a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h index 56c406b63fb2..40d87dc6d43a 100644 --- a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/AlephObjects/TAZ4/Configuration_adv.h b/config/examples/AlephObjects/TAZ4/Configuration_adv.h index c598db0fd4d3..b19429787da1 100644 --- a/config/examples/AlephObjects/TAZ4/Configuration_adv.h +++ b/config/examples/AlephObjects/TAZ4/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h index c0bc1ea86d1e..9f80e2a76f48 100644 --- a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h +++ b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h @@ -1209,13 +1209,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1224,6 +1241,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Alfawise/U20/Configuration_adv.h b/config/examples/Alfawise/U20/Configuration_adv.h index a13605d7b1a0..33b2fb83a645 100644 --- a/config/examples/Alfawise/U20/Configuration_adv.h +++ b/config/examples/Alfawise/U20/Configuration_adv.h @@ -1208,13 +1208,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1223,6 +1240,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/AliExpress/UM2pExt/Configuration_adv.h b/config/examples/AliExpress/UM2pExt/Configuration_adv.h index c56cdf81aa46..03b3dc96e5eb 100644 --- a/config/examples/AliExpress/UM2pExt/Configuration_adv.h +++ b/config/examples/AliExpress/UM2pExt/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Anet/A2/Configuration_adv.h b/config/examples/Anet/A2/Configuration_adv.h index 53617ceb2ef8..f7f298ff1a63 100644 --- a/config/examples/Anet/A2/Configuration_adv.h +++ b/config/examples/Anet/A2/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Anet/A2plus/Configuration_adv.h b/config/examples/Anet/A2plus/Configuration_adv.h index 53617ceb2ef8..f7f298ff1a63 100644 --- a/config/examples/Anet/A2plus/Configuration_adv.h +++ b/config/examples/Anet/A2plus/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Anet/A6/Configuration_adv.h b/config/examples/Anet/A6/Configuration_adv.h index 32799ec0640c..e1b3ffa8c4a6 100644 --- a/config/examples/Anet/A6/Configuration_adv.h +++ b/config/examples/Anet/A6/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Anet/A8/Configuration_adv.h b/config/examples/Anet/A8/Configuration_adv.h index dbe591d5fd1f..05f68e207332 100644 --- a/config/examples/Anet/A8/Configuration_adv.h +++ b/config/examples/Anet/A8/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Anet/A8plus/Configuration_adv.h b/config/examples/Anet/A8plus/Configuration_adv.h index 2745dffc63f9..ee5bb397e3c8 100644 --- a/config/examples/Anet/A8plus/Configuration_adv.h +++ b/config/examples/Anet/A8plus/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Anet/E16/Configuration_adv.h b/config/examples/Anet/E16/Configuration_adv.h index 6c504813d936..6c7b312ca205 100644 --- a/config/examples/Anet/E16/Configuration_adv.h +++ b/config/examples/Anet/E16/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/AnyCubic/i3/Configuration_adv.h b/config/examples/AnyCubic/i3/Configuration_adv.h index f1beff557e07..4d764120c676 100644 --- a/config/examples/AnyCubic/i3/Configuration_adv.h +++ b/config/examples/AnyCubic/i3/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/ArmEd/Configuration_adv.h b/config/examples/ArmEd/Configuration_adv.h index 49f079dcd0de..a62a09285f6d 100644 --- a/config/examples/ArmEd/Configuration_adv.h +++ b/config/examples/ArmEd/Configuration_adv.h @@ -1209,13 +1209,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1224,6 +1241,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h index 3927bbc47ecc..98a6fdb30cd3 100644 --- a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/BIBO/TouchX/default/Configuration_adv.h b/config/examples/BIBO/TouchX/default/Configuration_adv.h index 13b1234e4dcd..bb54c2e13e98 100644 --- a/config/examples/BIBO/TouchX/default/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/default/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/BQ/Hephestos/Configuration_adv.h b/config/examples/BQ/Hephestos/Configuration_adv.h index 7cad883fe17a..6558554f2082 100644 --- a/config/examples/BQ/Hephestos/Configuration_adv.h +++ b/config/examples/BQ/Hephestos/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/BQ/Hephestos_2/Configuration_adv.h b/config/examples/BQ/Hephestos_2/Configuration_adv.h index 01f06aa9e4fe..fb99ce17a8ca 100644 --- a/config/examples/BQ/Hephestos_2/Configuration_adv.h +++ b/config/examples/BQ/Hephestos_2/Configuration_adv.h @@ -1213,13 +1213,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1228,6 +1245,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/BQ/WITBOX/Configuration_adv.h b/config/examples/BQ/WITBOX/Configuration_adv.h index 7cad883fe17a..6558554f2082 100644 --- a/config/examples/BQ/WITBOX/Configuration_adv.h +++ b/config/examples/BQ/WITBOX/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Cartesio/Configuration_adv.h b/config/examples/Cartesio/Configuration_adv.h index 25d44f656659..c5bf68b552a5 100644 --- a/config/examples/Cartesio/Configuration_adv.h +++ b/config/examples/Cartesio/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Creality/CR-10/Configuration_adv.h b/config/examples/Creality/CR-10/Configuration_adv.h index b7282d86266a..a6d3c8599530 100644 --- a/config/examples/Creality/CR-10/Configuration_adv.h +++ b/config/examples/Creality/CR-10/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Creality/CR-10S/Configuration_adv.h b/config/examples/Creality/CR-10S/Configuration_adv.h index b25ae448ceb4..5a9ac98776f1 100644 --- a/config/examples/Creality/CR-10S/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Creality/CR-10_5S/Configuration_adv.h b/config/examples/Creality/CR-10_5S/Configuration_adv.h index 0efbc18ef933..1948de05b3fc 100644 --- a/config/examples/Creality/CR-10_5S/Configuration_adv.h +++ b/config/examples/Creality/CR-10_5S/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Creality/CR-10mini/Configuration_adv.h b/config/examples/Creality/CR-10mini/Configuration_adv.h index 0937cbacff14..74bf861e06dc 100644 --- a/config/examples/Creality/CR-10mini/Configuration_adv.h +++ b/config/examples/Creality/CR-10mini/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Creality/CR-20 Pro/Configuration_adv.h b/config/examples/Creality/CR-20 Pro/Configuration_adv.h index 177a6b599317..1ba51c508b76 100644 --- a/config/examples/Creality/CR-20 Pro/Configuration_adv.h +++ b/config/examples/Creality/CR-20 Pro/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Creality/CR-20/Configuration_adv.h b/config/examples/Creality/CR-20/Configuration_adv.h index e7832f039c22..3cf51e822170 100644 --- a/config/examples/Creality/CR-20/Configuration_adv.h +++ b/config/examples/Creality/CR-20/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Creality/CR-8/Configuration_adv.h b/config/examples/Creality/CR-8/Configuration_adv.h index 73364e79f204..5f6dbc149dfc 100644 --- a/config/examples/Creality/CR-8/Configuration_adv.h +++ b/config/examples/Creality/CR-8/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Creality/Ender-2/Configuration_adv.h b/config/examples/Creality/Ender-2/Configuration_adv.h index c604d1bab373..785c161d5683 100644 --- a/config/examples/Creality/Ender-2/Configuration_adv.h +++ b/config/examples/Creality/Ender-2/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Creality/Ender-3/Configuration_adv.h b/config/examples/Creality/Ender-3/Configuration_adv.h index b580ea7e713a..ce293ef3fc8e 100644 --- a/config/examples/Creality/Ender-3/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Creality/Ender-4/Configuration_adv.h b/config/examples/Creality/Ender-4/Configuration_adv.h index 941c4d0817ec..3791dc908283 100644 --- a/config/examples/Creality/Ender-4/Configuration_adv.h +++ b/config/examples/Creality/Ender-4/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Creality/Ender-5/Configuration_adv.h b/config/examples/Creality/Ender-5/Configuration_adv.h index f0a7cf924fbc..71d233421c60 100644 --- a/config/examples/Creality/Ender-5/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h index c1c0c5edfc95..4f057bf800bd 100644 --- a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h +++ b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h index 16d421f6063d..c6bd2bbcf030 100755 --- a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h +++ b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Einstart-S/Configuration_adv.h b/config/examples/Einstart-S/Configuration_adv.h index 1405df669e56..1705be759dad 100644 --- a/config/examples/Einstart-S/Configuration_adv.h +++ b/config/examples/Einstart-S/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/FYSETC/AIO_II/Configuration_adv.h b/config/examples/FYSETC/AIO_II/Configuration_adv.h index 5140adb975a0..5199d97e4f97 100644 --- a/config/examples/FYSETC/AIO_II/Configuration_adv.h +++ b/config/examples/FYSETC/AIO_II/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h index 94e099fe8245..fbe0fb99668a 100644 --- a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h index 94e099fe8245..fbe0fb99668a 100644 --- a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h index 94e099fe8245..fbe0fb99668a 100644 --- a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h index 94e099fe8245..fbe0fb99668a 100644 --- a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/FYSETC/F6_13/Configuration_adv.h b/config/examples/FYSETC/F6_13/Configuration_adv.h index c3339920ca5f..2790ca7522da 100644 --- a/config/examples/FYSETC/F6_13/Configuration_adv.h +++ b/config/examples/FYSETC/F6_13/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Felix/Configuration_adv.h b/config/examples/Felix/Configuration_adv.h index 89008413afd2..50e396f456b3 100644 --- a/config/examples/Felix/Configuration_adv.h +++ b/config/examples/Felix/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/FlashForge/CreatorPro/Configuration_adv.h b/config/examples/FlashForge/CreatorPro/Configuration_adv.h index a4fbc6a81ae8..d9365a3f2064 100644 --- a/config/examples/FlashForge/CreatorPro/Configuration_adv.h +++ b/config/examples/FlashForge/CreatorPro/Configuration_adv.h @@ -1204,13 +1204,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1219,6 +1236,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/FolgerTech/i3-2020/Configuration_adv.h b/config/examples/FolgerTech/i3-2020/Configuration_adv.h index 02e80ff5aec8..473de3b841b8 100644 --- a/config/examples/FolgerTech/i3-2020/Configuration_adv.h +++ b/config/examples/FolgerTech/i3-2020/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Formbot/Raptor/Configuration_adv.h b/config/examples/Formbot/Raptor/Configuration_adv.h index 35ebe3d2e89b..e3b1bd44bf4b 100644 --- a/config/examples/Formbot/Raptor/Configuration_adv.h +++ b/config/examples/Formbot/Raptor/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h index 576615a47f7f..ca93a1217cc0 100644 --- a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h @@ -1209,13 +1209,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1224,6 +1241,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Formbot/T_Rex_3/Configuration_adv.h b/config/examples/Formbot/T_Rex_3/Configuration_adv.h index bf045f50d87c..4e9195ab748f 100644 --- a/config/examples/Formbot/T_Rex_3/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_3/Configuration_adv.h @@ -1209,13 +1209,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1224,6 +1241,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Geeetech/A10/Configuration_adv.h b/config/examples/Geeetech/A10/Configuration_adv.h index 031fc5fbddd8..b9acae423403 100644 --- a/config/examples/Geeetech/A10/Configuration_adv.h +++ b/config/examples/Geeetech/A10/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Geeetech/A10M/Configuration_adv.h b/config/examples/Geeetech/A10M/Configuration_adv.h index 6ac35c3a8389..8e3c660634f7 100644 --- a/config/examples/Geeetech/A10M/Configuration_adv.h +++ b/config/examples/Geeetech/A10M/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Geeetech/A20M/Configuration_adv.h b/config/examples/Geeetech/A20M/Configuration_adv.h index 469fa3769078..246b9d75fd34 100644 --- a/config/examples/Geeetech/A20M/Configuration_adv.h +++ b/config/examples/Geeetech/A20M/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Geeetech/MeCreator2/Configuration_adv.h b/config/examples/Geeetech/MeCreator2/Configuration_adv.h index b19f42923d91..5fef4961cd96 100644 --- a/config/examples/Geeetech/MeCreator2/Configuration_adv.h +++ b/config/examples/Geeetech/MeCreator2/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h index 031fc5fbddd8..b9acae423403 100644 --- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h index 031fc5fbddd8..b9acae423403 100644 --- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/HMS434/Configuration_adv.h b/config/examples/HMS434/Configuration_adv.h index 1eb8b3e4c49b..beca75d86c2c 100644 --- a/config/examples/HMS434/Configuration_adv.h +++ b/config/examples/HMS434/Configuration_adv.h @@ -1146,6 +1146,85 @@ #endif // HAS_GRAPHICAL_LCD +// +// Lulzbot Touch UI +// +#if ENABLED(LULZBOT_TOUCH_UI) + // Display board used + //#define LCD_FTDI_VM800B35A // FTDI 3.5" with FT800 (320x240) + //#define LCD_4DSYSTEMS_4DLCD_FT843 // 4D Systems 4.3" (480x272) + //#define LCD_HAOYU_FT800CB // Haoyu with 4.3" or 5" (480x272) + //#define LCD_HAOYU_FT810CB // Haoyu with 5" (800x480) + //#define LCD_ALEPHOBJECTS_CLCD_UI // Aleph Objects Color LCD UI + + // Correct the resolution if not using the stock TFT panel. + //#define TOUCH_UI_320x240 + //#define TOUCH_UI_480x272 + //#define TOUCH_UI_800x480 + + // Mappings for boards with a standard RepRapDiscount Display connector + //#define AO_EXP1_PINMAP // AlephObjects CLCD UI EXP1 mapping + //#define AO_EXP2_PINMAP // AlephObjects CLCD UI EXP2 mapping + //#define CR10_TFT_PINMAP // Rudolph Riedel's CR10 pin mapping + //#define OTHER_PIN_LAYOUT // Define pins manually below + #if ENABLED(OTHER_PIN_LAYOUT) + // The pins for CS and MOD_RESET (PD) must be chosen. + #define CLCD_MOD_RESET 9 + #define CLCD_SPI_CS 10 + + // If using software SPI, specify pins for SCLK, MOSI, MISO + //#define CLCD_USE_SOFT_SPI + #if ENABLED(CLCD_USE_SOFT_SPI) + #define CLCD_SOFT_SPI_MOSI 11 + #define CLCD_SOFT_SPI_MISO 12 + #define CLCD_SOFT_SPI_SCLK 13 + #endif + #endif + + // Display Orientation. An inverted (i.e. upside-down) display + // is supported on the FT800. The FT810 and beyond also support + // portrait and mirrored orientations. + //#define TOUCH_UI_INVERTED + //#define TOUCH_UI_PORTRAIT + //#define TOUCH_UI_MIRRORED + + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. + //#define TOUCH_UI_USE_UTF8 + #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. + #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif + #endif + + // Use a smaller font when labels don't fit buttons + #define TOUCH_UI_FIT_TEXT + + // Runtime language selection (otherwise LCD_LANGUAGE) + //#define TOUCH_UI_LANGUAGE_MENU + + // Use a numeric passcode for "Screen lock" keypad. + // (recommended for smaller displays) + //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG +#endif + // // FSMC Graphical TFT // diff --git a/config/examples/Infitary/i3-M508/Configuration_adv.h b/config/examples/Infitary/i3-M508/Configuration_adv.h index 7feb9fdab852..54e325ee2dfa 100644 --- a/config/examples/Infitary/i3-M508/Configuration_adv.h +++ b/config/examples/Infitary/i3-M508/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/JGAurora/A1/Configuration_adv.h b/config/examples/JGAurora/A1/Configuration_adv.h index edc9254e5457..ad939214126b 100644 --- a/config/examples/JGAurora/A1/Configuration_adv.h +++ b/config/examples/JGAurora/A1/Configuration_adv.h @@ -1210,13 +1210,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1225,6 +1242,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/JGAurora/A5/Configuration_adv.h b/config/examples/JGAurora/A5/Configuration_adv.h index d5c4b7b2c524..f0b1c2e8c6d4 100644 --- a/config/examples/JGAurora/A5/Configuration_adv.h +++ b/config/examples/JGAurora/A5/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/JGAurora/A5S/Configuration_adv.h b/config/examples/JGAurora/A5S/Configuration_adv.h index edc9254e5457..ad939214126b 100644 --- a/config/examples/JGAurora/A5S/Configuration_adv.h +++ b/config/examples/JGAurora/A5S/Configuration_adv.h @@ -1210,13 +1210,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1225,6 +1242,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/MakerParts/Configuration_adv.h b/config/examples/MakerParts/Configuration_adv.h index 680478f3acf2..7a10c4977166 100644 --- a/config/examples/MakerParts/Configuration_adv.h +++ b/config/examples/MakerParts/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Malyan/M150/Configuration_adv.h b/config/examples/Malyan/M150/Configuration_adv.h index 3d86b30209a3..182ed8c787b9 100644 --- a/config/examples/Malyan/M150/Configuration_adv.h +++ b/config/examples/Malyan/M150/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Malyan/M200/Configuration_adv.h b/config/examples/Malyan/M200/Configuration_adv.h index e8aac1ffe400..16412629c00e 100644 --- a/config/examples/Malyan/M200/Configuration_adv.h +++ b/config/examples/Malyan/M200/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Micromake/C1/enhanced/Configuration_adv.h b/config/examples/Micromake/C1/enhanced/Configuration_adv.h index 5473a13da6c6..9dc742bff929 100644 --- a/config/examples/Micromake/C1/enhanced/Configuration_adv.h +++ b/config/examples/Micromake/C1/enhanced/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Mks/Robin/Configuration_adv.h b/config/examples/Mks/Robin/Configuration_adv.h index 104b7cff84c3..ec45f38eed0a 100644 --- a/config/examples/Mks/Robin/Configuration_adv.h +++ b/config/examples/Mks/Robin/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Mks/Sbase/Configuration_adv.h b/config/examples/Mks/Sbase/Configuration_adv.h index efffe298642d..847e2fe58405 100644 --- a/config/examples/Mks/Sbase/Configuration_adv.h +++ b/config/examples/Mks/Sbase/Configuration_adv.h @@ -1206,13 +1206,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1221,6 +1238,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/RapideLite/RL200/Configuration_adv.h b/config/examples/RapideLite/RL200/Configuration_adv.h index f399c620eaf5..cc48e77f63a6 100644 --- a/config/examples/RapideLite/RL200/Configuration_adv.h +++ b/config/examples/RapideLite/RL200/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/RigidBot/Configuration_adv.h b/config/examples/RigidBot/Configuration_adv.h index f2f3294034e8..0cd4a3fb54f9 100644 --- a/config/examples/RigidBot/Configuration_adv.h +++ b/config/examples/RigidBot/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/SCARA/Configuration_adv.h b/config/examples/SCARA/Configuration_adv.h index ab4a937c6bc9..a866976f6dc2 100644 --- a/config/examples/SCARA/Configuration_adv.h +++ b/config/examples/SCARA/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h index 8225c2daef97..80f9d06ddf9f 100644 --- a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h +++ b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Sanguinololu/Configuration_adv.h b/config/examples/Sanguinololu/Configuration_adv.h index f3ee763eb5b4..ff0a71beec97 100644 --- a/config/examples/Sanguinololu/Configuration_adv.h +++ b/config/examples/Sanguinololu/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Tevo/Michelangelo/Configuration_adv.h b/config/examples/Tevo/Michelangelo/Configuration_adv.h index 25a8916bcb2d..451e06e58a47 100644 --- a/config/examples/Tevo/Michelangelo/Configuration_adv.h +++ b/config/examples/Tevo/Michelangelo/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h index fb8651d11a49..33a9f5e06603 100755 --- a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h +++ b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h @@ -1201,13 +1201,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1216,6 +1233,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h index ae06f4e34465..68748ce057ae 100755 --- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h index ae06f4e34465..68748ce057ae 100755 --- a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/TheBorg/Configuration_adv.h b/config/examples/TheBorg/Configuration_adv.h index d7ae37580de9..1a3362374977 100644 --- a/config/examples/TheBorg/Configuration_adv.h +++ b/config/examples/TheBorg/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/TinyBoy2/Configuration_adv.h b/config/examples/TinyBoy2/Configuration_adv.h index ddd3addcd1a8..8a8bd404a247 100644 --- a/config/examples/TinyBoy2/Configuration_adv.h +++ b/config/examples/TinyBoy2/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Tronxy/X3A/Configuration_adv.h b/config/examples/Tronxy/X3A/Configuration_adv.h index 3b40797c6f96..700700347b11 100644 --- a/config/examples/Tronxy/X3A/Configuration_adv.h +++ b/config/examples/Tronxy/X3A/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Tronxy/X5S-2E/Configuration_adv.h b/config/examples/Tronxy/X5S-2E/Configuration_adv.h index 66f4262ef132..454a2fc16a92 100644 --- a/config/examples/Tronxy/X5S-2E/Configuration_adv.h +++ b/config/examples/Tronxy/X5S-2E/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/UltiMachine/Archim1/Configuration_adv.h b/config/examples/UltiMachine/Archim1/Configuration_adv.h index 9aff4b9c1c4f..a270d01c2308 100644 --- a/config/examples/UltiMachine/Archim1/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim1/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/UltiMachine/Archim2/Configuration_adv.h b/config/examples/UltiMachine/Archim2/Configuration_adv.h index 9a84d4038036..9a2eabb2f34e 100644 --- a/config/examples/UltiMachine/Archim2/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim2/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/VORONDesign/Configuration_adv.h b/config/examples/VORONDesign/Configuration_adv.h index 5d389bc8c43a..110edf17bcfa 100644 --- a/config/examples/VORONDesign/Configuration_adv.h +++ b/config/examples/VORONDesign/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Velleman/K8200/Configuration_adv.h b/config/examples/Velleman/K8200/Configuration_adv.h index 611aeebae631..9531281ce487 100644 --- a/config/examples/Velleman/K8200/Configuration_adv.h +++ b/config/examples/Velleman/K8200/Configuration_adv.h @@ -1218,13 +1218,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1233,6 +1250,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Velleman/K8400/Configuration_adv.h b/config/examples/Velleman/K8400/Configuration_adv.h index cb608b868495..91d9fea2a2a0 100644 --- a/config/examples/Velleman/K8400/Configuration_adv.h +++ b/config/examples/Velleman/K8400/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/WASP/PowerWASP/Configuration_adv.h b/config/examples/WASP/PowerWASP/Configuration_adv.h index e2b679a3054c..e31c3f2b63c2 100644 --- a/config/examples/WASP/PowerWASP/Configuration_adv.h +++ b/config/examples/WASP/PowerWASP/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h index faa61a82478f..44d9be6f00f0 100644 --- a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h @@ -1207,13 +1207,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1222,6 +1239,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h index 0e9cce42baec..b2686349725f 100644 --- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h index 22b8c529fa32..7a74e42b535b 100644 --- a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h +++ b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h @@ -1207,13 +1207,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1222,6 +1239,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h index 64d0c315bb1d..cba2978e7a85 100644 --- a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h @@ -1207,13 +1207,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1222,6 +1239,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h index 64d0c315bb1d..cba2978e7a85 100644 --- a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h @@ -1207,13 +1207,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1222,6 +1239,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h index 7bbbf1ab5c9f..deac5af28031 100644 --- a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h +++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h @@ -1207,13 +1207,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1222,6 +1239,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/delta/FLSUN/kossel/Configuration_adv.h b/config/examples/delta/FLSUN/kossel/Configuration_adv.h index 7bbbf1ab5c9f..deac5af28031 100644 --- a/config/examples/delta/FLSUN/kossel/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel/Configuration_adv.h @@ -1207,13 +1207,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1222,6 +1239,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h index c3bdd26a3244..d7a9362bf832 100644 --- a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h @@ -1207,13 +1207,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1222,6 +1239,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h index fbed101e49b7..d71d27738a59 100644 --- a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h +++ b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h @@ -1207,13 +1207,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1222,6 +1239,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/delta/MKS/SBASE/Configuration_adv.h b/config/examples/delta/MKS/SBASE/Configuration_adv.h index 9b6614c356de..ca8eeca02fb7 100644 --- a/config/examples/delta/MKS/SBASE/Configuration_adv.h +++ b/config/examples/delta/MKS/SBASE/Configuration_adv.h @@ -1207,13 +1207,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1222,6 +1239,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/delta/Tevo Little Monster/Configuration_adv.h b/config/examples/delta/Tevo Little Monster/Configuration_adv.h index f909a04d489d..05638c27e29f 100644 --- a/config/examples/delta/Tevo Little Monster/Configuration_adv.h +++ b/config/examples/delta/Tevo Little Monster/Configuration_adv.h @@ -1207,13 +1207,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1222,6 +1239,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/delta/generic/Configuration_adv.h b/config/examples/delta/generic/Configuration_adv.h index c3bdd26a3244..d7a9362bf832 100644 --- a/config/examples/delta/generic/Configuration_adv.h +++ b/config/examples/delta/generic/Configuration_adv.h @@ -1207,13 +1207,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1222,6 +1239,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/delta/kossel_mini/Configuration_adv.h b/config/examples/delta/kossel_mini/Configuration_adv.h index c3bdd26a3244..d7a9362bf832 100644 --- a/config/examples/delta/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/kossel_mini/Configuration_adv.h @@ -1207,13 +1207,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1222,6 +1239,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/delta/kossel_xl/Configuration_adv.h b/config/examples/delta/kossel_xl/Configuration_adv.h index 47373c9b4fd5..3d93a583f34c 100644 --- a/config/examples/delta/kossel_xl/Configuration_adv.h +++ b/config/examples/delta/kossel_xl/Configuration_adv.h @@ -1207,13 +1207,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1222,6 +1239,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/gCreate/gMax1.5+/Configuration_adv.h b/config/examples/gCreate/gMax1.5+/Configuration_adv.h index 39ec6ffeadb4..a9206c8d753f 100644 --- a/config/examples/gCreate/gMax1.5+/Configuration_adv.h +++ b/config/examples/gCreate/gMax1.5+/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/makibox/Configuration_adv.h b/config/examples/makibox/Configuration_adv.h index f709d899bdb6..08158a0bd5b2 100644 --- a/config/examples/makibox/Configuration_adv.h +++ b/config/examples/makibox/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/tvrrug/Round2/Configuration_adv.h b/config/examples/tvrrug/Round2/Configuration_adv.h index 5963edb9dc79..4cc7885dda9b 100644 --- a/config/examples/tvrrug/Round2/Configuration_adv.h +++ b/config/examples/tvrrug/Round2/Configuration_adv.h @@ -1205,13 +1205,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1220,6 +1237,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // diff --git a/config/examples/wt150/Configuration_adv.h b/config/examples/wt150/Configuration_adv.h index 9f95d9460fed..46e62d1c2f8c 100644 --- a/config/examples/wt150/Configuration_adv.h +++ b/config/examples/wt150/Configuration_adv.h @@ -1206,13 +1206,30 @@ //#define TOUCH_UI_PORTRAIT //#define TOUCH_UI_MIRRORED - // Enable UTF8 rendering capabilities. + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. //#define TOUCH_UI_USE_UTF8 #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif #endif - // When labels do not fit buttons, use smaller font + // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT // Runtime language selection (otherwise LCD_LANGUAGE) @@ -1221,6 +1238,9 @@ // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG #endif // From ebc9a8a0b0a24a3a55b2b08303ac0f2f18c59408 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 24 Sep 2019 20:21:22 -0500 Subject: [PATCH 033/120] ExtUI patch followup --- .../lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp index 73f21bc8f569..86032e8562c6 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp @@ -111,8 +111,7 @@ float MoveAxisScreen::getManualFeedrate(uint8_t axis, float increment_mm) { // being held down, this allows enough margin for the planner to // connect segments and even out the motion. constexpr float manual_feedrate[XYZE] = MANUAL_FEEDRATE; - return min(manual_feedrate[axis] / 60, abs(increment_mm * TOUCH_REPEATS_PER_SECOND * 0.80)); - return min(manual_feedrate[axis] / 60, abs(increment_mm * TOUCH_REPEATS_PER_SECOND * 0.80)); + return min(manual_feedrate[axis] / 60.0f, abs(increment_mm * (TOUCH_REPEATS_PER_SECOND) * 0.80f)); } void MoveAxisScreen::setManualFeedrate(ExtUI::axis_t axis, float increment_mm) { From df1e51258a8bcc432deed9f5bd60df41a75b2c32 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Tue, 24 Sep 2019 22:29:21 -0400 Subject: [PATCH 034/120] Add M851 X Y probe offsets (#15202) --- Marlin/Configuration.h | 19 ++-- Marlin/src/HAL/HAL_AVR/Servo.cpp | 2 +- Marlin/src/core/language.h | 2 +- Marlin/src/core/utility.cpp | 22 ++--- Marlin/src/feature/bedlevel/ubl/ubl.cpp | 6 +- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 43 ++++----- Marlin/src/gcode/bedlevel/G42.cpp | 10 +- Marlin/src/gcode/bedlevel/M420.cpp | 20 ++-- Marlin/src/gcode/bedlevel/abl/G29.cpp | 20 ++-- Marlin/src/gcode/calibrate/G28.cpp | 4 +- Marlin/src/gcode/calibrate/M48.cpp | 8 +- Marlin/src/gcode/gcode.h | 2 +- Marlin/src/gcode/motion/M290.cpp | 4 +- Marlin/src/gcode/probe/G30.cpp | 4 +- Marlin/src/gcode/probe/M851.cpp | 42 ++++++-- Marlin/src/inc/Conditionals_post.h | 95 +++++++------------ Marlin/src/inc/SanityCheck.h | 48 ++++------ Marlin/src/lcd/extensible_ui/ui_api.cpp | 6 +- Marlin/src/lcd/menu/menu.cpp | 8 +- Marlin/src/lcd/menu/menu_bed_corners.cpp | 4 +- Marlin/src/lcd/menu/menu_bed_leveling.cpp | 2 +- Marlin/src/lcd/menu/menu_configuration.cpp | 2 +- Marlin/src/module/configuration_store.cpp | 39 ++++---- Marlin/src/module/delta.cpp | 2 +- Marlin/src/module/motion.cpp | 8 +- Marlin/src/module/motion.h | 16 ++-- Marlin/src/module/probe.cpp | 51 ++++++++-- Marlin/src/module/probe.h | 9 +- config/default/Configuration.h | 19 ++-- .../examples/3DFabXYZ/Migbot/Configuration.h | 19 ++-- .../ADIMLab/Gantry v1/Configuration.h | 19 ++-- .../ADIMLab/Gantry v2/Configuration.h | 19 ++-- .../AlephObjects/TAZ4/Configuration.h | 19 ++-- .../Alfawise/U20-bltouch/Configuration.h | 21 ++-- config/examples/Alfawise/U20/Configuration.h | 21 ++-- .../AliExpress/CL-260/Configuration.h | 19 ++-- .../AliExpress/UM2pExt/Configuration.h | 19 ++-- config/examples/Anet/A2/Configuration.h | 19 ++-- config/examples/Anet/A2plus/Configuration.h | 19 ++-- config/examples/Anet/A6/Configuration.h | 59 ++---------- config/examples/Anet/A8/Configuration.h | 19 ++-- config/examples/Anet/A8plus/Configuration.h | 19 ++-- config/examples/Anet/E16/Configuration.h | 19 ++-- config/examples/AnyCubic/i3/Configuration.h | 19 ++-- config/examples/ArmEd/Configuration.h | 19 ++-- config/examples/Azteeg/X5GT/Configuration.h | 19 ++-- .../BIBO/TouchX/cyclops/Configuration.h | 19 ++-- .../BIBO/TouchX/default/Configuration.h | 19 ++-- config/examples/BQ/Hephestos/Configuration.h | 19 ++-- .../examples/BQ/Hephestos_2/Configuration.h | 19 ++-- config/examples/BQ/WITBOX/Configuration.h | 19 ++-- config/examples/Cartesio/Configuration.h | 19 ++-- .../examples/Creality/CR-10/Configuration.h | 19 ++-- .../examples/Creality/CR-10S/Configuration.h | 19 ++-- .../Creality/CR-10_5S/Configuration.h | 19 ++-- .../Creality/CR-10mini/Configuration.h | 19 ++-- .../Creality/CR-20 Pro/Configuration.h | 19 ++-- .../examples/Creality/CR-20/Configuration.h | 19 ++-- config/examples/Creality/CR-8/Configuration.h | 19 ++-- .../examples/Creality/Ender-2/Configuration.h | 19 ++-- .../examples/Creality/Ender-3/Configuration.h | 19 ++-- .../examples/Creality/Ender-4/Configuration.h | 19 ++-- .../examples/Creality/Ender-5/Configuration.h | 19 ++-- .../Dagoma/Disco Ultimate/Configuration.h | 19 ++-- .../Sidewinder X1/Configuration.h | 19 ++-- config/examples/Einstart-S/Configuration.h | 19 ++-- config/examples/FYSETC/AIO_II/Configuration.h | 19 ++-- .../Cheetah 1.2/BLTouch/Configuration.h | 19 ++-- .../FYSETC/Cheetah 1.2/base/Configuration.h | 19 ++-- .../FYSETC/Cheetah/BLTouch/Configuration.h | 19 ++-- .../FYSETC/Cheetah/base/Configuration.h | 19 ++-- config/examples/FYSETC/F6_13/Configuration.h | 19 ++-- config/examples/Felix/Configuration.h | 19 ++-- config/examples/Felix/DUAL/Configuration.h | 19 ++-- .../FlashForge/CreatorPro/Configuration.h | 19 ++-- .../FolgerTech/i3-2020/Configuration.h | 19 ++-- .../examples/Formbot/Raptor/Configuration.h | 19 ++-- .../examples/Formbot/T_Rex_2+/Configuration.h | 19 ++-- .../examples/Formbot/T_Rex_3/Configuration.h | 19 ++-- config/examples/Geeetech/A10/Configuration.h | 19 ++-- config/examples/Geeetech/A10M/Configuration.h | 19 ++-- config/examples/Geeetech/A20M/Configuration.h | 19 ++-- .../examples/Geeetech/GT2560/Configuration.h | 19 ++-- .../Geeetech/I3_Pro_X-GT2560/Configuration.h | 19 ++-- .../Geeetech/MeCreator2/Configuration.h | 19 ++-- .../Prusa i3 Pro B/bltouch/Configuration.h | 19 ++-- .../Prusa i3 Pro B/noprobe/Configuration.h | 19 ++-- .../Geeetech/Prusa i3 Pro C/Configuration.h | 19 ++-- .../Geeetech/Prusa i3 Pro W/Configuration.h | 19 ++-- config/examples/HMS434/Configuration.h | 19 ++-- .../examples/Infitary/i3-M508/Configuration.h | 19 ++-- config/examples/JGAurora/A1/Configuration.h | 19 ++-- config/examples/JGAurora/A5/Configuration.h | 19 ++-- config/examples/JGAurora/A5S/Configuration.h | 19 ++-- config/examples/MakerParts/Configuration.h | 19 ++-- config/examples/Malyan/M150/Configuration.h | 19 ++-- config/examples/Malyan/M200/Configuration.h | 19 ++-- .../Micromake/C1/basic/Configuration.h | 19 ++-- .../Micromake/C1/enhanced/Configuration.h | 19 ++-- config/examples/Mks/Robin/Configuration.h | 19 ++-- config/examples/Mks/Sbase/Configuration.h | 19 ++-- .../Printrbot/PrintrboardG2/Configuration.h | 19 ++-- .../examples/RapideLite/RL200/Configuration.h | 19 ++-- .../examples/RepRapPro/Huxley/Configuration.h | 19 ++-- .../RepRapWorld/Megatronics/Configuration.h | 19 ++-- config/examples/RigidBot/Configuration.h | 19 ++-- config/examples/SCARA/Configuration.h | 19 ++-- .../STM32/Black_STM32F407VET6/Configuration.h | 19 ++-- .../examples/STM32/STM32F103R/Configuration.h | 19 ++-- config/examples/STM32/STM32F4/Configuration.h | 19 ++-- .../STM32/stm32f103ret6/Configuration.h | 19 ++-- config/examples/Sanguinololu/Configuration.h | 19 ++-- .../Tevo/Michelangelo/Configuration.h | 19 ++-- .../Tevo/Tarantula Pro/Configuration.h | 19 ++-- .../Tornado/V1 (MKS Base)/Configuration.h | 19 ++-- .../Tornado/V2 (MKS GEN-L)/Configuration.h | 19 ++-- config/examples/TheBorg/Configuration.h | 19 ++-- config/examples/TinyBoy2/Configuration.h | 19 ++-- config/examples/Tronxy/X1/Configuration.h | 19 ++-- config/examples/Tronxy/X3A/Configuration.h | 19 ++-- config/examples/Tronxy/X5S-2E/Configuration.h | 19 ++-- config/examples/Tronxy/X5S/Configuration.h | 19 ++-- config/examples/Tronxy/XY100/Configuration.h | 19 ++-- .../UltiMachine/Archim1/Configuration.h | 19 ++-- .../UltiMachine/Archim2/Configuration.h | 19 ++-- config/examples/VORONDesign/Configuration.h | 19 ++-- .../examples/Velleman/K8200/Configuration.h | 19 ++-- .../examples/Velleman/K8400/Configuration.h | 19 ++-- .../Velleman/K8400/Dual-head/Configuration.h | 19 ++-- .../examples/WASP/PowerWASP/Configuration.h | 19 ++-- .../Wanhao/Duplicator 6/Configuration.h | 19 ++-- .../Wanhao/Duplicator i3 Mini/Configuration.h | 19 ++-- .../examples/adafruit/ST7565/Configuration.h | 19 ++-- .../delta/Anycubic/Kossel/Configuration.h | 24 ++--- .../delta/Dreammaker/Overlord/Configuration.h | 19 ++-- .../Dreammaker/Overlord_Pro/Configuration.h | 19 ++-- .../FLSUN/auto_calibrate/Configuration.h | 19 ++-- .../delta/FLSUN/kossel/Configuration.h | 19 ++-- .../delta/FLSUN/kossel_mini/Configuration.h | 19 ++-- .../Geeetech/Rostock 301/Configuration.h | 19 ++-- .../delta/Hatchbox_Alpha/Configuration.h | 19 ++-- .../examples/delta/MKS/SBASE/Configuration.h | 19 ++-- .../delta/Tevo Little Monster/Configuration.h | 19 ++-- config/examples/delta/generic/Configuration.h | 19 ++-- .../delta/kossel_mini/Configuration.h | 19 ++-- .../examples/delta/kossel_pro/Configuration.h | 20 ++-- .../examples/delta/kossel_xl/Configuration.h | 19 ++-- .../examples/gCreate/gMax1.5+/Configuration.h | 19 ++-- config/examples/makibox/Configuration.h | 21 ++-- config/examples/tvrrug/Round2/Configuration.h | 19 ++-- config/examples/wt150/Configuration.h | 19 ++-- 151 files changed, 1009 insertions(+), 1878 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 6f27160153b4..5935f992691e 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/Marlin/src/HAL/HAL_AVR/Servo.cpp b/Marlin/src/HAL/HAL_AVR/Servo.cpp index 58e220cbafbe..33818edb96f9 100644 --- a/Marlin/src/HAL/HAL_AVR/Servo.cpp +++ b/Marlin/src/HAL/HAL_AVR/Servo.cpp @@ -131,7 +131,7 @@ void initISR(timer16_Sequence_t timer) { TCCR1A = 0; // normal counting mode TCCR1B = _BV(CS11); // set prescaler of 8 TCNT1 = 0; // clear the timer count - #if defined(__AVR_ATmega8__)|| defined(__AVR_ATmega128__) + #if defined(__AVR_ATmega8__) || defined(__AVR_ATmega128__) SBI(TIFR, OCF1A); // clear any pending interrupts; SBI(TIMSK, OCIE1A); // enable the output compare interrupt #else diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h index 71fedff031c6..ee4e23fa76c1 100644 --- a/Marlin/src/core/language.h +++ b/Marlin/src/core/language.h @@ -198,7 +198,7 @@ #define MSG_Z3_MAX "z3_max" #define MSG_Z_PROBE "z_probe" #define MSG_FILAMENT_RUNOUT_SENSOR "filament" -#define MSG_PROBE_Z_OFFSET "Probe Z Offset" +#define MSG_PROBE_OFFSET "Probe Offset" #define MSG_SKEW_MIN "min_skew_factor: " #define MSG_SKEW_MAX "max_skew_factor: " #define MSG_ERR_MATERIAL_INDEX "M145 S out of range (0-1)" diff --git a/Marlin/src/core/utility.cpp b/Marlin/src/core/utility.cpp index 2bb6878a449f..2724cdebf939 100644 --- a/Marlin/src/core/utility.cpp +++ b/Marlin/src/core/utility.cpp @@ -79,40 +79,36 @@ void safe_delay(millis_t ms) { ); #if HAS_BED_PROBE - SERIAL_ECHOPAIR( - "Probe Offset X:" STRINGIFY(X_PROBE_OFFSET_FROM_EXTRUDER) - " Y:" STRINGIFY(Y_PROBE_OFFSET_FROM_EXTRUDER) - " Z:", zprobe_zoffset - ); - if ((X_PROBE_OFFSET_FROM_EXTRUDER) > 0) + SERIAL_ECHOPAIR("Probe Offset X:", zprobe_offset[X_AXIS], " Y:", zprobe_offset[Y_AXIS], " Z:", zprobe_offset[Z_AXIS]); + if (zprobe_offset[X_AXIS] > 0) SERIAL_ECHOPGM(" (Right"); - else if ((X_PROBE_OFFSET_FROM_EXTRUDER) < 0) + else if (zprobe_offset[X_AXIS] < 0) SERIAL_ECHOPGM(" (Left"); - else if ((Y_PROBE_OFFSET_FROM_EXTRUDER) != 0) + else if (zprobe_offset[Y_AXIS] != 0) SERIAL_ECHOPGM(" (Middle"); else SERIAL_ECHOPGM(" (Aligned With"); - if ((Y_PROBE_OFFSET_FROM_EXTRUDER) > 0) { + if (zprobe_offset[Y_AXIS] > 0) { #if IS_SCARA SERIAL_ECHOPGM("-Distal"); #else SERIAL_ECHOPGM("-Back"); #endif } - else if ((Y_PROBE_OFFSET_FROM_EXTRUDER) < 0) { + else if (zprobe_offset[Y_AXIS] < 0) { #if IS_SCARA SERIAL_ECHOPGM("-Proximal"); #else SERIAL_ECHOPGM("-Front"); #endif } - else if ((X_PROBE_OFFSET_FROM_EXTRUDER) != 0) + else if (zprobe_offset[X_AXIS] != 0) SERIAL_ECHOPGM("-Center"); - if (zprobe_zoffset < 0) + if (zprobe_offset[Z_AXIS] < 0) SERIAL_ECHOPGM(" & Below"); - else if (zprobe_zoffset > 0) + else if (zprobe_offset[Z_AXIS] > 0) SERIAL_ECHOPGM(" & Above"); else SERIAL_ECHOPGM(" & Same Z as"); diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.cpp b/Marlin/src/feature/bedlevel/ubl/ubl.cpp index 10a3b90dcead..edd2fc3694c6 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl.cpp @@ -177,11 +177,11 @@ serialprintPGM(csv ? PSTR("CSV:\n") : PSTR("LCD:\n")); } - // Add XY_PROBE_OFFSET_FROM_EXTRUDER because probe_pt() subtracts these when + // Add XY probe offset from extruder because probe_pt() subtracts them when // moving to the xy position to be measured. This ensures better agreement between // the current Z position after G28 and the mesh values. - const float current_xi = find_closest_x_index(current_position[X_AXIS] + X_PROBE_OFFSET_FROM_EXTRUDER), - current_yi = find_closest_y_index(current_position[Y_AXIS] + Y_PROBE_OFFSET_FROM_EXTRUDER); + const float current_xi = find_closest_x_index(current_position[X_AXIS] + zprobe_offset[X_AXIS]), + current_yi = find_closest_y_index(current_position[Y_AXIS] + zprobe_offset[Y_AXIS]); if (!lcd) SERIAL_EOL(); for (int8_t j = GRID_MAX_POINTS_Y - 1; j >= 0; j--) { diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index 9ee05a5a7337..e588515f6289 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -290,7 +290,7 @@ * especially better for Delta printers, since it populates the center of the mesh first, allowing for * a quicker test print to verify settings. You don't need to populate the entire mesh to use it. * After all, you don't want to spend a lot of time generating a mesh only to realize the resolution - * or zprobe_zoffset are incorrect. Mesh-generation gathers points starting closest to the nozzle unless + * or probe offsets are incorrect. Mesh-generation gathers points starting closest to the nozzle unless * an (X,Y) coordinate pair is given. * * Unified Bed Leveling uses a lot of EEPROM storage to hold its data, and it takes some effort to get @@ -453,7 +453,7 @@ SERIAL_ECHO(g29_y_pos); SERIAL_ECHOLNPGM(").\n"); } - probe_entire_mesh(g29_x_pos + X_PROBE_OFFSET_FROM_EXTRUDER, g29_y_pos + Y_PROBE_OFFSET_FROM_EXTRUDER, + probe_entire_mesh(g29_x_pos + zprobe_offset[X_AXIS], g29_y_pos + zprobe_offset[Y_AXIS], parser.seen('T'), parser.seen('E'), parser.seen('U')); report_current_position(); @@ -482,8 +482,8 @@ g29_x_pos = X_HOME_POS; g29_y_pos = Y_HOME_POS; #else // cartesian - g29_x_pos = X_PROBE_OFFSET_FROM_EXTRUDER > 0 ? X_BED_SIZE : 0; - g29_y_pos = Y_PROBE_OFFSET_FROM_EXTRUDER < 0 ? Y_BED_SIZE : 0; + g29_x_pos = zprobe_offset[X_AXIS] > 0 ? X_BED_SIZE : 0; + g29_y_pos = zprobe_offset[Y_AXIS] < 0 ? Y_BED_SIZE : 0; #endif } @@ -800,8 +800,8 @@ restore_ubl_active_state_and_leave(); do_blocking_move_to_xy( - constrain(rx - (X_PROBE_OFFSET_FROM_EXTRUDER), MESH_MIN_X, MESH_MAX_X), - constrain(ry - (Y_PROBE_OFFSET_FROM_EXTRUDER), MESH_MIN_Y, MESH_MAX_Y) + constrain(rx - zprobe_offset[X_AXIS], MESH_MIN_X, MESH_MAX_X), + constrain(ry - zprobe_offset[Y_AXIS], MESH_MIN_Y, MESH_MAX_Y) ); } @@ -1281,8 +1281,8 @@ out_mesh.distance = -99999.9f; // Get our reference position. Either the nozzle or probe location. - const float px = rx + (probe_as_reference == USE_PROBE_AS_REFERENCE ? X_PROBE_OFFSET_FROM_EXTRUDER : 0), - py = ry + (probe_as_reference == USE_PROBE_AS_REFERENCE ? Y_PROBE_OFFSET_FROM_EXTRUDER : 0); + const float px = rx + (probe_as_reference == USE_PROBE_AS_REFERENCE ? zprobe_offset[X_AXIS] : 0), + py = ry + (probe_as_reference == USE_PROBE_AS_REFERENCE ? zprobe_offset[Y_AXIS] : 0); float best_so_far = 99999.99f; @@ -1384,22 +1384,17 @@ #include "../../../libs/vector_3.h" void unified_bed_leveling::tilt_mesh_based_on_probed_grid(const bool do_3_pt_leveling) { - constexpr int16_t x_min = _MAX(MIN_PROBE_X, MESH_MIN_X), - x_max = _MIN(MAX_PROBE_X, MESH_MAX_X), - y_min = _MAX(MIN_PROBE_Y, MESH_MIN_Y), - y_max = _MIN(MAX_PROBE_Y, MESH_MAX_Y); - - bool abort_flag = false; + const float x_min = probe_min_x(), x_max = probe_max_x(), + y_min = probe_min_y(), y_max = probe_max_y(), + dx = (x_max - x_min) / (g29_grid_size - 1), + dy = (y_max - y_min) / (g29_grid_size - 1); float measured_z; + bool abort_flag = false; - const float dx = float(x_max - x_min) / (g29_grid_size - 1), - dy = float(y_max - y_min) / (g29_grid_size - 1); + //float z1, z2, z3; // Needed for algorithm validation below struct linear_fit_data lsf_results; - - //float z1, z2, z3; // Needed for algorithm validation down below. - incremental_LSF_reset(&lsf_results); if (do_3_pt_leveling) { @@ -1478,9 +1473,9 @@ uint16_t total_points = g29_grid_size * g29_grid_size, point_num = 1; for (uint8_t ix = 0; ix < g29_grid_size; ix++) { - const float rx = float(x_min) + ix * dx; + const float rx = x_min + ix * dx; for (int8_t iy = 0; iy < g29_grid_size; iy++) { - const float ry = float(y_min) + dy * (zig_zag ? g29_grid_size - 1 - iy : iy); + const float ry = y_min + dy * (zig_zag ? g29_grid_size - 1 - iy : iy); if (!abort_flag) { SERIAL_ECHOLNPAIR("Tilting mesh point ", point_num, "/", total_points, "\n"); @@ -1505,7 +1500,7 @@ DEBUG_ECHOPAIR_F(" correction: ", get_z_correction(rx, ry), 7); } - measured_z -= get_z_correction(rx, ry) /* + zprobe_zoffset */ ; + measured_z -= get_z_correction(rx, ry) /* + zprobe_offset[Z_AXIS] */ ; if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR_F(" final >>>---> ", measured_z, 7); @@ -1711,13 +1706,13 @@ serial_delay(50); #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) - SERIAL_ECHOLNPAIR_F("planner.z_fade_height : ", planner.z_fade_height, 4); + SERIAL_ECHOLNPAIR_F("Fade Height M420 Z", planner.z_fade_height, 4); #endif adjust_mesh_to_mean(g29_c_flag, g29_constant); #if HAS_BED_PROBE - SERIAL_ECHOLNPAIR_F("zprobe_zoffset: ", zprobe_zoffset, 7); + SERIAL_ECHOLNPAIR_F("Probe Offset M851 Z", zprobe_offset[Z_AXIS], 7); #endif SERIAL_ECHOLNPAIR("MESH_MIN_X " STRINGIFY(MESH_MIN_X) "=", MESH_MIN_X); serial_delay(50); diff --git a/Marlin/src/gcode/bedlevel/G42.cpp b/Marlin/src/gcode/bedlevel/G42.cpp index 3240b94e8e8c..f5336cdcb145 100644 --- a/Marlin/src/gcode/bedlevel/G42.cpp +++ b/Marlin/src/gcode/bedlevel/G42.cpp @@ -47,10 +47,12 @@ void GcodeSuite::G42() { set_destination_from_current(); if (hasI) destination[X_AXIS] = _GET_MESH_X(ix); if (hasJ) destination[Y_AXIS] = _GET_MESH_Y(iy); - if (parser.boolval('P')) { - if (hasI) destination[X_AXIS] -= X_PROBE_OFFSET_FROM_EXTRUDER; - if (hasJ) destination[Y_AXIS] -= Y_PROBE_OFFSET_FROM_EXTRUDER; - } + #if HAS_BED_PROBE + if (parser.boolval('P')) { + if (hasI) destination[X_AXIS] -= zprobe_offset[X_AXIS]; + if (hasJ) destination[Y_AXIS] -= zprobe_offset[Y_AXIS]; + } + #endif const float fval = parser.linearval('F'); if (fval > 0.0) feedrate_mm_s = MMM_TO_MMS(fval); diff --git a/Marlin/src/gcode/bedlevel/M420.cpp b/Marlin/src/gcode/bedlevel/M420.cpp index 982ec6e0357c..311619acc2b1 100644 --- a/Marlin/src/gcode/bedlevel/M420.cpp +++ b/Marlin/src/gcode/bedlevel/M420.cpp @@ -64,10 +64,12 @@ void GcodeSuite::M420() { #if ENABLED(MARLIN_DEV_MODE) if (parser.intval('S') == 2) { #if ENABLED(AUTO_BED_LEVELING_BILINEAR) - bilinear_start[X_AXIS] = MIN_PROBE_X; - bilinear_start[Y_AXIS] = MIN_PROBE_Y; - bilinear_grid_spacing[X_AXIS] = (MAX_PROBE_X - (MIN_PROBE_X)) / (GRID_MAX_POINTS_X - 1); - bilinear_grid_spacing[Y_AXIS] = (MAX_PROBE_Y - (MIN_PROBE_Y)) / (GRID_MAX_POINTS_Y - 1); + const float x_min = probe_min_x(), x_max = probe_max_x(), + y_min = probe_min_y(), y_max = probe_max_y(); + bilinear_start[X_AXIS] = x_min; + bilinear_start[Y_AXIS] = y_min; + bilinear_grid_spacing[X_AXIS] = (x_max - x_min) / (GRID_MAX_POINTS_X - 1); + bilinear_grid_spacing[Y_AXIS] = (y_max - y_min) / (GRID_MAX_POINTS_Y - 1); #endif for (uint8_t x = 0; x < GRID_MAX_POINTS_X; x++) for (uint8_t y = 0; y < GRID_MAX_POINTS_Y; y++) { @@ -76,11 +78,11 @@ void GcodeSuite::M420() { ExtUI::onMeshUpdate(x, y, Z_VALUES(x, y)); #endif } - SERIAL_ECHOPGM("Simulated " STRINGIFY(GRID_MAX_POINTS_X) "x" STRINGIFY(GRID_MAX_POINTS_X) " mesh "); - SERIAL_ECHOPAIR(" (", MIN_PROBE_X); - SERIAL_CHAR(','); SERIAL_ECHO(MIN_PROBE_Y); - SERIAL_ECHOPAIR(")-(", MAX_PROBE_X); - SERIAL_CHAR(','); SERIAL_ECHO(MAX_PROBE_Y); + SERIAL_ECHOPGM("Simulated " STRINGIFY(GRID_MAX_POINTS_X) "x" STRINGIFY(GRID_MAX_POINTS_Y) " mesh "); + SERIAL_ECHOPAIR(" (", x_min); + SERIAL_CHAR(','); SERIAL_ECHO(y_min); + SERIAL_ECHOPAIR(")-(", x_max); + SERIAL_CHAR(','); SERIAL_ECHO(y_max); SERIAL_ECHOLNPGM(")"); } #endif diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index b942654a302f..372ba5b372ae 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -393,16 +393,16 @@ G29_TYPE GcodeSuite::G29() { if (parser.seen('H')) { const int16_t size = (int16_t)parser.value_linear_units(); - left_probe_bed_position = _MAX(X_CENTER - size / 2, MIN_PROBE_X); - right_probe_bed_position = _MIN(left_probe_bed_position + size, MAX_PROBE_X); - front_probe_bed_position = _MAX(Y_CENTER - size / 2, MIN_PROBE_Y); - back_probe_bed_position = _MIN(front_probe_bed_position + size, MAX_PROBE_Y); + left_probe_bed_position = _MAX(X_CENTER - size / 2, probe_min_x()); + right_probe_bed_position = _MIN(left_probe_bed_position + size, probe_max_x()); + front_probe_bed_position = _MAX(Y_CENTER - size / 2, probe_min_y()); + back_probe_bed_position = _MIN(front_probe_bed_position + size, probe_max_y()); } else { - left_probe_bed_position = parser.seenval('L') ? (int)RAW_X_POSITION(parser.value_linear_units()) : LEFT_PROBE_BED_POSITION; - right_probe_bed_position = parser.seenval('R') ? (int)RAW_X_POSITION(parser.value_linear_units()) : RIGHT_PROBE_BED_POSITION; - front_probe_bed_position = parser.seenval('F') ? (int)RAW_Y_POSITION(parser.value_linear_units()) : FRONT_PROBE_BED_POSITION; - back_probe_bed_position = parser.seenval('B') ? (int)RAW_Y_POSITION(parser.value_linear_units()) : BACK_PROBE_BED_POSITION; + left_probe_bed_position = parser.seenval('L') ? (int)RAW_X_POSITION(parser.value_linear_units()) : _MAX(X_CENTER - X_BED_SIZE / 2, probe_min_x()); + right_probe_bed_position = parser.seenval('R') ? (int)RAW_X_POSITION(parser.value_linear_units()) : _MIN(left_probe_bed_position + X_BED_SIZE, probe_max_x()); + front_probe_bed_position = parser.seenval('F') ? (int)RAW_Y_POSITION(parser.value_linear_units()) : _MAX(Y_CENTER - Y_BED_SIZE / 2, probe_min_y()); + back_probe_bed_position = parser.seenval('B') ? (int)RAW_Y_POSITION(parser.value_linear_units()) : _MIN(front_probe_bed_position + Y_BED_SIZE, probe_max_y()); } if ( @@ -947,8 +947,8 @@ G29_TYPE GcodeSuite::G29() { planner.leveling_active = false; // Use the last measured distance to the bed, if possible - if ( NEAR(current_position[X_AXIS], xProbe - (X_PROBE_OFFSET_FROM_EXTRUDER)) - && NEAR(current_position[Y_AXIS], yProbe - (Y_PROBE_OFFSET_FROM_EXTRUDER)) + if ( NEAR(current_position[X_AXIS], xProbe - zprobe_offset[X_AXIS]) + && NEAR(current_position[Y_AXIS], yProbe - zprobe_offset[Y_AXIS]) ) { const float simple_z = current_position[Z_AXIS] - measured_z; if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Probed Z", simple_z, " Matrix Z", converted[Z_AXIS], " Discrepancy ", simple_z - converted[Z_AXIS]); diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index aad4c4093c83..a9b1c25201e9 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -136,8 +136,8 @@ destination[Z_AXIS] = current_position[Z_AXIS]; // Z is already at the right height #if HOMING_Z_WITH_PROBE - destination[X_AXIS] -= X_PROBE_OFFSET_FROM_EXTRUDER; - destination[Y_AXIS] -= Y_PROBE_OFFSET_FROM_EXTRUDER; + destination[X_AXIS] -= zprobe_offset[X_AXIS]; + destination[Y_AXIS] -= zprobe_offset[Y_AXIS]; #endif if (position_is_reachable(destination[X_AXIS], destination[Y_AXIS])) { diff --git a/Marlin/src/gcode/calibrate/M48.cpp b/Marlin/src/gcode/calibrate/M48.cpp index 4557a94162dd..e9bdd2abeb9a 100644 --- a/Marlin/src/gcode/calibrate/M48.cpp +++ b/Marlin/src/gcode/calibrate/M48.cpp @@ -77,8 +77,8 @@ void GcodeSuite::M48() { float X_current = current_position[X_AXIS], Y_current = current_position[Y_AXIS]; - const float X_probe_location = parser.linearval('X', X_current + X_PROBE_OFFSET_FROM_EXTRUDER), - Y_probe_location = parser.linearval('Y', Y_current + Y_PROBE_OFFSET_FROM_EXTRUDER); + const float X_probe_location = parser.linearval('X', X_current + zprobe_offset[X_AXIS]), + Y_probe_location = parser.linearval('Y', Y_current + zprobe_offset[Y_AXIS]); if (!position_is_reachable_by_probe(X_probe_location, Y_probe_location)) { SERIAL_ECHOLNPGM("? (X,Y) out of bounds."); @@ -165,8 +165,8 @@ void GcodeSuite::M48() { while (angle < 0.0) angle += 360.0; // outside of this range. It looks like they behave correctly with // numbers outside of the range, but just to be safe we clamp them. - X_current = X_probe_location - (X_PROBE_OFFSET_FROM_EXTRUDER) + cos(RADIANS(angle)) * radius; - Y_current = Y_probe_location - (Y_PROBE_OFFSET_FROM_EXTRUDER) + sin(RADIANS(angle)) * radius; + X_current = X_probe_location - zprobe_offset[X_AXIS] + cos(RADIANS(angle)) * radius; + Y_current = Y_probe_location - zprobe_offset[Y_AXIS] + sin(RADIANS(angle)) * radius; #if DISABLED(DELTA) LIMIT(X_current, X_MIN_POS, X_MAX_POS); diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index 2d8db7ebd1e0..2282da57ae6d 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -229,7 +229,7 @@ * M701 - Load filament (Requires FILAMENT_LOAD_UNLOAD_GCODES) * M702 - Unload filament (Requires FILAMENT_LOAD_UNLOAD_GCODES) * M810-M819 - Define/execute a G-code macro (Requires GCODE_MACROS) - * M851 - Set Z probe's Z offset in current units. (Negative = below the nozzle.) + * M851 - Set Z probe's XYZ offsets in current units. (Negative values: X=left, Y=front, Z=below) * M852 - Set skew factors: "M852 [I] [J] [K]". (Requires SKEW_CORRECTION_GCODE, and SKEW_CORRECTION_FOR_Z for IJ) * M860 - Report the position of position encoder modules. * M861 - Report the status of position encoder modules. diff --git a/Marlin/src/gcode/motion/M290.cpp b/Marlin/src/gcode/motion/M290.cpp index d3eb81a8fc29..7a1082f795ff 100644 --- a/Marlin/src/gcode/motion/M290.cpp +++ b/Marlin/src/gcode/motion/M290.cpp @@ -42,9 +42,9 @@ && active_extruder == 0 #endif ) { - zprobe_zoffset += offs; + zprobe_offset[Z_AXIS] += offs; SERIAL_ECHO_START(); - SERIAL_ECHOLNPAIR(MSG_PROBE_Z_OFFSET ": ", zprobe_zoffset); + SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET MSG_Z ": ", zprobe_offset[Z_AXIS]); } #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) else { diff --git a/Marlin/src/gcode/probe/G30.cpp b/Marlin/src/gcode/probe/G30.cpp index b4525772c327..26bb3876dbfc 100644 --- a/Marlin/src/gcode/probe/G30.cpp +++ b/Marlin/src/gcode/probe/G30.cpp @@ -39,8 +39,8 @@ * E Engage the probe for each probe (default 1) */ void GcodeSuite::G30() { - const float xpos = parser.linearval('X', current_position[X_AXIS] + X_PROBE_OFFSET_FROM_EXTRUDER), - ypos = parser.linearval('Y', current_position[Y_AXIS] + Y_PROBE_OFFSET_FROM_EXTRUDER); + const float xpos = parser.linearval('X', current_position[X_AXIS] + zprobe_offset[X_AXIS]), + ypos = parser.linearval('Y', current_position[Y_AXIS] + zprobe_offset[Y_AXIS]); if (!position_is_reachable_by_probe(xpos, ypos)) return; diff --git a/Marlin/src/gcode/probe/M851.cpp b/Marlin/src/gcode/probe/M851.cpp index 6ab53f9f77d0..326f327ff716 100644 --- a/Marlin/src/gcode/probe/M851.cpp +++ b/Marlin/src/gcode/probe/M851.cpp @@ -28,17 +28,43 @@ #include "../../feature/bedlevel/bedlevel.h" #include "../../module/probe.h" +/** + * M851: Set the nozzle-to-probe offsets in current units + */ void GcodeSuite::M851() { - if (parser.seenval('Z')) { - const float value = parser.value_linear_units(); - if (WITHIN(value, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) - zprobe_zoffset = value; - else - SERIAL_ERROR_MSG("?Z out of range (" STRINGIFY(Z_PROBE_OFFSET_RANGE_MIN) " to " STRINGIFY(Z_PROBE_OFFSET_RANGE_MAX) ")"); + + // Show usage with no parameters + if (!parser.seen("XYZ")) { + SERIAL_ECHO_START(); + SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET " X", zprobe_offset[X_AXIS], + " Y", zprobe_offset[Y_AXIS], + " Z", zprobe_offset[Z_AXIS]); + return; + } + + // Get the modified offsets + const float offs[] = { + parser.floatval('X', zprobe_offset[X_AXIS]), + parser.floatval('Y', zprobe_offset[Y_AXIS]), + parser.floatval('Z', zprobe_offset[Z_AXIS]) + }; + + // Error-check + if (!WITHIN(offs[X_AXIS], -(X_BED_SIZE), X_BED_SIZE)) { + SERIAL_ERROR_MSG("?X out of range (-" STRINGIFY(X_BED_SIZE) " to " STRINGIFY(X_BED_SIZE) ")"); + return; + } + if (!WITHIN(offs[Y_AXIS], -(Y_BED_SIZE), Y_BED_SIZE)) { + SERIAL_ERROR_MSG("?Y out of range (-" STRINGIFY(Y_BED_SIZE) " to " STRINGIFY(Y_BED_SIZE) ")"); return; } - SERIAL_ECHO_START(); - SERIAL_ECHOLNPAIR(MSG_PROBE_Z_OFFSET ": ", zprobe_zoffset); + if (!WITHIN(offs[Z_AXIS], Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) { + SERIAL_ERROR_MSG("?Z out of range (" STRINGIFY(Z_PROBE_OFFSET_RANGE_MIN) " to " STRINGIFY(Z_PROBE_OFFSET_RANGE_MAX) ")"); + return; + } + + // Save the new offsets + LOOP_XYZ(a) zprobe_offset[a] = offs[a]; } #endif // HAS_BED_PROBE diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index e9a4f1f382e0..fb769149530c 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -1348,12 +1348,7 @@ #endif #endif #else - #undef X_PROBE_OFFSET_FROM_EXTRUDER - #undef Y_PROBE_OFFSET_FROM_EXTRUDER - #undef Z_PROBE_OFFSET_FROM_EXTRUDER - #define X_PROBE_OFFSET_FROM_EXTRUDER 0 - #define Y_PROBE_OFFSET_FROM_EXTRUDER 0 - #define Z_PROBE_OFFSET_FROM_EXTRUDER 0 + #undef NOZZLE_TO_PROBE_OFFSET #endif /** @@ -1446,10 +1441,13 @@ * Bed Probing rectangular bounds * These can be further constrained in code for Delta and SCARA */ - #ifndef MIN_PROBE_EDGE #define MIN_PROBE_EDGE 0 #endif +#ifndef NOZZLE_TO_PROBE_OFFSET + #define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0 } +#endif +constexpr float nozzle_to_probe_offset[XYZ] = NOZZLE_TO_PROBE_OFFSET; #if ENABLED(DELTA) /** @@ -1457,8 +1455,8 @@ */ #define _PROBE_RADIUS (DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) #ifndef DELTA_CALIBRATION_RADIUS - #ifdef X_PROBE_OFFSET_FROM_EXTRUDER - #define DELTA_CALIBRATION_RADIUS (DELTA_PRINTABLE_RADIUS - _MAX(ABS(X_PROBE_OFFSET_FROM_EXTRUDER), ABS(Y_PROBE_OFFSET_FROM_EXTRUDER), ABS(MIN_PROBE_EDGE))) + #ifdef NOZZLE_TO_PROBE_OFFSET + #define DELTA_CALIBRATION_RADIUS (DELTA_PRINTABLE_RADIUS - _MAX(ABS(nozzle_to_probe_offset[X_AXIS]), ABS(nozzle_to_probe_offset[Y_AXIS]), ABS(MIN_PROBE_EDGE))) #else #define DELTA_CALIBRATION_RADIUS _PROBE_RADIUS #endif @@ -1467,39 +1465,39 @@ #define DELTA_ENDSTOP_ADJ { 0, 0, 0 } #endif #ifndef DELTA_TOWER_ANGLE_TRIM - #define DELTA_TOWER_ANGLE_TRIM {0, 0, 0} + #define DELTA_TOWER_ANGLE_TRIM { 0, 0, 0 } #endif #ifndef DELTA_RADIUS_TRIM_TOWER - #define DELTA_RADIUS_TRIM_TOWER {0, 0, 0} + #define DELTA_RADIUS_TRIM_TOWER { 0, 0, 0 } #endif #ifndef DELTA_DIAGONAL_ROD_TRIM_TOWER - #define DELTA_DIAGONAL_ROD_TRIM_TOWER {0, 0, 0} + #define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0, 0, 0 } #endif // Probing points may be verified at compile time within the radius // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!") // so that may be added to SanityCheck.h in the future. - #define _MIN_PROBE_X (X_CENTER - (_PROBE_RADIUS)) - #define _MIN_PROBE_Y (Y_CENTER - (_PROBE_RADIUS)) - #define _MAX_PROBE_X (X_CENTER + _PROBE_RADIUS) - #define _MAX_PROBE_Y (Y_CENTER + _PROBE_RADIUS) + #define PROBE_X_MIN (X_CENTER - (_PROBE_RADIUS)) + #define PROBE_Y_MIN (Y_CENTER - (_PROBE_RADIUS)) + #define PROBE_X_MAX (X_CENTER + _PROBE_RADIUS) + #define PROBE_Y_MAX (Y_CENTER + _PROBE_RADIUS) #elif IS_SCARA #define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2) #define _PROBE_RADIUS (SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - #define _MIN_PROBE_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MIN_PROBE_EDGE) - #define _MIN_PROBE_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MIN_PROBE_EDGE) - #define _MAX_PROBE_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - #define _MAX_PROBE_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) + #define PROBE_X_MIN (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MIN_PROBE_EDGE) + #define PROBE_Y_MIN (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MIN_PROBE_EDGE) + #define PROBE_X_MAX (X_CENTER + SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) + #define PROBE_Y_MAX (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) #else // Boundaries for Cartesian probing based on bed limits - #define _MIN_PROBE_X (_MAX(X_MIN_BED + MIN_PROBE_EDGE, X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER)) - #define _MIN_PROBE_Y (_MAX(Y_MIN_BED + MIN_PROBE_EDGE, Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER)) - #define _MAX_PROBE_X (_MIN(X_MAX_BED - (MIN_PROBE_EDGE), X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER)) - #define _MAX_PROBE_Y (_MIN(Y_MAX_BED - (MIN_PROBE_EDGE), Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER)) + #define PROBE_X_MIN (_MAX(X_MIN_BED + MIN_PROBE_EDGE, X_MIN_POS + nozzle_to_probe_offset[X_AXIS])) + #define PROBE_Y_MIN (_MAX(Y_MIN_BED + MIN_PROBE_EDGE, Y_MIN_POS + nozzle_to_probe_offset[Y_AXIS])) + #define PROBE_X_MAX (_MIN(X_MAX_BED - (MIN_PROBE_EDGE), X_MAX_POS + nozzle_to_probe_offset[X_AXIS])) + #define PROBE_Y_MAX (_MIN(Y_MAX_BED - (MIN_PROBE_EDGE), Y_MAX_POS + nozzle_to_probe_offset[Y_AXIS])) #endif @@ -1507,20 +1505,6 @@ #define LEVELED_SEGMENT_LENGTH 5 #endif -// These may be overridden in Configuration.h if a smaller area is desired -#ifndef MIN_PROBE_X - #define MIN_PROBE_X _MIN_PROBE_X -#endif -#ifndef MIN_PROBE_Y - #define MIN_PROBE_Y _MIN_PROBE_Y -#endif -#ifndef MAX_PROBE_X - #define MAX_PROBE_X _MAX_PROBE_X -#endif -#ifndef MAX_PROBE_Y - #define MAX_PROBE_Y _MAX_PROBE_Y -#endif - /** * Default mesh area is an area with an inset margin on the print area. */ @@ -1537,14 +1521,14 @@ // Boundaries for Cartesian probing based on set limits #if ENABLED(AUTO_BED_LEVELING_UBL) #define _MESH_MIN_X (_MAX(X_MIN_BED + MESH_INSET, X_MIN_POS)) // UBL is careful not to probe off the bed. It does not - #define _MESH_MIN_Y (_MAX(Y_MIN_BED + MESH_INSET, Y_MIN_POS)) // need *_PROBE_OFFSET_FROM_EXTRUDER in the mesh dimensions + #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)) #else - #define _MESH_MIN_X (_MAX(X_MIN_BED + MESH_INSET, X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER)) - #define _MESH_MIN_Y (_MAX(Y_MIN_BED + MESH_INSET, Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER)) - #define _MESH_MAX_X (_MIN(X_MAX_BED - (MESH_INSET), X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER)) - #define _MESH_MAX_Y (_MIN(Y_MAX_BED - (MESH_INSET), Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER)) + #define _MESH_MIN_X (_MAX(X_MIN_BED + MESH_INSET, X_MIN_POS + nozzle_to_probe_offset[X_AXIS])) + #define _MESH_MIN_Y (_MAX(Y_MIN_BED + MESH_INSET, Y_MIN_POS + nozzle_to_probe_offset[Y_AXIS])) + #define _MESH_MAX_X (_MIN(X_MAX_BED - (MESH_INSET), X_MAX_POS + nozzle_to_probe_offset[X_AXIS])) + #define _MESH_MAX_Y (_MIN(Y_MAX_BED - (MESH_INSET), Y_MAX_POS + nozzle_to_probe_offset[Y_AXIS])) #endif #endif @@ -1592,41 +1576,26 @@ #endif #else #ifndef PROBE_PT_1_X - #define PROBE_PT_1_X MIN_PROBE_X + #define PROBE_PT_1_X PROBE_X_MIN #endif #ifndef PROBE_PT_1_Y - #define PROBE_PT_1_Y MIN_PROBE_Y + #define PROBE_PT_1_Y PROBE_Y_MIN #endif #ifndef PROBE_PT_2_X - #define PROBE_PT_2_X MAX_PROBE_X + #define PROBE_PT_2_X PROBE_X_MAX #endif #ifndef PROBE_PT_2_Y - #define PROBE_PT_2_Y MIN_PROBE_Y + #define PROBE_PT_2_Y PROBE_Y_MIN #endif #ifndef PROBE_PT_3_X #define PROBE_PT_3_X X_CENTER #endif #ifndef PROBE_PT_3_Y - #define PROBE_PT_3_Y MAX_PROBE_Y + #define PROBE_PT_3_Y PROBE_Y_MAX #endif #endif #endif -#if EITHER(AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_BILINEAR) - #ifndef LEFT_PROBE_BED_POSITION - #define LEFT_PROBE_BED_POSITION MIN_PROBE_X - #endif - #ifndef RIGHT_PROBE_BED_POSITION - #define RIGHT_PROBE_BED_POSITION MAX_PROBE_X - #endif - #ifndef FRONT_PROBE_BED_POSITION - #define FRONT_PROBE_BED_POSITION MIN_PROBE_Y - #endif - #ifndef BACK_PROBE_BED_POSITION - #define BACK_PROBE_BED_POSITION MAX_PROBE_Y - #endif -#endif - /** * Buzzer/Speaker */ diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 4b59f641cc01..02d3b5ad89ad 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -390,6 +390,10 @@ #error "STRING_SPLASH_LINE[12] are now obsolete. Please remove them from Configuration.h." #elif defined(Z_PROBE_ALLEN_KEY_DEPLOY_1_X) || defined(Z_PROBE_ALLEN_KEY_STOW_1_X) #error "Z_PROBE_ALLEN_KEY_(DEPLOY|STOW) coordinates are now a single setting. Please update your configuration." +#elif defined(X_PROBE_OFFSET_FROM_EXTRUDER) || defined(Y_PROBE_OFFSET_FROM_EXTRUDER) || defined(Z_PROBE_OFFSET_FROM_EXTRUDER) + #error "[XYZ]_PROBE_OFFSET_FROM_EXTRUDER is now NOZZLE_TO_PROBE_OFFSET. Please update your configuration." +#elif defined(MIN_PROBE_X) || defined(MIN_PROBE_Y) || defined(MAX_PROBE_X) || defined(MAX_PROBE_Y) + #error "(MIN|MAX)_PROBE_[XY] are now calculated at runtime. Please remove them from Configuration.h." #endif #define BOARD_MKS_13 -1000 @@ -1051,9 +1055,6 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #if HAS_BED_PROBE - static_assert(FLOOR(float(X_PROBE_OFFSET_FROM_EXTRUDER)) == float(X_PROBE_OFFSET_FROM_EXTRUDER), "X_PROBE_OFFSET_FROM_EXTRUDER must be an integer!"); - static_assert(FLOOR(float(Y_PROBE_OFFSET_FROM_EXTRUDER)) == float(Y_PROBE_OFFSET_FROM_EXTRUDER), "Y_PROBE_OFFSET_FROM_EXTRUDER must be an integer!"); - /** * Z_PROBE_SLED is incompatible with DELTA */ @@ -1205,14 +1206,18 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS * Bed Leveling Requirements */ -#if EITHER(AUTO_BED_LEVELING_UBL, AUTO_BED_LEVELING_3POINT) - static_assert(WITHIN(PROBE_PT_1_X, MIN_PROBE_X, MAX_PROBE_X), "PROBE_PT_1_X is outside the probe region."); - static_assert(WITHIN(PROBE_PT_2_X, MIN_PROBE_X, MAX_PROBE_X), "PROBE_PT_2_X is outside the probe region."); - static_assert(WITHIN(PROBE_PT_3_X, MIN_PROBE_X, MAX_PROBE_X), "PROBE_PT_3_X is outside the probe region."); - static_assert(WITHIN(PROBE_PT_1_Y, MIN_PROBE_Y, MAX_PROBE_Y), "PROBE_PT_1_Y is outside the probe region."); - static_assert(WITHIN(PROBE_PT_2_Y, MIN_PROBE_Y, MAX_PROBE_Y), "PROBE_PT_2_Y is outside the probe region."); - static_assert(WITHIN(PROBE_PT_3_Y, MIN_PROBE_Y, MAX_PROBE_Y), "PROBE_PT_3_Y is outside the probe region."); -#endif +// +// !! TODO: REPLACE WITH TESTS IN THE 3-POINT LEVELING CODE !! +// + +//#if EITHER(AUTO_BED_LEVELING_UBL, AUTO_BED_LEVELING_3POINT) +// static_assert(WITHIN(PROBE_PT_1_X, PROBE_X_MIN, PROBE_X_MAX), "PROBE_PT_1_X is outside the probe region."); +// static_assert(WITHIN(PROBE_PT_2_X, PROBE_X_MIN, PROBE_X_MAX), "PROBE_PT_2_X is outside the probe region."); +// static_assert(WITHIN(PROBE_PT_3_X, PROBE_X_MIN, PROBE_X_MAX), "PROBE_PT_3_X is outside the probe region."); +// static_assert(WITHIN(PROBE_PT_1_Y, PROBE_Y_MIN, PROBE_Y_MAX), "PROBE_PT_1_Y is outside the probe region."); +// static_assert(WITHIN(PROBE_PT_2_Y, PROBE_Y_MIN, PROBE_Y_MAX), "PROBE_PT_2_Y is outside the probe region."); +// static_assert(WITHIN(PROBE_PT_3_Y, PROBE_Y_MIN, PROBE_Y_MAX), "PROBE_PT_3_Y is outside the probe region."); +//#endif #if ENABLED(AUTO_BED_LEVELING_UBL) @@ -1246,20 +1251,6 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "SCARA machines can only use the AUTO_BED_LEVELING_BILINEAR leveling option." #endif - /** - * Check auto bed leveling probe points - */ - #if ABL_GRID - - static_assert(LEFT_PROBE_BED_POSITION < RIGHT_PROBE_BED_POSITION, "LEFT_PROBE_BED_POSITION must be less than RIGHT_PROBE_BED_POSITION."); - static_assert(FRONT_PROBE_BED_POSITION < BACK_PROBE_BED_POSITION, "FRONT_PROBE_BED_POSITION must be less than BACK_PROBE_BED_POSITION."); - static_assert(LEFT_PROBE_BED_POSITION >= MIN_PROBE_X, "LEFT_PROBE_BED_POSITION is outside the probe region."); - static_assert(RIGHT_PROBE_BED_POSITION <= MAX_PROBE_X, "RIGHT_PROBE_BED_POSITION is outside the probe region."); - static_assert(FRONT_PROBE_BED_POSITION >= MIN_PROBE_Y, "FRONT_PROBE_BED_POSITION is outside the probe region."); - static_assert(BACK_PROBE_BED_POSITION <= MAX_PROBE_Y, "BACK_PROBE_BED_POSITION is outside the probe region."); - - #endif - #elif ENABLED(MESH_BED_LEVELING) // Hide PROBE_MANUALLY from the rest of the code @@ -1328,8 +1319,11 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS */ #if ENABLED(Z_SAFE_HOMING) #if HAS_BED_PROBE - static_assert(WITHIN(Z_SAFE_HOMING_X_POINT, MIN_PROBE_X, MAX_PROBE_X), "Z_SAFE_HOMING_X_POINT is outside the probe region."); - static_assert(WITHIN(Z_SAFE_HOMING_Y_POINT, MIN_PROBE_Y, MAX_PROBE_Y), "Z_SAFE_HOMING_Y_POINT is outside the probe region."); + // + // !! TODO: REPLACE WITH TESTS IN THE Z_SAFE_HOMING CODE !! + // + //static_assert(WITHIN(Z_SAFE_HOMING_X_POINT, PROBE_X_MIN, PROBE_X_MAX), "Z_SAFE_HOMING_X_POINT is outside the probe region."); + //static_assert(WITHIN(Z_SAFE_HOMING_Y_POINT, PROBE_Y_MIN, PROBE_Y_MAX), "Z_SAFE_HOMING_Y_POINT is outside the probe region."); #else static_assert(WITHIN(Z_SAFE_HOMING_X_POINT, X_MIN_POS, X_MAX_POS), "Z_SAFE_HOMING_X_POINT can't be reached by the nozzle."); static_assert(WITHIN(Z_SAFE_HOMING_Y_POINT, Y_MIN_POS, Y_MAX_POS), "Z_SAFE_HOMING_Y_POINT can't be reached by the nozzle."); diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp index 28b2ec006a39..68b8aad5234e 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.cpp +++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp @@ -708,7 +708,7 @@ namespace ExtUI { #if EXTRUDERS > 1 && (linked_nozzles || active_extruder == 0) #endif - ) zprobe_zoffset += mm; + ) zprobe_offset[Z_AXIS] += mm; #else UNUSED(mm); #endif @@ -746,7 +746,7 @@ namespace ExtUI { float getZOffset_mm() { #if HAS_BED_PROBE - return zprobe_zoffset; + return zprobe_offset[Z_AXIS]; #elif ENABLED(BABYSTEP_DISPLAY_TOTAL) return babystep.axis_total[BS_TOTAL_AXIS(Z_AXIS) + 1]; #else @@ -757,7 +757,7 @@ namespace ExtUI { void setZOffset_mm(const float value) { #if HAS_BED_PROBE if (WITHIN(value, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) - zprobe_zoffset = value; + zprobe_offset[Z_AXIS] = value; #elif ENABLED(BABYSTEP_DISPLAY_TOTAL) babystep.add_mm(Z_AXIS, (value - babystep.axis_total[BS_TOTAL_AXIS(Z_AXIS) + 1])); #else diff --git a/Marlin/src/lcd/menu/menu.cpp b/Marlin/src/lcd/menu/menu.cpp index 5590ef7143b5..800b4f03d075 100644 --- a/Marlin/src/lcd/menu/menu.cpp +++ b/Marlin/src/lcd/menu/menu.cpp @@ -402,7 +402,7 @@ void scroll_screen(const uint8_t limit, const bool is_menu) { ui.encoderPosition = 0; const float diff = planner.steps_to_mm[Z_AXIS] * babystep_increment, - new_probe_offset = zprobe_zoffset + diff, + new_probe_offset = zprobe_offset[Z_AXIS] + diff, new_offs = #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) do_probe ? new_probe_offset : hotend_offset[Z_AXIS][active_extruder] - diff @@ -414,7 +414,7 @@ void scroll_screen(const uint8_t limit, const bool is_menu) { babystep.add_steps(Z_AXIS, babystep_increment); - if (do_probe) zprobe_zoffset = new_offs; + if (do_probe) zprobe_offset[Z_AXIS] = new_offs; #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) else hotend_offset[Z_AXIS][active_extruder] = new_offs; #endif @@ -428,10 +428,10 @@ void scroll_screen(const uint8_t limit, const bool is_menu) { draw_edit_screen(PSTR(MSG_Z_OFFSET), ftostr43sign(hotend_offset[Z_AXIS][active_extruder])); else #endif - draw_edit_screen(PSTR(MSG_ZPROBE_ZOFFSET), ftostr43sign(zprobe_zoffset)); + draw_edit_screen(PSTR(MSG_ZPROBE_ZOFFSET), ftostr43sign(zprobe_offset[Z_AXIS])); #if ENABLED(BABYSTEP_ZPROBE_GFX_OVERLAY) - if (do_probe) _lcd_zoffset_overlay_gfx(zprobe_zoffset); + if (do_probe) _lcd_zoffset_overlay_gfx(zprobe_offset[Z_AXIS]); #endif } } diff --git a/Marlin/src/lcd/menu/menu_bed_corners.cpp b/Marlin/src/lcd/menu/menu_bed_corners.cpp index a559a6852796..07629b71796f 100644 --- a/Marlin/src/lcd/menu/menu_bed_corners.cpp +++ b/Marlin/src/lcd/menu/menu_bed_corners.cpp @@ -62,10 +62,10 @@ static inline void _lcd_goto_next_corner() { current_position[Y_AXIS] = Y_MIN_BED + LEVEL_CORNERS_INSET; break; case 1: - current_position[X_AXIS] = X_MAX_BED - LEVEL_CORNERS_INSET; + current_position[X_AXIS] = X_MAX_BED - (LEVEL_CORNERS_INSET); break; case 2: - current_position[Y_AXIS] = Y_MAX_BED - LEVEL_CORNERS_INSET; + current_position[Y_AXIS] = Y_MAX_BED - (LEVEL_CORNERS_INSET); break; case 3: current_position[X_AXIS] = X_MIN_BED + LEVEL_CORNERS_INSET; diff --git a/Marlin/src/lcd/menu/menu_bed_leveling.cpp b/Marlin/src/lcd/menu/menu_bed_leveling.cpp index 3f1f746af149..33073fc81ad6 100644 --- a/Marlin/src/lcd/menu/menu_bed_leveling.cpp +++ b/Marlin/src/lcd/menu/menu_bed_leveling.cpp @@ -279,7 +279,7 @@ void menu_bed_leveling() { #if ENABLED(BABYSTEP_ZPROBE_OFFSET) MENU_ITEM(submenu, MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset); #elif HAS_BED_PROBE - MENU_ITEM_EDIT(float52, MSG_ZPROBE_ZOFFSET, &zprobe_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX); + MENU_ITEM_EDIT(float52, MSG_ZPROBE_ZOFFSET, &zprobe_offset[Z_AXIS], Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX); #endif #if ENABLED(LEVEL_BED_CORNERS) diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index 0bc3963f290d..89fedeefcd93 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -347,7 +347,7 @@ void menu_configuration() { #if ENABLED(BABYSTEP_ZPROBE_OFFSET) MENU_ITEM(submenu, MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset); #elif HAS_BED_PROBE - MENU_ITEM_EDIT(float52, MSG_ZPROBE_ZOFFSET, &zprobe_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX); + MENU_ITEM_EDIT(float52, MSG_ZPROBE_ZOFFSET, &zprobe_offset[Z_AXIS], Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX); #endif const bool busy = printer_busy(); diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp index b00f62f2c9f9..6b7f7ab95813 100644 --- a/Marlin/src/module/configuration_store.cpp +++ b/Marlin/src/module/configuration_store.cpp @@ -37,7 +37,7 @@ */ // Change EEPROM version if the structure changes -#define EEPROM_VERSION "V69" +#define EEPROM_VERSION "V70" #define EEPROM_OFFSET 100 // Check the integrity of data offsets. @@ -60,6 +60,8 @@ #include "../HAL/shared/persistent_store_api.h" #endif +#include "probe.h" + #if HAS_LEVELING #include "../feature/bedlevel/bedlevel.h" #endif @@ -78,10 +80,6 @@ #define EEPROM_NUM_SERVOS NUM_SERVO_PLUGS #endif -#if HAS_BED_PROBE - #include "probe.h" -#endif - #include "../feature/fwretract.h" #if ENABLED(POWER_LOSS_RECOVERY) @@ -178,7 +176,7 @@ typedef struct SettingsDataStruct { // HAS_BED_PROBE // - float zprobe_zoffset; + float zprobe_offset[XYZ]; // // ABL_PLANAR @@ -615,12 +613,8 @@ void MarlinSettings::postprocess() { // Probe Z Offset // { - _FIELD_TEST(zprobe_zoffset); - - #if !HAS_BED_PROBE - const float zprobe_zoffset = 0; - #endif - EEPROM_WRITE(zprobe_zoffset); + _FIELD_TEST(zprobe_offset[Z_AXIS]); + EEPROM_WRITE(zprobe_offset); } // @@ -1421,12 +1415,14 @@ void MarlinSettings::postprocess() { // Probe Z Offset // { - _FIELD_TEST(zprobe_zoffset); + _FIELD_TEST(zprobe_offset[Z_AXIS]); - #if !HAS_BED_PROBE - float zprobe_zoffset; + #if HAS_BED_PROBE + float (&zpo)[XYZ] = zprobe_offset; + #else + float zpo[XYZ]; #endif - EEPROM_READ(zprobe_zoffset); + EEPROM_READ(zpo); } // @@ -2321,7 +2317,12 @@ void MarlinSettings::reset() { #endif #if HAS_BED_PROBE - zprobe_zoffset = Z_PROBE_OFFSET_FROM_EXTRUDER; + #ifndef NOZZLE_TO_PROBE_OFFSET + #define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0 } + #endif + constexpr float dpo[XYZ] = NOZZLE_TO_PROBE_OFFSET; + static_assert(COUNT(dpo) == 3, "NOZZLE_TO_PROBE_OFFSET must contain offsets for X, Y, and Z."); + LOOP_XYZ(a) zprobe_offset[a] = dpo[a]; #endif // @@ -3070,7 +3071,9 @@ void MarlinSettings::reset() { say_units(true); } CONFIG_ECHO_START(); - SERIAL_ECHOLNPAIR(" M851 Z", LINEAR_UNIT(zprobe_zoffset)); + SERIAL_ECHOLNPAIR(" M851 X", LINEAR_UNIT(zprobe_offset[X_AXIS]), + " Y", LINEAR_UNIT(zprobe_offset[Y_AXIS]), + " Z", LINEAR_UNIT(zprobe_offset[Z_AXIS])); #endif /** diff --git a/Marlin/src/module/delta.cpp b/Marlin/src/module/delta.cpp index 186b5adf343f..c9d942f1b782 100644 --- a/Marlin/src/module/delta.cpp +++ b/Marlin/src/module/delta.cpp @@ -233,7 +233,7 @@ void home_delta() { // Move all carriages together linearly until an endstop is hit. destination[Z_AXIS] = (delta_height #if HAS_BED_PROBE - - zprobe_zoffset + - zprobe_offset[Z_AXIS] #endif + 10); buffer_line_to_destination(homing_feedrate(X_AXIS)); diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index 203194411788..3867fb9c74b0 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -505,7 +505,7 @@ void restore_feedrate_and_scaling() { soft_endstop[axis].min = base_min_pos(axis); soft_endstop[axis].max = (axis == Z_AXIS ? delta_height #if HAS_BED_PROBE - - zprobe_zoffset + - zprobe_offset[Z_AXIS] #endif : base_max_pos(axis)); @@ -1340,7 +1340,7 @@ void set_axis_is_at_home(const AxisEnum axis) { #elif ENABLED(DELTA) current_position[axis] = (axis == Z_AXIS ? delta_height #if HAS_BED_PROBE - - zprobe_zoffset + - zprobe_offset[Z_AXIS] #endif : base_home_pos(axis)); #else @@ -1354,9 +1354,9 @@ void set_axis_is_at_home(const AxisEnum axis) { if (axis == Z_AXIS) { #if HOMING_Z_WITH_PROBE - current_position[Z_AXIS] -= zprobe_zoffset; + current_position[Z_AXIS] -= zprobe_offset[Z_AXIS]; - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("*** Z HOMED WITH PROBE (Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) ***\n> zprobe_zoffset = ", zprobe_zoffset); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("*** Z HOMED WITH PROBE (Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) ***\n> zprobe_offset[Z_AXIS] = ", zprobe_offset[Z_AXIS]); #else diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index ba1ac07f703e..86fccc25c468 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -30,14 +30,14 @@ #include "../inc/MarlinConfig.h" -#if IS_SCARA - #include "scara.h" -#endif - #if HAS_BED_PROBE #include "probe.h" #endif +#if IS_SCARA + #include "scara.h" +#endif + // Axis homed and known-position states extern uint8_t axis_homed, axis_known_position; constexpr uint8_t xyz_bits = _BV(X_AXIS) | _BV(Y_AXIS) | _BV(Z_AXIS); @@ -284,7 +284,7 @@ void homeaxis(const AxisEnum axis); // Return true if the both nozzle and the probe can reach the given point. // Note: This won't work on SCARA since the probe offset rotates with the arm. inline bool position_is_reachable_by_probe(const float &rx, const float &ry) { - return position_is_reachable(rx - (X_PROBE_OFFSET_FROM_EXTRUDER), ry - (Y_PROBE_OFFSET_FROM_EXTRUDER)) + return position_is_reachable(rx - zprobe_offset[X_AXIS], ry - zprobe_offset[Y_AXIS]) && position_is_reachable(rx, ry, ABS(MIN_PROBE_EDGE)); } #endif @@ -313,9 +313,9 @@ void homeaxis(const AxisEnum axis); * nozzle must be be able to reach +10,-10. */ inline bool position_is_reachable_by_probe(const float &rx, const float &ry) { - return position_is_reachable(rx - (X_PROBE_OFFSET_FROM_EXTRUDER), ry - (Y_PROBE_OFFSET_FROM_EXTRUDER)) - && WITHIN(rx, MIN_PROBE_X - slop, MAX_PROBE_X + slop) - && WITHIN(ry, MIN_PROBE_Y - slop, MAX_PROBE_Y + slop); + return position_is_reachable(rx - zprobe_offset[X_AXIS], ry - zprobe_offset[Y_AXIS]) + && WITHIN(rx, probe_min_x() - slop, probe_max_x() + slop) + && WITHIN(ry, probe_min_y() - slop, probe_max_y() + slop); } #endif diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index f47082263702..f9cfd26f9a5d 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -56,7 +56,7 @@ #include "../feature/backlash.h" #endif -float zprobe_zoffset; // Initialized by settings.load() +float zprobe_offset[XYZ]; // Initialized by settings.load() #if ENABLED(BLTOUCH) #include "../feature/bltouch.h" @@ -86,6 +86,43 @@ float zprobe_zoffset; // Initialized by settings.load() #define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE) #include "../core/debug_out.h" +float probe_min_x() { + return _MAX( + #if ENABLED(DELTA) || IS_SCARA + PROBE_X_MIN, MESH_MIN_X + #else + (X_MIN_BED) + (MIN_PROBE_EDGE), (X_MIN_POS) + zprobe_offset[X_AXIS] + #endif + ); +} +float probe_max_x() { + return _MIN( + #if ENABLED(DELTA) || IS_SCARA + PROBE_X_MAX, MESH_MAX_X + #else + (X_MAX_BED) - (MIN_PROBE_EDGE), (X_MAX_POS) + zprobe_offset[X_AXIS] + #endif + ); +} +float probe_min_y() { + return _MAX( + #if ENABLED(DELTA) || IS_SCARA + PROBE_Y_MIN, MESH_MIN_Y + #else + (Y_MIN_BED) + (MIN_PROBE_EDGE), (Y_MIN_POS) + zprobe_offset[Y_AXIS] + #endif + ); +} +float probe_max_y() { + return _MIN( + #if ENABLED(DELTA) || IS_SCARA + PROBE_Y_MAX, MESH_MAX_Y + #else + (Y_MAX_BED) - (MIN_PROBE_EDGE), (Y_MAX_POS) + zprobe_offset[Y_AXIS] + #endif + ); +} + #if ENABLED(Z_PROBE_SLED) #ifndef SLED_DOCKING_OFFSET @@ -263,7 +300,7 @@ inline void do_probe_raise(const float z_raise) { if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("do_probe_raise(", z_raise, ")"); float z_dest = z_raise; - if (zprobe_zoffset < 0) z_dest -= zprobe_zoffset; + if (zprobe_offset[Z_AXIS] < 0) z_dest -= zprobe_offset[Z_AXIS]; NOMORE(z_dest, Z_MAX_POS); @@ -543,7 +580,7 @@ static float run_z_probe() { // Stop the probe before it goes too low to prevent damage. // If Z isn't known then probe to -10mm. - const float z_probe_low_point = TEST(axis_known_position, Z_AXIS) ? -zprobe_zoffset + Z_PROBE_LOW_POINT : -10.0; + const float z_probe_low_point = TEST(axis_known_position, Z_AXIS) ? -zprobe_offset[Z_AXIS] + Z_PROBE_LOW_POINT : -10.0; // Double-probing does a fast probe followed by a slow probe #if TOTAL_PROBING == 2 @@ -568,7 +605,7 @@ static float run_z_probe() { // If the nozzle is well over the travel height then // move down quickly before doing the slow probe - const float z = Z_CLEARANCE_DEPLOY_PROBE + 5.0 + (zprobe_zoffset < 0 ? -zprobe_zoffset : 0); + const float z = Z_CLEARANCE_DEPLOY_PROBE + 5.0 + (zprobe_offset[Z_AXIS] < 0 ? -zprobe_offset[Z_AXIS] : 0); if (current_position[Z_AXIS] > z) { // Probe down fast. If the probe never triggered, raise for probe clearance if (!do_probe_move(z, MMM_TO_MMS(Z_PROBE_SPEED_FAST))) @@ -698,8 +735,8 @@ float probe_at_point(const float &rx, const float &ry, const ProbePtRaise raise_ float nx = rx, ny = ry; if (probe_relative) { if (!position_is_reachable_by_probe(rx, ry)) return NAN; // The given position is in terms of the probe - nx -= (X_PROBE_OFFSET_FROM_EXTRUDER); // Get the nozzle position - ny -= (Y_PROBE_OFFSET_FROM_EXTRUDER); + nx -= zprobe_offset[X_AXIS]; // Get the nozzle position + ny -= zprobe_offset[Y_AXIS]; } else if (!position_is_reachable(nx, ny)) return NAN; // The given position is in terms of the nozzle @@ -720,7 +757,7 @@ float probe_at_point(const float &rx, const float &ry, const ProbePtRaise raise_ float measured_z = NAN; if (!DEPLOY_PROBE()) { - measured_z = run_z_probe() + zprobe_zoffset; + measured_z = run_z_probe() + zprobe_offset[Z_AXIS]; const bool big_raise = raise_after == PROBE_PT_BIG_RAISE; if (big_raise || raise_after == PROBE_PT_RAISE) diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h index 361952658820..6713b11a6b0e 100644 --- a/Marlin/src/module/probe.h +++ b/Marlin/src/module/probe.h @@ -28,7 +28,8 @@ #include "../inc/MarlinConfig.h" #if HAS_BED_PROBE - extern float zprobe_zoffset; + + extern float zprobe_offset[XYZ]; bool set_probe_deployed(const bool deploy); #ifdef Z_AFTER_PROBING void move_z_after_probing(); @@ -45,9 +46,15 @@ #if HAS_HEATED_BED && ENABLED(WAIT_FOR_BED_HEATER) extern const char msg_wait_for_bed_heating[25]; #endif + + float probe_min_x(), probe_max_x(), probe_min_y(), probe_max_y(); + #else + + constexpr float zprobe_offset[XYZ] = { 0 }; #define DEPLOY_PROBE() #define STOW_PROBE() + #endif #if HAS_Z_SERVO_PROBE diff --git a/config/default/Configuration.h b/config/default/Configuration.h index 6f27160153b4..5935f992691e 100644 --- a/config/default/Configuration.h +++ b/config/default/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/3DFabXYZ/Migbot/Configuration.h b/config/examples/3DFabXYZ/Migbot/Configuration.h index 7a45412513d8..544e4f3de3b3 100644 --- a/config/examples/3DFabXYZ/Migbot/Configuration.h +++ b/config/examples/3DFabXYZ/Migbot/Configuration.h @@ -894,11 +894,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -910,10 +909,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 21 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 61 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 21, 61, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -947,7 +946,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1205,12 +1204,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y 4 - // Set the boundaries for probing (where the probe can reach). - #define LEFT_PROBE_BED_POSITION X_PROBE_OFFSET_FROM_EXTRUDER - #define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (X_PROBE_OFFSET_FROM_EXTRUDER) + MIN_PROBE_EDGE) - #define FRONT_PROBE_BED_POSITION Y_PROBE_OFFSET_FROM_EXTRUDER - #define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/ADIMLab/Gantry v1/Configuration.h b/config/examples/ADIMLab/Gantry v1/Configuration.h index 65aca731fd03..59e3078ee971 100644 --- a/config/examples/ADIMLab/Gantry v1/Configuration.h +++ b/config/examples/ADIMLab/Gantry v1/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1200,12 +1199,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/ADIMLab/Gantry v2/Configuration.h b/config/examples/ADIMLab/Gantry v2/Configuration.h index e626638e9b1f..d04e81725e74 100644 --- a/config/examples/ADIMLab/Gantry v2/Configuration.h +++ b/config/examples/ADIMLab/Gantry v2/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1200,12 +1199,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/AlephObjects/TAZ4/Configuration.h b/config/examples/AlephObjects/TAZ4/Configuration.h index ccd0d10c7bd7..15369a2f849b 100644 --- a/config/examples/AlephObjects/TAZ4/Configuration.h +++ b/config/examples/AlephObjects/TAZ4/Configuration.h @@ -908,11 +908,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -924,10 +923,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -25, -29, -12.35 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -961,7 +960,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1219,12 +1218,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Alfawise/U20-bltouch/Configuration.h b/config/examples/Alfawise/U20-bltouch/Configuration.h index 1a2c98952dc0..3ef58dd294c3 100644 --- a/config/examples/Alfawise/U20-bltouch/Configuration.h +++ b/config/examples/Alfawise/U20-bltouch/Configuration.h @@ -953,11 +953,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -969,10 +968,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -35 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -6 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -0.5 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -35, -6, -0.5 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -1006,7 +1005,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1278,12 +1277,6 @@ #define GRID_MAX_POINTS_X 4 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST @@ -1404,7 +1397,7 @@ #if ENABLED(Z_SAFE_HOMING) #define Z_SAFE_HOMING_X_POINT ((X_BED_SIZE) / 2) // X point for Z homing when homing all axes (G28). //#define Z_SAFE_HOMING_Y_POINT ((Y_BED_SIZE) / 2) // Y point for Z homing when homing all axes (G28). - #define Z_SAFE_HOMING_Y_POINT MIN_PROBE_Y + #define Z_SAFE_HOMING_Y_POINT 4 #endif // Homing speeds (mm/m) diff --git a/config/examples/Alfawise/U20/Configuration.h b/config/examples/Alfawise/U20/Configuration.h index aa76f49d746b..ccba80b6fd18 100644 --- a/config/examples/Alfawise/U20/Configuration.h +++ b/config/examples/Alfawise/U20/Configuration.h @@ -953,11 +953,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -969,10 +968,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -1006,7 +1005,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1278,12 +1277,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST @@ -1403,7 +1396,7 @@ #if ENABLED(Z_SAFE_HOMING) #define Z_SAFE_HOMING_X_POINT ((X_BED_SIZE) / 2) // X point for Z homing when homing all axes (G28). - #define Z_SAFE_HOMING_Y_POINT ((Y_BED_SIZE) / 2) // Y point for Z homing when homing all axes (G28). + #define Z_SAFE_HOMING_Y_POINT 4 // Y point for Z homing when homing all axes (G28). #endif // Homing speeds (mm/m) diff --git a/config/examples/AliExpress/CL-260/Configuration.h b/config/examples/AliExpress/CL-260/Configuration.h index 327b9add008f..2fe120703124 100644 --- a/config/examples/AliExpress/CL-260/Configuration.h +++ b/config/examples/AliExpress/CL-260/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/AliExpress/UM2pExt/Configuration.h b/config/examples/AliExpress/UM2pExt/Configuration.h index 161e478b0a3b..f54ba9cf9bb1 100644 --- a/config/examples/AliExpress/UM2pExt/Configuration.h +++ b/config/examples/AliExpress/UM2pExt/Configuration.h @@ -899,11 +899,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -915,10 +914,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -952,7 +951,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1210,12 +1209,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Anet/A2/Configuration.h b/config/examples/Anet/A2/Configuration.h index 95b20d3a4f08..ef7e44b66c74 100644 --- a/config/examples/Anet/A2/Configuration.h +++ b/config/examples/Anet/A2/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -//#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -//#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -//#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +//#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges //#define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Anet/A2plus/Configuration.h b/config/examples/Anet/A2plus/Configuration.h index 9b342797f6c9..35b21bc2d0a3 100644 --- a/config/examples/Anet/A2plus/Configuration.h +++ b/config/examples/Anet/A2plus/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -//#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -//#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -//#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +//#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges //#define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Anet/A6/Configuration.h b/config/examples/Anet/A6/Configuration.h index 3a0ef22f1878..3de2a9b466b1 100644 --- a/config/examples/Anet/A6/Configuration.h +++ b/config/examples/Anet/A6/Configuration.h @@ -935,11 +935,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -951,31 +950,23 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -//#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -//#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -//#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +//#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // ANET A8: FRONT-MOUNTED SENSOR WITH 3D PRINTED MOUNT -//#define X_PROBE_OFFSET_FROM_EXTRUDER -28 // X offset: -left +right [of the nozzle] -//#define Y_PROBE_OFFSET_FROM_EXTRUDER -45 // Y offset: -front +behind [the nozzle] -//#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +//#define NOZZLE_TO_PROBE_OFFSET { -28, -45, 0 } // THESE ARE FOR THE OFFICIAL ANET REAR-MOUNTED SENSOR -//#define X_PROBE_OFFSET_FROM_EXTRUDER -1 // X offset: -left +right [of the nozzle] -//#define Y_PROBE_OFFSET_FROM_EXTRUDER 3 // Y offset: -front +behind [the nozzle] -//#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +//#define NOZZLE_TO_PROBE_OFFSET { -1, 3, 0 } // ANET A6 with BLTouch/3D-Touch mounted right to the nozzle -#define X_PROBE_OFFSET_FROM_EXTRUDER 39 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 39, 0, 0 } //ANET A6 with BLTouch/3D-Touch betwen Fan and Belt // (mount: https://github.com/ralf-e/ANET_A6_modifications/tree/master/A6_X-Axis) -//#define X_PROBE_OFFSET_FROM_EXTRUDER -30 // X offset: -left +right [of the nozzle] -//#define Y_PROBE_OFFSET_FROM_EXTRUDER 15 // Y offset: -front +behind [the nozzle] -//#define Z_PROBE_OFFSET_FROM_EXTRUDER 0.75 // Z offset: -below +above [the nozzle] +//#define NOZZLE_TO_PROBE_OFFSET { -30, 15, 0.75 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -1010,7 +1001,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1312,36 +1303,6 @@ #define GRID_MAX_POINTS_X 4 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION 15 - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - 15) - //#define FRONT_PROBE_BED_POSITION 15 - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - 15) - - // ANET A6 - //#define LEFT_PROBE_BED_POSITION 20 - //#define RIGHT_PROBE_BED_POSITION 190 - //#define FRONT_PROBE_BED_POSITION 20 - //#define BACK_PROBE_BED_POSITION 190 - - // ANET A6 BLTOUCH right (39mm) to the nozzle - //#define LEFT_PROBE_BED_POSITION 36 - //#define RIGHT_PROBE_BED_POSITION 190 - //#define FRONT_PROBE_BED_POSITION 20 - //#define BACK_PROBE_BED_POSITION 190 - - // ANET A6 with new X-Axis and modded Y-Axis - //#define LEFT_PROBE_BED_POSITION 20 - //#define RIGHT_PROBE_BED_POSITION 205 - //#define FRONT_PROBE_BED_POSITION 20 - //#define BACK_PROBE_BED_POSITION 205 - - // ANET A6 with new X-Axis and modded Y-Axis, X0/Y0 front left bed edge - //#define LEFT_PROBE_BED_POSITION 20 - //#define RIGHT_PROBE_BED_POSITION 194 - //#define FRONT_PROBE_BED_POSITION 20 - //#define BACK_PROBE_BED_POSITION 194 - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Anet/A8/Configuration.h b/config/examples/Anet/A8/Configuration.h index 94037273755d..eeae0493e36c 100644 --- a/config/examples/Anet/A8/Configuration.h +++ b/config/examples/Anet/A8/Configuration.h @@ -901,11 +901,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -917,10 +916,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -954,7 +953,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1212,12 +1211,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Anet/A8plus/Configuration.h b/config/examples/Anet/A8plus/Configuration.h index 80e672061997..188a3a1de42b 100644 --- a/config/examples/Anet/A8plus/Configuration.h +++ b/config/examples/Anet/A8plus/Configuration.h @@ -899,11 +899,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -915,10 +914,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -952,7 +951,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1210,12 +1209,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Anet/E16/Configuration.h b/config/examples/Anet/E16/Configuration.h index 29dfe0173dd0..2c39c847c011 100644 --- a/config/examples/Anet/E16/Configuration.h +++ b/config/examples/Anet/E16/Configuration.h @@ -900,11 +900,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -916,10 +915,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -953,7 +952,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1211,12 +1210,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/AnyCubic/i3/Configuration.h b/config/examples/AnyCubic/i3/Configuration.h index 524fb60accfd..a3a085700641 100644 --- a/config/examples/AnyCubic/i3/Configuration.h +++ b/config/examples/AnyCubic/i3/Configuration.h @@ -898,11 +898,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -914,10 +913,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 75 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -2 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 75, 5, -2 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -951,7 +950,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1209,12 +1208,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/ArmEd/Configuration.h b/config/examples/ArmEd/Configuration.h index ffb9833c8ff4..8521531a0e37 100644 --- a/config/examples/ArmEd/Configuration.h +++ b/config/examples/ArmEd/Configuration.h @@ -889,11 +889,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -905,10 +904,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -942,7 +941,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1200,12 +1199,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Azteeg/X5GT/Configuration.h b/config/examples/Azteeg/X5GT/Configuration.h index 48de22707d3b..695392815b88 100644 --- a/config/examples/Azteeg/X5GT/Configuration.h +++ b/config/examples/Azteeg/X5GT/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration.h b/config/examples/BIBO/TouchX/cyclops/Configuration.h index 8becbcec1d17..bbd7bd15bb13 100644 --- a/config/examples/BIBO/TouchX/cyclops/Configuration.h +++ b/config/examples/BIBO/TouchX/cyclops/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION 15 - //#define RIGHT_PROBE_BED_POSITION 170 - //#define FRONT_PROBE_BED_POSITION 20 - //#define BACK_PROBE_BED_POSITION 170 - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/BIBO/TouchX/default/Configuration.h b/config/examples/BIBO/TouchX/default/Configuration.h index da21332faf7d..dc4ec2334119 100644 --- a/config/examples/BIBO/TouchX/default/Configuration.h +++ b/config/examples/BIBO/TouchX/default/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION 15 - //#define RIGHT_PROBE_BED_POSITION 170 - //#define FRONT_PROBE_BED_POSITION 20 - //#define BACK_PROBE_BED_POSITION 170 - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/BQ/Hephestos/Configuration.h b/config/examples/BQ/Hephestos/Configuration.h index 5d12c9c91785..b39ed5eca146 100644 --- a/config/examples/BQ/Hephestos/Configuration.h +++ b/config/examples/BQ/Hephestos/Configuration.h @@ -876,11 +876,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -892,10 +891,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -25, -29, -12.35 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -929,7 +928,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1187,12 +1186,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/BQ/Hephestos_2/Configuration.h b/config/examples/BQ/Hephestos_2/Configuration.h index 201d30f9803a..41ec72637f05 100644 --- a/config/examples/BQ/Hephestos_2/Configuration.h +++ b/config/examples/BQ/Hephestos_2/Configuration.h @@ -889,11 +889,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -905,10 +904,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 34 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 15 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 34, 15, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -942,7 +941,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 5 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION X_MIN_POS + (X_PROBE_OFFSET_FROM_EXTRUDER) - //#define RIGHT_PROBE_BED_POSITION X_MAX_POS - (X_PROBE_OFFSET_FROM_EXTRUDER) - //#define FRONT_PROBE_BED_POSITION Y_MIN_POS + (Y_PROBE_OFFSET_FROM_EXTRUDER) - //#define BACK_PROBE_BED_POSITION Y_MAX_POS - (Y_PROBE_OFFSET_FROM_EXTRUDER) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/BQ/WITBOX/Configuration.h b/config/examples/BQ/WITBOX/Configuration.h index c8c6cf044b19..3c99137eabe4 100644 --- a/config/examples/BQ/WITBOX/Configuration.h +++ b/config/examples/BQ/WITBOX/Configuration.h @@ -876,11 +876,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -892,10 +891,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -25, -29, -12.35 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -929,7 +928,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1187,12 +1186,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Cartesio/Configuration.h b/config/examples/Cartesio/Configuration.h index 46c4f3c788f5..0cb76438011e 100644 --- a/config/examples/Cartesio/Configuration.h +++ b/config/examples/Cartesio/Configuration.h @@ -887,11 +887,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -903,10 +902,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -940,7 +939,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1198,12 +1197,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Creality/CR-10/Configuration.h b/config/examples/Creality/CR-10/Configuration.h index 8dcebd612a40..b8844e05ed4c 100644 --- a/config/examples/Creality/CR-10/Configuration.h +++ b/config/examples/Creality/CR-10/Configuration.h @@ -898,11 +898,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -914,10 +913,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -951,7 +950,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1209,12 +1208,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Creality/CR-10S/Configuration.h b/config/examples/Creality/CR-10S/Configuration.h index 7e8ac0eff337..50d596d88b75 100644 --- a/config/examples/Creality/CR-10S/Configuration.h +++ b/config/examples/Creality/CR-10S/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1200,12 +1199,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Creality/CR-10_5S/Configuration.h b/config/examples/Creality/CR-10_5S/Configuration.h index 5705f0108a89..496fb80b7913 100644 --- a/config/examples/Creality/CR-10_5S/Configuration.h +++ b/config/examples/Creality/CR-10_5S/Configuration.h @@ -889,11 +889,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -905,10 +904,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -942,7 +941,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1202,12 +1201,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Creality/CR-10mini/Configuration.h b/config/examples/Creality/CR-10mini/Configuration.h index 0062baa8d92e..869a99f36057 100644 --- a/config/examples/Creality/CR-10mini/Configuration.h +++ b/config/examples/Creality/CR-10mini/Configuration.h @@ -907,11 +907,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -923,10 +922,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -960,7 +959,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1218,12 +1217,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Creality/CR-20 Pro/Configuration.h b/config/examples/Creality/CR-20 Pro/Configuration.h index 1728cc2059fa..751e5465c65e 100644 --- a/config/examples/Creality/CR-20 Pro/Configuration.h +++ b/config/examples/Creality/CR-20 Pro/Configuration.h @@ -891,11 +891,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -907,10 +906,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -944,7 +943,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1202,12 +1201,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Creality/CR-20/Configuration.h b/config/examples/Creality/CR-20/Configuration.h index 7e7c54485720..cc4ad8449824 100644 --- a/config/examples/Creality/CR-20/Configuration.h +++ b/config/examples/Creality/CR-20/Configuration.h @@ -891,11 +891,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -907,10 +906,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -944,7 +943,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1202,12 +1201,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Creality/CR-8/Configuration.h b/config/examples/Creality/CR-8/Configuration.h index 04dd56618552..b43986e0c6fa 100644 --- a/config/examples/Creality/CR-8/Configuration.h +++ b/config/examples/Creality/CR-8/Configuration.h @@ -898,11 +898,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -914,10 +913,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -951,7 +950,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1209,12 +1208,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Creality/Ender-2/Configuration.h b/config/examples/Creality/Ender-2/Configuration.h index 3dd6583250ec..7828c174ccce 100644 --- a/config/examples/Creality/Ender-2/Configuration.h +++ b/config/examples/Creality/Ender-2/Configuration.h @@ -892,11 +892,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -908,10 +907,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -945,7 +944,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1203,12 +1202,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Creality/Ender-3/Configuration.h b/config/examples/Creality/Ender-3/Configuration.h index 019135ee1f82..b3e6954958e0 100644 --- a/config/examples/Creality/Ender-3/Configuration.h +++ b/config/examples/Creality/Ender-3/Configuration.h @@ -892,11 +892,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -908,10 +907,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -945,7 +944,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1203,12 +1202,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Creality/Ender-4/Configuration.h b/config/examples/Creality/Ender-4/Configuration.h index 84f7304dbfae..8e0fc2b4ff2d 100644 --- a/config/examples/Creality/Ender-4/Configuration.h +++ b/config/examples/Creality/Ender-4/Configuration.h @@ -898,11 +898,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -914,10 +913,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -951,7 +950,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1209,12 +1208,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Creality/Ender-5/Configuration.h b/config/examples/Creality/Ender-5/Configuration.h index c1db6363af95..7e6e7bb43e15 100644 --- a/config/examples/Creality/Ender-5/Configuration.h +++ b/config/examples/Creality/Ender-5/Configuration.h @@ -891,11 +891,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -907,10 +906,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -944,7 +943,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1202,12 +1201,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration.h b/config/examples/Dagoma/Disco Ultimate/Configuration.h index a3ec472c7df3..c3bace97c189 100644 --- a/config/examples/Dagoma/Disco Ultimate/Configuration.h +++ b/config/examples/Dagoma/Disco Ultimate/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 21 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, 21, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h index fc9ea5e7bbd6..bd37b61aa338 100755 --- a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h +++ b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h @@ -893,11 +893,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -909,10 +908,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -946,7 +945,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1204,12 +1203,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Einstart-S/Configuration.h b/config/examples/Einstart-S/Configuration.h index 243b9148212c..3f1b7f8968b7 100644 --- a/config/examples/Einstart-S/Configuration.h +++ b/config/examples/Einstart-S/Configuration.h @@ -898,11 +898,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -914,10 +913,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -951,7 +950,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1209,12 +1208,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/FYSETC/AIO_II/Configuration.h b/config/examples/FYSETC/AIO_II/Configuration.h index 0005f60dc731..5b32c7547cd4 100644 --- a/config/examples/FYSETC/AIO_II/Configuration.h +++ b/config/examples/FYSETC/AIO_II/Configuration.h @@ -893,11 +893,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -909,10 +908,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -946,7 +945,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1204,12 +1203,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h index eb6bd1b8e0d5..5939e0b1ac6b 100644 --- a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h +++ b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h @@ -893,11 +893,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -909,10 +908,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -44 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -6 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -3.9 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -44, -6, -3.9 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -946,7 +945,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1204,12 +1203,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h b/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h index a12a5f4f443a..08d5bf296ba2 100644 --- a/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h +++ b/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h @@ -893,11 +893,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -909,10 +908,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -946,7 +945,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1204,12 +1203,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h b/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h index f665276dd5a7..a7ed41f40cd8 100644 --- a/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h +++ b/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h @@ -893,11 +893,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -909,10 +908,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -44 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -6 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -3.9 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -44, -6, -3.9 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -946,7 +945,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1204,12 +1203,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/FYSETC/Cheetah/base/Configuration.h b/config/examples/FYSETC/Cheetah/base/Configuration.h index fcb1a83477fa..b1d355bc0e67 100644 --- a/config/examples/FYSETC/Cheetah/base/Configuration.h +++ b/config/examples/FYSETC/Cheetah/base/Configuration.h @@ -893,11 +893,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -909,10 +908,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -946,7 +945,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1204,12 +1203,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/FYSETC/F6_13/Configuration.h b/config/examples/FYSETC/F6_13/Configuration.h index 2cff57d64ca4..1836ff42b299 100644 --- a/config/examples/FYSETC/F6_13/Configuration.h +++ b/config/examples/FYSETC/F6_13/Configuration.h @@ -890,11 +890,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -906,10 +905,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -943,7 +942,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1201,12 +1200,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Felix/Configuration.h b/config/examples/Felix/Configuration.h index 2677dee07559..9e2afbe7ee31 100644 --- a/config/examples/Felix/Configuration.h +++ b/config/examples/Felix/Configuration.h @@ -870,11 +870,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -886,10 +885,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -25, -29, -12.35 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -923,7 +922,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1181,12 +1180,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Felix/DUAL/Configuration.h b/config/examples/Felix/DUAL/Configuration.h index f7e24fa1e230..b7222bf7f1df 100644 --- a/config/examples/Felix/DUAL/Configuration.h +++ b/config/examples/Felix/DUAL/Configuration.h @@ -870,11 +870,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -886,10 +885,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -25, -29, -12.35 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -923,7 +922,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1181,12 +1180,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/FlashForge/CreatorPro/Configuration.h b/config/examples/FlashForge/CreatorPro/Configuration.h index 1a6df0599b99..bf5e797247b7 100644 --- a/config/examples/FlashForge/CreatorPro/Configuration.h +++ b/config/examples/FlashForge/CreatorPro/Configuration.h @@ -880,11 +880,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -896,10 +895,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -933,7 +932,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1192,12 +1191,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/FolgerTech/i3-2020/Configuration.h b/config/examples/FolgerTech/i3-2020/Configuration.h index 597b3e9ec5f8..4960cd50b856 100644 --- a/config/examples/FolgerTech/i3-2020/Configuration.h +++ b/config/examples/FolgerTech/i3-2020/Configuration.h @@ -894,11 +894,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -910,10 +909,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 38 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -7 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -10.75 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 38, -7, -10.75 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 0 @@ -947,7 +946,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1205,12 +1204,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Formbot/Raptor/Configuration.h b/config/examples/Formbot/Raptor/Configuration.h index 9d2a83ae57e4..fad911678a9e 100644 --- a/config/examples/Formbot/Raptor/Configuration.h +++ b/config/examples/Formbot/Raptor/Configuration.h @@ -971,11 +971,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -987,10 +986,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -22 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -1.5 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -22, 0, -1.5 } #define MIN_PROBE_EDGE 10 // X and Y axis travel speed (mm/m) between probes @@ -1022,7 +1021,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1301,12 +1300,6 @@ #define GRID_MAX_POINTS_X 6 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - #define LEFT_PROBE_BED_POSITION 30 - #define RIGHT_PROBE_BED_POSITION 365 - #define FRONT_PROBE_BED_POSITION 30 - #define BACK_PROBE_BED_POSITION 365 - // The Z probe minimum outer margin (to validate G29 parameters). #define MIN_PROBE_EDGE 10 diff --git a/config/examples/Formbot/T_Rex_2+/Configuration.h b/config/examples/Formbot/T_Rex_2+/Configuration.h index 728f74b2e3c3..583f6d0336e9 100644 --- a/config/examples/Formbot/T_Rex_2+/Configuration.h +++ b/config/examples/Formbot/T_Rex_2+/Configuration.h @@ -917,11 +917,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -933,10 +932,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -3 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 31 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -1.25 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -3, 31, -1.25 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 0 @@ -970,7 +969,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1228,12 +1227,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Formbot/T_Rex_3/Configuration.h b/config/examples/Formbot/T_Rex_3/Configuration.h index 6a165246db0d..df29a67c067c 100644 --- a/config/examples/Formbot/T_Rex_3/Configuration.h +++ b/config/examples/Formbot/T_Rex_3/Configuration.h @@ -904,11 +904,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -920,10 +919,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -3 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 31 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -1.25 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -3, 31, -1.25 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 0 @@ -957,7 +956,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1224,12 +1223,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - MIN_PROBE_EDGE) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - MIN_PROBE_EDGE) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Geeetech/A10/Configuration.h b/config/examples/Geeetech/A10/Configuration.h index 5a706b6dd237..724fa5a6e53c 100644 --- a/config/examples/Geeetech/A10/Configuration.h +++ b/config/examples/Geeetech/A10/Configuration.h @@ -871,11 +871,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -887,10 +886,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -37 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -3.6 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -37, 0, -3.6 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -924,7 +923,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1184,12 +1183,6 @@ #define GRID_MAX_POINTS_X 5 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Geeetech/A10M/Configuration.h b/config/examples/Geeetech/A10M/Configuration.h index 9d927899db73..eb29b27d79f2 100644 --- a/config/examples/Geeetech/A10M/Configuration.h +++ b/config/examples/Geeetech/A10M/Configuration.h @@ -871,11 +871,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -887,10 +886,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -37 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -3.6 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -37, 0, -3.6 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -924,7 +923,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1184,12 +1183,6 @@ #define GRID_MAX_POINTS_X 5 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Geeetech/A20M/Configuration.h b/config/examples/Geeetech/A20M/Configuration.h index 3fe919c82708..7da452b2709c 100644 --- a/config/examples/Geeetech/A20M/Configuration.h +++ b/config/examples/Geeetech/A20M/Configuration.h @@ -871,11 +871,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -887,10 +886,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -37 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -3.6 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -37, 0, -3.6 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -924,7 +923,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1184,12 +1183,6 @@ #define GRID_MAX_POINTS_X 5 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Geeetech/GT2560/Configuration.h b/config/examples/Geeetech/GT2560/Configuration.h index 76dff419abf1..7126a9060a19 100644 --- a/config/examples/Geeetech/GT2560/Configuration.h +++ b/config/examples/Geeetech/GT2560/Configuration.h @@ -903,11 +903,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -919,10 +918,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -956,7 +955,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1214,12 +1213,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h b/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h index 289ade265e57..d2230d9c5c08 100644 --- a/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h +++ b/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 8 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Geeetech/MeCreator2/Configuration.h b/config/examples/Geeetech/MeCreator2/Configuration.h index 532c2a9fe1cb..0c35f3d069d8 100644 --- a/config/examples/Geeetech/MeCreator2/Configuration.h +++ b/config/examples/Geeetech/MeCreator2/Configuration.h @@ -895,11 +895,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -911,10 +910,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -948,7 +947,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1206,12 +1205,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h index fe2da423f29a..2ec9c32afec9 100644 --- a/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h @@ -909,11 +909,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -925,10 +924,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 4 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -44 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -1.4 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 4, -44, -1.4 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -962,7 +961,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1220,12 +1219,6 @@ #define GRID_MAX_POINTS_X 4 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION 10 - //#define RIGHT_PROBE_BED_POSITION (X_MAX_POS - X_PROBE_OFFSET_FROM_EXTRUDER - 14) - //#define FRONT_PROBE_BED_POSITION 15 - //#define BACK_PROBE_BED_POSITION (Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER - 25) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h index 319314339caf..fa131b25e1b2 100644 --- a/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h @@ -908,11 +908,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -924,10 +923,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -961,7 +960,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1219,12 +1218,6 @@ #define GRID_MAX_POINTS_X 4 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION 10 - //#define RIGHT_PROBE_BED_POSITION (X_MAX_POS - X_PROBE_OFFSET_FROM_EXTRUDER - 14) - //#define FRONT_PROBE_BED_POSITION 15 - //#define BACK_PROBE_BED_POSITION (Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER - 25) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h index 3a6c6cce2e35..702bccde089a 100644 --- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h index 96123fd322bb..da6501543d86 100644 --- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/HMS434/Configuration.h b/config/examples/HMS434/Configuration.h index c092b6d02887..c408fa8d656e 100644 --- a/config/examples/HMS434/Configuration.h +++ b/config/examples/HMS434/Configuration.h @@ -875,11 +875,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -891,10 +890,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -21 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 22 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -1.54 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -21, 22, -1.54 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 20 @@ -928,7 +927,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1186,12 +1185,6 @@ #define GRID_MAX_POINTS_X 5 #define GRID_MAX_POINTS_Y 3 - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Infitary/i3-M508/Configuration.h b/config/examples/Infitary/i3-M508/Configuration.h index 6ad0092b29e0..962688e6503a 100644 --- a/config/examples/Infitary/i3-M508/Configuration.h +++ b/config/examples/Infitary/i3-M508/Configuration.h @@ -892,11 +892,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -908,10 +907,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -945,7 +944,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1203,12 +1202,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/JGAurora/A1/Configuration.h b/config/examples/JGAurora/A1/Configuration.h index 6197b1951351..53cf30efb314 100644 --- a/config/examples/JGAurora/A1/Configuration.h +++ b/config/examples/JGAurora/A1/Configuration.h @@ -895,11 +895,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -911,10 +910,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -948,7 +947,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1206,12 +1205,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/JGAurora/A5/Configuration.h b/config/examples/JGAurora/A5/Configuration.h index 98b90e37b487..72150ab1da0c 100644 --- a/config/examples/JGAurora/A5/Configuration.h +++ b/config/examples/JGAurora/A5/Configuration.h @@ -900,11 +900,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -916,10 +915,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -953,7 +952,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1211,12 +1210,6 @@ #define GRID_MAX_POINTS_X 5 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION 15 - //#define RIGHT_PROBE_BED_POSITION 170 - //#define FRONT_PROBE_BED_POSITION 20 - //#define BACK_PROBE_BED_POSITION 170 - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/JGAurora/A5S/Configuration.h b/config/examples/JGAurora/A5S/Configuration.h index 6fea80ee97ee..9c231a7c7a0c 100644 --- a/config/examples/JGAurora/A5S/Configuration.h +++ b/config/examples/JGAurora/A5S/Configuration.h @@ -895,11 +895,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -911,10 +910,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -948,7 +947,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1206,12 +1205,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/MakerParts/Configuration.h b/config/examples/MakerParts/Configuration.h index f54f8eacf450..553882ae8da8 100644 --- a/config/examples/MakerParts/Configuration.h +++ b/config/examples/MakerParts/Configuration.h @@ -908,11 +908,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -924,10 +923,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -961,7 +960,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1219,12 +1218,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Malyan/M150/Configuration.h b/config/examples/Malyan/M150/Configuration.h index 01714089c4ce..25a37e560d3a 100644 --- a/config/examples/Malyan/M150/Configuration.h +++ b/config/examples/Malyan/M150/Configuration.h @@ -908,11 +908,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -924,14 +923,14 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ // Set for HoolyHoo's probe mount // http://www.thingiverse.com/thing:1960419 // Note: HoolyHoo mount is X=35, Y=-50. -//#define X_PROBE_OFFSET_FROM_EXTRUDER 35 // X offset: -left +right [of the nozzle] -//#define Y_PROBE_OFFSET_FROM_EXTRUDER -50 // Y offset: -front +behind [the nozzle] -//#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +//#define NOZZLE_TO_PROBE_OFFSET { 35, -50, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -965,7 +964,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1227,12 +1226,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION 50 - //#define RIGHT_PROBE_BED_POSITION 150 - //#define FRONT_PROBE_BED_POSITION 50 - //#define BACK_PROBE_BED_POSITION 150 - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Malyan/M200/Configuration.h b/config/examples/Malyan/M200/Configuration.h index 2c39159a1417..b5434599fdca 100644 --- a/config/examples/Malyan/M200/Configuration.h +++ b/config/examples/Malyan/M200/Configuration.h @@ -887,11 +887,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -903,10 +902,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -940,7 +939,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1198,12 +1197,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Micromake/C1/basic/Configuration.h b/config/examples/Micromake/C1/basic/Configuration.h index e7c9c1567210..4c26a75b7e36 100644 --- a/config/examples/Micromake/C1/basic/Configuration.h +++ b/config/examples/Micromake/C1/basic/Configuration.h @@ -892,11 +892,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -908,10 +907,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -945,7 +944,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1203,12 +1202,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Micromake/C1/enhanced/Configuration.h b/config/examples/Micromake/C1/enhanced/Configuration.h index 54464013b181..90dab802673e 100644 --- a/config/examples/Micromake/C1/enhanced/Configuration.h +++ b/config/examples/Micromake/C1/enhanced/Configuration.h @@ -892,11 +892,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -908,10 +907,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -945,7 +944,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1203,12 +1202,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Mks/Robin/Configuration.h b/config/examples/Mks/Robin/Configuration.h index 23ade8072112..542718989d1f 100644 --- a/config/examples/Mks/Robin/Configuration.h +++ b/config/examples/Mks/Robin/Configuration.h @@ -889,11 +889,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -905,10 +904,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -942,7 +941,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1200,12 +1199,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Mks/Sbase/Configuration.h b/config/examples/Mks/Sbase/Configuration.h index c39645d44a03..520369a6f85d 100644 --- a/config/examples/Mks/Sbase/Configuration.h +++ b/config/examples/Mks/Sbase/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 32 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 32, 5, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Printrbot/PrintrboardG2/Configuration.h b/config/examples/Printrbot/PrintrboardG2/Configuration.h index 168e6d64472b..834604a6332e 100644 --- a/config/examples/Printrbot/PrintrboardG2/Configuration.h +++ b/config/examples/Printrbot/PrintrboardG2/Configuration.h @@ -896,11 +896,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -912,10 +911,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -949,7 +948,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1207,12 +1206,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/RapideLite/RL200/Configuration.h b/config/examples/RapideLite/RL200/Configuration.h index 19e900f64526..cbf90f256209 100644 --- a/config/examples/RapideLite/RL200/Configuration.h +++ b/config/examples/RapideLite/RL200/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/RepRapPro/Huxley/Configuration.h b/config/examples/RepRapPro/Huxley/Configuration.h index 0c72d23a9926..2f8f932b07dd 100644 --- a/config/examples/RepRapPro/Huxley/Configuration.h +++ b/config/examples/RepRapPro/Huxley/Configuration.h @@ -928,11 +928,10 @@ Black rubber belt(MXL), 18 - tooth aluminium pulley : 87.489 step per mm (Huxley /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -944,10 +943,10 @@ Black rubber belt(MXL), 18 - tooth aluminium pulley : 87.489 step per mm (Huxley * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -981,7 +980,7 @@ Black rubber belt(MXL), 18 - tooth aluminium pulley : 87.489 step per mm (Huxley * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1248,12 +1247,6 @@ Black rubber belt(MXL), 18 - tooth aluminium pulley : 87.489 step per mm (Huxley #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/RepRapWorld/Megatronics/Configuration.h b/config/examples/RepRapWorld/Megatronics/Configuration.h index 428006ffcba8..04d1bae81bd2 100644 --- a/config/examples/RepRapWorld/Megatronics/Configuration.h +++ b/config/examples/RepRapWorld/Megatronics/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -25, -29, -12.35 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/RigidBot/Configuration.h b/config/examples/RigidBot/Configuration.h index f0a5889fa2bc..a160e8a07bf8 100644 --- a/config/examples/RigidBot/Configuration.h +++ b/config/examples/RigidBot/Configuration.h @@ -886,11 +886,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -902,10 +901,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -25, -29, -12.35 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -939,7 +938,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1197,12 +1196,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/SCARA/Configuration.h b/config/examples/SCARA/Configuration.h index 67eeb7677153..99341e6eec9f 100644 --- a/config/examples/SCARA/Configuration.h +++ b/config/examples/SCARA/Configuration.h @@ -897,11 +897,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -913,10 +912,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -25, -29, -12.35 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -950,7 +949,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1208,12 +1207,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration.h b/config/examples/STM32/Black_STM32F407VET6/Configuration.h index f2a82f9b7354..dba17c39b8f5 100644 --- a/config/examples/STM32/Black_STM32F407VET6/Configuration.h +++ b/config/examples/STM32/Black_STM32F407VET6/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/STM32/STM32F103R/Configuration.h b/config/examples/STM32/STM32F103R/Configuration.h index 61eb03301c6f..f36d9df7041b 100644 --- a/config/examples/STM32/STM32F103R/Configuration.h +++ b/config/examples/STM32/STM32F103R/Configuration.h @@ -890,11 +890,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -906,10 +905,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -25, -29, -12.35 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -943,7 +942,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1201,12 +1200,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/STM32/STM32F4/Configuration.h b/config/examples/STM32/STM32F4/Configuration.h index d365a1160b9a..99e7a1fc73d5 100644 --- a/config/examples/STM32/STM32F4/Configuration.h +++ b/config/examples/STM32/STM32F4/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/STM32/stm32f103ret6/Configuration.h b/config/examples/STM32/stm32f103ret6/Configuration.h index 3370e292bf0a..460d8b0977d2 100644 --- a/config/examples/STM32/stm32f103ret6/Configuration.h +++ b/config/examples/STM32/stm32f103ret6/Configuration.h @@ -890,11 +890,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -906,10 +905,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -25, -29, -12.35 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -943,7 +942,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1201,12 +1200,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Sanguinololu/Configuration.h b/config/examples/Sanguinololu/Configuration.h index c80e5883f20d..93a09df42a3d 100644 --- a/config/examples/Sanguinololu/Configuration.h +++ b/config/examples/Sanguinololu/Configuration.h @@ -919,11 +919,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -935,10 +934,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -972,7 +971,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1230,12 +1229,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Tevo/Michelangelo/Configuration.h b/config/examples/Tevo/Michelangelo/Configuration.h index bae103e3b4df..344d0d9670fc 100644 --- a/config/examples/Tevo/Michelangelo/Configuration.h +++ b/config/examples/Tevo/Michelangelo/Configuration.h @@ -893,11 +893,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -909,10 +908,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -946,7 +945,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1204,12 +1203,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Tevo/Tarantula Pro/Configuration.h b/config/examples/Tevo/Tarantula Pro/Configuration.h index 42dc8c273285..4ead70ff16c4 100644 --- a/config/examples/Tevo/Tarantula Pro/Configuration.h +++ b/config/examples/Tevo/Tarantula Pro/Configuration.h @@ -893,11 +893,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -909,10 +908,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 18 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -1.5 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, 18, -1.5 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -939,7 +938,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1197,12 +1196,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration.h index de30bf0f2316..c4a695522426 100644 --- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration.h +++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration.h @@ -893,11 +893,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -909,10 +908,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -45 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -12 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -2.77 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -45, -12, -2.77 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -946,7 +945,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1204,12 +1203,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration.h b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration.h index 95c502f9462c..124e66d93701 100644 --- a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration.h +++ b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration.h @@ -893,11 +893,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -909,10 +908,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -45 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -12 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -2.77 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -45, -12, -2.77 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -946,7 +945,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1204,12 +1203,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/TheBorg/Configuration.h b/config/examples/TheBorg/Configuration.h index 87fc446338fe..7390f93829b1 100644 --- a/config/examples/TheBorg/Configuration.h +++ b/config/examples/TheBorg/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 32 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 5 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -1.3 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 32, 5, -1.3 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/TinyBoy2/Configuration.h b/config/examples/TinyBoy2/Configuration.h index feb83f42a109..e2439f045cbe 100644 --- a/config/examples/TinyBoy2/Configuration.h +++ b/config/examples/TinyBoy2/Configuration.h @@ -939,11 +939,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -955,10 +954,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 34 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 15 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 34, 15, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -992,7 +991,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1255,12 +1254,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Tronxy/X1/Configuration.h b/config/examples/Tronxy/X1/Configuration.h index 8ea89c2ae6a8..d1be9b3b496a 100644 --- a/config/examples/Tronxy/X1/Configuration.h +++ b/config/examples/Tronxy/X1/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Tronxy/X3A/Configuration.h b/config/examples/Tronxy/X3A/Configuration.h index 95928ea1eda9..b54cf6906955 100644 --- a/config/examples/Tronxy/X3A/Configuration.h +++ b/config/examples/Tronxy/X3A/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -32 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -0.5 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -32, -10, -0.5 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 50 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1203,12 +1202,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Tronxy/X5S-2E/Configuration.h b/config/examples/Tronxy/X5S-2E/Configuration.h index dc791fff5062..cc51f465eb8b 100644 --- a/config/examples/Tronxy/X5S-2E/Configuration.h +++ b/config/examples/Tronxy/X5S-2E/Configuration.h @@ -909,11 +909,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -925,10 +924,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -962,7 +961,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1220,12 +1219,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Tronxy/X5S/Configuration.h b/config/examples/Tronxy/X5S/Configuration.h index 86436a79dc6b..65c9ec39497d 100644 --- a/config/examples/Tronxy/X5S/Configuration.h +++ b/config/examples/Tronxy/X5S/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -45 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -55 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -45, -55, -0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION 15 - //#define RIGHT_PROBE_BED_POSITION 270 - //#define FRONT_PROBE_BED_POSITION 20 - //#define BACK_PROBE_BED_POSITION 260 - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Tronxy/XY100/Configuration.h b/config/examples/Tronxy/XY100/Configuration.h index 9617b5607487..dd36e80209f3 100644 --- a/config/examples/Tronxy/XY100/Configuration.h +++ b/config/examples/Tronxy/XY100/Configuration.h @@ -899,11 +899,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -915,10 +914,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -952,7 +951,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1210,12 +1209,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/UltiMachine/Archim1/Configuration.h b/config/examples/UltiMachine/Archim1/Configuration.h index eb21755fad61..89ca880455e3 100644 --- a/config/examples/UltiMachine/Archim1/Configuration.h +++ b/config/examples/UltiMachine/Archim1/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/UltiMachine/Archim2/Configuration.h b/config/examples/UltiMachine/Archim2/Configuration.h index 6a4fcf368099..b56508e2f073 100644 --- a/config/examples/UltiMachine/Archim2/Configuration.h +++ b/config/examples/UltiMachine/Archim2/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/VORONDesign/Configuration.h b/config/examples/VORONDesign/Configuration.h index 70baf6e1968f..1532acddd872 100644 --- a/config/examples/VORONDesign/Configuration.h +++ b/config/examples/VORONDesign/Configuration.h @@ -897,11 +897,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -913,10 +912,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -950,7 +949,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1208,12 +1207,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - #define LEFT_PROBE_BED_POSITION 15 - #define RIGHT_PROBE_BED_POSITION 200 - #define FRONT_PROBE_BED_POSITION 15 - #define BACK_PROBE_BED_POSITION 200 - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Velleman/K8200/Configuration.h b/config/examples/Velleman/K8200/Configuration.h index eb8416a58263..5fb409197ed0 100644 --- a/config/examples/Velleman/K8200/Configuration.h +++ b/config/examples/Velleman/K8200/Configuration.h @@ -917,11 +917,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -933,10 +932,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -970,7 +969,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1229,12 +1228,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Velleman/K8400/Configuration.h b/config/examples/Velleman/K8400/Configuration.h index 3bc0bc38aa93..14195d73ac8c 100644 --- a/config/examples/Velleman/K8400/Configuration.h +++ b/config/examples/Velleman/K8400/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Velleman/K8400/Dual-head/Configuration.h b/config/examples/Velleman/K8400/Dual-head/Configuration.h index 302a11df8f85..2c4355a93905 100644 --- a/config/examples/Velleman/K8400/Dual-head/Configuration.h +++ b/config/examples/Velleman/K8400/Dual-head/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/WASP/PowerWASP/Configuration.h b/config/examples/WASP/PowerWASP/Configuration.h index 77b6d337d133..4ac36552f963 100644 --- a/config/examples/WASP/PowerWASP/Configuration.h +++ b/config/examples/WASP/PowerWASP/Configuration.h @@ -907,11 +907,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -923,10 +922,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -960,7 +959,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1218,12 +1217,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Wanhao/Duplicator 6/Configuration.h b/config/examples/Wanhao/Duplicator 6/Configuration.h index 9c49f7737cbf..704351a45af0 100644 --- a/config/examples/Wanhao/Duplicator 6/Configuration.h +++ b/config/examples/Wanhao/Duplicator 6/Configuration.h @@ -898,11 +898,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -914,10 +913,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -951,7 +950,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1209,12 +1208,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h index 9bf523593ed8..37f88b457bda 100755 --- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h +++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/adafruit/ST7565/Configuration.h b/config/examples/adafruit/ST7565/Configuration.h index 64561330a32b..25174cf70076 100644 --- a/config/examples/adafruit/ST7565/Configuration.h +++ b/config/examples/adafruit/ST7565/Configuration.h @@ -888,11 +888,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -904,10 +903,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -25, -29, -12.35 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -941,7 +940,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1199,12 +1198,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/delta/Anycubic/Kossel/Configuration.h b/config/examples/delta/Anycubic/Kossel/Configuration.h index 561faf865b9b..c18b06541560 100644 --- a/config/examples/delta/Anycubic/Kossel/Configuration.h +++ b/config/examples/delta/Anycubic/Kossel/Configuration.h @@ -1053,11 +1053,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -1069,16 +1068,15 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] - #if ANYCUBIC_PROBE_VERSION == 2 - #define Z_PROBE_OFFSET_FROM_EXTRUDER -16.8 // Z offset: -below +above [the nozzle] + #define NOZZLE_TO_PROBE_OFFSET { 0, 0, -16.8 } #elif ANYCUBIC_PROBE_VERSION == 1 - #define Z_PROBE_OFFSET_FROM_EXTRUDER -19.0 // Z offset: -below +above [the nozzle] + #define NOZZLE_TO_PROBE_OFFSET { 0, 0, -19.0 } #else - #define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] + #define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0 } #endif // Certain types of probes need to stay away from edges @@ -1113,7 +1111,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1374,12 +1372,6 @@ #define GRID_MAX_POINTS_X 9 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - #define LEFT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - #define RIGHT_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - #define FRONT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - #define BACK_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/delta/Dreammaker/Overlord/Configuration.h b/config/examples/delta/Dreammaker/Overlord/Configuration.h index 6f4f9a104910..f4cdcc0d2319 100644 --- a/config/examples/delta/Dreammaker/Overlord/Configuration.h +++ b/config/examples/delta/Dreammaker/Overlord/Configuration.h @@ -998,11 +998,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -1014,10 +1013,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0.65 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0.65 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 5 @@ -1051,7 +1050,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1309,12 +1308,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define RIGHT_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - //#define FRONT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define BACK_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration.h b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration.h index 958f15d38ea7..bb66e3a0249e 100644 --- a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration.h +++ b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration.h @@ -1010,11 +1010,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -1026,10 +1025,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0.65 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0.65 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 5 @@ -1063,7 +1062,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1321,12 +1320,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - #define LEFT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - #define RIGHT_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - #define FRONT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - #define BACK_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration.h index 8d215b8c5cff..36ac9143bb6f 100644 --- a/config/examples/delta/FLSUN/auto_calibrate/Configuration.h +++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration.h @@ -1002,11 +1002,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -1018,10 +1017,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0.10 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0.10 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 20 @@ -1055,7 +1054,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1314,12 +1313,6 @@ #define GRID_MAX_POINTS_X 7 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define RIGHT_PROBE_BED_POSITION (DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define BACK_PROBE_BED_POSITION (DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/delta/FLSUN/kossel/Configuration.h b/config/examples/delta/FLSUN/kossel/Configuration.h index bf1e110bdc15..bdfabc0068e5 100644 --- a/config/examples/delta/FLSUN/kossel/Configuration.h +++ b/config/examples/delta/FLSUN/kossel/Configuration.h @@ -1001,11 +1001,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -1017,10 +1016,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0.10 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0.10 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 20 @@ -1054,7 +1053,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1313,12 +1312,6 @@ #define GRID_MAX_POINTS_X 7 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define RIGHT_PROBE_BED_POSITION (DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define BACK_PROBE_BED_POSITION (DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration.h b/config/examples/delta/FLSUN/kossel_mini/Configuration.h index 0f8382381994..3c379b4c71d4 100644 --- a/config/examples/delta/FLSUN/kossel_mini/Configuration.h +++ b/config/examples/delta/FLSUN/kossel_mini/Configuration.h @@ -1001,11 +1001,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -1017,10 +1016,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0.25 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0.25 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -1054,7 +1053,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1313,12 +1312,6 @@ #define GRID_MAX_POINTS_X 9 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define RIGHT_PROBE_BED_POSITION (DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define BACK_PROBE_BED_POSITION (DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration.h b/config/examples/delta/Geeetech/Rostock 301/Configuration.h index 701878728cbb..9308fde289dc 100644 --- a/config/examples/delta/Geeetech/Rostock 301/Configuration.h +++ b/config/examples/delta/Geeetech/Rostock 301/Configuration.h @@ -989,11 +989,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -1005,10 +1004,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -3.5 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, -10, -3.5 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -1042,7 +1041,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1301,12 +1300,6 @@ #define GRID_MAX_POINTS_X 9 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define RIGHT_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - //#define FRONT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define BACK_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/delta/Hatchbox_Alpha/Configuration.h b/config/examples/delta/Hatchbox_Alpha/Configuration.h index 6312b27b4d3f..bc3f024b3992 100644 --- a/config/examples/delta/Hatchbox_Alpha/Configuration.h +++ b/config/examples/delta/Hatchbox_Alpha/Configuration.h @@ -1004,11 +1004,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -1020,10 +1019,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -1057,7 +1056,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1316,12 +1315,6 @@ #define GRID_MAX_POINTS_X 9 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define RIGHT_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - //#define FRONT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define BACK_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/delta/MKS/SBASE/Configuration.h b/config/examples/delta/MKS/SBASE/Configuration.h index aaddf0f9ee07..8724606a0830 100644 --- a/config/examples/delta/MKS/SBASE/Configuration.h +++ b/config/examples/delta/MKS/SBASE/Configuration.h @@ -989,11 +989,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -1005,10 +1004,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -3.5 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, -10, -3.5 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -1042,7 +1041,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1301,12 +1300,6 @@ #define GRID_MAX_POINTS_X 9 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define RIGHT_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - //#define FRONT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define BACK_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/delta/Tevo Little Monster/Configuration.h b/config/examples/delta/Tevo Little Monster/Configuration.h index 2ae1ee35b891..9a6aa048bcf2 100644 --- a/config/examples/delta/Tevo Little Monster/Configuration.h +++ b/config/examples/delta/Tevo Little Monster/Configuration.h @@ -993,11 +993,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -1009,10 +1008,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 20 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -1.10 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, 20, -1.10 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 20 @@ -1046,7 +1045,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1305,12 +1304,6 @@ #define GRID_MAX_POINTS_X 7 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define RIGHT_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - //#define FRONT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define BACK_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/delta/generic/Configuration.h b/config/examples/delta/generic/Configuration.h index 322557c1badf..b5656b333ad4 100644 --- a/config/examples/delta/generic/Configuration.h +++ b/config/examples/delta/generic/Configuration.h @@ -989,11 +989,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -1005,10 +1004,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -3.5 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, -10, -3.5 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -1042,7 +1041,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1301,12 +1300,6 @@ #define GRID_MAX_POINTS_X 9 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define RIGHT_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - //#define FRONT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define BACK_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/delta/kossel_mini/Configuration.h b/config/examples/delta/kossel_mini/Configuration.h index 5ddb48e98aa9..dfaf41259c7f 100644 --- a/config/examples/delta/kossel_mini/Configuration.h +++ b/config/examples/delta/kossel_mini/Configuration.h @@ -991,11 +991,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -1007,10 +1006,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -3.5 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 0, -10, -3.5 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -1044,7 +1043,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1303,12 +1302,6 @@ #define GRID_MAX_POINTS_X 9 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define RIGHT_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - //#define FRONT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define BACK_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/delta/kossel_pro/Configuration.h b/config/examples/delta/kossel_pro/Configuration.h index 179b13f63d0f..1423db2adf28 100644 --- a/config/examples/delta/kossel_pro/Configuration.h +++ b/config/examples/delta/kossel_pro/Configuration.h @@ -986,11 +986,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -1002,14 +1001,15 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -23 // KosselPro actual: -22.919 -#define Y_PROBE_OFFSET_FROM_EXTRUDER -6 // KosselPro actual: -6.304 +#define NOZZLE_TO_PROBE_OFFSET { -23, -6, -17.25 } // KosselPro actual: -22.919, -6.304, -17.45 /** * Kossel Pro note: The correct value is likely -17.45 but I'd rather err on the side of * not giving someone a head crash. Use something like G29 Z-0.2 to adjust as needed. */ -#define Z_PROBE_OFFSET_FROM_EXTRUDER -17.25 // Increase this if the first layer is too thin (remember: it's a negative number so increase means closer to zero). + // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -1042,7 +1042,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1302,12 +1302,6 @@ #define GRID_MAX_POINTS_X 7 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define RIGHT_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - //#define FRONT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define BACK_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/delta/kossel_xl/Configuration.h b/config/examples/delta/kossel_xl/Configuration.h index 3c8fb421dea7..4d19fdc90a8f 100644 --- a/config/examples/delta/kossel_xl/Configuration.h +++ b/config/examples/delta/kossel_xl/Configuration.h @@ -992,11 +992,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -1008,10 +1007,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 0.0 // Z probe to nozzle X offset: -left +right -#define Y_PROBE_OFFSET_FROM_EXTRUDER 0.0 // Z probe to nozzle Y offset: -front +behind -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0.3 // Z probe to nozzle Z offset: -below (always!) +#define NOZZLE_TO_PROBE_OFFSET { 0.0, 0.0, 0.3 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -1045,7 +1044,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1304,12 +1303,6 @@ #define GRID_MAX_POINTS_X 5 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define RIGHT_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - //#define FRONT_PROBE_BED_POSITION -(DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - //#define BACK_PROBE_BED_POSITION DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/gCreate/gMax1.5+/Configuration.h b/config/examples/gCreate/gMax1.5+/Configuration.h index d2075575a8e0..d5278a6db073 100644 --- a/config/examples/gCreate/gMax1.5+/Configuration.h +++ b/config/examples/gCreate/gMax1.5+/Configuration.h @@ -901,11 +901,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -917,10 +916,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -17 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -0.25 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -17, -10, -0.25 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 45 @@ -954,7 +953,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1213,12 +1212,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/makibox/Configuration.h b/config/examples/makibox/Configuration.h index 2ba92763349e..3fe46fc03cef 100644 --- a/config/examples/makibox/Configuration.h +++ b/config/examples/makibox/Configuration.h @@ -852,7 +852,7 @@ /** * The BLTouch probe uses a Hall effect sensor and emulates a servo. */ -//#define BLTOUCH +#define BLTOUCH /** * Touch-MI Probe by hotends.fr @@ -891,11 +891,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -907,10 +906,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -25, -29, -12.35 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -944,7 +943,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1202,12 +1201,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/tvrrug/Round2/Configuration.h b/config/examples/tvrrug/Round2/Configuration.h index 51ec8f4982bd..b565511f3d59 100644 --- a/config/examples/tvrrug/Round2/Configuration.h +++ b/config/examples/tvrrug/Round2/Configuration.h @@ -883,11 +883,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -899,10 +898,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER -25 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER -29 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER -12.35 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { -25, -29, -12.35 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -936,7 +935,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1194,12 +1193,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST diff --git a/config/examples/wt150/Configuration.h b/config/examples/wt150/Configuration.h index 7f63ff647719..ff6bba598e06 100644 --- a/config/examples/wt150/Configuration.h +++ b/config/examples/wt150/Configuration.h @@ -893,11 +893,10 @@ /** * Z Probe to nozzle (X,Y) offset, relative to (0, 0). - * X and Y offsets must be integers. * * In the following example the X and Y offsets are both positive: - * #define X_PROBE_OFFSET_FROM_EXTRUDER 10 - * #define Y_PROBE_OFFSET_FROM_EXTRUDER 10 + * + * #define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } * * +-- BACK ---+ * | | @@ -909,10 +908,10 @@ * | | * O-- FRONT --+ * (0,0) + * + * Specify a Probe position as { X, Y, Z } */ -#define X_PROBE_OFFSET_FROM_EXTRUDER 10 // X offset: -left +right [of the nozzle] -#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 // Y offset: -front +behind [the nozzle] -#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle] +#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // Certain types of probes need to stay away from edges #define MIN_PROBE_EDGE 10 @@ -946,7 +945,7 @@ * * Use these settings to specify the distance (mm) to raise the probe (or * lower the bed). The values set here apply over and above any (negative) - * probe Z Offset set with Z_PROBE_OFFSET_FROM_EXTRUDER, M851, or the LCD. + * probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD. * Only integer values >= 1 are valid here. * * Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle. @@ -1204,12 +1203,6 @@ #define GRID_MAX_POINTS_X 3 #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X - // Set the boundaries for probing (where the probe can reach). - //#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - (MIN_PROBE_EDGE)) - //#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE - //#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - (MIN_PROBE_EDGE)) - // Probe along the Y axis, advancing X after each column //#define PROBE_Y_FIRST From 3819f7994539d962c6970df1f4251bf78bd451fc Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 24 Sep 2019 22:30:13 -0500 Subject: [PATCH 035/120] Fix pid_output declaration --- Marlin/src/module/temperature.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 3147477357fa..cda946dc989d 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -821,7 +821,6 @@ void Temperature::min_temp_error(const heater_ind_t heater) { #endif E_UNUSED(); const uint8_t ee = HOTEND_INDEX; - float pid_output; #if ENABLED(PIDTEMP) #if DISABLED(PID_OPENLOOP) static hotend_pid_t work_pid[HOTENDS]; @@ -830,6 +829,8 @@ void Temperature::min_temp_error(const heater_ind_t heater) { static bool pid_reset[HOTENDS] = { false }; const float pid_error = temp_hotend[ee].target - temp_hotend[ee].celsius; + float pid_output; + if (temp_hotend[ee].target == 0 || pid_error < -(PID_FUNCTIONAL_RANGE) #if HEATER_IDLE_HANDLER @@ -914,7 +915,7 @@ void Temperature::min_temp_error(const heater_ind_t heater) { #else #define _TIMED_OUT_TEST false #endif - pid_output = (!_TIMED_OUT_TEST && temp_hotend[ee].celsius < temp_hotend[ee].target) ? BANG_MAX : 0; + const float pid_output = (!_TIMED_OUT_TEST && temp_hotend[ee].celsius < temp_hotend[ee].target) ? BANG_MAX : 0; #undef _TIMED_OUT_TEST #endif From 4e8d9fe59b53fc5937d907fcf6d79b58233ab6ef Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 24 Sep 2019 23:35:49 -0500 Subject: [PATCH 036/120] zprobe_offset => probe_offset --- Marlin/src/core/utility.cpp | 18 ++++++++--------- Marlin/src/feature/bedlevel/ubl/ubl.cpp | 4 ++-- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 18 ++++++++--------- Marlin/src/gcode/bedlevel/G42.cpp | 4 ++-- Marlin/src/gcode/bedlevel/abl/G29.cpp | 4 ++-- Marlin/src/gcode/calibrate/G28.cpp | 4 ++-- Marlin/src/gcode/calibrate/M48.cpp | 8 ++++---- Marlin/src/gcode/motion/M290.cpp | 4 ++-- Marlin/src/gcode/probe/G30.cpp | 4 ++-- Marlin/src/gcode/probe/M851.cpp | 14 ++++++------- Marlin/src/lcd/extensible_ui/ui_api.cpp | 6 +++--- Marlin/src/lcd/menu/menu.cpp | 8 ++++---- Marlin/src/lcd/menu/menu_bed_leveling.cpp | 2 +- Marlin/src/lcd/menu/menu_configuration.cpp | 2 +- Marlin/src/module/configuration_store.cpp | 18 ++++++++--------- Marlin/src/module/delta.cpp | 2 +- Marlin/src/module/motion.cpp | 8 ++++---- Marlin/src/module/motion.h | 4 ++-- Marlin/src/module/probe.cpp | 22 ++++++++++----------- Marlin/src/module/probe.h | 4 ++-- 20 files changed, 79 insertions(+), 79 deletions(-) diff --git a/Marlin/src/core/utility.cpp b/Marlin/src/core/utility.cpp index 2724cdebf939..5ebd84afd138 100644 --- a/Marlin/src/core/utility.cpp +++ b/Marlin/src/core/utility.cpp @@ -79,36 +79,36 @@ void safe_delay(millis_t ms) { ); #if HAS_BED_PROBE - SERIAL_ECHOPAIR("Probe Offset X:", zprobe_offset[X_AXIS], " Y:", zprobe_offset[Y_AXIS], " Z:", zprobe_offset[Z_AXIS]); - if (zprobe_offset[X_AXIS] > 0) + SERIAL_ECHOPAIR("Probe Offset X:", probe_offset[X_AXIS], " Y:", probe_offset[Y_AXIS], " Z:", probe_offset[Z_AXIS]); + if (probe_offset[X_AXIS] > 0) SERIAL_ECHOPGM(" (Right"); - else if (zprobe_offset[X_AXIS] < 0) + else if (probe_offset[X_AXIS] < 0) SERIAL_ECHOPGM(" (Left"); - else if (zprobe_offset[Y_AXIS] != 0) + else if (probe_offset[Y_AXIS] != 0) SERIAL_ECHOPGM(" (Middle"); else SERIAL_ECHOPGM(" (Aligned With"); - if (zprobe_offset[Y_AXIS] > 0) { + if (probe_offset[Y_AXIS] > 0) { #if IS_SCARA SERIAL_ECHOPGM("-Distal"); #else SERIAL_ECHOPGM("-Back"); #endif } - else if (zprobe_offset[Y_AXIS] < 0) { + else if (probe_offset[Y_AXIS] < 0) { #if IS_SCARA SERIAL_ECHOPGM("-Proximal"); #else SERIAL_ECHOPGM("-Front"); #endif } - else if (zprobe_offset[X_AXIS] != 0) + else if (probe_offset[X_AXIS] != 0) SERIAL_ECHOPGM("-Center"); - if (zprobe_offset[Z_AXIS] < 0) + if (probe_offset[Z_AXIS] < 0) SERIAL_ECHOPGM(" & Below"); - else if (zprobe_offset[Z_AXIS] > 0) + else if (probe_offset[Z_AXIS] > 0) SERIAL_ECHOPGM(" & Above"); else SERIAL_ECHOPGM(" & Same Z as"); diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.cpp b/Marlin/src/feature/bedlevel/ubl/ubl.cpp index edd2fc3694c6..418f9df6f9f5 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl.cpp @@ -180,8 +180,8 @@ // Add XY probe offset from extruder because probe_pt() subtracts them when // moving to the xy position to be measured. This ensures better agreement between // the current Z position after G28 and the mesh values. - const float current_xi = find_closest_x_index(current_position[X_AXIS] + zprobe_offset[X_AXIS]), - current_yi = find_closest_y_index(current_position[Y_AXIS] + zprobe_offset[Y_AXIS]); + const float current_xi = find_closest_x_index(current_position[X_AXIS] + probe_offset[X_AXIS]), + current_yi = find_closest_y_index(current_position[Y_AXIS] + probe_offset[Y_AXIS]); if (!lcd) SERIAL_EOL(); for (int8_t j = GRID_MAX_POINTS_Y - 1; j >= 0; j--) { diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index e588515f6289..253c9159adb7 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -453,7 +453,7 @@ SERIAL_ECHO(g29_y_pos); SERIAL_ECHOLNPGM(").\n"); } - probe_entire_mesh(g29_x_pos + zprobe_offset[X_AXIS], g29_y_pos + zprobe_offset[Y_AXIS], + probe_entire_mesh(g29_x_pos + probe_offset[X_AXIS], g29_y_pos + probe_offset[Y_AXIS], parser.seen('T'), parser.seen('E'), parser.seen('U')); report_current_position(); @@ -482,8 +482,8 @@ g29_x_pos = X_HOME_POS; g29_y_pos = Y_HOME_POS; #else // cartesian - g29_x_pos = zprobe_offset[X_AXIS] > 0 ? X_BED_SIZE : 0; - g29_y_pos = zprobe_offset[Y_AXIS] < 0 ? Y_BED_SIZE : 0; + g29_x_pos = probe_offset[X_AXIS] > 0 ? X_BED_SIZE : 0; + g29_y_pos = probe_offset[Y_AXIS] < 0 ? Y_BED_SIZE : 0; #endif } @@ -800,8 +800,8 @@ restore_ubl_active_state_and_leave(); do_blocking_move_to_xy( - constrain(rx - zprobe_offset[X_AXIS], MESH_MIN_X, MESH_MAX_X), - constrain(ry - zprobe_offset[Y_AXIS], MESH_MIN_Y, MESH_MAX_Y) + constrain(rx - probe_offset[X_AXIS], MESH_MIN_X, MESH_MAX_X), + constrain(ry - probe_offset[Y_AXIS], MESH_MIN_Y, MESH_MAX_Y) ); } @@ -1281,8 +1281,8 @@ out_mesh.distance = -99999.9f; // Get our reference position. Either the nozzle or probe location. - const float px = rx + (probe_as_reference == USE_PROBE_AS_REFERENCE ? zprobe_offset[X_AXIS] : 0), - py = ry + (probe_as_reference == USE_PROBE_AS_REFERENCE ? zprobe_offset[Y_AXIS] : 0); + const float px = rx + (probe_as_reference == USE_PROBE_AS_REFERENCE ? probe_offset[X_AXIS] : 0), + py = ry + (probe_as_reference == USE_PROBE_AS_REFERENCE ? probe_offset[Y_AXIS] : 0); float best_so_far = 99999.99f; @@ -1500,7 +1500,7 @@ DEBUG_ECHOPAIR_F(" correction: ", get_z_correction(rx, ry), 7); } - measured_z -= get_z_correction(rx, ry) /* + zprobe_offset[Z_AXIS] */ ; + measured_z -= get_z_correction(rx, ry) /* + probe_offset[Z_AXIS] */ ; if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR_F(" final >>>---> ", measured_z, 7); @@ -1712,7 +1712,7 @@ adjust_mesh_to_mean(g29_c_flag, g29_constant); #if HAS_BED_PROBE - SERIAL_ECHOLNPAIR_F("Probe Offset M851 Z", zprobe_offset[Z_AXIS], 7); + SERIAL_ECHOLNPAIR_F("Probe Offset M851 Z", probe_offset[Z_AXIS], 7); #endif SERIAL_ECHOLNPAIR("MESH_MIN_X " STRINGIFY(MESH_MIN_X) "=", MESH_MIN_X); serial_delay(50); diff --git a/Marlin/src/gcode/bedlevel/G42.cpp b/Marlin/src/gcode/bedlevel/G42.cpp index f5336cdcb145..7f0ed12a2565 100644 --- a/Marlin/src/gcode/bedlevel/G42.cpp +++ b/Marlin/src/gcode/bedlevel/G42.cpp @@ -49,8 +49,8 @@ void GcodeSuite::G42() { if (hasJ) destination[Y_AXIS] = _GET_MESH_Y(iy); #if HAS_BED_PROBE if (parser.boolval('P')) { - if (hasI) destination[X_AXIS] -= zprobe_offset[X_AXIS]; - if (hasJ) destination[Y_AXIS] -= zprobe_offset[Y_AXIS]; + if (hasI) destination[X_AXIS] -= probe_offset[X_AXIS]; + if (hasJ) destination[Y_AXIS] -= probe_offset[Y_AXIS]; } #endif diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 372ba5b372ae..e874d374093d 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -947,8 +947,8 @@ G29_TYPE GcodeSuite::G29() { planner.leveling_active = false; // Use the last measured distance to the bed, if possible - if ( NEAR(current_position[X_AXIS], xProbe - zprobe_offset[X_AXIS]) - && NEAR(current_position[Y_AXIS], yProbe - zprobe_offset[Y_AXIS]) + if ( NEAR(current_position[X_AXIS], xProbe - probe_offset[X_AXIS]) + && NEAR(current_position[Y_AXIS], yProbe - probe_offset[Y_AXIS]) ) { const float simple_z = current_position[Z_AXIS] - measured_z; if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Probed Z", simple_z, " Matrix Z", converted[Z_AXIS], " Discrepancy ", simple_z - converted[Z_AXIS]); diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index a9b1c25201e9..1e78a49b4549 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -136,8 +136,8 @@ destination[Z_AXIS] = current_position[Z_AXIS]; // Z is already at the right height #if HOMING_Z_WITH_PROBE - destination[X_AXIS] -= zprobe_offset[X_AXIS]; - destination[Y_AXIS] -= zprobe_offset[Y_AXIS]; + destination[X_AXIS] -= probe_offset[X_AXIS]; + destination[Y_AXIS] -= probe_offset[Y_AXIS]; #endif if (position_is_reachable(destination[X_AXIS], destination[Y_AXIS])) { diff --git a/Marlin/src/gcode/calibrate/M48.cpp b/Marlin/src/gcode/calibrate/M48.cpp index e9bdd2abeb9a..49fc9982dcd9 100644 --- a/Marlin/src/gcode/calibrate/M48.cpp +++ b/Marlin/src/gcode/calibrate/M48.cpp @@ -77,8 +77,8 @@ void GcodeSuite::M48() { float X_current = current_position[X_AXIS], Y_current = current_position[Y_AXIS]; - const float X_probe_location = parser.linearval('X', X_current + zprobe_offset[X_AXIS]), - Y_probe_location = parser.linearval('Y', Y_current + zprobe_offset[Y_AXIS]); + const float X_probe_location = parser.linearval('X', X_current + probe_offset[X_AXIS]), + Y_probe_location = parser.linearval('Y', Y_current + probe_offset[Y_AXIS]); if (!position_is_reachable_by_probe(X_probe_location, Y_probe_location)) { SERIAL_ECHOLNPGM("? (X,Y) out of bounds."); @@ -165,8 +165,8 @@ void GcodeSuite::M48() { while (angle < 0.0) angle += 360.0; // outside of this range. It looks like they behave correctly with // numbers outside of the range, but just to be safe we clamp them. - X_current = X_probe_location - zprobe_offset[X_AXIS] + cos(RADIANS(angle)) * radius; - Y_current = Y_probe_location - zprobe_offset[Y_AXIS] + sin(RADIANS(angle)) * radius; + X_current = X_probe_location - probe_offset[X_AXIS] + cos(RADIANS(angle)) * radius; + Y_current = Y_probe_location - probe_offset[Y_AXIS] + sin(RADIANS(angle)) * radius; #if DISABLED(DELTA) LIMIT(X_current, X_MIN_POS, X_MAX_POS); diff --git a/Marlin/src/gcode/motion/M290.cpp b/Marlin/src/gcode/motion/M290.cpp index 7a1082f795ff..8b89ee194bdb 100644 --- a/Marlin/src/gcode/motion/M290.cpp +++ b/Marlin/src/gcode/motion/M290.cpp @@ -42,9 +42,9 @@ && active_extruder == 0 #endif ) { - zprobe_offset[Z_AXIS] += offs; + probe_offset[Z_AXIS] += offs; SERIAL_ECHO_START(); - SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET MSG_Z ": ", zprobe_offset[Z_AXIS]); + SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET MSG_Z ": ", probe_offset[Z_AXIS]); } #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) else { diff --git a/Marlin/src/gcode/probe/G30.cpp b/Marlin/src/gcode/probe/G30.cpp index 26bb3876dbfc..50d0ea6ae303 100644 --- a/Marlin/src/gcode/probe/G30.cpp +++ b/Marlin/src/gcode/probe/G30.cpp @@ -39,8 +39,8 @@ * E Engage the probe for each probe (default 1) */ void GcodeSuite::G30() { - const float xpos = parser.linearval('X', current_position[X_AXIS] + zprobe_offset[X_AXIS]), - ypos = parser.linearval('Y', current_position[Y_AXIS] + zprobe_offset[Y_AXIS]); + const float xpos = parser.linearval('X', current_position[X_AXIS] + probe_offset[X_AXIS]), + ypos = parser.linearval('Y', current_position[Y_AXIS] + probe_offset[Y_AXIS]); if (!position_is_reachable_by_probe(xpos, ypos)) return; diff --git a/Marlin/src/gcode/probe/M851.cpp b/Marlin/src/gcode/probe/M851.cpp index 326f327ff716..f750020f36d7 100644 --- a/Marlin/src/gcode/probe/M851.cpp +++ b/Marlin/src/gcode/probe/M851.cpp @@ -36,17 +36,17 @@ void GcodeSuite::M851() { // Show usage with no parameters if (!parser.seen("XYZ")) { SERIAL_ECHO_START(); - SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET " X", zprobe_offset[X_AXIS], - " Y", zprobe_offset[Y_AXIS], - " Z", zprobe_offset[Z_AXIS]); + SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET " X", probe_offset[X_AXIS], + " Y", probe_offset[Y_AXIS], + " Z", probe_offset[Z_AXIS]); return; } // Get the modified offsets const float offs[] = { - parser.floatval('X', zprobe_offset[X_AXIS]), - parser.floatval('Y', zprobe_offset[Y_AXIS]), - parser.floatval('Z', zprobe_offset[Z_AXIS]) + parser.floatval('X', probe_offset[X_AXIS]), + parser.floatval('Y', probe_offset[Y_AXIS]), + parser.floatval('Z', probe_offset[Z_AXIS]) }; // Error-check @@ -64,7 +64,7 @@ void GcodeSuite::M851() { } // Save the new offsets - LOOP_XYZ(a) zprobe_offset[a] = offs[a]; + LOOP_XYZ(a) probe_offset[a] = offs[a]; } #endif // HAS_BED_PROBE diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp index 68b8aad5234e..f5cfefd21795 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.cpp +++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp @@ -708,7 +708,7 @@ namespace ExtUI { #if EXTRUDERS > 1 && (linked_nozzles || active_extruder == 0) #endif - ) zprobe_offset[Z_AXIS] += mm; + ) probe_offset[Z_AXIS] += mm; #else UNUSED(mm); #endif @@ -746,7 +746,7 @@ namespace ExtUI { float getZOffset_mm() { #if HAS_BED_PROBE - return zprobe_offset[Z_AXIS]; + return probe_offset[Z_AXIS]; #elif ENABLED(BABYSTEP_DISPLAY_TOTAL) return babystep.axis_total[BS_TOTAL_AXIS(Z_AXIS) + 1]; #else @@ -757,7 +757,7 @@ namespace ExtUI { void setZOffset_mm(const float value) { #if HAS_BED_PROBE if (WITHIN(value, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) - zprobe_offset[Z_AXIS] = value; + probe_offset[Z_AXIS] = value; #elif ENABLED(BABYSTEP_DISPLAY_TOTAL) babystep.add_mm(Z_AXIS, (value - babystep.axis_total[BS_TOTAL_AXIS(Z_AXIS) + 1])); #else diff --git a/Marlin/src/lcd/menu/menu.cpp b/Marlin/src/lcd/menu/menu.cpp index 800b4f03d075..012b3b58474a 100644 --- a/Marlin/src/lcd/menu/menu.cpp +++ b/Marlin/src/lcd/menu/menu.cpp @@ -402,7 +402,7 @@ void scroll_screen(const uint8_t limit, const bool is_menu) { ui.encoderPosition = 0; const float diff = planner.steps_to_mm[Z_AXIS] * babystep_increment, - new_probe_offset = zprobe_offset[Z_AXIS] + diff, + new_probe_offset = probe_offset[Z_AXIS] + diff, new_offs = #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) do_probe ? new_probe_offset : hotend_offset[Z_AXIS][active_extruder] - diff @@ -414,7 +414,7 @@ void scroll_screen(const uint8_t limit, const bool is_menu) { babystep.add_steps(Z_AXIS, babystep_increment); - if (do_probe) zprobe_offset[Z_AXIS] = new_offs; + if (do_probe) probe_offset[Z_AXIS] = new_offs; #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) else hotend_offset[Z_AXIS][active_extruder] = new_offs; #endif @@ -428,10 +428,10 @@ void scroll_screen(const uint8_t limit, const bool is_menu) { draw_edit_screen(PSTR(MSG_Z_OFFSET), ftostr43sign(hotend_offset[Z_AXIS][active_extruder])); else #endif - draw_edit_screen(PSTR(MSG_ZPROBE_ZOFFSET), ftostr43sign(zprobe_offset[Z_AXIS])); + draw_edit_screen(PSTR(MSG_ZPROBE_ZOFFSET), ftostr43sign(probe_offset[Z_AXIS])); #if ENABLED(BABYSTEP_ZPROBE_GFX_OVERLAY) - if (do_probe) _lcd_zoffset_overlay_gfx(zprobe_offset[Z_AXIS]); + if (do_probe) _lcd_zoffset_overlay_gfx(probe_offset[Z_AXIS]); #endif } } diff --git a/Marlin/src/lcd/menu/menu_bed_leveling.cpp b/Marlin/src/lcd/menu/menu_bed_leveling.cpp index 33073fc81ad6..bb4eaa845690 100644 --- a/Marlin/src/lcd/menu/menu_bed_leveling.cpp +++ b/Marlin/src/lcd/menu/menu_bed_leveling.cpp @@ -279,7 +279,7 @@ void menu_bed_leveling() { #if ENABLED(BABYSTEP_ZPROBE_OFFSET) MENU_ITEM(submenu, MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset); #elif HAS_BED_PROBE - MENU_ITEM_EDIT(float52, MSG_ZPROBE_ZOFFSET, &zprobe_offset[Z_AXIS], Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX); + MENU_ITEM_EDIT(float52, MSG_ZPROBE_ZOFFSET, &probe_offset[Z_AXIS], Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX); #endif #if ENABLED(LEVEL_BED_CORNERS) diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index 89fedeefcd93..8b549a948f9a 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -347,7 +347,7 @@ void menu_configuration() { #if ENABLED(BABYSTEP_ZPROBE_OFFSET) MENU_ITEM(submenu, MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset); #elif HAS_BED_PROBE - MENU_ITEM_EDIT(float52, MSG_ZPROBE_ZOFFSET, &zprobe_offset[Z_AXIS], Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX); + MENU_ITEM_EDIT(float52, MSG_ZPROBE_ZOFFSET, &probe_offset[Z_AXIS], Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX); #endif const bool busy = printer_busy(); diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp index 6b7f7ab95813..f12e377af3f3 100644 --- a/Marlin/src/module/configuration_store.cpp +++ b/Marlin/src/module/configuration_store.cpp @@ -176,7 +176,7 @@ typedef struct SettingsDataStruct { // HAS_BED_PROBE // - float zprobe_offset[XYZ]; + float probe_offset[XYZ]; // // ABL_PLANAR @@ -613,8 +613,8 @@ void MarlinSettings::postprocess() { // Probe Z Offset // { - _FIELD_TEST(zprobe_offset[Z_AXIS]); - EEPROM_WRITE(zprobe_offset); + _FIELD_TEST(probe_offset[Z_AXIS]); + EEPROM_WRITE(probe_offset); } // @@ -1415,10 +1415,10 @@ void MarlinSettings::postprocess() { // Probe Z Offset // { - _FIELD_TEST(zprobe_offset[Z_AXIS]); + _FIELD_TEST(probe_offset[Z_AXIS]); #if HAS_BED_PROBE - float (&zpo)[XYZ] = zprobe_offset; + float (&zpo)[XYZ] = probe_offset; #else float zpo[XYZ]; #endif @@ -2322,7 +2322,7 @@ void MarlinSettings::reset() { #endif constexpr float dpo[XYZ] = NOZZLE_TO_PROBE_OFFSET; static_assert(COUNT(dpo) == 3, "NOZZLE_TO_PROBE_OFFSET must contain offsets for X, Y, and Z."); - LOOP_XYZ(a) zprobe_offset[a] = dpo[a]; + LOOP_XYZ(a) probe_offset[a] = dpo[a]; #endif // @@ -3071,9 +3071,9 @@ void MarlinSettings::reset() { say_units(true); } CONFIG_ECHO_START(); - SERIAL_ECHOLNPAIR(" M851 X", LINEAR_UNIT(zprobe_offset[X_AXIS]), - " Y", LINEAR_UNIT(zprobe_offset[Y_AXIS]), - " Z", LINEAR_UNIT(zprobe_offset[Z_AXIS])); + SERIAL_ECHOLNPAIR(" M851 X", LINEAR_UNIT(probe_offset[X_AXIS]), + " Y", LINEAR_UNIT(probe_offset[Y_AXIS]), + " Z", LINEAR_UNIT(probe_offset[Z_AXIS])); #endif /** diff --git a/Marlin/src/module/delta.cpp b/Marlin/src/module/delta.cpp index c9d942f1b782..66973805de56 100644 --- a/Marlin/src/module/delta.cpp +++ b/Marlin/src/module/delta.cpp @@ -233,7 +233,7 @@ void home_delta() { // Move all carriages together linearly until an endstop is hit. destination[Z_AXIS] = (delta_height #if HAS_BED_PROBE - - zprobe_offset[Z_AXIS] + - probe_offset[Z_AXIS] #endif + 10); buffer_line_to_destination(homing_feedrate(X_AXIS)); diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index 3867fb9c74b0..d5bc121d9b5b 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -505,7 +505,7 @@ void restore_feedrate_and_scaling() { soft_endstop[axis].min = base_min_pos(axis); soft_endstop[axis].max = (axis == Z_AXIS ? delta_height #if HAS_BED_PROBE - - zprobe_offset[Z_AXIS] + - probe_offset[Z_AXIS] #endif : base_max_pos(axis)); @@ -1340,7 +1340,7 @@ void set_axis_is_at_home(const AxisEnum axis) { #elif ENABLED(DELTA) current_position[axis] = (axis == Z_AXIS ? delta_height #if HAS_BED_PROBE - - zprobe_offset[Z_AXIS] + - probe_offset[Z_AXIS] #endif : base_home_pos(axis)); #else @@ -1354,9 +1354,9 @@ void set_axis_is_at_home(const AxisEnum axis) { if (axis == Z_AXIS) { #if HOMING_Z_WITH_PROBE - current_position[Z_AXIS] -= zprobe_offset[Z_AXIS]; + current_position[Z_AXIS] -= probe_offset[Z_AXIS]; - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("*** Z HOMED WITH PROBE (Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) ***\n> zprobe_offset[Z_AXIS] = ", zprobe_offset[Z_AXIS]); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("*** Z HOMED WITH PROBE (Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) ***\n> probe_offset[Z_AXIS] = ", probe_offset[Z_AXIS]); #else diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index 86fccc25c468..664e9f13fef5 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -284,7 +284,7 @@ void homeaxis(const AxisEnum axis); // Return true if the both nozzle and the probe can reach the given point. // Note: This won't work on SCARA since the probe offset rotates with the arm. inline bool position_is_reachable_by_probe(const float &rx, const float &ry) { - return position_is_reachable(rx - zprobe_offset[X_AXIS], ry - zprobe_offset[Y_AXIS]) + return position_is_reachable(rx - probe_offset[X_AXIS], ry - probe_offset[Y_AXIS]) && position_is_reachable(rx, ry, ABS(MIN_PROBE_EDGE)); } #endif @@ -313,7 +313,7 @@ void homeaxis(const AxisEnum axis); * nozzle must be be able to reach +10,-10. */ inline bool position_is_reachable_by_probe(const float &rx, const float &ry) { - return position_is_reachable(rx - zprobe_offset[X_AXIS], ry - zprobe_offset[Y_AXIS]) + return position_is_reachable(rx - probe_offset[X_AXIS], ry - probe_offset[Y_AXIS]) && WITHIN(rx, probe_min_x() - slop, probe_max_x() + slop) && WITHIN(ry, probe_min_y() - slop, probe_max_y() + slop); } diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index f9cfd26f9a5d..37422bdb1571 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -56,7 +56,7 @@ #include "../feature/backlash.h" #endif -float zprobe_offset[XYZ]; // Initialized by settings.load() +float probe_offset[XYZ]; // Initialized by settings.load() #if ENABLED(BLTOUCH) #include "../feature/bltouch.h" @@ -91,7 +91,7 @@ float probe_min_x() { #if ENABLED(DELTA) || IS_SCARA PROBE_X_MIN, MESH_MIN_X #else - (X_MIN_BED) + (MIN_PROBE_EDGE), (X_MIN_POS) + zprobe_offset[X_AXIS] + (X_MIN_BED) + (MIN_PROBE_EDGE), (X_MIN_POS) + probe_offset[X_AXIS] #endif ); } @@ -100,7 +100,7 @@ float probe_max_x() { #if ENABLED(DELTA) || IS_SCARA PROBE_X_MAX, MESH_MAX_X #else - (X_MAX_BED) - (MIN_PROBE_EDGE), (X_MAX_POS) + zprobe_offset[X_AXIS] + (X_MAX_BED) - (MIN_PROBE_EDGE), (X_MAX_POS) + probe_offset[X_AXIS] #endif ); } @@ -109,7 +109,7 @@ float probe_min_y() { #if ENABLED(DELTA) || IS_SCARA PROBE_Y_MIN, MESH_MIN_Y #else - (Y_MIN_BED) + (MIN_PROBE_EDGE), (Y_MIN_POS) + zprobe_offset[Y_AXIS] + (Y_MIN_BED) + (MIN_PROBE_EDGE), (Y_MIN_POS) + probe_offset[Y_AXIS] #endif ); } @@ -118,7 +118,7 @@ float probe_max_y() { #if ENABLED(DELTA) || IS_SCARA PROBE_Y_MAX, MESH_MAX_Y #else - (Y_MAX_BED) - (MIN_PROBE_EDGE), (Y_MAX_POS) + zprobe_offset[Y_AXIS] + (Y_MAX_BED) - (MIN_PROBE_EDGE), (Y_MAX_POS) + probe_offset[Y_AXIS] #endif ); } @@ -300,7 +300,7 @@ inline void do_probe_raise(const float z_raise) { if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("do_probe_raise(", z_raise, ")"); float z_dest = z_raise; - if (zprobe_offset[Z_AXIS] < 0) z_dest -= zprobe_offset[Z_AXIS]; + if (probe_offset[Z_AXIS] < 0) z_dest -= probe_offset[Z_AXIS]; NOMORE(z_dest, Z_MAX_POS); @@ -580,7 +580,7 @@ static float run_z_probe() { // Stop the probe before it goes too low to prevent damage. // If Z isn't known then probe to -10mm. - const float z_probe_low_point = TEST(axis_known_position, Z_AXIS) ? -zprobe_offset[Z_AXIS] + Z_PROBE_LOW_POINT : -10.0; + const float z_probe_low_point = TEST(axis_known_position, Z_AXIS) ? -probe_offset[Z_AXIS] + Z_PROBE_LOW_POINT : -10.0; // Double-probing does a fast probe followed by a slow probe #if TOTAL_PROBING == 2 @@ -605,7 +605,7 @@ static float run_z_probe() { // If the nozzle is well over the travel height then // move down quickly before doing the slow probe - const float z = Z_CLEARANCE_DEPLOY_PROBE + 5.0 + (zprobe_offset[Z_AXIS] < 0 ? -zprobe_offset[Z_AXIS] : 0); + const float z = Z_CLEARANCE_DEPLOY_PROBE + 5.0 + (probe_offset[Z_AXIS] < 0 ? -probe_offset[Z_AXIS] : 0); if (current_position[Z_AXIS] > z) { // Probe down fast. If the probe never triggered, raise for probe clearance if (!do_probe_move(z, MMM_TO_MMS(Z_PROBE_SPEED_FAST))) @@ -735,8 +735,8 @@ float probe_at_point(const float &rx, const float &ry, const ProbePtRaise raise_ float nx = rx, ny = ry; if (probe_relative) { if (!position_is_reachable_by_probe(rx, ry)) return NAN; // The given position is in terms of the probe - nx -= zprobe_offset[X_AXIS]; // Get the nozzle position - ny -= zprobe_offset[Y_AXIS]; + nx -= probe_offset[X_AXIS]; // Get the nozzle position + ny -= probe_offset[Y_AXIS]; } else if (!position_is_reachable(nx, ny)) return NAN; // The given position is in terms of the nozzle @@ -757,7 +757,7 @@ float probe_at_point(const float &rx, const float &ry, const ProbePtRaise raise_ float measured_z = NAN; if (!DEPLOY_PROBE()) { - measured_z = run_z_probe() + zprobe_offset[Z_AXIS]; + measured_z = run_z_probe() + probe_offset[Z_AXIS]; const bool big_raise = raise_after == PROBE_PT_BIG_RAISE; if (big_raise || raise_after == PROBE_PT_RAISE) diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h index 6713b11a6b0e..b6f70ca857d3 100644 --- a/Marlin/src/module/probe.h +++ b/Marlin/src/module/probe.h @@ -29,7 +29,7 @@ #if HAS_BED_PROBE - extern float zprobe_offset[XYZ]; + extern float probe_offset[XYZ]; bool set_probe_deployed(const bool deploy); #ifdef Z_AFTER_PROBING void move_z_after_probing(); @@ -51,7 +51,7 @@ #else - constexpr float zprobe_offset[XYZ] = { 0 }; + constexpr float probe_offset[XYZ] = { 0 }; #define DEPLOY_PROBE() #define STOW_PROBE() From 5288c399ce780cd3e91ee413d1f92ca9e4da53a7 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 24 Sep 2019 23:34:07 -0500 Subject: [PATCH 037/120] Patch probe offset name, defines --- Marlin/src/gcode/bedlevel/abl/G29.cpp | 19 +++++++----- Marlin/src/gcode/calibrate/G28.cpp | 4 +-- Marlin/src/module/probe.cpp | 41 ++------------------------ Marlin/src/module/probe.h | 42 ++++++++++++++++++++++++++- 4 files changed, 55 insertions(+), 51 deletions(-) diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index e874d374093d..01c0cd19b478 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -391,18 +391,21 @@ G29_TYPE GcodeSuite::G29() { xy_probe_feedrate_mm_s = MMM_TO_MMS(parser.linearval('S', XY_PROBE_SPEED)); + const float x_min = probe_min_x(), x_max = probe_max_x(), + y_min = probe_min_y(), y_max = probe_max_y(); + if (parser.seen('H')) { const int16_t size = (int16_t)parser.value_linear_units(); - left_probe_bed_position = _MAX(X_CENTER - size / 2, probe_min_x()); - right_probe_bed_position = _MIN(left_probe_bed_position + size, probe_max_x()); - front_probe_bed_position = _MAX(Y_CENTER - size / 2, probe_min_y()); - back_probe_bed_position = _MIN(front_probe_bed_position + size, probe_max_y()); + left_probe_bed_position = _MAX(X_CENTER - size / 2, x_min); + right_probe_bed_position = _MIN(left_probe_bed_position + size, x_max); + front_probe_bed_position = _MAX(Y_CENTER - size / 2, y_min); + back_probe_bed_position = _MIN(front_probe_bed_position + size, y_max); } else { - left_probe_bed_position = parser.seenval('L') ? (int)RAW_X_POSITION(parser.value_linear_units()) : _MAX(X_CENTER - X_BED_SIZE / 2, probe_min_x()); - right_probe_bed_position = parser.seenval('R') ? (int)RAW_X_POSITION(parser.value_linear_units()) : _MIN(left_probe_bed_position + X_BED_SIZE, probe_max_x()); - front_probe_bed_position = parser.seenval('F') ? (int)RAW_Y_POSITION(parser.value_linear_units()) : _MAX(Y_CENTER - Y_BED_SIZE / 2, probe_min_y()); - back_probe_bed_position = parser.seenval('B') ? (int)RAW_Y_POSITION(parser.value_linear_units()) : _MIN(front_probe_bed_position + Y_BED_SIZE, probe_max_y()); + left_probe_bed_position = parser.seenval('L') ? (int)RAW_X_POSITION(parser.value_linear_units()) : _MAX(X_CENTER - X_BED_SIZE / 2, x_min); + right_probe_bed_position = parser.seenval('R') ? (int)RAW_X_POSITION(parser.value_linear_units()) : _MIN(left_probe_bed_position + X_BED_SIZE, x_max); + front_probe_bed_position = parser.seenval('F') ? (int)RAW_Y_POSITION(parser.value_linear_units()) : _MAX(Y_CENTER - Y_BED_SIZE / 2, y_min); + back_probe_bed_position = parser.seenval('B') ? (int)RAW_Y_POSITION(parser.value_linear_units()) : _MIN(front_probe_bed_position + Y_BED_SIZE, y_max); } if ( diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 1e78a49b4549..514bb6589153 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -39,9 +39,7 @@ #include "../../feature/tmc_util.h" #endif -#if HOMING_Z_WITH_PROBE || ENABLED(BLTOUCH) - #include "../../module/probe.h" -#endif +#include "../../module/probe.h" #if ENABLED(BLTOUCH) #include "../../feature/bltouch.h" diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 37422bdb1571..777c1c9ea131 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -28,9 +28,9 @@ #if HAS_BED_PROBE -#include "../libs/buzzer.h" - #include "probe.h" + +#include "../libs/buzzer.h" #include "motion.h" #include "temperature.h" #include "endstops.h" @@ -86,43 +86,6 @@ float probe_offset[XYZ]; // Initialized by settings.load() #define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE) #include "../core/debug_out.h" -float probe_min_x() { - return _MAX( - #if ENABLED(DELTA) || IS_SCARA - PROBE_X_MIN, MESH_MIN_X - #else - (X_MIN_BED) + (MIN_PROBE_EDGE), (X_MIN_POS) + probe_offset[X_AXIS] - #endif - ); -} -float probe_max_x() { - return _MIN( - #if ENABLED(DELTA) || IS_SCARA - PROBE_X_MAX, MESH_MAX_X - #else - (X_MAX_BED) - (MIN_PROBE_EDGE), (X_MAX_POS) + probe_offset[X_AXIS] - #endif - ); -} -float probe_min_y() { - return _MAX( - #if ENABLED(DELTA) || IS_SCARA - PROBE_Y_MIN, MESH_MIN_Y - #else - (Y_MIN_BED) + (MIN_PROBE_EDGE), (Y_MIN_POS) + probe_offset[Y_AXIS] - #endif - ); -} -float probe_max_y() { - return _MIN( - #if ENABLED(DELTA) || IS_SCARA - PROBE_Y_MAX, MESH_MAX_Y - #else - (Y_MAX_BED) - (MIN_PROBE_EDGE), (Y_MAX_POS) + probe_offset[Y_AXIS] - #endif - ); -} - #if ENABLED(Z_PROBE_SLED) #ifndef SLED_DOCKING_OFFSET diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h index b6f70ca857d3..b9c44f1da927 100644 --- a/Marlin/src/module/probe.h +++ b/Marlin/src/module/probe.h @@ -47,7 +47,42 @@ extern const char msg_wait_for_bed_heating[25]; #endif - float probe_min_x(), probe_max_x(), probe_min_y(), probe_max_y(); + inline float probe_min_x() { + return _MAX( + #if ENABLED(DELTA) || IS_SCARA + PROBE_X_MIN, MESH_MIN_X + #else + (X_MIN_BED) + (MIN_PROBE_EDGE), (X_MIN_POS) + probe_offset[X_AXIS] + #endif + ); + } + inline float probe_max_x() { + return _MIN( + #if ENABLED(DELTA) || IS_SCARA + PROBE_X_MAX, MESH_MAX_X + #else + (X_MAX_BED) - (MIN_PROBE_EDGE), (X_MAX_POS) + probe_offset[X_AXIS] + #endif + ); + } + inline float probe_min_y() { + return _MAX( + #if ENABLED(DELTA) || IS_SCARA + PROBE_Y_MIN, MESH_MIN_Y + #else + (Y_MIN_BED) + (MIN_PROBE_EDGE), (Y_MIN_POS) + probe_offset[Y_AXIS] + #endif + ); + } + inline float probe_max_y() { + return _MIN( + #if ENABLED(DELTA) || IS_SCARA + PROBE_Y_MAX, MESH_MAX_Y + #else + (Y_MAX_BED) - (MIN_PROBE_EDGE), (Y_MAX_POS) + probe_offset[Y_AXIS] + #endif + ); + } #else @@ -55,6 +90,11 @@ #define DEPLOY_PROBE() #define STOW_PROBE() + inline float probe_min_x() { return 0; }; + inline float probe_max_x() { return 0; }; + inline float probe_min_y() { return 0; }; + inline float probe_max_y() { return 0; }; + #endif #if HAS_Z_SERVO_PROBE From bd6d144cdbb0f370817d41561954350e1be0faa2 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Sep 2019 00:00:04 -0500 Subject: [PATCH 038/120] [cron] Bump distribution date --- Marlin/src/inc/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index 6e698073c587..b8768bc38971 100644 --- a/Marlin/src/inc/Version.h +++ b/Marlin/src/inc/Version.h @@ -51,7 +51,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ - #define STRING_DISTRIBUTION_DATE "2019-09-24" + #define STRING_DISTRIBUTION_DATE "2019-09-25" /** * Required minimum Configuration.h and Configuration_adv.h file versions. From 53124ca6b74a9cdfe9d2bb5c6af5d1be9a0dc452 Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Tue, 24 Sep 2019 23:08:30 -0700 Subject: [PATCH 039/120] Fix 32-bit crash due to fwretract_settings_t pack(1) (#15333) --- Marlin/src/feature/fwretract.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Marlin/src/feature/fwretract.h b/Marlin/src/feature/fwretract.h index 7caba3dbe95a..dacbec1fefcb 100644 --- a/Marlin/src/feature/fwretract.h +++ b/Marlin/src/feature/fwretract.h @@ -27,8 +27,6 @@ #include "../inc/MarlinConfigPre.h" -#pragma pack(push, 1) // No padding between fields - typedef struct { float retract_length, // M207 S - G10 Retract length retract_feedrate_mm_s, // M207 F - G10 Retract feedrate @@ -40,8 +38,6 @@ typedef struct { swap_retract_recover_feedrate_mm_s; // M208 R - G11 Swap Recover feedrate } fwretract_settings_t; -#pragma pack(pop) - #if ENABLED(FWRETRACT) class FWRetract { From 149e9b733eeee780e52def843df0c2a53f81acf1 Mon Sep 17 00:00:00 2001 From: Marcio Teixeira Date: Wed, 25 Sep 2019 00:25:21 -0600 Subject: [PATCH 040/120] Simplified ExtUI language selection (#15359) --- Marlin/Configuration_adv.h | 8 +- Marlin/src/lcd/dogm/ultralcd_DOGM.h | 6 +- .../unicode/western_char_set_bitmap_31.h | 1 - .../lib/lulzbot/language/language.cpp | 40 +--- .../lib/lulzbot/language/language.h | 87 ++++++-- .../lib/lulzbot/language/language_de.h | 6 +- .../lib/lulzbot/language/language_en.h | 189 +----------------- .../lib/lulzbot/language/language_fr.h | 6 +- .../lib/lulzbot/screens/boot_screen.cpp | 2 +- .../lib/lulzbot/screens/language_menu.cpp | 22 +- .../lib/lulzbot/screens/screens.cpp | 2 +- .../lib/lulzbot/screens/screens.h | 4 +- .../UHS_host/UHS_BULK_STORAGE/UHS_SCSI.h | 1 - .../lib-uhs3/UHS_host/UHS_USB_IDs.h | 2 - .../lib-uhs3/UHS_host/UHS_macros.h | 1 - .../lib-uhs3/UHS_host/UHS_printf_HELPER.h | 1 - config/default/Configuration_adv.h | 8 +- .../3DFabXYZ/Migbot/Configuration_adv.h | 8 +- .../ADIMLab/Gantry v1/Configuration_adv.h | 8 +- .../ADIMLab/Gantry v2/Configuration_adv.h | 8 +- .../AlephObjects/TAZ4/Configuration_adv.h | 8 +- .../Alfawise/U20-bltouch/Configuration_adv.h | 8 +- .../examples/Alfawise/U20/Configuration_adv.h | 8 +- .../AliExpress/UM2pExt/Configuration_adv.h | 8 +- config/examples/Anet/A2/Configuration_adv.h | 8 +- .../examples/Anet/A2plus/Configuration_adv.h | 8 +- config/examples/Anet/A6/Configuration_adv.h | 8 +- config/examples/Anet/A8/Configuration_adv.h | 8 +- .../examples/Anet/A8plus/Configuration_adv.h | 8 +- config/examples/Anet/E16/Configuration_adv.h | 8 +- .../examples/AnyCubic/i3/Configuration_adv.h | 8 +- config/examples/ArmEd/Configuration_adv.h | 8 +- .../BIBO/TouchX/cyclops/Configuration_adv.h | 8 +- .../BIBO/TouchX/default/Configuration_adv.h | 8 +- .../examples/BQ/Hephestos/Configuration_adv.h | 8 +- .../BQ/Hephestos_2/Configuration_adv.h | 8 +- config/examples/BQ/WITBOX/Configuration_adv.h | 8 +- config/examples/Cartesio/Configuration_adv.h | 8 +- .../Creality/CR-10/Configuration_adv.h | 8 +- .../Creality/CR-10S/Configuration_adv.h | 8 +- .../Creality/CR-10_5S/Configuration_adv.h | 8 +- .../Creality/CR-10mini/Configuration_adv.h | 8 +- .../Creality/CR-20 Pro/Configuration_adv.h | 8 +- .../Creality/CR-20/Configuration_adv.h | 8 +- .../Creality/CR-8/Configuration_adv.h | 8 +- .../Creality/Ender-2/Configuration_adv.h | 8 +- .../Creality/Ender-3/Configuration_adv.h | 8 +- .../Creality/Ender-4/Configuration_adv.h | 8 +- .../Creality/Ender-5/Configuration_adv.h | 8 +- .../Dagoma/Disco Ultimate/Configuration_adv.h | 8 +- .../Sidewinder X1/Configuration_adv.h | 8 +- .../examples/Einstart-S/Configuration_adv.h | 8 +- .../FYSETC/AIO_II/Configuration_adv.h | 8 +- .../Cheetah 1.2/BLTouch/Configuration_adv.h | 8 +- .../Cheetah 1.2/base/Configuration_adv.h | 8 +- .../Cheetah/BLTouch/Configuration_adv.h | 8 +- .../FYSETC/Cheetah/base/Configuration_adv.h | 8 +- .../examples/FYSETC/F6_13/Configuration_adv.h | 8 +- config/examples/Felix/Configuration_adv.h | 8 +- .../FlashForge/CreatorPro/Configuration_adv.h | 8 +- .../FolgerTech/i3-2020/Configuration_adv.h | 8 +- .../Formbot/Raptor/Configuration_adv.h | 8 +- .../Formbot/T_Rex_2+/Configuration_adv.h | 8 +- .../Formbot/T_Rex_3/Configuration_adv.h | 8 +- .../examples/Geeetech/A10/Configuration_adv.h | 8 +- .../Geeetech/A10M/Configuration_adv.h | 8 +- .../Geeetech/A20M/Configuration_adv.h | 8 +- .../Geeetech/MeCreator2/Configuration_adv.h | 8 +- .../Prusa i3 Pro C/Configuration_adv.h | 8 +- .../Prusa i3 Pro W/Configuration_adv.h | 8 +- .../Infitary/i3-M508/Configuration_adv.h | 8 +- .../examples/JGAurora/A1/Configuration_adv.h | 8 +- .../examples/JGAurora/A5/Configuration_adv.h | 8 +- .../examples/JGAurora/A5S/Configuration_adv.h | 8 +- .../examples/MakerParts/Configuration_adv.h | 8 +- .../examples/Malyan/M150/Configuration_adv.h | 8 +- .../examples/Malyan/M200/Configuration_adv.h | 8 +- .../Micromake/C1/enhanced/Configuration_adv.h | 8 +- config/examples/Mks/Robin/Configuration_adv.h | 8 +- config/examples/Mks/Sbase/Configuration_adv.h | 8 +- .../RapideLite/RL200/Configuration_adv.h | 8 +- config/examples/RigidBot/Configuration_adv.h | 8 +- config/examples/SCARA/Configuration_adv.h | 8 +- .../Black_STM32F407VET6/Configuration_adv.h | 8 +- .../examples/Sanguinololu/Configuration_adv.h | 8 +- .../Tevo/Michelangelo/Configuration_adv.h | 8 +- .../Tevo/Tarantula Pro/Configuration_adv.h | 8 +- .../Tornado/V1 (MKS Base)/Configuration_adv.h | 8 +- .../V2 (MKS GEN-L)/Configuration_adv.h | 8 +- config/examples/TheBorg/Configuration_adv.h | 8 +- config/examples/TinyBoy2/Configuration_adv.h | 8 +- .../examples/Tronxy/X3A/Configuration_adv.h | 8 +- .../Tronxy/X5S-2E/Configuration_adv.h | 8 +- .../UltiMachine/Archim1/Configuration_adv.h | 8 +- .../UltiMachine/Archim2/Configuration_adv.h | 8 +- .../examples/VORONDesign/Configuration_adv.h | 8 +- .../Velleman/K8200/Configuration_adv.h | 8 +- .../Velleman/K8400/Configuration_adv.h | 8 +- .../WASP/PowerWASP/Configuration_adv.h | 8 +- .../Wanhao/Duplicator 6/Configuration_adv.h | 8 +- .../Duplicator i3 Mini/Configuration_adv.h | 8 +- .../delta/Anycubic/Kossel/Configuration_adv.h | 8 +- .../Dreammaker/Overlord/Configuration_adv.h | 8 +- .../Overlord_Pro/Configuration_adv.h | 8 +- .../FLSUN/auto_calibrate/Configuration_adv.h | 8 +- .../delta/FLSUN/kossel/Configuration_adv.h | 8 +- .../FLSUN/kossel_mini/Configuration_adv.h | 8 +- .../Geeetech/Rostock 301/Configuration_adv.h | 8 +- .../delta/MKS/SBASE/Configuration_adv.h | 8 +- .../Tevo Little Monster/Configuration_adv.h | 8 +- .../delta/generic/Configuration_adv.h | 8 +- .../delta/kossel_mini/Configuration_adv.h | 8 +- .../delta/kossel_xl/Configuration_adv.h | 8 +- .../gCreate/gMax1.5+/Configuration_adv.h | 8 +- config/examples/makibox/Configuration_adv.h | 8 +- .../tvrrug/Round2/Configuration_adv.h | 8 +- config/examples/wt150/Configuration_adv.h | 8 +- 117 files changed, 709 insertions(+), 477 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index b6ba665fcf55..f88905b8455f 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/Marlin/src/lcd/dogm/ultralcd_DOGM.h b/Marlin/src/lcd/dogm/ultralcd_DOGM.h index 71e4c3961135..4ccbcbe8b24c 100644 --- a/Marlin/src/lcd/dogm/ultralcd_DOGM.h +++ b/Marlin/src/lcd/dogm/ultralcd_DOGM.h @@ -145,11 +145,11 @@ #define LCD_PIXEL_HEIGHT 64 #endif -// LCD_FULL_PIXEL_WIDTH = -// LCD_PIXEL_OFFSET_X + (LCD_PIXEL_WIDTH * 2) + LCD_PIXEL_OFFSET_X +// LCD_FULL_PIXEL_WIDTH = +// LCD_PIXEL_OFFSET_X + (LCD_PIXEL_WIDTH * 2) + LCD_PIXEL_OFFSET_X #if ENABLED(FSMC_GRAPHICAL_TFT) #define LCD_FULL_PIXEL_WIDTH 320 - #define LCD_PIXEL_OFFSET_X 32 + #define LCD_PIXEL_OFFSET_X 32 #define LCD_FULL_PIXEL_HEIGHT 240 #define LCD_PIXEL_OFFSET_Y 32 #endif diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/western_char_set_bitmap_31.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/western_char_set_bitmap_31.h index 2c1b8291b828..64a14121d975 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/western_char_set_bitmap_31.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/unicode/western_char_set_bitmap_31.h @@ -1313,4 +1313,3 @@ const unsigned char font[] PROGMEM = { 0xff, 0x00, 0x34, 0x00 #endif // TOUCH_UI_UTF8_SYMBOLS }; - diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.cpp index 73c0a69cf634..5d33fc850ff1 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.cpp @@ -1,10 +1,9 @@ -/***************** +/**************** * language.cpp * - *****************/ + ****************/ /**************************************************************************** - * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * - * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * + * Written By Marcio Teixeira 2019 - Aleph Objects, Inc. * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -20,36 +19,9 @@ * location: . * ****************************************************************************/ -#include "../compat.h" -#if ENABLED(LULZBOT_TOUCH_UI) && defined(TOUCH_UI_LANGUAGE_MENU) +#include "../../../../../Marlin.h" - #include "language_de.h" - #include "language_en.h" - #include "language_fr.h" +#include "language.h" - PROGMEM Language_List languages = { - &Language_de::strings, - &Language_en::strings, - &Language_fr::strings - }; - - uint8_t get_language_count() { - return sizeof(languages)/sizeof(languages[0]); - } - - static uint8_t lang = 0; - - void set_language(uint8_t l) { - lang = l; - }; - - const char *get_text(uint8_t lang, String_Indices index) { - const Language_Strings* strings = (const Language_Strings*) pgm_read_ptr(&languages[lang]); - return (const char *)pgm_read_ptr(&(*strings)[int(index)]); - }; - - const char *get_text(String_Indices index) { - return get_text(lang, index); - }; -#endif +uint8_t lang = 0; diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.h index 52aae2502241..a8a700864b1c 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language.h @@ -18,29 +18,72 @@ * To view a copy of the GNU General Public License, go to the following * * location: . * ****************************************************************************/ - #pragma once -enum class String_Indices { LANGUAGE_STRINGS, COUNT }; - typedef const char Language_Str[]; -typedef const char* const Language_Strings[int(String_Indices::COUNT)]; -typedef const Language_Strings* const Language_List[]; - -#ifndef TOUCH_UI_LANGUAGE_MENU - // Default mode, support only one language. - #define __GET_TEXTF(MSG,LANG) Language_##LANG::MSG - #define _GET_TEXTF(MSG,LANG) __GET_TEXTF(MSG,LANG) - #define GET_TEXTF(MSG) reinterpret_cast(_GET_TEXTF(MSG,LCD_LANGUAGE)) - #define GET_TEXT(MSG) _GET_TEXTF(MSG,LCD_LANGUAGE) - #define MAKE_LANGUAGE_STRINGS() + +// Count how many languages are defined. + +#if defined(LCD_LANGUAGE_5) + #define NUM_LANGUAGES 5 +#elif defined(LCD_LANGUAGE_4) + #define NUM_LANGUAGES 4 +#elif defined(LCD_LANGUAGE_3) + #define NUM_LANGUAGES 3 +#elif defined(LCD_LANGUAGE_2) + #define NUM_LANGUAGES 2 #else - // Support multiple languages at run-time. - uint8_t get_language_count(); - void set_language(uint8_t index); - const char *get_text(String_Indices index); - const char *get_text(uint8_t lang, String_Indices index); - #define GET_TEXT(MSG) get_text(String_Indices::MSG) - #define GET_TEXTF(MSG) reinterpret_cast(get_text(String_Indices::MSG)) - #define MAKE_LANGUAGE_STRINGS() PROGMEM Language_Strings strings = { LANGUAGE_STRINGS } -#endif \ No newline at end of file + #define NUM_LANGUAGES 1 +#endif + +// Set undefined languages equal to the last and +// let the compiler optimize out the duplicates + +#ifndef LCD_LANGUAGE_1 + #define LCD_LANGUAGE_1 LCD_LANGUAGE +#endif + +#ifndef LCD_LANGUAGE_2 + #define LCD_LANGUAGE_2 LCD_LANGUAGE_1 +#endif + +#ifndef LCD_LANGUAGE_3 + #define LCD_LANGUAGE_3 LCD_LANGUAGE_2 +#endif + +#ifndef LCD_LANGUAGE_4 + #define LCD_LANGUAGE_4 LCD_LANGUAGE_3 +#endif + +#ifndef LCD_LANGUAGE_5 + #define LCD_LANGUAGE_5 LCD_LANGUAGE_4 +#endif + +// Indirection required to paste together the namespace name + +#define _GET_LANG(LANG) Language_##LANG +#define GET_LANG(LANG) _GET_LANG(LANG) + +#if NUM_LANGUAGES > 1 + extern uint8_t lang; + // The compiler does a good job of "flattening" out this + // if statement when there are fewer than five languages. + #define GET_TEXT(MSG) ( \ + lang == 0 ? GET_LANG(LCD_LANGUAGE_1)::MSG : \ + lang == 1 ? GET_LANG(LCD_LANGUAGE_2)::MSG : \ + lang == 2 ? GET_LANG(LCD_LANGUAGE_3)::MSG : \ + lang == 3 ? GET_LANG(LCD_LANGUAGE_4)::MSG : \ + GET_LANG(LCD_LANGUAGE_5)::MSG \ + ) +#else + #define GET_TEXT(MSG) GET_LANG(LCD_LANGUAGE_1)::MSG +#endif +#define GET_TEXTF(MSG) reinterpret_cast(GET_TEXT(MSG)) + +#define GET_LANGUAGE_NAME(N) GET_LANG(LCD_LANGUAGE_##N)::LANGUAGE + +// All the language tables go here + +#include "language_en.h" +#include "language_de.h" +#include "language_fr.h" diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_de.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_de.h index e34b588cec07..3c26bfb3d8f6 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_de.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_de.h @@ -21,10 +21,8 @@ #pragma once -#include "language_en.h" - namespace Language_de { - using namespace Language_en; + using namespace Language_en; // Inherit undefined strings from English PROGMEM Language_Str LANGUAGE = u8"Deutsche"; @@ -79,6 +77,4 @@ namespace Language_de { PROGMEM Language_Str PRINTER_HALTED = u8"DRUCKER GESTOPPT"; PROGMEM Language_Str PLEASE_RESET = u8"Bitte neustarten"; - - MAKE_LANGUAGE_STRINGS(); }; // namespace Language_de diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h index 4182277cbba2..02a284607e42 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h @@ -21,192 +21,7 @@ #pragma once -// The list LANGUAGE_STRINGS should define all the strings used in the default -// language (Language_en). Translations do *not* need to re-define this. - -#define LANGUAGE_STRINGS \ - LANGUAGE, \ - YES, \ - NO, \ - BACK, \ - COLOR_TOUCH_PANEL, \ - ABOUT_ALEPH_OBJECTS, OKAY, \ - FIRMWARE_FOR_TOOLHEAD, \ - AUTO_HOME, \ - CLEAN_NOZZLE, \ - CHANGE_FILAMENT, \ - ADVANCED_SETTINGS, \ - PRINTER_STATISTICS, \ - ABOUT_PRINTER, \ - MOTORS_OFF, \ - ZPROBE_ZOFFSET, \ - STEPS_PER_MM, \ - HOME_SENSE, \ - TOOL_OFFSETS, \ - MOTOR_CURRENT, \ - FILAMENT, \ - ENDSTOPS, \ - X_MAX, \ - X_MIN, \ - Y_MAX, \ - Y_MIN, \ - Z_MAX, \ - Z_MIN, \ - Z_PROBE, \ - RUNOUT_1, \ - RUNOUT_2, \ - SOFT_ENDSTOPS, \ - DISPLAY_MENU, \ - INTERFACE_SETTINGS, \ - RESTORE_DEFAULTS, \ - VELOCITY, \ - VMAX_X, \ - VMAX_Y, \ - VMAX_Z, \ - VMAX_E1, \ - VMAX_E2, \ - VMAX_E3, \ - VMAX_E4, \ - ACCELERATION, \ - ACCEL_PRINTING, \ - ACCEL_TRAVEL, \ - ACCEL_RETRACT, \ - AMAX_X, \ - AMAX_Y, \ - AMAX_Z, \ - AMAX_E1, \ - AMAX_E2, \ - AMAX_E3, \ - AMAX_E4, \ - JERK, \ - JUNCTION_DEVIATION, \ - BACKLASH, \ - MEASURE_AUTOMATICALLY, \ - H_OFFSET, \ - V_OFFSET, \ - TOUCH_SCREEN, \ - CALIBRATE, \ - HOME, \ - UNITS_MILLIAMP, \ - UNITS_MM, \ - UNITS_MM_S, \ - UNITS_MM_S2, \ - UNITS_STEP_MM, \ - UNITS_PERCENT, \ - UNITS_C, \ - TEMP_IDLE, \ - MATERIAL_PLA, \ - MATERIAL_ABS, \ - MATERIAL_HIGH_TEMP, \ - AXIS_X, \ - AXIS_Y, \ - AXIS_Z, \ - AXIS_E, \ - AXIS_E1, \ - AXIS_E2, \ - AXIS_E3, \ - AXIS_E4, \ - AXIS_ALL, \ - HOTEND, \ - HOTEND1, \ - HOTEND2, \ - HOTEND3, \ - HOTEND4, \ - BED, \ - SMOOTHING, \ - CORRECTION, \ - PRINTING, \ - SET_MAXIMUM, \ - RUNOUT_SENSOR, \ - DETECTION_THRESHOLD, \ - DISTANCE, \ - TEMPERATURE, \ - COOLDOWN, \ - FAN_SPEED, \ - PRINT_SPEED, \ - SPEED, \ - MOVE_AXIS, \ - LINEAR_ADVANCE, \ - LINEAR_ADVANCE_K, \ - LINEAR_ADVANCE_K1, \ - LINEAR_ADVANCE_K2, \ - LINEAR_ADVANCE_K3, \ - LINEAR_ADVANCE_K4, \ - NUDGE_NOZZLE, \ - ADJUST_BOTH_NOZZLES, \ - SHOW_OFFSETS, \ - INCREMENT, \ - ERASE_FLASH_WARNING, \ - ERASING, \ - ERASED, \ - CALIBRATION_WARNING, \ - ABORT_WARNING, \ - EXTRUDER_SELECTION, \ - CURRENT_TEMPERATURE, \ - REMOVAL_TEMPERATURE, \ - HEATING, \ - CAUTION, \ - HOT, \ - UNLOAD_FILAMENT, \ - LOAD_FILAMENT, \ - MOMENTARY, \ - CONTINUOUS, \ - PLEASE_WAIT, \ - PRINT_MENU, \ - FINE_MOTION, \ - MEDIA, \ - ENABLE_MEDIA, \ - INSERT_MEDIA, \ - MENU, \ - LCD_BRIGHTNESS, \ - SOUND_VOLUME, \ - SCREEN_LOCK, \ - BOOT_SCREEN, \ - INTERFACE_SOUNDS, \ - EEPROM_RESTORED, \ - EEPROM_RESET, \ - EEPROM_SAVED, \ - EEPROM_SAVE_PROMPT, \ - EEPROM_RESET_WARNING, \ - OPEN_DIR, \ - PRINT_FILE, \ - PRINT_STARTING, \ - PRINT_FINISHED, \ - PRINT_ERROR, \ - PASSCODE_REJECTED, \ - PASSCODE_ACCEPTED, \ - PASSCODE_SELECT, \ - PASSCODE_REQUEST, \ - PRINTER_HALTED, \ - PLEASE_RESET, \ - CLICK_SOUNDS, \ - INFO_PRINT_COUNT, \ - INFO_COMPLETED_PRINTS, \ - INFO_PRINT_TIME, \ - INFO_PRINT_LONGEST, \ - INFO_PRINT_FILAMENT, \ - RESUME_PRINT, \ - PAUSE_PRINT, \ - STOP_PRINT, \ - TOUCH_CALIBRATION_START, \ - TOUCH_CALIBRATION_PROMPT \ - LULZBOT_BIOPRINTER_STRINGS - -#ifndef LULZBOT_USE_BIOPRINTER_UI - #define LULZBOT_BIOPRINTER_STRINGS -#else - #define LULZBOT_BIOPRINTER_STRINGS ,\ - MAIN_MENU, \ - RELEASE_XY_AXIS, \ - LOAD_SYRINGE, \ - BED_TEMPERATURE, \ - LOADING_WARNING, \ - HOMING_WARNING -#endif - -#include "language.h" // This must be included after LANGUAGE_STRINGS - -// The string table for this language. +#include "language.h" namespace Language_en { PROGMEM Language_Str LANGUAGE = u8"English"; @@ -413,6 +228,4 @@ namespace Language_en { PROGMEM Language_Str LOADING_WARNING = u8"About to home to loading position. Ensure the top and the bed of the printer are clear.\n\nContinue?"; PROGMEM Language_Str HOMING_WARNING = u8"About to re-home plunger and auto-level. Remove syringe prior to proceeding.\n\nContinue?"; #endif - - MAKE_LANGUAGE_STRINGS(); }; // namespace Language_en diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h index 73319c5ea8f0..d740fc643bb0 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h @@ -21,10 +21,8 @@ #pragma once -#include "language_en.h" - namespace Language_fr { - using namespace Language_en; + using namespace Language_en; // Inherit undefined strings from English PROGMEM Language_Str LANGUAGE = u8"Français"; @@ -85,6 +83,4 @@ namespace Language_fr { PROGMEM Language_Str PRINTER_HALTED = u8"IMPR. STOPPÉE"; PROGMEM Language_Str PLEASE_RESET = u8"Redémarrer SVP"; - - MAKE_LANGUAGE_STRINGS(); }; // namespace Language_fr diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/boot_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/boot_screen.cpp index c5af7ad553c7..32c43d654aef 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/boot_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/boot_screen.cpp @@ -83,7 +83,7 @@ void BootScreen::onIdle() { current_screen.forget(); PUSH_SCREEN(StatusScreen); PUSH_SCREEN(BioConfirmHomeE); - #elif defined(TOUCH_UI_LANGUAGE_MENU) + #elif NUM_LANGUAGES > 1 StatusScreen::setStatusMessage(F(WELCOME_MSG)); GOTO_SCREEN(LanguageMenu); #else diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/language_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/language_menu.cpp index cea354b7137f..d077ae19fe53 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/language_menu.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/language_menu.cpp @@ -21,8 +21,9 @@ ****************************************************************************/ #include "../config.h" +#include "../language/language.h" -#if ENABLED(LULZBOT_TOUCH_UI) && defined(TOUCH_UI_LANGUAGE_MENU) +#if ENABLED(LULZBOT_TOUCH_UI) && NUM_LANGUAGES > 1 #include "screens.h" @@ -39,14 +40,23 @@ void LanguageMenu::onRedraw(draw_mode_t) { #define GRID_ROWS 8 #define GRID_COLS 1 - for (uint8_t i = 0; i < get_language_count(); i++) - cmd.tag(1 + i).button(BTN_POS(1,i + 1), BTN_SIZE(1,1), get_text(i, String_Indices::LANGUAGE)); + cmd.tag(1).button(BTN_POS(1,1), BTN_SIZE(1,1), GET_LANGUAGE_NAME(1)); + cmd.tag(2).button(BTN_POS(1,2), BTN_SIZE(1,1), GET_LANGUAGE_NAME(2)); + #if NUM_LANGUAGES > 2 + cmd.tag(3).button(BTN_POS(1,3), BTN_SIZE(1,1), GET_LANGUAGE_NAME(3)); + #if NUM_LANGUAGES > 3 + cmd.tag(4).button(BTN_POS(1,4), BTN_SIZE(1,1), GET_LANGUAGE_NAME(4)); + #if NUM_LANGUAGES > 5 + cmd.tag(5).button(BTN_POS(1,5), BTN_SIZE(1,1), GET_LANGUAGE_NAME(5)); + #endif + #endif + #endif } bool LanguageMenu::onTouchEnd(uint8_t tag) { - const uint8_t lang = tag - 1; - if (tag != 0) { - set_language(lang); + + if (tag > 0 && tag <= NUM_LANGUAGES) { + lang = tag - 1; GOTO_SCREEN(StatusScreen); return true; } diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp index eb8644d5cc02..59d4069d6cfc 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp @@ -31,7 +31,7 @@ screen_data_t screen_data; SCREEN_TABLE { DECL_SCREEN(BootScreen), - #if ENABLED(TOUCH_UI_LANGUAGE_MENU) + #if NUM_LANGUAGES > 1 DECL_SCREEN(LanguageMenu), #endif DECL_SCREEN(TouchCalibrationScreen), diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h index c9850c0d8132..20a1809014d2 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h @@ -23,7 +23,7 @@ #pragma once #include "../ftdi_eve_lib/ftdi_eve_lib.h" -#include "../language/languages.h" +#include "../language/language.h" #include "../theme/theme.h" #include "string_format.h" @@ -723,7 +723,7 @@ class MediaPlayerScreen : public BaseScreen, public UncachedScreen { static void playStream(void *obj, media_streamer_func_t*); }; -#if ENABLED(TOUCH_UI_LANGUAGE_MENU) +#if NUM_LANGUAGES > 1 class LanguageMenu : public BaseScreen, public UncachedScreen { public: static void onRedraw(draw_mode_t); diff --git a/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_BULK_STORAGE/UHS_SCSI.h b/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_BULK_STORAGE/UHS_SCSI.h index 3655d8183f0a..9ebefab5d10f 100644 --- a/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_BULK_STORAGE/UHS_SCSI.h +++ b/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_BULK_STORAGE/UHS_SCSI.h @@ -325,4 +325,3 @@ struct SCSI_Request_Sense_Response { } __attribute__((packed)); #endif /* UHS_SCSI_H */ - diff --git a/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_USB_IDs.h b/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_USB_IDs.h index 1a88d38e9b4c..417c9f6e6946 100644 --- a/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_USB_IDs.h +++ b/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_USB_IDs.h @@ -2991,5 +2991,3 @@ #define UHS_VID_FNK_TECH 0xffeeU // FNK Tech #endif - - diff --git a/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_macros.h b/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_macros.h index 34eaed646b52..9c94e4d0ee6d 100644 --- a/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_macros.h +++ b/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_macros.h @@ -390,4 +390,3 @@ e-mail : support@circuitsathome.com #define NOTUSED(...) __VA_ARGS__ __attribute__((unused)) #endif #endif /* MACROS_H */ - diff --git a/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_printf_HELPER.h b/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_printf_HELPER.h index 5f8b59a99152..87f156db5cb3 100644 --- a/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_printf_HELPER.h +++ b/Marlin/src/sd/usb_flashdrive/lib-uhs3/UHS_host/UHS_printf_HELPER.h @@ -198,4 +198,3 @@ void UHS_AVR_printf_HELPER_init() { #define UHS_printf_HELPER_init() (void(0)) #endif #endif /* UHS_PRINTF_HELPER_H */ - diff --git a/config/default/Configuration_adv.h b/config/default/Configuration_adv.h index b6ba665fcf55..f88905b8455f 100644 --- a/config/default/Configuration_adv.h +++ b/config/default/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h index 6017b0812de5..56eb0d983094 100644 --- a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h +++ b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h index b2969a1c64a2..d453961a8d7d 100644 --- a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h index 40d87dc6d43a..9e6cb3d52470 100644 --- a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/AlephObjects/TAZ4/Configuration_adv.h b/config/examples/AlephObjects/TAZ4/Configuration_adv.h index b19429787da1..8ae981d46859 100644 --- a/config/examples/AlephObjects/TAZ4/Configuration_adv.h +++ b/config/examples/AlephObjects/TAZ4/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h index 9f80e2a76f48..d28445a30c85 100644 --- a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h +++ b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h @@ -1235,8 +1235,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Alfawise/U20/Configuration_adv.h b/config/examples/Alfawise/U20/Configuration_adv.h index 33b2fb83a645..ef31a7f86226 100644 --- a/config/examples/Alfawise/U20/Configuration_adv.h +++ b/config/examples/Alfawise/U20/Configuration_adv.h @@ -1234,8 +1234,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/AliExpress/UM2pExt/Configuration_adv.h b/config/examples/AliExpress/UM2pExt/Configuration_adv.h index 03b3dc96e5eb..dca5535e173e 100644 --- a/config/examples/AliExpress/UM2pExt/Configuration_adv.h +++ b/config/examples/AliExpress/UM2pExt/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Anet/A2/Configuration_adv.h b/config/examples/Anet/A2/Configuration_adv.h index f7f298ff1a63..fc0b42d648f4 100644 --- a/config/examples/Anet/A2/Configuration_adv.h +++ b/config/examples/Anet/A2/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Anet/A2plus/Configuration_adv.h b/config/examples/Anet/A2plus/Configuration_adv.h index f7f298ff1a63..fc0b42d648f4 100644 --- a/config/examples/Anet/A2plus/Configuration_adv.h +++ b/config/examples/Anet/A2plus/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Anet/A6/Configuration_adv.h b/config/examples/Anet/A6/Configuration_adv.h index e1b3ffa8c4a6..0642c97f530d 100644 --- a/config/examples/Anet/A6/Configuration_adv.h +++ b/config/examples/Anet/A6/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Anet/A8/Configuration_adv.h b/config/examples/Anet/A8/Configuration_adv.h index 05f68e207332..42400778e513 100644 --- a/config/examples/Anet/A8/Configuration_adv.h +++ b/config/examples/Anet/A8/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Anet/A8plus/Configuration_adv.h b/config/examples/Anet/A8plus/Configuration_adv.h index ee5bb397e3c8..7fda36633cd9 100644 --- a/config/examples/Anet/A8plus/Configuration_adv.h +++ b/config/examples/Anet/A8plus/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Anet/E16/Configuration_adv.h b/config/examples/Anet/E16/Configuration_adv.h index 6c7b312ca205..41fbc2c7f23d 100644 --- a/config/examples/Anet/E16/Configuration_adv.h +++ b/config/examples/Anet/E16/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/AnyCubic/i3/Configuration_adv.h b/config/examples/AnyCubic/i3/Configuration_adv.h index 4d764120c676..10f0eff5210a 100644 --- a/config/examples/AnyCubic/i3/Configuration_adv.h +++ b/config/examples/AnyCubic/i3/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/ArmEd/Configuration_adv.h b/config/examples/ArmEd/Configuration_adv.h index a62a09285f6d..6d2fd42cf233 100644 --- a/config/examples/ArmEd/Configuration_adv.h +++ b/config/examples/ArmEd/Configuration_adv.h @@ -1235,8 +1235,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h index 98a6fdb30cd3..07fec7d7ce15 100644 --- a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/BIBO/TouchX/default/Configuration_adv.h b/config/examples/BIBO/TouchX/default/Configuration_adv.h index bb54c2e13e98..e6f707616517 100644 --- a/config/examples/BIBO/TouchX/default/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/default/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/BQ/Hephestos/Configuration_adv.h b/config/examples/BQ/Hephestos/Configuration_adv.h index 6558554f2082..748e906a7e61 100644 --- a/config/examples/BQ/Hephestos/Configuration_adv.h +++ b/config/examples/BQ/Hephestos/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/BQ/Hephestos_2/Configuration_adv.h b/config/examples/BQ/Hephestos_2/Configuration_adv.h index fb99ce17a8ca..b62620c31f7a 100644 --- a/config/examples/BQ/Hephestos_2/Configuration_adv.h +++ b/config/examples/BQ/Hephestos_2/Configuration_adv.h @@ -1239,8 +1239,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/BQ/WITBOX/Configuration_adv.h b/config/examples/BQ/WITBOX/Configuration_adv.h index 6558554f2082..748e906a7e61 100644 --- a/config/examples/BQ/WITBOX/Configuration_adv.h +++ b/config/examples/BQ/WITBOX/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Cartesio/Configuration_adv.h b/config/examples/Cartesio/Configuration_adv.h index c5bf68b552a5..adbbc928c01a 100644 --- a/config/examples/Cartesio/Configuration_adv.h +++ b/config/examples/Cartesio/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Creality/CR-10/Configuration_adv.h b/config/examples/Creality/CR-10/Configuration_adv.h index a6d3c8599530..e685fca8e48c 100644 --- a/config/examples/Creality/CR-10/Configuration_adv.h +++ b/config/examples/Creality/CR-10/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Creality/CR-10S/Configuration_adv.h b/config/examples/Creality/CR-10S/Configuration_adv.h index 5a9ac98776f1..e1e8e30e1037 100644 --- a/config/examples/Creality/CR-10S/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Creality/CR-10_5S/Configuration_adv.h b/config/examples/Creality/CR-10_5S/Configuration_adv.h index 1948de05b3fc..d41e51c828bf 100644 --- a/config/examples/Creality/CR-10_5S/Configuration_adv.h +++ b/config/examples/Creality/CR-10_5S/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Creality/CR-10mini/Configuration_adv.h b/config/examples/Creality/CR-10mini/Configuration_adv.h index 74bf861e06dc..b48f9f2646a1 100644 --- a/config/examples/Creality/CR-10mini/Configuration_adv.h +++ b/config/examples/Creality/CR-10mini/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Creality/CR-20 Pro/Configuration_adv.h b/config/examples/Creality/CR-20 Pro/Configuration_adv.h index 1ba51c508b76..8e0e1fd51d53 100644 --- a/config/examples/Creality/CR-20 Pro/Configuration_adv.h +++ b/config/examples/Creality/CR-20 Pro/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Creality/CR-20/Configuration_adv.h b/config/examples/Creality/CR-20/Configuration_adv.h index 3cf51e822170..0fba39dfdf51 100644 --- a/config/examples/Creality/CR-20/Configuration_adv.h +++ b/config/examples/Creality/CR-20/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Creality/CR-8/Configuration_adv.h b/config/examples/Creality/CR-8/Configuration_adv.h index 5f6dbc149dfc..77e3fd2192f1 100644 --- a/config/examples/Creality/CR-8/Configuration_adv.h +++ b/config/examples/Creality/CR-8/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Creality/Ender-2/Configuration_adv.h b/config/examples/Creality/Ender-2/Configuration_adv.h index 785c161d5683..36acbb208e39 100644 --- a/config/examples/Creality/Ender-2/Configuration_adv.h +++ b/config/examples/Creality/Ender-2/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Creality/Ender-3/Configuration_adv.h b/config/examples/Creality/Ender-3/Configuration_adv.h index ce293ef3fc8e..f5285a4d545b 100644 --- a/config/examples/Creality/Ender-3/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Creality/Ender-4/Configuration_adv.h b/config/examples/Creality/Ender-4/Configuration_adv.h index 3791dc908283..4ef5f324fb81 100644 --- a/config/examples/Creality/Ender-4/Configuration_adv.h +++ b/config/examples/Creality/Ender-4/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Creality/Ender-5/Configuration_adv.h b/config/examples/Creality/Ender-5/Configuration_adv.h index 71d233421c60..3ca99e82b2a0 100644 --- a/config/examples/Creality/Ender-5/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h index 4f057bf800bd..5023cbd95c2c 100644 --- a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h +++ b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h index c6bd2bbcf030..3f54c1538fc2 100755 --- a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h +++ b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Einstart-S/Configuration_adv.h b/config/examples/Einstart-S/Configuration_adv.h index 1705be759dad..7385eb849b7a 100644 --- a/config/examples/Einstart-S/Configuration_adv.h +++ b/config/examples/Einstart-S/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/FYSETC/AIO_II/Configuration_adv.h b/config/examples/FYSETC/AIO_II/Configuration_adv.h index 5199d97e4f97..651346faf892 100644 --- a/config/examples/FYSETC/AIO_II/Configuration_adv.h +++ b/config/examples/FYSETC/AIO_II/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h index fbe0fb99668a..f0cda6502545 100644 --- a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h index fbe0fb99668a..f0cda6502545 100644 --- a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h index fbe0fb99668a..f0cda6502545 100644 --- a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h index fbe0fb99668a..f0cda6502545 100644 --- a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/FYSETC/F6_13/Configuration_adv.h b/config/examples/FYSETC/F6_13/Configuration_adv.h index 2790ca7522da..6018ab30caa3 100644 --- a/config/examples/FYSETC/F6_13/Configuration_adv.h +++ b/config/examples/FYSETC/F6_13/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Felix/Configuration_adv.h b/config/examples/Felix/Configuration_adv.h index 50e396f456b3..76416e501464 100644 --- a/config/examples/Felix/Configuration_adv.h +++ b/config/examples/Felix/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/FlashForge/CreatorPro/Configuration_adv.h b/config/examples/FlashForge/CreatorPro/Configuration_adv.h index d9365a3f2064..ac0657c29f2c 100644 --- a/config/examples/FlashForge/CreatorPro/Configuration_adv.h +++ b/config/examples/FlashForge/CreatorPro/Configuration_adv.h @@ -1230,8 +1230,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/FolgerTech/i3-2020/Configuration_adv.h b/config/examples/FolgerTech/i3-2020/Configuration_adv.h index 473de3b841b8..f4200d25a3d6 100644 --- a/config/examples/FolgerTech/i3-2020/Configuration_adv.h +++ b/config/examples/FolgerTech/i3-2020/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Formbot/Raptor/Configuration_adv.h b/config/examples/Formbot/Raptor/Configuration_adv.h index e3b1bd44bf4b..102595c3ff71 100644 --- a/config/examples/Formbot/Raptor/Configuration_adv.h +++ b/config/examples/Formbot/Raptor/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h index ca93a1217cc0..4a056163afc6 100644 --- a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h @@ -1235,8 +1235,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Formbot/T_Rex_3/Configuration_adv.h b/config/examples/Formbot/T_Rex_3/Configuration_adv.h index 4e9195ab748f..fcad7bf6518e 100644 --- a/config/examples/Formbot/T_Rex_3/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_3/Configuration_adv.h @@ -1235,8 +1235,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Geeetech/A10/Configuration_adv.h b/config/examples/Geeetech/A10/Configuration_adv.h index b9acae423403..899c563566d5 100644 --- a/config/examples/Geeetech/A10/Configuration_adv.h +++ b/config/examples/Geeetech/A10/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Geeetech/A10M/Configuration_adv.h b/config/examples/Geeetech/A10M/Configuration_adv.h index 8e3c660634f7..3cc32f29bc4e 100644 --- a/config/examples/Geeetech/A10M/Configuration_adv.h +++ b/config/examples/Geeetech/A10M/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Geeetech/A20M/Configuration_adv.h b/config/examples/Geeetech/A20M/Configuration_adv.h index 246b9d75fd34..884950a9fe35 100644 --- a/config/examples/Geeetech/A20M/Configuration_adv.h +++ b/config/examples/Geeetech/A20M/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Geeetech/MeCreator2/Configuration_adv.h b/config/examples/Geeetech/MeCreator2/Configuration_adv.h index 5fef4961cd96..2a342b40230a 100644 --- a/config/examples/Geeetech/MeCreator2/Configuration_adv.h +++ b/config/examples/Geeetech/MeCreator2/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h index b9acae423403..899c563566d5 100644 --- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h index b9acae423403..899c563566d5 100644 --- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Infitary/i3-M508/Configuration_adv.h b/config/examples/Infitary/i3-M508/Configuration_adv.h index 54e325ee2dfa..48f2f7907bd2 100644 --- a/config/examples/Infitary/i3-M508/Configuration_adv.h +++ b/config/examples/Infitary/i3-M508/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/JGAurora/A1/Configuration_adv.h b/config/examples/JGAurora/A1/Configuration_adv.h index ad939214126b..5619fcfc3dcb 100644 --- a/config/examples/JGAurora/A1/Configuration_adv.h +++ b/config/examples/JGAurora/A1/Configuration_adv.h @@ -1236,8 +1236,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/JGAurora/A5/Configuration_adv.h b/config/examples/JGAurora/A5/Configuration_adv.h index f0b1c2e8c6d4..de725956093d 100644 --- a/config/examples/JGAurora/A5/Configuration_adv.h +++ b/config/examples/JGAurora/A5/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/JGAurora/A5S/Configuration_adv.h b/config/examples/JGAurora/A5S/Configuration_adv.h index ad939214126b..5619fcfc3dcb 100644 --- a/config/examples/JGAurora/A5S/Configuration_adv.h +++ b/config/examples/JGAurora/A5S/Configuration_adv.h @@ -1236,8 +1236,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/MakerParts/Configuration_adv.h b/config/examples/MakerParts/Configuration_adv.h index 7a10c4977166..53f5435b649a 100644 --- a/config/examples/MakerParts/Configuration_adv.h +++ b/config/examples/MakerParts/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Malyan/M150/Configuration_adv.h b/config/examples/Malyan/M150/Configuration_adv.h index 182ed8c787b9..401a36c5dac9 100644 --- a/config/examples/Malyan/M150/Configuration_adv.h +++ b/config/examples/Malyan/M150/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Malyan/M200/Configuration_adv.h b/config/examples/Malyan/M200/Configuration_adv.h index 16412629c00e..a529b261674c 100644 --- a/config/examples/Malyan/M200/Configuration_adv.h +++ b/config/examples/Malyan/M200/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Micromake/C1/enhanced/Configuration_adv.h b/config/examples/Micromake/C1/enhanced/Configuration_adv.h index 9dc742bff929..a3157c6626e0 100644 --- a/config/examples/Micromake/C1/enhanced/Configuration_adv.h +++ b/config/examples/Micromake/C1/enhanced/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Mks/Robin/Configuration_adv.h b/config/examples/Mks/Robin/Configuration_adv.h index ec45f38eed0a..ad622a09c918 100644 --- a/config/examples/Mks/Robin/Configuration_adv.h +++ b/config/examples/Mks/Robin/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Mks/Sbase/Configuration_adv.h b/config/examples/Mks/Sbase/Configuration_adv.h index 847e2fe58405..765623e6f495 100644 --- a/config/examples/Mks/Sbase/Configuration_adv.h +++ b/config/examples/Mks/Sbase/Configuration_adv.h @@ -1232,8 +1232,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/RapideLite/RL200/Configuration_adv.h b/config/examples/RapideLite/RL200/Configuration_adv.h index cc48e77f63a6..a757dffd8407 100644 --- a/config/examples/RapideLite/RL200/Configuration_adv.h +++ b/config/examples/RapideLite/RL200/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/RigidBot/Configuration_adv.h b/config/examples/RigidBot/Configuration_adv.h index 0cd4a3fb54f9..e95dcbcf0e1c 100644 --- a/config/examples/RigidBot/Configuration_adv.h +++ b/config/examples/RigidBot/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/SCARA/Configuration_adv.h b/config/examples/SCARA/Configuration_adv.h index a866976f6dc2..1727b6dbcaa6 100644 --- a/config/examples/SCARA/Configuration_adv.h +++ b/config/examples/SCARA/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h index 80f9d06ddf9f..67017c5f54a7 100644 --- a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h +++ b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Sanguinololu/Configuration_adv.h b/config/examples/Sanguinololu/Configuration_adv.h index ff0a71beec97..db4d97b8ccbe 100644 --- a/config/examples/Sanguinololu/Configuration_adv.h +++ b/config/examples/Sanguinololu/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Tevo/Michelangelo/Configuration_adv.h b/config/examples/Tevo/Michelangelo/Configuration_adv.h index 451e06e58a47..a1e6c528161a 100644 --- a/config/examples/Tevo/Michelangelo/Configuration_adv.h +++ b/config/examples/Tevo/Michelangelo/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h index 33a9f5e06603..f23a9d00c52c 100755 --- a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h +++ b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h @@ -1227,8 +1227,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h index 68748ce057ae..09d5656861f7 100755 --- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h index 68748ce057ae..09d5656861f7 100755 --- a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/TheBorg/Configuration_adv.h b/config/examples/TheBorg/Configuration_adv.h index 1a3362374977..de9c92d1eeb1 100644 --- a/config/examples/TheBorg/Configuration_adv.h +++ b/config/examples/TheBorg/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/TinyBoy2/Configuration_adv.h b/config/examples/TinyBoy2/Configuration_adv.h index 8a8bd404a247..a101054d3265 100644 --- a/config/examples/TinyBoy2/Configuration_adv.h +++ b/config/examples/TinyBoy2/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Tronxy/X3A/Configuration_adv.h b/config/examples/Tronxy/X3A/Configuration_adv.h index 700700347b11..e2a8296e8546 100644 --- a/config/examples/Tronxy/X3A/Configuration_adv.h +++ b/config/examples/Tronxy/X3A/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Tronxy/X5S-2E/Configuration_adv.h b/config/examples/Tronxy/X5S-2E/Configuration_adv.h index 454a2fc16a92..1f1e28fd6510 100644 --- a/config/examples/Tronxy/X5S-2E/Configuration_adv.h +++ b/config/examples/Tronxy/X5S-2E/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/UltiMachine/Archim1/Configuration_adv.h b/config/examples/UltiMachine/Archim1/Configuration_adv.h index a270d01c2308..d940e242bd54 100644 --- a/config/examples/UltiMachine/Archim1/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim1/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/UltiMachine/Archim2/Configuration_adv.h b/config/examples/UltiMachine/Archim2/Configuration_adv.h index 9a2eabb2f34e..9ec2526cd3bc 100644 --- a/config/examples/UltiMachine/Archim2/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim2/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/VORONDesign/Configuration_adv.h b/config/examples/VORONDesign/Configuration_adv.h index 110edf17bcfa..81b4e6d5ae80 100644 --- a/config/examples/VORONDesign/Configuration_adv.h +++ b/config/examples/VORONDesign/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Velleman/K8200/Configuration_adv.h b/config/examples/Velleman/K8200/Configuration_adv.h index 9531281ce487..353fd75a9483 100644 --- a/config/examples/Velleman/K8200/Configuration_adv.h +++ b/config/examples/Velleman/K8200/Configuration_adv.h @@ -1244,8 +1244,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Velleman/K8400/Configuration_adv.h b/config/examples/Velleman/K8400/Configuration_adv.h index 91d9fea2a2a0..78a6d040a3a8 100644 --- a/config/examples/Velleman/K8400/Configuration_adv.h +++ b/config/examples/Velleman/K8400/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/WASP/PowerWASP/Configuration_adv.h b/config/examples/WASP/PowerWASP/Configuration_adv.h index e31c3f2b63c2..729314ec00fd 100644 --- a/config/examples/WASP/PowerWASP/Configuration_adv.h +++ b/config/examples/WASP/PowerWASP/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h index 44d9be6f00f0..f9d1bc3e21d7 100644 --- a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h @@ -1233,8 +1233,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h index b2686349725f..e89a50b5c0e1 100644 --- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h index 7a74e42b535b..9db9ce223767 100644 --- a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h +++ b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h @@ -1233,8 +1233,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h index cba2978e7a85..cc24bdee11b6 100644 --- a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h @@ -1233,8 +1233,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h index cba2978e7a85..cc24bdee11b6 100644 --- a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h @@ -1233,8 +1233,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h index deac5af28031..3bb34aaa85ee 100644 --- a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h +++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h @@ -1233,8 +1233,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/delta/FLSUN/kossel/Configuration_adv.h b/config/examples/delta/FLSUN/kossel/Configuration_adv.h index deac5af28031..3bb34aaa85ee 100644 --- a/config/examples/delta/FLSUN/kossel/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel/Configuration_adv.h @@ -1233,8 +1233,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h index d7a9362bf832..39a055740a3b 100644 --- a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h @@ -1233,8 +1233,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h index d71d27738a59..7407dbd76747 100644 --- a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h +++ b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h @@ -1233,8 +1233,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/delta/MKS/SBASE/Configuration_adv.h b/config/examples/delta/MKS/SBASE/Configuration_adv.h index ca8eeca02fb7..57573a12b12c 100644 --- a/config/examples/delta/MKS/SBASE/Configuration_adv.h +++ b/config/examples/delta/MKS/SBASE/Configuration_adv.h @@ -1233,8 +1233,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/delta/Tevo Little Monster/Configuration_adv.h b/config/examples/delta/Tevo Little Monster/Configuration_adv.h index 05638c27e29f..75a21310fd01 100644 --- a/config/examples/delta/Tevo Little Monster/Configuration_adv.h +++ b/config/examples/delta/Tevo Little Monster/Configuration_adv.h @@ -1233,8 +1233,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/delta/generic/Configuration_adv.h b/config/examples/delta/generic/Configuration_adv.h index d7a9362bf832..39a055740a3b 100644 --- a/config/examples/delta/generic/Configuration_adv.h +++ b/config/examples/delta/generic/Configuration_adv.h @@ -1233,8 +1233,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/delta/kossel_mini/Configuration_adv.h b/config/examples/delta/kossel_mini/Configuration_adv.h index d7a9362bf832..39a055740a3b 100644 --- a/config/examples/delta/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/kossel_mini/Configuration_adv.h @@ -1233,8 +1233,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/delta/kossel_xl/Configuration_adv.h b/config/examples/delta/kossel_xl/Configuration_adv.h index 3d93a583f34c..2224b926b853 100644 --- a/config/examples/delta/kossel_xl/Configuration_adv.h +++ b/config/examples/delta/kossel_xl/Configuration_adv.h @@ -1233,8 +1233,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/gCreate/gMax1.5+/Configuration_adv.h b/config/examples/gCreate/gMax1.5+/Configuration_adv.h index a9206c8d753f..b6e090be3c9d 100644 --- a/config/examples/gCreate/gMax1.5+/Configuration_adv.h +++ b/config/examples/gCreate/gMax1.5+/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/makibox/Configuration_adv.h b/config/examples/makibox/Configuration_adv.h index 08158a0bd5b2..03d60eceafe4 100644 --- a/config/examples/makibox/Configuration_adv.h +++ b/config/examples/makibox/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/tvrrug/Round2/Configuration_adv.h b/config/examples/tvrrug/Round2/Configuration_adv.h index 4cc7885dda9b..b28eb258c035 100644 --- a/config/examples/tvrrug/Round2/Configuration_adv.h +++ b/config/examples/tvrrug/Round2/Configuration_adv.h @@ -1231,8 +1231,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) diff --git a/config/examples/wt150/Configuration_adv.h b/config/examples/wt150/Configuration_adv.h index 46e62d1c2f8c..633ca09d8571 100644 --- a/config/examples/wt150/Configuration_adv.h +++ b/config/examples/wt150/Configuration_adv.h @@ -1232,8 +1232,12 @@ // Use a smaller font when labels don't fit buttons #define TOUCH_UI_FIT_TEXT - // Runtime language selection (otherwise LCD_LANGUAGE) - //#define TOUCH_UI_LANGUAGE_MENU + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it // Use a numeric passcode for "Screen lock" keypad. // (recommended for smaller displays) From 9c288a682dcdd3063d5cf3ccefbf6502ed0f65ff Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Wed, 25 Sep 2019 14:29:10 +0700 Subject: [PATCH 041/120] Followup to probe_at_point change (#15342) --- Marlin/src/feature/bedlevel/ubl/ubl.cpp | 4 ++-- Marlin/src/gcode/calibrate/G34_M422.cpp | 2 +- Marlin/src/module/probe.cpp | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.cpp b/Marlin/src/feature/bedlevel/ubl/ubl.cpp index 418f9df6f9f5..341436e95db5 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl.cpp @@ -177,8 +177,8 @@ serialprintPGM(csv ? PSTR("CSV:\n") : PSTR("LCD:\n")); } - // Add XY probe offset from extruder because probe_pt() subtracts them when - // moving to the xy position to be measured. This ensures better agreement between + // Add XY probe offset from extruder because probe_at_point() subtracts them when + // moving to the XY position to be measured. This ensures better agreement between // the current Z position after G28 and the mesh values. const float current_xi = find_closest_x_index(current_position[X_AXIS] + probe_offset[X_AXIS]), current_yi = find_closest_y_index(current_position[Y_AXIS] + probe_offset[Y_AXIS]); diff --git a/Marlin/src/gcode/calibrate/G34_M422.cpp b/Marlin/src/gcode/calibrate/G34_M422.cpp index e55eacdc8892..b7b366a1cf59 100644 --- a/Marlin/src/gcode/calibrate/G34_M422.cpp +++ b/Marlin/src/gcode/calibrate/G34_M422.cpp @@ -277,7 +277,7 @@ void GcodeSuite::G34() { // After this operation the z position needs correction set_axis_is_not_at_home(Z_AXIS); - // Stow the probe, as the last call to probe_pt(...) left + // Stow the probe, as the last call to probe_at_point(...) left // the probe deployed if it was successful. STOW_PROBE(); diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 777c1c9ea131..13c920082c71 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -532,7 +532,7 @@ static bool do_probe_move(const float z, const float fr_mm_s) { /** * @brief Probe at the current XY (possibly more than once) to find the bed Z. * - * @details Used by probe_pt to get the bed Z height at the current XY. + * @details Used by probe_at_point to get the bed Z height at the current XY. * Leaves current_position[Z_AXIS] at the height where the probe triggered. * * @return The Z position of the bed at the current XY or NAN on error. @@ -686,7 +686,7 @@ static float run_z_probe() { float probe_at_point(const float &rx, const float &ry, const ProbePtRaise raise_after/*=PROBE_PT_NONE*/, const uint8_t verbose_level/*=0*/, const bool probe_relative/*=true*/) { if (DEBUGGING(LEVELING)) { DEBUG_ECHOLNPAIR( - ">>> probe_pt(", LOGICAL_X_POSITION(rx), ", ", LOGICAL_Y_POSITION(ry), + ">>> probe_at_point(", LOGICAL_X_POSITION(rx), ", ", LOGICAL_Y_POSITION(ry), ", ", raise_after == PROBE_PT_RAISE ? "raise" : raise_after == PROBE_PT_STOW ? "stow" : "none", ", ", int(verbose_level), ", ", probe_relative ? "probe" : "nozzle", "_relative)" @@ -743,7 +743,7 @@ float probe_at_point(const float &rx, const float &ry, const ProbePtRaise raise_ SERIAL_ERROR_MSG(MSG_ERR_PROBING_FAILED); } - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< probe_pt"); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< probe_at_point"); return measured_z; } From 66d02210774e6e650d0ccebf929ccda94d930cf1 Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Wed, 25 Sep 2019 00:30:07 -0700 Subject: [PATCH 042/120] Fix build with more than 2 Trinamic E steppers (#15329) --- Marlin/src/module/stepper/trinamic.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Marlin/src/module/stepper/trinamic.h b/Marlin/src/module/stepper/trinamic.h index 7fd50449d8cc..8c6e9c21aa05 100644 --- a/Marlin/src/module/stepper/trinamic.h +++ b/Marlin/src/module/stepper/trinamic.h @@ -181,7 +181,7 @@ void reset_trinamic_drivers(); // E2 Stepper #if AXIS_IS_TMC(E2) - extern TMC_CLASS_E(1) stepperE2; + extern TMC_CLASS_E(2) stepperE2; #if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E2) #define E2_ENABLE_INIT NOOP #define E2_ENABLE_WRITE(STATE) stepperE2.toff((STATE)==E_ENABLE_ON ? chopper_timing.toff : 0) @@ -194,7 +194,7 @@ void reset_trinamic_drivers(); // E3 Stepper #if AXIS_IS_TMC(E3) - extern TMC_CLASS_E(1) stepperE3; + extern TMC_CLASS_E(3) stepperE3; #if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E3) #define E3_ENABLE_INIT NOOP #define E3_ENABLE_WRITE(STATE) stepperE3.toff((STATE)==E_ENABLE_ON ? chopper_timing.toff : 0) @@ -207,7 +207,7 @@ void reset_trinamic_drivers(); // E4 Stepper #if AXIS_IS_TMC(E4) - extern TMC_CLASS_E(1) stepperE4; + extern TMC_CLASS_E(4) stepperE4; #if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E4) #define E4_ENABLE_INIT NOOP #define E4_ENABLE_WRITE(STATE) stepperE4.toff((STATE)==E_ENABLE_ON ? chopper_timing.toff : 0) @@ -220,7 +220,7 @@ void reset_trinamic_drivers(); // E5 Stepper #if AXIS_IS_TMC(E5) - extern TMC_CLASS_E(1) stepperE5; + extern TMC_CLASS_E(5) stepperE5; #if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E5) #define E5_ENABLE_INIT NOOP #define E5_ENABLE_WRITE(STATE) stepperE5.toff((STATE)==E_ENABLE_ON ? chopper_timing.toff : 0) From e9cf46a9a5d0f6aa5521497d25aab5ff4e12399c Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Wed, 25 Sep 2019 03:43:41 -0400 Subject: [PATCH 043/120] M851 XY 3 point followup (incomplete) (#15361) --- Marlin/Configuration.h | 13 --- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 93 +++++++++++-------- Marlin/src/gcode/bedlevel/abl/G29.cpp | 7 +- Marlin/src/inc/Conditionals_post.h | 63 +------------ Marlin/src/inc/SanityCheck.h | 28 ++---- buildroot/share/tests/LPC1769-tests | 8 +- config/default/Configuration.h | 13 --- .../examples/3DFabXYZ/Migbot/Configuration.h | 13 --- .../ADIMLab/Gantry v1/Configuration.h | 13 --- .../ADIMLab/Gantry v2/Configuration.h | 13 --- .../AlephObjects/TAZ4/Configuration.h | 13 --- .../Alfawise/U20-bltouch/Configuration.h | 13 --- config/examples/Alfawise/U20/Configuration.h | 13 --- .../AliExpress/CL-260/Configuration.h | 13 --- .../AliExpress/UM2pExt/Configuration.h | 13 --- config/examples/Anet/A2/Configuration.h | 13 --- config/examples/Anet/A2plus/Configuration.h | 13 --- config/examples/Anet/A6/Configuration.h | 13 --- config/examples/Anet/A8plus/Configuration.h | 13 --- config/examples/Anet/E16/Configuration.h | 13 --- config/examples/AnyCubic/i3/Configuration.h | 13 --- config/examples/ArmEd/Configuration.h | 13 --- config/examples/Azteeg/X5GT/Configuration.h | 13 --- .../BIBO/TouchX/cyclops/Configuration.h | 13 --- .../BIBO/TouchX/default/Configuration.h | 13 --- config/examples/BQ/Hephestos/Configuration.h | 13 --- .../examples/BQ/Hephestos_2/Configuration.h | 13 --- config/examples/BQ/WITBOX/Configuration.h | 13 --- config/examples/Cartesio/Configuration.h | 13 --- .../examples/Creality/CR-10/Configuration.h | 13 --- .../examples/Creality/CR-10S/Configuration.h | 13 --- .../Creality/CR-10_5S/Configuration.h | 13 --- .../Creality/CR-10mini/Configuration.h | 13 --- .../Creality/CR-20 Pro/Configuration.h | 13 --- .../examples/Creality/CR-20/Configuration.h | 13 --- config/examples/Creality/CR-8/Configuration.h | 13 --- .../examples/Creality/Ender-2/Configuration.h | 13 --- .../examples/Creality/Ender-3/Configuration.h | 13 --- .../examples/Creality/Ender-4/Configuration.h | 13 --- .../examples/Creality/Ender-5/Configuration.h | 13 --- .../Dagoma/Disco Ultimate/Configuration.h | 13 --- .../Sidewinder X1/Configuration.h | 13 --- config/examples/Einstart-S/Configuration.h | 13 --- config/examples/FYSETC/AIO_II/Configuration.h | 13 --- .../Cheetah 1.2/BLTouch/Configuration.h | 13 --- .../FYSETC/Cheetah 1.2/base/Configuration.h | 13 --- .../FYSETC/Cheetah/BLTouch/Configuration.h | 13 --- .../FYSETC/Cheetah/base/Configuration.h | 13 --- config/examples/FYSETC/F6_13/Configuration.h | 13 --- config/examples/Felix/Configuration.h | 13 --- config/examples/Felix/DUAL/Configuration.h | 13 --- .../FlashForge/CreatorPro/Configuration.h | 13 --- config/examples/Geeetech/A10/Configuration.h | 13 --- config/examples/Geeetech/A10M/Configuration.h | 13 --- config/examples/Geeetech/A20M/Configuration.h | 13 --- .../examples/Geeetech/GT2560/Configuration.h | 13 --- .../Geeetech/I3_Pro_X-GT2560/Configuration.h | 13 --- .../Geeetech/MeCreator2/Configuration.h | 13 --- .../Prusa i3 Pro B/bltouch/Configuration.h | 13 --- .../Prusa i3 Pro B/noprobe/Configuration.h | 13 --- .../Geeetech/Prusa i3 Pro C/Configuration.h | 13 --- .../Geeetech/Prusa i3 Pro W/Configuration.h | 13 --- config/examples/HMS434/Configuration.h | 13 --- .../examples/Infitary/i3-M508/Configuration.h | 13 --- config/examples/JGAurora/A1/Configuration.h | 13 --- config/examples/JGAurora/A5/Configuration.h | 13 --- config/examples/JGAurora/A5S/Configuration.h | 13 --- config/examples/MakerParts/Configuration.h | 13 --- config/examples/Malyan/M200/Configuration.h | 13 --- .../Micromake/C1/basic/Configuration.h | 13 --- .../Micromake/C1/enhanced/Configuration.h | 13 --- config/examples/Mks/Robin/Configuration.h | 13 --- config/examples/Mks/Sbase/Configuration.h | 13 --- .../Printrbot/PrintrboardG2/Configuration.h | 13 --- .../examples/RapideLite/RL200/Configuration.h | 13 --- .../examples/RepRapPro/Huxley/Configuration.h | 13 --- .../RepRapWorld/Megatronics/Configuration.h | 13 --- config/examples/RigidBot/Configuration.h | 13 --- config/examples/SCARA/Configuration.h | 13 --- .../STM32/Black_STM32F407VET6/Configuration.h | 13 --- .../examples/STM32/STM32F103R/Configuration.h | 13 --- config/examples/STM32/STM32F4/Configuration.h | 13 --- .../STM32/stm32f103ret6/Configuration.h | 13 --- config/examples/Sanguinololu/Configuration.h | 13 --- .../Tevo/Michelangelo/Configuration.h | 13 --- .../Tevo/Tarantula Pro/Configuration.h | 13 --- .../Tornado/V1 (MKS Base)/Configuration.h | 13 --- .../Tornado/V2 (MKS GEN-L)/Configuration.h | 13 --- config/examples/TheBorg/Configuration.h | 13 --- config/examples/TinyBoy2/Configuration.h | 13 --- config/examples/Tronxy/X1/Configuration.h | 13 --- config/examples/Tronxy/X3A/Configuration.h | 13 --- config/examples/Tronxy/X5S-2E/Configuration.h | 13 --- config/examples/Tronxy/X5S/Configuration.h | 13 --- config/examples/Tronxy/XY100/Configuration.h | 13 --- .../UltiMachine/Archim1/Configuration.h | 13 --- .../UltiMachine/Archim2/Configuration.h | 13 --- config/examples/VORONDesign/Configuration.h | 13 --- .../examples/Velleman/K8200/Configuration.h | 13 --- .../examples/Velleman/K8400/Configuration.h | 13 --- .../Velleman/K8400/Dual-head/Configuration.h | 13 --- .../examples/WASP/PowerWASP/Configuration.h | 13 --- .../Wanhao/Duplicator 6/Configuration.h | 13 --- .../Wanhao/Duplicator i3 Mini/Configuration.h | 13 --- .../examples/adafruit/ST7565/Configuration.h | 13 --- .../delta/Dreammaker/Overlord/Configuration.h | 13 --- .../Dreammaker/Overlord_Pro/Configuration.h | 13 --- .../FLSUN/auto_calibrate/Configuration.h | 13 --- .../delta/FLSUN/kossel/Configuration.h | 13 --- .../delta/FLSUN/kossel_mini/Configuration.h | 13 --- .../Geeetech/Rostock 301/Configuration.h | 13 --- .../examples/delta/MKS/SBASE/Configuration.h | 13 --- .../delta/Tevo Little Monster/Configuration.h | 13 --- config/examples/delta/generic/Configuration.h | 13 --- .../delta/kossel_mini/Configuration.h | 13 --- .../examples/delta/kossel_pro/Configuration.h | 13 --- .../examples/delta/kossel_xl/Configuration.h | 13 --- config/examples/makibox/Configuration.h | 13 --- config/examples/tvrrug/Round2/Configuration.h | 13 --- config/examples/wt150/Configuration.h | 13 --- 120 files changed, 72 insertions(+), 1622 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 5935f992691e..16f1ca68005c 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index 253c9159adb7..9e2904277899 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -1381,6 +1381,8 @@ #if HAS_BED_PROBE + //#define VALIDATE_MESH_TILT + #include "../../../libs/vector_3.h" void unified_bed_leveling::tilt_mesh_based_on_probed_grid(const bool do_3_pt_leveling) { @@ -1392,7 +1394,9 @@ float measured_z; bool abort_flag = false; - //float z1, z2, z3; // Needed for algorithm validation below + #ifdef VALIDATE_MESH_TILT + float z1, z2, z3; // Needed for algorithm validation below + #endif struct linear_fit_data lsf_results; incremental_LSF_reset(&lsf_results); @@ -1403,17 +1407,19 @@ ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 1/3")); #endif - measured_z = probe_at_point(PROBE_PT_1_X, PROBE_PT_1_Y, PROBE_PT_RAISE, g29_verbose_level); + measured_z = probe_at_point(x_min, y_min, PROBE_PT_RAISE, g29_verbose_level); if (isnan(measured_z)) abort_flag = true; else { - measured_z -= get_z_correction(PROBE_PT_1_X, PROBE_PT_1_Y); - //z1 = measured_z; + measured_z -= get_z_correction(x_min, y_min); + #ifdef VALIDATE_MESH_TILT + z1 = measured_z; + #endif if (g29_verbose_level > 3) { serial_spaces(16); SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z); } - incremental_LSF(&lsf_results, PROBE_PT_1_X, PROBE_PT_1_Y, measured_z); + incremental_LSF(&lsf_results, x_min, y_min, measured_z); } if (!abort_flag) { @@ -1422,17 +1428,19 @@ ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 2/3")); #endif - measured_z = probe_at_point(PROBE_PT_2_X, PROBE_PT_2_Y, PROBE_PT_RAISE, g29_verbose_level); - //z2 = measured_z; + measured_z = probe_at_point(x_max, y_min, PROBE_PT_RAISE, g29_verbose_level); + #ifdef VALIDATE_MESH_TILT + z2 = measured_z; + #endif if (isnan(measured_z)) abort_flag = true; else { - measured_z -= get_z_correction(PROBE_PT_2_X, PROBE_PT_2_Y); + measured_z -= get_z_correction(x_max, y_min); if (g29_verbose_level > 3) { serial_spaces(16); SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z); } - incremental_LSF(&lsf_results, PROBE_PT_2_X, PROBE_PT_2_Y, measured_z); + incremental_LSF(&lsf_results, x_max, y_min, measured_z); } } @@ -1442,17 +1450,20 @@ ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 3/3")); #endif - measured_z = probe_at_point(PROBE_PT_3_X, PROBE_PT_3_Y, PROBE_PT_STOW, g29_verbose_level); - //z3 = measured_z; + const float center_probe = (x_max - x_min) / 2; + measured_z = probe_at_point(center_probe, y_max, PROBE_PT_STOW, g29_verbose_level); + #ifdef VALIDATE_MESH_TILT + z3 = measured_z; + #endif if (isnan(measured_z)) abort_flag = true; else { - measured_z -= get_z_correction(PROBE_PT_3_X, PROBE_PT_3_Y); + measured_z -= get_z_correction(center_probe, y_max); if (g29_verbose_level > 3) { serial_spaces(16); SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z); } - incremental_LSF(&lsf_results, PROBE_PT_3_X, PROBE_PT_3_Y, measured_z); + incremental_LSF(&lsf_results, center_probe, y_max, measured_z); } } @@ -1598,34 +1609,34 @@ * is calculated. The Z error between the probed point locations and the get_z_correction() * numbers for those locations should be 0. */ - #if 0 - float t, t1, d; - t = normal.x * (PROBE_PT_1_X) + normal.y * (PROBE_PT_1_Y); - d = t + normal.z * z1; - DEBUG_ECHOPAIR_F("D from 1st point: ", d, 6); - DEBUG_ECHOLNPAIR_F(" Z error: ", normal.z*z1-get_z_correction(PROBE_PT_1_X, PROBE_PT_1_Y), 6); - - t = normal.x * (PROBE_PT_2_X) + normal.y * (PROBE_PT_2_Y); - d = t + normal.z * z2; - DEBUG_EOL(); - DEBUG_ECHOPAIR_F("D from 2nd point: ", d, 6); - DEBUG_ECHOLNPAIR_F(" Z error: ", normal.z*z2-get_z_correction(PROBE_PT_2_X, PROBE_PT_2_Y), 6); - - t = normal.x * (PROBE_PT_3_X) + normal.y * (PROBE_PT_3_Y); - d = t + normal.z * z3; - DEBUG_ECHOPAIR_F("D from 3rd point: ", d, 6); - DEBUG_ECHOLNPAIR_F(" Z error: ", normal.z*z3-get_z_correction(PROBE_PT_3_X, PROBE_PT_3_Y), 6); - - t = normal.x * (Z_SAFE_HOMING_X_POINT) + normal.y * (Z_SAFE_HOMING_Y_POINT); - d = t + normal.z * 0; - DEBUG_ECHOLNPAIR_F("D from home location with Z=0 : ", d, 6); - - t = normal.x * (Z_SAFE_HOMING_X_POINT) + normal.y * (Z_SAFE_HOMING_Y_POINT); - d = t + get_z_correction(Z_SAFE_HOMING_X_POINT, Z_SAFE_HOMING_Y_POINT); // normal.z * 0; - DEBUG_ECHOPAIR_F("D from home location using mesh value for Z: ", d, 6); - - DEBUG_ECHOPAIR(" Z error: (", Z_SAFE_HOMING_X_POINT, ",", Z_SAFE_HOMING_Y_POINT); - DEBUG_ECHOLNPAIR_F(") = ", get_z_correction(Z_SAFE_HOMING_X_POINT, Z_SAFE_HOMING_Y_POINT), 6); + #ifdef VALIDATE_MESH_TILT + float t, t1, d; + t = normal.x * x_min + normal.y * y_min; + d = t + normal.z * z1; + DEBUG_ECHOPAIR_F("D from 1st point: ", d, 6); + DEBUG_ECHOLNPAIR_F(" Z error: ", normal.z * z1 - get_z_correction(x_min, y_min), 6); + + t = normal.x * x_max + normal.y * y_min; + d = t + normal.z * z2; + DEBUG_EOL(); + DEBUG_ECHOPAIR_F("D from 2nd point: ", d, 6); + DEBUG_ECHOLNPAIR_F(" Z error: ", normal.z * z2 - get_z_correction(x_max, y_min), 6); + + t = normal.x * ((x_max - x_min) / 2) + normal.y * (y_min); + d = t + normal.z * z3; + DEBUG_ECHOPAIR_F("D from 3rd point: ", d, 6); + DEBUG_ECHOLNPAIR_F(" Z error: ", normal.z * z3 - get_z_correction((x_max - x_min) / 2, y_max), 6); + + t = normal.x * (Z_SAFE_HOMING_X_POINT) + normal.y * (Z_SAFE_HOMING_Y_POINT); + d = t + normal.z * 0; + DEBUG_ECHOLNPAIR_F("D from home location with Z=0 : ", d, 6); + + t = normal.x * (Z_SAFE_HOMING_X_POINT) + normal.y * (Z_SAFE_HOMING_Y_POINT); + d = t + get_z_correction(Z_SAFE_HOMING_X_POINT, Z_SAFE_HOMING_Y_POINT); // normal.z * 0; + DEBUG_ECHOPAIR_F("D from home location using mesh value for Z: ", d, 6); + + DEBUG_ECHOPAIR(" Z error: (", Z_SAFE_HOMING_X_POINT, ",", Z_SAFE_HOMING_Y_POINT); + DEBUG_ECHOLNPAIR_F(") = ", get_z_correction(Z_SAFE_HOMING_X_POINT, Z_SAFE_HOMING_Y_POINT), 6); #endif } // DEBUGGING(LEVELING) diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 01c0cd19b478..584d3a11c63a 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -266,10 +266,11 @@ G29_TYPE GcodeSuite::G29() { #endif // Probe at 3 arbitrary points + const float x_min = probe_min_x(), x_max = probe_max_x(), y_min = probe_min_y(), y_max = probe_max_y(); ABL_VAR vector_3 points[3] = { - vector_3(PROBE_PT_1_X, PROBE_PT_1_Y, 0), - vector_3(PROBE_PT_2_X, PROBE_PT_2_Y, 0), - vector_3(PROBE_PT_3_X, PROBE_PT_3_Y, 0) + vector_3(x_min, y_min, 0), + vector_3(x_max, y_min, 0), + vector_3((x_max - x_min) / 2, y_max, 0) }; #endif // AUTO_BED_LEVELING_3POINT diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index fb769149530c..440ff4e6a909 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -200,6 +200,10 @@ #undef SLOWDOWN #endif +#ifndef MESH_INSET + #define MESH_INSET 0 +#endif + /** * Safe Homing Options */ @@ -1490,15 +1494,6 @@ constexpr float nozzle_to_probe_offset[XYZ] = NOZZLE_TO_PROBE_OFFSET; #define PROBE_Y_MIN (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MIN_PROBE_EDGE) #define PROBE_X_MAX (X_CENTER + SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) #define PROBE_Y_MAX (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - -#else - - // Boundaries for Cartesian probing based on bed limits - #define PROBE_X_MIN (_MAX(X_MIN_BED + MIN_PROBE_EDGE, X_MIN_POS + nozzle_to_probe_offset[X_AXIS])) - #define PROBE_Y_MIN (_MAX(Y_MIN_BED + MIN_PROBE_EDGE, Y_MIN_POS + nozzle_to_probe_offset[Y_AXIS])) - #define PROBE_X_MAX (_MIN(X_MAX_BED - (MIN_PROBE_EDGE), X_MAX_POS + nozzle_to_probe_offset[X_AXIS])) - #define PROBE_Y_MAX (_MIN(Y_MAX_BED - (MIN_PROBE_EDGE), Y_MAX_POS + nozzle_to_probe_offset[Y_AXIS])) - #endif #if ENABLED(SEGMENT_LEVELED_MOVES) && !defined(LEVELED_SEGMENT_LENGTH) @@ -1508,7 +1503,7 @@ constexpr float nozzle_to_probe_offset[XYZ] = NOZZLE_TO_PROBE_OFFSET; /** * Default mesh area is an area with an inset margin on the print area. */ -#if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) +#if ANY(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL, AUTO_BED_LEVELING_BILINEAR) #if IS_KINEMATIC // Probing points may be verified at compile time within the radius // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!") @@ -1548,54 +1543,6 @@ constexpr float nozzle_to_probe_offset[XYZ] = NOZZLE_TO_PROBE_OFFSET; #endif // MESH_BED_LEVELING || AUTO_BED_LEVELING_UBL -#if EITHER(AUTO_BED_LEVELING_UBL, AUTO_BED_LEVELING_3POINT) - #if IS_KINEMATIC - #define SIN0 0.0 - #define SIN120 0.866025 - #define SIN240 -0.866025 - #define COS0 1.0 - #define COS120 -0.5 - #define COS240 -0.5 - #ifndef PROBE_PT_1_X - #define PROBE_PT_1_X (X_CENTER + (_PROBE_RADIUS) * COS0) - #endif - #ifndef PROBE_PT_1_Y - #define PROBE_PT_1_Y (Y_CENTER + (_PROBE_RADIUS) * SIN0) - #endif - #ifndef PROBE_PT_2_X - #define PROBE_PT_2_X (X_CENTER + (_PROBE_RADIUS) * COS120) - #endif - #ifndef PROBE_PT_2_Y - #define PROBE_PT_2_Y (Y_CENTER + (_PROBE_RADIUS) * SIN120) - #endif - #ifndef PROBE_PT_3_X - #define PROBE_PT_3_X (X_CENTER + (_PROBE_RADIUS) * COS240) - #endif - #ifndef PROBE_PT_3_Y - #define PROBE_PT_3_Y (Y_CENTER + (_PROBE_RADIUS) * SIN240) - #endif - #else - #ifndef PROBE_PT_1_X - #define PROBE_PT_1_X PROBE_X_MIN - #endif - #ifndef PROBE_PT_1_Y - #define PROBE_PT_1_Y PROBE_Y_MIN - #endif - #ifndef PROBE_PT_2_X - #define PROBE_PT_2_X PROBE_X_MAX - #endif - #ifndef PROBE_PT_2_Y - #define PROBE_PT_2_Y PROBE_Y_MIN - #endif - #ifndef PROBE_PT_3_X - #define PROBE_PT_3_X X_CENTER - #endif - #ifndef PROBE_PT_3_Y - #define PROBE_PT_3_Y PROBE_Y_MAX - #endif - #endif -#endif - /** * Buzzer/Speaker */ diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 02d3b5ad89ad..55ff76efb675 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -248,9 +248,11 @@ #elif defined(UBL_MESH_MIN_X) || defined(UBL_MESH_MIN_Y) || defined(UBL_MESH_MAX_X) || defined(UBL_MESH_MAX_Y) #error "UBL_MESH_(MIN|MAX)_[XY] is now just MESH_(MIN|MAX)_[XY]. Please update your configuration." #elif defined(ABL_PROBE_PT_1_X) || defined(ABL_PROBE_PT_1_Y) || defined(ABL_PROBE_PT_2_X) || defined(ABL_PROBE_PT_2_Y) || defined(ABL_PROBE_PT_3_X) || defined(ABL_PROBE_PT_3_Y) - #error "ABL_PROBE_PT_[123]_[XY] is now PROBE_PT_[123]_[XY]. Please update your configuration." + #error "ABL_PROBE_PT_[123]_[XY] is no longer required. Please remove it from Configuration.h." #elif defined(UBL_PROBE_PT_1_X) || defined(UBL_PROBE_PT_1_Y) || defined(UBL_PROBE_PT_2_X) || defined(UBL_PROBE_PT_2_Y) || defined(UBL_PROBE_PT_3_X) || defined(UBL_PROBE_PT_3_Y) - #error "UBL_PROBE_PT_[123]_[XY] is now PROBE_PT_[123]_[XY]. Please update your configuration." + #error "UBL_PROBE_PT_[123]_[XY] is no longer required. Please remove it from Configuration.h." +#elif defined(PROBE_PT_1_X) || defined(PROBE_PT_1_Y) || defined(PROBE_PT_2_X) || defined(PROBE_PT_2_Y) || defined(PROBE_PT_3_X) || defined(PROBE_PT_3_Y) + #error "PROBE_PT_[123]_[XY] is no longer required. Please remove it from Configuration.h." #elif defined(ENABLE_MESH_EDIT_GFX_OVERLAY) #error "ENABLE_MESH_EDIT_GFX_OVERLAY is now MESH_EDIT_GFX_OVERLAY. Please update your configuration." #elif defined(BABYSTEP_ZPROBE_GFX_REVERSE) @@ -1206,19 +1208,6 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS * Bed Leveling Requirements */ -// -// !! TODO: REPLACE WITH TESTS IN THE 3-POINT LEVELING CODE !! -// - -//#if EITHER(AUTO_BED_LEVELING_UBL, AUTO_BED_LEVELING_3POINT) -// static_assert(WITHIN(PROBE_PT_1_X, PROBE_X_MIN, PROBE_X_MAX), "PROBE_PT_1_X is outside the probe region."); -// static_assert(WITHIN(PROBE_PT_2_X, PROBE_X_MIN, PROBE_X_MAX), "PROBE_PT_2_X is outside the probe region."); -// static_assert(WITHIN(PROBE_PT_3_X, PROBE_X_MIN, PROBE_X_MAX), "PROBE_PT_3_X is outside the probe region."); -// static_assert(WITHIN(PROBE_PT_1_Y, PROBE_Y_MIN, PROBE_Y_MAX), "PROBE_PT_1_Y is outside the probe region."); -// static_assert(WITHIN(PROBE_PT_2_Y, PROBE_Y_MIN, PROBE_Y_MAX), "PROBE_PT_2_Y is outside the probe region."); -// static_assert(WITHIN(PROBE_PT_3_Y, PROBE_Y_MIN, PROBE_Y_MAX), "PROBE_PT_3_Y is outside the probe region."); -//#endif - #if ENABLED(AUTO_BED_LEVELING_UBL) /** @@ -1318,12 +1307,9 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS * Make sure Z_SAFE_HOMING point is reachable */ #if ENABLED(Z_SAFE_HOMING) - #if HAS_BED_PROBE - // - // !! TODO: REPLACE WITH TESTS IN THE Z_SAFE_HOMING CODE !! - // - //static_assert(WITHIN(Z_SAFE_HOMING_X_POINT, PROBE_X_MIN, PROBE_X_MAX), "Z_SAFE_HOMING_X_POINT is outside the probe region."); - //static_assert(WITHIN(Z_SAFE_HOMING_Y_POINT, PROBE_Y_MIN, PROBE_Y_MAX), "Z_SAFE_HOMING_Y_POINT is outside the probe region."); + #if HAS_BED_PROBE && (ENABLED(DELTA) || IS_SCARA) + static_assert(WITHIN(Z_SAFE_HOMING_X_POINT, PROBE_X_MIN, PROBE_X_MAX), "Z_SAFE_HOMING_X_POINT is outside the probe region."); + static_assert(WITHIN(Z_SAFE_HOMING_Y_POINT, PROBE_Y_MIN, PROBE_Y_MAX), "Z_SAFE_HOMING_Y_POINT is outside the probe region."); #else static_assert(WITHIN(Z_SAFE_HOMING_X_POINT, X_MIN_POS, X_MAX_POS), "Z_SAFE_HOMING_X_POINT can't be reached by the nozzle."); static_assert(WITHIN(Z_SAFE_HOMING_Y_POINT, Y_MIN_POS, Y_MAX_POS), "Z_SAFE_HOMING_Y_POINT can't be reached by the nozzle."); diff --git a/buildroot/share/tests/LPC1769-tests b/buildroot/share/tests/LPC1769-tests index e993f864921e..8e23551dd4cb 100755 --- a/buildroot/share/tests/LPC1769-tests +++ b/buildroot/share/tests/LPC1769-tests @@ -44,13 +44,13 @@ exec_test $1 $2 "Smoothieboard with many features" restore_configs use_example_configs delta/generic opt_set MOTHERBOARD BOARD_COHESION3D_REMIX -opt_enable AUTO_BED_LEVELING_BILINEAR EEPROM_SETTINGS EEPROM_CHITCHAT BAUD_RATE_GCODE -opt_disable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN opt_set X_DRIVER_TYPE TMC2130 opt_set Y_DRIVER_TYPE TMC2130 opt_set Z_DRIVER_TYPE TMC2130 -opt_enable TMC_USE_SW_SPI MONITOR_DRIVER_STATUS STEALTHCHOP_XY STEALTHCHOP_Z HYBRID_THRESHOLD TMC_DEBUG \ - SENSORLESS_PROBING X_STALL_SENSITIVITY Y_STALL_SENSITIVITY Z_STALL_SENSITIVITY +opt_enable AUTO_BED_LEVELING_BILINEAR EEPROM_SETTINGS EEPROM_CHITCHAT BAUD_RATE_GCODE \ + TMC_USE_SW_SPI MONITOR_DRIVER_STATUS STEALTHCHOP_XY STEALTHCHOP_Z HYBRID_THRESHOLD \ + SENSORLESS_PROBING X_STALL_SENSITIVITY Y_STALL_SENSITIVITY Z_STALL_SENSITIVITY TMC_DEBUG +opt_disable Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN exec_test $1 $2 "Cohesion3D Remix DELTA + ABL Bilinear + EEPROM + SENSORLESS_PROBING" # clean up diff --git a/config/default/Configuration.h b/config/default/Configuration.h index 5935f992691e..16f1ca68005c 100644 --- a/config/default/Configuration.h +++ b/config/default/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/3DFabXYZ/Migbot/Configuration.h b/config/examples/3DFabXYZ/Migbot/Configuration.h index 544e4f3de3b3..02e2735ec095 100644 --- a/config/examples/3DFabXYZ/Migbot/Configuration.h +++ b/config/examples/3DFabXYZ/Migbot/Configuration.h @@ -1257,19 +1257,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/ADIMLab/Gantry v1/Configuration.h b/config/examples/ADIMLab/Gantry v1/Configuration.h index 59e3078ee971..9456800d83ef 100644 --- a/config/examples/ADIMLab/Gantry v1/Configuration.h +++ b/config/examples/ADIMLab/Gantry v1/Configuration.h @@ -1252,19 +1252,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/ADIMLab/Gantry v2/Configuration.h b/config/examples/ADIMLab/Gantry v2/Configuration.h index d04e81725e74..9be12ff0cad7 100644 --- a/config/examples/ADIMLab/Gantry v2/Configuration.h +++ b/config/examples/ADIMLab/Gantry v2/Configuration.h @@ -1252,19 +1252,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/AlephObjects/TAZ4/Configuration.h b/config/examples/AlephObjects/TAZ4/Configuration.h index 15369a2f849b..777eb8e5ff48 100644 --- a/config/examples/AlephObjects/TAZ4/Configuration.h +++ b/config/examples/AlephObjects/TAZ4/Configuration.h @@ -1271,19 +1271,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Alfawise/U20-bltouch/Configuration.h b/config/examples/Alfawise/U20-bltouch/Configuration.h index 3ef58dd294c3..00f1ece40f76 100644 --- a/config/examples/Alfawise/U20-bltouch/Configuration.h +++ b/config/examples/Alfawise/U20-bltouch/Configuration.h @@ -1330,19 +1330,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Alfawise/U20/Configuration.h b/config/examples/Alfawise/U20/Configuration.h index ccba80b6fd18..9186d0c843c3 100644 --- a/config/examples/Alfawise/U20/Configuration.h +++ b/config/examples/Alfawise/U20/Configuration.h @@ -1330,19 +1330,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/AliExpress/CL-260/Configuration.h b/config/examples/AliExpress/CL-260/Configuration.h index 2fe120703124..342b6b94ee77 100644 --- a/config/examples/AliExpress/CL-260/Configuration.h +++ b/config/examples/AliExpress/CL-260/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/AliExpress/UM2pExt/Configuration.h b/config/examples/AliExpress/UM2pExt/Configuration.h index f54ba9cf9bb1..d24c75cdc92a 100644 --- a/config/examples/AliExpress/UM2pExt/Configuration.h +++ b/config/examples/AliExpress/UM2pExt/Configuration.h @@ -1262,19 +1262,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Anet/A2/Configuration.h b/config/examples/Anet/A2/Configuration.h index ef7e44b66c74..1a6c4b37f014 100644 --- a/config/examples/Anet/A2/Configuration.h +++ b/config/examples/Anet/A2/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Anet/A2plus/Configuration.h b/config/examples/Anet/A2plus/Configuration.h index 35b21bc2d0a3..8ef0e7b11b25 100644 --- a/config/examples/Anet/A2plus/Configuration.h +++ b/config/examples/Anet/A2plus/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Anet/A6/Configuration.h b/config/examples/Anet/A6/Configuration.h index 3de2a9b466b1..8122d4cd19c7 100644 --- a/config/examples/Anet/A6/Configuration.h +++ b/config/examples/Anet/A6/Configuration.h @@ -1356,19 +1356,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Anet/A8plus/Configuration.h b/config/examples/Anet/A8plus/Configuration.h index 188a3a1de42b..06aee7111b2a 100644 --- a/config/examples/Anet/A8plus/Configuration.h +++ b/config/examples/Anet/A8plus/Configuration.h @@ -1262,19 +1262,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Anet/E16/Configuration.h b/config/examples/Anet/E16/Configuration.h index 2c39c847c011..487ab36a57e8 100644 --- a/config/examples/Anet/E16/Configuration.h +++ b/config/examples/Anet/E16/Configuration.h @@ -1263,19 +1263,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/AnyCubic/i3/Configuration.h b/config/examples/AnyCubic/i3/Configuration.h index a3a085700641..e5f96e0d975b 100644 --- a/config/examples/AnyCubic/i3/Configuration.h +++ b/config/examples/AnyCubic/i3/Configuration.h @@ -1261,19 +1261,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/ArmEd/Configuration.h b/config/examples/ArmEd/Configuration.h index 8521531a0e37..05436cb482de 100644 --- a/config/examples/ArmEd/Configuration.h +++ b/config/examples/ArmEd/Configuration.h @@ -1252,19 +1252,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Azteeg/X5GT/Configuration.h b/config/examples/Azteeg/X5GT/Configuration.h index 695392815b88..12574f07b883 100644 --- a/config/examples/Azteeg/X5GT/Configuration.h +++ b/config/examples/Azteeg/X5GT/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration.h b/config/examples/BIBO/TouchX/cyclops/Configuration.h index bbd7bd15bb13..e9995f707a68 100644 --- a/config/examples/BIBO/TouchX/cyclops/Configuration.h +++ b/config/examples/BIBO/TouchX/cyclops/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/BIBO/TouchX/default/Configuration.h b/config/examples/BIBO/TouchX/default/Configuration.h index dc4ec2334119..3cde043a460d 100644 --- a/config/examples/BIBO/TouchX/default/Configuration.h +++ b/config/examples/BIBO/TouchX/default/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/BQ/Hephestos/Configuration.h b/config/examples/BQ/Hephestos/Configuration.h index b39ed5eca146..045c0698d512 100644 --- a/config/examples/BQ/Hephestos/Configuration.h +++ b/config/examples/BQ/Hephestos/Configuration.h @@ -1239,19 +1239,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/BQ/Hephestos_2/Configuration.h b/config/examples/BQ/Hephestos_2/Configuration.h index 41ec72637f05..ae0d1771e0c7 100644 --- a/config/examples/BQ/Hephestos_2/Configuration.h +++ b/config/examples/BQ/Hephestos_2/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/BQ/WITBOX/Configuration.h b/config/examples/BQ/WITBOX/Configuration.h index 3c99137eabe4..520538fb870e 100644 --- a/config/examples/BQ/WITBOX/Configuration.h +++ b/config/examples/BQ/WITBOX/Configuration.h @@ -1239,19 +1239,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Cartesio/Configuration.h b/config/examples/Cartesio/Configuration.h index 0cb76438011e..2a059914abb6 100644 --- a/config/examples/Cartesio/Configuration.h +++ b/config/examples/Cartesio/Configuration.h @@ -1250,19 +1250,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Creality/CR-10/Configuration.h b/config/examples/Creality/CR-10/Configuration.h index b8844e05ed4c..f107cfcfbb96 100644 --- a/config/examples/Creality/CR-10/Configuration.h +++ b/config/examples/Creality/CR-10/Configuration.h @@ -1261,19 +1261,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Creality/CR-10S/Configuration.h b/config/examples/Creality/CR-10S/Configuration.h index 50d596d88b75..30904e3d1a45 100644 --- a/config/examples/Creality/CR-10S/Configuration.h +++ b/config/examples/Creality/CR-10S/Configuration.h @@ -1252,19 +1252,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Creality/CR-10_5S/Configuration.h b/config/examples/Creality/CR-10_5S/Configuration.h index 496fb80b7913..03037f5a8a79 100644 --- a/config/examples/Creality/CR-10_5S/Configuration.h +++ b/config/examples/Creality/CR-10_5S/Configuration.h @@ -1254,19 +1254,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Creality/CR-10mini/Configuration.h b/config/examples/Creality/CR-10mini/Configuration.h index 869a99f36057..f6124787b00e 100644 --- a/config/examples/Creality/CR-10mini/Configuration.h +++ b/config/examples/Creality/CR-10mini/Configuration.h @@ -1270,19 +1270,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Creality/CR-20 Pro/Configuration.h b/config/examples/Creality/CR-20 Pro/Configuration.h index 751e5465c65e..c7962db10095 100644 --- a/config/examples/Creality/CR-20 Pro/Configuration.h +++ b/config/examples/Creality/CR-20 Pro/Configuration.h @@ -1254,19 +1254,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Creality/CR-20/Configuration.h b/config/examples/Creality/CR-20/Configuration.h index cc4ad8449824..d1166cb47553 100644 --- a/config/examples/Creality/CR-20/Configuration.h +++ b/config/examples/Creality/CR-20/Configuration.h @@ -1254,19 +1254,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Creality/CR-8/Configuration.h b/config/examples/Creality/CR-8/Configuration.h index b43986e0c6fa..571758dbdeba 100644 --- a/config/examples/Creality/CR-8/Configuration.h +++ b/config/examples/Creality/CR-8/Configuration.h @@ -1261,19 +1261,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Creality/Ender-2/Configuration.h b/config/examples/Creality/Ender-2/Configuration.h index 7828c174ccce..4ffdada6b45c 100644 --- a/config/examples/Creality/Ender-2/Configuration.h +++ b/config/examples/Creality/Ender-2/Configuration.h @@ -1255,19 +1255,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Creality/Ender-3/Configuration.h b/config/examples/Creality/Ender-3/Configuration.h index b3e6954958e0..a0c7888788cf 100644 --- a/config/examples/Creality/Ender-3/Configuration.h +++ b/config/examples/Creality/Ender-3/Configuration.h @@ -1255,19 +1255,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Creality/Ender-4/Configuration.h b/config/examples/Creality/Ender-4/Configuration.h index 8e0fc2b4ff2d..3015b746908e 100644 --- a/config/examples/Creality/Ender-4/Configuration.h +++ b/config/examples/Creality/Ender-4/Configuration.h @@ -1261,19 +1261,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Creality/Ender-5/Configuration.h b/config/examples/Creality/Ender-5/Configuration.h index 7e6e7bb43e15..204be000bfef 100644 --- a/config/examples/Creality/Ender-5/Configuration.h +++ b/config/examples/Creality/Ender-5/Configuration.h @@ -1254,19 +1254,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration.h b/config/examples/Dagoma/Disco Ultimate/Configuration.h index c3bace97c189..732cce94c723 100644 --- a/config/examples/Dagoma/Disco Ultimate/Configuration.h +++ b/config/examples/Dagoma/Disco Ultimate/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h index bd37b61aa338..e9224face559 100755 --- a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h +++ b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h @@ -1256,19 +1256,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Einstart-S/Configuration.h b/config/examples/Einstart-S/Configuration.h index 3f1b7f8968b7..255b3b620072 100644 --- a/config/examples/Einstart-S/Configuration.h +++ b/config/examples/Einstart-S/Configuration.h @@ -1261,19 +1261,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/FYSETC/AIO_II/Configuration.h b/config/examples/FYSETC/AIO_II/Configuration.h index 5b32c7547cd4..a9c1d3482919 100644 --- a/config/examples/FYSETC/AIO_II/Configuration.h +++ b/config/examples/FYSETC/AIO_II/Configuration.h @@ -1256,19 +1256,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h index 5939e0b1ac6b..7bb62ab321f3 100644 --- a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h +++ b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h @@ -1256,19 +1256,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h b/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h index 08d5bf296ba2..be0410520425 100644 --- a/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h +++ b/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h @@ -1256,19 +1256,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h b/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h index a7ed41f40cd8..39b146d9da17 100644 --- a/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h +++ b/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h @@ -1256,19 +1256,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/FYSETC/Cheetah/base/Configuration.h b/config/examples/FYSETC/Cheetah/base/Configuration.h index b1d355bc0e67..67fbd1ed3077 100644 --- a/config/examples/FYSETC/Cheetah/base/Configuration.h +++ b/config/examples/FYSETC/Cheetah/base/Configuration.h @@ -1256,19 +1256,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/FYSETC/F6_13/Configuration.h b/config/examples/FYSETC/F6_13/Configuration.h index 1836ff42b299..3c0eeaee0ed0 100644 --- a/config/examples/FYSETC/F6_13/Configuration.h +++ b/config/examples/FYSETC/F6_13/Configuration.h @@ -1253,19 +1253,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Felix/Configuration.h b/config/examples/Felix/Configuration.h index 9e2afbe7ee31..f379d63cff32 100644 --- a/config/examples/Felix/Configuration.h +++ b/config/examples/Felix/Configuration.h @@ -1233,19 +1233,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Felix/DUAL/Configuration.h b/config/examples/Felix/DUAL/Configuration.h index b7222bf7f1df..9adfb27ad24b 100644 --- a/config/examples/Felix/DUAL/Configuration.h +++ b/config/examples/Felix/DUAL/Configuration.h @@ -1233,19 +1233,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/FlashForge/CreatorPro/Configuration.h b/config/examples/FlashForge/CreatorPro/Configuration.h index bf5e797247b7..d8000b4d4adb 100644 --- a/config/examples/FlashForge/CreatorPro/Configuration.h +++ b/config/examples/FlashForge/CreatorPro/Configuration.h @@ -1244,19 +1244,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Geeetech/A10/Configuration.h b/config/examples/Geeetech/A10/Configuration.h index 724fa5a6e53c..51aaa489a873 100644 --- a/config/examples/Geeetech/A10/Configuration.h +++ b/config/examples/Geeetech/A10/Configuration.h @@ -1236,19 +1236,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Geeetech/A10M/Configuration.h b/config/examples/Geeetech/A10M/Configuration.h index eb29b27d79f2..ab3f25782548 100644 --- a/config/examples/Geeetech/A10M/Configuration.h +++ b/config/examples/Geeetech/A10M/Configuration.h @@ -1236,19 +1236,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Geeetech/A20M/Configuration.h b/config/examples/Geeetech/A20M/Configuration.h index 7da452b2709c..1bcec7ac72a5 100644 --- a/config/examples/Geeetech/A20M/Configuration.h +++ b/config/examples/Geeetech/A20M/Configuration.h @@ -1236,19 +1236,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Geeetech/GT2560/Configuration.h b/config/examples/Geeetech/GT2560/Configuration.h index 7126a9060a19..44f5939b5e0f 100644 --- a/config/examples/Geeetech/GT2560/Configuration.h +++ b/config/examples/Geeetech/GT2560/Configuration.h @@ -1266,19 +1266,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h b/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h index d2230d9c5c08..7b26ebec7a65 100644 --- a/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h +++ b/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Geeetech/MeCreator2/Configuration.h b/config/examples/Geeetech/MeCreator2/Configuration.h index 0c35f3d069d8..edfd2c9179a9 100644 --- a/config/examples/Geeetech/MeCreator2/Configuration.h +++ b/config/examples/Geeetech/MeCreator2/Configuration.h @@ -1258,19 +1258,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h index 2ec9c32afec9..02d543fa1bf7 100644 --- a/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h @@ -1272,19 +1272,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h index fa131b25e1b2..bae11398aa55 100644 --- a/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h @@ -1271,19 +1271,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h index 702bccde089a..3ad7d31902b4 100644 --- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h index da6501543d86..c7c00987b038 100644 --- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/HMS434/Configuration.h b/config/examples/HMS434/Configuration.h index c408fa8d656e..463585eae22e 100644 --- a/config/examples/HMS434/Configuration.h +++ b/config/examples/HMS434/Configuration.h @@ -1238,19 +1238,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Infitary/i3-M508/Configuration.h b/config/examples/Infitary/i3-M508/Configuration.h index 962688e6503a..9f193679103d 100644 --- a/config/examples/Infitary/i3-M508/Configuration.h +++ b/config/examples/Infitary/i3-M508/Configuration.h @@ -1255,19 +1255,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/JGAurora/A1/Configuration.h b/config/examples/JGAurora/A1/Configuration.h index 53cf30efb314..8445110af11e 100644 --- a/config/examples/JGAurora/A1/Configuration.h +++ b/config/examples/JGAurora/A1/Configuration.h @@ -1258,19 +1258,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/JGAurora/A5/Configuration.h b/config/examples/JGAurora/A5/Configuration.h index 72150ab1da0c..8e2c31a08ef9 100644 --- a/config/examples/JGAurora/A5/Configuration.h +++ b/config/examples/JGAurora/A5/Configuration.h @@ -1263,19 +1263,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/JGAurora/A5S/Configuration.h b/config/examples/JGAurora/A5S/Configuration.h index 9c231a7c7a0c..09f34afe2cb6 100644 --- a/config/examples/JGAurora/A5S/Configuration.h +++ b/config/examples/JGAurora/A5S/Configuration.h @@ -1258,19 +1258,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/MakerParts/Configuration.h b/config/examples/MakerParts/Configuration.h index 553882ae8da8..b5ed76af0688 100644 --- a/config/examples/MakerParts/Configuration.h +++ b/config/examples/MakerParts/Configuration.h @@ -1271,19 +1271,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Malyan/M200/Configuration.h b/config/examples/Malyan/M200/Configuration.h index b5434599fdca..179d0cdfa78b 100644 --- a/config/examples/Malyan/M200/Configuration.h +++ b/config/examples/Malyan/M200/Configuration.h @@ -1250,19 +1250,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Micromake/C1/basic/Configuration.h b/config/examples/Micromake/C1/basic/Configuration.h index 4c26a75b7e36..93489b0516ef 100644 --- a/config/examples/Micromake/C1/basic/Configuration.h +++ b/config/examples/Micromake/C1/basic/Configuration.h @@ -1255,19 +1255,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Micromake/C1/enhanced/Configuration.h b/config/examples/Micromake/C1/enhanced/Configuration.h index 90dab802673e..d4dcbb6698f6 100644 --- a/config/examples/Micromake/C1/enhanced/Configuration.h +++ b/config/examples/Micromake/C1/enhanced/Configuration.h @@ -1255,19 +1255,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Mks/Robin/Configuration.h b/config/examples/Mks/Robin/Configuration.h index 542718989d1f..07cb10d35946 100644 --- a/config/examples/Mks/Robin/Configuration.h +++ b/config/examples/Mks/Robin/Configuration.h @@ -1252,19 +1252,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Mks/Sbase/Configuration.h b/config/examples/Mks/Sbase/Configuration.h index 520369a6f85d..f144b1ddb613 100644 --- a/config/examples/Mks/Sbase/Configuration.h +++ b/config/examples/Mks/Sbase/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Printrbot/PrintrboardG2/Configuration.h b/config/examples/Printrbot/PrintrboardG2/Configuration.h index 834604a6332e..4dfeefb576b8 100644 --- a/config/examples/Printrbot/PrintrboardG2/Configuration.h +++ b/config/examples/Printrbot/PrintrboardG2/Configuration.h @@ -1259,19 +1259,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/RapideLite/RL200/Configuration.h b/config/examples/RapideLite/RL200/Configuration.h index cbf90f256209..91bddbf06f17 100644 --- a/config/examples/RapideLite/RL200/Configuration.h +++ b/config/examples/RapideLite/RL200/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/RepRapPro/Huxley/Configuration.h b/config/examples/RepRapPro/Huxley/Configuration.h index 2f8f932b07dd..f250870d2396 100644 --- a/config/examples/RepRapPro/Huxley/Configuration.h +++ b/config/examples/RepRapPro/Huxley/Configuration.h @@ -1300,19 +1300,6 @@ Black rubber belt(MXL), 18 - tooth aluminium pulley : 87.489 step per mm (Huxley #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/RepRapWorld/Megatronics/Configuration.h b/config/examples/RepRapWorld/Megatronics/Configuration.h index 04d1bae81bd2..39561c347b46 100644 --- a/config/examples/RepRapWorld/Megatronics/Configuration.h +++ b/config/examples/RepRapWorld/Megatronics/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/RigidBot/Configuration.h b/config/examples/RigidBot/Configuration.h index a160e8a07bf8..3a85d9f86d56 100644 --- a/config/examples/RigidBot/Configuration.h +++ b/config/examples/RigidBot/Configuration.h @@ -1249,19 +1249,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/SCARA/Configuration.h b/config/examples/SCARA/Configuration.h index 99341e6eec9f..64b219113464 100644 --- a/config/examples/SCARA/Configuration.h +++ b/config/examples/SCARA/Configuration.h @@ -1260,19 +1260,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration.h b/config/examples/STM32/Black_STM32F407VET6/Configuration.h index dba17c39b8f5..2f772633dfc7 100644 --- a/config/examples/STM32/Black_STM32F407VET6/Configuration.h +++ b/config/examples/STM32/Black_STM32F407VET6/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/STM32/STM32F103R/Configuration.h b/config/examples/STM32/STM32F103R/Configuration.h index f36d9df7041b..f31ac7831bfe 100644 --- a/config/examples/STM32/STM32F103R/Configuration.h +++ b/config/examples/STM32/STM32F103R/Configuration.h @@ -1253,19 +1253,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/STM32/STM32F4/Configuration.h b/config/examples/STM32/STM32F4/Configuration.h index 99e7a1fc73d5..2c303616f8de 100644 --- a/config/examples/STM32/STM32F4/Configuration.h +++ b/config/examples/STM32/STM32F4/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/STM32/stm32f103ret6/Configuration.h b/config/examples/STM32/stm32f103ret6/Configuration.h index 460d8b0977d2..16b6cd70205f 100644 --- a/config/examples/STM32/stm32f103ret6/Configuration.h +++ b/config/examples/STM32/stm32f103ret6/Configuration.h @@ -1253,19 +1253,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Sanguinololu/Configuration.h b/config/examples/Sanguinololu/Configuration.h index 93a09df42a3d..64b533ad9dbf 100644 --- a/config/examples/Sanguinololu/Configuration.h +++ b/config/examples/Sanguinololu/Configuration.h @@ -1282,19 +1282,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Tevo/Michelangelo/Configuration.h b/config/examples/Tevo/Michelangelo/Configuration.h index 344d0d9670fc..4168fbe0fb35 100644 --- a/config/examples/Tevo/Michelangelo/Configuration.h +++ b/config/examples/Tevo/Michelangelo/Configuration.h @@ -1256,19 +1256,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Tevo/Tarantula Pro/Configuration.h b/config/examples/Tevo/Tarantula Pro/Configuration.h index 4ead70ff16c4..c9876e93772f 100644 --- a/config/examples/Tevo/Tarantula Pro/Configuration.h +++ b/config/examples/Tevo/Tarantula Pro/Configuration.h @@ -1249,19 +1249,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration.h index c4a695522426..2ae9e405c97c 100644 --- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration.h +++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration.h @@ -1256,19 +1256,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration.h b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration.h index 124e66d93701..37401fdfdcdb 100644 --- a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration.h +++ b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration.h @@ -1256,19 +1256,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/TheBorg/Configuration.h b/config/examples/TheBorg/Configuration.h index 7390f93829b1..4286c6f8a4c8 100644 --- a/config/examples/TheBorg/Configuration.h +++ b/config/examples/TheBorg/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/TinyBoy2/Configuration.h b/config/examples/TinyBoy2/Configuration.h index e2439f045cbe..78f5b78be613 100644 --- a/config/examples/TinyBoy2/Configuration.h +++ b/config/examples/TinyBoy2/Configuration.h @@ -1307,19 +1307,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Tronxy/X1/Configuration.h b/config/examples/Tronxy/X1/Configuration.h index d1be9b3b496a..5f3a4ce8238a 100644 --- a/config/examples/Tronxy/X1/Configuration.h +++ b/config/examples/Tronxy/X1/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Tronxy/X3A/Configuration.h b/config/examples/Tronxy/X3A/Configuration.h index b54cf6906955..75b15511136a 100644 --- a/config/examples/Tronxy/X3A/Configuration.h +++ b/config/examples/Tronxy/X3A/Configuration.h @@ -1255,19 +1255,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Tronxy/X5S-2E/Configuration.h b/config/examples/Tronxy/X5S-2E/Configuration.h index cc51f465eb8b..ce81d16bd176 100644 --- a/config/examples/Tronxy/X5S-2E/Configuration.h +++ b/config/examples/Tronxy/X5S-2E/Configuration.h @@ -1272,19 +1272,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Tronxy/X5S/Configuration.h b/config/examples/Tronxy/X5S/Configuration.h index 65c9ec39497d..0f468a7b4d87 100644 --- a/config/examples/Tronxy/X5S/Configuration.h +++ b/config/examples/Tronxy/X5S/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Tronxy/XY100/Configuration.h b/config/examples/Tronxy/XY100/Configuration.h index dd36e80209f3..6152d482845c 100644 --- a/config/examples/Tronxy/XY100/Configuration.h +++ b/config/examples/Tronxy/XY100/Configuration.h @@ -1262,19 +1262,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/UltiMachine/Archim1/Configuration.h b/config/examples/UltiMachine/Archim1/Configuration.h index 89ca880455e3..26b09c64bb39 100644 --- a/config/examples/UltiMachine/Archim1/Configuration.h +++ b/config/examples/UltiMachine/Archim1/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/UltiMachine/Archim2/Configuration.h b/config/examples/UltiMachine/Archim2/Configuration.h index b56508e2f073..a6baaec3d613 100644 --- a/config/examples/UltiMachine/Archim2/Configuration.h +++ b/config/examples/UltiMachine/Archim2/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/VORONDesign/Configuration.h b/config/examples/VORONDesign/Configuration.h index 1532acddd872..96abead88904 100644 --- a/config/examples/VORONDesign/Configuration.h +++ b/config/examples/VORONDesign/Configuration.h @@ -1260,19 +1260,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Velleman/K8200/Configuration.h b/config/examples/Velleman/K8200/Configuration.h index 5fb409197ed0..4537da2122d5 100644 --- a/config/examples/Velleman/K8200/Configuration.h +++ b/config/examples/Velleman/K8200/Configuration.h @@ -1281,19 +1281,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Velleman/K8400/Configuration.h b/config/examples/Velleman/K8400/Configuration.h index 14195d73ac8c..7a16004c5012 100644 --- a/config/examples/Velleman/K8400/Configuration.h +++ b/config/examples/Velleman/K8400/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Velleman/K8400/Dual-head/Configuration.h b/config/examples/Velleman/K8400/Dual-head/Configuration.h index 2c4355a93905..6b0ffb799851 100644 --- a/config/examples/Velleman/K8400/Dual-head/Configuration.h +++ b/config/examples/Velleman/K8400/Dual-head/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/WASP/PowerWASP/Configuration.h b/config/examples/WASP/PowerWASP/Configuration.h index 4ac36552f963..8e1e3ba1fb38 100644 --- a/config/examples/WASP/PowerWASP/Configuration.h +++ b/config/examples/WASP/PowerWASP/Configuration.h @@ -1270,19 +1270,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Wanhao/Duplicator 6/Configuration.h b/config/examples/Wanhao/Duplicator 6/Configuration.h index 704351a45af0..9bf46181bb01 100644 --- a/config/examples/Wanhao/Duplicator 6/Configuration.h +++ b/config/examples/Wanhao/Duplicator 6/Configuration.h @@ -1261,19 +1261,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h index 37f88b457bda..6a256a95fb0d 100755 --- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h +++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/adafruit/ST7565/Configuration.h b/config/examples/adafruit/ST7565/Configuration.h index 25174cf70076..8ed568a92dea 100644 --- a/config/examples/adafruit/ST7565/Configuration.h +++ b/config/examples/adafruit/ST7565/Configuration.h @@ -1251,19 +1251,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/delta/Dreammaker/Overlord/Configuration.h b/config/examples/delta/Dreammaker/Overlord/Configuration.h index f4cdcc0d2319..4bb023181d81 100644 --- a/config/examples/delta/Dreammaker/Overlord/Configuration.h +++ b/config/examples/delta/Dreammaker/Overlord/Configuration.h @@ -1361,19 +1361,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration.h b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration.h index bb66e3a0249e..c69a173ed1c1 100644 --- a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration.h +++ b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration.h @@ -1373,19 +1373,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration.h index 36ac9143bb6f..0fe1da99252c 100644 --- a/config/examples/delta/FLSUN/auto_calibrate/Configuration.h +++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration.h @@ -1366,19 +1366,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/delta/FLSUN/kossel/Configuration.h b/config/examples/delta/FLSUN/kossel/Configuration.h index bdfabc0068e5..74bd37da761e 100644 --- a/config/examples/delta/FLSUN/kossel/Configuration.h +++ b/config/examples/delta/FLSUN/kossel/Configuration.h @@ -1365,19 +1365,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration.h b/config/examples/delta/FLSUN/kossel_mini/Configuration.h index 3c379b4c71d4..5c81e5f1f86d 100644 --- a/config/examples/delta/FLSUN/kossel_mini/Configuration.h +++ b/config/examples/delta/FLSUN/kossel_mini/Configuration.h @@ -1365,19 +1365,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration.h b/config/examples/delta/Geeetech/Rostock 301/Configuration.h index 9308fde289dc..1eedcf2e06ac 100644 --- a/config/examples/delta/Geeetech/Rostock 301/Configuration.h +++ b/config/examples/delta/Geeetech/Rostock 301/Configuration.h @@ -1353,19 +1353,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/delta/MKS/SBASE/Configuration.h b/config/examples/delta/MKS/SBASE/Configuration.h index 8724606a0830..915c069efbf2 100644 --- a/config/examples/delta/MKS/SBASE/Configuration.h +++ b/config/examples/delta/MKS/SBASE/Configuration.h @@ -1353,19 +1353,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/delta/Tevo Little Monster/Configuration.h b/config/examples/delta/Tevo Little Monster/Configuration.h index 9a6aa048bcf2..1c894ce327a4 100644 --- a/config/examples/delta/Tevo Little Monster/Configuration.h +++ b/config/examples/delta/Tevo Little Monster/Configuration.h @@ -1357,19 +1357,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/delta/generic/Configuration.h b/config/examples/delta/generic/Configuration.h index b5656b333ad4..34e68585ba2c 100644 --- a/config/examples/delta/generic/Configuration.h +++ b/config/examples/delta/generic/Configuration.h @@ -1353,19 +1353,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/delta/kossel_mini/Configuration.h b/config/examples/delta/kossel_mini/Configuration.h index dfaf41259c7f..6f32e89d80c0 100644 --- a/config/examples/delta/kossel_mini/Configuration.h +++ b/config/examples/delta/kossel_mini/Configuration.h @@ -1355,19 +1355,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/delta/kossel_pro/Configuration.h b/config/examples/delta/kossel_pro/Configuration.h index 1423db2adf28..8920710d8415 100644 --- a/config/examples/delta/kossel_pro/Configuration.h +++ b/config/examples/delta/kossel_pro/Configuration.h @@ -1355,19 +1355,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/delta/kossel_xl/Configuration.h b/config/examples/delta/kossel_xl/Configuration.h index 4d19fdc90a8f..2e11a8c99159 100644 --- a/config/examples/delta/kossel_xl/Configuration.h +++ b/config/examples/delta/kossel_xl/Configuration.h @@ -1356,19 +1356,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/makibox/Configuration.h b/config/examples/makibox/Configuration.h index 3fe46fc03cef..4db20e066e66 100644 --- a/config/examples/makibox/Configuration.h +++ b/config/examples/makibox/Configuration.h @@ -1254,19 +1254,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/tvrrug/Round2/Configuration.h b/config/examples/tvrrug/Round2/Configuration.h index b565511f3d59..7c193cff3cc4 100644 --- a/config/examples/tvrrug/Round2/Configuration.h +++ b/config/examples/tvrrug/Round2/Configuration.h @@ -1246,19 +1246,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. diff --git a/config/examples/wt150/Configuration.h b/config/examples/wt150/Configuration.h index ff6bba598e06..ff3a7c38d206 100644 --- a/config/examples/wt150/Configuration.h +++ b/config/examples/wt150/Configuration.h @@ -1256,19 +1256,6 @@ #endif // BED_LEVELING -/** - * Points to probe for all 3-point Leveling procedures. - * Override if the automatically selected points are inadequate. - */ -#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - //#define PROBE_PT_1_X 15 - //#define PROBE_PT_1_Y 180 - //#define PROBE_PT_2_X 15 - //#define PROBE_PT_2_Y 20 - //#define PROBE_PT_3_X 170 - //#define PROBE_PT_3_Y 20 -#endif - /** * Add a bed leveling sub-menu for ABL or MBL. * Include a guided procedure if manual probing is enabled. From da1bda493e0c7472673821e18d039a2ba13200ae Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Sep 2019 03:57:08 -0500 Subject: [PATCH 044/120] Apply Marlin conventions to M851 --- Marlin/src/gcode/probe/M851.cpp | 52 ++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/Marlin/src/gcode/probe/M851.cpp b/Marlin/src/gcode/probe/M851.cpp index f750020f36d7..65f984a73745 100644 --- a/Marlin/src/gcode/probe/M851.cpp +++ b/Marlin/src/gcode/probe/M851.cpp @@ -35,36 +35,46 @@ void GcodeSuite::M851() { // Show usage with no parameters if (!parser.seen("XYZ")) { - SERIAL_ECHO_START(); - SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET " X", probe_offset[X_AXIS], - " Y", probe_offset[Y_AXIS], - " Z", probe_offset[Z_AXIS]); + SERIAL_ECHO_MSG(MSG_PROBE_OFFSET " X", probe_offset[X_AXIS], " Y", probe_offset[Y_AXIS], " Z", probe_offset[Z_AXIS]); return; } - // Get the modified offsets - const float offs[] = { - parser.floatval('X', probe_offset[X_AXIS]), - parser.floatval('Y', probe_offset[Y_AXIS]), - parser.floatval('Z', probe_offset[Z_AXIS]) - }; + float offs[XYZ] = { probe_offset[X_AXIS], probe_offset[Y_AXIS], probe_offset[Z_AXIS] }; - // Error-check - if (!WITHIN(offs[X_AXIS], -(X_BED_SIZE), X_BED_SIZE)) { - SERIAL_ERROR_MSG("?X out of range (-" STRINGIFY(X_BED_SIZE) " to " STRINGIFY(X_BED_SIZE) ")"); - return; + const bool ok = true; + + if (parser.seenval('X')) { + const float x = parser.value_float(); + if (WITHIN(x, -(X_BED_SIZE), X_BED_SIZE)) + offs[X_AXIS] = x; + else { + SERIAL_ECHOLNPAIR("?X out of range (-", int(X_BED_SIZE), " to ", int(X_BED_SIZE), ")"); + ok = false; + } } - if (!WITHIN(offs[Y_AXIS], -(Y_BED_SIZE), Y_BED_SIZE)) { - SERIAL_ERROR_MSG("?Y out of range (-" STRINGIFY(Y_BED_SIZE) " to " STRINGIFY(Y_BED_SIZE) ")"); - return; + + if (parser.seenval('Y')) { + const float y = parser.value_float(); + if (WITHIN(y, -(Y_BED_SIZE), Y_BED_SIZE)) + offs[Y_AXIS] = y; + else { + SERIAL_ECHOLNPAIR("?Y out of range (-", int(Y_BED_SIZE), " to ", int(Y_BED_SIZE), ")"); + ok = false; + } } - if (!WITHIN(offs[Z_AXIS], Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) { - SERIAL_ERROR_MSG("?Z out of range (" STRINGIFY(Z_PROBE_OFFSET_RANGE_MIN) " to " STRINGIFY(Z_PROBE_OFFSET_RANGE_MAX) ")"); - return; + + if (parser.seenval('Z')) { + const float z = parser.value_float(); + if (WITHIN(z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) + offs[Z_AXIS] = z; + else { + SERIAL_ECHOLNPAIR("?Z out of range (", int(Z_PROBE_OFFSET_RANGE_MIN), " to ", int(Z_PROBE_OFFSET_RANGE_MAX), ")"); + ok = false; + } } // Save the new offsets - LOOP_XYZ(a) probe_offset[a] = offs[a]; + if (ok) COPY(probe_offset, offs); } #endif // HAS_BED_PROBE From 25c4c2f24e72303aeaed2f5de95d265ff5855ce5 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Sep 2019 08:37:56 -0500 Subject: [PATCH 045/120] Fix bool in M851 --- Marlin/src/gcode/probe/M851.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/gcode/probe/M851.cpp b/Marlin/src/gcode/probe/M851.cpp index 65f984a73745..eec6b2f2553f 100644 --- a/Marlin/src/gcode/probe/M851.cpp +++ b/Marlin/src/gcode/probe/M851.cpp @@ -35,13 +35,13 @@ void GcodeSuite::M851() { // Show usage with no parameters if (!parser.seen("XYZ")) { - SERIAL_ECHO_MSG(MSG_PROBE_OFFSET " X", probe_offset[X_AXIS], " Y", probe_offset[Y_AXIS], " Z", probe_offset[Z_AXIS]); + SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET " X", probe_offset[X_AXIS], " Y", probe_offset[Y_AXIS], " Z", probe_offset[Z_AXIS]); return; } float offs[XYZ] = { probe_offset[X_AXIS], probe_offset[Y_AXIS], probe_offset[Z_AXIS] }; - const bool ok = true; + bool ok = true; if (parser.seenval('X')) { const float x = parser.value_float(); From 661c3cfc99c57d438aa270fc97e8e88f43fec1dc Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Sep 2019 08:58:27 -0500 Subject: [PATCH 046/120] Fix mesh bounds for MBL --- Marlin/src/inc/Conditionals_post.h | 4 ++-- Marlin/src/module/probe.h | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 440ff4e6a909..1231bc0b9128 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -1448,10 +1448,10 @@ #ifndef MIN_PROBE_EDGE #define MIN_PROBE_EDGE 0 #endif + #ifndef NOZZLE_TO_PROBE_OFFSET #define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0 } #endif -constexpr float nozzle_to_probe_offset[XYZ] = NOZZLE_TO_PROBE_OFFSET; #if ENABLED(DELTA) /** @@ -1514,7 +1514,7 @@ constexpr float nozzle_to_probe_offset[XYZ] = NOZZLE_TO_PROBE_OFFSET; #define _MESH_MAX_Y (Y_MAX_BED - (MESH_INSET)) #else // Boundaries for Cartesian probing based on set limits - #if ENABLED(AUTO_BED_LEVELING_UBL) + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) #define _MESH_MIN_X (_MAX(X_MIN_BED + MESH_INSET, X_MIN_POS)) // UBL is careful not to probe off the bed. It does not #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)) diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h index b9c44f1da927..502777691bfe 100644 --- a/Marlin/src/module/probe.h +++ b/Marlin/src/module/probe.h @@ -29,7 +29,10 @@ #if HAS_BED_PROBE + constexpr float nozzle_to_probe_offset[XYZ] = NOZZLE_TO_PROBE_OFFSET; + extern float probe_offset[XYZ]; + bool set_probe_deployed(const bool deploy); #ifdef Z_AFTER_PROBING void move_z_after_probing(); From 0b4aedf13eaf8455ba2b64a93614629fdef7b0e1 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Sep 2019 08:29:59 -0500 Subject: [PATCH 047/120] Less use of "this" --- Marlin/src/HAL/HAL_ESP32/Servo.cpp | 28 ++++---- Marlin/src/HAL/HAL_LPC1768/Servo.h | 8 +-- Marlin/src/HAL/HAL_STM32/Servo.cpp | 18 ++--- Marlin/src/HAL/HAL_STM32F1/SPI.cpp | 75 +++++++++----------- Marlin/src/HAL/HAL_STM32F1/SPI.h | 40 +++++------ Marlin/src/HAL/HAL_STM32F1/Servo.cpp | 89 ++++++++++++------------ Marlin/src/HAL/HAL_STM32F1/Servo.h | 2 +- Marlin/src/HAL/HAL_STM32_F4_F7/Servo.cpp | 14 ++-- Marlin/src/HAL/HAL_TEENSY31_32/Servo.cpp | 22 +++--- Marlin/src/HAL/HAL_TEENSY35_36/Servo.cpp | 43 +++++++++--- Marlin/src/HAL/shared/servo.cpp | 60 ++++++++-------- Marlin/src/feature/twibus.cpp | 48 ++++++------- Marlin/src/feature/twibus.h | 2 +- Marlin/src/libs/circularqueue.h | 46 +++++------- 14 files changed, 246 insertions(+), 249 deletions(-) diff --git a/Marlin/src/HAL/HAL_ESP32/Servo.cpp b/Marlin/src/HAL/HAL_ESP32/Servo.cpp index c6be4b1280f3..3c3b8fa704bf 100644 --- a/Marlin/src/HAL/HAL_ESP32/Servo.cpp +++ b/Marlin/src/HAL/HAL_ESP32/Servo.cpp @@ -32,25 +32,25 @@ int Servo::channel_next_free = 12; Servo::Servo() { - this->channel = channel_next_free++; + channel = channel_next_free++; } -int8_t Servo::attach(const int pin) { - if (this->channel >= CHANNEL_MAX_NUM) return -1; - if (pin > 0) this->pin = pin; +int8_t Servo::attach(const int inPin) { + if (channel >= CHANNEL_MAX_NUM) return -1; + if (pin > 0) pin = inPin; - ledcSetup(this->channel, 50, 16); // channel X, 50 Hz, 16-bit depth - ledcAttachPin(this->pin, this->channel); + ledcSetup(channel, 50, 16); // channel X, 50 Hz, 16-bit depth + ledcAttachPin(pin, channel); return true; } -void Servo::detach() { ledcDetachPin(this->pin); } +void Servo::detach() { ledcDetachPin(pin); } -int Servo::read() { return this->degrees; } +int Servo::read() { return degrees; } void Servo::write(int inDegrees) { - this->degrees = constrain(inDegrees, MIN_ANGLE, MAX_ANGLE); - int us = map(this->degrees, MIN_ANGLE, MAX_ANGLE, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH); + degrees = constrain(inDegrees, MIN_ANGLE, MAX_ANGLE); + int us = map(degrees, MIN_ANGLE, MAX_ANGLE, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH); int duty = map(us, 0, TAU_USEC, 0, MAX_COMPARE); ledcWrite(channel, duty); } @@ -58,11 +58,11 @@ void Servo::write(int inDegrees) { void Servo::move(const int value) { constexpr uint16_t servo_delay[] = SERVO_DELAY; static_assert(COUNT(servo_delay) == NUM_SERVOS, "SERVO_DELAY must be an array NUM_SERVOS long."); - if (this->attach(0) >= 0) { - this->write(value); - safe_delay(servo_delay[this->channel]); + if (attach(0) >= 0) { + write(value); + safe_delay(servo_delay[channel]); #if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) - this->detach(); + detach(); #endif } } diff --git a/Marlin/src/HAL/HAL_LPC1768/Servo.h b/Marlin/src/HAL/HAL_LPC1768/Servo.h index 8b511032cb9c..1bbf84c73e99 100644 --- a/Marlin/src/HAL/HAL_LPC1768/Servo.h +++ b/Marlin/src/HAL/HAL_LPC1768/Servo.h @@ -57,11 +57,11 @@ class libServo: public Servo { constexpr uint16_t servo_delay[] = SERVO_DELAY; static_assert(COUNT(servo_delay) == NUM_SERVOS, "SERVO_DELAY must be an array NUM_SERVOS long."); - if (this->attach(servo_info[this->servoIndex].Pin.nbr) >= 0) { // try to reattach - this->write(value); - safe_delay(servo_delay[this->servoIndex]); // delay to allow servo to reach position + if (attach(servo_info[servoIndex].Pin.nbr) >= 0) { // try to reattach + write(value); + safe_delay(servo_delay[servoIndex]); // delay to allow servo to reach position #if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) - this->detach(); + detach(); #endif } diff --git a/Marlin/src/HAL/HAL_STM32/Servo.cpp b/Marlin/src/HAL/HAL_STM32/Servo.cpp index 93154f784762..2882f071ac67 100644 --- a/Marlin/src/HAL/HAL_STM32/Servo.cpp +++ b/Marlin/src/HAL/HAL_STM32/Servo.cpp @@ -31,24 +31,24 @@ uint8_t servoPin[MAX_SERVOS] = { 0 }; int8_t libServo::attach(const int pin) { - if (this->servoIndex >= MAX_SERVOS) return -1; - if (pin > 0) servoPin[this->servoIndex] = pin; - return Servo::attach(servoPin[this->servoIndex]); + if (servoIndex >= MAX_SERVOS) return -1; + if (pin > 0) servoPin[servoIndex] = pin; + return super::attach(servoPin[servoIndex]); } int8_t libServo::attach(const int pin, const int min, const int max) { - if (pin > 0) servoPin[this->servoIndex] = pin; - return Servo::attach(servoPin[this->servoIndex], min, max); + if (pin > 0) servoPin[servoIndex] = pin; + return super::attach(servoPin[servoIndex], min, max); } void libServo::move(const int value) { constexpr uint16_t servo_delay[] = SERVO_DELAY; static_assert(COUNT(servo_delay) == NUM_SERVOS, "SERVO_DELAY must be an array NUM_SERVOS long."); - if (this->attach(0) >= 0) { - this->write(value); - safe_delay(servo_delay[this->servoIndex]); + if (attach(0) >= 0) { + write(value); + safe_delay(servo_delay[servoIndex]); #if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) - this->detach(); + detach(); #endif } } diff --git a/Marlin/src/HAL/HAL_STM32F1/SPI.cpp b/Marlin/src/HAL/HAL_STM32F1/SPI.cpp index bc10824c8b9f..101b42a53afc 100644 --- a/Marlin/src/HAL/HAL_STM32F1/SPI.cpp +++ b/Marlin/src/HAL/HAL_STM32F1/SPI.cpp @@ -213,31 +213,31 @@ void SPIClass::setDataSize(uint32_t datasize) { } void SPIClass::setDataMode(uint8_t dataMode) { - /* - Notes: - As far as we know the AVR numbers for dataMode match the numbers required by the STM32. - From the AVR doc http://www.atmel.com/images/doc2585.pdf section 2.4 - - SPI Mode CPOL CPHA Shift SCK-edge Capture SCK-edge - 0 0 0 Falling Rising - 1 0 1 Rising Falling - 2 1 0 Rising Falling - 3 1 1 Falling Rising - - On the STM32 it appears to be - - bit 1 - CPOL : Clock polarity - (This bit should not be changed when communication is ongoing) - 0 : CLK to 0 when idle - 1 : CLK to 1 when idle - - bit 0 - CPHA : Clock phase - (This bit should not be changed when communication is ongoing) - 0 : The first clock transition is the first data capture edge - 1 : The second clock transition is the first data capture edge - - If someone finds this is not the case or sees a logic error with this let me know ;-) - */ + /** + * Notes: + * As far as we know the AVR numbers for dataMode match the numbers required by the STM32. + * From the AVR doc http://www.atmel.com/images/doc2585.pdf section 2.4 + * + * SPI Mode CPOL CPHA Shift SCK-edge Capture SCK-edge + * 0 0 0 Falling Rising + * 1 0 1 Rising Falling + * 2 1 0 Rising Falling + * 3 1 1 Falling Rising + * + * On the STM32 it appears to be + * + * bit 1 - CPOL : Clock polarity + * (This bit should not be changed when communication is ongoing) + * 0 : CLK to 0 when idle + * 1 : CLK to 1 when idle + * + * bit 0 - CPHA : Clock phase + * (This bit should not be changed when communication is ongoing) + * 0 : The first clock transition is the first data capture edge + * 1 : The second clock transition is the first data capture edge + * + * If someone finds this is not the case or sees a logic error with this let me know ;-) + */ _currentSetting->dataMode = dataMode; uint32_t cr1 = _currentSetting->spi_d->regs->CR1 & ~(SPI_CR1_CPOL|SPI_CR1_CPHA); _currentSetting->spi_d->regs->CR1 = cr1 | (dataMode & (SPI_CR1_CPOL|SPI_CR1_CPHA)); @@ -593,7 +593,7 @@ void SPIClass::detachInterrupt() { // Should be disableInterrupt() } -/* +/** * Pin accessors */ @@ -613,25 +613,14 @@ uint8_t SPIClass::nssPin() { return dev_to_spi_pins(_currentSetting->spi_d)->nss; } -/* +/** * Deprecated functions */ +uint8_t SPIClass::send(uint8_t data) { write(data); return 1; } +uint8_t SPIClass::send(uint8_t *buf, uint32_t len) { write(buf, len); return len; } +uint8_t SPIClass::recv() { return read(); } -uint8_t SPIClass::send(uint8_t data) { - this->write(data); - return 1; -} - -uint8_t SPIClass::send(uint8_t *buf, uint32_t len) { - this->write(buf, len); - return len; -} - -uint8_t SPIClass::recv() { - return this->read(); -} - -/* +/** * DMA call back functions, one per port. */ #if BOARD_NR_SPI >= 1 @@ -650,7 +639,7 @@ uint8_t SPIClass::recv() { } #endif -/* +/** * Auxiliary functions */ static const spi_pins* dev_to_spi_pins(spi_dev *dev) { diff --git a/Marlin/src/HAL/HAL_STM32F1/SPI.h b/Marlin/src/HAL/HAL_STM32F1/SPI.h index 20f22431f690..0162ac13bb17 100644 --- a/Marlin/src/HAL/HAL_STM32F1/SPI.h +++ b/Marlin/src/HAL/HAL_STM32F1/SPI.h @@ -96,36 +96,36 @@ typedef enum { class SPISettings { public: - SPISettings(uint32_t clock, BitOrder bitOrder, uint8_t dataMode) { - if (__builtin_constant_p(clock)) - init_AlwaysInline(clock, bitOrder, dataMode, DATA_SIZE_8BIT); + SPISettings(uint32_t inClock, BitOrder inBitOrder, uint8_t inDataMode) { + if (__builtin_constant_p(inClock)) + init_AlwaysInline(inClock, inBitOrder, inDataMode, DATA_SIZE_8BIT); else - init_MightInline(clock, bitOrder, dataMode, DATA_SIZE_8BIT); + init_MightInline(inClock, inBitOrder, inDataMode, DATA_SIZE_8BIT); } - SPISettings(uint32_t clock, BitOrder bitOrder, uint8_t dataMode, uint32_t dataSize) { - if (__builtin_constant_p(clock)) - init_AlwaysInline(clock, bitOrder, dataMode, dataSize); + SPISettings(uint32_t inClock, BitOrder inBitOrder, uint8_t inDataMode, uint32_t inDataSize) { + if (__builtin_constant_p(inClock)) + init_AlwaysInline(inClock, inBitOrder, inDataMode, inDataSize); else - init_MightInline(clock, bitOrder, dataMode, dataSize); + init_MightInline(inClock, inBitOrder, inDataMode, inDataSize); } - SPISettings(uint32_t clock) { - if (__builtin_constant_p(clock)) - init_AlwaysInline(clock, MSBFIRST, SPI_MODE0, DATA_SIZE_8BIT); + SPISettings(uint32_t inClock) { + if (__builtin_constant_p(inClock)) + init_AlwaysInline(inClock, MSBFIRST, SPI_MODE0, DATA_SIZE_8BIT); else - init_MightInline(clock, MSBFIRST, SPI_MODE0, DATA_SIZE_8BIT); + init_MightInline(inClock, MSBFIRST, SPI_MODE0, DATA_SIZE_8BIT); } SPISettings() { init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0, DATA_SIZE_8BIT); } private: - void init_MightInline(uint32_t clock, BitOrder bitOrder, uint8_t dataMode, uint32_t dataSize) { - init_AlwaysInline(clock, bitOrder, dataMode, dataSize); + void init_MightInline(uint32_t inClock, BitOrder inBitOrder, uint8_t inDataMode, uint32_t inDataSize) { + init_AlwaysInline(inClock, inBitOrder, inDataMode, inDataSize); } - void init_AlwaysInline(uint32_t clock, BitOrder bitOrder, uint8_t dataMode, uint32_t dataSize) __attribute__((__always_inline__)) { - this->clock = clock; - this->bitOrder = bitOrder; - this->dataMode = dataMode; - this->dataSize = dataSize; + void init_AlwaysInline(uint32_t inClock, BitOrder inBitOrder, uint8_t inDataMode, uint32_t inDataSize) __attribute__((__always_inline__)) { + clock = inClock; + bitOrder = inBitOrder; + dataMode = inDataMode; + dataSize = inDataSize; } uint32_t clock; uint32_t dataSize; @@ -339,7 +339,7 @@ class SPIClass { * or 1-3 in high density devices. */ void setModule(int spi_num) { - _currentSetting=&_settings[spi_num-1];// SPI channels are called 1 2 and 3 but the array is zero indexed + _currentSetting = &_settings[spi_num - 1];// SPI channels are called 1 2 and 3 but the array is zero indexed } /* -- The following methods are deprecated --------------------------- */ diff --git a/Marlin/src/HAL/HAL_STM32F1/Servo.cpp b/Marlin/src/HAL/HAL_STM32F1/Servo.cpp index 9db978637dca..5dc21691544c 100644 --- a/Marlin/src/HAL/HAL_STM32F1/Servo.cpp +++ b/Marlin/src/HAL/HAL_STM32F1/Servo.cpp @@ -56,52 +56,50 @@ uint8_t ServoCount = 0; #define SERVO_OVERFLOW ((uint16_t)round((double)TAU_CYC / SERVO_PRESCALER)) // Unit conversions -#define US_TO_COMPARE(us) ((uint16_t)map((us), 0, TAU_USEC, 0, SERVO_OVERFLOW)) -#define COMPARE_TO_US(c) ((uint32_t)map((c), 0, SERVO_OVERFLOW, 0, TAU_USEC)) -#define ANGLE_TO_US(a) ((uint16_t)(map((a), this->minAngle, this->maxAngle, \ - SERVO_DEFAULT_MIN_PW, SERVO_DEFAULT_MAX_PW))) -#define US_TO_ANGLE(us) ((int16_t)(map((us), SERVO_DEFAULT_MIN_PW, SERVO_DEFAULT_MAX_PW, \ - this->minAngle, this->maxAngle))) - -void libServo::servoWrite(uint8_t pin, uint16_t duty_cycle) { +#define US_TO_COMPARE(us) uint16_t(map((us), 0, TAU_USEC, 0, SERVO_OVERFLOW)) +#define COMPARE_TO_US(c) uint32_t(map((c), 0, SERVO_OVERFLOW, 0, TAU_USEC)) +#define ANGLE_TO_US(a) uint16_t(map((a), minAngle, maxAngle, SERVO_DEFAULT_MIN_PW, SERVO_DEFAULT_MAX_PW)) +#define US_TO_ANGLE(us) int16_t(map((us), SERVO_DEFAULT_MIN_PW, SERVO_DEFAULT_MAX_PW, minAngle, maxAngle)) + +void libServo::servoWrite(uint8_t inPin, uint16_t duty_cycle) { #ifdef SERVO0_TIMER_NUM - if (this->servoIndex == 0) { - this->pwmSetDuty(duty_cycle); + if (servoIndex == 0) { + pwmSetDuty(duty_cycle); return; } #endif - timer_dev *tdev = PIN_MAP[pin].timer_device; - uint8_t tchan = PIN_MAP[pin].timer_channel; + timer_dev *tdev = PIN_MAP[inPin].timer_device; + uint8_t tchan = PIN_MAP[inPin].timer_channel; if (tdev) timer_set_compare(tdev, tchan, duty_cycle); } libServo::libServo() { - this->servoIndex = ServoCount < MAX_SERVOS ? ServoCount++ : INVALID_SERVO; + servoIndex = ServoCount < MAX_SERVOS ? ServoCount++ : INVALID_SERVO; } -bool libServo::attach(const int32_t pin, const int32_t minAngle, const int32_t maxAngle) { - if (this->servoIndex >= MAX_SERVOS) return false; - if (pin >= BOARD_NR_GPIO_PINS) return false; +bool libServo::attach(const int32_t inPin, const int32_t inMinAngle, const int32_t inMaxAngle) { + if (servoIndex >= MAX_SERVOS) return false; + if (inPin >= BOARD_NR_GPIO_PINS) return false; - this->minAngle = minAngle; - this->maxAngle = maxAngle; - this->angle = -1; + minAngle = inMinAngle; + maxAngle = inMaxAngle; + angle = -1; #ifdef SERVO0_TIMER_NUM - if (this->servoIndex == 0 && this->setupSoftPWM(pin)) { - this->pin = pin; // set attached() + if (servoIndex == 0 && setupSoftPWM(inPin)) { + pin = inPin; // set attached() return true; } #endif - if (!PWM_PIN(pin)) return false; + if (!PWM_PIN(inPin)) return false; - timer_dev *tdev = PIN_MAP[pin].timer_device; - //uint8_t tchan = PIN_MAP[pin].timer_channel; + timer_dev *tdev = PIN_MAP[inPin].timer_device; + //uint8_t tchan = PIN_MAP[inPin].timer_channel; - SET_PWM(pin); - servoWrite(pin, 0); + SET_PWM(inPin); + servoWrite(inPin, 0); timer_pause(tdev); timer_set_prescaler(tdev, SERVO_PRESCALER - 1); // prescaler is 1-based @@ -109,25 +107,24 @@ bool libServo::attach(const int32_t pin, const int32_t minAngle, const int32_t m timer_generate_update(tdev); timer_resume(tdev); - this->pin = pin; // set attached() - + pin = inPin; // set attached() return true; } bool libServo::detach() { - if (!this->attached()) return false; - this->angle = -1; - servoWrite(this->pin, 0); + if (!attached()) return false; + angle = -1; + servoWrite(pin, 0); return true; } int32_t libServo::read() const { - if (this->attached()) { + if (attached()) { #ifdef SERVO0_TIMER_NUM - if (this->servoIndex == 0) return this->angle; + if (servoIndex == 0) return angle; #endif - timer_dev *tdev = PIN_MAP[this->pin].timer_device; - uint8_t tchan = PIN_MAP[this->pin].timer_channel; + timer_dev *tdev = PIN_MAP[pin].timer_device; + uint8_t tchan = PIN_MAP[pin].timer_channel; return US_TO_ANGLE(COMPARE_TO_US(timer_get_compare(tdev, tchan))); } return 0; @@ -137,12 +134,12 @@ void libServo::move(const int32_t value) { constexpr uint16_t servo_delay[] = SERVO_DELAY; static_assert(COUNT(servo_delay) == NUM_SERVOS, "SERVO_DELAY must be an array NUM_SERVOS long."); - if (this->attached()) { - this->angle = constrain(value, this->minAngle, this->maxAngle); - servoWrite(this->pin, US_TO_COMPARE(ANGLE_TO_US(this->angle))); - safe_delay(servo_delay[this->servoIndex]); + if (attached()) { + angle = constrain(value, minAngle, maxAngle); + servoWrite(pin, US_TO_COMPARE(ANGLE_TO_US(angle))); + safe_delay(servo_delay[servoIndex]); #if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) - this->detach(); + detach(); #endif } } @@ -169,13 +166,13 @@ void libServo::move(const int32_t value) { } } - bool libServo::setupSoftPWM(const int32_t pin) { + bool libServo::setupSoftPWM(const int32_t inPin) { timer_dev *tdev = get_timer_dev(SERVO0_TIMER_NUM); if (!tdev) return false; #ifdef SERVO0_PWM_OD - OUT_WRITE_OD(pin, 1); + OUT_WRITE_OD(inPin, 1); #else - OUT_WRITE(pin, 0); + OUT_WRITE(inPin, 0); #endif timer_pause(tdev); @@ -206,9 +203,9 @@ void libServo::move(const int32_t value) { timer_disable_irq(tdev, 1); timer_disable_irq(tdev, 2); #ifdef SERVO0_PWM_OD - OUT_WRITE_OD(this->pin, 1); // off + OUT_WRITE_OD(pin, 1); // off #else - OUT_WRITE(this->pin, 0); + OUT_WRITE(pin, 0); #endif } } @@ -221,7 +218,7 @@ void libServo::move(const int32_t value) { #else - bool libServo::setupSoftPWM(const int32_t pin) { return false; } + bool libServo::setupSoftPWM(const int32_t inPin) { return false; } void libServo::pwmSetDuty(const uint16_t duty_cycle) {} void libServo::pauseSoftPWM() {} diff --git a/Marlin/src/HAL/HAL_STM32F1/Servo.h b/Marlin/src/HAL/HAL_STM32F1/Servo.h index f97ca7486bbe..92f4dd678d34 100644 --- a/Marlin/src/HAL/HAL_STM32F1/Servo.h +++ b/Marlin/src/HAL/HAL_STM32F1/Servo.h @@ -41,7 +41,7 @@ class libServo { public: libServo(); bool attach(const int32_t pin, const int32_t minAngle=SERVO_DEFAULT_MIN_ANGLE, const int32_t maxAngle=SERVO_DEFAULT_MAX_ANGLE); - bool attached() const { return this->pin != NOT_ATTACHED; } + bool attached() const { return pin != NOT_ATTACHED; } bool detach(); void move(const int32_t value); int32_t read() const; diff --git a/Marlin/src/HAL/HAL_STM32_F4_F7/Servo.cpp b/Marlin/src/HAL/HAL_STM32_F4_F7/Servo.cpp index 736ddd45e432..b3aac77615d4 100644 --- a/Marlin/src/HAL/HAL_STM32_F4_F7/Servo.cpp +++ b/Marlin/src/HAL/HAL_STM32_F4_F7/Servo.cpp @@ -30,22 +30,22 @@ #include "Servo.h" int8_t libServo::attach(const int pin) { - if (this->servoIndex >= MAX_SERVOS) return -1; - return Servo::attach(pin); + if (servoIndex >= MAX_SERVOS) return -1; + return super::attach(pin); } int8_t libServo::attach(const int pin, const int min, const int max) { - return Servo::attach(pin, min, max); + return super::attach(pin, min, max); } void libServo::move(const int value) { constexpr uint16_t servo_delay[] = SERVO_DELAY; static_assert(COUNT(servo_delay) == NUM_SERVOS, "SERVO_DELAY must be an array NUM_SERVOS long."); - if (this->attach(0) >= 0) { - this->write(value); - safe_delay(servo_delay[this->servoIndex]); + if (attach(0) >= 0) { + write(value); + safe_delay(servo_delay[servoIndex]); #if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) - this->detach(); + detach(); #endif } } diff --git a/Marlin/src/HAL/HAL_TEENSY31_32/Servo.cpp b/Marlin/src/HAL/HAL_TEENSY31_32/Servo.cpp index 7af900b149a2..6451f6b1722e 100644 --- a/Marlin/src/HAL/HAL_TEENSY31_32/Servo.cpp +++ b/Marlin/src/HAL/HAL_TEENSY31_32/Servo.cpp @@ -29,25 +29,25 @@ uint8_t servoPin[MAX_SERVOS] = { 0 }; -int8_t libServo::attach(const int pin) { - if (this->servoIndex >= MAX_SERVOS) return -1; - if (pin > 0) servoPin[this->servoIndex] = pin; - return Servo::attach(servoPin[this->servoIndex]); +int8_t libServo::attach(const int inPin) { + if (servoIndex >= MAX_SERVOS) return -1; + if (inPin > 0) servoPin[servoIndex] = inPin; + return super::attach(servoPin[servoIndex]); } -int8_t libServo::attach(const int pin, const int min, const int max) { - if (pin > 0) servoPin[this->servoIndex] = pin; - return Servo::attach(servoPin[this->servoIndex], min, max); +int8_t libServo::attach(const int inPin, const int inMin, const int inMax) { + if (inPin > 0) servoPin[servoIndex] = inPin; + return super::attach(servoPin[servoIndex], inMin, inMax); } void libServo::move(const int value) { constexpr uint16_t servo_delay[] = SERVO_DELAY; static_assert(COUNT(servo_delay) == NUM_SERVOS, "SERVO_DELAY must be an array NUM_SERVOS long."); - if (this->attach(0) >= 0) { - this->write(value); - safe_delay(servo_delay[this->servoIndex]); + if (attach(0) >= 0) { + write(value); + safe_delay(servo_delay[servoIndex]); #if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) - this->detach(); + detach(); #endif } } diff --git a/Marlin/src/HAL/HAL_TEENSY35_36/Servo.cpp b/Marlin/src/HAL/HAL_TEENSY35_36/Servo.cpp index faf72e9d1e33..d376b80a7df6 100644 --- a/Marlin/src/HAL/HAL_TEENSY35_36/Servo.cpp +++ b/Marlin/src/HAL/HAL_TEENSY35_36/Servo.cpp @@ -1,3 +1,24 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ #if defined(__MK64FX512__) || defined(__MK66FX1M0__) #include "../../inc/MarlinConfig.h" @@ -8,25 +29,25 @@ uint8_t servoPin[MAX_SERVOS] = { 0 }; -int8_t libServo::attach(const int pin) { - if (this->servoIndex >= MAX_SERVOS) return -1; - if (pin > 0) servoPin[this->servoIndex] = pin; - return Servo::attach(servoPin[this->servoIndex]); +int8_t libServo::attach(const int inPin) { + if (servoIndex >= MAX_SERVOS) return -1; + if (inPin > 0) servoPin[servoIndex] = inPin; + return super::attach(servoPin[servoIndex]); } -int8_t libServo::attach(const int pin, const int min, const int max) { - if (pin > 0) servoPin[this->servoIndex] = pin; - return Servo::attach(servoPin[this->servoIndex], min, max); +int8_t libServo::attach(const int inPin, const int inMin, const int inMax) { + if (inPin > 0) servoPin[servoIndex] = inPin; + return super::attach(servoPin[servoIndex], inMin, inMax); } void libServo::move(const int value) { constexpr uint16_t servo_delay[] = SERVO_DELAY; static_assert(COUNT(servo_delay) == NUM_SERVOS, "SERVO_DELAY must be an array NUM_SERVOS long."); - if (this->attach(0) >= 0) { - this->write(value); - safe_delay(servo_delay[this->servoIndex]); + if (attach(0) >= 0) { + write(value); + safe_delay(servo_delay[servoIndex]); #if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) - this->detach(); + detach(); #endif } } diff --git a/Marlin/src/HAL/shared/servo.cpp b/Marlin/src/HAL/shared/servo.cpp index 22cf6bc88f40..b5975e58e708 100644 --- a/Marlin/src/HAL/shared/servo.cpp +++ b/Marlin/src/HAL/shared/servo.cpp @@ -58,11 +58,11 @@ #include "servo.h" #include "servo_private.h" -ServoInfo_t servo_info[MAX_SERVOS]; // static array of servo info structures -uint8_t ServoCount = 0; // the total number of attached servos +ServoInfo_t servo_info[MAX_SERVOS]; // static array of servo info structures +uint8_t ServoCount = 0; // the total number of attached servos -#define SERVO_MIN() (MIN_PULSE_WIDTH - this->min * 4) // minimum value in uS for this servo -#define SERVO_MAX() (MAX_PULSE_WIDTH - this->max * 4) // maximum value in uS for this servo +#define SERVO_MIN(v) (MIN_PULSE_WIDTH - (v) * 4) // minimum value in uS for this servo +#define SERVO_MAX(v) (MAX_PULSE_WIDTH - (v) * 4) // maximum value in uS for this servo /************ static functions common to all instances ***********************/ @@ -79,54 +79,54 @@ static boolean isTimerActive(timer16_Sequence_t timer) { Servo::Servo() { if (ServoCount < MAX_SERVOS) { - this->servoIndex = ServoCount++; // assign a servo index to this instance - servo_info[this->servoIndex].ticks = usToTicks(DEFAULT_PULSE_WIDTH); // store default values - 12 Aug 2009 + servoIndex = ServoCount++; // assign a servo index to this instance + servo_info[servoIndex].ticks = usToTicks(DEFAULT_PULSE_WIDTH); // store default values - 12 Aug 2009 } else - this->servoIndex = INVALID_SERVO; // too many servos + servoIndex = INVALID_SERVO; // too many servos } -int8_t Servo::attach(const int pin) { - return this->attach(pin, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH); +int8_t Servo::attach(const int inPin) { + return attach(inPin, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH); } -int8_t Servo::attach(const int pin, const int min, const int max) { +int8_t Servo::attach(const int inPin, const int inMin, const int inMax) { - if (this->servoIndex >= MAX_SERVOS) return -1; + if (servoIndex >= MAX_SERVOS) return -1; - if (pin > 0) servo_info[this->servoIndex].Pin.nbr = pin; - pinMode(servo_info[this->servoIndex].Pin.nbr, OUTPUT); // set servo pin to output + if (inPin > 0) servo_info[servoIndex].Pin.nbr = inPin; + pinMode(servo_info[servoIndex].Pin.nbr, OUTPUT); // set servo pin to output - // todo min/max check: ABS(min - MIN_PULSE_WIDTH) /4 < 128 - this->min = (MIN_PULSE_WIDTH - min) / 4; //resolution of min/max is 4 uS - this->max = (MAX_PULSE_WIDTH - max) / 4; + // TODO: min/max check: ABS(min - MIN_PULSE_WIDTH) / 4 < 128 + min = (MIN_PULSE_WIDTH - inMin) / 4; //resolution of min/max is 4 uS + max = (MAX_PULSE_WIDTH - inMax) / 4; // initialize the timer if it has not already been initialized timer16_Sequence_t timer = SERVO_INDEX_TO_TIMER(servoIndex); if (!isTimerActive(timer)) initISR(timer); - servo_info[this->servoIndex].Pin.isActive = true; // this must be set after the check for isTimerActive + servo_info[servoIndex].Pin.isActive = true; // this must be set after the check for isTimerActive - return this->servoIndex; + return servoIndex; } void Servo::detach() { - servo_info[this->servoIndex].Pin.isActive = false; + servo_info[servoIndex].Pin.isActive = false; timer16_Sequence_t timer = SERVO_INDEX_TO_TIMER(servoIndex); if (!isTimerActive(timer)) finISR(timer); } void Servo::write(int value) { if (value < MIN_PULSE_WIDTH) // treat values less than 544 as angles in degrees (valid values in microseconds are handled as microseconds) - value = map(constrain(value, 0, 180), 0, 180, SERVO_MIN(), SERVO_MAX()); - this->writeMicroseconds(value); + value = map(constrain(value, 0, 180), 0, 180, SERVO_MIN(min), SERVO_MAX(max)); + writeMicroseconds(value); } void Servo::writeMicroseconds(int value) { // calculate and store the values for the given channel - byte channel = this->servoIndex; + byte channel = servoIndex; if (channel < MAX_SERVOS) { // ensure channel is valid // ensure pulse width is valid - value = constrain(value, SERVO_MIN(), SERVO_MAX()) - (TRIM_DURATION); + value = constrain(value, SERVO_MIN(min), SERVO_MAX(max)) - (TRIM_DURATION); value = usToTicks(value); // convert to ticks after compensating for interrupt overhead - 12 Aug 2009 CRITICAL_SECTION_START; @@ -136,22 +136,22 @@ void Servo::writeMicroseconds(int value) { } // return the value as degrees -int Servo::read() { return map(this->readMicroseconds() + 1, SERVO_MIN(), SERVO_MAX(), 0, 180); } +int Servo::read() { return map(readMicroseconds() + 1, SERVO_MIN(min), SERVO_MAX(max), 0, 180); } int Servo::readMicroseconds() { - return (this->servoIndex == INVALID_SERVO) ? 0 : ticksToUs(servo_info[this->servoIndex].ticks) + (TRIM_DURATION); + return (servoIndex == INVALID_SERVO) ? 0 : ticksToUs(servo_info[servoIndex].ticks) + (TRIM_DURATION); } -bool Servo::attached() { return servo_info[this->servoIndex].Pin.isActive; } +bool Servo::attached() { return servo_info[servoIndex].Pin.isActive; } void Servo::move(const int value) { constexpr uint16_t servo_delay[] = SERVO_DELAY; static_assert(COUNT(servo_delay) == NUM_SERVOS, "SERVO_DELAY must be an array NUM_SERVOS long."); - if (this->attach(0) >= 0) { - this->write(value); - safe_delay(servo_delay[this->servoIndex]); + if (attach(0) >= 0) { + write(value); + safe_delay(servo_delay[servoIndex]); #if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) - this->detach(); + detach(); #endif } } diff --git a/Marlin/src/feature/twibus.cpp b/Marlin/src/feature/twibus.cpp index ccd778120ddb..f4fe512cdf3f 100644 --- a/Marlin/src/feature/twibus.cpp +++ b/Marlin/src/feature/twibus.cpp @@ -34,12 +34,12 @@ TWIBus::TWIBus() { #else Wire.begin(I2C_SLAVE_ADDRESS); // Join the bus as a slave #endif - this->reset(); + reset(); } void TWIBus::reset() { - this->buffer_s = 0; - this->buffer[0] = 0x00; + buffer_s = 0; + buffer[0] = 0x00; } void TWIBus::address(const uint8_t adr) { @@ -47,7 +47,7 @@ void TWIBus::address(const uint8_t adr) { SERIAL_ECHO_MSG("Bad I2C address (8-127)"); } - this->addr = adr; + addr = adr; #if ENABLED(DEBUG_TWIBUS) debug(PSTR("address"), adr); @@ -55,8 +55,8 @@ void TWIBus::address(const uint8_t adr) { } void TWIBus::addbyte(const char c) { - if (this->buffer_s >= COUNT(this->buffer)) return; - this->buffer[this->buffer_s++] = c; + if (buffer_s >= COUNT(buffer)) return; + buffer[buffer_s++] = c; #if ENABLED(DEBUG_TWIBUS) debug(PSTR("addbyte"), c); #endif @@ -66,26 +66,26 @@ void TWIBus::addbytes(char src[], uint8_t bytes) { #if ENABLED(DEBUG_TWIBUS) debug(PSTR("addbytes"), bytes); #endif - while (bytes--) this->addbyte(*src++); + while (bytes--) addbyte(*src++); } void TWIBus::addstring(char str[]) { #if ENABLED(DEBUG_TWIBUS) debug(PSTR("addstring"), str); #endif - while (char c = *str++) this->addbyte(c); + while (char c = *str++) addbyte(c); } void TWIBus::send() { #if ENABLED(DEBUG_TWIBUS) - debug(PSTR("send"), this->addr); + debug(PSTR("send"), addr); #endif - Wire.beginTransmission(I2C_ADDRESS(this->addr)); - Wire.write(this->buffer, this->buffer_s); + Wire.beginTransmission(I2C_ADDRESS(addr)); + Wire.write(buffer, buffer_s); Wire.endTransmission(); - this->reset(); + reset(); } // static @@ -103,22 +103,22 @@ void TWIBus::echodata(uint8_t bytes, const char prefix[], uint8_t adr) { } void TWIBus::echobuffer(const char prefix[], uint8_t adr) { - echoprefix(this->buffer_s, prefix, adr); - for (uint8_t i = 0; i < this->buffer_s; i++) SERIAL_CHAR(this->buffer[i]); + echoprefix(buffer_s, prefix, adr); + for (uint8_t i = 0; i < buffer_s; i++) SERIAL_CHAR(buffer[i]); SERIAL_EOL(); } bool TWIBus::request(const uint8_t bytes) { - if (!this->addr) return false; + if (!addr) return false; #if ENABLED(DEBUG_TWIBUS) debug(PSTR("request"), bytes); #endif // requestFrom() is a blocking function - if (Wire.requestFrom(this->addr, bytes) == 0) { + if (Wire.requestFrom(addr, bytes) == 0) { #if ENABLED(DEBUG_TWIBUS) - debug("request fail", this->addr); + debug("request fail", addr); #endif return false; } @@ -131,12 +131,12 @@ void TWIBus::relay(const uint8_t bytes) { debug(PSTR("relay"), bytes); #endif - if (this->request(bytes)) - echodata(bytes, PSTR("i2c-reply"), this->addr); + if (request(bytes)) + echodata(bytes, PSTR("i2c-reply"), addr); } uint8_t TWIBus::capture(char *dst, const uint8_t bytes) { - this->reset(); + reset(); uint8_t count = 0; while (count < bytes && Wire.available()) dst[count++] = Wire.read(); @@ -168,13 +168,13 @@ void TWIBus::flush() { #endif if (str) { - this->reset(); - this->addstring(str); + reset(); + addstring(str); } - Wire.write(this->buffer, this->buffer_s); + Wire.write(buffer, buffer_s); - this->reset(); + reset(); } #endif diff --git a/Marlin/src/feature/twibus.h b/Marlin/src/feature/twibus.h index 1e2f14cfc008..cc4047637458 100644 --- a/Marlin/src/feature/twibus.h +++ b/Marlin/src/feature/twibus.h @@ -218,7 +218,7 @@ class TWIBus { * If a string is passed, write it into the buffer first. */ void reply(char str[]=nullptr); - inline void reply(const char str[]) { this->reply((char*)str); } + inline void reply(const char str[]) { reply((char*)str); } #endif diff --git a/Marlin/src/libs/circularqueue.h b/Marlin/src/libs/circularqueue.h index 479e90daba47..6b1923986d7b 100644 --- a/Marlin/src/libs/circularqueue.h +++ b/Marlin/src/libs/circularqueue.h @@ -52,8 +52,8 @@ class CircularQueue { * items that can be stored on the queue. */ CircularQueue() { - this->buffer.size = N; - this->buffer.count = this->buffer.head = this->buffer.tail = 0; + buffer.size = N; + buffer.count = buffer.head = buffer.tail = 0; } /** @@ -63,15 +63,15 @@ class CircularQueue { * @return type T item */ T dequeue() { - if (this->isEmpty()) return T(); + if (isEmpty()) return T(); - uint8_t index = this->buffer.head; + uint8_t index = buffer.head; - --this->buffer.count; - if (++this->buffer.head == this->buffer.size) - this->buffer.head = 0; + --buffer.count; + if (++buffer.head == buffer.size) + buffer.head = 0; - return this->buffer.queue[index]; + return buffer.queue[index]; } /** @@ -82,13 +82,13 @@ class CircularQueue { * @return true if the operation was successful */ bool enqueue(T const &item) { - if (this->isFull()) return false; + if (isFull()) return false; - this->buffer.queue[this->buffer.tail] = item; + buffer.queue[buffer.tail] = item; - ++this->buffer.count; - if (++this->buffer.tail == this->buffer.size) - this->buffer.tail = 0; + ++buffer.count; + if (++buffer.tail == buffer.size) + buffer.tail = 0; return true; } @@ -98,27 +98,21 @@ class CircularQueue { * @details Returns true if there are no items on the queue, false otherwise. * @return true if queue is empty */ - bool isEmpty() { - return this->buffer.count == 0; - } + bool isEmpty() { return buffer.count == 0; } /** * @brief Checks if the queue is full * @details Returns true if the queue is full, false otherwise. * @return true if queue is full */ - bool isFull() { - return this->buffer.count == this->buffer.size; - } + bool isFull() { return buffer.count == buffer.size; } /** * @brief Gets the queue size * @details Returns the maximum number of items a queue can have. * @return the queue size */ - uint8_t size() { - return this->buffer.size; - } + uint8_t size() { return buffer.size; } /** * @brief Gets the next item from the queue without removing it @@ -126,16 +120,12 @@ class CircularQueue { * or updating the pointers. * @return first item in the queue */ - T peek() { - return this->buffer.queue[this->buffer.head]; - } + T peek() { return buffer.queue[buffer.head]; } /** * @brief Gets the number of items on the queue * @details Returns the current number of items stored on the queue. * @return number of items in the queue */ - uint8_t count() { - return this->buffer.count; - } + uint8_t count() { return buffer.count; } }; From f362dab7be04cf35d6ccaa1080acf144e61858d1 Mon Sep 17 00:00:00 2001 From: Dave Johnson Date: Wed, 25 Sep 2019 07:37:27 -0700 Subject: [PATCH 048/120] Disable PIO extra_scripts for AT90USB (#15347) --- platformio.ini | 2 -- 1 file changed, 2 deletions(-) diff --git a/platformio.ini b/platformio.ini index 14844d41817a..8817fb9bf130 100644 --- a/platformio.ini +++ b/platformio.ini @@ -88,7 +88,6 @@ build_flags = ${common.build_flags} lib_deps = ${common.lib_deps} TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip src_filter = ${common.default_src_filter} + -extra_scripts = pre:buildroot/share/atom/create_custom_upload_command_CDC.py monitor_speed = 250000 # @@ -105,7 +104,6 @@ build_flags = ${common.build_flags} lib_deps = ${common.lib_deps} TMC26XStepper=https://github.com/trinamic/TMC26XStepper/archive/master.zip src_filter = ${common.default_src_filter} + -extra_scripts = pre:buildroot/share/atom/create_custom_upload_command_DFU.py monitor_speed = 250000 # From f98999ca20b817f29f07d28f6f6df214658864d1 Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Wed, 25 Sep 2019 07:42:03 -0700 Subject: [PATCH 049/120] Fix includes in RAMPS_DUO and RAMPS_SMART (#15321) --- Marlin/src/pins/sam/pins_RAMPS_DUO.h | 2 +- Marlin/src/pins/sam/pins_RAMPS_SMART.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/pins/sam/pins_RAMPS_DUO.h b/Marlin/src/pins/sam/pins_RAMPS_DUO.h index 4f9053b8caef..d63d9a32a812 100644 --- a/Marlin/src/pins/sam/pins_RAMPS_DUO.h +++ b/Marlin/src/pins/sam/pins_RAMPS_DUO.h @@ -50,7 +50,7 @@ #define BOARD_INFO_NAME "RAMPS Duo" #define IS_RAMPS_DUO -#include "pins_RAMPS.h" +#include "../ramps/pins_RAMPS.h" // // Temperature Sensors diff --git a/Marlin/src/pins/sam/pins_RAMPS_SMART.h b/Marlin/src/pins/sam/pins_RAMPS_SMART.h index f1f593991f72..619b2d594daf 100644 --- a/Marlin/src/pins/sam/pins_RAMPS_SMART.h +++ b/Marlin/src/pins/sam/pins_RAMPS_SMART.h @@ -67,7 +67,7 @@ #define BOARD_INFO_NAME "RAMPS-SMART" #define IS_RAMPS_SMART -#include "pins_RAMPS.h" +#include "../ramps/pins_RAMPS.h" // I2C EEPROM with 4K of space #define I2C_EEPROM From c3f09e2b1bde37bfec8e7de877571455d750c64c Mon Sep 17 00:00:00 2001 From: Robby Candra Date: Wed, 25 Sep 2019 21:43:00 +0700 Subject: [PATCH 050/120] Set MAX_OVERSHOOT_PID_AUTOTUNE to 30 (#15257) --- Marlin/src/module/temperature.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index cda946dc989d..9542aa2ed2a5 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -500,7 +500,7 @@ volatile bool Temperature::temp_meas_ready = false; // Did the temperature overshoot very far? #ifndef MAX_OVERSHOOT_PID_AUTOTUNE - #define MAX_OVERSHOOT_PID_AUTOTUNE 20 + #define MAX_OVERSHOOT_PID_AUTOTUNE 30 #endif if (current_temp > target + MAX_OVERSHOOT_PID_AUTOTUNE) { SERIAL_ECHOLNPGM(MSG_PID_TEMP_TOO_HIGH); From ddd9d9032aa5cf0ee1fea8a17b14428e622cad14 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Sep 2019 17:12:01 -0500 Subject: [PATCH 051/120] Fix option / string name conflict --- .../src/lcd/extensible_ui/lib/lulzbot/language/language_en.h | 2 +- .../src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h | 2 +- .../lib/lulzbot/screens/advanced_settings_menu.cpp | 4 ++-- .../lib/lulzbot/screens/bio_advanced_settings.cpp | 2 +- .../lib/lulzbot/screens/junction_deviation_screen.cpp | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h index 02a284607e42..67904ceaef39 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h @@ -66,7 +66,7 @@ namespace Language_en { PROGMEM Language_Str AMAX_E3 = u8"Amax E3"; PROGMEM Language_Str AMAX_E4 = u8"Amax E4"; PROGMEM Language_Str JERK = u8"Jerk"; - PROGMEM Language_Str JUNCTION_DEVIATION = u8"Junc Dev"; + PROGMEM Language_Str JUNC_DEVIATION = u8"Junc Dev"; PROGMEM Language_Str BACKLASH = u8"Backlash"; PROGMEM Language_Str SMOOTHING = u8"Smoothing"; PROGMEM Language_Str CORRECTION = u8"Correction"; diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h index d740fc643bb0..a9ad20d320e5 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_fr.h @@ -48,7 +48,7 @@ namespace Language_fr { PROGMEM Language_Str ACCEL_PRINTING = u8"A impr."; PROGMEM Language_Str ACCEL_TRAVEL = u8"A dépl."; PROGMEM Language_Str ACCEL_RETRACT = u8"A retrait"; - PROGMEM Language_Str JUNCTION_DEVIATION = u8"Déviat. jonct."; + PROGMEM Language_Str JUNC_DEVIATION = u8"Déviat. jonct."; //PROGMEM Language_Str BACKLASH = u8"Backlash"; PROGMEM Language_Str SMOOTHING = u8"Lissage"; PROGMEM Language_Str MOTOR_CURRENT = u8"Courant"; diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/advanced_settings_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/advanced_settings_menu.cpp index 4a4947666b17..f4aad3b5933e 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/advanced_settings_menu.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/advanced_settings_menu.cpp @@ -83,7 +83,7 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) { .tag(5) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXTF(VELOCITY)) .tag(6) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXTF(ACCELERATION)) #if ENABLED(JUNCTION_DEVIATION) - .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JUNCTION_DEVIATION)) + .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JUNC_DEVIATION)) #else .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JERK)) #endif @@ -136,7 +136,7 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) { .tag(5) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXTF(VELOCITY)) .tag(6) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXTF(ACCELERATION)) #if ENABLED(JUNCTION_DEVIATION) - .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JUNCTION_DEVIATION)) + .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JUNC_DEVIATION)) #else .tag(7) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JERK)) #endif diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_advanced_settings.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_advanced_settings.cpp index c42cbe2e54c1..1355010c0b52 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_advanced_settings.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_advanced_settings.cpp @@ -69,7 +69,7 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) { .tag(8) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXTF(VELOCITY)) .tag(9) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXTF(ACCELERATION)) #if ENABLED(JUNCTION_DEVIATION) - .tag(10) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JUNCTION_DEVIATION)) + .tag(10) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JUNC_DEVIATION)) #else .tag(10) .button( BTN_POS(2,4), BTN_SIZE(1,1), GET_TEXTF(JERK)) #endif diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/junction_deviation_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/junction_deviation_screen.cpp index b4381b7efffd..56a3b13365c5 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/junction_deviation_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/junction_deviation_screen.cpp @@ -34,7 +34,7 @@ void JunctionDeviationScreen::onRedraw(draw_mode_t what) { widgets_t w(what); w.precision(2); w.units(GET_TEXTF(UNITS_MM)); - w.heading(GET_TEXTF(JUNCTION_DEVIATION)); + w.heading(GET_TEXTF(JUNC_DEVIATION)); w.color(other) .adjuster( 2, PSTR(""), getJunctionDeviation_mm() ); w.increments(); } From 04e4eb35beb00d8c68d7d909087c051df9d0f62c Mon Sep 17 00:00:00 2001 From: DrDitto Date: Wed, 25 Sep 2019 17:41:04 -0600 Subject: [PATCH 052/120] MKS_MINI, FYSETC RGB, backlight (#15334) --- Marlin/src/Marlin.cpp | 10 +- .../lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp | 27 ++- Marlin/src/lcd/dogm/ultralcd_DOGM.cpp | 8 +- Marlin/src/lcd/dogm/ultralcd_DOGM.h | 180 ++++++++++++------ Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h | 1 - 5 files changed, 149 insertions(+), 77 deletions(-) diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp index 46a6aa61ce2c..8be6a345b06a 100644 --- a/Marlin/src/Marlin.cpp +++ b/Marlin/src/Marlin.cpp @@ -974,6 +974,12 @@ void setup() { // UI must be initialized before EEPROM // (because EEPROM code calls the UI). + + // Set up LEDs early + #if HAS_COLOR_LEDS + leds.setup(); + #endif + ui.init(); ui.reset_status(); @@ -1068,10 +1074,6 @@ void setup() { OUT_WRITE(STAT_LED_BLUE_PIN, LOW); // OFF #endif - #if HAS_COLOR_LEDS - leds.setup(); - #endif - #if HAS_CASE_LIGHT #if DISABLED(CASE_LIGHT_USE_NEOPIXEL) if (PWM_PIN(CASE_LIGHT_PIN)) SET_PWM(CASE_LIGHT_PIN); else SET_OUTPUT(CASE_LIGHT_PIN); diff --git a/Marlin/src/lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp b/Marlin/src/lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp index 1dfb6be76206..5a1326daf913 100644 --- a/Marlin/src/lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp +++ b/Marlin/src/lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp @@ -170,32 +170,45 @@ uint8_t u8g_dev_uc1701_mini12864_HAL_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t m case U8G_DEV_MSG_INIT: u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS); u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_HAL_init_seq); + #if ENABLED(MKS_MINI_12864) + u8g_Delay(5); + #endif break; case U8G_DEV_MSG_STOP: break; case U8G_DEV_MSG_PAGE_NEXT: { u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem); - u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_HAL_data_start); - u8g_WriteByte(u8g, dev, 0x0B0 | (2*pb->p.page)); /* select current page */ - u8g_SetAddress(u8g, dev, 1); /* data mode */ + #if ENABLED(MKS_MINI_12864) + u8g_Delay(5); + #endif + u8g_WriteByte(u8g, dev, 0x0B0 | (2 * pb->p.page)); /* select current page */ + u8g_SetAddress(u8g, dev, 1); /* data mode */ u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)pb->buf); u8g_SetChipSelect(u8g, dev, 0); - u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_HAL_data_start); - u8g_WriteByte(u8g, dev, 0x0B0 | (2*pb->p.page+1)); /* select current page */ - u8g_SetAddress(u8g, dev, 1); /* data mode */ + #if ENABLED(MKS_MINI_12864) + u8g_Delay(5); + #endif + u8g_WriteByte(u8g, dev, 0x0B0 | (2 * pb->p.page + 1)); /* select current page */ + u8g_SetAddress(u8g, dev, 1); /* data mode */ u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width); u8g_SetChipSelect(u8g, dev, 0); } break; case U8G_DEV_MSG_CONTRAST: u8g_SetChipSelect(u8g, dev, 1); - u8g_SetAddress(u8g, dev, 0); /* instruction mode */ + #if ENABLED(MKS_MINI_12864) + u8g_Delay(5); + #endif + u8g_SetAddress(u8g, dev, 0); /* instruction mode */ u8g_WriteByte(u8g, dev, 0x081); u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2); u8g_SetChipSelect(u8g, dev, 0); + #if ENABLED(MKS_MINI_12864) + u8g_Delay(5); + #endif return 1; } return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg); diff --git a/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp b/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp index 3d48243adf4c..02c953234909 100644 --- a/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp +++ b/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp @@ -21,7 +21,7 @@ */ /** - * ultralcd_DOGM.cpp + * lcd/dogm/ultralcd_DOGM.h * * Implementation of the LCD display routines for a DOGM128 graphic display. * by STB for ErikZalm/Marlin. Common LCD 128x64 pixel graphic displays. @@ -30,9 +30,9 @@ * License: http://opensource.org/licenses/BSD-3-Clause * * With the use of: - * u8glib by Oliver Kraus - * https://github.com/olikraus/U8glib_Arduino - * License: http://opensource.org/licenses/BSD-3-Clause + * u8glib by Oliver Kraus + * https://github.com/olikraus/U8glib_Arduino + * License: http://opensource.org/licenses/BSD-3-Clause */ #include "../../inc/MarlinConfigPre.h" diff --git a/Marlin/src/lcd/dogm/ultralcd_DOGM.h b/Marlin/src/lcd/dogm/ultralcd_DOGM.h index 4ccbcbe8b24c..e8d1b8a1e364 100644 --- a/Marlin/src/lcd/dogm/ultralcd_DOGM.h +++ b/Marlin/src/lcd/dogm/ultralcd_DOGM.h @@ -22,7 +22,7 @@ #pragma once /** - * ultralcd_DOGM.h + * lcd/dogm/ultralcd_DOGM.h */ #include "../../inc/MarlinConfigPre.h" @@ -30,7 +30,8 @@ #include #include "HAL_LCD_class_defines.h" -// LCD selection +//#define ALTERNATIVE_LCD + #if ENABLED(REPRAPWORLD_GRAPHICAL_LCD) #define U8G_CLASS U8GLIB_ST7920_128X64_4X #if DISABLED(SDSUPPORT) && (LCD_PINS_D4 == SCK_PIN) && (LCD_PINS_ENABLE == MOSI_PIN) @@ -40,102 +41,159 @@ #endif #elif ENABLED(U8GLIB_ST7920) + // RepRap Discount Full Graphics Smart Controller + #if DISABLED(SDSUPPORT) && (LCD_PINS_D4 == SCK_PIN) && (LCD_PINS_ENABLE == MOSI_PIN) - #define U8G_CLASS U8GLIB_ST7920_128X64_4X_HAL - #define U8G_PARAM LCD_PINS_RS // 2 stripes, HW SPI (shared with SD card, on AVR does not use standard LCD adapter) + #define U8G_CLASS U8GLIB_ST7920_128X64_4X_HAL // 2 stripes, HW SPI (Shared with SD card. Non-standard LCD adapter on AVR.) + #define U8G_PARAM LCD_PINS_RS #else - //#define U8G_CLASS U8GLIB_ST7920_128X64_4X - //#define U8G_PARAM LCD_PINS_D4, LCD_PINS_ENABLE, LCD_PINS_RS // Original u8glib device. 2 stripes, SW SPI - #define U8G_CLASS U8GLIB_ST7920_128X64_RRD - #define U8G_PARAM LCD_PINS_D4, LCD_PINS_ENABLE, LCD_PINS_RS // Number of stripes can be adjusted in ultralcd_st7920_u8glib_rrd.h with PAGE_HEIGHT - // AVR version ignores these pin settings - // HAL version uses these pin settings + #if ENABLED(ALTERNATIVE_LCD) + #define U8G_CLASS U8GLIB_ST7920_128X64_4X // 2 stripes, SW SPI (Original u8glib device) + #else + #define U8G_CLASS U8GLIB_ST7920_128X64_RRD // Adjust stripes with PAGE_HEIGHT in ultralcd_st7920_u8glib_rrd.h + #endif + #define U8G_PARAM LCD_PINS_D4, LCD_PINS_ENABLE, LCD_PINS_RS // AVR version ignores these pin settings + // HAL version uses these pin settings #endif #elif ENABLED(CARTESIO_UI) - // The CartesioUI display - //#define U8G_CLASS U8GLIB_DOGM128_2X - //#define U8G_PARAM DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS, DOGLCD_A0 // 4 stripes - #define U8G_CLASS U8GLIB_DOGM128_2X - #define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // 4 stripes + + // CartesioUI LCD + + #if ENABLED(ALTERNATIVE_LCD) + #define U8G_CLASS U8GLIB_DOGM128_2X // 4 stripes + #define FORCE_SOFT_SPI // SW-SPI + #else + #define U8G_CLASS U8GLIB_DOGM128_2X // 4 stripes (HW-SPI) + #endif #elif ENABLED(U8GLIB_LM6059_AF) + // Based on the Adafruit ST7565 (http://www.adafruit.com/products/250) - //#define U8G_CLASS U8GLIB_LM6059 - //#define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // 8 stripes - #define U8G_CLASS U8GLIB_LM6059_2X - #define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // 4 stripes + + #if ENABLED(ALTERNATIVE_LCD) + #define U8G_CLASS U8GLIB_LM6059 // 8 stripes (HW-SPI) + #else + #define U8G_CLASS U8GLIB_LM6059_2X // 4 stripes (HW-SPI) + #endif #elif ENABLED(U8GLIB_ST7565_64128N) - // The MaKrPanel, Mini Viki, Viki 2.0 & AZSMZ 12864 ST7565 controller + + // MaKrPanel, Mini Viki, Viki 2.0, AZSMZ 12864 ST7565 controller + #define SMART_RAMPS (MB(RAMPS_SMART_EFB) || MB(RAMPS_SMART_EEB) || MB(RAMPS_SMART_EFF) || MB(RAMPS_SMART_EEF) || MB(RAMPS_SMART_SF)) - #if DOGLCD_SCK == SCK_PIN && DOGLCD_MOSI == MOSI_PIN && !SMART_RAMPS - #define U8G_CLASS U8GLIB_64128N_2X_HAL - #define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // using HW-SPI - #else - #define U8G_CLASS U8GLIB_64128N_2X_HAL - #define U8G_PARAM DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS, DOGLCD_A0 // using SW-SPI + #define U8G_CLASS U8GLIB_64128N_2X_HAL // 4 stripes (HW-SPI) + #if SMART_RAMPS || DOGLCD_SCK != SCK_PIN || DOGLCD_MOSI != MOSI_PIN + #define FORCE_SOFT_SPI // SW-SPI #endif #elif ENABLED(MKS_12864OLED_SSD1306) + // MKS 128x64 (SSD1306) OLED I2C LCD - #define U8G_CLASS U8GLIB_SSD1306_128X64 - #define U8G_PARAM DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS, DOGLCD_A0 // 8 stripes - //#define U8G_CLASS U8GLIB_SSD1306_128X64_2X - //#define U8G_PARAM DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS, DOGLCD_A0 // 4 stripes + + #define FORCE_SOFT_SPI // SW-SPI + + #if ENABLED(ALTERNATIVE_LCD) + #define U8G_CLASS U8GLIB_SSD1306_128X64_2X // 4 stripes + #else + #define U8G_CLASS U8GLIB_SSD1306_128X64 // 8 stripes + #endif #elif ENABLED(U8GLIB_SSD1306) - // Generic support for SSD1306 OLED I2C LCDs - //#define U8G_CLASS U8GLIB_SSD1306_128X64_2X_I2C_2_WIRE - //#define U8G_PARAM (U8G_I2C_OPT_NONE | U8G_I2C_OPT_FAST) // 4 stripes - #define U8G_CLASS U8GLIB_SSD1306_128X64_2X - #define U8G_PARAM (U8G_I2C_OPT_NONE | U8G_I2C_OPT_FAST) // 4 stripes + + // Generic SSD1306 OLED I2C LCD + + #if ENABLED(ALTERNATIVE_LCD) + #define U8G_CLASS U8GLIB_SSD1306_128X64_2X_I2C_2_WIRE // 4 stripes + #else + #define U8G_CLASS U8GLIB_SSD1306_128X64_2X // 4 stripes + #endif + #define U8G_PARAM (U8G_I2C_OPT_NONE | U8G_I2C_OPT_FAST) #elif ENABLED(MKS_12864OLED) + // MKS 128x64 (SH1106) OLED I2C LCD - #define U8G_CLASS U8GLIB_SH1106_128X64 - #define U8G_PARAM DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS, DOGLCD_A0 // 8 stripes - //#define U8G_CLASS U8GLIB_SH1106_128X64_2X - //#define U8G_PARAM DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS, DOGLCD_A0 // 4 stripes + + #define FORCE_SOFT_SPI // SW-SPI + + #if ENABLED(ALTERNATIVE_LCD) + #define U8G_CLASS U8GLIB_SH1106_128X64_2X // 4 stripes + #else + #define U8G_CLASS U8GLIB_SH1106_128X64 // 8 stripes + #endif + #elif ENABLED(U8GLIB_SH1106) - // Generic support for SH1106 OLED I2C LCDs - //#define U8G_CLASS U8GLIB_SH1106_128X64_2X_I2C_2_WIRE - //#define U8G_PARAM (U8G_I2C_OPT_NONE | U8G_I2C_OPT_FAST) // 4 stripes - #define U8G_CLASS U8GLIB_SH1106_128X64_2X - #define U8G_PARAM (U8G_I2C_OPT_NONE | U8G_I2C_OPT_FAST) // 4 stripes + + // Generic SH1106 OLED I2C LCD + + #if ENABLED(ALTERNATIVE_LCD) + #define U8G_CLASS U8GLIB_SH1106_128X64_2X_I2C_2_WIRE // 4 stripes + #else + #define U8G_CLASS U8GLIB_SH1106_128X64_2X // 4 stripes + #endif + #define U8G_PARAM (U8G_I2C_OPT_NONE | U8G_I2C_OPT_FAST) // I2C + #elif ENABLED(U8GLIB_SSD1309) + // Generic support for SSD1309 OLED I2C LCDs + #define U8G_CLASS U8GLIB_SSD1309_128X64 - #define U8G_PARAM (U8G_I2C_OPT_NONE | U8G_I2C_OPT_FAST) -#elif ENABLED(MINIPANEL) - // MINIPanel display - //#define U8G_CLASS U8GLIB_MINI12864 - //#define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // 8 stripes - #define U8G_CLASS U8GLIB_MINI12864_2X - #define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // 8 stripes + #define U8G_PARAM (U8G_I2C_OPT_NONE | U8G_I2C_OPT_FAST) // I2C + #elif ENABLED(FYSETC_MINI_12864) - // The FYSETC_MINI_12864 display - #define U8G_CLASS U8GLIB_MINI12864_2X_HAL - #if ENABLED(FORCE_SOFT_SPI) - #define U8G_PARAM DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS, DOGLCD_A0 // 4 stripes SW-SPI + + // The FYSETC Mini 12864 display + + #define U8G_CLASS U8GLIB_MINI12864_2X_HAL // 4 stripes + +#elif ENABLED(MKS_MINI_12864) + + // The MKS_MINI_12864 V1/V2 aren't exact copies of the MiniPanel. + // Panel management is in u8g_dev_uc1701_mini12864_HAL.cpp with + // extra delays added to remove glitches seen with fast MCUs. + + #define U8G_CLASS U8GLIB_MINI12864_2X_HAL // 8 stripes (HW-SPI) + +#elif ENABLED(MINIPANEL) + + #if ENABLED(ALTERNATIVE_LCD) + #define U8G_CLASS U8GLIB_MINI12864 #else - #define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // 4 stripes HW-SPI + #define U8G_CLASS U8GLIB_MINI12864_2X // 8 stripes (HW-SPI) #endif + #elif ENABLED(U8GLIB_SH1106_EINSTART) + // Connected via motherboard header + #define U8G_CLASS U8GLIB_SH1106_128X64 #define U8G_PARAM DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS, LCD_PINS_DC, LCD_PINS_RS + #elif ENABLED(FSMC_GRAPHICAL_TFT) + // Unspecified 320x240 TFT pre-initialized by built-in bootloader + #define U8G_CLASS U8GLIB_TFT_320X240_UPSCALE_FROM_128X64 #define U8G_PARAM FSMC_CS_PIN, FSMC_RS_PIN + #else - // for regular DOGM128 display with HW-SPI - //#define U8G_CLASS U8GLIB_DOGM128 - //#define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // HW-SPI Com: CS, A0 // 8 stripes - #define U8G_CLASS U8GLIB_DOGM128_2X - #define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // HW-SPI Com: CS, A0 // 4 stripes + + #if ENABLED(ALTERNATIVE_LCD) + #define U8G_CLASS U8GLIB_DOGM128 // 8 stripes (HW-SPI) + #else + #define U8G_CLASS U8GLIB_DOGM128_2X // 4 stripes (HW-SPI) + #endif + +#endif + +// Use HW-SPI if no other option is specified +#ifndef U8G_PARAM + #if ENABLED(FORCE_SOFT_SPI) + #define U8G_PARAM DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS, DOGLCD_A0 // SW-SPI + #else + #define U8G_PARAM DOGLCD_CS, DOGLCD_A0 // HW-SPI + #endif #endif #ifndef LCD_PIXEL_WIDTH diff --git a/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h b/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h index 137952fd6777..36b558ec192b 100644 --- a/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h +++ b/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h @@ -217,7 +217,6 @@ #define DOGLCD_A0 P0_16 #define DOGLCD_SCK P0_07 #define DOGLCD_MOSI P1_20 - #define FORCE_SOFT_SPI #define LCD_BACKLIGHT_PIN -1 From 8cbb5350ad4cdfdec79ad6bdfaec40d670bc247c Mon Sep 17 00:00:00 2001 From: Marcio Teixeira Date: Wed, 25 Sep 2019 17:46:36 -0600 Subject: [PATCH 053/120] Refactor joystick support in ExtUI (#15318) --- Marlin/src/feature/joystick.cpp | 28 +++--- Marlin/src/lcd/extensible_ui/ui_api.cpp | 119 +++++++++++++----------- Marlin/src/lcd/extensible_ui/ui_api.h | 9 +- 3 files changed, 84 insertions(+), 72 deletions(-) diff --git a/Marlin/src/feature/joystick.cpp b/Marlin/src/feature/joystick.cpp index 45507339c565..bb54ff1d6db2 100644 --- a/Marlin/src/feature/joystick.cpp +++ b/Marlin/src/feature/joystick.cpp @@ -77,13 +77,15 @@ Joystick joystick; if (READ(JOY_EN_PIN)) return; #endif - auto _normalize_joy = [](float &adc, const int16_t raw, const int16_t (&joy_limits)[4]) { + auto _normalize_joy = [](float &norm_jog, const int16_t raw, const int16_t (&joy_limits)[4]) { if (WITHIN(raw, joy_limits[0], joy_limits[3])) { // within limits, check deadzone if (raw > joy_limits[2]) - adc = (raw - joy_limits[2]) / float(joy_limits[3] - joy_limits[2]); + norm_jog = (raw - joy_limits[2]) / float(joy_limits[3] - joy_limits[2]); else if (raw < joy_limits[1]) - adc = (raw - joy_limits[1]) / float(joy_limits[1] - joy_limits[0]); // negative value + norm_jog = (raw - joy_limits[1]) / float(joy_limits[1] - joy_limits[0]); // negative value + // Map normal to jog value via quadratic relationship + norm_jog = SIGN(norm_jog) * sq(norm_jog); } }; @@ -138,18 +140,22 @@ Joystick joystick; // with "jogging" encapsulated as a more general class. #if ENABLED(EXTENSIBLE_UI) - norm_jog[X_AXIS] = ExtUI::norm_jog[X_AXIS]; - norm_jog[Y_AXIS] = ExtUI::norm_jog[Y_AXIS]; - norm_jog[Z_AXIS] = ExtUI::norm_jog[Z_AXIS]; + ExtUI::_joystick_update(norm_jog); #endif - // Jogging value maps continuously (quadratic relationship) to feedrate + #if EITHER(ULTIPANEL, EXTENSIBLE_UI) + constexpr float manual_feedrate[XYZE] = MANUAL_FEEDRATE; + #endif + + // norm_jog values of [-1 .. 1] maps linearly to [-feedrate .. feedrate] float move_dist[XYZ] = { 0 }, hypot2 = 0; LOOP_XYZ(i) if (norm_jog[i]) { - move_dist[i] = seg_time * sq(norm_jog[i]) * planner.settings.max_feedrate_mm_s[i]; - // Very small movements disappear when printed as decimal with 4 digits of precision - NOLESS(move_dist[i], 0.0002f); - if (norm_jog[i] < 0) move_dist[i] *= -1; // preserve sign + move_dist[i] = seg_time * norm_jog[i] * + #if EITHER(ULTIPANEL, EXTENSIBLE_UI) + MMM_TO_MMS(manual_feedrate[i]); + #else + planner.settings.max_feedrate_mm_s[i]; + #endif hypot2 += sq(move_dist[i]); } diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp index f5cfefd21795..4affcb6d7de9 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.cpp +++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp @@ -104,14 +104,12 @@ namespace ExtUI { static struct { - uint8_t printer_killed : 1; - uint8_t manual_motion : 1; + uint8_t printer_killed : 1; + #if ENABLED(JOYSTICK) + uint8_t jogging : 1; + #endif } flags; - #if ENABLED(JOYSTICK) - float norm_jog[XYZ]; - #endif - #ifdef __SAM3X8E__ /** * Implement a special millis() to allow time measurement @@ -197,13 +195,45 @@ namespace ExtUI { #endif } - void jog(float dx, float dy, float dz) { - #if ENABLED(JOYSTICK) - norm_jog[X] = dx; - norm_jog[Y] = dy; - norm_jog[Z] = dz; - #endif - } + #if ENABLED(JOYSTICK) + /** + * Jogs in the direction given by the vector (dx, dy, dz). + * The values range from -1 to 1 mapping to the maximum + * feedrate for an axis. + * + * The axis will continue to jog until this function is + * called with all zeros. + */ + void jog(float dx, float dy, float dz) { + // The "destination" variable is used as a scratchpad in + // Marlin by GCODE routines, but should remain untouched + // during manual jogging, allowing us to reuse the space + // for our direction vector. + destination[X] = dx; + destination[Y] = dy; + destination[Z] = dz; + flags.jogging = !NEAR_ZERO(dx) || !NEAR_ZERO(dy) || !NEAR_ZERO(dz); + } + + // Called by the polling routine in "joystick.cpp" + void _joystick_update(float (&norm_jog)[XYZ]) { + if (flags.jogging) { + #define OUT_OF_RANGE(VALUE) (VALUE < -1.0f || VALUE > 1.0f) + + if (OUT_OF_RANGE(destination[X_AXIS]) || OUT_OF_RANGE(destination[Y_AXIS]) || OUT_OF_RANGE(destination[Z_AXIS])) { + // If destination[] on any axis is out of range, it + // probably means the UI forgot to stop jogging and + // ran GCODE that wrote a position to destination[]. + // To prevent a disaster, stop jogging. + flags.jogging = false; + return; + } + norm_jog[X_AXIS] = destination[X_AXIS]; + norm_jog[Y_AXIS] = destination[Y_AXIS]; + norm_jog[Z_AXIS] = destination[Z_AXIS]; + } + } + #endif bool isHeaterIdle(const extruder_t extruder) { return false @@ -288,13 +318,22 @@ namespace ExtUI { } float getAxisPosition_mm(const axis_t axis) { - return flags.manual_motion ? destination[axis] : current_position[axis]; + return + #if ENABLED(JOYSTICK) + flags.jogging ? destination[axis] : + #endif + current_position[axis]; } float getAxisPosition_mm(const extruder_t extruder) { const extruder_t old_tool = getActiveTool(); setActiveTool(extruder, true); - const float pos = flags.manual_motion ? destination[E_AXIS] : current_position[E_AXIS]; + const float pos = ( + #if ENABLED(JOYSTICK) + flags.jogging ? destination[E_AXIS] : + #endif + current_position[E_AXIS] + ); setActiveTool(old_tool, true); return pos; } @@ -343,54 +382,23 @@ namespace ExtUI { } #endif - constexpr float max_manual_feedrate[XYZE] = MANUAL_FEEDRATE; - setFeedrate_mm_s(MMM_TO_MMS(max_manual_feedrate[axis])); + constexpr float manual_feedrate[XYZE] = MANUAL_FEEDRATE; + setFeedrate_mm_s(MMM_TO_MMS(manual_feedrate[axis])); - if (!flags.manual_motion) set_destination_from_current(); + set_destination_from_current(); destination[axis] = constrain(position, min, max); - flags.manual_motion = true; + prepare_move_to_destination(); } void setAxisPosition_mm(const float position, const extruder_t extruder) { setActiveTool(extruder, true); - constexpr float max_manual_feedrate[XYZE] = MANUAL_FEEDRATE; - setFeedrate_mm_s(MMM_TO_MMS(max_manual_feedrate[E_AXIS])); - if (!flags.manual_motion) set_destination_from_current(); - destination[E_AXIS] = position; - flags.manual_motion = true; - } + constexpr float manual_feedrate[XYZE] = MANUAL_FEEDRATE; + setFeedrate_mm_s(MMM_TO_MMS(manual_feedrate[E_AXIS])); - void _processManualMoveToDestination() { - // Lower max_response_lag makes controls more responsive, but makes CPU work harder - constexpr float max_response_lag = 0.1; // seconds - constexpr uint8_t segments_to_buffer = 4; // keep planner filled with this many segments - - if (flags.manual_motion && planner.movesplanned() < segments_to_buffer) { - float saved_destination[XYZ]; - COPY(saved_destination, destination); - // Compute direction vector from current_position towards destination. - destination[X_AXIS] -= current_position[X_AXIS]; - destination[Y_AXIS] -= current_position[Y_AXIS]; - destination[Z_AXIS] -= current_position[Z_AXIS]; - const float inv_length = RSQRT(sq(destination[X_AXIS]) + sq(destination[Y_AXIS]) + sq(destination[Z_AXIS])); - // Find move segment length so that all segments can execute in less time than max_response_lag - const float scale = inv_length * feedrate_mm_s * max_response_lag / segments_to_buffer; - if (scale < 1) { - // Move a small bit towards the destination. - destination[X_AXIS] = scale * destination[X_AXIS] + current_position[X_AXIS]; - destination[Y_AXIS] = scale * destination[Y_AXIS] + current_position[Y_AXIS]; - destination[Z_AXIS] = scale * destination[Z_AXIS] + current_position[Z_AXIS]; - prepare_move_to_destination(); - COPY(destination, saved_destination); - } - else { - // We are close enough to finish off the move. - COPY(destination, saved_destination); - prepare_move_to_destination(); - flags.manual_motion = false; - } - } + set_destination_from_current(); + destination[E_AXIS] = position; + prepare_move_to_destination(); } void setActiveTool(const extruder_t extruder, bool no_move) { @@ -1044,7 +1052,6 @@ void MarlinUI::update() { } } #endif // SDSUPPORT - ExtUI::_processManualMoveToDestination(); ExtUI::onIdle(); } diff --git a/Marlin/src/lcd/extensible_ui/ui_api.h b/Marlin/src/lcd/extensible_ui/ui_api.h index 6d040e2db925..60f17b62c728 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.h +++ b/Marlin/src/lcd/extensible_ui/ui_api.h @@ -46,10 +46,6 @@ namespace ExtUI { - #if ENABLED(JOYSTICK) - extern float norm_jog[]; - #endif - // The ExtUI implementation can store up to this many bytes // in the EEPROM when the methods onStoreSettings and // onLoadSettings are called. @@ -84,7 +80,10 @@ namespace ExtUI { void enableHeater(const heater_t); void enableHeater(const extruder_t); - void jog(float dx, float dy, float dz); + #if ENABLED(JOYSTICK) + void jog(float dx, float dy, float dz); + void _joystick_update(float (&norm_jog)[XYZ]); + #endif /** * Getters and setters From 39578a5919dddf227f4d79910c43ea04c4d1d103 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Sep 2019 19:57:41 -0500 Subject: [PATCH 054/120] Fix probe without leveling --- Marlin/src/module/probe.h | 79 +++++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 36 deletions(-) diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h index 502777691bfe..8efb75e41d44 100644 --- a/Marlin/src/module/probe.h +++ b/Marlin/src/module/probe.h @@ -50,42 +50,49 @@ extern const char msg_wait_for_bed_heating[25]; #endif - inline float probe_min_x() { - return _MAX( - #if ENABLED(DELTA) || IS_SCARA - PROBE_X_MIN, MESH_MIN_X - #else - (X_MIN_BED) + (MIN_PROBE_EDGE), (X_MIN_POS) + probe_offset[X_AXIS] - #endif - ); - } - inline float probe_max_x() { - return _MIN( - #if ENABLED(DELTA) || IS_SCARA - PROBE_X_MAX, MESH_MAX_X - #else - (X_MAX_BED) - (MIN_PROBE_EDGE), (X_MAX_POS) + probe_offset[X_AXIS] - #endif - ); - } - inline float probe_min_y() { - return _MAX( - #if ENABLED(DELTA) || IS_SCARA - PROBE_Y_MIN, MESH_MIN_Y - #else - (Y_MIN_BED) + (MIN_PROBE_EDGE), (Y_MIN_POS) + probe_offset[Y_AXIS] - #endif - ); - } - inline float probe_max_y() { - return _MIN( - #if ENABLED(DELTA) || IS_SCARA - PROBE_Y_MAX, MESH_MAX_Y - #else - (Y_MAX_BED) - (MIN_PROBE_EDGE), (Y_MAX_POS) + probe_offset[Y_AXIS] - #endif - ); - } + #if HAS_LEVELING + + inline float probe_min_x() { + return _MAX( + #if ENABLED(DELTA) || IS_SCARA + PROBE_X_MIN, MESH_MIN_X + #else + (X_MIN_BED) + (MIN_PROBE_EDGE), (X_MIN_POS) + probe_offset[X_AXIS] + #endif + ); + } + + inline float probe_max_x() { + return _MIN( + #if ENABLED(DELTA) || IS_SCARA + PROBE_X_MAX, MESH_MAX_X + #else + (X_MAX_BED) - (MIN_PROBE_EDGE), (X_MAX_POS) + probe_offset[X_AXIS] + #endif + ); + } + + inline float probe_min_y() { + return _MAX( + #if ENABLED(DELTA) || IS_SCARA + PROBE_Y_MIN, MESH_MIN_Y + #else + (Y_MIN_BED) + (MIN_PROBE_EDGE), (Y_MIN_POS) + probe_offset[Y_AXIS] + #endif + ); + } + + inline float probe_max_y() { + return _MIN( + #if ENABLED(DELTA) || IS_SCARA + PROBE_Y_MAX, MESH_MAX_Y + #else + (Y_MAX_BED) - (MIN_PROBE_EDGE), (Y_MAX_POS) + probe_offset[Y_AXIS] + #endif + ); + } + + #endif #else From 9a209012b5f3a0b3d50947a18d73f75f62711151 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Sep 2019 20:29:12 -0500 Subject: [PATCH 055/120] Improve M114_DETAIL comment --- Marlin/Configuration_adv.h | 2 +- config/default/Configuration_adv.h | 2 +- config/examples/3DFabXYZ/Migbot/Configuration_adv.h | 2 +- config/examples/ADIMLab/Gantry v1/Configuration_adv.h | 2 +- config/examples/ADIMLab/Gantry v2/Configuration_adv.h | 2 +- config/examples/AlephObjects/TAZ4/Configuration_adv.h | 2 +- config/examples/Alfawise/U20-bltouch/Configuration_adv.h | 2 +- config/examples/Alfawise/U20/Configuration_adv.h | 2 +- config/examples/AliExpress/UM2pExt/Configuration_adv.h | 2 +- config/examples/Anet/A2/Configuration_adv.h | 2 +- config/examples/Anet/A2plus/Configuration_adv.h | 2 +- config/examples/Anet/A6/Configuration_adv.h | 2 +- config/examples/Anet/A8/Configuration_adv.h | 2 +- config/examples/Anet/A8plus/Configuration_adv.h | 2 +- config/examples/Anet/E16/Configuration_adv.h | 2 +- config/examples/AnyCubic/i3/Configuration_adv.h | 2 +- config/examples/ArmEd/Configuration_adv.h | 2 +- config/examples/BIBO/TouchX/cyclops/Configuration_adv.h | 2 +- config/examples/BIBO/TouchX/default/Configuration_adv.h | 2 +- config/examples/BQ/Hephestos/Configuration_adv.h | 2 +- config/examples/BQ/Hephestos_2/Configuration_adv.h | 2 +- config/examples/BQ/WITBOX/Configuration_adv.h | 2 +- config/examples/Cartesio/Configuration_adv.h | 2 +- config/examples/Creality/CR-10/Configuration_adv.h | 2 +- config/examples/Creality/CR-10S/Configuration_adv.h | 2 +- config/examples/Creality/CR-10_5S/Configuration_adv.h | 2 +- config/examples/Creality/CR-10mini/Configuration_adv.h | 2 +- config/examples/Creality/CR-20 Pro/Configuration_adv.h | 2 +- config/examples/Creality/CR-20/Configuration_adv.h | 2 +- config/examples/Creality/CR-8/Configuration_adv.h | 2 +- config/examples/Creality/Ender-2/Configuration_adv.h | 2 +- config/examples/Creality/Ender-3/Configuration_adv.h | 2 +- config/examples/Creality/Ender-4/Configuration_adv.h | 2 +- config/examples/Creality/Ender-5/Configuration_adv.h | 2 +- config/examples/Dagoma/Disco Ultimate/Configuration_adv.h | 2 +- .../EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h | 2 +- config/examples/Einstart-S/Configuration_adv.h | 2 +- config/examples/FYSETC/AIO_II/Configuration_adv.h | 2 +- config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h | 2 +- config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h | 2 +- config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h | 2 +- config/examples/FYSETC/Cheetah/base/Configuration_adv.h | 2 +- config/examples/FYSETC/F6_13/Configuration_adv.h | 2 +- config/examples/Felix/Configuration_adv.h | 2 +- config/examples/FlashForge/CreatorPro/Configuration_adv.h | 2 +- config/examples/FolgerTech/i3-2020/Configuration_adv.h | 2 +- config/examples/Formbot/Raptor/Configuration_adv.h | 2 +- config/examples/Formbot/T_Rex_2+/Configuration_adv.h | 2 +- config/examples/Formbot/T_Rex_3/Configuration_adv.h | 2 +- config/examples/Geeetech/A10/Configuration_adv.h | 2 +- config/examples/Geeetech/A10M/Configuration_adv.h | 2 +- config/examples/Geeetech/A20M/Configuration_adv.h | 2 +- config/examples/Geeetech/MeCreator2/Configuration_adv.h | 2 +- config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h | 2 +- config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h | 2 +- config/examples/HMS434/Configuration_adv.h | 2 +- config/examples/Infitary/i3-M508/Configuration_adv.h | 2 +- config/examples/JGAurora/A1/Configuration_adv.h | 2 +- config/examples/JGAurora/A5/Configuration_adv.h | 2 +- config/examples/JGAurora/A5S/Configuration_adv.h | 2 +- config/examples/MakerParts/Configuration_adv.h | 2 +- config/examples/Malyan/M150/Configuration_adv.h | 2 +- config/examples/Malyan/M200/Configuration_adv.h | 2 +- config/examples/Micromake/C1/enhanced/Configuration_adv.h | 2 +- config/examples/Mks/Robin/Configuration_adv.h | 2 +- config/examples/Mks/Sbase/Configuration_adv.h | 2 +- config/examples/RapideLite/RL200/Configuration_adv.h | 2 +- config/examples/RigidBot/Configuration_adv.h | 2 +- config/examples/SCARA/Configuration_adv.h | 2 +- config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h | 2 +- config/examples/Sanguinololu/Configuration_adv.h | 2 +- config/examples/Tevo/Michelangelo/Configuration_adv.h | 2 +- config/examples/Tevo/Tarantula Pro/Configuration_adv.h | 2 +- config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h | 2 +- config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h | 2 +- config/examples/TheBorg/Configuration_adv.h | 2 +- config/examples/TinyBoy2/Configuration_adv.h | 2 +- config/examples/Tronxy/X3A/Configuration_adv.h | 2 +- config/examples/Tronxy/X5S-2E/Configuration_adv.h | 2 +- config/examples/UltiMachine/Archim1/Configuration_adv.h | 2 +- config/examples/UltiMachine/Archim2/Configuration_adv.h | 2 +- config/examples/VORONDesign/Configuration_adv.h | 2 +- config/examples/Velleman/K8200/Configuration_adv.h | 2 +- config/examples/Velleman/K8400/Configuration_adv.h | 2 +- config/examples/WASP/PowerWASP/Configuration_adv.h | 2 +- config/examples/Wanhao/Duplicator 6/Configuration_adv.h | 2 +- config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h | 2 +- config/examples/delta/Anycubic/Kossel/Configuration_adv.h | 2 +- config/examples/delta/Dreammaker/Overlord/Configuration_adv.h | 2 +- .../examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h | 2 +- config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h | 2 +- config/examples/delta/FLSUN/kossel/Configuration_adv.h | 2 +- config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h | 2 +- config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h | 2 +- config/examples/delta/MKS/SBASE/Configuration_adv.h | 2 +- config/examples/delta/Tevo Little Monster/Configuration_adv.h | 2 +- config/examples/delta/generic/Configuration_adv.h | 2 +- config/examples/delta/kossel_mini/Configuration_adv.h | 2 +- config/examples/delta/kossel_xl/Configuration_adv.h | 2 +- config/examples/gCreate/gMax1.5+/Configuration_adv.h | 2 +- config/examples/makibox/Configuration_adv.h | 2 +- config/examples/tvrrug/Round2/Configuration_adv.h | 2 +- config/examples/wt150/Configuration_adv.h | 2 +- 103 files changed, 103 insertions(+), 103 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index f88905b8455f..8a3a88ba5d31 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/default/Configuration_adv.h b/config/default/Configuration_adv.h index f88905b8455f..8a3a88ba5d31 100644 --- a/config/default/Configuration_adv.h +++ b/config/default/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h index 56eb0d983094..a18166461875 100644 --- a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h +++ b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h index d453961a8d7d..d89af8ae23e4 100644 --- a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h index 9e6cb3d52470..9ebe0f5f1e2e 100644 --- a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/AlephObjects/TAZ4/Configuration_adv.h b/config/examples/AlephObjects/TAZ4/Configuration_adv.h index 8ae981d46859..45e4b7d73906 100644 --- a/config/examples/AlephObjects/TAZ4/Configuration_adv.h +++ b/config/examples/AlephObjects/TAZ4/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h index d28445a30c85..7f67e066bd91 100644 --- a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h +++ b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Alfawise/U20/Configuration_adv.h b/config/examples/Alfawise/U20/Configuration_adv.h index ef31a7f86226..78ed3049441a 100644 --- a/config/examples/Alfawise/U20/Configuration_adv.h +++ b/config/examples/Alfawise/U20/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/AliExpress/UM2pExt/Configuration_adv.h b/config/examples/AliExpress/UM2pExt/Configuration_adv.h index dca5535e173e..ec4763307e57 100644 --- a/config/examples/AliExpress/UM2pExt/Configuration_adv.h +++ b/config/examples/AliExpress/UM2pExt/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Anet/A2/Configuration_adv.h b/config/examples/Anet/A2/Configuration_adv.h index fc0b42d648f4..cbcbd526b21d 100644 --- a/config/examples/Anet/A2/Configuration_adv.h +++ b/config/examples/Anet/A2/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Anet/A2plus/Configuration_adv.h b/config/examples/Anet/A2plus/Configuration_adv.h index fc0b42d648f4..cbcbd526b21d 100644 --- a/config/examples/Anet/A2plus/Configuration_adv.h +++ b/config/examples/Anet/A2plus/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Anet/A6/Configuration_adv.h b/config/examples/Anet/A6/Configuration_adv.h index 0642c97f530d..62d5566883fd 100644 --- a/config/examples/Anet/A6/Configuration_adv.h +++ b/config/examples/Anet/A6/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Anet/A8/Configuration_adv.h b/config/examples/Anet/A8/Configuration_adv.h index 42400778e513..66fe7deca134 100644 --- a/config/examples/Anet/A8/Configuration_adv.h +++ b/config/examples/Anet/A8/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Anet/A8plus/Configuration_adv.h b/config/examples/Anet/A8plus/Configuration_adv.h index 7fda36633cd9..e838677df1b8 100644 --- a/config/examples/Anet/A8plus/Configuration_adv.h +++ b/config/examples/Anet/A8plus/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Anet/E16/Configuration_adv.h b/config/examples/Anet/E16/Configuration_adv.h index 41fbc2c7f23d..6c6682dcdb75 100644 --- a/config/examples/Anet/E16/Configuration_adv.h +++ b/config/examples/Anet/E16/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/AnyCubic/i3/Configuration_adv.h b/config/examples/AnyCubic/i3/Configuration_adv.h index 10f0eff5210a..08a40bfd883b 100644 --- a/config/examples/AnyCubic/i3/Configuration_adv.h +++ b/config/examples/AnyCubic/i3/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/ArmEd/Configuration_adv.h b/config/examples/ArmEd/Configuration_adv.h index 6d2fd42cf233..d257be07a7f0 100644 --- a/config/examples/ArmEd/Configuration_adv.h +++ b/config/examples/ArmEd/Configuration_adv.h @@ -218,7 +218,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h index 07fec7d7ce15..4aa648f938e0 100644 --- a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/BIBO/TouchX/default/Configuration_adv.h b/config/examples/BIBO/TouchX/default/Configuration_adv.h index e6f707616517..4423281c44a6 100644 --- a/config/examples/BIBO/TouchX/default/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/default/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/BQ/Hephestos/Configuration_adv.h b/config/examples/BQ/Hephestos/Configuration_adv.h index 748e906a7e61..266c86e0e0fc 100644 --- a/config/examples/BQ/Hephestos/Configuration_adv.h +++ b/config/examples/BQ/Hephestos/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/BQ/Hephestos_2/Configuration_adv.h b/config/examples/BQ/Hephestos_2/Configuration_adv.h index b62620c31f7a..88f89018574c 100644 --- a/config/examples/BQ/Hephestos_2/Configuration_adv.h +++ b/config/examples/BQ/Hephestos_2/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/BQ/WITBOX/Configuration_adv.h b/config/examples/BQ/WITBOX/Configuration_adv.h index 748e906a7e61..266c86e0e0fc 100644 --- a/config/examples/BQ/WITBOX/Configuration_adv.h +++ b/config/examples/BQ/WITBOX/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Cartesio/Configuration_adv.h b/config/examples/Cartesio/Configuration_adv.h index adbbc928c01a..d1d48b66beec 100644 --- a/config/examples/Cartesio/Configuration_adv.h +++ b/config/examples/Cartesio/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Creality/CR-10/Configuration_adv.h b/config/examples/Creality/CR-10/Configuration_adv.h index e685fca8e48c..88a287e24666 100644 --- a/config/examples/Creality/CR-10/Configuration_adv.h +++ b/config/examples/Creality/CR-10/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Creality/CR-10S/Configuration_adv.h b/config/examples/Creality/CR-10S/Configuration_adv.h index e1e8e30e1037..c90716a664ed 100644 --- a/config/examples/Creality/CR-10S/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' #define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Creality/CR-10_5S/Configuration_adv.h b/config/examples/Creality/CR-10_5S/Configuration_adv.h index d41e51c828bf..71eaa7bc38ec 100644 --- a/config/examples/Creality/CR-10_5S/Configuration_adv.h +++ b/config/examples/Creality/CR-10_5S/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' #define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Creality/CR-10mini/Configuration_adv.h b/config/examples/Creality/CR-10mini/Configuration_adv.h index b48f9f2646a1..c2f085e52604 100644 --- a/config/examples/Creality/CR-10mini/Configuration_adv.h +++ b/config/examples/Creality/CR-10mini/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Creality/CR-20 Pro/Configuration_adv.h b/config/examples/Creality/CR-20 Pro/Configuration_adv.h index 8e0e1fd51d53..de9c4ef088ce 100644 --- a/config/examples/Creality/CR-20 Pro/Configuration_adv.h +++ b/config/examples/Creality/CR-20 Pro/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Creality/CR-20/Configuration_adv.h b/config/examples/Creality/CR-20/Configuration_adv.h index 0fba39dfdf51..164b5c154e7b 100644 --- a/config/examples/Creality/CR-20/Configuration_adv.h +++ b/config/examples/Creality/CR-20/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Creality/CR-8/Configuration_adv.h b/config/examples/Creality/CR-8/Configuration_adv.h index 77e3fd2192f1..e0ef03de3ed8 100644 --- a/config/examples/Creality/CR-8/Configuration_adv.h +++ b/config/examples/Creality/CR-8/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' #define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Creality/Ender-2/Configuration_adv.h b/config/examples/Creality/Ender-2/Configuration_adv.h index 36acbb208e39..b16c71959f64 100644 --- a/config/examples/Creality/Ender-2/Configuration_adv.h +++ b/config/examples/Creality/Ender-2/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Creality/Ender-3/Configuration_adv.h b/config/examples/Creality/Ender-3/Configuration_adv.h index f5285a4d545b..378a1d7ace7d 100644 --- a/config/examples/Creality/Ender-3/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Creality/Ender-4/Configuration_adv.h b/config/examples/Creality/Ender-4/Configuration_adv.h index 4ef5f324fb81..5831e95e134c 100644 --- a/config/examples/Creality/Ender-4/Configuration_adv.h +++ b/config/examples/Creality/Ender-4/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' #define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Creality/Ender-5/Configuration_adv.h b/config/examples/Creality/Ender-5/Configuration_adv.h index 3ca99e82b2a0..6acb053724a4 100644 --- a/config/examples/Creality/Ender-5/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h index 5023cbd95c2c..cd6fc824e323 100644 --- a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h +++ b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h index 3f54c1538fc2..d57feb9b0288 100755 --- a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h +++ b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Einstart-S/Configuration_adv.h b/config/examples/Einstart-S/Configuration_adv.h index 7385eb849b7a..2cbbf501313f 100644 --- a/config/examples/Einstart-S/Configuration_adv.h +++ b/config/examples/Einstart-S/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/FYSETC/AIO_II/Configuration_adv.h b/config/examples/FYSETC/AIO_II/Configuration_adv.h index 651346faf892..815a764d31a1 100644 --- a/config/examples/FYSETC/AIO_II/Configuration_adv.h +++ b/config/examples/FYSETC/AIO_II/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h index f0cda6502545..7f9ebd48355f 100644 --- a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h index f0cda6502545..7f9ebd48355f 100644 --- a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h index f0cda6502545..7f9ebd48355f 100644 --- a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h index f0cda6502545..7f9ebd48355f 100644 --- a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/FYSETC/F6_13/Configuration_adv.h b/config/examples/FYSETC/F6_13/Configuration_adv.h index 6018ab30caa3..d6888629a028 100644 --- a/config/examples/FYSETC/F6_13/Configuration_adv.h +++ b/config/examples/FYSETC/F6_13/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Felix/Configuration_adv.h b/config/examples/Felix/Configuration_adv.h index 76416e501464..4e43356f62cc 100644 --- a/config/examples/Felix/Configuration_adv.h +++ b/config/examples/Felix/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/FlashForge/CreatorPro/Configuration_adv.h b/config/examples/FlashForge/CreatorPro/Configuration_adv.h index ac0657c29f2c..4bdce369379e 100644 --- a/config/examples/FlashForge/CreatorPro/Configuration_adv.h +++ b/config/examples/FlashForge/CreatorPro/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/FolgerTech/i3-2020/Configuration_adv.h b/config/examples/FolgerTech/i3-2020/Configuration_adv.h index f4200d25a3d6..a8963f000fe4 100644 --- a/config/examples/FolgerTech/i3-2020/Configuration_adv.h +++ b/config/examples/FolgerTech/i3-2020/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Formbot/Raptor/Configuration_adv.h b/config/examples/Formbot/Raptor/Configuration_adv.h index 102595c3ff71..d4f1ab3a92b0 100644 --- a/config/examples/Formbot/Raptor/Configuration_adv.h +++ b/config/examples/Formbot/Raptor/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' #define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h index 4a056163afc6..0e1a5666a7b2 100644 --- a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' #define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Formbot/T_Rex_3/Configuration_adv.h b/config/examples/Formbot/T_Rex_3/Configuration_adv.h index fcad7bf6518e..4603bb46cf15 100644 --- a/config/examples/Formbot/T_Rex_3/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_3/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' #define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Geeetech/A10/Configuration_adv.h b/config/examples/Geeetech/A10/Configuration_adv.h index 899c563566d5..6a63fe134f0d 100644 --- a/config/examples/Geeetech/A10/Configuration_adv.h +++ b/config/examples/Geeetech/A10/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Geeetech/A10M/Configuration_adv.h b/config/examples/Geeetech/A10M/Configuration_adv.h index 3cc32f29bc4e..e45949e265c2 100644 --- a/config/examples/Geeetech/A10M/Configuration_adv.h +++ b/config/examples/Geeetech/A10M/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Geeetech/A20M/Configuration_adv.h b/config/examples/Geeetech/A20M/Configuration_adv.h index 884950a9fe35..4c7ea8c85e84 100644 --- a/config/examples/Geeetech/A20M/Configuration_adv.h +++ b/config/examples/Geeetech/A20M/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Geeetech/MeCreator2/Configuration_adv.h b/config/examples/Geeetech/MeCreator2/Configuration_adv.h index 2a342b40230a..b98dbc72550e 100644 --- a/config/examples/Geeetech/MeCreator2/Configuration_adv.h +++ b/config/examples/Geeetech/MeCreator2/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h index 899c563566d5..6a63fe134f0d 100644 --- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h index 899c563566d5..6a63fe134f0d 100644 --- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/HMS434/Configuration_adv.h b/config/examples/HMS434/Configuration_adv.h index beca75d86c2c..6d6bec513413 100644 --- a/config/examples/HMS434/Configuration_adv.h +++ b/config/examples/HMS434/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Infitary/i3-M508/Configuration_adv.h b/config/examples/Infitary/i3-M508/Configuration_adv.h index 48f2f7907bd2..6bf7d1849f38 100644 --- a/config/examples/Infitary/i3-M508/Configuration_adv.h +++ b/config/examples/Infitary/i3-M508/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/JGAurora/A1/Configuration_adv.h b/config/examples/JGAurora/A1/Configuration_adv.h index 5619fcfc3dcb..011ed0447b7b 100644 --- a/config/examples/JGAurora/A1/Configuration_adv.h +++ b/config/examples/JGAurora/A1/Configuration_adv.h @@ -219,7 +219,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/JGAurora/A5/Configuration_adv.h b/config/examples/JGAurora/A5/Configuration_adv.h index de725956093d..2f94d31f0cc3 100644 --- a/config/examples/JGAurora/A5/Configuration_adv.h +++ b/config/examples/JGAurora/A5/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/JGAurora/A5S/Configuration_adv.h b/config/examples/JGAurora/A5S/Configuration_adv.h index 5619fcfc3dcb..011ed0447b7b 100644 --- a/config/examples/JGAurora/A5S/Configuration_adv.h +++ b/config/examples/JGAurora/A5S/Configuration_adv.h @@ -219,7 +219,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/MakerParts/Configuration_adv.h b/config/examples/MakerParts/Configuration_adv.h index 53f5435b649a..9d25fa59291f 100644 --- a/config/examples/MakerParts/Configuration_adv.h +++ b/config/examples/MakerParts/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Malyan/M150/Configuration_adv.h b/config/examples/Malyan/M150/Configuration_adv.h index 401a36c5dac9..5053030dcf6b 100644 --- a/config/examples/Malyan/M150/Configuration_adv.h +++ b/config/examples/Malyan/M150/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Malyan/M200/Configuration_adv.h b/config/examples/Malyan/M200/Configuration_adv.h index a529b261674c..2191f8bdead9 100644 --- a/config/examples/Malyan/M200/Configuration_adv.h +++ b/config/examples/Malyan/M200/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Micromake/C1/enhanced/Configuration_adv.h b/config/examples/Micromake/C1/enhanced/Configuration_adv.h index a3157c6626e0..b8122dc51842 100644 --- a/config/examples/Micromake/C1/enhanced/Configuration_adv.h +++ b/config/examples/Micromake/C1/enhanced/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Mks/Robin/Configuration_adv.h b/config/examples/Mks/Robin/Configuration_adv.h index ad622a09c918..1f844aa8f5ac 100644 --- a/config/examples/Mks/Robin/Configuration_adv.h +++ b/config/examples/Mks/Robin/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Mks/Sbase/Configuration_adv.h b/config/examples/Mks/Sbase/Configuration_adv.h index 765623e6f495..ab476163e09d 100644 --- a/config/examples/Mks/Sbase/Configuration_adv.h +++ b/config/examples/Mks/Sbase/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/RapideLite/RL200/Configuration_adv.h b/config/examples/RapideLite/RL200/Configuration_adv.h index a757dffd8407..898c0bbfec15 100644 --- a/config/examples/RapideLite/RL200/Configuration_adv.h +++ b/config/examples/RapideLite/RL200/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/RigidBot/Configuration_adv.h b/config/examples/RigidBot/Configuration_adv.h index e95dcbcf0e1c..e8dc00170238 100644 --- a/config/examples/RigidBot/Configuration_adv.h +++ b/config/examples/RigidBot/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/SCARA/Configuration_adv.h b/config/examples/SCARA/Configuration_adv.h index 1727b6dbcaa6..a5ec22406035 100644 --- a/config/examples/SCARA/Configuration_adv.h +++ b/config/examples/SCARA/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h index 67017c5f54a7..b9624125f7eb 100644 --- a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h +++ b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Sanguinololu/Configuration_adv.h b/config/examples/Sanguinololu/Configuration_adv.h index db4d97b8ccbe..d94398efef1e 100644 --- a/config/examples/Sanguinololu/Configuration_adv.h +++ b/config/examples/Sanguinololu/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Tevo/Michelangelo/Configuration_adv.h b/config/examples/Tevo/Michelangelo/Configuration_adv.h index a1e6c528161a..e54854cf690b 100644 --- a/config/examples/Tevo/Michelangelo/Configuration_adv.h +++ b/config/examples/Tevo/Michelangelo/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h index f23a9d00c52c..022de25f16b3 100755 --- a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h +++ b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h index 09d5656861f7..96a76391c11d 100755 --- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h index 09d5656861f7..96a76391c11d 100755 --- a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/TheBorg/Configuration_adv.h b/config/examples/TheBorg/Configuration_adv.h index de9c92d1eeb1..08f169eee02d 100644 --- a/config/examples/TheBorg/Configuration_adv.h +++ b/config/examples/TheBorg/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/TinyBoy2/Configuration_adv.h b/config/examples/TinyBoy2/Configuration_adv.h index a101054d3265..221c1f983360 100644 --- a/config/examples/TinyBoy2/Configuration_adv.h +++ b/config/examples/TinyBoy2/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Tronxy/X3A/Configuration_adv.h b/config/examples/Tronxy/X3A/Configuration_adv.h index e2a8296e8546..e3a7d5605744 100644 --- a/config/examples/Tronxy/X3A/Configuration_adv.h +++ b/config/examples/Tronxy/X3A/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Tronxy/X5S-2E/Configuration_adv.h b/config/examples/Tronxy/X5S-2E/Configuration_adv.h index 1f1e28fd6510..f65c7e91c966 100644 --- a/config/examples/Tronxy/X5S-2E/Configuration_adv.h +++ b/config/examples/Tronxy/X5S-2E/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/UltiMachine/Archim1/Configuration_adv.h b/config/examples/UltiMachine/Archim1/Configuration_adv.h index d940e242bd54..4fc54828b172 100644 --- a/config/examples/UltiMachine/Archim1/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim1/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/UltiMachine/Archim2/Configuration_adv.h b/config/examples/UltiMachine/Archim2/Configuration_adv.h index 9ec2526cd3bc..a6702b9bc5ef 100644 --- a/config/examples/UltiMachine/Archim2/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim2/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/VORONDesign/Configuration_adv.h b/config/examples/VORONDesign/Configuration_adv.h index 81b4e6d5ae80..7bb2065b1bc2 100644 --- a/config/examples/VORONDesign/Configuration_adv.h +++ b/config/examples/VORONDesign/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Velleman/K8200/Configuration_adv.h b/config/examples/Velleman/K8200/Configuration_adv.h index 353fd75a9483..3168255e220a 100644 --- a/config/examples/Velleman/K8200/Configuration_adv.h +++ b/config/examples/Velleman/K8200/Configuration_adv.h @@ -227,7 +227,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Velleman/K8400/Configuration_adv.h b/config/examples/Velleman/K8400/Configuration_adv.h index 78a6d040a3a8..f9e7e9b717a6 100644 --- a/config/examples/Velleman/K8400/Configuration_adv.h +++ b/config/examples/Velleman/K8400/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/WASP/PowerWASP/Configuration_adv.h b/config/examples/WASP/PowerWASP/Configuration_adv.h index 729314ec00fd..d59bffcbf2ac 100644 --- a/config/examples/WASP/PowerWASP/Configuration_adv.h +++ b/config/examples/WASP/PowerWASP/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h index f9d1bc3e21d7..45acc24b8e59 100644 --- a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h index e89a50b5c0e1..2e185b9bd789 100644 --- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h index 9db9ce223767..f407354daa36 100644 --- a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h +++ b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h index cc24bdee11b6..63071e848043 100644 --- a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h index cc24bdee11b6..63071e848043 100644 --- a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h index 3bb34aaa85ee..e1a89cb1e8f2 100644 --- a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h +++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/delta/FLSUN/kossel/Configuration_adv.h b/config/examples/delta/FLSUN/kossel/Configuration_adv.h index 3bb34aaa85ee..e1a89cb1e8f2 100644 --- a/config/examples/delta/FLSUN/kossel/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h index 39a055740a3b..25929c77bef8 100644 --- a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h index 7407dbd76747..d1107a376b7f 100644 --- a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h +++ b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/delta/MKS/SBASE/Configuration_adv.h b/config/examples/delta/MKS/SBASE/Configuration_adv.h index 57573a12b12c..d50b30efe47c 100644 --- a/config/examples/delta/MKS/SBASE/Configuration_adv.h +++ b/config/examples/delta/MKS/SBASE/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/delta/Tevo Little Monster/Configuration_adv.h b/config/examples/delta/Tevo Little Monster/Configuration_adv.h index 75a21310fd01..672c12c24bb4 100644 --- a/config/examples/delta/Tevo Little Monster/Configuration_adv.h +++ b/config/examples/delta/Tevo Little Monster/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/delta/generic/Configuration_adv.h b/config/examples/delta/generic/Configuration_adv.h index 39a055740a3b..25929c77bef8 100644 --- a/config/examples/delta/generic/Configuration_adv.h +++ b/config/examples/delta/generic/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/delta/kossel_mini/Configuration_adv.h b/config/examples/delta/kossel_mini/Configuration_adv.h index 39a055740a3b..25929c77bef8 100644 --- a/config/examples/delta/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/kossel_mini/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/delta/kossel_xl/Configuration_adv.h b/config/examples/delta/kossel_xl/Configuration_adv.h index 2224b926b853..7f1be1da3377 100644 --- a/config/examples/delta/kossel_xl/Configuration_adv.h +++ b/config/examples/delta/kossel_xl/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/gCreate/gMax1.5+/Configuration_adv.h b/config/examples/gCreate/gMax1.5+/Configuration_adv.h index b6e090be3c9d..14d1c46ecad5 100644 --- a/config/examples/gCreate/gMax1.5+/Configuration_adv.h +++ b/config/examples/gCreate/gMax1.5+/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/makibox/Configuration_adv.h b/config/examples/makibox/Configuration_adv.h index 03d60eceafe4..061f6ada0e8e 100644 --- a/config/examples/makibox/Configuration_adv.h +++ b/config/examples/makibox/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/tvrrug/Round2/Configuration_adv.h b/config/examples/tvrrug/Round2/Configuration_adv.h index b28eb258c035..fc2220ea9f93 100644 --- a/config/examples/tvrrug/Round2/Configuration_adv.h +++ b/config/examples/tvrrug/Round2/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value diff --git a/config/examples/wt150/Configuration_adv.h b/config/examples/wt150/Configuration_adv.h index 633ca09d8571..a9b00c7d3731 100644 --- a/config/examples/wt150/Configuration_adv.h +++ b/config/examples/wt150/Configuration_adv.h @@ -214,7 +214,7 @@ #define AUTOTEMP_OLDWEIGHT 0.98 #endif -// Show extra position information in M114 +// Show extra position information with 'M114 D' //#define M114_DETAIL // Show Temperature ADC value From b2e1f77f58a67ac02503cbe36b22a21e5afaeac0 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Sep 2019 21:01:29 -0500 Subject: [PATCH 056/120] Fix extraneous "Home XYZ First" message --- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 2 +- Marlin/src/feature/pause.cpp | 2 +- Marlin/src/gcode/feature/pause/M600.cpp | 2 +- Marlin/src/gcode/feature/pause/M701_M702.cpp | 8 +- Marlin/src/gcode/motion/G0_G1.cpp | 5 +- Marlin/src/lcd/language/language_an.h | 5 +- Marlin/src/lcd/language/language_ca.h | 5 +- Marlin/src/lcd/language/language_cz.h | 6 +- Marlin/src/lcd/language/language_da.h | 5 +- Marlin/src/lcd/language/language_de.h | 6 +- Marlin/src/lcd/language/language_en.h | 12 +- Marlin/src/lcd/language/language_es.h | 6 +- Marlin/src/lcd/language/language_eu.h | 6 +- Marlin/src/lcd/language/language_fi.h | 3 +- Marlin/src/lcd/language/language_fr.h | 6 +- Marlin/src/lcd/language/language_gl.h | 109 +++++----- Marlin/src/lcd/language/language_hr.h | 217 +++++++++---------- Marlin/src/lcd/language/language_it.h | 6 +- Marlin/src/lcd/language/language_jp-kana.h | 5 +- Marlin/src/lcd/language/language_ko_KR.h | 6 +- Marlin/src/lcd/language/language_nl.h | 5 +- Marlin/src/lcd/language/language_pl.h | 5 +- Marlin/src/lcd/language/language_pt-br.h | 6 +- Marlin/src/lcd/language/language_pt.h | 3 +- Marlin/src/lcd/language/language_ru.h | 6 +- Marlin/src/lcd/language/language_sk.h | 6 +- Marlin/src/lcd/language/language_tr.h | 4 +- Marlin/src/lcd/language/language_uk.h | 5 +- Marlin/src/lcd/language/language_vi.h | 6 +- Marlin/src/lcd/language/language_zh_CN.h | 6 +- Marlin/src/lcd/language/language_zh_TW.h | 6 +- Marlin/src/module/motion.cpp | 36 +-- Marlin/src/module/motion.h | 3 +- Marlin/src/module/probe.cpp | 11 +- Marlin/src/module/tool_change.cpp | 2 +- 35 files changed, 248 insertions(+), 284 deletions(-) diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index 9e2904277899..2ffeb17e2f1e 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -313,7 +313,7 @@ // Check for commands that require the printer to be homed if (may_move) { planner.synchronize(); - if (axis_unhomed_error()) gcode.home_all_axes(); + if (axes_need_homing()) gcode.home_all_axes(); #if ENABLED(DUAL_X_CARRIAGE) if (active_extruder != 0) tool_change(0); #endif diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index d8642cf362ae..8c014af96d05 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -442,7 +442,7 @@ bool pause_print(const float &retract, const point_t &park_point, const float &u do_pause_e_move(retract, PAUSE_PARK_RETRACT_FEEDRATE); // Park the nozzle by moving up by z_lift and then moving to (x_pos, y_pos) - if (!axis_unhomed_error()) + if (!axes_need_homing()) nozzle.park(2, park_point); #if ENABLED(DUAL_X_CARRIAGE) diff --git a/Marlin/src/gcode/feature/pause/M600.cpp b/Marlin/src/gcode/feature/pause/M600.cpp index 6cadbe60800e..f2ade740b42d 100644 --- a/Marlin/src/gcode/feature/pause/M600.cpp +++ b/Marlin/src/gcode/feature/pause/M600.cpp @@ -98,7 +98,7 @@ void GcodeSuite::M600() { #if ENABLED(HOME_BEFORE_FILAMENT_CHANGE) // Don't allow filament change without homing first - if (axis_unhomed_error()) home_all_axes(); + if (axes_need_homing()) home_all_axes(); #endif #if EXTRUDERS > 1 diff --git a/Marlin/src/gcode/feature/pause/M701_M702.cpp b/Marlin/src/gcode/feature/pause/M701_M702.cpp index b127a9fbadc9..109db545a44c 100644 --- a/Marlin/src/gcode/feature/pause/M701_M702.cpp +++ b/Marlin/src/gcode/feature/pause/M701_M702.cpp @@ -60,8 +60,8 @@ void GcodeSuite::M701() { point_t park_point = NOZZLE_PARK_POINT; #if ENABLED(NO_MOTION_BEFORE_HOMING) - // Only raise Z if the machine is homed - if (axis_unhomed_error()) park_point.z = 0; + // Don't raise Z if the machine isn't homed + if (axes_need_homing()) park_point.z = 0; #endif #if ENABLED(MIXING_EXTRUDER) @@ -149,8 +149,8 @@ void GcodeSuite::M702() { point_t park_point = NOZZLE_PARK_POINT; #if ENABLED(NO_MOTION_BEFORE_HOMING) - // Only raise Z if the machine is homed - if (axis_unhomed_error()) park_point.z = 0; + // Don't raise Z if the machine isn't homed + if (axes_need_homing()) park_point.z = 0; #endif #if ENABLED(MIXING_EXTRUDER) diff --git a/Marlin/src/gcode/motion/G0_G1.cpp b/Marlin/src/gcode/motion/G0_G1.cpp index 8d88ac91dd60..82f9bdd67d37 100644 --- a/Marlin/src/gcode/motion/G0_G1.cpp +++ b/Marlin/src/gcode/motion/G0_G1.cpp @@ -52,7 +52,10 @@ void GcodeSuite::G0_G1( if (IsRunning() #if ENABLED(NO_MOTION_BEFORE_HOMING) - && !axis_unhomed_error(parser.seen('X'), parser.seen('Y'), parser.seen('Z')) + && !axis_unhomed_error( + (parser.seen('X') ? _BV(X_AXIS) : 0) + | (parser.seen('Y') ? _BV(Y_AXIS) : 0) + | (parser.seen('Z') ? _BV(Z_AXIS) : 0) ) #endif ) { diff --git a/Marlin/src/lcd/language/language_an.h b/Marlin/src/lcd/language/language_an.h index 2fd13d67efe3..f3c4372ba70b 100644 --- a/Marlin/src/lcd/language/language_an.h +++ b/Marlin/src/lcd/language/language_an.h @@ -168,8 +168,7 @@ #define MSG_ZPROBE_OUT _UxGT("Sonda Z fuera") #define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Auto-Test") #define MSG_BLTOUCH_RESET _UxGT("Reset BLTouch") -#define MSG_HOME _UxGT("Home") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("first") +#define MSG_HOME_FIRST _UxGT("Home %s%s%s first") #define MSG_ZPROBE_ZOFFSET _UxGT("Desfase Z") #define MSG_BABYSTEP_X _UxGT("Micropaso X") #define MSG_BABYSTEP_Y _UxGT("Micropaso Y") @@ -182,7 +181,7 @@ #define MSG_ERR_MINTEMP _UxGT("Error: Temp Menima") #define MSG_ERR_MAXTEMP_BED _UxGT("Error: Temp Max base") #define MSG_ERR_MINTEMP_BED _UxGT("Error: Temp Min base") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Home XY first") #define MSG_HALTED _UxGT("IMPRESORA ATURADA") #define MSG_PLEASE_RESET _UxGT("Per favor reinic.") #define MSG_SHORT_DAY _UxGT("d") diff --git a/Marlin/src/lcd/language/language_ca.h b/Marlin/src/lcd/language/language_ca.h index 3a81909cbf08..cf7278851e99 100644 --- a/Marlin/src/lcd/language/language_ca.h +++ b/Marlin/src/lcd/language/language_ca.h @@ -170,8 +170,7 @@ #define MSG_CHANGE_MEDIA _UxGT("Canvia SD") #define MSG_ZPROBE_OUT _UxGT("Sonda Z fora") #define MSG_BLTOUCH_RESET _UxGT("Reinicia BLTouch") -#define MSG_HOME _UxGT("Home") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("primer") +#define MSG_HOME_FIRST _UxGT("Home %s%s%s primer") #define MSG_ZPROBE_ZOFFSET _UxGT("Decalatge Z") #define MSG_BABYSTEP_X _UxGT("Micropas X") #define MSG_BABYSTEP_Y _UxGT("Micropas Y") @@ -184,7 +183,7 @@ #define MSG_ERR_MINTEMP _UxGT("Err: TEMP MINIMA") #define MSG_ERR_MAXTEMP_BED _UxGT("Err: TEMPMAX LLIT") #define MSG_ERR_MINTEMP_BED _UxGT("Err: TEMPMIN LLIT") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Home XY primer") #define MSG_HALTED _UxGT("IMPRESSORA PARADA") #define MSG_PLEASE_RESET _UxGT("Reinicieu") #define MSG_SHORT_DAY _UxGT("d") // One character only diff --git a/Marlin/src/lcd/language/language_cz.h b/Marlin/src/lcd/language/language_cz.h index 4aec9f9a1acb..92a9e0ca8391 100644 --- a/Marlin/src/lcd/language/language_cz.h +++ b/Marlin/src/lcd/language/language_cz.h @@ -116,7 +116,6 @@ #define MSG_Z_OFFSET _UxGT("2. tryska Z") #define MSG_UBL_DOING_G29 _UxGT("Provádím G29") -#define MSG_UBL_UNHOMED _UxGT("Přejeďte domů") #define MSG_UBL_TOOLS _UxGT("UBL nástroje") #define MSG_UBL_LEVEL_BED _UxGT("Unified Bed Leveling") #define MSG_UBL_MANUAL_MESH _UxGT("Manuální síť bodů") @@ -335,8 +334,7 @@ #define MSG_BLTOUCH_STOW _UxGT("BLTouch zasunout") #define MSG_MANUAL_DEPLOY _UxGT("Vysunout Z-sondu") #define MSG_MANUAL_STOW _UxGT("Zasunout Z-sondu") -#define MSG_HOME _UxGT("Domů") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("první") +#define MSG_HOME_FIRST _UxGT("Domů %s%s%s první") #define MSG_ZPROBE_ZOFFSET _UxGT("Z ofset") #define MSG_BABYSTEP_X _UxGT("Babystep X") #define MSG_BABYSTEP_Y _UxGT("Babystep Y") @@ -354,7 +352,7 @@ #define MSG_ERR_MINTEMP_BED _UxGT("NÍZ. TEPL. PODL.") #define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err: MAXTEMP KOMORA") #define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err: MINTEMP KOMORA") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Domů XY první") #define MSG_HALTED _UxGT("TISK. ZASTAVENA") #define MSG_PLEASE_RESET _UxGT("Proveďte reset") #define MSG_SHORT_DAY _UxGT("d") diff --git a/Marlin/src/lcd/language/language_da.h b/Marlin/src/lcd/language/language_da.h index 6ecc4c6ea434..6a8d48175d80 100644 --- a/Marlin/src/lcd/language/language_da.h +++ b/Marlin/src/lcd/language/language_da.h @@ -168,8 +168,7 @@ #define MSG_ZPROBE_OUT _UxGT("Probe udenfor plade") #define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Selv-Test") #define MSG_BLTOUCH_RESET _UxGT("Reset BLTouch") -#define MSG_HOME _UxGT("Home") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("først") +#define MSG_HOME_FIRST _UxGT("Home %s%s%s først") #define MSG_ZPROBE_ZOFFSET _UxGT("Z Offset") #define MSG_BABYSTEP_X _UxGT("Babystep X") #define MSG_BABYSTEP_Y _UxGT("Babystep Y") @@ -182,7 +181,7 @@ #define MSG_ERR_MINTEMP _UxGT("Fejl: Min temp") #define MSG_ERR_MAXTEMP_BED _UxGT("Fejl: Maks Plade temp") #define MSG_ERR_MINTEMP_BED _UxGT("Fejl: Min Plade temp") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Home XY først") #define MSG_HALTED _UxGT("PRINTER STOPPET") #define MSG_PLEASE_RESET _UxGT("Reset Venligst") #define MSG_SHORT_DAY _UxGT("d") // Kun et bogstav diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h index 2172e95b1d26..76acb55e8044 100644 --- a/Marlin/src/lcd/language/language_de.h +++ b/Marlin/src/lcd/language/language_de.h @@ -121,7 +121,6 @@ #define MSG_Y_OFFSET _UxGT("2. Düse Y") #define MSG_Z_OFFSET _UxGT("2. Düse Z") #define MSG_UBL_DOING_G29 _UxGT("G29 ausführen") -#define MSG_UBL_UNHOMED _UxGT("Home XYZ zuerst") #define MSG_UBL_TOOLS _UxGT("UBL-Werkzeuge") #define MSG_UBL_LEVEL_BED _UxGT("Unified Bed Leveling") #define MSG_UBL_MANUAL_MESH _UxGT("Netz manuell erst.") @@ -363,8 +362,7 @@ #define MSG_MANUAL_DEPLOY_TOUCHMI _UxGT("TouchMI ausfahren") #define MSG_MANUAL_DEPLOY _UxGT("Z-Sonde ausfahren") #define MSG_MANUAL_STOW _UxGT("Z-Sonde einfahren") -#define MSG_HOME _UxGT("Vorher") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("homen") +#define MSG_HOME_FIRST _UxGT("Vorher %s%s%s homen") #define MSG_ZPROBE_ZOFFSET _UxGT("Sondenversatz Z") #define MSG_BABYSTEP_X _UxGT("Babystep X") #define MSG_BABYSTEP_Y _UxGT("Babystep Y") @@ -384,7 +382,7 @@ #define MSG_ERR_MINTEMP_BED _UxGT("BETT ") LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN") #define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err:Gehäuse max Temp") #define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err:Gehäuse min Temp") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Vorher XY vorher") #define MSG_HALTED _UxGT("DRUCKER GESTOPPT") #define MSG_PLEASE_RESET _UxGT("Bitte neustarten") #define MSG_SHORT_DAY _UxGT("t") // One character only diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 5d8092a32bbc..225a83e8d4c9 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -310,9 +310,6 @@ #ifndef MSG_UBL_DOING_G29 #define MSG_UBL_DOING_G29 _UxGT("Doing G29") #endif -#ifndef MSG_UBL_UNHOMED - #define MSG_UBL_UNHOMED _UxGT("Home XYZ First") -#endif #ifndef MSG_UBL_TOOLS #define MSG_UBL_TOOLS _UxGT("UBL Tools") #endif @@ -1026,11 +1023,8 @@ #ifndef MSG_MANUAL_STOW #define MSG_MANUAL_STOW _UxGT("Stow Z-Probe") #endif -#ifndef MSG_HOME - #define MSG_HOME _UxGT("Home") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#endif -#ifndef MSG_FIRST - #define MSG_FIRST _UxGT("First") +#ifndef MSG_HOME_FIRST + #define MSG_HOME_FIRST _UxGT("Home %s%s%s First") #endif #ifndef MSG_ZPROBE_ZOFFSET #define MSG_ZPROBE_ZOFFSET _UxGT("Probe Z Offset") @@ -1090,7 +1084,7 @@ #define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err: MINTEMP CHAMBER") #endif #ifndef MSG_ERR_Z_HOMING - #define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST + #define MSG_ERR_Z_HOMING _UxGT("Home XY First") #endif #ifndef MSG_HALTED #define MSG_HALTED _UxGT("PRINTER HALTED") diff --git a/Marlin/src/lcd/language/language_es.h b/Marlin/src/lcd/language/language_es.h index d660daa44257..e38390b3f9da 100644 --- a/Marlin/src/lcd/language/language_es.h +++ b/Marlin/src/lcd/language/language_es.h @@ -120,7 +120,6 @@ #define MSG_Y_OFFSET _UxGT("2ª Boquilla Y") #define MSG_Z_OFFSET _UxGT("2ª Boquilla Z") #define MSG_UBL_DOING_G29 _UxGT("Hacer G29") -#define MSG_UBL_UNHOMED _UxGT("Inicio XYZ Primero") #define MSG_UBL_TOOLS _UxGT("Herramientas UBL") #define MSG_UBL_LEVEL_BED _UxGT("Nivel.Cama.Uni.(UBL)") #define MSG_LCD_TILTING_MESH _UxGT("Punto de inclinación") @@ -364,8 +363,7 @@ #define MSG_MANUAL_DEPLOY_TOUCHMI _UxGT("Subir TouchMI") #define MSG_MANUAL_DEPLOY _UxGT("Subir Sonda Z") #define MSG_MANUAL_STOW _UxGT("Bajar Sonda Z") -#define MSG_HOME _UxGT("Origen") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("Primero") +#define MSG_HOME_FIRST _UxGT("Origen %s%s%s Primero") #define MSG_ZPROBE_ZOFFSET _UxGT("Desfase Z") #define MSG_BABYSTEP_X _UxGT("Micropaso X") #define MSG_BABYSTEP_Y _UxGT("Micropaso Y") @@ -385,7 +383,7 @@ #define MSG_ERR_MINTEMP_BED _UxGT("Err:TEMP. MIN CAMA") #define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err:TEMP. MÁX CÁMARA") #define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err:TEMP. MIN CÁMARA") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Origen XY Primero") #define MSG_HALTED _UxGT("IMPRESORA DETENIDA") #define MSG_PLEASE_RESET _UxGT("Por favor, reinicie") #define MSG_SHORT_DAY _UxGT("d") // One character only diff --git a/Marlin/src/lcd/language/language_eu.h b/Marlin/src/lcd/language/language_eu.h index 12767d536ec1..a77ae8a7fe07 100644 --- a/Marlin/src/lcd/language/language_eu.h +++ b/Marlin/src/lcd/language/language_eu.h @@ -81,7 +81,6 @@ //#define MSG_USER_MENU _UxGT("Custom Commands") #define MSG_UBL_DOING_G29 _UxGT("G29 exekutatzen") -#define MSG_UBL_UNHOMED _UxGT("XYZ etxeratu lehenengo") #define MSG_UBL_TOOLS _UxGT("UBL Tresnak") #define MSG_UBL_LEVEL_BED _UxGT("Unified Bed Leveling") #define MSG_UBL_MANUAL_MESH _UxGT("Sarea eskuz sortu") @@ -277,8 +276,7 @@ #define MSG_BLTOUCH_RESET _UxGT("BLTouch berrabia.") #define MSG_BLTOUCH_DEPLOY _UxGT("BLTouch jaitsi/luzatu") #define MSG_BLTOUCH_STOW _UxGT("BLTouch igo/jaso") -#define MSG_HOME _UxGT("Etxera") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("lehenengo") +#define MSG_HOME_FIRST _UxGT("Etxera %s%s%s lehenengo") #define MSG_ZPROBE_ZOFFSET _UxGT("Z Konpentsatu") #define MSG_BABYSTEP_X _UxGT("Mikro-urratsa X") #define MSG_BABYSTEP_Y _UxGT("Mikro-urratsa Y") @@ -291,7 +289,7 @@ #define MSG_ERR_MINTEMP _UxGT("Err: Tenp Minimoa") #define MSG_ERR_MAXTEMP_BED _UxGT("Err: Ohe Tenp Max") #define MSG_ERR_MINTEMP_BED _UxGT("Err: Ohe Tenp Min") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Etxera XY lehenengo") #define MSG_HALTED _UxGT("INPRIMA. GELDIRIK") #define MSG_PLEASE_RESET _UxGT("Berrabia. Mesedez") #define MSG_SHORT_DAY _UxGT("d") // One character only diff --git a/Marlin/src/lcd/language/language_fi.h b/Marlin/src/lcd/language/language_fi.h index 4d02e0ac3460..2fbf9e2d18c3 100644 --- a/Marlin/src/lcd/language/language_fi.h +++ b/Marlin/src/lcd/language/language_fi.h @@ -156,8 +156,7 @@ #define MSG_INIT_MEDIA _UxGT("Init. SD-Card") #define MSG_CHANGE_MEDIA _UxGT("Change SD-Card") #define MSG_ZPROBE_OUT _UxGT("Z probe out. bed") -#define MSG_HOME _UxGT("Home") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("first") +#define MSG_HOME_FIRST _UxGT("Home %s%s%s first") #define MSG_ZPROBE_ZOFFSET _UxGT("Z Offset") #define MSG_BABYSTEP_X _UxGT("Babystep X") #define MSG_BABYSTEP_Y _UxGT("Babystep Y") diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h index bd7b1114d882..da9a0d4acde7 100644 --- a/Marlin/src/lcd/language/language_fr.h +++ b/Marlin/src/lcd/language/language_fr.h @@ -124,7 +124,6 @@ #define MSG_G26_CANCELED _UxGT("G26 annulé") #define MSG_G26_LEAVING _UxGT("Sortie G26") #define MSG_UBL_DOING_G29 _UxGT("G29 en cours") -#define MSG_UBL_UNHOMED _UxGT("Origine XYZ requise") #define MSG_UBL_TOOLS _UxGT("Outils UBL") #define MSG_UBL_LEVEL_BED _UxGT("Niveau lit unifié") #define MSG_UBL_MANUAL_MESH _UxGT("Maillage manuel") @@ -360,8 +359,7 @@ #define MSG_MANUAL_DEPLOY_TOUCHMI _UxGT("Déployer TouchMI") #define MSG_MANUAL_DEPLOY _UxGT("Déployer Sonde Z") #define MSG_MANUAL_STOW _UxGT("Ranger Sonde Z") -#define MSG_HOME _UxGT("Origine") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("Premier") +#define MSG_HOME_FIRST _UxGT("Origine %s%s%s Premier") #define MSG_ZPROBE_ZOFFSET _UxGT("Décalage Z") #define MSG_BABYSTEP_X _UxGT("Babystep X") #define MSG_BABYSTEP_Y _UxGT("Babystep Y") @@ -381,7 +379,7 @@ #define MSG_ERR_MINTEMP_BED _UxGT("Err TEMP. MIN LIT") #define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err MAXTEMP CAISSON") #define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err MINTEMP CAISSON") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Origine XY Premier") #define MSG_HALTED _UxGT("IMPR. STOPPÉE") #define MSG_PLEASE_RESET _UxGT("Redémarrer SVP") diff --git a/Marlin/src/lcd/language/language_gl.h b/Marlin/src/lcd/language/language_gl.h index d3a87296b265..0de6382e54a7 100644 --- a/Marlin/src/lcd/language/language_gl.h +++ b/Marlin/src/lcd/language/language_gl.h @@ -82,36 +82,36 @@ #define MSG_BED _UxGT("Cama") #define MSG_FAN_SPEED _UxGT("Velocidade vent.") #define MSG_FLOW _UxGT("Fluxo") -#define MSG_CONTROL _UxGT("Control") +//#define MSG_CONTROL _UxGT("Control") #define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min") #define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max") #define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact") -#define MSG_AUTOTEMP _UxGT("Autotemp") -#define MSG_LCD_ON _UxGT("On") -#define MSG_LCD_OFF _UxGT("Off") -#define MSG_PID_P _UxGT("PID-P") -#define MSG_PID_I _UxGT("PID-I") -#define MSG_PID_D _UxGT("PID-D") -#define MSG_PID_C _UxGT("PID-C") +//#define MSG_AUTOTEMP _UxGT("Autotemp") +//#define MSG_LCD_ON _UxGT("On") +//#define MSG_LCD_OFF _UxGT("Off") +//#define MSG_PID_P _UxGT("PID-P") +//#define MSG_PID_I _UxGT("PID-I") +//#define MSG_PID_D _UxGT("PID-D") +//#define MSG_PID_C _UxGT("PID-C") #define MSG_SELECT _UxGT("Escolla") #define MSG_ACC _UxGT("Acel") -#define MSG_JERK _UxGT("Jerk") -#if IS_KINEMATIC - #define MSG_VA_JERK _UxGT("Va-jerk") - #define MSG_VB_JERK _UxGT("Vb-jerk") - #define MSG_VC_JERK _UxGT("Vc-jerk") -#else - #define MSG_VA_JERK _UxGT("Vx-jerk") - #define MSG_VB_JERK _UxGT("Vy-jerk") - #define MSG_VC_JERK _UxGT("Vz-jerk") -#endif -#define MSG_VE_JERK _UxGT("Ve-jerk") -#define MSG_VMAX _UxGT("Vmax ") -#define MSG_VMIN _UxGT("Vmin") -#define MSG_VTRAV_MIN _UxGT("VTrav min") -#define MSG_AMAX _UxGT("Amax ") -#define MSG_A_RETRACT _UxGT("A-retract") -#define MSG_A_TRAVEL _UxGT("A-travel") +//#define MSG_JERK _UxGT("Jerk") +//#if IS_KINEMATIC +// #define MSG_VA_JERK _UxGT("Va-jerk") +// #define MSG_VB_JERK _UxGT("Vb-jerk") +// #define MSG_VC_JERK _UxGT("Vc-jerk") +//#else +// #define MSG_VA_JERK _UxGT("Vx-jerk") +// #define MSG_VB_JERK _UxGT("Vy-jerk") +// #define MSG_VC_JERK _UxGT("Vz-jerk") +//#endif +//#define MSG_VE_JERK _UxGT("Ve-jerk") +//#define MSG_VMAX _UxGT("Vmax ") +//#define MSG_VMIN _UxGT("Vmin") +//#define MSG_VTRAV_MIN _UxGT("VTrav min") +//#define MSG_AMAX _UxGT("Amax ") +//#define MSG_A_RETRACT _UxGT("A-retract") +//#define MSG_A_TRAVEL _UxGT("A-travel") #define MSG_STEPS_PER_MM _UxGT("Pasos/mm") #if IS_KINEMATIC #define MSG_ASTEPS _UxGT("A pasos/mm") @@ -165,10 +165,9 @@ #define MSG_INIT_MEDIA _UxGT("Iniciando SD") #define MSG_CHANGE_MEDIA _UxGT("Cambiar SD") #define MSG_ZPROBE_OUT _UxGT("Sonda-Z sen cama") -#define MSG_HOME _UxGT("Home") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST +//#define MSG_HOME_FIRST _UxGT("Home %s%s%s first") #define MSG_BLTOUCH_SELFTEST _UxGT("Comprobar BLTouch") #define MSG_BLTOUCH_RESET _UxGT("Iniciar BLTouch") -#define MSG_FIRST _UxGT("first") #define MSG_ZPROBE_ZOFFSET _UxGT("Offset Z") #define MSG_BABYSTEP_X _UxGT("Micropaso X") #define MSG_BABYSTEP_Y _UxGT("Micropaso Y") @@ -177,16 +176,16 @@ #define MSG_HEATING_FAILED_LCD _UxGT("Fallo quentando") #define MSG_ERR_REDUNDANT_TEMP _UxGT("Erro temperatura") #define MSG_THERMAL_RUNAWAY _UxGT("Temp. excesiva") -#define MSG_ERR_MAXTEMP _UxGT("Err: temp. max.") -#define MSG_ERR_MINTEMP _UxGT("Err: temp. min.") -#define MSG_ERR_MAXTEMP_BED _UxGT("Err: MAXTEMP BED") -#define MSG_ERR_MINTEMP_BED _UxGT("Err: MINTEMP BED") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +//#define MSG_ERR_MAXTEMP _UxGT("Err: temp. max.") +//#define MSG_ERR_MINTEMP _UxGT("Err: temp. min.") +//#define MSG_ERR_MAXTEMP_BED _UxGT("Err: MAXTEMP BED") +//#define MSG_ERR_MINTEMP_BED _UxGT("Err: MINTEMP BED") +//#define MSG_ERR_Z_HOMING _UxGT("Home XY first") #define MSG_HALTED _UxGT("SISTEMA MORTO") #define MSG_PLEASE_RESET _UxGT("Debe reiniciar!") -#define MSG_SHORT_DAY _UxGT("d") // One character only -#define MSG_SHORT_HOUR _UxGT("h") // One character only -#define MSG_SHORT_MINUTE _UxGT("m") // One character only +//#define MSG_SHORT_DAY _UxGT("d") // One character only +//#define MSG_SHORT_HOUR _UxGT("h") // One character only +//#define MSG_SHORT_MINUTE _UxGT("m") // One character only #define MSG_HEATING _UxGT("Quentando...") #define MSG_BED_HEATING _UxGT("Quentando cama...") #define MSG_DELTA_CALIBRATE _UxGT("Calibracion Delta") @@ -229,26 +228,26 @@ #if LCD_HEIGHT >= 4 // Up to 3 lines allowed - #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Agarde para") - #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("iniciar troco") - #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("de filamento") - #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Agarde pola") - #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("descarga do") - #define MSG_FILAMENT_CHANGE_UNLOAD_3 _UxGT("filamento") - #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Introduza o") - #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("filamento e") - #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("faga click") - #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Agarde pola") - #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("carga do") - #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("filamento") - #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Agarde para") - #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("seguir co") - #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("traballo") + #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Agarde para") + #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("iniciar troco") + #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("de filamento") + #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Agarde pola") + #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("descarga do") + #define MSG_FILAMENT_CHANGE_UNLOAD_3 _UxGT("filamento") + #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Introduza o") + #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("filamento e") + #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("faga click") + #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Agarde pola") + #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("carga do") + #define MSG_FILAMENT_CHANGE_LOAD_3 _UxGT("filamento") + #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Agarde para") + #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("seguir co") + #define MSG_FILAMENT_CHANGE_RESUME_3 _UxGT("traballo") #else // LCD_HEIGHT < 4 // Up to 2 lines allowed - #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Agarde...") - #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Descargando...") - #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Introduza e click") - #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Cargando...") - #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Seguindo...") + #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Agarde...") + #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Descargando...") + #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Introduza e click") + #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Cargando...") + #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Seguindo...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/src/lcd/language/language_hr.h b/Marlin/src/lcd/language/language_hr.h index f60e91654a7b..6b46d730f257 100644 --- a/Marlin/src/lcd/language/language_hr.h +++ b/Marlin/src/lcd/language/language_hr.h @@ -35,8 +35,8 @@ #define WELCOME_MSG MACHINE_NAME _UxGT(" spreman.") #define MSG_MEDIA_INSERTED _UxGT("SD kartica umetnuta") #define MSG_MEDIA_REMOVED _UxGT("SD kartica uklonjena") -#define MSG_LCD_ENDSTOPS _UxGT("Endstops") // Max length 8 characters -#define MSG_MAIN _UxGT("Main") +//#define MSG_LCD_ENDSTOPS _UxGT("Endstops") // Max length 8 characters +//#define MSG_MAIN _UxGT("Main") #define MSG_AUTOSTART _UxGT("Auto pokretanje") #define MSG_DISABLE_STEPPERS _UxGT("Ugasi steppere") #define MSG_AUTO_HOME _UxGT("Automatski homing") @@ -63,15 +63,15 @@ #define MSG_COOLDOWN _UxGT("Hlađenje") #define MSG_SWITCH_PS_ON _UxGT("Uključi napajanje") #define MSG_SWITCH_PS_OFF _UxGT("Isključi napajanje") -#define MSG_EXTRUDE _UxGT("Extrude") -#define MSG_RETRACT _UxGT("Retract") +//#define MSG_EXTRUDE _UxGT("Extrude") +//#define MSG_RETRACT _UxGT("Retract") #define MSG_MOVE_AXIS _UxGT("Miči os") #define MSG_BED_LEVELING _UxGT("Niveliraj bed") #define MSG_LEVEL_BED _UxGT("Niveliraj bed") #define MSG_MOVE_X _UxGT("Miči X") #define MSG_MOVE_Y _UxGT("Miči Y") #define MSG_MOVE_Z _UxGT("Miči Z") -#define MSG_MOVE_E _UxGT("Extruder") +//#define MSG_MOVE_E _UxGT("Extruder") #define MSG_MOVE_Z_DIST _UxGT("Miči %smm") #define MSG_MOVE_01MM _UxGT("Miči 0.1mm") #define MSG_MOVE_1MM _UxGT("Miči 1mm") @@ -81,57 +81,57 @@ #define MSG_NOZZLE _UxGT("Dizna") #define MSG_BED _UxGT("Bed") #define MSG_FAN_SPEED _UxGT("Brzina ventilatora") -#define MSG_FLOW _UxGT("Flow") -#define MSG_CONTROL _UxGT("Control") -#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min") -#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max") -#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact") -#define MSG_AUTOTEMP _UxGT("Autotemp") -#define MSG_LCD_ON _UxGT("On") -#define MSG_LCD_OFF _UxGT("Off") -#define MSG_PID_P _UxGT("PID-P") -#define MSG_PID_I _UxGT("PID-I") -#define MSG_PID_D _UxGT("PID-D") -#define MSG_PID_C _UxGT("PID-C") +//#define MSG_FLOW _UxGT("Flow") +//#define MSG_CONTROL _UxGT("Control") +//#define MSG_MIN _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Min") +//#define MSG_MAX _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Max") +//#define MSG_FACTOR _UxGT(" ") LCD_STR_THERMOMETER _UxGT(" Fact") +//#define MSG_AUTOTEMP _UxGT("Autotemp") +//#define MSG_LCD_ON _UxGT("On") +//#define MSG_LCD_OFF _UxGT("Off") +//#define MSG_PID_P _UxGT("PID-P") +//#define MSG_PID_I _UxGT("PID-I") +//#define MSG_PID_D _UxGT("PID-D") +//#define MSG_PID_C _UxGT("PID-C") #define MSG_SELECT _UxGT("Odaberi") -#define MSG_ACC _UxGT("Accel") -#define MSG_JERK _UxGT("Jerk") -#if IS_KINEMATIC - #define MSG_VA_JERK _UxGT("Va-jerk") - #define MSG_VB_JERK _UxGT("Vb-jerk") - #define MSG_VC_JERK _UxGT("Vc-jerk") -#else - #define MSG_VA_JERK _UxGT("Vx-jerk") - #define MSG_VB_JERK _UxGT("Vy-jerk") - #define MSG_VC_JERK _UxGT("Vz-jerk") -#endif -#define MSG_VE_JERK _UxGT("Ve-jerk") -#define MSG_VMAX _UxGT("Vmax ") -#define MSG_VMIN _UxGT("Vmin") -#define MSG_VTRAV_MIN _UxGT("VTrav min") -#define MSG_AMAX _UxGT("Amax ") -#define MSG_A_RETRACT _UxGT("A-retract") -#define MSG_A_TRAVEL _UxGT("A-travel") -#define MSG_STEPS_PER_MM _UxGT("Steps/mm") -#if IS_KINEMATIC - #define MSG_ASTEPS _UxGT("Asteps/mm") - #define MSG_BSTEPS _UxGT("Bsteps/mm") - #define MSG_CSTEPS _UxGT("Csteps/mm") -#else - #define MSG_ASTEPS _UxGT("Xsteps/mm") - #define MSG_BSTEPS _UxGT("Ysteps/mm") - #define MSG_CSTEPS _UxGT("Zsteps/mm") -#endif -#define MSG_ESTEPS _UxGT("Esteps/mm") -#define MSG_E1STEPS _UxGT("E1steps/mm") -#define MSG_E2STEPS _UxGT("E2steps/mm") -#define MSG_E3STEPS _UxGT("E3steps/mm") -#define MSG_E4STEPS _UxGT("E4steps/mm") -#define MSG_E5STEPS _UxGT("E5steps/mm") -#define MSG_E6STEPS _UxGT("E6steps/mm") +//#define MSG_ACC _UxGT("Accel") +//#define MSG_JERK _UxGT("Jerk") +//#if IS_KINEMATIC +// #define MSG_VA_JERK _UxGT("Va-jerk") +// #define MSG_VB_JERK _UxGT("Vb-jerk") +// #define MSG_VC_JERK _UxGT("Vc-jerk") +//#else +// #define MSG_VA_JERK _UxGT("Vx-jerk") +// #define MSG_VB_JERK _UxGT("Vy-jerk") +// #define MSG_VC_JERK _UxGT("Vz-jerk") +//#endif +//#define MSG_VE_JERK _UxGT("Ve-jerk") +//#define MSG_VMAX _UxGT("Vmax ") +//#define MSG_VMIN _UxGT("Vmin") +//#define MSG_VTRAV_MIN _UxGT("VTrav min") +//#define MSG_AMAX _UxGT("Amax ") +//#define MSG_A_RETRACT _UxGT("A-retract") +//#define MSG_A_TRAVEL _UxGT("A-travel") +//#define MSG_STEPS_PER_MM _UxGT("Steps/mm") +//#if IS_KINEMATIC +// #define MSG_ASTEPS _UxGT("Asteps/mm") +// #define MSG_BSTEPS _UxGT("Bsteps/mm") +// #define MSG_CSTEPS _UxGT("Csteps/mm") +//#else +// #define MSG_ASTEPS _UxGT("Xsteps/mm") +// #define MSG_BSTEPS _UxGT("Ysteps/mm") +// #define MSG_CSTEPS _UxGT("Zsteps/mm") +//#endif +//#define MSG_ESTEPS _UxGT("Esteps/mm") +//#define MSG_E1STEPS _UxGT("E1steps/mm") +//#define MSG_E2STEPS _UxGT("E2steps/mm") +//#define MSG_E3STEPS _UxGT("E3steps/mm") +//#define MSG_E4STEPS _UxGT("E4steps/mm") +//#define MSG_E5STEPS _UxGT("E5steps/mm") +//#define MSG_E6STEPS _UxGT("E6steps/mm") #define MSG_TEMPERATURE _UxGT("Temperature") #define MSG_MOTION _UxGT("Gibanje") -#define MSG_FILAMENT _UxGT("Filament") +//#define MSG_FILAMENT _UxGT("Filament") #define MSG_VOLUMETRIC_ENABLED _UxGT("E in mm3") #define MSG_FILAMENT_DIAM _UxGT("Fil. Dia.") #define MSG_CONTRAST _UxGT("Kontrast LCD-a") @@ -141,52 +141,51 @@ #define MSG_REFRESH _UxGT("Osvježi") #define MSG_WATCH _UxGT("Info screen") #define MSG_PREPARE _UxGT("Pripremi") -#define MSG_TUNE _UxGT("Tune") +//#define MSG_TUNE _UxGT("Tune") #define MSG_PAUSE_PRINT _UxGT("Pauziraj print") #define MSG_RESUME_PRINT _UxGT("Nastavi print") #define MSG_STOP_PRINT _UxGT("Zaustavi print") #define MSG_MEDIA_MENU _UxGT("Printaj s SD kartice") #define MSG_NO_MEDIA _UxGT("Nema SD kartice") -#define MSG_DWELL _UxGT("Sleep...") +//#define MSG_DWELL _UxGT("Sleep...") #define MSG_USERWAIT _UxGT("Čekaj korisnika...") #define MSG_PRINT_ABORTED _UxGT("Print otkazan") -#define MSG_NO_MOVE _UxGT("No move.") -#define MSG_KILLED _UxGT("KILLED. ") +//#define MSG_NO_MOVE _UxGT("No move.") +//#define MSG_KILLED _UxGT("KILLED. ") #define MSG_STOPPED _UxGT("ZAUSTAVLJEN. ") -#define MSG_CONTROL_RETRACT _UxGT("Retract mm") -#define MSG_CONTROL_RETRACT_SWAP _UxGT("Swap Re.mm") -#define MSG_CONTROL_RETRACTF _UxGT("Retract V") -#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Hop mm") -#define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm") -#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("S UnRet mm") -#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V") -#define MSG_AUTORETRACT _UxGT("AutoRetr.") +//#define MSG_CONTROL_RETRACT _UxGT("Retract mm") +//#define MSG_CONTROL_RETRACT_SWAP _UxGT("Swap Re.mm") +//#define MSG_CONTROL_RETRACTF _UxGT("Retract V") +//#define MSG_CONTROL_RETRACT_ZHOP _UxGT("Hop mm") +//#define MSG_CONTROL_RETRACT_RECOVER _UxGT("UnRet mm") +//#define MSG_CONTROL_RETRACT_RECOVER_SWAP _UxGT("S UnRet mm") +//#define MSG_CONTROL_RETRACT_RECOVERF _UxGT("UnRet V") +//#define MSG_AUTORETRACT _UxGT("AutoRetr.") #define MSG_FILAMENTCHANGE _UxGT("Promijeni filament") #define MSG_INIT_MEDIA _UxGT("Init. SD karticu") #define MSG_CHANGE_MEDIA _UxGT("Promijeni SD karticu") -#define MSG_ZPROBE_OUT _UxGT("Z probe out. bed") -#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Self-Test") -#define MSG_BLTOUCH_RESET _UxGT("Reset BLTouch") -#define MSG_HOME _UxGT("Home") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("first") -#define MSG_ZPROBE_ZOFFSET _UxGT("Z Offset") -#define MSG_BABYSTEP_X _UxGT("Babystep X") -#define MSG_BABYSTEP_Y _UxGT("Babystep Y") -#define MSG_BABYSTEP_Z _UxGT("Babystep Z") -#define MSG_ENDSTOP_ABORT _UxGT("Endstop abort") +//#define MSG_ZPROBE_OUT _UxGT("Z probe out. bed") +//#define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Self-Test") +//#define MSG_BLTOUCH_RESET _UxGT("Reset BLTouch") +//#define MSG_HOME_FIRST _UxGT("Home %s%s%s first") +//#define MSG_ZPROBE_ZOFFSET _UxGT("Z Offset") +//#define MSG_BABYSTEP_X _UxGT("Babystep X") +//#define MSG_BABYSTEP_Y _UxGT("Babystep Y") +//#define MSG_BABYSTEP_Z _UxGT("Babystep Z") +//#define MSG_ENDSTOP_ABORT _UxGT("Endstop abort") #define MSG_HEATING_FAILED_LCD _UxGT("Grijanje neuspješno") -#define MSG_ERR_REDUNDANT_TEMP _UxGT("Err: REDUNDANT TEMP") -#define MSG_THERMAL_RUNAWAY _UxGT("THERMAL RUNAWAY") -#define MSG_ERR_MAXTEMP _UxGT("Err: MAXTEMP") -#define MSG_ERR_MINTEMP _UxGT("Err: MINTEMP") -#define MSG_ERR_MAXTEMP_BED _UxGT("Err: MAXTEMP BED") -#define MSG_ERR_MINTEMP_BED _UxGT("Err: MINTEMP BED") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST -#define MSG_HALTED _UxGT("PRINTER HALTED") -#define MSG_PLEASE_RESET _UxGT("Please reset") -#define MSG_SHORT_DAY _UxGT("d") // One character only -#define MSG_SHORT_HOUR _UxGT("h") // One character only -#define MSG_SHORT_MINUTE _UxGT("m") // One character only +//#define MSG_ERR_REDUNDANT_TEMP _UxGT("Err: REDUNDANT TEMP") +//#define MSG_THERMAL_RUNAWAY _UxGT("THERMAL RUNAWAY") +//#define MSG_ERR_MAXTEMP _UxGT("Err: MAXTEMP") +//#define MSG_ERR_MINTEMP _UxGT("Err: MINTEMP") +//#define MSG_ERR_MAXTEMP_BED _UxGT("Err: MAXTEMP BED") +//#define MSG_ERR_MINTEMP_BED _UxGT("Err: MINTEMP BED") +//#define MSG_ERR_Z_HOMING _UxGT("Home XY first") +//#define MSG_HALTED _UxGT("PRINTER HALTED") +//#define MSG_PLEASE_RESET _UxGT("Please reset") +//#define MSG_SHORT_DAY _UxGT("d") // One character only +//#define MSG_SHORT_HOUR _UxGT("h") // One character only +//#define MSG_SHORT_MINUTE _UxGT("m") // One character only #define MSG_HEATING _UxGT("Grijanje...") #define MSG_BED_HEATING _UxGT("Grijanje Bed-a...") #define MSG_DELTA_CALIBRATE _UxGT("Delta Kalibracija") @@ -220,34 +219,34 @@ #define MSG_INFO_PRINT_FILAMENT _UxGT("Extrudirano") #endif -#define MSG_INFO_MIN_TEMP _UxGT("Min Temp") -#define MSG_INFO_MAX_TEMP _UxGT("Max Temp") +//#define MSG_INFO_MIN_TEMP _UxGT("Min Temp") +//#define MSG_INFO_MAX_TEMP _UxGT("Max Temp") #define MSG_INFO_PSU _UxGT("Napajanje") -#define MSG_DRIVE_STRENGTH _UxGT("Drive Strength") -#define MSG_DAC_PERCENT _UxGT("Driver %") -#define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write") +//#define MSG_DRIVE_STRENGTH _UxGT("Drive Strength") +//#define MSG_DAC_PERCENT _UxGT("Driver %") +//#define MSG_DAC_EEPROM_WRITE _UxGT("DAC EEPROM Write") #define MSG_FILAMENT_CHANGE_OPTION_RESUME _UxGT("Nastavi print") #if LCD_HEIGHT >= 4 // Up to 3 lines allowed - #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Čekaj početak") - #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("filamenta") - #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("promijeni") - #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Čekaj") - #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("filament unload") - #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Umetni filament") - #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("i pritisni tipku") - #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("za nastavak...") - #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Pričekaj") - #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filament load") - #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wait for print") - #define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("to resume") + #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Čekaj početak") + #define MSG_FILAMENT_CHANGE_INIT_2 _UxGT("filamenta") + #define MSG_FILAMENT_CHANGE_INIT_3 _UxGT("promijeni") + #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Čekaj") + #define MSG_FILAMENT_CHANGE_UNLOAD_2 _UxGT("filament unload") + #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Umetni filament") + #define MSG_FILAMENT_CHANGE_INSERT_2 _UxGT("i pritisni tipku") + #define MSG_FILAMENT_CHANGE_INSERT_3 _UxGT("za nastavak...") + #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Pričekaj") + #define MSG_FILAMENT_CHANGE_LOAD_2 _UxGT("filament load") + //#define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Wait for print") + //#define MSG_FILAMENT_CHANGE_RESUME_2 _UxGT("to resume") #else // LCD_HEIGHT < 4 // Up to 2 lines allowed - #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Pričekaj...") - #define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Ejecting...") - #define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insert and Click") - #define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Loading...") - #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Nastavljam...") + #define MSG_FILAMENT_CHANGE_INIT_1 _UxGT("Pričekaj...") + //#define MSG_FILAMENT_CHANGE_UNLOAD_1 _UxGT("Ejecting...") + //#define MSG_FILAMENT_CHANGE_INSERT_1 _UxGT("Insert and Click") + //#define MSG_FILAMENT_CHANGE_LOAD_1 _UxGT("Loading...") + #define MSG_FILAMENT_CHANGE_RESUME_1 _UxGT("Nastavljam...") #endif // LCD_HEIGHT < 4 diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h index 40e2dc61523b..ffad3992af87 100644 --- a/Marlin/src/lcd/language/language_it.h +++ b/Marlin/src/lcd/language/language_it.h @@ -113,7 +113,6 @@ #define MSG_Y_OFFSET _UxGT("2° ugello Y") #define MSG_Z_OFFSET _UxGT("2° ugello Z") #define MSG_UBL_DOING_G29 _UxGT("G29 in corso") -#define MSG_UBL_UNHOMED _UxGT("Home XYZ prima") #define MSG_UBL_TOOLS _UxGT("Strumenti UBL") #define MSG_UBL_LEVEL_BED _UxGT("Unified Bed Leveling") #define MSG_UBL_MANUAL_MESH _UxGT("Mesh Manuale") @@ -348,8 +347,7 @@ #define MSG_MANUAL_DEPLOY _UxGT("Estendi Sonda-Z") #define MSG_BLTOUCH_STOW _UxGT("Ritrai BLTouch") #define MSG_MANUAL_STOW _UxGT("Ritrai Sonda-Z") -#define MSG_HOME _UxGT("Home") // Usato come MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("prima") +#define MSG_HOME_FIRST _UxGT("Home %s%s%s prima") #define MSG_ZPROBE_ZOFFSET _UxGT("Offset sonda Z") #define MSG_BABYSTEP_X _UxGT("Babystep X") #define MSG_BABYSTEP_Y _UxGT("Babystep Y") @@ -369,7 +367,7 @@ #define MSG_ERR_MINTEMP_BED _UxGT("Err: TEMP MIN PIATTO") #define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err: TEMP MAX CAMERA") #define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err: TEMP MIN CAMERA") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Home XY prima") #define MSG_HALTED _UxGT("STAMPANTE FERMATA") #define MSG_PLEASE_RESET _UxGT("Riavviare prego") #define MSG_SHORT_DAY _UxGT("g") // Un solo carattere diff --git a/Marlin/src/lcd/language/language_jp-kana.h b/Marlin/src/lcd/language/language_jp-kana.h index 4792bb1ddfa3..1898ab01d6ce 100644 --- a/Marlin/src/lcd/language/language_jp-kana.h +++ b/Marlin/src/lcd/language/language_jp-kana.h @@ -161,8 +161,7 @@ #define MSG_ZPROBE_OUT _UxGT("Zプローブ ベッドガイ") // "Z probe out. bed" #define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch ジコシンダン") // "BLTouch Self-Test" #define MSG_BLTOUCH_RESET _UxGT("BLTouch リセット") // "Reset BLTouch" -#define MSG_HOME _UxGT("サキニ") // "Home" // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("ヲフッキサセテクダサイ") // "first" +#define MSG_HOME_FIRST _UxGT("サキニ %s%s%s ヲフッキサセテクダサイ") // "Home ... first" #define MSG_ZPROBE_ZOFFSET _UxGT("Zオフセット") // "Z Offset" #define MSG_BABYSTEP_X _UxGT("Xジク ビドウ") // "Babystep X" #define MSG_BABYSTEP_Y _UxGT("Yジク ビドウ") // "Babystep Y" @@ -175,7 +174,7 @@ #define MSG_ERR_MINTEMP _UxGT("エラー:サイテイオンミマン") // "Err: MINTEMP" #define MSG_ERR_MAXTEMP_BED _UxGT("エラー:ベッド サイコウオンチョウカ") // "Err: MAXTEMP BED" #define MSG_ERR_MINTEMP_BED _UxGT("エラー:ベッド サイテイオンミマン") // "Err: MINTEMP BED" -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST // "Home XY first" +#define MSG_ERR_Z_HOMING _UxGT("サキニ XY ヲフッキサセテクダサイ") // "Home XY first" #define MSG_HALTED _UxGT("プリンターハテイシシマシタ") // "PRINTER HALTED" #define MSG_PLEASE_RESET _UxGT("リセットシテクダサイ") // "Please reset" #define MSG_SHORT_DAY _UxGT("d") // One character only diff --git a/Marlin/src/lcd/language/language_ko_KR.h b/Marlin/src/lcd/language/language_ko_KR.h index 8d24736e6cdc..20e35af58b8c 100644 --- a/Marlin/src/lcd/language/language_ko_KR.h +++ b/Marlin/src/lcd/language/language_ko_KR.h @@ -91,7 +91,6 @@ //#define MSG_Y_OFFSET _UxGT("2nd nozzle Y") //#define MSG_Z_OFFSET _UxGT("2nd nozzle Z") #define MSG_UBL_DOING_G29 _UxGT("오토레벨링 하기") -//#define MSG_UBL_UNHOMED _UxGT("Home XYZ first") //#define MSG_UBL_TOOLS _UxGT("UBL Tools") //#define MSG_UBL_LEVEL_BED _UxGT("Unified Bed Leveling") //#define MSG_UBL_MANUAL_MESH _UxGT("Manually Build Mesh") @@ -293,8 +292,7 @@ //#define MSG_BLTOUCH_STOW _UxGT("Stow BLTouch") //#define MSG_MANUAL_DEPLOY _UxGT("Deploy Z-Probe") //#define MSG_MANUAL_STOW _UxGT("Stow Z-Probe") -//#define MSG_HOME _UxGT("Home") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -//#define MSG_FIRST _UxGT("first") +//#define MSG_HOME_FIRST _UxGT("Home %s%s%s first") //#define MSG_ZPROBE_ZOFFSET _UxGT("Probe Z Offset") //#define MSG_BABYSTEP_X _UxGT("Babystep X") //#define MSG_BABYSTEP_Y _UxGT("Babystep Y") @@ -309,7 +307,7 @@ //#define MSG_ERR_MINTEMP _UxGT("Err: MINTEMP") //#define MSG_ERR_MAXTEMP_BED _UxGT("Err: MAXTEMP BED") //#define MSG_ERR_MINTEMP_BED _UxGT("Err: MINTEMP BED") -//#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +//#define MSG_ERR_Z_HOMING _UxGT("Home XY first") //#define MSG_HALTED _UxGT("PRINTER HALTED") //#define MSG_PLEASE_RESET _UxGT("Please reset") //#define MSG_SHORT_DAY _UxGT("d") // One character only diff --git a/Marlin/src/lcd/language/language_nl.h b/Marlin/src/lcd/language/language_nl.h index 5e95c3554b2f..483b24250181 100644 --- a/Marlin/src/lcd/language/language_nl.h +++ b/Marlin/src/lcd/language/language_nl.h @@ -176,8 +176,7 @@ #define MSG_ZPROBE_OUT _UxGT("Z probe uit. bed") #define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Zelf-Test") #define MSG_BLTOUCH_RESET _UxGT("Reset BLTouch") -#define MSG_HOME _UxGT("Home") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("Eerst") +#define MSG_HOME_FIRST _UxGT("Home %s%s%s Eerst") #define MSG_ZPROBE_ZOFFSET _UxGT("Z Offset") //accepted English term in Dutch #define MSG_BABYSTEP_X _UxGT("Babystap X") #define MSG_BABYSTEP_Y _UxGT("Babystap Y") @@ -190,7 +189,7 @@ #define MSG_ERR_MINTEMP _UxGT("Err: Min. temp") #define MSG_ERR_MAXTEMP_BED _UxGT("Err: Max.tmp bed") #define MSG_ERR_MINTEMP_BED _UxGT("Err: Min.tmp bed") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Home XY Eerst") #define MSG_HALTED _UxGT("PRINTER GESTOPT") #define MSG_PLEASE_RESET _UxGT("Reset A.U.B.") #define MSG_SHORT_DAY _UxGT("d") // One character only. Keep English standard diff --git a/Marlin/src/lcd/language/language_pl.h b/Marlin/src/lcd/language/language_pl.h index 575f313dffa8..97924a7024d0 100644 --- a/Marlin/src/lcd/language/language_pl.h +++ b/Marlin/src/lcd/language/language_pl.h @@ -166,8 +166,7 @@ #define MSG_ZPROBE_OUT _UxGT("Sonda Z za stołem") #define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Self-Test") #define MSG_BLTOUCH_RESET _UxGT("Reset BLTouch") -#define MSG_HOME _UxGT("Home") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("first") +#define MSG_HOME_FIRST _UxGT("Home %s%s%s first") #define MSG_ZPROBE_ZOFFSET _UxGT("Offset Z") #define MSG_BABYSTEP_X _UxGT("Babystep X") #define MSG_BABYSTEP_Y _UxGT("Babystep Y") @@ -180,7 +179,7 @@ #define MSG_ERR_MINTEMP _UxGT("Err min temp") #define MSG_ERR_MAXTEMP_BED _UxGT("Err max temp stołu") #define MSG_ERR_MINTEMP_BED _UxGT("Err min temp stołu") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Home XY first") #define MSG_HALTED _UxGT("Drukarka zatrzym.") #define MSG_PLEASE_RESET _UxGT("Proszę zresetować") #define MSG_SHORT_DAY _UxGT("d") // One character only diff --git a/Marlin/src/lcd/language/language_pt-br.h b/Marlin/src/lcd/language/language_pt-br.h index 9b97457870ed..d78bd5a13844 100644 --- a/Marlin/src/lcd/language/language_pt-br.h +++ b/Marlin/src/lcd/language/language_pt-br.h @@ -102,7 +102,6 @@ #define MSG_Z_OFFSET _UxGT("2o bico Z") #define MSG_UBL_DOING_G29 _UxGT("Executando G29") -#define MSG_UBL_UNHOMED _UxGT("Fora da Origam") #define MSG_UBL_TOOLS _UxGT("Ferramentas UBL") #define MSG_UBL_LEVEL_BED _UxGT("Nivel. Mesa Unif.") #define MSG_UBL_MANUAL_MESH _UxGT("Fazer malha manual") @@ -311,8 +310,7 @@ #define MSG_MANUAL_DEPLOY _UxGT("Estender Sonda-Z") #define MSG_MANUAL_STOW _UxGT("Recolher Sonda-Z") -#define MSG_HOME _UxGT("Home") -#define MSG_FIRST _UxGT("Primeiro") +#define MSG_HOME_FIRST _UxGT("Home %s%s%s Primeiro") #define MSG_ZPROBE_ZOFFSET _UxGT("Compensar Sonda em Z") #define MSG_BABYSTEP_X _UxGT("Passinho X") #define MSG_BABYSTEP_Y _UxGT("Passinho Y") @@ -327,7 +325,7 @@ #define MSG_ERR_MINTEMP _UxGT("Erro:Temp Mínima") #define MSG_ERR_MAXTEMP_BED _UxGT("Erro:Temp Mesa Máx") #define MSG_ERR_MINTEMP_BED _UxGT("Erro:Temp Mesa Mín") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Home XY Primeiro") #define MSG_HALTED _UxGT("IMPRESSORA PAROU") #define MSG_PLEASE_RESET _UxGT("Favor resetar") #define MSG_SHORT_DAY _UxGT("d") diff --git a/Marlin/src/lcd/language/language_pt.h b/Marlin/src/lcd/language/language_pt.h index 50d9d60c719b..9fde8f89ba39 100644 --- a/Marlin/src/lcd/language/language_pt.h +++ b/Marlin/src/lcd/language/language_pt.h @@ -162,8 +162,7 @@ #define MSG_INIT_MEDIA _UxGT("Inici. cartão SD") #define MSG_CHANGE_MEDIA _UxGT("Trocar cartão SD") #define MSG_ZPROBE_OUT _UxGT("Sensor fora/base") -#define MSG_HOME _UxGT("Home") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("first") +#define MSG_HOME_FIRST _UxGT("Home %s%s%s first") #define MSG_ZPROBE_ZOFFSET _UxGT("Desvio Z") #define MSG_BABYSTEP_X _UxGT("Babystep X") #define MSG_BABYSTEP_Y _UxGT("Babystep Y") diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h index 37e19c787311..e825dbe7d051 100644 --- a/Marlin/src/lcd/language/language_ru.h +++ b/Marlin/src/lcd/language/language_ru.h @@ -96,7 +96,6 @@ #define MSG_Z_OFFSET _UxGT("2-е сопло Z") #define MSG_UBL_DOING_G29 _UxGT("Выполняем G29") -#define MSG_UBL_UNHOMED _UxGT("Паркуем сначала XYZ") #define MSG_UBL_TOOLS _UxGT("Утилиты UBL") #define MSG_UBL_LEVEL_BED _UxGT("Калибровка UBL") #define MSG_UBL_MANUAL_MESH _UxGT("Постр. сетку от руки") @@ -316,8 +315,7 @@ // TODO: TouchMI Probe, Manual deploy/stow -#define MSG_HOME _UxGT("Паркуй") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("сначала") +#define MSG_HOME_FIRST _UxGT("Паркуй %s%s%s сначала") #define MSG_ZPROBE_ZOFFSET _UxGT("Смещение Z") #define MSG_BABYSTEP_X _UxGT("Микрошаг X") #define MSG_BABYSTEP_Y _UxGT("Микрошаг Y") @@ -334,7 +332,7 @@ #define MSG_ERR_MAXTEMP_BED _UxGT("Ошибка: Т стола макс") #define MSG_ERR_MINTEMP_BED _UxGT("Ошибка: Т стола мин.") // TODO: Heated chamber -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Паркуй XY сначала") #define MSG_HALTED _UxGT("ПРИНТЕР ОСТАНОВЛЕН") #define MSG_PLEASE_RESET _UxGT("Сделайте сброс") #define MSG_SHORT_DAY _UxGT("д") // One character only diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h index 6ed99c9bf375..8897ff2310fd 100644 --- a/Marlin/src/lcd/language/language_sk.h +++ b/Marlin/src/lcd/language/language_sk.h @@ -120,7 +120,6 @@ #define MSG_Y_OFFSET _UxGT("2. tryska Y") #define MSG_Z_OFFSET _UxGT("2. tryska Z") #define MSG_UBL_DOING_G29 _UxGT("Vykonávam G29") -#define MSG_UBL_UNHOMED _UxGT("Prejdite domov") #define MSG_UBL_TOOLS _UxGT("Nástroje UBL") #define MSG_UBL_LEVEL_BED _UxGT("UBL rovnanie") #define MSG_LCD_TILTING_MESH _UxGT("Vyrovnávam bod") @@ -357,8 +356,7 @@ #define MSG_MANUAL_DEPLOY_TOUCHMI _UxGT("Zasunúť TouchMI") #define MSG_MANUAL_DEPLOY _UxGT("Zasunúť sondu Z") #define MSG_MANUAL_STOW _UxGT("Vysunúť sondu Z") -#define MSG_HOME _UxGT("Najskôr os") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("domov") +#define MSG_HOME_FIRST _UxGT("Najskôr os %s%s%s domov") #define MSG_ZPROBE_ZOFFSET _UxGT("Ofset sondy Z") #define MSG_BABYSTEP_X _UxGT("Babystep X") #define MSG_BABYSTEP_Y _UxGT("Babystep Y") @@ -378,7 +376,7 @@ #define MSG_ERR_MINTEMP_BED _UxGT("Chyba: MINTEMP PODL.") #define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Chyba: MAXTEMP KOMO.") #define MSG_ERR_MINTEMP_CHAMBER _UxGT("Chyba: MINTEMP KOMO.") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Najskôr os XY domov") #define MSG_HALTED _UxGT("TLAČIAREŇ ZASTAVENÁ") #define MSG_PLEASE_RESET _UxGT("Reštartuje ju") #define MSG_SHORT_DAY _UxGT("d") diff --git a/Marlin/src/lcd/language/language_tr.h b/Marlin/src/lcd/language/language_tr.h index de48759003b3..3e025934a76f 100644 --- a/Marlin/src/lcd/language/language_tr.h +++ b/Marlin/src/lcd/language/language_tr.h @@ -101,7 +101,6 @@ #define MSG_Y_OFFSET _UxGT("2. nozul Y") #define MSG_Z_OFFSET _UxGT("2. nozul Z") #define MSG_UBL_DOING_G29 _UxGT("G29 Çalışıyor") -#define MSG_UBL_UNHOMED _UxGT("Ilk XYZ Sıfırla") #define MSG_UBL_TOOLS _UxGT("UBL Araçları") #define MSG_UBL_LEVEL_BED _UxGT("UBL Yatak Hizalama") #define MSG_UBL_MANUAL_MESH _UxGT("Elle Mesh Oluştur") @@ -309,8 +308,7 @@ #define MSG_BLTOUCH_STOW _UxGT("BLTouch Kapat") #define MSG_MANUAL_DEPLOY _UxGT("Z-Prob Aç") #define MSG_MANUAL_STOW _UxGT("Z-Sensör Kapat") -#define MSG_HOME _UxGT("Sıfırla") -#define MSG_FIRST _UxGT("Önce") +#define MSG_HOME_FIRST _UxGT("Sıfırla %s%s%s Önce") #define MSG_ZPROBE_ZOFFSET _UxGT("Z Offset") #define MSG_BABYSTEP_X _UxGT("Miniadım X") #define MSG_BABYSTEP_Y _UxGT("Miniadım Y") diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h index 7e866668c38d..b358743be61f 100644 --- a/Marlin/src/lcd/language/language_uk.h +++ b/Marlin/src/lcd/language/language_uk.h @@ -159,8 +159,7 @@ #define MSG_ZPROBE_OUT _UxGT("Z дет. не в межах") #define MSG_BLTOUCH_SELFTEST _UxGT("BLTouch Само-Тест") #define MSG_BLTOUCH_RESET _UxGT("Скинути BLTouch") -#define MSG_HOME _UxGT("Дім") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("перший") +#define MSG_HOME_FIRST _UxGT("Дім %s%s%s перший") #define MSG_ZPROBE_ZOFFSET _UxGT("Зміщення Z") #define MSG_BABYSTEP_X _UxGT("Мікрокрок X") #define MSG_BABYSTEP_Y _UxGT("Мікрокрок Y") @@ -168,7 +167,7 @@ #define MSG_ENDSTOP_ABORT _UxGT("невдача кінцевика") #define MSG_HEATING_FAILED_LCD _UxGT("Невдалий нагрів") #define MSG_THERMAL_RUNAWAY _UxGT("ЗБІЙ ТЕМПЕРАТУРИ") -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Дім XY перший") #define MSG_HALTED _UxGT("ПРИНТЕР ЗУПИНЕНО") #define MSG_PLEASE_RESET _UxGT("Перезавантажте") #define MSG_SHORT_DAY _UxGT("д") // One character only diff --git a/Marlin/src/lcd/language/language_vi.h b/Marlin/src/lcd/language/language_vi.h index d2333242f48e..3b8885e707c0 100644 --- a/Marlin/src/lcd/language/language_vi.h +++ b/Marlin/src/lcd/language/language_vi.h @@ -88,7 +88,6 @@ #define MSG_MESH_EDIT_Z _UxGT("Giá trị Z") // Z Value #define MSG_USER_MENU _UxGT("Các lệnh tự chọn") // Custom Commands #define MSG_UBL_DOING_G29 _UxGT("Đang chạy G29") // Doing G29 -#define MSG_UBL_UNHOMED _UxGT("Về nhà XYZ trước") #define MSG_UBL_TOOLS _UxGT("Công cụ UBL") // UBL tools #define MSG_UBL_LEVEL_BED _UxGT("San Lấp Bàn Thống Nhất (UBL)") // Unified Bed Leveling #define MSG_IDEX_MENU _UxGT("chế độ IDEX") // IDEX Mode @@ -307,8 +306,7 @@ #define MSG_BLTOUCH_STOW _UxGT("Cất BLTouch") // Stow BLTouch #define MSG_MANUAL_DEPLOY _UxGT("Đem Đầu Dò-Z") // Deploy Z-Probe #define MSG_MANUAL_STOW _UxGT("Cất Đầu Dò-Z") // Stow Z-Probe -#define MSG_HOME _UxGT("Về nhà") // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("Trước") +#define MSG_HOME_FIRST _UxGT("Về nhà %s%s%s Trước") #define MSG_ZPROBE_ZOFFSET _UxGT("Đầu Dò Bù Đắp Z") // Probe Z Offset #define MSG_BABYSTEP_X _UxGT("Nhít X") // Babystep X #define MSG_BABYSTEP_Y _UxGT("Nhít Y") @@ -323,7 +321,7 @@ #define MSG_ERR_MINTEMP _UxGT("Điều sai: nhiệt độ tối thiểu") // Err: MINTEMP #define MSG_ERR_MAXTEMP_BED _UxGT("Điều sai: nhiệt độ bàn tối đa") // Err: MAXTEMP BED #define MSG_ERR_MINTEMP_BED _UxGT("Điều sai: nhiệt độ bàn tối thiểu") // Err: MINTEMP BED -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("Về nhà XY Trước") // Home XY First #define MSG_HALTED _UxGT("MÁY IN ĐÃ DỪNG LẠI") // PRINTER HALTED #define MSG_PLEASE_RESET _UxGT("Xin bặt lại") // Please reset #define MSG_SHORT_DAY _UxGT("n") // d - ngày - One character only diff --git a/Marlin/src/lcd/language/language_zh_CN.h b/Marlin/src/lcd/language/language_zh_CN.h index bad55c974f9e..a87f469a0ee2 100644 --- a/Marlin/src/lcd/language/language_zh_CN.h +++ b/Marlin/src/lcd/language/language_zh_CN.h @@ -79,7 +79,6 @@ #define MSG_USER_MENU _UxGT("定制命令") // "Custom Commands" #define MSG_UBL_DOING_G29 _UxGT("执行G29") // "Doing G29" -#define MSG_UBL_UNHOMED _UxGT("先回XYZ原点") // "Home XYZ first" #define MSG_UBL_TOOLS _UxGT("UBL工具") // "UBL Tools" #define MSG_UBL_LEVEL_BED _UxGT("统一热床调平(UBL)") // "Unified Bed Leveling" #define MSG_UBL_MANUAL_MESH _UxGT("手工创设网格") // "Manually Build Mesh" @@ -274,8 +273,7 @@ #define MSG_BLTOUCH_RESET _UxGT("重置BLTouch") // "Reset BLTouch" #define MSG_BLTOUCH_DEPLOY _UxGT("部署BLTouch") // "Deploy BLTouch" #define MSG_BLTOUCH_STOW _UxGT("装载BLTouch") // "Stow BLTouch" -#define MSG_HOME _UxGT("归位") //"Home" // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("先") //"first" +#define MSG_HOME_FIRST _UxGT("归位 %s%s%s 先") //"Home ... first" #define MSG_ZPROBE_ZOFFSET _UxGT("Z偏移") //"Z Offset" #define MSG_BABYSTEP_X _UxGT("微量调整X轴") //"Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts #define MSG_BABYSTEP_Y _UxGT("微量调整Y轴") //"Babystep Y" @@ -288,7 +286,7 @@ #define MSG_ERR_MINTEMP _UxGT("错误:最低温度") //"Err: MINTEMP" #define MSG_ERR_MAXTEMP_BED _UxGT("错误:最高热床温度") //"Err: MAXTEMP BED" #define MSG_ERR_MINTEMP_BED _UxGT("错误:最低热床温度") //"Err: MINTEMP BED" -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("归位 XY 先") // "Home XY First" #define MSG_HALTED _UxGT("打印停机") //"PRINTER HALTED" #define MSG_PLEASE_RESET _UxGT("请重置") //"Please reset" #define MSG_SHORT_DAY _UxGT("天") //"d" // One character only diff --git a/Marlin/src/lcd/language/language_zh_TW.h b/Marlin/src/lcd/language/language_zh_TW.h index e9e871ac2a18..ce8cda2692dc 100644 --- a/Marlin/src/lcd/language/language_zh_TW.h +++ b/Marlin/src/lcd/language/language_zh_TW.h @@ -79,7 +79,6 @@ #define MSG_USER_MENU _UxGT("客制命令") // "Custom Commands" #define MSG_UBL_DOING_G29 _UxGT("执行G29") // "Doing G29" -#define MSG_UBL_UNHOMED _UxGT("先回XYZ原點") // "Home XYZ first" #define MSG_UBL_TOOLS _UxGT("UBL工具") // "UBL Tools" #define MSG_UBL_LEVEL_BED _UxGT("統一熱床調平(UBL)") // "Unified Bed Leveling" #define MSG_UBL_MANUAL_MESH _UxGT("手工建网") // "Manually Build Mesh" @@ -274,8 +273,7 @@ #define MSG_BLTOUCH_RESET _UxGT("重置BLTouch") // "Reset BLTouch" #define MSG_BLTOUCH_DEPLOY _UxGT("部署BLTouch") // "Deploy BLTouch" #define MSG_BLTOUCH_STOW _UxGT("裝載BLTouch") // "Stow BLTouch" -#define MSG_HOME _UxGT("歸位") //"Home" // Used as MSG_HOME " " MSG_X MSG_Y MSG_Z " " MSG_FIRST -#define MSG_FIRST _UxGT("先") //"first" +#define MSG_HOME_FIRST _UxGT("歸位 %s%s%s 先") //"Home ... first" #define MSG_ZPROBE_ZOFFSET _UxGT("Z偏移") //"Z Offset" #define MSG_BABYSTEP_X _UxGT("微量調整X軸") //"Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts #define MSG_BABYSTEP_Y _UxGT("微量調整Y軸") //"Babystep Y" @@ -288,7 +286,7 @@ #define MSG_ERR_MINTEMP _UxGT("錯誤:最低溫度") //"Err: MINTEMP" #define MSG_ERR_MAXTEMP_BED _UxGT("錯誤:最高熱床溫度") //"Err: MAXTEMP BED" #define MSG_ERR_MINTEMP_BED _UxGT("錯誤:最低熱床溫度") //"Err: MINTEMP BED" -#define MSG_ERR_Z_HOMING MSG_HOME _UxGT(" ") MSG_X MSG_Y _UxGT(" ") MSG_FIRST +#define MSG_ERR_Z_HOMING _UxGT("歸位 XY 先") //"Home XY First" #define MSG_HALTED _UxGT("印表機停機") //"PRINTER HALTED" #define MSG_PLEASE_RESET _UxGT("請重置") //"Please reset" #define MSG_SHORT_DAY _UxGT("天") //"d" // One character only diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index d5bc121d9b5b..9d31653e58d8 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -1030,26 +1030,32 @@ void prepare_move_to_destination() { set_current_from_destination(); } -bool axis_unhomed_error(const bool x/*=true*/, const bool y/*=true*/, const bool z/*=true*/) { +uint8_t axes_need_homing(uint8_t axis_bits/*=0x07*/) { #if ENABLED(HOME_AFTER_DEACTIVATE) - const bool xx = x && !TEST(axis_known_position, X_AXIS), - yy = y && !TEST(axis_known_position, Y_AXIS), - zz = z && !TEST(axis_known_position, Z_AXIS); + #define HOMED_FLAGS axis_known_position #else - const bool xx = x && !TEST(axis_homed, X_AXIS), - yy = y && !TEST(axis_homed, Y_AXIS), - zz = z && !TEST(axis_homed, Z_AXIS); + #define HOMED_FLAGS axis_homed #endif - if (xx || yy || zz) { - SERIAL_ECHO_START(); - SERIAL_ECHOPGM(MSG_HOME " "); - if (xx) SERIAL_CHAR('X'); - if (yy) SERIAL_CHAR('Y'); - if (zz) SERIAL_CHAR('Z'); - SERIAL_ECHOLNPGM(" " MSG_FIRST); + // Clear test bits that are homed + if (TEST(axis_bits, X_AXIS) && TEST(HOMED_FLAGS, X_AXIS)) CBI(axis_bits, X_AXIS); + if (TEST(axis_bits, Y_AXIS) && TEST(HOMED_FLAGS, Y_AXIS)) CBI(axis_bits, Y_AXIS); + if (TEST(axis_bits, Z_AXIS) && TEST(HOMED_FLAGS, Z_AXIS)) CBI(axis_bits, Z_AXIS); + return axis_bits; +} +bool axis_unhomed_error(uint8_t axis_bits/*=0x07*/) { + if ((axis_bits = axes_need_homing(axis_bits))) { + static const char home_first[] PROGMEM = MSG_HOME_FIRST; + char msg[sizeof(home_first)]; + sprintf_P(msg, home_first, + TEST(axis_bits, X_AXIS) ? "X" : "", + TEST(axis_bits, Y_AXIS) ? "Y" : "", + TEST(axis_bits, Z_AXIS) ? "Z" : "" + ); + SERIAL_ECHO_START(); + SERIAL_ECHO(msg); #if HAS_DISPLAY - ui.status_printf_P(0, PSTR(MSG_HOME " %s%s%s " MSG_FIRST), xx ? MSG_X : "", yy ? MSG_Y : "", zz ? MSG_Z : ""); + ui.set_status(msg); #endif return true; } diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index 664e9f13fef5..b3d79a7a0ee3 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -211,7 +211,8 @@ void restore_feedrate_and_scaling(); // Homing // -bool axis_unhomed_error(const bool x=true, const bool y=true, const bool z=true); +uint8_t axes_need_homing(uint8_t axis_bits=0x07); +bool axis_unhomed_error(uint8_t axis_bits=0x07); #if ENABLED(NO_MOTION_BEFORE_HOMING) #define MOTION_CONDITIONS (IsRunning() && !axis_unhomed_error()) diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 13c920082c71..830f6d4c0df3 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -373,12 +373,11 @@ bool set_probe_deployed(const bool deploy) { do_probe_raise(_MAX(Z_CLEARANCE_BETWEEN_PROBES, Z_CLEARANCE_DEPLOY_PROBE)); #if EITHER(Z_PROBE_SLED, Z_PROBE_ALLEN_KEY) - #if ENABLED(Z_PROBE_SLED) - #define _AUE_ARGS true, false, false - #else - #define _AUE_ARGS - #endif - if (axis_unhomed_error(_AUE_ARGS)) { + if (axis_unhomed_error( + #if ENABLED(Z_PROBE_SLED) + _BV(X_AXIS) + #endif + )) { SERIAL_ERROR_MSG(MSG_STOP_UNHOMED); stop(); return true; diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp index 608d47345416..6178a7ce5d28 100644 --- a/Marlin/src/module/tool_change.cpp +++ b/Marlin/src/module/tool_change.cpp @@ -158,7 +158,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a #endif ); - if (axis_unhomed_error(true, false, false)) return; + if (axis_unhomed_error(_BV(X_AXIS))) return; /** * Z Lift and Nozzle Offset shift ar defined in caller method to work equal with any Multi Hotend realization From b72fd7ea9cfd9a584b24b2a67580df7dc478aa76 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Sep 2019 22:05:31 -0500 Subject: [PATCH 057/120] Supply 'super' for servo subclasses --- Marlin/src/HAL/HAL_STM32/Servo.h | 1 + Marlin/src/HAL/HAL_STM32_F4_F7/Servo.h | 1 + Marlin/src/HAL/HAL_TEENSY31_32/Servo.h | 7 ++++--- Marlin/src/HAL/HAL_TEENSY35_36/Servo.h | 7 ++++--- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Marlin/src/HAL/HAL_STM32/Servo.h b/Marlin/src/HAL/HAL_STM32/Servo.h index a782c130e42f..592f3a0662d0 100644 --- a/Marlin/src/HAL/HAL_STM32/Servo.h +++ b/Marlin/src/HAL/HAL_STM32/Servo.h @@ -31,6 +31,7 @@ class libServo : public Servo { int8_t attach(const int pin, const int min, const int max); void move(const int value); private: + typedef Servo super; uint16_t min_ticks, max_ticks; uint8_t servoIndex; // index into the channel data for this servo }; diff --git a/Marlin/src/HAL/HAL_STM32_F4_F7/Servo.h b/Marlin/src/HAL/HAL_STM32_F4_F7/Servo.h index c839c6a145ee..64fa05025c7c 100644 --- a/Marlin/src/HAL/HAL_STM32_F4_F7/Servo.h +++ b/Marlin/src/HAL/HAL_STM32_F4_F7/Servo.h @@ -35,6 +35,7 @@ class libServo : public Servo { int8_t attach(const int pin, const int min, const int max); void move(const int value); private: + typedef Servo super; uint16_t min_ticks, max_ticks; uint8_t servoIndex; // index into the channel data for this servo }; diff --git a/Marlin/src/HAL/HAL_TEENSY31_32/Servo.h b/Marlin/src/HAL/HAL_TEENSY31_32/Servo.h index e096dc60c8ed..3eb7d39b2217 100644 --- a/Marlin/src/HAL/HAL_TEENSY31_32/Servo.h +++ b/Marlin/src/HAL/HAL_TEENSY31_32/Servo.h @@ -30,7 +30,8 @@ class libServo : public Servo { int8_t attach(const int pin, const int min, const int max); void move(const int value); private: - uint16_t min_ticks; - uint16_t max_ticks; - uint8_t servoIndex; // index into the channel data for this servo + typedef Servo super; + uint16_t min_ticks; + uint16_t max_ticks; + uint8_t servoIndex; // index into the channel data for this servo }; diff --git a/Marlin/src/HAL/HAL_TEENSY35_36/Servo.h b/Marlin/src/HAL/HAL_TEENSY35_36/Servo.h index 4b97dbffbbbe..cafd323a3846 100644 --- a/Marlin/src/HAL/HAL_TEENSY35_36/Servo.h +++ b/Marlin/src/HAL/HAL_TEENSY35_36/Servo.h @@ -30,7 +30,8 @@ class libServo : public Servo { int8_t attach(const int pin, const int min, const int max); void move(const int value); private: - uint16_t min_ticks; - uint16_t max_ticks; - uint8_t servoIndex; // Index into the channel data for this servo + typedef Servo super; + uint16_t min_ticks; + uint16_t max_ticks; + uint8_t servoIndex; // Index into the channel data for this servo }; From d49d40f7b014caec19f431fa2f40e78129321524 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 25 Sep 2019 22:26:08 -0500 Subject: [PATCH 058/120] Home XYZ newline --- Marlin/src/module/motion.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index 9d31653e58d8..c27d87424e49 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -1053,7 +1053,7 @@ bool axis_unhomed_error(uint8_t axis_bits/*=0x07*/) { TEST(axis_bits, Z_AXIS) ? "Z" : "" ); SERIAL_ECHO_START(); - SERIAL_ECHO(msg); + SERIAL_ECHOLN(msg); #if HAS_DISPLAY ui.set_status(msg); #endif From 1f48eaf03a495051ee25a508460e94f3256f690a Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 26 Sep 2019 00:18:45 -0500 Subject: [PATCH 059/120] Change AutoBuild button order --- .../share/vscode/AutoBuildMarlin/package.json | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/buildroot/share/vscode/AutoBuildMarlin/package.json b/buildroot/share/vscode/AutoBuildMarlin/package.json index 8335b4ca07bf..ac30b225e3ae 100644 --- a/buildroot/share/vscode/AutoBuildMarlin/package.json +++ b/buildroot/share/vscode/AutoBuildMarlin/package.json @@ -46,14 +46,6 @@ "dark": "resources/B48x48_dark.svg" } }, - { - "command": "pioclean", - "title": "PIO Clean", - "icon": { - "light": "resources/C48x48_light.svg", - "dark": "resources/C48x48_dark.svg" - } - }, { "command": "pioupload", "title": "PIO Upload", @@ -69,6 +61,14 @@ "light": "resources/T48x48_light.svg", "dark": "resources/T48x48_dark.svg" } + }, + { + "command": "pioclean", + "title": "PIO Clean", + "icon": { + "light": "resources/C48x48_light.svg", + "dark": "resources/C48x48_dark.svg" + } } ], "menus": { @@ -78,15 +78,15 @@ "group": "navigation@1" }, { - "command": "pioclean", + "command": "pioupload", "group": "navigation@2" }, { - "command": "pioupload", + "command": "piotraceback", "group": "navigation@3" }, { - "command": "piotraceback", + "command": "pioclean", "group": "navigation@4" } ] From ee7558a6228747a7502ab50e2817234fb8a6feb4 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 26 Sep 2019 01:15:35 -0500 Subject: [PATCH 060/120] Tweaks to Z fade behavior --- Marlin/src/feature/bedlevel/bedlevel.cpp | 34 ++++++++++++----------- Marlin/src/feature/bedlevel/ubl/ubl.cpp | 3 -- Marlin/src/module/configuration_store.cpp | 2 +- Marlin/src/module/planner.h | 14 ++++------ 4 files changed, 25 insertions(+), 28 deletions(-) diff --git a/Marlin/src/feature/bedlevel/bedlevel.cpp b/Marlin/src/feature/bedlevel/bedlevel.cpp index e6bc47a62b4d..f4a17b003525 100644 --- a/Marlin/src/feature/bedlevel/bedlevel.cpp +++ b/Marlin/src/feature/bedlevel/bedlevel.cpp @@ -130,23 +130,25 @@ TemporaryBedLevelingState::TemporaryBedLevelingState(const bool enable) : saved( */ void reset_bed_level() { if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("reset_bed_level"); - set_bed_leveling_enabled(false); - #if ENABLED(MESH_BED_LEVELING) - mbl.reset(); - #elif ENABLED(AUTO_BED_LEVELING_UBL) + #if ENABLED(AUTO_BED_LEVELING_UBL) ubl.reset(); - #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) - bilinear_start[X_AXIS] = bilinear_start[Y_AXIS] = - bilinear_grid_spacing[X_AXIS] = bilinear_grid_spacing[Y_AXIS] = 0; - for (uint8_t x = 0; x < GRID_MAX_POINTS_X; x++) - for (uint8_t y = 0; y < GRID_MAX_POINTS_Y; y++) { - z_values[x][y] = NAN; - #if ENABLED(EXTENSIBLE_UI) - ExtUI::onMeshUpdate(x, y, 0); - #endif - } - #elif ABL_PLANAR - planner.bed_level_matrix.set_to_identity(); + #else + set_bed_leveling_enabled(false); + #if ENABLED(MESH_BED_LEVELING) + mbl.reset(); + #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) + bilinear_start[X_AXIS] = bilinear_start[Y_AXIS] = + bilinear_grid_spacing[X_AXIS] = bilinear_grid_spacing[Y_AXIS] = 0; + for (uint8_t x = 0; x < GRID_MAX_POINTS_X; x++) + for (uint8_t y = 0; y < GRID_MAX_POINTS_Y; y++) { + z_values[x][y] = NAN; + #if ENABLED(EXTENSIBLE_UI) + ExtUI::onMeshUpdate(x, y, 0); + #endif + } + #elif ABL_PLANAR + planner.bed_level_matrix.set_to_identity(); + #endif #endif } diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.cpp b/Marlin/src/feature/bedlevel/ubl/ubl.cpp index 341436e95db5..f41c80f88a5a 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl.cpp @@ -97,9 +97,6 @@ const bool was_enabled = planner.leveling_active; set_bed_leveling_enabled(false); storage_slot = -1; - #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) - planner.set_z_fade_height(10.0); - #endif ZERO(z_values); #if ENABLED(EXTENSIBLE_UI) for (uint8_t x = 0; x < GRID_MAX_POINTS_X; x++) diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp index f12e377af3f3..ad3f6f4dcbc5 100644 --- a/Marlin/src/module/configuration_store.cpp +++ b/Marlin/src/module/configuration_store.cpp @@ -2061,7 +2061,7 @@ void MarlinSettings::postprocess() { } else { ubl.reset(); - DEBUG_ECHOLNPGM("UBL System reset()"); + DEBUG_ECHOLNPGM("UBL reset"); } } #endif diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index cb74065d9d96..79efe349a172 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -411,15 +411,13 @@ class Planner { */ static inline float fade_scaling_factor_for_z(const float &rz) { static float z_fade_factor = 1; - if (z_fade_height) { - if (rz >= z_fade_height) return 0; - if (last_fade_z != rz) { - last_fade_z = rz; - z_fade_factor = 1 - rz * inverse_z_fade_height; - } - return z_fade_factor; + if (!z_fade_height) return 1; + if (rz >= z_fade_height) return 0; + if (last_fade_z != rz) { + last_fade_z = rz; + z_fade_factor = 1 - rz * inverse_z_fade_height; } - return 1; + return z_fade_factor; } FORCE_INLINE static void force_fade_recalc() { last_fade_z = -999.999f; } From 455dabb18334c89878a75be62bccebd9f537574d Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 26 Sep 2019 01:28:09 -0500 Subject: [PATCH 061/120] Add a feedRate_t data type (#15349) --- Marlin/src/core/macros.h | 3 + Marlin/src/feature/I2CPositionEncoder.cpp | 16 +- Marlin/src/feature/bedlevel/abl/abl.cpp | 10 +- Marlin/src/feature/bedlevel/abl/abl.h | 2 +- .../bedlevel/mbl/mesh_bed_leveling.cpp | 10 +- .../feature/bedlevel/mbl/mesh_bed_leveling.h | 2 +- Marlin/src/feature/bedlevel/ubl/ubl.h | 4 +- .../src/feature/bedlevel/ubl/ubl_motion.cpp | 53 +++--- Marlin/src/feature/fwretract.cpp | 39 ++--- Marlin/src/feature/fwretract.h | 16 +- Marlin/src/feature/pause.cpp | 10 +- Marlin/src/feature/pause.h | 2 +- Marlin/src/feature/prusa_MMU2/mmu2.cpp | 17 +- Marlin/src/gcode/bedlevel/G26.cpp | 31 ++-- Marlin/src/gcode/bedlevel/G42.cpp | 10 +- Marlin/src/gcode/bedlevel/mbl/G29.cpp | 3 +- Marlin/src/gcode/calibrate/G425.cpp | 9 +- Marlin/src/gcode/feature/L6470/M916-918.cpp | 38 ++--- Marlin/src/gcode/feature/camera/M240.cpp | 12 +- Marlin/src/gcode/feature/pause/M701_M702.cpp | 8 +- Marlin/src/gcode/gcode.cpp | 2 +- Marlin/src/gcode/gcode.h | 2 +- Marlin/src/gcode/motion/G0_G1.cpp | 20 +-- Marlin/src/gcode/motion/G2_G3.cpp | 8 +- Marlin/src/gcode/parser.h | 2 +- .../lib/lulzbot/screens/bio_status_screen.cpp | 4 +- Marlin/src/lcd/extensible_ui/ui_api.cpp | 38 ++--- Marlin/src/lcd/extensible_ui/ui_api.h | 18 +- Marlin/src/lcd/menu/menu_ubl.cpp | 8 +- Marlin/src/lcd/ultralcd.cpp | 9 +- Marlin/src/lcd/ultralcd.h | 2 +- Marlin/src/libs/nozzle.cpp | 2 +- Marlin/src/module/configuration_store.cpp | 35 ++-- Marlin/src/module/delta.cpp | 6 +- Marlin/src/module/motion.cpp | 158 ++++++++++-------- Marlin/src/module/motion.h | 51 +++--- Marlin/src/module/planner.cpp | 21 ++- Marlin/src/module/planner.h | 37 ++-- Marlin/src/module/planner_bezier.cpp | 13 +- Marlin/src/module/planner_bezier.h | 12 +- Marlin/src/module/probe.cpp | 2 +- Marlin/src/module/tool_change.h | 12 +- 42 files changed, 382 insertions(+), 375 deletions(-) diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h index 3a10340559b2..ecc51b2c70d4 100644 --- a/Marlin/src/core/macros.h +++ b/Marlin/src/core/macros.h @@ -244,8 +244,11 @@ #define DECREMENT_(n) DEC_##n #define DECREMENT(n) DECREMENT_(n) +// Feedrate +typedef float feedRate_t; #define MMM_TO_MMS(MM_M) ((MM_M)/60.0f) #define MMS_TO_MMM(MM_S) ((MM_S)*60.0f) +#define MMS_SCALED(V) ((V) * 0.01f * feedrate_percentage) #define NOOP (void(0)) diff --git a/Marlin/src/feature/I2CPositionEncoder.cpp b/Marlin/src/feature/I2CPositionEncoder.cpp index bc6b49bab283..1f73f1417b52 100644 --- a/Marlin/src/feature/I2CPositionEncoder.cpp +++ b/Marlin/src/feature/I2CPositionEncoder.cpp @@ -329,8 +329,8 @@ bool I2CPositionEncoder::test_axis() { float startCoord[NUM_AXIS] = { 0 }, endCoord[NUM_AXIS] = { 0 }; const float startPosition = soft_endstop[encoderAxis].min + 10, - endPosition = soft_endstop[encoderAxis].max - 10, - feedrate = FLOOR(MMM_TO_MMS((encoderAxis == Z_AXIS) ? HOMING_FEEDRATE_Z : HOMING_FEEDRATE_XY)); + endPosition = soft_endstop[encoderAxis].max - 10; + const feedRate_t fr_mm_s = FLOOR(MMM_TO_MMS((encoderAxis == Z_AXIS) ? HOMING_FEEDRATE_Z : HOMING_FEEDRATE_XY)); ec = false; @@ -344,7 +344,7 @@ bool I2CPositionEncoder::test_axis() { planner.synchronize(); planner.buffer_line(startCoord[X_AXIS], startCoord[Y_AXIS], startCoord[Z_AXIS], - planner.get_axis_position_mm(E_AXIS), feedrate, 0); + planner.get_axis_position_mm(E_AXIS), fr_mm_s, 0); planner.synchronize(); // if the module isn't currently trusted, wait until it is (or until it should be if things are working) @@ -356,7 +356,7 @@ bool I2CPositionEncoder::test_axis() { if (trusted) { // if trusted, commence test planner.buffer_line(endCoord[X_AXIS], endCoord[Y_AXIS], endCoord[Z_AXIS], - planner.get_axis_position_mm(E_AXIS), feedrate, 0); + planner.get_axis_position_mm(E_AXIS), fr_mm_s, 0); planner.synchronize(); } @@ -379,11 +379,9 @@ void I2CPositionEncoder::calibrate_steps_mm(const uint8_t iter) { travelDistance, travelledDistance, total = 0, startCoord[NUM_AXIS] = { 0 }, endCoord[NUM_AXIS] = { 0 }; - float feedrate; - int32_t startCount, stopCount; - feedrate = MMM_TO_MMS((encoderAxis == Z_AXIS) ? HOMING_FEEDRATE_Z : HOMING_FEEDRATE_XY); + const feedRate_t fr_mm_s = MMM_TO_MMS((encoderAxis == Z_AXIS) ? HOMING_FEEDRATE_Z : HOMING_FEEDRATE_XY); bool oldec = ec; ec = false; @@ -404,7 +402,7 @@ void I2CPositionEncoder::calibrate_steps_mm(const uint8_t iter) { LOOP_L_N(i, iter) { planner.buffer_line(startCoord[X_AXIS], startCoord[Y_AXIS], startCoord[Z_AXIS], - planner.get_axis_position_mm(E_AXIS), feedrate, 0); + planner.get_axis_position_mm(E_AXIS), fr_mm_s, 0); planner.synchronize(); delay(250); @@ -413,7 +411,7 @@ void I2CPositionEncoder::calibrate_steps_mm(const uint8_t iter) { //do_blocking_move_to(endCoord[X_AXIS],endCoord[Y_AXIS],endCoord[Z_AXIS]); planner.buffer_line(endCoord[X_AXIS], endCoord[Y_AXIS], endCoord[Z_AXIS], - planner.get_axis_position_mm(E_AXIS), feedrate, 0); + planner.get_axis_position_mm(E_AXIS), fr_mm_s, 0); planner.synchronize(); //Read encoder distance diff --git a/Marlin/src/feature/bedlevel/abl/abl.cpp b/Marlin/src/feature/bedlevel/abl/abl.cpp index 9e7fc0d6743e..d1857af11294 100644 --- a/Marlin/src/feature/bedlevel/abl/abl.cpp +++ b/Marlin/src/feature/bedlevel/abl/abl.cpp @@ -360,7 +360,7 @@ float bilinear_z_offset(const float raw[XYZ]) { * Prepare a bilinear-leveled linear move on Cartesian, * splitting the move where it crosses grid borders. */ - void bilinear_line_to_destination(const float fr_mm_s, uint16_t x_splits, uint16_t y_splits) { + void bilinear_line_to_destination(const feedRate_t scaled_fr_mm_s, uint16_t x_splits, uint16_t y_splits) { // Get current and destination cells for this line int cx1 = CELL_INDEX(X, current_position[X_AXIS]), cy1 = CELL_INDEX(Y, current_position[Y_AXIS]), @@ -373,8 +373,8 @@ float bilinear_z_offset(const float raw[XYZ]) { // Start and end in the same cell? No split needed. if (cx1 == cx2 && cy1 == cy2) { - buffer_line_to_destination(fr_mm_s); set_current_from_destination(); + line_to_current_position(scaled_fr_mm_s); return; } @@ -405,8 +405,8 @@ float bilinear_z_offset(const float raw[XYZ]) { else { // Must already have been split on these border(s) // This should be a rare case. - buffer_line_to_destination(fr_mm_s); set_current_from_destination(); + line_to_current_position(scaled_fr_mm_s); return; } @@ -414,11 +414,11 @@ float bilinear_z_offset(const float raw[XYZ]) { destination[E_AXIS] = LINE_SEGMENT_END(E); // Do the split and look for more borders - bilinear_line_to_destination(fr_mm_s, x_splits, y_splits); + bilinear_line_to_destination(scaled_fr_mm_s, x_splits, y_splits); // Restore destination from stack COPY(destination, end); - bilinear_line_to_destination(fr_mm_s, x_splits, y_splits); + bilinear_line_to_destination(scaled_fr_mm_s, x_splits, y_splits); } #endif // IS_CARTESIAN && !SEGMENT_LEVELED_MOVES diff --git a/Marlin/src/feature/bedlevel/abl/abl.h b/Marlin/src/feature/bedlevel/abl/abl.h index 2ba834480f56..71c7d836326a 100644 --- a/Marlin/src/feature/bedlevel/abl/abl.h +++ b/Marlin/src/feature/bedlevel/abl/abl.h @@ -37,7 +37,7 @@ void refresh_bed_level(); #endif #if IS_CARTESIAN && DISABLED(SEGMENT_LEVELED_MOVES) - void bilinear_line_to_destination(const float fr_mm_s, uint16_t x_splits=0xFFFF, uint16_t y_splits=0xFFFF); + void bilinear_line_to_destination(const feedRate_t &scaled_fr_mm_s, uint16_t x_splits=0xFFFF, uint16_t y_splits=0xFFFF); #endif #define _GET_MESH_X(I) (bilinear_start[X_AXIS] + (I) * bilinear_grid_spacing[X_AXIS]) diff --git a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp index 6a9deaed9bba..b3a1a13529da 100644 --- a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp +++ b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp @@ -64,7 +64,7 @@ * Prepare a mesh-leveled linear move in a Cartesian setup, * splitting the move where it crosses mesh borders. */ - void mesh_bed_leveling::line_to_destination(const float fr_mm_s, uint8_t x_splits, uint8_t y_splits) { + void mesh_bed_leveling::line_to_destination(const feedRate_t &scaled_fr_mm_s, uint8_t x_splits, uint8_t y_splits) { // Get current and destination cells for this line int cx1 = cell_index_x(current_position[X_AXIS]), cy1 = cell_index_y(current_position[Y_AXIS]), @@ -77,7 +77,7 @@ // Start and end in the same cell? No split needed. if (cx1 == cx2 && cy1 == cy2) { - line_to_destination(fr_mm_s); + line_to_destination(scaled_fr_mm_s); set_current_from_destination(); return; } @@ -109,7 +109,7 @@ else { // Must already have been split on these border(s) // This should be a rare case. - line_to_destination(fr_mm_s); + line_to_destination(scaled_fr_mm_s); set_current_from_destination(); return; } @@ -118,11 +118,11 @@ destination[E_AXIS] = MBL_SEGMENT_END(E); // Do the split and look for more borders - line_to_destination(fr_mm_s, x_splits, y_splits); + line_to_destination(scaled_fr_mm_s, x_splits, y_splits); // Restore destination from stack COPY(destination, end); - line_to_destination(fr_mm_s, x_splits, y_splits); + line_to_destination(scaled_fr_mm_s, x_splits, y_splits); } #endif // IS_CARTESIAN && !SEGMENT_LEVELED_MOVES diff --git a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h index 4885cd825dc2..def380399eb2 100644 --- a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h +++ b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h @@ -116,7 +116,7 @@ class mesh_bed_leveling { } #if IS_CARTESIAN && DISABLED(SEGMENT_LEVELED_MOVES) - static void line_to_destination(const float fr_mm_s, uint8_t x_splits=0xFF, uint8_t y_splits=0xFF); + static void line_to_destination(const feedRate_t &scaled_fr_mm_s, uint8_t x_splits=0xFF, uint8_t y_splits=0xFF); #endif }; diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.h b/Marlin/src/feature/bedlevel/ubl/ubl.h index 5183dc8485bb..6897217c3843 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.h +++ b/Marlin/src/feature/bedlevel/ubl/ubl.h @@ -285,9 +285,9 @@ class unified_bed_leveling { } #if UBL_SEGMENTED - static bool prepare_segmented_line_to(const float (&rtarget)[XYZE], const float &feedrate); + static bool line_to_destination_segmented(const feedRate_t &scaled_fr_mm_s); #else - static void line_to_destination_cartesian(const float &fr, const uint8_t e); + static void line_to_destination_cartesian(const feedRate_t &scaled_fr_mm_s, const uint8_t e); #endif static inline bool mesh_is_valid() { diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp index 105aee1c7722..fcce41169a32 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp @@ -43,7 +43,7 @@ #if !UBL_SEGMENTED - void unified_bed_leveling::line_to_destination_cartesian(const float &feed_rate, const uint8_t extruder) { + void unified_bed_leveling::line_to_destination_cartesian(const feedRate_t &scaled_fr_mm_s, const uint8_t extruder) { /** * Much of the nozzle movement will be within the same cell. So we will do as little computation * as possible to determine if this is the case. If this move is within the same cell, we will @@ -79,9 +79,8 @@ + UBL_Z_RAISE_WHEN_OFF_MESH #endif ; - planner.buffer_segment(end[X_AXIS], end[Y_AXIS], end[Z_AXIS] + z_raise, end[E_AXIS], feed_rate, extruder); + planner.buffer_segment(end[X_AXIS], end[Y_AXIS], end[Z_AXIS] + z_raise, end[E_AXIS], scaled_fr_mm_s, extruder); set_current_from_destination(); - return; } @@ -103,8 +102,7 @@ // Undefined parts of the Mesh in z_values[][] are NAN. // Replace NAN corrections with 0.0 to prevent NAN propagation. - planner.buffer_segment(end[X_AXIS], end[Y_AXIS], end[Z_AXIS] + (isnan(z0) ? 0.0 : z0), end[E_AXIS], feed_rate, extruder); - + planner.buffer_segment(end[X_AXIS], end[Y_AXIS], end[Z_AXIS] + (isnan(z0) ? 0.0 : z0), end[E_AXIS], scaled_fr_mm_s, extruder); set_current_from_destination(); return; } @@ -194,7 +192,7 @@ z_position = end[Z_AXIS]; } - planner.buffer_segment(rx, ry, z_position + z0, e_position, feed_rate, extruder); + planner.buffer_segment(rx, ry, z_position + z0, e_position, scaled_fr_mm_s, extruder); } //else printf("FIRST MOVE PRUNED "); } @@ -242,7 +240,7 @@ z_position = end[Z_AXIS]; } - if (!planner.buffer_segment(rx, ry, z_position + z0, e_position, feed_rate, extruder)) + if (!planner.buffer_segment(rx, ry, z_position + z0, e_position, scaled_fr_mm_s, extruder)) break; } //else printf("FIRST MOVE PRUNED "); } @@ -297,7 +295,7 @@ e_position = end[E_AXIS]; z_position = end[Z_AXIS]; } - if (!planner.buffer_segment(rx, next_mesh_line_y, z_position + z0, e_position, feed_rate, extruder)) + if (!planner.buffer_segment(rx, next_mesh_line_y, z_position + z0, e_position, scaled_fr_mm_s, extruder)) break; current_yi += dyi; yi_cnt--; @@ -321,7 +319,7 @@ z_position = end[Z_AXIS]; } - if (!planner.buffer_segment(next_mesh_line_x, ry, z_position + z0, e_position, feed_rate, extruder)) + if (!planner.buffer_segment(next_mesh_line_x, ry, z_position + z0, e_position, scaled_fr_mm_s, extruder)) break; current_xi += dxi; xi_cnt--; @@ -356,25 +354,25 @@ * Returns true if did NOT move, false if moved (requires current_position update). */ - bool _O2 unified_bed_leveling::prepare_segmented_line_to(const float (&rtarget)[XYZE], const float &feedrate) { + bool _O2 unified_bed_leveling::line_to_destination_segmented(const feedRate_t &scaled_fr_mm_s) { - if (!position_is_reachable(rtarget[X_AXIS], rtarget[Y_AXIS])) // fail if moving outside reachable boundary + if (!position_is_reachable(destination[X_AXIS], destination[Y_AXIS])) // fail if moving outside reachable boundary return true; // did not move, so current_position still accurate const float total[XYZE] = { - rtarget[X_AXIS] - current_position[X_AXIS], - rtarget[Y_AXIS] - current_position[Y_AXIS], - rtarget[Z_AXIS] - current_position[Z_AXIS], - rtarget[E_AXIS] - current_position[E_AXIS] + destination[X_AXIS] - current_position[X_AXIS], + destination[Y_AXIS] - current_position[Y_AXIS], + destination[Z_AXIS] - current_position[Z_AXIS], + destination[E_AXIS] - current_position[E_AXIS] }; const float cartesian_xy_mm = HYPOT(total[X_AXIS], total[Y_AXIS]); // total horizontal xy distance #if IS_KINEMATIC - const float seconds = cartesian_xy_mm / feedrate; // seconds to move xy distance at requested rate - uint16_t segments = LROUND(delta_segments_per_second * seconds), // preferred number of segments for distance @ feedrate - seglimit = LROUND(cartesian_xy_mm * RECIPROCAL(DELTA_SEGMENT_MIN_LENGTH)); // number of segments at minimum segment length - NOMORE(segments, seglimit); // limit to minimum segment length (fewer segments) + const float seconds = cartesian_xy_mm / scaled_fr_mm_s; // Duration of XY move at requested rate + uint16_t segments = LROUND(delta_segments_per_second * seconds), // Preferred number of segments for distance @ feedrate + seglimit = LROUND(cartesian_xy_mm * RECIPROCAL(DELTA_SEGMENT_MIN_LENGTH)); // Number of segments at minimum segment length + NOMORE(segments, seglimit); // Limit to minimum segment length (fewer segments) #else uint16_t segments = LROUND(cartesian_xy_mm * RECIPROCAL(DELTA_SEGMENT_MIN_LENGTH)); // cartesian fixed segment length #endif @@ -384,7 +382,7 @@ const float segment_xyz_mm = HYPOT(cartesian_xy_mm, total[Z_AXIS]) * inv_segments; // length of each segment #if ENABLED(SCARA_FEEDRATE_SCALING) - const float inv_duration = feedrate / segment_xyz_mm; + const float inv_duration = scaled_fr_mm_s / segment_xyz_mm; #endif const float diff[XYZE] = { @@ -404,17 +402,17 @@ current_position[E_AXIS] }; - // Only compute leveling per segment if ubl active and target below z_fade_height. - if (!planner.leveling_active || !planner.leveling_active_at_z(rtarget[Z_AXIS])) { // no mesh leveling + // Just do plain segmentation if UBL is inactive or the target is above the fade height + if (!planner.leveling_active || !planner.leveling_active_at_z(destination[Z_AXIS])) { while (--segments) { LOOP_XYZE(i) raw[i] += diff[i]; - planner.buffer_line(raw, feedrate, active_extruder, segment_xyz_mm + planner.buffer_line(raw, scaled_fr_mm_s, active_extruder, segment_xyz_mm #if ENABLED(SCARA_FEEDRATE_SCALING) , inv_duration #endif ); } - planner.buffer_line(rtarget, feedrate, active_extruder, segment_xyz_mm + planner.buffer_line(destination, scaled_fr_mm_s, active_extruder, segment_xyz_mm #if ENABLED(SCARA_FEEDRATE_SCALING) , inv_duration #endif @@ -425,7 +423,7 @@ // Otherwise perform per-segment leveling #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) - const float fade_scaling_factor = planner.fade_scaling_factor_for_z(rtarget[Z_AXIS]); + const float fade_scaling_factor = planner.fade_scaling_factor_for_z(destination[Z_AXIS]); #endif // increment to first segment destination @@ -483,8 +481,7 @@ for (;;) { // for all segments within this mesh cell - if (--segments == 0) // if this is last segment, use rtarget for exact - COPY(raw, rtarget); + if (--segments == 0) COPY(raw, destination); // if this is last segment, use destination for exact const float z_cxcy = (z_cxy0 + z_cxym * cy) // interpolated mesh z height along cx at cy #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) @@ -494,7 +491,7 @@ const float z = raw[Z_AXIS]; raw[Z_AXIS] += z_cxcy; - planner.buffer_line(raw, feedrate, active_extruder, segment_xyz_mm + planner.buffer_line(raw, scaled_fr_mm_s, active_extruder, segment_xyz_mm #if ENABLED(SCARA_FEEDRATE_SCALING) , inv_duration #endif diff --git a/Marlin/src/feature/fwretract.cpp b/Marlin/src/feature/fwretract.cpp index dc9785c1d533..b4302cb17ad9 100644 --- a/Marlin/src/feature/fwretract.cpp +++ b/Marlin/src/feature/fwretract.cpp @@ -128,10 +128,7 @@ void FWRetract::retract(const bool retracting SERIAL_ECHOLNPAIR("current_hop ", current_hop); //*/ - const float old_feedrate_mm_s = feedrate_mm_s, - unscale_e = RECIPROCAL(planner.e_factor[active_extruder]), - unscale_fr = 100.0 / feedrate_percentage, // Disable feedrate scaling for retract moves - base_retract = ( + const float base_retract = ( (swapping ? settings.swap_retract_length : settings.retract_length) #if ENABLED(RETRACT_SYNC_MIXING) * (MIXING_STEPPERS) @@ -146,53 +143,53 @@ void FWRetract::retract(const bool retracting mixer.T(MIXER_AUTORETRACT_TOOL); #endif + const feedRate_t fr_max_z = planner.settings.max_feedrate_mm_s[Z_AXIS]; if (retracting) { // Retract by moving from a faux E position back to the current E position - feedrate_mm_s = ( - settings.retract_feedrate_mm_s * unscale_fr + current_retract[active_extruder] = base_retract; + prepare_internal_move_to_destination( // set_current_to_destination + settings.retract_feedrate_mm_s #if ENABLED(RETRACT_SYNC_MIXING) * (MIXING_STEPPERS) #endif ); - current_retract[active_extruder] = base_retract * unscale_e; - prepare_move_to_destination(); // set_current_to_destination // Is a Z hop set, and has the hop not yet been done? - if (settings.retract_zraise > 0.01 && !current_hop) { // Apply hop only once - current_hop += settings.retract_zraise; // Add to the hop total (again, only once) - feedrate_mm_s = planner.settings.max_feedrate_mm_s[Z_AXIS] * unscale_fr; // Maximum Z feedrate - prepare_move_to_destination(); // Raise up, set_current_to_destination + if (!current_hop && settings.retract_zraise > 0.01f) { // Apply hop only once + current_hop += settings.retract_zraise; // Add to the hop total (again, only once) + // Raise up, set_current_to_destination. Maximum Z feedrate + prepare_internal_move_to_destination(fr_max_z); } } else { // If a hop was done and Z hasn't changed, undo the Z hop if (current_hop) { - current_hop = 0.0; - feedrate_mm_s = planner.settings.max_feedrate_mm_s[Z_AXIS] * unscale_fr; // Z feedrate to max - prepare_move_to_destination(); // Lower Z, set_current_to_destination + current_hop = 0; + // Lower Z, set_current_to_destination. Maximum Z feedrate + prepare_internal_move_to_destination(fr_max_z); } const float extra_recover = swapping ? settings.swap_retract_recover_extra : settings.retract_recover_extra; - if (extra_recover != 0.0) { + if (extra_recover) { current_position[E_AXIS] -= extra_recover; // Adjust the current E position by the extra amount to recover sync_plan_position_e(); // Sync the planner position so the extra amount is recovered } - current_retract[active_extruder] = 0.0; - feedrate_mm_s = ( - (swapping ? settings.swap_retract_recover_feedrate_mm_s : settings.retract_recover_feedrate_mm_s) * unscale_fr + current_retract[active_extruder] = 0; + + const feedRate_t fr_mm_s = ( + (swapping ? settings.swap_retract_recover_feedrate_mm_s : settings.retract_recover_feedrate_mm_s) #if ENABLED(RETRACT_SYNC_MIXING) * (MIXING_STEPPERS) #endif ); - prepare_move_to_destination(); // Recover E, set_current_to_destination + prepare_internal_move_to_destination(fr_mm_s); // Recover E, set_current_to_destination } #if ENABLED(RETRACT_SYNC_MIXING) mixer.T(old_mixing_tool); // Restore original mixing tool #endif - feedrate_mm_s = old_feedrate_mm_s; // Restore original feedrate retracted[active_extruder] = retracting; // Active extruder now retracted / recovered // If swap retract/recover update the retracted_swap flag too diff --git a/Marlin/src/feature/fwretract.h b/Marlin/src/feature/fwretract.h index dacbec1fefcb..374667513de2 100644 --- a/Marlin/src/feature/fwretract.h +++ b/Marlin/src/feature/fwretract.h @@ -28,14 +28,14 @@ #include "../inc/MarlinConfigPre.h" typedef struct { - float retract_length, // M207 S - G10 Retract length - retract_feedrate_mm_s, // M207 F - G10 Retract feedrate - retract_zraise, // M207 Z - G10 Retract hop size - retract_recover_extra, // M208 S - G11 Recover length - retract_recover_feedrate_mm_s, // M208 F - G11 Recover feedrate - swap_retract_length, // M207 W - G10 Swap Retract length - swap_retract_recover_extra, // M208 W - G11 Swap Recover length - swap_retract_recover_feedrate_mm_s; // M208 R - G11 Swap Recover feedrate + float retract_length; // M207 S - G10 Retract length + feedRate_t retract_feedrate_mm_s; // M207 F - G10 Retract feedrate + float retract_zraise, // M207 Z - G10 Retract hop size + retract_recover_extra; // M208 S - G11 Recover length + feedRate_t retract_recover_feedrate_mm_s; // M208 F - G11 Recover feedrate + float swap_retract_length, // M207 W - G10 Swap Retract length + swap_retract_recover_extra; // M208 W - G11 Swap Recover length + feedRate_t swap_retract_recover_feedrate_mm_s; // M208 R - G11 Swap Recover feedrate } fwretract_settings_t; #if ENABLED(FWRETRACT) diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index 8c014af96d05..cf9f1838d408 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -122,7 +122,7 @@ static bool ensure_safe_temperature(const PauseMode mode=PAUSE_MODE_SAME) { return thermalManager.wait_for_hotend(active_extruder); } -void do_pause_e_move(const float &length, const float &fr_mm_s) { +void do_pause_e_move(const float &length, const feedRate_t &fr_mm_s) { #if HAS_FILAMENT_SENSOR runout.reset(); #endif @@ -648,16 +648,16 @@ void resume_print(const float &slow_load_length/*=0*/, const float &fast_load_le #endif // If resume_position is negative - if (resume_position[E_AXIS] < 0) do_pause_e_move(resume_position[E_AXIS], PAUSE_PARK_RETRACT_FEEDRATE); + if (resume_position[E_AXIS] < 0) do_pause_e_move(resume_position[E_AXIS], feedRate_t(PAUSE_PARK_RETRACT_FEEDRATE)); // Move XY to starting position, then Z - do_blocking_move_to_xy(resume_position[X_AXIS], resume_position[Y_AXIS], NOZZLE_PARK_XY_FEEDRATE); + do_blocking_move_to_xy(resume_position[X_AXIS], resume_position[Y_AXIS], feedRate_t(NOZZLE_PARK_XY_FEEDRATE)); // Move Z_AXIS to saved position - do_blocking_move_to_z(resume_position[Z_AXIS], NOZZLE_PARK_Z_FEEDRATE); + do_blocking_move_to_z(resume_position[Z_AXIS], feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); #if ADVANCED_PAUSE_RESUME_PRIME != 0 - do_pause_e_move(ADVANCED_PAUSE_RESUME_PRIME, ADVANCED_PAUSE_PURGE_FEEDRATE); + do_pause_e_move(ADVANCED_PAUSE_RESUME_PRIME, feedRate_t(ADVANCED_PAUSE_PURGE_FEEDRATE)); #endif // Now all extrusion positions are resumed and ready to be confirmed diff --git a/Marlin/src/feature/pause.h b/Marlin/src/feature/pause.h index 77cbe6b3f513..deb19f46a8dc 100644 --- a/Marlin/src/feature/pause.h +++ b/Marlin/src/feature/pause.h @@ -81,7 +81,7 @@ extern uint8_t did_pause_print; #define DXC_PASS #endif -void do_pause_e_move(const float &length, const float &fr_mm_s); +void do_pause_e_move(const float &length, const feedRate_t &fr_mm_s); bool pause_print(const float &retract, const point_t &park_point, const float &unload_length=0, const bool show_lcd=false DXC_PARAMS); diff --git a/Marlin/src/feature/prusa_MMU2/mmu2.cpp b/Marlin/src/feature/prusa_MMU2/mmu2.cpp index 37374d6e50e8..604138896d92 100644 --- a/Marlin/src/feature/prusa_MMU2/mmu2.cpp +++ b/Marlin/src/feature/prusa_MMU2/mmu2.cpp @@ -102,8 +102,8 @@ char MMU2::rx_buffer[16], MMU2::tx_buffer[16]; #if HAS_LCD_MENU && ENABLED(MMU2_MENUS) struct E_Step { - float extrude; //!< extrude distance in mm - float feedRate; //!< feed rate in mm/s + float extrude; //!< extrude distance in mm + feedRate_t feedRate; //!< feed rate in mm/s }; static constexpr E_Step ramming_sequence[] PROGMEM = { MMU2_RAMMING_SEQUENCE }; @@ -606,10 +606,10 @@ void MMU2::manage_response(const bool move_axes, const bool turn_off_nozzle) { BUZZ(200, 404); // Move XY to starting position, then Z - do_blocking_move_to_xy(resume_position[X_AXIS], resume_position[Y_AXIS], NOZZLE_PARK_XY_FEEDRATE); + do_blocking_move_to_xy(resume_position[X_AXIS], resume_position[Y_AXIS], feedRate_t(NOZZLE_PARK_XY_FEEDRATE)); // Move Z_AXIS to saved position - do_blocking_move_to_z(resume_position[Z_AXIS], NOZZLE_PARK_Z_FEEDRATE); + do_blocking_move_to_z(resume_position[Z_AXIS], feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); } else { BUZZ(200, 404); @@ -783,15 +783,14 @@ void MMU2::filament_runout() { const E_Step* step = sequence; for (uint8_t i = 0; i < steps; i++) { - const float es = pgm_read_float(&(step->extrude)), - fr = pgm_read_float(&(step->feedRate)); + const float es = pgm_read_float(&(step->extrude)); + const feedRate_t fr_mm_m = pgm_read_float(&(step->feedRate)); DEBUG_ECHO_START(); - DEBUG_ECHOLNPAIR("E step ", es, "/", fr); + DEBUG_ECHOLNPAIR("E step ", es, "/", fr_mm_m); current_position[E_AXIS] += es; - planner.buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], - current_position[E_AXIS], MMM_TO_MMS(fr), active_extruder); + line_to_current_position(MMM_TO_MMS(fr_mm_m)); planner.synchronize(); step++; diff --git a/Marlin/src/gcode/bedlevel/G26.cpp b/Marlin/src/gcode/bedlevel/G26.cpp index 1b8b5be5313e..f98ffc88cb01 100644 --- a/Marlin/src/gcode/bedlevel/G26.cpp +++ b/Marlin/src/gcode/bedlevel/G26.cpp @@ -216,41 +216,32 @@ mesh_index_pair find_closest_circle_to_print(const float &X, const float &Y) { return return_val; } -void G26_line_to_destination(const float &feed_rate) { - const float save_feedrate = feedrate_mm_s; - feedrate_mm_s = feed_rate; - prepare_move_to_destination(); // will ultimately call ubl.line_to_destination_cartesian or ubl.prepare_linear_move_to for UBL_SEGMENTED - feedrate_mm_s = save_feedrate; -} - void move_to(const float &rx, const float &ry, const float &z, const float &e_delta) { - float feed_value; static float last_z = -999.99; bool has_xy_component = (rx != current_position[X_AXIS] || ry != current_position[Y_AXIS]); // Check if X or Y is involved in the movement. if (z != last_z) { last_z = z; - feed_value = planner.settings.max_feedrate_mm_s[Z_AXIS]/(2.0); // Base the feed rate off of the configured Z_AXIS feed rate + const feedRate_t feed_value = planner.settings.max_feedrate_mm_s[Z_AXIS] * 0.5f; // Use half of the Z_AXIS max feed rate destination[X_AXIS] = current_position[X_AXIS]; destination[Y_AXIS] = current_position[Y_AXIS]; destination[Z_AXIS] = z; // We know the last_z!=z or we wouldn't be in this block of code. destination[E_AXIS] = current_position[E_AXIS]; - G26_line_to_destination(feed_value); + prepare_internal_move_to_destination(feed_value); set_destination_from_current(); } - // Check if X or Y is involved in the movement. - // Yes: a 'normal' movement. No: a retract() or recover() - feed_value = has_xy_component ? G26_XY_FEEDRATE : planner.settings.max_feedrate_mm_s[E_AXIS] / 1.5; + // If X or Y is involved do a 'normal' move. Otherwise retract/recover/hop. + const feedRate_t feed_value = has_xy_component ? feedRate_t(G26_XY_FEEDRATE) : planner.settings.max_feedrate_mm_s[E_AXIS] * 0.666f; destination[X_AXIS] = rx; destination[Y_AXIS] = ry; destination[E_AXIS] += e_delta; - G26_line_to_destination(feed_value); + prepare_internal_move_to_destination(feed_value); set_destination_from_current(); } @@ -433,6 +424,7 @@ inline bool turn_on_heaters() { */ inline bool prime_nozzle() { + const feedRate_t fr_slow_e = planner.settings.max_feedrate_mm_s[E_AXIS] / 15.0f; #if HAS_LCD_MENU #if ENABLED(PREVENT_LENGTHY_EXTRUDE) float Total_Prime = 0.0; @@ -455,7 +447,7 @@ inline bool prime_nozzle() { Total_Prime += 0.25; if (Total_Prime >= EXTRUDE_MAXLENGTH) return G26_ERR; #endif - G26_line_to_destination(planner.settings.max_feedrate_mm_s[E_AXIS] / 15.0); + prepare_internal_move_to_destination(fr_slow_e); set_destination_from_current(); planner.synchronize(); // Without this synchronize, the purge is more consistent, // but because the planner has a buffer, we won't be able @@ -478,7 +470,7 @@ inline bool prime_nozzle() { #endif set_destination_from_current(); destination[E_AXIS] += g26_prime_length; - G26_line_to_destination(planner.settings.max_feedrate_mm_s[E_AXIS] / 15.0); + prepare_internal_move_to_destination(fr_slow_e); set_destination_from_current(); retract_filament(destination); } @@ -781,12 +773,13 @@ void GcodeSuite::G26() { move_to(sx, sy, g26_layer_height, 0.0); // Get to the starting point with no extrusion / un-Z bump recover_filament(destination); - const float save_feedrate = feedrate_mm_s; - feedrate_mm_s = PLANNER_XY_FEEDRATE() / 10.0; + const feedRate_t old_feedrate = feedrate_mm_s; + feedrate_mm_s = PLANNER_XY_FEEDRATE() * 0.1f; plan_arc(endpoint, arc_offset, false); // Draw a counter-clockwise arc - feedrate_mm_s = save_feedrate; + feedrate_mm_s = old_feedrate; set_destination_from_current(); + #if HAS_LCD_MENU if (user_canceled()) goto LEAVE; // Check if the user wants to stop the Mesh Validation #endif diff --git a/Marlin/src/gcode/bedlevel/G42.cpp b/Marlin/src/gcode/bedlevel/G42.cpp index 7f0ed12a2565..55bc82317c3a 100644 --- a/Marlin/src/gcode/bedlevel/G42.cpp +++ b/Marlin/src/gcode/bedlevel/G42.cpp @@ -45,8 +45,10 @@ void GcodeSuite::G42() { } set_destination_from_current(); + if (hasI) destination[X_AXIS] = _GET_MESH_X(ix); if (hasJ) destination[Y_AXIS] = _GET_MESH_Y(iy); + #if HAS_BED_PROBE if (parser.boolval('P')) { if (hasI) destination[X_AXIS] -= probe_offset[X_AXIS]; @@ -54,14 +56,14 @@ void GcodeSuite::G42() { } #endif - const float fval = parser.linearval('F'); - if (fval > 0.0) feedrate_mm_s = MMM_TO_MMS(fval); + const feedRate_t fval = parser.linearval('F'), + fr_mm_s = fval > 0 ? MMM_TO_MMS(fval) : 0.0f; // SCARA kinematic has "safe" XY raw moves #if IS_SCARA - prepare_uninterpolated_move_to_destination(); + prepare_internal_fast_move_to_destination(fr_mm_s); #else - prepare_move_to_destination(); + prepare_internal_move_to_destination(fr_mm_s); #endif } } diff --git a/Marlin/src/gcode/bedlevel/mbl/G29.cpp b/Marlin/src/gcode/bedlevel/mbl/G29.cpp index b0f612442263..eee542a6f56d 100644 --- a/Marlin/src/gcode/bedlevel/mbl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/mbl/G29.cpp @@ -143,8 +143,7 @@ void GcodeSuite::G29() { #if ENABLED(MESH_G28_REST_ORIGIN) current_position[Z_AXIS] = 0; - set_destination_from_current(); - buffer_line_to_destination(homing_feedrate(Z_AXIS)); + line_to_current_position(homing_feedrate(Z_AXIS)); planner.synchronize(); #endif diff --git a/Marlin/src/gcode/calibrate/G425.cpp b/Marlin/src/gcode/calibrate/G425.cpp index 93dbde669a74..5c4272346f91 100644 --- a/Marlin/src/gcode/calibrate/G425.cpp +++ b/Marlin/src/gcode/calibrate/G425.cpp @@ -171,17 +171,16 @@ inline bool read_calibration_pin() { * fast in - Fast vs. precise measurement */ float measuring_movement(const AxisEnum axis, const int dir, const bool stop_state, const bool fast) { - const float step = fast ? 0.25 : CALIBRATION_MEASUREMENT_RESOLUTION; - const float mms = MMM_TO_MMS(fast ? CALIBRATION_FEEDRATE_FAST : CALIBRATION_FEEDRATE_SLOW); - const float limit = fast ? 50 : 5; + const float step = fast ? 0.25 : CALIBRATION_MEASUREMENT_RESOLUTION; + const feedRate_t mms = fast ? MMM_TO_MMS(CALIBRATION_FEEDRATE_FAST) : MMM_TO_MMS(CALIBRATION_FEEDRATE_SLOW); + const float limit = fast ? 50 : 5; set_destination_from_current(); for (float travel = 0; travel < limit; travel += step) { destination[axis] += dir * step; do_blocking_move_to(destination, mms); planner.synchronize(); - if (read_calibration_pin() == stop_state) - break; + if (read_calibration_pin() == stop_state) break; } return destination[axis]; } diff --git a/Marlin/src/gcode/feature/L6470/M916-918.cpp b/Marlin/src/gcode/feature/L6470/M916-918.cpp index b756c6cf88e5..3b62a0f45efc 100644 --- a/Marlin/src/gcode/feature/L6470/M916-918.cpp +++ b/Marlin/src/gcode/feature/L6470/M916-918.cpp @@ -32,7 +32,7 @@ #define DEBUG_OUT ENABLED(L6470_CHITCHAT) #include "../../../core/debug_out.h" -static void jiggle_axis(const char axis_char, const float &min, const float &max, const float &rate) { +static void jiggle_axis(const char axis_char, const float &min, const float &max, const feedRate_t &fr_mm_m) { char gcode_string[30], str1[11], str2[11]; // Turn the motor(s) both directions @@ -84,7 +84,7 @@ void GcodeSuite::M916() { uint8_t driver_count = 1; float position_max; float position_min; - float final_feedrate; + feedRate_t final_fr_mm_m; uint8_t kval_hold; uint8_t ocd_th_val = 0; uint8_t stall_th_val = 0; @@ -93,10 +93,10 @@ void GcodeSuite::M916() { uint8_t j; // general purpose counter - if (L6470.get_user_input(driver_count, axis_index, axis_mon, position_max, position_min, final_feedrate, kval_hold, over_current_flag, ocd_th_val, stall_th_val, over_current_threshold)) + if (L6470.get_user_input(driver_count, axis_index, axis_mon, position_max, position_min, final_fr_mm_m, kval_hold, over_current_flag, ocd_th_val, stall_th_val, over_current_threshold)) return; // quit if invalid user input - DEBUG_ECHOLNPAIR("feedrate = ", final_feedrate); + DEBUG_ECHOLNPAIR("feedrate = ", final_fr_mm_m); planner.synchronize(); // Wait for moves to finish @@ -115,7 +115,7 @@ void GcodeSuite::M916() { L6470.set_param(axis_index[j], L6470_KVAL_HOLD, kval_hold); // Turn the motor(s) both directions - jiggle_axis(axis_mon[0][0], position_min, position_max, final_feedrate); + jiggle_axis(axis_mon[0][0], position_min, position_max, final_fr_mm_m); status_composite = 0; // clear out the old bits @@ -190,7 +190,7 @@ void GcodeSuite::M917() { uint8_t driver_count = 1; float position_max; float position_min; - float final_feedrate; + feedRate_t final_fr_mm_m; uint8_t kval_hold; uint8_t ocd_th_val = 0; uint8_t stall_th_val = 0; @@ -199,10 +199,10 @@ void GcodeSuite::M917() { uint8_t j; // general purpose counter - if (L6470.get_user_input(driver_count, axis_index, axis_mon, position_max, position_min, final_feedrate, kval_hold, over_current_flag, ocd_th_val, stall_th_val, over_current_threshold)) + if (L6470.get_user_input(driver_count, axis_index, axis_mon, position_max, position_min, final_fr_mm_m, kval_hold, over_current_flag, ocd_th_val, stall_th_val, over_current_threshold)) return; // quit if invalid user input - DEBUG_ECHOLNPAIR("feedrate = ", final_feedrate); + DEBUG_ECHOLNPAIR("feedrate = ", final_fr_mm_m); planner.synchronize(); // Wait for moves to finish for (j = 0; j < driver_count; j++) @@ -225,7 +225,7 @@ void GcodeSuite::M917() { DEBUG_ECHOPAIR("STALL threshold : ", (stall_th_val + 1) * 31.25); DEBUG_ECHOLNPAIR(" OCD threshold : ", (ocd_th_val + 1) * 375); - jiggle_axis(axis_mon[0][0], position_min, position_max, final_feedrate); + jiggle_axis(axis_mon[0][0], position_min, position_max, final_fr_mm_m); status_composite = 0; // clear out the old bits @@ -452,7 +452,7 @@ void GcodeSuite::M918() { uint16_t axis_status[3]; uint8_t driver_count = 1; float position_max, position_min; - float final_feedrate; + feedRate_t final_fr_mm_m; uint8_t kval_hold; uint8_t ocd_th_val = 0; uint8_t stall_th_val = 0; @@ -461,7 +461,7 @@ void GcodeSuite::M918() { uint8_t j; // general purpose counter - if (L6470.get_user_input(driver_count, axis_index, axis_mon, position_max, position_min, final_feedrate, kval_hold, over_current_flag, ocd_th_val, stall_th_val, over_current_threshold)) + if (L6470.get_user_input(driver_count, axis_index, axis_mon, position_max, position_min, final_fr_mm_m, kval_hold, over_current_flag, ocd_th_val, stall_th_val, over_current_threshold)) return; // quit if invalid user input uint8_t m_steps = parser.byteval('M'); @@ -489,10 +489,7 @@ void GcodeSuite::M918() { for (j = 0; j < driver_count; j++) L6470.set_param(axis_index[j], L6470_STEP_MODE, m_bits); // set microsteps - DEBUG_ECHOLNPAIR("target (maximum) feedrate = ",final_feedrate); - - float feedrate_inc = final_feedrate / 10, // start at 1/10 of max & go up by 1/10 per step) - current_feedrate = 0; + DEBUG_ECHOLNPAIR("target (maximum) feedrate = ", final_fr_mm_m); planner.synchronize(); // Wait for moves to finish @@ -502,18 +499,19 @@ void GcodeSuite::M918() { uint16_t status_composite = 0; DEBUG_ECHOLNPGM(".\n.\n."); // Make the feedrate prints easier to see - do { - current_feedrate += feedrate_inc; - DEBUG_ECHOLNPAIR("...feedrate = ", current_feedrate); + constexpr uint8_t iterations = 10; + for (uint8_t i = 1; i <= iterations; i++) { + const feedRate_t fr_mm_m = i * final_fr_mm_m / iterations; + DEBUG_ECHOLNPAIR("...feedrate = ", fr_mm_m); - jiggle_axis(axis_mon[0][0], position_min, position_max, current_feedrate); + jiggle_axis(axis_mon[0][0], position_min, position_max, fr_mm_m); for (j = 0; j < driver_count; j++) { axis_status[j] = (~L6470.get_status(axis_index[j])) & 0x0800; // bits of interest are all active low status_composite |= axis_status[j]; } if (status_composite) break; // quit if any errors flags are raised - } while (current_feedrate < final_feedrate * 0.99); + } DEBUG_ECHOPGM("Completed with errors"); if (status_composite) { diff --git a/Marlin/src/gcode/feature/camera/M240.cpp b/Marlin/src/gcode/feature/camera/M240.cpp index b4234cb823e8..3144126fe5c8 100644 --- a/Marlin/src/gcode/feature/camera/M240.cpp +++ b/Marlin/src/gcode/feature/camera/M240.cpp @@ -43,7 +43,7 @@ #endif #ifdef PHOTO_RETRACT_MM - inline void e_move_m240(const float length, const float fr_mm_s) { + inline void e_move_m240(const float length, const feedRate_t &fr_mm_s) { if (length && thermalManager.hotEnoughToExtrude(active_extruder)) { #if ENABLED(ADVANCED_PAUSE_FEATURE) do_pause_e_move(length, fr_mm_s); @@ -104,7 +104,8 @@ void GcodeSuite::M240() { }; #ifdef PHOTO_RETRACT_MM - constexpr float rfr = (MMS_TO_MMM( + const float rval = parser.seenval('R') ? parser.value_linear_units() : _PHOTO_RETRACT_MM; + feedRate_t sval = ( #if ENABLED(ADVANCED_PAUSE_FEATURE) PAUSE_PARK_RETRACT_FEEDRATE #elif ENABLED(FWRETRACT) @@ -112,13 +113,12 @@ void GcodeSuite::M240() { #else 45 #endif - )); - const float rval = parser.seenval('R') ? parser.value_linear_units() : _PHOTO_RETRACT_MM, - sval = parser.seenval('S') ? MMM_TO_MMS(parser.value_feedrate()) : rfr; + ); + if (parser.seenval('S')) sval = parser.value_feedrate(); e_move_m240(-rval, sval); #endif - float fr_mm_s = MMM_TO_MMS(parser.linearval('F')); + feedRate_t fr_mm_s = MMM_TO_MMS(parser.linearval('F')); if (fr_mm_s) NOLESS(fr_mm_s, 10.0f); constexpr float photo_position[XYZ] = PHOTO_POSITION; diff --git a/Marlin/src/gcode/feature/pause/M701_M702.cpp b/Marlin/src/gcode/feature/pause/M701_M702.cpp index 109db545a44c..6add2ebfaec2 100644 --- a/Marlin/src/gcode/feature/pause/M701_M702.cpp +++ b/Marlin/src/gcode/feature/pause/M701_M702.cpp @@ -97,7 +97,7 @@ void GcodeSuite::M701() { // Lift Z axis if (park_point.z > 0) - do_blocking_move_to_z(_MIN(current_position[Z_AXIS] + park_point.z, Z_MAX_POS), NOZZLE_PARK_Z_FEEDRATE); + do_blocking_move_to_z(_MIN(current_position[Z_AXIS] + park_point.z, Z_MAX_POS), feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); // Load filament #if ENABLED(PRUSA_MMU2) @@ -116,7 +116,7 @@ void GcodeSuite::M701() { // Restore Z axis if (park_point.z > 0) - do_blocking_move_to_z(_MAX(current_position[Z_AXIS] - park_point.z, 0), NOZZLE_PARK_Z_FEEDRATE); + do_blocking_move_to_z(_MAX(current_position[Z_AXIS] - park_point.z, 0), feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); #if EXTRUDERS > 1 && DISABLED(PRUSA_MMU2) // Restore toolhead if it was changed @@ -196,7 +196,7 @@ void GcodeSuite::M702() { // Lift Z axis if (park_point.z > 0) - do_blocking_move_to_z(_MIN(current_position[Z_AXIS] + park_point.z, Z_MAX_POS), NOZZLE_PARK_Z_FEEDRATE); + do_blocking_move_to_z(_MIN(current_position[Z_AXIS] + park_point.z, Z_MAX_POS), feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); // Unload filament #if ENABLED(PRUSA_MMU2) @@ -226,7 +226,7 @@ void GcodeSuite::M702() { // Restore Z axis if (park_point.z > 0) - do_blocking_move_to_z(_MAX(current_position[Z_AXIS] - park_point.z, 0), NOZZLE_PARK_Z_FEEDRATE); + do_blocking_move_to_z(_MAX(current_position[Z_AXIS] - park_point.z, 0), feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); #if EXTRUDERS > 1 && DISABLED(PRUSA_MMU2) // Restore toolhead if it was changed diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index 61b75753e7a4..f542f842ce21 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -129,7 +129,7 @@ void GcodeSuite::get_destination_from_command() { #endif if (parser.linearval('F') > 0) - feedrate_mm_s = MMM_TO_MMS(parser.value_feedrate()); + feedrate_mm_s = parser.value_feedrate(); #if ENABLED(PRINTCOUNTER) if (!DEBUGGING(DRYRUN)) diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index 2282da57ae6d..f871d6d216a5 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -370,7 +370,7 @@ class GcodeSuite { static void G0_G1( #if IS_SCARA || defined(G0_FEEDRATE) - bool fast_move=false + const bool fast_move=false #endif ); diff --git a/Marlin/src/gcode/motion/G0_G1.cpp b/Marlin/src/gcode/motion/G0_G1.cpp index 82f9bdd67d37..fed70f553e17 100644 --- a/Marlin/src/gcode/motion/G0_G1.cpp +++ b/Marlin/src/gcode/motion/G0_G1.cpp @@ -38,7 +38,7 @@ extern float destination[XYZE]; #if ENABLED(VARIABLE_G0_FEEDRATE) - float saved_g0_feedrate_mm_s = MMM_TO_MMS(G0_FEEDRATE); + feedRate_t fast_move_feedrate = MMM_TO_MMS(G0_FEEDRATE); #endif /** @@ -46,7 +46,7 @@ extern float destination[XYZE]; */ void GcodeSuite::G0_G1( #if IS_SCARA || defined(G0_FEEDRATE) - bool fast_move/*=false*/ + const bool fast_move/*=false*/ #endif ) { @@ -60,23 +60,23 @@ void GcodeSuite::G0_G1( ) { #ifdef G0_FEEDRATE - float saved_feedrate_mm_s; + feedRate_t old_feedrate; #if ENABLED(VARIABLE_G0_FEEDRATE) if (fast_move) { - saved_feedrate_mm_s = feedrate_mm_s; // Back up the (old) motion mode feedrate - feedrate_mm_s = saved_g0_feedrate_mm_s; // Get G0 feedrate from last usage + old_feedrate = feedrate_mm_s; // Back up the (old) motion mode feedrate + feedrate_mm_s = fast_move_feedrate; // Get G0 feedrate from last usage } #endif #endif - get_destination_from_command(); // For X Y Z E F + get_destination_from_command(); // Process X Y Z E F parameters #ifdef G0_FEEDRATE if (fast_move) { #if ENABLED(VARIABLE_G0_FEEDRATE) - saved_g0_feedrate_mm_s = feedrate_mm_s; // Save feedrate for the next G0 + fast_move_feedrate = feedrate_mm_s; // Save feedrate for the next G0 #else - saved_feedrate_mm_s = feedrate_mm_s; // Back up the (new) motion mode feedrate + old_feedrate = feedrate_mm_s; // Back up the (new) motion mode feedrate feedrate_mm_s = MMM_TO_MMS(G0_FEEDRATE); // Get the fixed G0 feedrate #endif } @@ -100,14 +100,14 @@ void GcodeSuite::G0_G1( #endif // FWRETRACT #if IS_SCARA - fast_move ? prepare_uninterpolated_move_to_destination() : prepare_move_to_destination(); + fast_move ? prepare_fast_move_to_destination() : prepare_move_to_destination(); #else prepare_move_to_destination(); #endif #ifdef G0_FEEDRATE // Restore the motion mode feedrate - if (fast_move) feedrate_mm_s = saved_feedrate_mm_s; + if (fast_move) feedrate_mm_s = old_feedrate; #endif #if ENABLED(NANODLP_Z_SYNC) diff --git a/Marlin/src/gcode/motion/G2_G3.cpp b/Marlin/src/gcode/motion/G2_G3.cpp index 09762a995c8e..2a713a9f4170 100644 --- a/Marlin/src/gcode/motion/G2_G3.cpp +++ b/Marlin/src/gcode/motion/G2_G3.cpp @@ -146,10 +146,10 @@ void plan_arc( // Initialize the extruder axis raw[E_AXIS] = current_position[E_AXIS]; - const float fr_mm_s = MMS_SCALED(feedrate_mm_s); + const feedRate_t scaled_fr_mm_s = MMS_SCALED(feedrate_mm_s); #if ENABLED(SCARA_FEEDRATE_SCALING) - const float inv_duration = fr_mm_s / MM_PER_ARC_SEGMENT; + const float inv_duration = scaled_fr_mm_s / MM_PER_ARC_SEGMENT; #endif millis_t next_idle_ms = millis() + 200UL; @@ -206,7 +206,7 @@ void plan_arc( planner.apply_leveling(raw); #endif - if (!planner.buffer_line(raw, fr_mm_s, active_extruder, MM_PER_ARC_SEGMENT + if (!planner.buffer_line(raw, scaled_fr_mm_s, active_extruder, MM_PER_ARC_SEGMENT #if ENABLED(SCARA_FEEDRATE_SCALING) , inv_duration #endif @@ -226,7 +226,7 @@ void plan_arc( planner.apply_leveling(raw); #endif - planner.buffer_line(raw, fr_mm_s, active_extruder, MM_PER_ARC_SEGMENT + planner.buffer_line(raw, scaled_fr_mm_s, active_extruder, MM_PER_ARC_SEGMENT #if ENABLED(SCARA_FEEDRATE_SCALING) , inv_duration #endif diff --git a/Marlin/src/gcode/parser.h b/Marlin/src/gcode/parser.h index 4f5128bb9c3d..a4fd629b1626 100644 --- a/Marlin/src/gcode/parser.h +++ b/Marlin/src/gcode/parser.h @@ -364,7 +364,7 @@ class GCodeParser { #endif // !TEMPERATURE_UNITS_SUPPORT - static inline float value_feedrate() { return value_linear_units(); } + static inline feedRate_t value_feedrate() { return MMM_TO_MMS(value_linear_units()); } void unknown_command_error(); diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp index bd32d3a8fff7..17d9eefbcae9 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp @@ -289,7 +289,7 @@ bool StatusScreen::onTouchEnd(uint8_t tag) { bool StatusScreen::onTouchHeld(uint8_t tag) { if (tag >= 1 && tag <= 4 && !jog_xy) return false; - const float s = min_speed + (fine_motion ? 0 : (max_speed - min_speed) * sq(increment)); + const float s = min_speed + (fine_motion ? 0 : (max_speed - min_speed) * sq(increment)); switch (tag) { case 1: jog(-s, 0, 0); break; case 2: jog( s, 0, 0); break; @@ -301,7 +301,7 @@ bool StatusScreen::onTouchHeld(uint8_t tag) { case 8: { if (ExtUI::isMoving()) return false; - const float feedrate = emin_speed + (fine_motion ? 0 : (emax_speed - emin_speed) * sq(increment)); + const feedRate_t feedrate = emin_speed + (fine_motion ? 0 : (emax_speed - emin_speed) * sq(increment)); const float increment = 0.25 * feedrate * (tag == 7 ? -1 : 1); MoveAxisScreen::setManualFeedrate(E0, feedrate); UI_INCREMENT(AxisPosition_mm, E0); diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp index 4affcb6d7de9..0b80def5c9ec 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.cpp +++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp @@ -338,6 +338,8 @@ namespace ExtUI { return pos; } + constexpr feedRate_t manual_feedrate_mm_m[XYZE] = MANUAL_FEEDRATE; + void setAxisPosition_mm(const float position, const axis_t axis) { // Start with no limits to movement float min = current_position[axis] - 1000, @@ -382,23 +384,15 @@ namespace ExtUI { } #endif - constexpr float manual_feedrate[XYZE] = MANUAL_FEEDRATE; - setFeedrate_mm_s(MMM_TO_MMS(manual_feedrate[axis])); - - set_destination_from_current(); - destination[axis] = constrain(position, min, max); - prepare_move_to_destination(); + current_position[axis] = constrain(position, min, max); + line_to_current_position(MMM_TO_MMS(manual_feedrate_mm_m[axis])); } void setAxisPosition_mm(const float position, const extruder_t extruder) { setActiveTool(extruder, true); - constexpr float manual_feedrate[XYZE] = MANUAL_FEEDRATE; - setFeedrate_mm_s(MMM_TO_MMS(manual_feedrate[E_AXIS])); - - set_destination_from_current(); - destination[E_AXIS] = position; - prepare_move_to_destination(); + current_position[E_AXIS] = position; + line_to_current_position(MMM_TO_MMS(manual_feedrate_mm_m[E_AXIS])); } void setActiveTool(const extruder_t extruder, bool no_move) { @@ -581,20 +575,20 @@ namespace ExtUI { planner.settings.axis_steps_per_mm[E_AXIS_N(axis - E0)] = value; } - float getAxisMaxFeedrate_mm_s(const axis_t axis) { + feedRate_t getAxisMaxFeedrate_mm_s(const axis_t axis) { return planner.settings.max_feedrate_mm_s[axis]; } - float getAxisMaxFeedrate_mm_s(const extruder_t extruder) { + feedRate_t getAxisMaxFeedrate_mm_s(const extruder_t extruder) { UNUSED_E(extruder); return planner.settings.max_feedrate_mm_s[E_AXIS_N(axis - E0)]; } - void setAxisMaxFeedrate_mm_s(const float value, const axis_t axis) { + void setAxisMaxFeedrate_mm_s(const feedRate_t value, const axis_t axis) { planner.settings.max_feedrate_mm_s[axis] = value; } - void setAxisMaxFeedrate_mm_s(const float value, const extruder_t extruder) { + void setAxisMaxFeedrate_mm_s(const feedRate_t value, const extruder_t extruder) { UNUSED_E(extruder); planner.settings.max_feedrate_mm_s[E_AXIS_N(axis - E0)] = value; } @@ -670,15 +664,15 @@ namespace ExtUI { } #endif - float getFeedrate_mm_s() { return feedrate_mm_s; } - float getMinFeedrate_mm_s() { return planner.settings.min_feedrate_mm_s; } - float getMinTravelFeedrate_mm_s() { return planner.settings.min_travel_feedrate_mm_s; } + feedRate_t getFeedrate_mm_s() { return feedrate_mm_s; } + feedRate_t getMinFeedrate_mm_s() { return planner.settings.min_feedrate_mm_s; } + feedRate_t getMinTravelFeedrate_mm_s() { return planner.settings.min_travel_feedrate_mm_s; } float getPrintingAcceleration_mm_s2() { return planner.settings.acceleration; } float getRetractAcceleration_mm_s2() { return planner.settings.retract_acceleration; } float getTravelAcceleration_mm_s2() { return planner.settings.travel_acceleration; } - void setFeedrate_mm_s(const float fr) { feedrate_mm_s = fr; } - void setMinFeedrate_mm_s(const float fr) { planner.settings.min_feedrate_mm_s = fr; } - void setMinTravelFeedrate_mm_s(const float fr) { planner.settings.min_travel_feedrate_mm_s = fr; } + void setFeedrate_mm_s(const feedRate_t fr) { feedrate_mm_s = fr; } + void setMinFeedrate_mm_s(const feedRate_t fr) { planner.settings.min_feedrate_mm_s = fr; } + void setMinTravelFeedrate_mm_s(const feedRate_t fr) { planner.settings.min_travel_feedrate_mm_s = fr; } void setPrintingAcceleration_mm_s2(const float acc) { planner.settings.acceleration = acc; } void setRetractAcceleration_mm_s2(const float acc) { planner.settings.retract_acceleration = acc; } void setTravelAcceleration_mm_s2(const float acc) { planner.settings.travel_acceleration = acc; } diff --git a/Marlin/src/lcd/extensible_ui/ui_api.h b/Marlin/src/lcd/extensible_ui/ui_api.h index 60f17b62c728..38cd19b579e4 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.h +++ b/Marlin/src/lcd/extensible_ui/ui_api.h @@ -116,12 +116,12 @@ namespace ExtUI { float getAxisPosition_mm(const extruder_t); float getAxisSteps_per_mm(const axis_t); float getAxisSteps_per_mm(const extruder_t); - float getAxisMaxFeedrate_mm_s(const axis_t); - float getAxisMaxFeedrate_mm_s(const extruder_t); + feedRate_t getAxisMaxFeedrate_mm_s(const axis_t); + feedRate_t getAxisMaxFeedrate_mm_s(const extruder_t); float getAxisMaxAcceleration_mm_s2(const axis_t); float getAxisMaxAcceleration_mm_s2(const extruder_t); - float getMinFeedrate_mm_s(); - float getMinTravelFeedrate_mm_s(); + feedRate_t getMinFeedrate_mm_s(); + feedRate_t getMinTravelFeedrate_mm_s(); float getPrintingAcceleration_mm_s2(); float getRetractAcceleration_mm_s2(); float getTravelAcceleration_mm_s2(); @@ -160,13 +160,13 @@ namespace ExtUI { void setAxisPosition_mm(const float, const extruder_t); void setAxisSteps_per_mm(const float, const axis_t); void setAxisSteps_per_mm(const float, const extruder_t); - void setAxisMaxFeedrate_mm_s(const float, const axis_t); - void setAxisMaxFeedrate_mm_s(const float, const extruder_t); + void setAxisMaxFeedrate_mm_s(const feedRate_t, const axis_t); + void setAxisMaxFeedrate_mm_s(const feedRate_t, const extruder_t); void setAxisMaxAcceleration_mm_s2(const float, const axis_t); void setAxisMaxAcceleration_mm_s2(const float, const extruder_t); - void setFeedrate_mm_s(const float); - void setMinFeedrate_mm_s(const float); - void setMinTravelFeedrate_mm_s(const float); + void setFeedrate_mm_s(const feedRate_t); + void setMinFeedrate_mm_s(const feedRate_t); + void setMinTravelFeedrate_mm_s(const feedRate_t); void setPrintingAcceleration_mm_s2(const float); void setRetractAcceleration_mm_s2(const float); void setTravelAcceleration_mm_s2(const float); diff --git a/Marlin/src/lcd/menu/menu_ubl.cpp b/Marlin/src/lcd/menu/menu_ubl.cpp index 79b0e1421e5f..2364a818aeb1 100644 --- a/Marlin/src/lcd/menu/menu_ubl.cpp +++ b/Marlin/src/lcd/menu/menu_ubl.cpp @@ -430,21 +430,21 @@ void _lcd_ubl_map_lcd_edit_cmd() { * UBL LCD Map Movement */ void ubl_map_move_to_xy() { - REMEMBER(fr, feedrate_mm_s, MMM_TO_MMS(XY_PROBE_SPEED)); + const feedRate_t fr_mm_s = MMM_TO_MMS(XY_PROBE_SPEED); - set_destination_from_current(); // sync destination at the start + set_destination_from_current(); // sync destination at the start #if ENABLED(DELTA) if (current_position[Z_AXIS] > delta_clip_start_height) { destination[Z_AXIS] = delta_clip_start_height; - prepare_move_to_destination(); + prepare_internal_move_to_destination(fr_mm_s); } #endif destination[X_AXIS] = pgm_read_float(&ubl._mesh_index_to_xpos[x_plot]); destination[Y_AXIS] = pgm_read_float(&ubl._mesh_index_to_ypos[y_plot]); - prepare_move_to_destination(); + prepare_internal_move_to_destination(fr_mm_s); } /** diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp index 79f6baf4798a..390e0f17fad5 100644 --- a/Marlin/src/lcd/ultralcd.cpp +++ b/Marlin/src/lcd/ultralcd.cpp @@ -662,11 +662,9 @@ void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) { if (manual_move_axis != (int8_t)NO_AXIS && ELAPSED(millis(), manual_move_start_time) && !planner.is_full()) { + const feedRate_t fr_mm_s = MMM_TO_MMS(manual_feedrate_mm_m[manual_move_axis]); #if IS_KINEMATIC - const float old_feedrate = feedrate_mm_s; - feedrate_mm_s = MMM_TO_MMS(manual_feedrate_mm_m[manual_move_axis]); - #if EXTRUDERS > 1 const int8_t old_extruder = active_extruder; if (manual_move_axis == E_AXIS) active_extruder = manual_move_e_index; @@ -685,17 +683,16 @@ void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) { // previous invocation is being blocked. Modifications to manual_move_offset shouldn't be made while // processing_manual_move is true or the planner will get out of sync. processing_manual_move = true; - prepare_move_to_destination(); // will set current_position from destination + prepare_internal_move_to_destination(fr_mm_s); // will set current_position from destination processing_manual_move = false; - feedrate_mm_s = old_feedrate; #if EXTRUDERS > 1 active_extruder = old_extruder; #endif #else - planner.buffer_line(current_position, MMM_TO_MMS(manual_feedrate_mm_m[manual_move_axis]), manual_move_axis == E_AXIS ? manual_move_e_index : active_extruder); + planner.buffer_line(current_position, fr_mm_s, manual_move_axis == E_AXIS ? manual_move_e_index : active_extruder); manual_move_axis = (int8_t)NO_AXIS; #endif diff --git a/Marlin/src/lcd/ultralcd.h b/Marlin/src/lcd/ultralcd.h index 47f5806a2ff3..f3dcb3a381ca 100644 --- a/Marlin/src/lcd/ultralcd.h +++ b/Marlin/src/lcd/ultralcd.h @@ -90,7 +90,7 @@ typedef void (*menuAction_t)(); // Manual Movement - constexpr float manual_feedrate_mm_m[XYZE] = MANUAL_FEEDRATE; + constexpr feedRate_t manual_feedrate_mm_m[XYZE] = MANUAL_FEEDRATE; extern float move_menu_scale; #if ENABLED(ADVANCED_PAUSE_FEATURE) diff --git a/Marlin/src/libs/nozzle.cpp b/Marlin/src/libs/nozzle.cpp index 6a59c6d07b09..829d46e1da99 100644 --- a/Marlin/src/libs/nozzle.cpp +++ b/Marlin/src/libs/nozzle.cpp @@ -186,7 +186,7 @@ Nozzle nozzle; #if ENABLED(NOZZLE_PARK_FEATURE) void Nozzle::park(const uint8_t z_action, const point_t &park/*=NOZZLE_PARK_POINT*/) { - constexpr float fr_xy = NOZZLE_PARK_XY_FEEDRATE, fr_z = NOZZLE_PARK_Z_FEEDRATE; + constexpr feedRate_t fr_xy = NOZZLE_PARK_XY_FEEDRATE, fr_z = NOZZLE_PARK_Z_FEEDRATE; switch (z_action) { case 1: // Go to Z-park height diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp index ad3f6f4dcbc5..3d723909b083 100644 --- a/Marlin/src/module/configuration_store.cpp +++ b/Marlin/src/module/configuration_store.cpp @@ -124,6 +124,11 @@ typedef struct { bool X, Y, Z, X2, Y2, Z2, Z3, E0, E1, E2, E3, E4, E5; } tmc // Limit an index to an array size #define ALIM(I,ARR) _MIN(I, COUNT(ARR) - 1) +// Defaults for reset / fill in on load +static const uint32_t _DMA[] PROGMEM = DEFAULT_MAX_ACCELERATION; +static const float _DASU[] PROGMEM = DEFAULT_AXIS_STEPS_PER_UNIT; +static const feedRate_t _DMF[] PROGMEM = DEFAULT_MAX_FEEDRATE; + /** * Current EEPROM Layout * @@ -1289,21 +1294,19 @@ void MarlinSettings::postprocess() { { // Get only the number of E stepper parameters previously stored // Any steppers added later are set to their defaults - const uint32_t def1[] = DEFAULT_MAX_ACCELERATION; - const float def2[] = DEFAULT_AXIS_STEPS_PER_UNIT, def3[] = DEFAULT_MAX_FEEDRATE; - uint32_t tmp1[XYZ + esteppers]; + float tmp2[XYZ + esteppers]; + feedRate_t tmp3[XYZ + esteppers]; EEPROM_READ(tmp1); // max_acceleration_mm_per_s2 EEPROM_READ(planner.settings.min_segment_time_us); - - float tmp2[XYZ + esteppers], tmp3[XYZ + esteppers]; EEPROM_READ(tmp2); // axis_steps_per_mm EEPROM_READ(tmp3); // max_feedrate_mm_s + if (!validating) LOOP_XYZE_N(i) { const bool in = (i < esteppers + XYZ); - planner.settings.max_acceleration_mm_per_s2[i] = in ? tmp1[i] : def1[ALIM(i, def1)]; - planner.settings.axis_steps_per_mm[i] = in ? tmp2[i] : def2[ALIM(i, def2)]; - planner.settings.max_feedrate_mm_s[i] = in ? tmp3[i] : def3[ALIM(i, def3)]; + planner.settings.max_acceleration_mm_per_s2[i] = in ? tmp1[i] : pgm_read_dword(&_DMA[ALIM(i, _DMA)]); + planner.settings.axis_steps_per_mm[i] = in ? tmp2[i] : pgm_read_float(&_DASU[ALIM(i, _DASU)]); + planner.settings.max_feedrate_mm_s[i] = in ? tmp3[i] : pgm_read_float(&_DMF[ALIM(i, _DMF)]); } EEPROM_READ(planner.settings.acceleration); @@ -2205,20 +2208,18 @@ void MarlinSettings::postprocess() { * M502 - Reset Configuration */ void MarlinSettings::reset() { - static const float tmp1[] PROGMEM = DEFAULT_AXIS_STEPS_PER_UNIT, tmp2[] PROGMEM = DEFAULT_MAX_FEEDRATE; - static const uint32_t tmp3[] PROGMEM = DEFAULT_MAX_ACCELERATION; LOOP_XYZE_N(i) { - planner.settings.axis_steps_per_mm[i] = pgm_read_float(&tmp1[ALIM(i, tmp1)]); - planner.settings.max_feedrate_mm_s[i] = pgm_read_float(&tmp2[ALIM(i, tmp2)]); - planner.settings.max_acceleration_mm_per_s2[i] = pgm_read_dword(&tmp3[ALIM(i, tmp3)]); + planner.settings.max_acceleration_mm_per_s2[i] = pgm_read_dword(&_DMA[ALIM(i, _DMA)]); + planner.settings.axis_steps_per_mm[i] = pgm_read_float(&_DASU[ALIM(i, _DASU)]); + planner.settings.max_feedrate_mm_s[i] = pgm_read_float(&_DMF[ALIM(i, _DMF)]); } planner.settings.min_segment_time_us = DEFAULT_MINSEGMENTTIME; planner.settings.acceleration = DEFAULT_ACCELERATION; planner.settings.retract_acceleration = DEFAULT_RETRACT_ACCELERATION; planner.settings.travel_acceleration = DEFAULT_TRAVEL_ACCELERATION; - planner.settings.min_feedrate_mm_s = DEFAULT_MINIMUMFEEDRATE; - planner.settings.min_travel_feedrate_mm_s = DEFAULT_MINTRAVELFEEDRATE; + planner.settings.min_feedrate_mm_s = feedRate_t(DEFAULT_MINIMUMFEEDRATE); + planner.settings.min_travel_feedrate_mm_s = feedRate_t(DEFAULT_MINTRAVELFEEDRATE); #if HAS_CLASSIC_JERK #ifndef DEFAULT_XJERK @@ -3039,7 +3040,7 @@ void MarlinSettings::reset() { SERIAL_ECHOLNPAIR( " M207 S", LINEAR_UNIT(fwretract.settings.retract_length) , " W", LINEAR_UNIT(fwretract.settings.swap_retract_length) - , " F", MMS_TO_MMM(LINEAR_UNIT(fwretract.settings.retract_feedrate_mm_s)) + , " F", LINEAR_UNIT(MMS_TO_MMM(fwretract.settings.retract_feedrate_mm_s)) , " Z", LINEAR_UNIT(fwretract.settings.retract_zraise) ); @@ -3048,7 +3049,7 @@ void MarlinSettings::reset() { SERIAL_ECHOLNPAIR( " M208 S", LINEAR_UNIT(fwretract.settings.retract_recover_extra) , " W", LINEAR_UNIT(fwretract.settings.swap_retract_recover_extra) - , " F", MMS_TO_MMM(LINEAR_UNIT(fwretract.settings.retract_recover_feedrate_mm_s)) + , " F", LINEAR_UNIT(MMS_TO_MMM(fwretract.settings.retract_recover_feedrate_mm_s)) ); #if ENABLED(FWRETRACT_AUTORETRACT) diff --git a/Marlin/src/module/delta.cpp b/Marlin/src/module/delta.cpp index 66973805de56..b1b943b9448e 100644 --- a/Marlin/src/module/delta.cpp +++ b/Marlin/src/module/delta.cpp @@ -231,12 +231,12 @@ void home_delta() { #endif // Move all carriages together linearly until an endstop is hit. - destination[Z_AXIS] = (delta_height + current_position[Z_AXIS] = (delta_height + 10 #if HAS_BED_PROBE - probe_offset[Z_AXIS] #endif - + 10); - buffer_line_to_destination(homing_feedrate(X_AXIS)); + ); + line_to_current_position(homing_feedrate(X_AXIS)); planner.synchronize(); // Re-enable stealthChop if used. Disable diag1 pin on driver. diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index c27d87424e49..928bb65ac07a 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -134,12 +134,11 @@ float destination[XYZE]; // = { 0 } // no other feedrate is specified. Overridden for special moves. // Set by the last G0 through G5 command's "F" parameter. // Functions that override this for custom moves *must always* restore it! -float feedrate_mm_s = MMM_TO_MMS(1500.0f); - +feedRate_t feedrate_mm_s = MMM_TO_MMS(1500); int16_t feedrate_percentage = 100; // Homing feedrate is const progmem - compare to constexpr in the header -const float homing_feedrate_mm_s[XYZ] PROGMEM = { +const feedRate_t homing_feedrate_mm_s[XYZ] PROGMEM = { #if ENABLED(DELTA) MMM_TO_MMS(HOMING_FEEDRATE_Z), MMM_TO_MMS(HOMING_FEEDRATE_Z), #else @@ -285,29 +284,21 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) { * Move the planner to the current position from wherever it last moved * (or from wherever it has been told it is located). */ -void line_to_current_position(const float &fr_mm_s/*=feedrate_mm_s*/) { - planner.buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], fr_mm_s, active_extruder); -} - -/** - * Move the planner to the position stored in the destination array, which is - * used by G0/G1/G2/G3/G5 and many other functions to set a destination. - */ -void buffer_line_to_destination(const float fr_mm_s) { - planner.buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], fr_mm_s, active_extruder); +void line_to_current_position(const feedRate_t &fr_mm_s/*=feedrate_mm_s*/) { + planner.buffer_line(current_position, fr_mm_s, active_extruder); } #if IS_KINEMATIC /** - * Calculate delta, start a line, and set current_position to destination + * Buffer a fast move without interpolation. Set current_position to destination */ - void prepare_uninterpolated_move_to_destination(const float &fr_mm_s/*=0.0*/) { - if (DEBUGGING(LEVELING)) DEBUG_POS("prepare_uninterpolated_move_to_destination", destination); + void prepare_fast_move_to_destination(const feedRate_t &scaled_fr_mm_s/*=MMS_SCALED(feedrate_mm_s)*/) { + if (DEBUGGING(LEVELING)) DEBUG_POS("prepare_fast_move_to_destination", destination); #if UBL_SEGMENTED - // ubl segmented line will do z-only moves in single segment - ubl.prepare_segmented_line_to(destination, MMS_SCALED(fr_mm_s ? fr_mm_s : feedrate_mm_s)); + // UBL segmented line will do Z-only moves in single segment + ubl.line_to_destination_segmented(scaled_fr_mm_s); #else if ( current_position[X_AXIS] == destination[X_AXIS] && current_position[Y_AXIS] == destination[Y_AXIS] @@ -315,7 +306,7 @@ void buffer_line_to_destination(const float fr_mm_s) { && current_position[E_AXIS] == destination[E_AXIS] ) return; - planner.buffer_line(destination, MMS_SCALED(fr_mm_s ? fr_mm_s : feedrate_mm_s), active_extruder); + planner.buffer_line(destination, scaled_fr_mm_s, active_extruder); #endif set_current_from_destination(); @@ -323,14 +314,40 @@ void buffer_line_to_destination(const float fr_mm_s) { #endif // IS_KINEMATIC +void _internal_move_to_destination(const feedRate_t &fr_mm_s/*=0.0f*/ + #if IS_KINEMATIC + , const bool is_fast/*=false*/ + #endif +) { + const feedRate_t old_feedrate = feedrate_mm_s; + if (fr_mm_s) feedrate_mm_s = fr_mm_s; + + const uint16_t old_pct = feedrate_percentage; + feedrate_percentage = 100; + + const float old_fac = planner.e_factor[active_extruder]; + planner.e_factor[active_extruder] = 1.0f; + + #if IS_KINEMATIC + if (is_fast) + prepare_fast_move_to_destination(); + else + #endif + prepare_move_to_destination(); + + feedrate_mm_s = old_feedrate; + feedrate_percentage = old_pct; + planner.e_factor[active_extruder] = old_fac; +} + /** * Plan a move to (X, Y, Z) and set the current_position */ -void do_blocking_move_to(const float rx, const float ry, const float rz, const float &fr_mm_s/*=0.0*/) { +void do_blocking_move_to(const float rx, const float ry, const float rz, const feedRate_t &fr_mm_s/*=0.0*/) { if (DEBUGGING(LEVELING)) DEBUG_XYZ(">>> do_blocking_move_to", rx, ry, rz); - const float z_feedrate = fr_mm_s ? fr_mm_s : homing_feedrate(Z_AXIS), - xy_feedrate = fr_mm_s ? fr_mm_s : XY_PROBE_FEEDRATE_MM_S; + const feedRate_t z_feedrate = fr_mm_s ? fr_mm_s : homing_feedrate(Z_AXIS), + xy_feedrate = fr_mm_s ? fr_mm_s : feedRate_t(XY_PROBE_FEEDRATE_MM_S); #if ENABLED(DELTA) @@ -344,33 +361,33 @@ void do_blocking_move_to(const float rx, const float ry, const float rz, const f // when in the danger zone if (current_position[Z_AXIS] > delta_clip_start_height) { - if (rz > delta_clip_start_height) { // staying in the danger zone - destination[X_AXIS] = rx; // move directly (uninterpolated) + if (rz > delta_clip_start_height) { // staying in the danger zone + destination[X_AXIS] = rx; // move directly (uninterpolated) destination[Y_AXIS] = ry; destination[Z_AXIS] = rz; - prepare_uninterpolated_move_to_destination(); // set_current_from_destination() + prepare_internal_fast_move_to_destination(); // set_current_from_destination() if (DEBUGGING(LEVELING)) DEBUG_POS("danger zone move", current_position); return; } destination[Z_AXIS] = delta_clip_start_height; - prepare_uninterpolated_move_to_destination(); // set_current_from_destination() + prepare_internal_fast_move_to_destination(); // set_current_from_destination() if (DEBUGGING(LEVELING)) DEBUG_POS("zone border move", current_position); } - if (rz > current_position[Z_AXIS]) { // raising? + if (rz > current_position[Z_AXIS]) { // raising? destination[Z_AXIS] = rz; - prepare_uninterpolated_move_to_destination(z_feedrate); // set_current_from_destination() + prepare_internal_fast_move_to_destination(z_feedrate); // set_current_from_destination() if (DEBUGGING(LEVELING)) DEBUG_POS("z raise move", current_position); } destination[X_AXIS] = rx; destination[Y_AXIS] = ry; - prepare_move_to_destination(); // set_current_from_destination() + prepare_internal_move_to_destination(); // set_current_from_destination() if (DEBUGGING(LEVELING)) DEBUG_POS("xy move", current_position); - if (rz < current_position[Z_AXIS]) { // lowering? + if (rz < current_position[Z_AXIS]) { // lowering? destination[Z_AXIS] = rz; - prepare_uninterpolated_move_to_destination(z_feedrate); // set_current_from_destination() + prepare_fast_move_to_destination(z_feedrate); // set_current_from_destination() if (DEBUGGING(LEVELING)) DEBUG_POS("z lower move", current_position); } @@ -383,17 +400,17 @@ void do_blocking_move_to(const float rx, const float ry, const float rz, const f // If Z needs to raise, do it before moving XY if (destination[Z_AXIS] < rz) { destination[Z_AXIS] = rz; - prepare_uninterpolated_move_to_destination(z_feedrate); + prepare_internal_fast_move_to_destination(z_feedrate); } destination[X_AXIS] = rx; destination[Y_AXIS] = ry; - prepare_uninterpolated_move_to_destination(xy_feedrate); + prepare_internal_fast_move_to_destination(xy_feedrate); // If Z needs to lower, do it after moving XY if (destination[Z_AXIS] > rz) { destination[Z_AXIS] = rz; - prepare_uninterpolated_move_to_destination(z_feedrate); + prepare_internal_fast_move_to_destination(z_feedrate); } #else @@ -420,16 +437,16 @@ void do_blocking_move_to(const float rx, const float ry, const float rz, const f planner.synchronize(); } -void do_blocking_move_to_x(const float &rx, const float &fr_mm_s/*=0.0*/) { +void do_blocking_move_to_x(const float &rx, const feedRate_t &fr_mm_s/*=0.0*/) { do_blocking_move_to(rx, current_position[Y_AXIS], current_position[Z_AXIS], fr_mm_s); } -void do_blocking_move_to_y(const float &ry, const float &fr_mm_s/*=0.0*/) { +void do_blocking_move_to_y(const float &ry, const feedRate_t &fr_mm_s/*=0.0*/) { do_blocking_move_to(current_position[X_AXIS], ry, current_position[Z_AXIS], fr_mm_s); } -void do_blocking_move_to_z(const float &rz, const float &fr_mm_s/*=0.0*/) { +void do_blocking_move_to_z(const float &rz, const feedRate_t &fr_mm_s/*=0.0*/) { do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], rz, fr_mm_s); } -void do_blocking_move_to_xy(const float &rx, const float &ry, const float &fr_mm_s/*=0.0*/) { +void do_blocking_move_to_xy(const float &rx, const float &ry, const feedRate_t &fr_mm_s/*=0.0*/) { do_blocking_move_to(rx, ry, current_position[Z_AXIS], fr_mm_s); } @@ -629,31 +646,31 @@ void restore_feedrate_and_scaling() { * small incremental moves for DELTA or SCARA. * * For Unified Bed Leveling (Delta or Segmented Cartesian) - * the ubl.prepare_segmented_line_to method replaces this. + * the ubl.line_to_destination_segmented method replaces this. * * For Auto Bed Leveling (Bilinear) with SEGMENT_LEVELED_MOVES * this is replaced by segmented_line_to_destination below. */ - inline bool prepare_kinematic_move_to(const float (&rtarget)[XYZE]) { + inline bool line_to_destination_kinematic() { // Get the top feedrate of the move in the XY plane - const float _feedrate_mm_s = MMS_SCALED(feedrate_mm_s); + const float scaled_fr_mm_s = MMS_SCALED(feedrate_mm_s); - const float xdiff = rtarget[X_AXIS] - current_position[X_AXIS], - ydiff = rtarget[Y_AXIS] - current_position[Y_AXIS]; + const float xdiff = destination[X_AXIS] - current_position[X_AXIS], + ydiff = destination[Y_AXIS] - current_position[Y_AXIS]; // If the move is only in Z/E don't split up the move if (!xdiff && !ydiff) { - planner.buffer_line(rtarget, _feedrate_mm_s, active_extruder); + planner.buffer_line(destination, scaled_fr_mm_s, active_extruder); return false; // caller will update current_position } // Fail if attempting move outside printable radius - if (!position_is_reachable(rtarget[X_AXIS], rtarget[Y_AXIS])) return true; + if (!position_is_reachable(destination[X_AXIS], destination[Y_AXIS])) return true; // Remaining cartesian distances - const float zdiff = rtarget[Z_AXIS] - current_position[Z_AXIS], - ediff = rtarget[E_AXIS] - current_position[E_AXIS]; + const float zdiff = destination[Z_AXIS] - current_position[Z_AXIS], + ediff = destination[E_AXIS] - current_position[E_AXIS]; // Get the linear distance in XYZ float cartesian_mm = SQRT(sq(xdiff) + sq(ydiff) + sq(zdiff)); @@ -665,7 +682,7 @@ void restore_feedrate_and_scaling() { if (UNEAR_ZERO(cartesian_mm)) return true; // Minimum number of seconds to move the given distance - const float seconds = cartesian_mm / _feedrate_mm_s; + const float seconds = cartesian_mm / scaled_fr_mm_s; // The number of segments-per-second times the duration // gives the number of segments @@ -690,7 +707,7 @@ void restore_feedrate_and_scaling() { cartesian_segment_mm = cartesian_mm * inv_segments; #if ENABLED(SCARA_FEEDRATE_SCALING) - const float inv_duration = _feedrate_mm_s / cartesian_segment_mm; + const float inv_duration = scaled_fr_mm_s / cartesian_segment_mm; #endif /* @@ -717,7 +734,7 @@ void restore_feedrate_and_scaling() { LOOP_XYZE(i) raw[i] += segment_distance[i]; - if (!planner.buffer_line(raw, _feedrate_mm_s, active_extruder, cartesian_segment_mm + if (!planner.buffer_line(raw, scaled_fr_mm_s, active_extruder, cartesian_segment_mm #if ENABLED(SCARA_FEEDRATE_SCALING) , inv_duration #endif @@ -726,7 +743,7 @@ void restore_feedrate_and_scaling() { } // Ensure last segment arrives at target location. - planner.buffer_line(rtarget, _feedrate_mm_s, active_extruder, cartesian_segment_mm + planner.buffer_line(destination, scaled_fr_mm_s, active_extruder, cartesian_segment_mm #if ENABLED(SCARA_FEEDRATE_SCALING) , inv_duration #endif @@ -746,7 +763,7 @@ void restore_feedrate_and_scaling() { * small incremental moves. This allows the planner to * apply more detailed bed leveling to the full move. */ - inline void segmented_line_to_destination(const float &fr_mm_s, const float segment_size=LEVELED_SEGMENT_LENGTH) { + inline void segmented_line_to_destination(const feedRate_t &fr_mm_s, const float segment_size=LEVELED_SEGMENT_LENGTH) { const float xdiff = destination[X_AXIS] - current_position[X_AXIS], ydiff = destination[Y_AXIS] - current_position[Y_AXIS]; @@ -784,7 +801,7 @@ void restore_feedrate_and_scaling() { }; #if ENABLED(SCARA_FEEDRATE_SCALING) - const float inv_duration = _feedrate_mm_s / cartesian_segment_mm; + const float inv_duration = scaled_fr_mm_s / cartesian_segment_mm; #endif // SERIAL_ECHOPAIR("mm=", cartesian_mm); @@ -832,13 +849,14 @@ void restore_feedrate_and_scaling() { * Returns true if current_position[] was set to destination[] */ inline bool prepare_move_to_destination_cartesian() { + const float scaled_fr_mm_s = MMS_SCALED(feedrate_mm_s); #if HAS_MESH if (planner.leveling_active && planner.leveling_active_at_z(destination[Z_AXIS])) { #if ENABLED(AUTO_BED_LEVELING_UBL) - ubl.line_to_destination_cartesian(MMS_SCALED(feedrate_mm_s), active_extruder); // UBL's motion routine needs to know about - return true; // all moves, including Z-only moves. + ubl.line_to_destination_cartesian(scaled_fr_mm_s, active_extruder); // UBL's motion routine needs to know about + return true; // all moves, including Z-only moves. #elif ENABLED(SEGMENT_LEVELED_MOVES) - segmented_line_to_destination(MMS_SCALED(feedrate_mm_s)); + segmented_line_to_destination(scaled_fr_mm_s); return false; // caller will update current_position #else /** @@ -847,9 +865,9 @@ void restore_feedrate_and_scaling() { */ if (current_position[X_AXIS] != destination[X_AXIS] || current_position[Y_AXIS] != destination[Y_AXIS]) { #if ENABLED(MESH_BED_LEVELING) - mbl.line_to_destination(MMS_SCALED(feedrate_mm_s)); + mbl.line_to_destination(scaled_fr_mm_s); #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) - bilinear_line_to_destination(MMS_SCALED(feedrate_mm_s)); + bilinear_line_to_destination(scaled_fr_mm_s); #endif return true; } @@ -857,7 +875,7 @@ void restore_feedrate_and_scaling() { } #endif // HAS_MESH - buffer_line_to_destination(MMS_SCALED(feedrate_mm_s)); + planner.buffer_line(destination, scaled_fr_mm_s, active_extruder); return false; // caller will update current_position } @@ -971,6 +989,8 @@ void restore_feedrate_and_scaling() { * * Make sure current_position[E] and destination[E] are good * before calling or cold/lengthy extrusion may get missed. + * + * Before exit, current_position is set to destination. */ void prepare_move_to_destination() { apply_motion_limits(destination); @@ -1014,14 +1034,13 @@ void prepare_move_to_destination() { if ( #if UBL_SEGMENTED - //ubl.prepare_segmented_line_to(destination, MMS_SCALED(feedrate_mm_s)) // This doesn't seem to work correctly on UBL. - #if IS_KINEMATIC // Use Kinematic / Cartesian cases as a workaround for now. - ubl.prepare_segmented_line_to(destination, MMS_SCALED(feedrate_mm_s)) + #if IS_KINEMATIC // UBL using Kinematic / Cartesian cases as a workaround for now. + ubl.line_to_destination_segmented(MMS_SCALED(feedrate_mm_s)) #else prepare_move_to_destination_cartesian() #endif #elif IS_KINEMATIC - prepare_kinematic_move_to(destination) + line_to_destination_kinematic() #else prepare_move_to_destination_cartesian() #endif @@ -1065,7 +1084,7 @@ bool axis_unhomed_error(uint8_t axis_bits/*=0x07*/) { /** * Homing bump feedrate (mm/s) */ -float get_homing_bump_feedrate(const AxisEnum axis) { +feedRate_t get_homing_bump_feedrate(const AxisEnum axis) { #if HOMING_Z_WITH_PROBE if (axis == Z_AXIS) return MMM_TO_MMS(Z_PROBE_SPEED_SLOW); #endif @@ -1075,7 +1094,7 @@ float get_homing_bump_feedrate(const AxisEnum axis) { hbd = 10; SERIAL_ECHO_MSG("Warning: Homing Bump Divisor < 1"); } - return homing_feedrate(axis) / hbd; + return homing_feedrate(axis) / float(hbd); } #if ENABLED(SENSORLESS_HOMING) @@ -1221,7 +1240,7 @@ float get_homing_bump_feedrate(const AxisEnum axis) { /** * Home an individual linear axis */ -void do_homing_move(const AxisEnum axis, const float distance, const float fr_mm_s=0.0) { +void do_homing_move(const AxisEnum axis, const float distance, const feedRate_t fr_mm_s=0.0) { if (DEBUGGING(LEVELING)) { DEBUG_ECHOPAIR(">>> do_homing_move(", axis_codes[axis], ", ", distance, ", "); @@ -1266,12 +1285,13 @@ void do_homing_move(const AxisEnum axis, const float distance, const float fr_mm #endif } + const feedRate_t real_fr_mm_s = fr_mm_s ? fr_mm_s : homing_feedrate(axis); #if IS_SCARA // Tell the planner the axis is at 0 current_position[axis] = 0; sync_plan_position(); current_position[axis] = distance; - planner.buffer_line(current_position, fr_mm_s ? fr_mm_s : homing_feedrate(axis), active_extruder); + line_to_current_position(real_fr_mm_s); #else float target[ABCE] = { planner.get_axis_position_mm(A_AXIS), planner.get_axis_position_mm(B_AXIS), planner.get_axis_position_mm(C_AXIS), planner.get_axis_position_mm(E_AXIS) }; target[axis] = 0; @@ -1287,7 +1307,7 @@ void do_homing_move(const AxisEnum axis, const float distance, const float fr_mm #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) , delta_mm_cart #endif - , fr_mm_s ? fr_mm_s : homing_feedrate(axis), active_extruder + , real_fr_mm_s, active_extruder ); #endif @@ -1507,7 +1527,7 @@ void homeaxis(const AxisEnum axis) { if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Move Away:"); do_homing_move(axis, -bump #if HOMING_Z_WITH_PROBE - , axis == Z_AXIS ? MMM_TO_MMS(Z_PROBE_SPEED_FAST) : 0.0 + , MMM_TO_MMS(axis == Z_AXIS ? Z_PROBE_SPEED_FAST : 0) #endif ); diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index b3d79a7a0ee3..9c465a1d5954 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -85,17 +85,16 @@ extern float cartes[XYZ]; * Feed rates are often configured with mm/m * but the planner and stepper like mm/s units. */ -extern const float homing_feedrate_mm_s[XYZ]; -FORCE_INLINE float homing_feedrate(const AxisEnum a) { return pgm_read_float(&homing_feedrate_mm_s[a]); } -float get_homing_bump_feedrate(const AxisEnum axis); +extern const feedRate_t homing_feedrate_mm_s[XYZ]; +FORCE_INLINE feedRate_t homing_feedrate(const AxisEnum a) { return pgm_read_float(&homing_feedrate_mm_s[a]); } +feedRate_t get_homing_bump_feedrate(const AxisEnum axis); -extern float feedrate_mm_s; +extern feedRate_t feedrate_mm_s; /** - * Feedrate scaling and conversion + * Feedrate scaling */ extern int16_t feedrate_percentage; -#define MMS_SCALED(MM_S) ((MM_S)*feedrate_percentage*0.01f) // The active extruder (tool). Set with T command. #if EXTRUDERS > 1 @@ -172,34 +171,42 @@ void sync_plan_position_e(); * Move the planner to the current position from wherever it last moved * (or from wherever it has been told it is located). */ -void line_to_current_position(const float &fr_mm_s=feedrate_mm_s); +void line_to_current_position(const feedRate_t &fr_mm_s=feedrate_mm_s); -/** - * Move the planner to the position stored in the destination array, which is - * used by G0/G1/G2/G3/G5 and many other functions to set a destination. - */ -void buffer_line_to_destination(const float fr_mm_s); +void prepare_move_to_destination(); + +void _internal_move_to_destination(const feedRate_t &fr_mm_s=0.0f + #if IS_KINEMATIC + , const bool is_fast=false + #endif +); + +inline void prepare_internal_move_to_destination(const feedRate_t &fr_mm_s=0.0f) { + _internal_move_to_destination(fr_mm_s); +} #if IS_KINEMATIC - void prepare_uninterpolated_move_to_destination(const float &fr_mm_s=0); -#endif + void prepare_fast_move_to_destination(const feedRate_t &scaled_fr_mm_s=MMS_SCALED(feedrate_mm_s)); -void prepare_move_to_destination(); + inline void prepare_internal_fast_move_to_destination(const feedRate_t &fr_mm_s=0.0f) { + _internal_move_to_destination(fr_mm_s, true); + } +#endif /** * Blocking movement and shorthand functions */ -void do_blocking_move_to(const float rx, const float ry, const float rz, const float &fr_mm_s=0); -void do_blocking_move_to_x(const float &rx, const float &fr_mm_s=0); -void do_blocking_move_to_y(const float &ry, const float &fr_mm_s=0); -void do_blocking_move_to_z(const float &rz, const float &fr_mm_s=0); -void do_blocking_move_to_xy(const float &rx, const float &ry, const float &fr_mm_s=0); +void do_blocking_move_to(const float rx, const float ry, const float rz, const feedRate_t &fr_mm_s=0.0f); +void do_blocking_move_to_x(const float &rx, const feedRate_t &fr_mm_s=0.0f); +void do_blocking_move_to_y(const float &ry, const feedRate_t &fr_mm_s=0.0f); +void do_blocking_move_to_z(const float &rz, const feedRate_t &fr_mm_s=0.0f); +void do_blocking_move_to_xy(const float &rx, const float &ry, const feedRate_t &fr_mm_s=0.0f); -FORCE_INLINE void do_blocking_move_to(const float (&raw)[XYZ], const float &fr_mm_s=0) { +FORCE_INLINE void do_blocking_move_to(const float (&raw)[XYZ], const feedRate_t &fr_mm_s=0) { do_blocking_move_to(raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS], fr_mm_s); } -FORCE_INLINE void do_blocking_move_to(const float (&raw)[XYZE], const float &fr_mm_s=0) { +FORCE_INLINE void do_blocking_move_to(const float (&raw)[XYZE], const feedRate_t &fr_mm_s=0) { do_blocking_move_to(raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS], fr_mm_s); } diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 13e411b9b88d..2715221f329f 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -1570,7 +1570,7 @@ bool Planner::_buffer_steps(const int32_t (&target)[XYZE] #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) , const float (&delta_mm_cart)[XYZE] #endif - , float fr_mm_s, const uint8_t extruder, const float &millimeters + , feedRate_t fr_mm_s, const uint8_t extruder, const float &millimeters ) { // If we are cleaning, do not accept queuing of movements @@ -1634,7 +1634,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) , const float (&delta_mm_cart)[XYZE] #endif - , float fr_mm_s, const uint8_t extruder, const float &millimeters/*=0.0*/ + , feedRate_t fr_mm_s, const uint8_t extruder, const float &millimeters/*=0.0*/ ) { const int32_t da = target[A_AXIS] - position[A_AXIS], @@ -2091,7 +2091,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, #else const float delta_mm_i = delta_mm[i]; #endif - const float cs = ABS(current_speed[i] = delta_mm_i * inverse_secs); + const feedRate_t cs = ABS(current_speed[i] = delta_mm_i * inverse_secs); #if ENABLED(DISTINCT_E_FACTORS) if (i == E_AXIS) i += extruder; #endif @@ -2569,7 +2569,7 @@ bool Planner::buffer_segment(const float &a, const float &b, const float &c, con #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) , const float (&delta_mm_cart)[XYZE] #endif - , const float &fr_mm_s, const uint8_t extruder, const float &millimeters/*=0.0*/ + , const feedRate_t &fr_mm_s, const uint8_t extruder, const float &millimeters/*=0.0*/ ) { // If we are cleaning, do not accept queuing of movements @@ -2651,9 +2651,8 @@ bool Planner::buffer_segment(const float &a, const float &b, const float &c, con /** * Add a new linear movement to the buffer. - * The target is cartesian, it's translated to delta/scara if - * needed. - * + * The target is cartesian. It's translated to + * delta/scara if needed. * * rx,ry,rz,e - target position in mm or degrees * fr_mm_s - (target) speed of the move (mm/s) @@ -2661,7 +2660,7 @@ bool Planner::buffer_segment(const float &a, const float &b, const float &c, con * millimeters - the length of the movement, if known * inv_duration - the reciprocal if the duration of the movement, if known (kinematic only if feeedrate scaling is enabled) */ -bool Planner::buffer_line(const float &rx, const float &ry, const float &rz, const float &e, const float &fr_mm_s, const uint8_t extruder, const float millimeters +bool Planner::buffer_line(const float &rx, const float &ry, const float &rz, const float &e, const feedRate_t &fr_mm_s, const uint8_t extruder, const float millimeters #if ENABLED(SCARA_FEEDRATE_SCALING) , const float &inv_duration #endif @@ -2690,10 +2689,10 @@ bool Planner::buffer_line(const float &rx, const float &ry, const float &rz, con #if ENABLED(SCARA_FEEDRATE_SCALING) // For SCARA scale the feed rate from mm/s to degrees/s // i.e., Complete the angular vector in the given time. - const float duration_recip = inv_duration ? inv_duration : fr_mm_s / mm, - feedrate = HYPOT(delta[A_AXIS] - position_float[A_AXIS], delta[B_AXIS] - position_float[B_AXIS]) * duration_recip; + const float duration_recip = inv_duration ? inv_duration : fr_mm_s / mm; + const feedRate_t feedrate = HYPOT(delta[A_AXIS] - position_float[A_AXIS], delta[B_AXIS] - position_float[B_AXIS]) * duration_recip; #else - const float feedrate = fr_mm_s; + const feedRate_t feedrate = fr_mm_s; #endif if (buffer_segment(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], raw[E_AXIS] #if ENABLED(JUNCTION_DEVIATION) diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index 79efe349a172..2f3ee471d63c 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -170,15 +170,15 @@ typedef struct block_t { #define BLOCK_MOD(n) ((n)&(BLOCK_BUFFER_SIZE-1)) typedef struct { - uint32_t max_acceleration_mm_per_s2[XYZE_N], // (mm/s^2) M201 XYZE - min_segment_time_us; // (µs) M205 B - float axis_steps_per_mm[XYZE_N], // (steps) M92 XYZE - Steps per millimeter - max_feedrate_mm_s[XYZE_N], // (mm/s) M203 XYZE - Max speeds - acceleration, // (mm/s^2) M204 S - Normal acceleration. DEFAULT ACCELERATION for all printing moves. - retract_acceleration, // (mm/s^2) M204 R - Retract acceleration. Filament pull-back and push-forward while standing still in the other axes - travel_acceleration, // (mm/s^2) M204 T - Travel acceleration. DEFAULT ACCELERATION for all NON printing moves. - min_feedrate_mm_s, // (mm/s) M205 S - Minimum linear feedrate - min_travel_feedrate_mm_s; // (mm/s) M205 T - Minimum travel feedrate + uint32_t max_acceleration_mm_per_s2[XYZE_N], // (mm/s^2) M201 XYZE + min_segment_time_us; // (µs) M205 B + float axis_steps_per_mm[XYZE_N]; // (steps) M92 XYZE - Steps per millimeter + feedRate_t max_feedrate_mm_s[XYZE_N]; // (mm/s) M203 XYZE - Max speeds + float acceleration, // (mm/s^2) M204 S - Normal acceleration. DEFAULT ACCELERATION for all printing moves. + retract_acceleration, // (mm/s^2) M204 R - Retract acceleration. Filament pull-back and push-forward while standing still in the other axes + travel_acceleration; // (mm/s^2) M204 T - Travel acceleration. DEFAULT ACCELERATION for all NON printing moves. + feedRate_t min_feedrate_mm_s, // (mm/s) M205 S - Minimum linear feedrate + min_travel_feedrate_mm_s; // (mm/s) M205 T - Minimum travel feedrate } planner_settings_t; #if DISABLED(SKEW_CORRECTION) @@ -585,7 +585,7 @@ class Planner { #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) , const float (&delta_mm_cart)[XYZE] #endif - , float fr_mm_s, const uint8_t extruder, const float &millimeters=0.0 + , feedRate_t fr_mm_s, const uint8_t extruder, const float &millimeters=0.0 ); /** @@ -608,7 +608,7 @@ class Planner { #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) , const float (&delta_mm_cart)[XYZE] #endif - , float fr_mm_s, const uint8_t extruder, const float &millimeters=0.0 + , feedRate_t fr_mm_s, const uint8_t extruder, const float &millimeters=0.0 ); /** @@ -621,7 +621,7 @@ class Planner { private: // Allow do_homing_move to access internal functions, such as buffer_segment. - friend void do_homing_move(const AxisEnum, const float, const float); + friend void do_homing_move(const AxisEnum, const float, const feedRate_t); #endif /** @@ -640,14 +640,14 @@ class Planner { #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) , const float (&delta_mm_cart)[XYZE] #endif - , const float &fr_mm_s, const uint8_t extruder, const float &millimeters=0.0 + , const feedRate_t &fr_mm_s, const uint8_t extruder, const float &millimeters=0.0 ); FORCE_INLINE static bool buffer_segment(const float (&abce)[ABCE] #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) , const float (&delta_mm_cart)[XYZE] #endif - , const float &fr_mm_s, const uint8_t extruder, const float &millimeters=0.0 + , const feedRate_t &fr_mm_s, const uint8_t extruder, const float &millimeters=0.0 ) { return buffer_segment(abce[A_AXIS], abce[B_AXIS], abce[C_AXIS], abce[E_AXIS] #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) @@ -660,9 +660,8 @@ class Planner { /** * Add a new linear movement to the buffer. - * The target is cartesian, it's translated to delta/scara if - * needed. - * + * The target is cartesian. It's translated to + * delta/scara if needed. * * rx,ry,rz,e - target position in mm or degrees * fr_mm_s - (target) speed of the move (mm/s) @@ -670,13 +669,13 @@ class Planner { * millimeters - the length of the movement, if known * inv_duration - the reciprocal if the duration of the movement, if known (kinematic only if feeedrate scaling is enabled) */ - static bool buffer_line(const float &rx, const float &ry, const float &rz, const float &e, const float &fr_mm_s, const uint8_t extruder, const float millimeters=0.0 + static bool buffer_line(const float &rx, const float &ry, const float &rz, const float &e, const feedRate_t &fr_mm_s, const uint8_t extruder, const float millimeters=0.0 #if ENABLED(SCARA_FEEDRATE_SCALING) , const float &inv_duration=0.0 #endif ); - FORCE_INLINE static bool buffer_line(const float (&cart)[XYZE], const float &fr_mm_s, const uint8_t extruder, const float millimeters=0.0 + FORCE_INLINE static bool buffer_line(const float (&cart)[XYZE], const feedRate_t &fr_mm_s, const uint8_t extruder, const float millimeters=0.0 #if ENABLED(SCARA_FEEDRATE_SCALING) , const float &inv_duration=0.0 #endif diff --git a/Marlin/src/module/planner_bezier.cpp b/Marlin/src/module/planner_bezier.cpp index 71a99594f5b8..6e6746bce8c6 100644 --- a/Marlin/src/module/planner_bezier.cpp +++ b/Marlin/src/module/planner_bezier.cpp @@ -107,13 +107,18 @@ static inline float dist1(const float &x1, const float &y1, const float &x2, con * the mitigation offered by MIN_STEP and the small computational * power available on Arduino, I think it is not wise to implement it. */ -void cubic_b_spline(const float position[NUM_AXIS], const float target[NUM_AXIS], const float offset[4], float fr_mm_s, uint8_t extruder) { +void cubic_b_spline( + const float position[NUM_AXIS], // current position + const float target[NUM_AXIS], // target position + const float (&offset)[4], // a pair of offsets + const feedRate_t &scaled_fr_mm_s, // mm/s scaled by feedrate % + const uint8_t extruder +) { // Absolute first and second control points are recovered. const float first0 = position[X_AXIS] + offset[0], first1 = position[Y_AXIS] + offset[1], second0 = target[X_AXIS] + offset[2], second1 = target[Y_AXIS] + offset[3]; - float t = 0; float bez_target[4]; bez_target[X_AXIS] = position[X_AXIS]; @@ -122,7 +127,7 @@ void cubic_b_spline(const float position[NUM_AXIS], const float target[NUM_AXIS] millis_t next_idle_ms = millis() + 200UL; - while (t < 1) { + for (float t = 0; t < 1;) { thermalManager.manage_heater(); millis_t now = millis(); @@ -197,7 +202,7 @@ void cubic_b_spline(const float position[NUM_AXIS], const float target[NUM_AXIS] const float (&pos)[XYZE] = bez_target; #endif - if (!planner.buffer_line(pos, fr_mm_s, active_extruder, step)) + if (!planner.buffer_line(pos, scaled_fr_mm_s, active_extruder, step)) break; } } diff --git a/Marlin/src/module/planner_bezier.h b/Marlin/src/module/planner_bezier.h index 492bf51146aa..5e959dd0f394 100644 --- a/Marlin/src/module/planner_bezier.h +++ b/Marlin/src/module/planner_bezier.h @@ -32,9 +32,9 @@ #include "../core/macros.h" void cubic_b_spline( - const float position[NUM_AXIS], // current position - const float target[NUM_AXIS], // target position - const float offset[4], // a pair of offsets - float fr_mm_s, - uint8_t extruder - ); + const float position[NUM_AXIS], // current position + const float target[NUM_AXIS], // target position + const float (&offset)[4], // a pair of offsets + const feedRate_t &scaled_fr_mm_s, // mm/s scaled by feedrate % + const uint8_t extruder +); diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 830f6d4c0df3..ce0d84e41bf2 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -446,7 +446,7 @@ bool set_probe_deployed(const bool deploy) { const char msg_wait_for_bed_heating[25] PROGMEM = "Wait for bed heating...\n"; #endif -static bool do_probe_move(const float z, const float fr_mm_s) { +static bool do_probe_move(const float z, const feedRate_t fr_mm_s) { if (DEBUGGING(LEVELING)) DEBUG_POS(">>> do_probe_move", current_position); #if HAS_HEATED_BED && ENABLED(WAIT_FOR_BED_HEATER) diff --git a/Marlin/src/module/tool_change.h b/Marlin/src/module/tool_change.h index 754c72009609..42b96e2c6ad5 100644 --- a/Marlin/src/module/tool_change.h +++ b/Marlin/src/module/tool_change.h @@ -71,12 +71,12 @@ #elif ENABLED(MAGNETIC_PARKING_EXTRUDER) typedef struct MPESettings { - float parking_xpos[2], // M951 L R - grab_distance, // M951 I - slow_feedrate, // M951 J - fast_feedrate, // M951 H - travel_distance, // M951 D - compensation_factor; // M951 C + float parking_xpos[2], // M951 L R + grab_distance; // M951 I + feedRate_t slow_feedrate, // M951 J + fast_feedrate; // M951 H + float travel_distance, // M951 D + compensation_factor; // M951 C } mpe_settings_t; extern mpe_settings_t mpe_settings; From 665e45e0bad4254352330884a846c21aad2a2ff0 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 26 Sep 2019 03:47:26 -0500 Subject: [PATCH 062/120] Reduce string storage, use masking 'seen' --- Marlin/src/HAL/HAL_DUE/EepromEmulation.cpp | 8 +++----- Marlin/src/Marlin.cpp | 9 +++++---- Marlin/src/feature/bedlevel/ubl/ubl.cpp | 5 ++--- Marlin/src/feature/prusa_MMU2/mmu2.cpp | 4 +--- Marlin/src/gcode/bedlevel/M420.cpp | 2 +- Marlin/src/gcode/config/M281.cpp | 9 ++++----- Marlin/src/gcode/config/M301.cpp | 6 +++--- Marlin/src/gcode/config/M302.cpp | 3 +-- Marlin/src/gcode/config/M304.cpp | 6 +++--- Marlin/src/gcode/config/M92.cpp | 16 +++++++--------- Marlin/src/gcode/control/M280.cpp | 6 ++---- Marlin/src/gcode/feature/L6470/M906.cpp | 2 +- Marlin/src/gcode/feature/advance/M900.cpp | 8 ++++---- Marlin/src/gcode/feature/powerloss/M413.cpp | 2 +- Marlin/src/gcode/probe/M951.cpp | 3 +-- .../lib/lulzbot/archim2-flash/flash_storage.cpp | 17 ++++++++--------- .../lib/lulzbot/ftdi_eve_lib/basic/commands.cpp | 10 ++++------ .../lib/lulzbot/ftdi_eve_lib/basic/constants.h | 6 +++--- .../lulzbot/ftdi_eve_lib/extended/dl_cache.cpp | 15 +++++++-------- .../ftdi_eve_lib/extended/screen_types.h | 3 +-- .../ftdi_eve_lib/extended/sound_player.cpp | 3 +-- .../lib/lulzbot/screens/media_player_screen.cpp | 12 ++++-------- .../screens/touch_calibration_screen.cpp | 3 +-- Marlin/src/sd/cardreader.cpp | 6 ++---- 24 files changed, 70 insertions(+), 94 deletions(-) diff --git a/Marlin/src/HAL/HAL_DUE/EepromEmulation.cpp b/Marlin/src/HAL/HAL_DUE/EepromEmulation.cpp index 3d6e22f6d38f..c7b7007053ac 100644 --- a/Marlin/src/HAL/HAL_DUE/EepromEmulation.cpp +++ b/Marlin/src/HAL/HAL_DUE/EepromEmulation.cpp @@ -922,8 +922,7 @@ static void ee_Init() { if (!ee_IsPageClean(grp * PagesPerGroup + page)) { #ifdef EE_EMU_DEBUG SERIAL_ECHO_START(); - SERIAL_ECHOPAIR("EEPROM Page ",page); - SERIAL_ECHOLNPAIR(" not clean on group ",grp); + SERIAL_ECHOLNPAIR("EEPROM Page ", page, " not clean on group ", grp); SERIAL_FLUSH(); #endif ee_PageErase(grp * PagesPerGroup + page); @@ -944,7 +943,7 @@ static void ee_Init() { #ifdef EE_EMU_DEBUG SERIAL_ECHO_START(); - SERIAL_ECHOLNPAIR("EEPROM Active page: ",curPage); + SERIAL_ECHOLNPAIR("EEPROM Active page: ", curPage); SERIAL_FLUSH(); #endif @@ -953,8 +952,7 @@ static void ee_Init() { if (!ee_IsPageClean(curGroup * PagesPerGroup + page)) { #ifdef EE_EMU_DEBUG SERIAL_ECHO_START(); - SERIAL_ECHOPAIR("EEPROM Page ",page); - SERIAL_ECHOLNPAIR(" not clean on active group ",curGroup); + SERIAL_ECHOLNPAIR("EEPROM Page ", page, " not clean on active group ", curGroup); SERIAL_FLUSH(); ee_Dump(curGroup * PagesPerGroup + page, getFlashStorage(curGroup * PagesPerGroup + page)); #endif diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp index 8be6a345b06a..0dca9879d598 100644 --- a/Marlin/src/Marlin.cpp +++ b/Marlin/src/Marlin.cpp @@ -962,10 +962,11 @@ void setup() { SERIAL_EOL(); #if defined(STRING_DISTRIBUTION_DATE) && defined(STRING_CONFIG_H_AUTHOR) - SERIAL_ECHO_START(); - SERIAL_ECHOPGM(MSG_CONFIGURATION_VER); - SERIAL_ECHOPGM(STRING_DISTRIBUTION_DATE); - SERIAL_ECHOLNPGM(MSG_AUTHOR STRING_CONFIG_H_AUTHOR); + SERIAL_ECHO_MSG( + MSG_CONFIGURATION_VER + STRING_DISTRIBUTION_DATE + MSG_AUTHOR STRING_CONFIG_H_AUTHOR + ); SERIAL_ECHO_MSG("Compiled: " __DATE__); #endif diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.cpp b/Marlin/src/feature/bedlevel/ubl/ubl.cpp index f41c80f88a5a..4cdc4721b5a5 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl.cpp @@ -50,9 +50,8 @@ for (uint8_t y = 0; y < GRID_MAX_POINTS_Y; y++) if (!isnan(z_values[x][y])) { SERIAL_ECHO_START(); - SERIAL_ECHOPAIR(" M421 I", x, " J", y); - SERIAL_ECHOPAIR_F(" Z", z_values[x][y], 4); - SERIAL_EOL(); + SERIAL_ECHOPAIR(" M421 I", int(x), " J", int(y)); + SERIAL_ECHOLNPAIR_F(" Z", z_values[x][y], 4); serial_delay(75); // Prevent Printrun from exploding } } diff --git a/Marlin/src/feature/prusa_MMU2/mmu2.cpp b/Marlin/src/feature/prusa_MMU2/mmu2.cpp index 604138896d92..8f5537ba9ccd 100644 --- a/Marlin/src/feature/prusa_MMU2/mmu2.cpp +++ b/Marlin/src/feature/prusa_MMU2/mmu2.cpp @@ -432,9 +432,7 @@ bool MMU2::rx_ok() { */ void MMU2::check_version() { if (buildnr < MMU_REQUIRED_FW_BUILDNR) { - SERIAL_ERROR_START(); - SERIAL_ECHOPGM("MMU2 firmware version invalid. Required version >= "); - SERIAL_ECHOLN(MMU_REQUIRED_FW_BUILDNR); + SERIAL_ERROR_MSG("Invalid MMU2 firmware. Version >= " STRINGIFY(MMU_REQUIRED_FW_BUILDNR) " required."); kill(MSG_MMU2_WRONG_FIRMWARE); } } diff --git a/Marlin/src/gcode/bedlevel/M420.cpp b/Marlin/src/gcode/bedlevel/M420.cpp index 311619acc2b1..d3d94a99cc48 100644 --- a/Marlin/src/gcode/bedlevel/M420.cpp +++ b/Marlin/src/gcode/bedlevel/M420.cpp @@ -127,7 +127,7 @@ void GcodeSuite::M420() { } // L or V display the map info - if (parser.seen('L') || parser.seen('V')) { + if (parser.seen("LV")) { ubl.display_map(parser.byteval('T')); SERIAL_ECHOPGM("Mesh is "); if (!ubl.mesh_is_valid()) SERIAL_ECHOPGM("in"); diff --git a/Marlin/src/gcode/config/M281.cpp b/Marlin/src/gcode/config/M281.cpp index ea9c032cf089..a694cb2df4c2 100644 --- a/Marlin/src/gcode/config/M281.cpp +++ b/Marlin/src/gcode/config/M281.cpp @@ -41,15 +41,14 @@ void GcodeSuite::M281() { } if (!angle_change) { SERIAL_ECHO_START(); - SERIAL_ECHOPAIR(" Servo ", servo_index); - SERIAL_ECHOPAIR(" L", servo_angles[servo_index][0]); - SERIAL_ECHOLNPAIR(" U", servo_angles[servo_index][1]); + SERIAL_ECHOLNPAIR(" Servo ", servo_index, + " L", servo_angles[servo_index][0], + " U", servo_angles[servo_index][1]); } } else { SERIAL_ERROR_START(); - SERIAL_ECHOPAIR("Servo ", servo_index); - SERIAL_ECHOLNPGM(" out of range"); + SERIAL_ECHOLNPAIR("Servo ", servo_index, " out of range"); } } diff --git a/Marlin/src/gcode/config/M301.cpp b/Marlin/src/gcode/config/M301.cpp index 6c66ab48cbeb..25a15d772869 100644 --- a/Marlin/src/gcode/config/M301.cpp +++ b/Marlin/src/gcode/config/M301.cpp @@ -61,9 +61,9 @@ void GcodeSuite::M301() { #if ENABLED(PID_PARAMS_PER_HOTEND) SERIAL_ECHOPAIR(" e:", e); // specify extruder in serial output #endif // PID_PARAMS_PER_HOTEND - SERIAL_ECHOPAIR(" p:", PID_PARAM(Kp, e)); - SERIAL_ECHOPAIR(" i:", unscalePID_i(PID_PARAM(Ki, e))); - SERIAL_ECHOPAIR(" d:", unscalePID_d(PID_PARAM(Kd, e))); + SERIAL_ECHOPAIR(" p:", PID_PARAM(Kp, e), + " i:", unscalePID_i(PID_PARAM(Ki, e)), + " d:", unscalePID_d(PID_PARAM(Kd, e))); #if ENABLED(PID_EXTRUSION_SCALING) //Kc does not have scaling applied above, or in resetting defaults SERIAL_ECHOPAIR(" c:", PID_PARAM(Kc, e)); diff --git a/Marlin/src/gcode/config/M302.cpp b/Marlin/src/gcode/config/M302.cpp index e5ca1d36082c..891f3c82584a 100644 --- a/Marlin/src/gcode/config/M302.cpp +++ b/Marlin/src/gcode/config/M302.cpp @@ -56,8 +56,7 @@ void GcodeSuite::M302() { SERIAL_ECHO_START(); SERIAL_ECHOPGM("Cold extrudes are "); serialprintPGM(thermalManager.allow_cold_extrude ? PSTR("en") : PSTR("dis")); - SERIAL_ECHOPAIR("abled (min temp ", thermalManager.extrude_min_temp); - SERIAL_ECHOLNPGM("C)"); + SERIAL_ECHOLNPAIR("abled (min temp ", thermalManager.extrude_min_temp, "C)"); } } diff --git a/Marlin/src/gcode/config/M304.cpp b/Marlin/src/gcode/config/M304.cpp index f63fa03fce60..3048c228d5e8 100644 --- a/Marlin/src/gcode/config/M304.cpp +++ b/Marlin/src/gcode/config/M304.cpp @@ -33,9 +33,9 @@ void GcodeSuite::M304() { if (parser.seen('D')) thermalManager.temp_bed.pid.Kd = scalePID_d(parser.value_float()); SERIAL_ECHO_START(); - SERIAL_ECHOPAIR(" p:", thermalManager.temp_bed.pid.Kp); - SERIAL_ECHOPAIR(" i:", unscalePID_i(thermalManager.temp_bed.pid.Ki)); - SERIAL_ECHOLNPAIR(" d:", unscalePID_d(thermalManager.temp_bed.pid.Kd)); + SERIAL_ECHOLNPAIR(" p:", thermalManager.temp_bed.pid.Kp, + " i:", unscalePID_i(thermalManager.temp_bed.pid.Ki), + " d:", unscalePID_d(thermalManager.temp_bed.pid.Kd)); } #endif // PIDTEMPBED diff --git a/Marlin/src/gcode/config/M92.cpp b/Marlin/src/gcode/config/M92.cpp index 3965136e6b3e..f0e27e82d1dd 100644 --- a/Marlin/src/gcode/config/M92.cpp +++ b/Marlin/src/gcode/config/M92.cpp @@ -25,9 +25,9 @@ void report_M92(const bool echo=true, const int8_t e=-1) { if (echo) SERIAL_ECHO_START(); else SERIAL_CHAR(' '); - SERIAL_ECHOPAIR(" M92 X", LINEAR_UNIT(planner.settings.axis_steps_per_mm[X_AXIS])); - SERIAL_ECHOPAIR(" Y", LINEAR_UNIT(planner.settings.axis_steps_per_mm[Y_AXIS])); - SERIAL_ECHOPAIR(" Z", LINEAR_UNIT(planner.settings.axis_steps_per_mm[Z_AXIS])); + SERIAL_ECHOPAIR(" M92 X", LINEAR_UNIT(planner.settings.axis_steps_per_mm[X_AXIS]), + " Y", LINEAR_UNIT(planner.settings.axis_steps_per_mm[Y_AXIS]), + " Z", LINEAR_UNIT(planner.settings.axis_steps_per_mm[Z_AXIS])); #if DISABLED(DISTINCT_E_FACTORS) SERIAL_ECHOPAIR(" E", VOLUMETRIC_UNIT(planner.settings.axis_steps_per_mm[E_AXIS])); #endif @@ -37,8 +37,8 @@ void report_M92(const bool echo=true, const int8_t e=-1) { for (uint8_t i = 0; i < E_STEPPERS; i++) { if (e >= 0 && i != e) continue; if (echo) SERIAL_ECHO_START(); else SERIAL_CHAR(' '); - SERIAL_ECHOPAIR(" M92 T", (int)i); - SERIAL_ECHOLNPAIR(" E", VOLUMETRIC_UNIT(planner.settings.axis_steps_per_mm[E_AXIS_N(i)])); + SERIAL_ECHOLNPAIR(" M92 T", (int)i, + " E", VOLUMETRIC_UNIT(planner.settings.axis_steps_per_mm[E_AXIS_N(i)])); } #endif @@ -101,12 +101,10 @@ void GcodeSuite::M92() { micro_steps = argH ? argH : Z_MICROSTEPS; const float z_full_step_mm = micro_steps * planner.steps_to_mm[Z_AXIS]; SERIAL_ECHO_START(); - SERIAL_ECHOPAIR("{ micro_steps:", micro_steps); - SERIAL_ECHOPAIR(", z_full_step_mm:", z_full_step_mm); + SERIAL_ECHOPAIR("{ micro_steps:", micro_steps, ", z_full_step_mm:", z_full_step_mm); if (wanted) { const float best = uint16_t(wanted / z_full_step_mm) * z_full_step_mm; - SERIAL_ECHOPGM(", best:["); - SERIAL_ECHO(best); + SERIAL_ECHOPAIR(", best:[", best); if (best != wanted) { SERIAL_CHAR(','); SERIAL_ECHO(best + z_full_step_mm); } SERIAL_CHAR(']'); } diff --git a/Marlin/src/gcode/control/M280.cpp b/Marlin/src/gcode/control/M280.cpp index 3626f0bf670b..6b65e9b75310 100644 --- a/Marlin/src/gcode/control/M280.cpp +++ b/Marlin/src/gcode/control/M280.cpp @@ -43,14 +43,12 @@ void GcodeSuite::M280() { } else { SERIAL_ECHO_START(); - SERIAL_ECHOPAIR(" Servo ", servo_index); - SERIAL_ECHOLNPAIR(": ", servo[servo_index].read()); + SERIAL_ECHOLNPAIR(" Servo ", servo_index, ": ", servo[servo_index].read()); } } else { SERIAL_ERROR_START(); - SERIAL_ECHOPAIR("Servo ", servo_index); - SERIAL_ECHOLNPGM(" out of range"); + SERIAL_ECHOLNPAIR("Servo ", servo_index, " out of range"); } } diff --git a/Marlin/src/gcode/feature/L6470/M906.cpp b/Marlin/src/gcode/feature/L6470/M906.cpp index 7f48033190a1..143a6fea8dff 100644 --- a/Marlin/src/gcode/feature/L6470/M906.cpp +++ b/Marlin/src/gcode/feature/L6470/M906.cpp @@ -151,7 +151,7 @@ void L6470_report_current(L6470 &motor, const uint8_t axis) { break; } SERIAL_ECHO(dtostrf(val * 100 / 256, 10, 2, numstr)); - SERIAL_ECHO("%% "); + SERIAL_ECHOPGM("%% "); serialprintPGM(suf); SERIAL_EOL(); } diff --git a/Marlin/src/gcode/feature/advance/M900.cpp b/Marlin/src/gcode/feature/advance/M900.cpp index a5c0dc5cd70c..f030511422bd 100644 --- a/Marlin/src/gcode/feature/advance/M900.cpp +++ b/Marlin/src/gcode/feature/advance/M900.cpp @@ -99,13 +99,13 @@ void GcodeSuite::M900() { if (!parser.seen_any()) { #if EXTRUDERS < 2 - SERIAL_ECHOLNPAIR("Advance S", ext_slot, " K", planner.extruder_advance_K[0]); - SERIAL_ECHOLNPAIR("(Slot ", 1 - ext_slot, " K", saved_extruder_advance_K[0], ")"); + SERIAL_ECHOLNPAIR("Advance S", ext_slot, " K", planner.extruder_advance_K[0], + "(Slot ", 1 - ext_slot, " K", saved_extruder_advance_K[0], ")"); #else LOOP_L_N(i, EXTRUDERS) { const int slot = (int)TEST(lin_adv_slot, i); - SERIAL_ECHOLNPAIR("Advance T", int(i), " S", slot, " K", planner.extruder_advance_K[i]); - SERIAL_ECHOLNPAIR("(Slot ", 1 - slot, " K", saved_extruder_advance_K[i], ")"); + SERIAL_ECHOLNPAIR("Advance T", int(i), " S", slot, " K", planner.extruder_advance_K[i], + "(Slot ", 1 - slot, " K", saved_extruder_advance_K[i], ")"); SERIAL_EOL(); } #endif diff --git a/Marlin/src/gcode/feature/powerloss/M413.cpp b/Marlin/src/gcode/feature/powerloss/M413.cpp index 49f4c250afc9..cd1dd801b909 100644 --- a/Marlin/src/gcode/feature/powerloss/M413.cpp +++ b/Marlin/src/gcode/feature/powerloss/M413.cpp @@ -47,7 +47,7 @@ void GcodeSuite::M413() { } #if ENABLED(DEBUG_POWER_LOSS_RECOVERY) - if (parser.seen('R') || parser.seen('L')) recovery.load(); + if (parser.seen("RL")) recovery.load(); if (parser.seen('W')) recovery.save(true); if (parser.seen('P')) recovery.purge(); if (parser.seen('E')) serialprintPGM(recovery.exists() ? PSTR("PLR Exists\n") : PSTR("No PLR\n")); diff --git a/Marlin/src/gcode/probe/M951.cpp b/Marlin/src/gcode/probe/M951.cpp index 3e27a7397fd7..d8d2e8f8e0cd 100644 --- a/Marlin/src/gcode/probe/M951.cpp +++ b/Marlin/src/gcode/probe/M951.cpp @@ -28,11 +28,10 @@ #include "../../module/tool_change.h" #include "../../module/motion.h" - mpe_settings_t mpe_settings; inline void mpe_settings_report() { - SERIAL_ECHO_START(); SERIAL_ECHOLNPGM("Magnetic Parking Extruder"); + SERIAL_ECHO_MSG("Magnetic Parking Extruder"); SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR("L: Left parking :", mpe_settings.parking_xpos[0]); SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR("R: Right parking :", mpe_settings.parking_xpos[1]); SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR("I: Grab Offset :", mpe_settings.grab_distance); diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/archim2-flash/flash_storage.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/archim2-flash/flash_storage.cpp index 2e17c6492c68..360f2562a156 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/archim2-flash/flash_storage.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/archim2-flash/flash_storage.cpp @@ -178,7 +178,7 @@ bool UIFlashStorage::is_present = false; ((manufacturer_id == 0x1F) && (device_type == 0x86) && (capacity == 0x01)) ; // Adesto AT255F161 if (!is_known) { - SERIAL_ECHO_START(); SERIAL_ECHOLNPGM("Unable to locate supported SPI Flash Memory."); + SERIAL_ECHO_MSG("Unable to locate supported SPI Flash Memory."); SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR(" Manufacturer ID, got: ", manufacturer_id); SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR(" Device Type , got: ", device_type); SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR(" Capacity , got: ", capacity); @@ -252,7 +252,7 @@ bool UIFlashStorage::is_present = false; return -1; } } - SERIAL_ECHO_START(); SERIAL_ECHOLNPGM("No LULZ delimiter found."); + SERIAL_ECHO_MSG("No LULZ delimiter found."); return -1; } @@ -264,7 +264,7 @@ bool UIFlashStorage::is_present = false; int32_t write_offset = read_offset + 4 + block_size; if ((write_offset + 4 + block_size) > data_storage_area_size) { - SERIAL_ECHO_START(); SERIAL_ECHOLNPGM("Not enough free space in Flash."); + SERIAL_ECHO_MSG("Not enough free space in Flash."); return -1; // Not enough free space } return write_offset; @@ -300,7 +300,7 @@ bool UIFlashStorage::is_present = false; void UIFlashStorage::write_config_data(const void *data, size_t size) { if (!is_present) { - SERIAL_ECHO_START(); SERIAL_ECHOLNPGM("SPI Flash chip not present. Not saving UI settings."); + SERIAL_ECHO_MSG("SPI Flash chip not present. Not saving UI settings."); return; } @@ -308,7 +308,7 @@ bool UIFlashStorage::is_present = false; // make sure that the data is different before rewriting. if (verify_config_data(data, size)) { - SERIAL_ECHO_START(); SERIAL_ECHOLNPGM("UI settings already written, skipping write."); + SERIAL_ECHO_MSG("UI settings already written, skipping write."); return; } @@ -427,12 +427,12 @@ bool UIFlashStorage::is_present = false; MediaFileReader reader; if (!reader.open((char*) buff)) { - SERIAL_ECHO_START(); SERIAL_ECHOLNPGM("Unable to find media file"); + SERIAL_ECHO_MSG("Unable to find media file"); return FILE_NOT_FOUND; } if (get_media_file_size(slot) != 0xFFFFFFFFUL) { - SERIAL_ECHO_START(); SERIAL_ECHOLNPGM("Media file already exists"); + SERIAL_ECHO_MSG("Media file already exists"); return WOULD_OVERWRITE; } @@ -518,9 +518,8 @@ bool UIFlashStorage::is_present = false; SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR("Boot media file size:", bytes_remaining); addr = get_media_file_start(slot); return true; - } else { - return false; } + return false; } int16_t UIFlashStorage::BootMediaReader::read(void *data, const size_t size) { diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.cpp index 87486a07d49f..9a04c9e83568 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/commands.cpp @@ -923,8 +923,7 @@ template bool CLCD::CommandFifo::_write_unaligned(T data, uint16_t len #if ENABLED(TOUCH_UI_DEBUG) if (command_write_ptr == 0xFFFFFFFFul) { - SERIAL_ECHO_START(); - SERIAL_ECHOLNPGM("Attempt to write to FIFO before CommandFifo::Cmd_Start()."); + SERIAL_ECHO_MSG("Attempt to write to FIFO before CommandFifo::Cmd_Start()."); } #endif @@ -1016,8 +1015,8 @@ template bool CLCD::CommandFifo::write(T data, uint16_t len) { if (Command_Space < (len + padding)) { #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); - SERIAL_ECHOPAIR("Waiting for ", len + padding); - SERIAL_ECHOPAIR(" bytes in command queue, now free: ", Command_Space); + SERIAL_ECHOPAIR("Waiting for ", len + padding, + " bytes in command queue, now free: ", Command_Space); #endif do { Command_Space = mem_read_32(REG::CMDB_SPACE) & 0x0FFF; @@ -1071,8 +1070,7 @@ void CLCD::init() { uint8_t device_id = mem_read_8(REG::ID); // Read Device ID, Should Be 0x7C; if (device_id == 0x7c) { #if ENABLED(TOUCH_UI_DEBUG) - SERIAL_ECHO_START(); - SERIAL_ECHOLNPGM("FTDI chip initialized "); + SERIAL_ECHO_MSG("FTDI chip initialized "); #endif break; } diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/constants.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/constants.h index 54836e146627..5f60881bdd0e 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/constants.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/basic/constants.h @@ -148,7 +148,7 @@ namespace FTDI { constexpr uint8_t STENCIL_OP_DECR = 4; constexpr uint8_t STENCIL_OP_INVERT = 5; - typedef enum: uint32_t { + typedef enum : uint32_t { BITMAPS = 1, POINTS = 2, LINES = 3, @@ -281,7 +281,7 @@ namespace FTDI_FT810 { } namespace FTDI { - enum effect_t { + enum effect_t : unsigned char { SILENCE = 0x00, SQUARE_WAVE = 0x01, SINE_WAVE = 0x02, @@ -342,7 +342,7 @@ namespace FTDI { UNMUTE = 0x61 }; - enum note_t { + enum note_t : unsigned char { END_SONG = 0xFF, REST = 0x00, diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp index b4018e979e24..bf8ca61f3aa9 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp @@ -78,8 +78,7 @@ bool DLCache::wait_until_idle() { const unsigned long startTime = millis(); do { if ((millis() - startTime) > 250) { - SERIAL_ECHO_START(); - SERIAL_ECHOLNPGM("Timeout on DL_Cache::Wait_Until_Idle()"); + SERIAL_ECHO_MSG("Timeout on DL_Cache::Wait_Until_Idle()"); CLCD::CommandFifo::reset(); return false; } @@ -130,15 +129,15 @@ bool DLCache::store(uint32_t num_bytes /* = 0*/) { // Not enough memory to cache the display list. #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); - SERIAL_ECHOPAIR("Not enough space in GRAM to cache display list, free space: ", free_space); - SERIAL_ECHOLNPAIR(" Required: ", dl_size); + SERIAL_ECHOLNPAIR("Not enough space in GRAM to cache display list, free space: ", free_space, + " Required: ", dl_size); #endif return false; } else { #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); - SERIAL_ECHOPAIR("Saving DL to RAMG cache, bytes: ", dl_size); - SERIAL_ECHOLNPAIR(" Free space: ", free_space); + SERIAL_ECHOLNPAIR("Saving DL to RAMG cache, bytes: ", dl_size, + " Free space: ", free_space); #endif cmd.memcpy(dl_addr, MAP::RAM_DL, dl_size); cmd.execute(); @@ -168,8 +167,8 @@ void DLCache::append() { cmd.execute(); wait_until_idle(); SERIAL_ECHO_START(); - SERIAL_ECHOPAIR("Appending to DL from RAMG cache, bytes: ", dl_size); - SERIAL_ECHOLNPAIR(" REG_CMD_DL: ", CLCD::mem_read_32(REG::CMD_DL)); + SERIAL_ECHOLNPAIR("Appending to DL from RAMG cache, bytes: ", dl_size, + " REG_CMD_DL: ", CLCD::mem_read_32(REG::CMD_DL)); #endif } diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.h index e42ff41d6718..f1ec4fc47664 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/screen_types.h @@ -176,8 +176,7 @@ class CachedScreen { static bool storeBackground() { DLCache dlcache(DL_SLOT); if (!dlcache.store(DL_SIZE)) { - SERIAL_ECHO_START(); - SERIAL_ECHOLNPGM("CachedScreen::storeBackground() failed: not enough DL cache space"); + SERIAL_ECHO_MSG("CachedScreen::storeBackground() failed: not enough DL cache space"); return false; } return true; diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/sound_player.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/sound_player.cpp index a58bdda738da..0011d69118af 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/sound_player.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/sound_player.cpp @@ -38,8 +38,7 @@ namespace FTDI { #if ENABLED(TOUCH_UI_DEBUG) SERIAL_ECHO_START(); - SERIAL_ECHOPAIR("Playing note ", note); - SERIAL_ECHOLNPAIR(", instrument ", effect); + SERIAL_ECHOLNPAIR("Playing note ", int(note), ", instrument ", int(effect)); #endif // Play the note diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/media_player_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/media_player_screen.cpp index 6655e4311af3..1043dde9c7b2 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/media_player_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/media_player_screen.cpp @@ -66,8 +66,7 @@ bool MediaPlayerScreen::playCardMedia() { if (!reader.open(fname)) return false; - SERIAL_ECHO_START(); - SERIAL_ECHOLNPGM("Starting to play STARTUP.AVI"); + SERIAL_ECHO_MSG("Starting to play STARTUP.AVI"); playStream(&reader, MediaFileReader::read); reader.close(); #endif @@ -79,8 +78,7 @@ bool MediaPlayerScreen::playBootMedia() { UIFlashStorage::BootMediaReader reader; if (!reader.isAvailable()) return false; - SERIAL_ECHO_START(); - SERIAL_ECHOLNPGM("Starting to play boot video"); + SERIAL_ECHO_MSG("Starting to play boot video"); playStream(&reader, UIFlashStorage::BootMediaReader::read); return true; } @@ -138,8 +136,7 @@ void MediaPlayerScreen::playStream(void *obj, media_streamer_func_t *data_stream t = millis(); timeouts--; if (timeouts == 0) { - SERIAL_ECHO_START(); - SERIAL_ECHOLNPGM("Timeout playing video"); + SERIAL_ECHO_MSG("Timeout playing video"); cmd.reset(); goto exit; } @@ -151,8 +148,7 @@ void MediaPlayerScreen::playStream(void *obj, media_streamer_func_t *data_stream CLCD::mem_write_32(CLCD::REG::MEDIAFIFO_WRITE, writePtr); } while (nBytes == block_size); - SERIAL_ECHO_START(); - SERIAL_ECHOLNPGM("Done playing video"); + SERIAL_ECHO_MSG("Done playing video"); exit: spiInit(SPI_SPEED); // Restore default speed diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp index 4effca9fed62..0779bb6fb2c6 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/touch_calibration_screen.cpp @@ -52,8 +52,7 @@ void TouchCalibrationScreen::onEntry() { while (CLCD::is_touching()) { #if ENABLED(TOUCH_UI_DEBUG) - SERIAL_ECHO_START(); - SERIAL_ECHOLNPGM("Waiting for touch release"); + SERIAL_ECHO_MSG("Waiting for touch release"); #endif } } diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index 41cc16739441..98a03af16839 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -192,8 +192,7 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m if (!dir.open(&parent, dosFilename, O_READ)) { if (lsAction == LS_SerialPrint) { SERIAL_ECHO_START(); - SERIAL_ECHOPGM(MSG_SD_CANT_OPEN_SUBDIR); - SERIAL_ECHOLN(dosFilename); + SERIAL_ECHOLNPAIR(MSG_SD_CANT_OPEN_SUBDIR, dosFilename); } } lsDive(path, dir); @@ -292,8 +291,7 @@ void CardReader::ls() { if (!dir.open(&diveDir, segment, O_READ)) { SERIAL_EOL(); SERIAL_ECHO_START(); - SERIAL_ECHOPGM(MSG_SD_CANT_OPEN_SUBDIR); - SERIAL_ECHO(segment); + SERIAL_ECHOPAIR(MSG_SD_CANT_OPEN_SUBDIR, segment); break; } From c0d5b57cf9263574f40d2781aebf263c5573d357 Mon Sep 17 00:00:00 2001 From: Berezovskyi Oleksandr Date: Fri, 27 Sep 2019 06:25:56 +0300 Subject: [PATCH 063/120] Init i2c for all i2c EEPROM use (#15366) --- Marlin/src/HAL/shared/eeprom_i2c.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Marlin/src/HAL/shared/eeprom_i2c.cpp b/Marlin/src/HAL/shared/eeprom_i2c.cpp index 9c9d48f2df89..2752b7d4ccd5 100644 --- a/Marlin/src/HAL/shared/eeprom_i2c.cpp +++ b/Marlin/src/HAL/shared/eeprom_i2c.cpp @@ -43,11 +43,7 @@ static uint8_t eeprom_device_address = 0x50; // ------------------------ static void eeprom_init() { - static bool eeprom_initialized = false; - if (!eeprom_initialized) { - Wire.begin(); - eeprom_initialized = true; - } + Wire.begin(); } void eeprom_write_byte(uint8_t *pos, unsigned char value) { From 62e4e05a1947b006dfbaa33e33a75dcd30cf993b Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 27 Sep 2019 00:00:04 -0500 Subject: [PATCH 064/120] [cron] Bump distribution date --- Marlin/src/inc/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index b8768bc38971..cf6e77948eb4 100644 --- a/Marlin/src/inc/Version.h +++ b/Marlin/src/inc/Version.h @@ -51,7 +51,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ - #define STRING_DISTRIBUTION_DATE "2019-09-25" + #define STRING_DISTRIBUTION_DATE "2019-09-27" /** * Required minimum Configuration.h and Configuration_adv.h file versions. From a18d16fb8b92c78093e25f8bb88cd0a49074678e Mon Sep 17 00:00:00 2001 From: Marcio Teixeira Date: Fri, 27 Sep 2019 03:38:43 -0600 Subject: [PATCH 065/120] Do not implicitly concatenate localized strings (#15383) --- Marlin/src/core/macros.h | 7 ++++ Marlin/src/gcode/bedlevel/abl/G29.cpp | 2 +- Marlin/src/gcode/motion/M290.cpp | 10 ++--- Marlin/src/lcd/menu/menu_info.cpp | 59 ++++++++++++++++----------- Marlin/src/lcd/menu/menu_media.cpp | 6 ++- Marlin/src/module/endstops.cpp | 2 +- Marlin/src/module/temperature.cpp | 13 +++--- 7 files changed, 62 insertions(+), 37 deletions(-) diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h index ecc51b2c70d4..7a21d290d617 100644 --- a/Marlin/src/core/macros.h +++ b/Marlin/src/core/macros.h @@ -61,6 +61,13 @@ // Nanoseconds per cycle #define NANOSECONDS_PER_CYCLE (1000000000.0 / F_CPU) +// Macros to make sprintf_P read from PROGMEM (AVR extension) +#ifdef __AVR__ + #define S_FMT "%S" +#else + #define S_FMT "%s" +#endif + // Macros to make a string from a macro #define STRINGIFY_(M) #M #define STRINGIFY(M) STRINGIFY_(M) diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 584d3a11c63a..82dc02502e5a 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -715,7 +715,7 @@ G29_TYPE GcodeSuite::G29() { if (verbose_level) SERIAL_ECHOLNPAIR("Probing mesh point ", int(pt_index), "/", int(GRID_MAX_POINTS), "."); #if HAS_DISPLAY - ui.status_printf_P(0, PSTR(MSG_PROBING_MESH " %i/%i"), int(pt_index), int(GRID_MAX_POINTS)); + ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), PSTR(MSG_PROBING_MESH), int(pt_index), int(GRID_MAX_POINTS)); #endif measured_z = faux ? 0.001 * random(-100, 101) : probe_at_point(xProbe, yProbe, raise_after, verbose_level); diff --git a/Marlin/src/gcode/motion/M290.cpp b/Marlin/src/gcode/motion/M290.cpp index 8b89ee194bdb..a2ac85cd0ba2 100644 --- a/Marlin/src/gcode/motion/M290.cpp +++ b/Marlin/src/gcode/motion/M290.cpp @@ -46,13 +46,13 @@ SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET MSG_Z ": ", probe_offset[Z_AXIS]); } - #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) - else { + else { + #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) hotend_offset[Z_AXIS][active_extruder] -= offs; SERIAL_ECHO_START(); - SERIAL_ECHOLNPAIR(MSG_Z_OFFSET ": ", hotend_offset[Z_AXIS][active_extruder]); - } - #endif + SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET MSG_Z ": ", hotend_offset[Z_AXIS][active_extruder]); + #endif + } } #endif diff --git a/Marlin/src/lcd/menu/menu_info.cpp b/Marlin/src/lcd/menu/menu_info.cpp index 815f20ace2c8..86e86dbdee71 100644 --- a/Marlin/src/lcd/menu/menu_info.cpp +++ b/Marlin/src/lcd/menu/menu_info.cpp @@ -34,6 +34,9 @@ #include "game/game.h" #endif +#define STATIC_PAIR(MSG, VALUE, CNTR) do{ strcpy_P(buffer, PSTR(": ")); strcpy(buffer + 2, VALUE); STATIC_ITEM(MSG, CNTR, false, buffer); }while(0) +#define STATIC_PAIR_P(MSG, PVALUE, CNTR) do{ strcpy_P(buffer, PSTR(": ")); strcpy_P(buffer + 2, PSTR(PVALUE)); STATIC_ITEM(MSG, CNTR, false, buffer); }while(0) + #if ENABLED(PRINTCOUNTER) #include "../../module/printcounter.h" @@ -48,27 +51,27 @@ #endif ); - char buffer[21]; + char buffer[21]; // for STATIC_PAIR_P + printStatistics stats = print_job_timer.getStats(); START_SCREEN(); // 12345678901234567890 - STATIC_ITEM(MSG_INFO_PRINT_COUNT ": ", false, false, i16tostr3left(stats.totalPrints)); // Print Count: 999 - STATIC_ITEM(MSG_INFO_COMPLETED_PRINTS": ", false, false, i16tostr3left(stats.finishedPrints)); // Completed : 666 + STATIC_PAIR(MSG_INFO_PRINT_COUNT, i16tostr3left(stats.totalPrints), false); // Print Count: 999 + STATIC_PAIR(MSG_INFO_COMPLETED_PRINTS, i16tostr3left(stats.finishedPrints), false); // Completed : 666 duration_t elapsed = stats.printTime; elapsed.toString(buffer); - STATIC_ITEM(MSG_INFO_PRINT_TIME ":", false, false); // Total print Time: + STATIC_PAIR_P(MSG_INFO_PRINT_TIME, "", false); // Total print Time: STATIC_ITEM("> ", false, false, buffer); // > 99y 364d 23h 59m 59s + STATIC_PAIR_P(MSG_INFO_PRINT_LONGEST, "", false); // Longest job time: elapsed = stats.longestPrint; elapsed.toString(buffer); - - STATIC_ITEM(MSG_INFO_PRINT_LONGEST ":", false, false); // Longest job time: STATIC_ITEM("> ", false, false, buffer); // > 99y 364d 23h 59m 59s + STATIC_PAIR_P(MSG_INFO_PRINT_FILAMENT, "", false); // Extruded total: sprintf_P(buffer, PSTR("%ld.%im"), long(stats.filamentUsed / 1000), int16_t(stats.filamentUsed / 100) % 10); - STATIC_ITEM(MSG_INFO_PRINT_FILAMENT ":", false, false); // Extruded total: STATIC_ITEM("> ", false, false, buffer); // > 125m #if SERVICE_INTERVAL_1 > 0 @@ -77,12 +80,14 @@ STATIC_ITEM(SERVICE_NAME_1 MSG_SERVICE_IN, false, false); // Service X in: STATIC_ITEM("> ", false, false, buffer); // > 7d 12h 11m 10s #endif + #if SERVICE_INTERVAL_2 > 0 elapsed = stats.nextService2; elapsed.toString(buffer); STATIC_ITEM(SERVICE_NAME_2 MSG_SERVICE_IN, false, false); STATIC_ITEM("> ", false, false, buffer); #endif + #if SERVICE_INTERVAL_3 > 0 elapsed = stats.nextService3; elapsed.toString(buffer); @@ -104,13 +109,16 @@ void menu_info_thermistors() { true #endif ); + + char buffer[21]; // for STATIC_PAIR_P + START_SCREEN(); #if EXTRUDERS #define THERMISTOR_ID TEMP_SENSOR_0 #include "../thermistornames.h" STATIC_ITEM("T0: " THERMISTOR_NAME, false, true); - STATIC_ITEM(MSG_INFO_MIN_TEMP ": " STRINGIFY(HEATER_0_MINTEMP), false); - STATIC_ITEM(MSG_INFO_MAX_TEMP ": " STRINGIFY(HEATER_0_MAXTEMP), false); + STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_0_MINTEMP), false); + STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_0_MAXTEMP), false); #endif #if TEMP_SENSOR_1 != 0 @@ -118,8 +126,8 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_1 #include "../thermistornames.h" STATIC_ITEM("T1: " THERMISTOR_NAME, false, true); - STATIC_ITEM(MSG_INFO_MIN_TEMP ": " STRINGIFY(HEATER_1_MINTEMP), false); - STATIC_ITEM(MSG_INFO_MAX_TEMP ": " STRINGIFY(HEATER_1_MAXTEMP), false); + STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_1_MINTEMP), false); + STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_1_MAXTEMP), false); #endif #if TEMP_SENSOR_2 != 0 @@ -127,8 +135,8 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_2 #include "../thermistornames.h" STATIC_ITEM("T2: " THERMISTOR_NAME, false, true); - STATIC_ITEM(MSG_INFO_MIN_TEMP ": " STRINGIFY(HEATER_2_MINTEMP), false); - STATIC_ITEM(MSG_INFO_MAX_TEMP ": " STRINGIFY(HEATER_2_MAXTEMP), false); + STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_2_MINTEMP), false); + STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_2_MAXTEMP), false); #endif #if TEMP_SENSOR_3 != 0 @@ -136,8 +144,8 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_3 #include "../thermistornames.h" STATIC_ITEM("T3: " THERMISTOR_NAME, false, true); - STATIC_ITEM(MSG_INFO_MIN_TEMP ": " STRINGIFY(HEATER_3_MINTEMP), false); - STATIC_ITEM(MSG_INFO_MAX_TEMP ": " STRINGIFY(HEATER_3_MAXTEMP), false); + STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_3_MINTEMP), false); + STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_3_MAXTEMP), false); #endif #if TEMP_SENSOR_4 != 0 @@ -145,8 +153,8 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_4 #include "../thermistornames.h" STATIC_ITEM("T4: " THERMISTOR_NAME, false, true); - STATIC_ITEM(MSG_INFO_MIN_TEMP ": " STRINGIFY(HEATER_4_MINTEMP), false); - STATIC_ITEM(MSG_INFO_MAX_TEMP ": " STRINGIFY(HEATER_4_MAXTEMP), false); + STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_4_MINTEMP), false); + STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_4_MAXTEMP), false); #endif #if TEMP_SENSOR_5 != 0 @@ -154,8 +162,8 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_5 #include "../thermistornames.h" STATIC_ITEM("T5: " THERMISTOR_NAME, false, true); - STATIC_ITEM(MSG_INFO_MIN_TEMP ": " STRINGIFY(HEATER_5_MINTEMP), false); - STATIC_ITEM(MSG_INFO_MAX_TEMP ": " STRINGIFY(HEATER_5_MAXTEMP), false); + STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_5_MINTEMP), false); + STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_5_MAXTEMP), false); #endif #if HAS_HEATED_BED @@ -163,8 +171,8 @@ void menu_info_thermistors() { #define THERMISTOR_ID TEMP_SENSOR_BED #include "../thermistornames.h" STATIC_ITEM("TBed:" THERMISTOR_NAME, false, true); - STATIC_ITEM(MSG_INFO_MIN_TEMP ": " STRINGIFY(BED_MINTEMP), false); - STATIC_ITEM(MSG_INFO_MAX_TEMP ": " STRINGIFY(BED_MAXTEMP), false); + STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(BED_MINTEMP), false); + STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(BED_MAXTEMP), false); #endif END_SCREEN(); } @@ -178,14 +186,17 @@ void menu_info_board() { true #endif ); + + char buffer[21]; // for STATIC_PAIR_P + START_SCREEN(); STATIC_ITEM(BOARD_INFO_NAME, true, true); // MyPrinterController #ifdef BOARD_WEBSITE_URL STATIC_ITEM(BOARD_WEBSITE_URL, false, false); // www.my3dprinter.com #endif - STATIC_ITEM(MSG_INFO_BAUDRATE ": " STRINGIFY(BAUDRATE), true); // Baud: 250000 - STATIC_ITEM(MSG_INFO_PROTOCOL ": " PROTOCOL_VERSION, true); // Protocol: 1.0 - STATIC_ITEM(MSG_INFO_PSU ": " PSU_NAME, true); + STATIC_PAIR_P(MSG_INFO_BAUDRATE, STRINGIFY(BAUDRATE), true); // Baud: 250000 + STATIC_PAIR_P(MSG_INFO_PROTOCOL, PROTOCOL_VERSION, true); // Protocol: 1.0 + STATIC_PAIR_P(MSG_INFO_PSU, PSU_NAME, true); END_SCREEN(); } diff --git a/Marlin/src/lcd/menu/menu_media.cpp b/Marlin/src/lcd/menu/menu_media.cpp index c909606f6aa0..b11963b173ce 100644 --- a/Marlin/src/lcd/menu/menu_media.cpp +++ b/Marlin/src/lcd/menu/menu_media.cpp @@ -82,10 +82,14 @@ inline void sdcard_start_selected_file() { #if ENABLED(SD_MENU_CONFIRM_START) void menu_sd_confirm() { + char * const longest = card.longest_filename(); + char buffer[strlen(longest) + 2]; + buffer[0] = ' '; + strcpy(buffer + 1, longest); do_select_screen( PSTR(MSG_BUTTON_PRINT), PSTR(MSG_BUTTON_CANCEL), sdcard_start_selected_file, ui.goto_previous_screen, - PSTR(MSG_START_PRINT " "), card.longest_filename(), PSTR("?") + PSTR(MSG_START_PRINT), buffer, PSTR("?") ); } diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp index 04f1ab6b1713..6970a051b305 100644 --- a/Marlin/src/module/endstops.cpp +++ b/Marlin/src/module/endstops.cpp @@ -373,7 +373,7 @@ void Endstops::event_handler() { SERIAL_EOL(); #if HAS_SPI_LCD - ui.status_printf_P(0, PSTR(MSG_LCD_ENDSTOPS " %c %c %c %c"), chrX, chrY, chrZ, chrP); + ui.status_printf_P(0, PSTR(S_FMT " %c %c %c %c"), PSTR(MSG_LCD_ENDSTOPS), chrX, chrY, chrZ, chrP); #endif #if BOTH(SD_ABORT_ON_ENDSTOP_HIT, SDSUPPORT) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 9542aa2ed2a5..d637b68d7b73 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -2933,11 +2933,14 @@ void Temperature::isr() { #if HOTENDS && HAS_DISPLAY void Temperature::set_heating_message(const uint8_t e) { const bool heating = isHeatingHotend(e); - #if HOTENDS > 1 - ui.status_printf_P(0, heating ? PSTR("E%c " MSG_HEATING) : PSTR("E%c " MSG_COOLING), '1' + e); - #else - ui.set_status_P(heating ? PSTR("E " MSG_HEATING) : PSTR("E " MSG_COOLING)); - #endif + ui.status_printf_P(0, + #if HOTENDS > 1 + PSTR("E%c " S_FMT), '1' + e + #else + PSTR("E " S_FMT) + #endif + , heating ? PSTR(MSG_HEATING) : PSTR(MSG_COOLING) + ); } #endif From dc65788511e2baa888e8b8813d96cae5ca3aea81 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 27 Sep 2019 04:30:48 -0500 Subject: [PATCH 066/120] Shorthand for __VA_ARGS__ --- Marlin/src/core/macros.h | 48 +++++++++++++++--------------- Marlin/src/core/utility.h | 2 +- Marlin/src/inc/Conditionals_post.h | 4 +-- Marlin/src/lcd/menu/menu.h | 24 +++++++-------- 4 files changed, 39 insertions(+), 39 deletions(-) diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h index 7a21d290d617..73a8ec5823ad 100644 --- a/Marlin/src/core/macros.h +++ b/Marlin/src/core/macros.h @@ -295,8 +295,8 @@ typedef float feedRate_t; #endif // Use NUM_ARGS(__VA_ARGS__) to get the number of variadic arguments -#define _NUM_ARGS(_0,_24_,_23,_22,_21,_20,_19,_18,_17,_16,_15,_14,_13,_12,_11,_10,_9,_8,_7,_6,_5,_4,_3,_2,_1,N,...) N -#define NUM_ARGS(V...) _NUM_ARGS(0,V,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0) +#define _NUM_ARGS(_,Z,Y,X,W,V,U,T,S,R,Q,P,O,N,M,L,K,J,I,H,G,F,E,D,C,B,A,OUT,...) OUT +#define NUM_ARGS(V...) _NUM_ARGS(0,V,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0) #ifdef __cplusplus @@ -322,29 +322,29 @@ typedef float feedRate_t; #else #define MIN_2(a,b) ((a)<(b)?(a):(b)) - #define MIN_3(a,...) MIN_2(a,MIN_2(__VA_ARGS__)) - #define MIN_4(a,...) MIN_2(a,MIN_3(__VA_ARGS__)) - #define MIN_5(a,...) MIN_2(a,MIN_4(__VA_ARGS__)) - #define MIN_6(a,...) MIN_2(a,MIN_5(__VA_ARGS__)) - #define MIN_7(a,...) MIN_2(a,MIN_6(__VA_ARGS__)) - #define MIN_8(a,...) MIN_2(a,MIN_7(__VA_ARGS__)) - #define MIN_9(a,...) MIN_2(a,MIN_8(__VA_ARGS__)) - #define MIN_10(a,...) MIN_2(a,MIN_9(__VA_ARGS__)) - #define __MIN_N(N, ...) MIN_##N(__VA_ARGS__) - #define _MIN_N(N, ...) __MIN_N(N,__VA_ARGS__) - #define _MIN(...) _MIN_N(NUM_ARGS(__VA_ARGS__), __VA_ARGS__) + #define MIN_3(a,V...) MIN_2(a,MIN_2(V)) + #define MIN_4(a,V...) MIN_2(a,MIN_3(V)) + #define MIN_5(a,V...) MIN_2(a,MIN_4(V)) + #define MIN_6(a,V...) MIN_2(a,MIN_5(V)) + #define MIN_7(a,V...) MIN_2(a,MIN_6(V)) + #define MIN_8(a,V...) MIN_2(a,MIN_7(V)) + #define MIN_9(a,V...) MIN_2(a,MIN_8(V)) + #define MIN_10(a,V...) MIN_2(a,MIN_9(V)) + #define __MIN_N(N,V...) MIN_##N(V) + #define _MIN_N(N,V...) __MIN_N(N,V) + #define _MIN(V...) _MIN_N(NUM_ARGS(V), V) #define MAX_2(a,b) ((a)>(b)?(a):(b)) - #define MAX_3(a,...) MAX_2(a,MAX_2(__VA_ARGS__)) - #define MAX_4(a,...) MAX_2(a,MAX_3(__VA_ARGS__)) - #define MAX_5(a,...) MAX_2(a,MAX_4(__VA_ARGS__)) - #define MAX_6(a,...) MAX_2(a,MAX_5(__VA_ARGS__)) - #define MAX_7(a,...) MAX_2(a,MAX_6(__VA_ARGS__)) - #define MAX_8(a,...) MAX_2(a,MAX_7(__VA_ARGS__)) - #define MAX_9(a,...) MAX_2(a,MAX_8(__VA_ARGS__)) - #define MAX_10(a,...) MAX_2(a,MAX_9(__VA_ARGS__)) - #define __MAX_N(N, ...) MAX_##N(__VA_ARGS__) - #define _MAX_N(N, ...) __MAX_N(N,__VA_ARGS__) - #define _MAX(...) _MAX_N(NUM_ARGS(__VA_ARGS__), __VA_ARGS__) + #define MAX_3(a,V...) MAX_2(a,MAX_2(V)) + #define MAX_4(a,V...) MAX_2(a,MAX_3(V)) + #define MAX_5(a,V...) MAX_2(a,MAX_4(V)) + #define MAX_6(a,V...) MAX_2(a,MAX_5(V)) + #define MAX_7(a,V...) MAX_2(a,MAX_6(V)) + #define MAX_8(a,V...) MAX_2(a,MAX_7(V)) + #define MAX_9(a,V...) MAX_2(a,MAX_8(V)) + #define MAX_10(a,V...) MAX_2(a,MAX_9(V)) + #define __MAX_N(N,V...) MAX_##N(V) + #define _MAX_N(N,V...) __MAX_N(N,V) + #define _MAX(V...) _MAX_N(NUM_ARGS(V), V) #endif diff --git a/Marlin/src/core/utility.h b/Marlin/src/core/utility.h index a9e23b5e188a..4ae6a96713b6 100644 --- a/Marlin/src/core/utility.h +++ b/Marlin/src/core/utility.h @@ -59,7 +59,7 @@ class restorer { inline void restore() { ref_ = val_; } }; -#define REMEMBER(N,X, ...) const restorer restorer_##N(X, ##__VA_ARGS__) +#define REMEMBER(N,X,V...) const restorer restorer_##N(X, ##V) #define RESTORE(N) restorer_##N.restore() // Converts from an uint8_t in the range of 0-255 to an uint8_t diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 1231bc0b9128..829fb7c5fbc7 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -534,13 +534,13 @@ /** * ARRAY_BY_EXTRUDERS based on EXTRUDERS */ -#define ARRAY_BY_EXTRUDERS(...) ARRAY_N(EXTRUDERS, __VA_ARGS__) +#define ARRAY_BY_EXTRUDERS(V...) ARRAY_N(EXTRUDERS, V) #define ARRAY_BY_EXTRUDERS1(v1) ARRAY_BY_EXTRUDERS(v1, v1, v1, v1, v1, v1) /** * ARRAY_BY_HOTENDS based on HOTENDS */ -#define ARRAY_BY_HOTENDS(...) ARRAY_N(HOTENDS, __VA_ARGS__) +#define ARRAY_BY_HOTENDS(V...) ARRAY_N(HOTENDS, V) #define ARRAY_BY_HOTENDS1(v1) ARRAY_BY_HOTENDS(v1, v1, v1, v1, v1, v1) /** diff --git a/Marlin/src/lcd/menu/menu.h b/Marlin/src/lcd/menu/menu.h index 98aa2a2b7995..145297b0aa1a 100644 --- a/Marlin/src/lcd/menu/menu.h +++ b/Marlin/src/lcd/menu/menu.h @@ -306,30 +306,30 @@ class MenuItem_bool { * MenuItem_int3::action_edit(PSTR(MSG_SPEED), &feedrate_percentage, 10, 999) * */ -#define _MENU_ITEM_VARIANT_P(TYPE, VARIANT, USE_MULTIPLIER, PLABEL, ...) do { \ +#define _MENU_ITEM_VARIANT_P(TYPE, VARIANT, USE_MULTIPLIER, PLABEL, V...) do { \ _skipStatic = false; \ if (_menuLineNr == _thisItemNr) { \ if (encoderLine == _thisItemNr && ui.use_click()) { \ _MENU_ITEM_MULTIPLIER_CHECK(USE_MULTIPLIER); \ - MenuItem_##TYPE ::action ## VARIANT(__VA_ARGS__); \ + MenuItem_##TYPE ::action ## VARIANT(V); \ if (screen_changed) return; \ } \ if (ui.should_draw()) \ - draw_menu_item ## VARIANT ## _ ## TYPE(encoderLine == _thisItemNr, _lcdLineNr, PLABEL, ## __VA_ARGS__); \ + draw_menu_item ## VARIANT ## _ ## TYPE(encoderLine == _thisItemNr, _lcdLineNr, PLABEL, ##V); \ } \ ++_thisItemNr; \ }while(0) // Used to print static text with no visible cursor. // Parameters: label [, bool center [, bool invert [, char *value] ] ] -#define STATIC_ITEM_P(PLABEL, ...) do{ \ +#define STATIC_ITEM_P(PLABEL, V...) do{ \ if (_menuLineNr == _thisItemNr) { \ if (_skipStatic && encoderLine <= _thisItemNr) { \ ui.encoderPosition += ENCODER_STEPS_PER_MENU_ITEM; \ ++encoderLine; \ } \ if (ui.should_draw()) \ - draw_menu_item_static(_lcdLineNr, PLABEL, ## __VA_ARGS__); \ + draw_menu_item_static(_lcdLineNr, PLABEL, ##V); \ } \ ++_thisItemNr; \ } while(0) @@ -340,16 +340,16 @@ class MenuItem_bool { #define MENU_ITEM_ADDON_END() } }while(0) -#define STATIC_ITEM(LABEL, ...) STATIC_ITEM_P(PSTR(LABEL), ## __VA_ARGS__) +#define STATIC_ITEM(LABEL, V...) STATIC_ITEM_P(PSTR(LABEL), ##V) #define MENU_BACK(LABEL) MENU_ITEM(back, LABEL) #define MENU_ITEM_DUMMY() do { _thisItemNr++; }while(0) -#define MENU_ITEM_P(TYPE, PLABEL, ...) _MENU_ITEM_VARIANT_P(TYPE, , false, PLABEL, ## __VA_ARGS__) -#define MENU_ITEM(TYPE, LABEL, ...) _MENU_ITEM_VARIANT_P(TYPE, , false, PSTR(LABEL), ## __VA_ARGS__) -#define MENU_ITEM_EDIT(TYPE, LABEL, ...) _MENU_ITEM_VARIANT_P(TYPE, _edit, false, PSTR(LABEL), PSTR(LABEL), ## __VA_ARGS__) -#define MENU_ITEM_EDIT_CALLBACK(TYPE, LABEL, ...) _MENU_ITEM_VARIANT_P(TYPE, _edit, false, PSTR(LABEL), PSTR(LABEL), ## __VA_ARGS__) -#define MENU_MULTIPLIER_ITEM_EDIT(TYPE, LABEL, ...) _MENU_ITEM_VARIANT_P(TYPE, _edit, true, PSTR(LABEL), PSTR(LABEL), ## __VA_ARGS__) -#define MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(TYPE, LABEL, ...) _MENU_ITEM_VARIANT_P(TYPE, _edit, true, PSTR(LABEL), PSTR(LABEL), ## __VA_ARGS__) +#define MENU_ITEM_P(TYPE, PLABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, , false, PLABEL, ##V) +#define MENU_ITEM(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, , false, PSTR(LABEL), ##V) +#define MENU_ITEM_EDIT(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, false, PSTR(LABEL), PSTR(LABEL), ##V) +#define MENU_ITEM_EDIT_CALLBACK(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, false, PSTR(LABEL), PSTR(LABEL), ##V) +#define MENU_MULTIPLIER_ITEM_EDIT(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, true, PSTR(LABEL), PSTR(LABEL), ##V) +#define MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, true, PSTR(LABEL), PSTR(LABEL), ##V) //////////////////////////////////////////// /////////////// Menu Screens /////////////// From d683f980195fec994b07193006495499adc7f795 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 27 Sep 2019 02:59:49 -0500 Subject: [PATCH 067/120] Return buffer in duration.toString --- Marlin/src/gcode/stats/M31.cpp | 4 ++-- Marlin/src/lcd/extensible_ui/ui_api.cpp | 4 ++-- Marlin/src/lcd/menu/menu_info.cpp | 21 +++++---------------- Marlin/src/libs/duration_t.h | 3 ++- Marlin/src/module/printcounter.cpp | 4 +--- 5 files changed, 12 insertions(+), 24 deletions(-) diff --git a/Marlin/src/gcode/stats/M31.cpp b/Marlin/src/gcode/stats/M31.cpp index 39c922071c40..fdad76e99a85 100644 --- a/Marlin/src/gcode/stats/M31.cpp +++ b/Marlin/src/gcode/stats/M31.cpp @@ -31,8 +31,8 @@ */ void GcodeSuite::M31() { char buffer[21]; - duration_t elapsed = print_job_timer.duration(); - elapsed.toString(buffer); + duration_t(print_job_timer.duration()).toString(buffer); + ui.set_status(buffer); SERIAL_ECHO_START(); diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp index 0b80def5c9ec..5035e0cebdf6 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.cpp +++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp @@ -842,8 +842,8 @@ namespace ExtUI { #if ENABLED(PRINTCOUNTER) char* getTotalPrints_str(char buffer[21]) { strcpy(buffer,i16tostr3left(print_job_timer.getStats().totalPrints)); return buffer; } char* getFinishedPrints_str(char buffer[21]) { strcpy(buffer,i16tostr3left(print_job_timer.getStats().finishedPrints)); return buffer; } - char* getTotalPrintTime_str(char buffer[21]) { duration_t(print_job_timer.getStats().printTime).toString(buffer); return buffer; } - char* getLongestPrint_str(char buffer[21]) { duration_t(print_job_timer.getStats().longestPrint).toString(buffer); return buffer; } + char* getTotalPrintTime_str(char buffer[21]) { return duration_t(print_job_timer.getStats().printTime).toString(buffer); } + char* getLongestPrint_str(char buffer[21]) { return duration_t(print_job_timer.getStats().longestPrint).toString(buffer); } char* getFilamentUsed_str(char buffer[21]) { printStatistics stats = print_job_timer.getStats(); sprintf_P(buffer, PSTR("%ld.%im"), long(stats.filamentUsed / 1000), int16_t(stats.filamentUsed / 100) % 10); diff --git a/Marlin/src/lcd/menu/menu_info.cpp b/Marlin/src/lcd/menu/menu_info.cpp index 86e86dbdee71..acc780f29626 100644 --- a/Marlin/src/lcd/menu/menu_info.cpp +++ b/Marlin/src/lcd/menu/menu_info.cpp @@ -59,40 +59,29 @@ STATIC_PAIR(MSG_INFO_PRINT_COUNT, i16tostr3left(stats.totalPrints), false); // Print Count: 999 STATIC_PAIR(MSG_INFO_COMPLETED_PRINTS, i16tostr3left(stats.finishedPrints), false); // Completed : 666 - duration_t elapsed = stats.printTime; - elapsed.toString(buffer); - STATIC_PAIR_P(MSG_INFO_PRINT_TIME, "", false); // Total print Time: - STATIC_ITEM("> ", false, false, buffer); // > 99y 364d 23h 59m 59s + STATIC_ITEM("> ", false, false, duration_t(stats.printTime).toString(buffer)); // > 99y 364d 23h 59m 59s STATIC_PAIR_P(MSG_INFO_PRINT_LONGEST, "", false); // Longest job time: - elapsed = stats.longestPrint; - elapsed.toString(buffer); - STATIC_ITEM("> ", false, false, buffer); // > 99y 364d 23h 59m 59s + STATIC_ITEM("> ", false, false, duration_t(stats.longestPrint).toString(buffer)); // > 99y 364d 23h 59m 59s STATIC_PAIR_P(MSG_INFO_PRINT_FILAMENT, "", false); // Extruded total: sprintf_P(buffer, PSTR("%ld.%im"), long(stats.filamentUsed / 1000), int16_t(stats.filamentUsed / 100) % 10); STATIC_ITEM("> ", false, false, buffer); // > 125m #if SERVICE_INTERVAL_1 > 0 - elapsed = stats.nextService1; - elapsed.toString(buffer); STATIC_ITEM(SERVICE_NAME_1 MSG_SERVICE_IN, false, false); // Service X in: - STATIC_ITEM("> ", false, false, buffer); // > 7d 12h 11m 10s + STATIC_ITEM("> ", false, false, duration_t(stats.nextService1).toString(buffer)); // > 7d 12h 11m 10s #endif #if SERVICE_INTERVAL_2 > 0 - elapsed = stats.nextService2; - elapsed.toString(buffer); STATIC_ITEM(SERVICE_NAME_2 MSG_SERVICE_IN, false, false); - STATIC_ITEM("> ", false, false, buffer); + STATIC_ITEM("> ", false, false, duration_t(stats.nextService2).toString(buffer)); #endif #if SERVICE_INTERVAL_3 > 0 - elapsed = stats.nextService3; - elapsed.toString(buffer); STATIC_ITEM(SERVICE_NAME_3 MSG_SERVICE_IN, false, false); - STATIC_ITEM("> ", false, false, buffer); + STATIC_ITEM("> ", false, false, duration_t(stats.nextService3).toString(buffer)); #endif END_SCREEN(); diff --git a/Marlin/src/libs/duration_t.h b/Marlin/src/libs/duration_t.h index c376e5dae27b..2015c17436f9 100644 --- a/Marlin/src/libs/duration_t.h +++ b/Marlin/src/libs/duration_t.h @@ -120,7 +120,7 @@ struct duration_t { * 59m 59s * 59s */ - void toString(char *buffer) const { + char* toString(char * const buffer) const { int y = this->year(), d = this->day() % 365, h = this->hour() % 24, @@ -132,6 +132,7 @@ struct duration_t { else if (h) sprintf_P(buffer, PSTR("%ih %im %is"), h, m, s); else if (m) sprintf_P(buffer, PSTR("%im %is"), m, s); else sprintf_P(buffer, PSTR("%is"), s); + return buffer; } /** diff --git a/Marlin/src/module/printcounter.cpp b/Marlin/src/module/printcounter.cpp index ba308142e440..cef233d9acfd 100644 --- a/Marlin/src/module/printcounter.cpp +++ b/Marlin/src/module/printcounter.cpp @@ -183,11 +183,9 @@ void PrintCounter::saveStats() { #if HAS_SERVICE_INTERVALS inline void _service_when(char buffer[], const char * const msg, const uint32_t when) { - duration_t elapsed = when; - elapsed.toString(buffer); SERIAL_ECHOPGM(MSG_STATS); serialprintPGM(msg); - SERIAL_ECHOLNPAIR(" in ", buffer); + SERIAL_ECHOLNPAIR(" in ", duration_t(when).toString(buffer)); } #endif From 4c16661153b5035c2c8b4ed9eccce6307ae5ebb4 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 27 Sep 2019 03:06:23 -0500 Subject: [PATCH 068/120] Use named styles in draw_menu_item_static --- Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp | 7 +- Marlin/src/lcd/dogm/ultralcd_DOGM.cpp | 8 +- Marlin/src/lcd/menu/menu.h | 6 +- Marlin/src/lcd/menu/menu_configuration.cpp | 2 +- Marlin/src/lcd/menu/menu_filament.cpp | 8 +- Marlin/src/lcd/menu/menu_info.cpp | 116 ++++++++++---------- Marlin/src/lcd/menu/menu_led.cpp | 2 +- Marlin/src/lcd/menu/menu_mmu2.cpp | 4 +- Marlin/src/lcd/menu/menu_motion.cpp | 8 +- 9 files changed, 84 insertions(+), 77 deletions(-) diff --git a/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp b/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp index b16a298659a4..146563750437 100644 --- a/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp +++ b/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp @@ -965,6 +965,8 @@ void MarlinUI::draw_status_screen() { #if HAS_LCD_MENU + #include "../menu/menu.h" + #if ENABLED(ADVANCED_PAUSE_FEATURE) void MarlinUI::draw_hotend_status(const uint8_t row, const uint8_t extruder) { @@ -976,11 +978,10 @@ void MarlinUI::draw_status_screen() { #endif // ADVANCED_PAUSE_FEATURE - void draw_menu_item_static(const uint8_t row, PGM_P pstr, const bool center/*=true*/, const bool invert/*=false*/, const char *valstr/*=nullptr*/) { - UNUSED(invert); + void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const uint8_t style/*=SS_CENTER*/, const char * const valstr/*=nullptr*/) { int8_t n = LCD_WIDTH; lcd_moveto(0, row); - if (center && !valstr) { + if ((style & SS_CENTER) && !valstr) { int8_t pad = (LCD_WIDTH - utf8_strlen_P(pstr)) / 2; while (--pad >= 0) { lcd_put_wchar(' '); n--; } } diff --git a/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp b/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp index 02c953234909..7eb51eea4d61 100644 --- a/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp +++ b/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp @@ -309,6 +309,8 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop #if HAS_LCD_MENU + #include "../menu/menu.h" + u8g_uint_t row_y1, row_y2; #if ENABLED(ADVANCED_PAUSE_FEATURE) @@ -361,13 +363,13 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop } // Draw a static line of text in the same idiom as a menu item - void draw_menu_item_static(const uint8_t row, PGM_P pstr, const bool center/*=true*/, const bool invert/*=false*/, const char* valstr/*=nullptr*/) { + void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const uint8_t style/*=SS_CENTER*/, const char * const valstr/*=nullptr*/) { - if (mark_as_selected(row, invert)) { + if (mark_as_selected(row, (style & SS_INVERT))) { u8g_uint_t n = LCD_PIXEL_WIDTH; // pixel width of string allowed - if (center && !valstr) { + if ((style & SS_CENTER) && !valstr) { int8_t pad = (LCD_WIDTH - utf8_strlen_P(pstr)) / 2; while (--pad >= 0) { lcd_put_wchar(' '); n--; } } diff --git a/Marlin/src/lcd/menu/menu.h b/Marlin/src/lcd/menu/menu.h index 145297b0aa1a..0b638bc47a6d 100644 --- a/Marlin/src/lcd/menu/menu.h +++ b/Marlin/src/lcd/menu/menu.h @@ -78,9 +78,13 @@ inline void do_select_screen_yn(selectFunc_t yesFunc, selectFunc_t noFunc, PGM_P do_select_screen(PSTR(MSG_YES), PSTR(MSG_NO), yesFunc, noFunc, pref, string, suff); } +#define SS_LEFT 0x00 +#define SS_CENTER 0x01 +#define SS_INVERT 0x02 + void draw_edit_screen(PGM_P const pstr, const char* const value=nullptr); void draw_menu_item(const bool sel, const uint8_t row, PGM_P const pstr, const char pre_char, const char post_char); -void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const bool center=true, const bool invert=false, const char *valstr=nullptr); +void draw_menu_item_static(const uint8_t row, PGM_P const pstr, const uint8_t style=SS_CENTER, const char * const valstr=nullptr); void _draw_menu_item_edit(const bool sel, const uint8_t row, PGM_P const pstr, const char* const data, const bool pgm); FORCE_INLINE void draw_menu_item_back(const bool sel, const uint8_t row, PGM_P const pstr) { draw_menu_item(sel, row, pstr, LCD_STR_UPLEVEL[0], LCD_STR_UPLEVEL[0]); } FORCE_INLINE void draw_menu_item_edit(const bool sel, const uint8_t row, PGM_P const pstr, const char* const data) { _draw_menu_item_edit(sel, row, pstr, data, false); } diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index 8b549a948f9a..8708c7d96fbb 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -75,7 +75,7 @@ static void lcd_factory_settings() { bar_percent += (int8_t)ui.encoderPosition; LIMIT(bar_percent, 0, 100); ui.encoderPosition = 0; - draw_menu_item_static(0, PSTR(MSG_PROGRESS_BAR_TEST), true, true); + draw_menu_item_static(0, PSTR(MSG_PROGRESS_BAR_TEST), SS_CENTER|SS_INVERT); lcd_put_int((LCD_WIDTH) / 2 - 2, LCD_HEIGHT - 2, bar_percent); lcd_put_wchar('%'); lcd_moveto(0, LCD_HEIGHT - 1); ui.draw_progress_bar(bar_percent); } diff --git a/Marlin/src/lcd/menu/menu_filament.cpp b/Marlin/src/lcd/menu/menu_filament.cpp index d76a6aa77e88..474e326667cd 100644 --- a/Marlin/src/lcd/menu/menu_filament.cpp +++ b/Marlin/src/lcd/menu/menu_filament.cpp @@ -79,7 +79,7 @@ void _menu_temp_filament_op(const PauseMode mode, const int8_t extruder) { _change_filament_temp_mode = mode; _change_filament_temp_extruder = extruder; START_MENU(); - if (LCD_HEIGHT >= 4) STATIC_ITEM_P(change_filament_header(mode), true, true); + if (LCD_HEIGHT >= 4) STATIC_ITEM_P(change_filament_header(mode), SS_CENTER|SS_INVERT); MENU_BACK(MSG_BACK); MENU_ITEM(function, MSG_PREHEAT_1, _lcd_change_filament_temp_1_func); MENU_ITEM(function, MSG_PREHEAT_2, _lcd_change_filament_temp_2_func); @@ -328,7 +328,7 @@ static PGM_P pause_header() { #define HOTEND_STATUS_ITEM() do { \ if (_menuLineNr == _thisItemNr) { \ if (ui.should_draw()) { \ - draw_menu_item_static(_lcdLineNr, PSTR(MSG_FILAMENT_CHANGE_NOZZLE), false, true); \ + draw_menu_item_static(_lcdLineNr, PSTR(MSG_FILAMENT_CHANGE_NOZZLE), SS_INVERT); \ ui.draw_hotend_status(_lcdLineNr, hotend_status_extruder); \ } \ if (_skipStatic && encoderLine <= _thisItemNr) { \ @@ -351,7 +351,7 @@ void lcd_pause_extrude_more() { void menu_pause_option() { START_MENU(); #if LCD_HEIGHT > 2 - STATIC_ITEM(MSG_FILAMENT_CHANGE_OPTION_HEADER, true, false); + STATIC_ITEM(MSG_FILAMENT_CHANGE_OPTION_HEADER); #endif MENU_ITEM(function, MSG_FILAMENT_CHANGE_OPTION_PURGE, lcd_pause_extrude_more); #if HAS_FILAMENT_SENSOR @@ -369,7 +369,7 @@ void menu_pause_option() { void _lcd_pause_message(PGM_P const msg1, PGM_P const msg2=nullptr, PGM_P const msg3=nullptr) { START_SCREEN(); - STATIC_ITEM_P(pause_header(), true, true); + STATIC_ITEM_P(pause_header(), SS_CENTER|SS_INVERT); STATIC_ITEM_P(msg1); if (msg2) STATIC_ITEM_P(msg2); if (msg3 && (LCD_HEIGHT) >= 5) STATIC_ITEM_P(msg3); diff --git a/Marlin/src/lcd/menu/menu_info.cpp b/Marlin/src/lcd/menu/menu_info.cpp index acc780f29626..7732bd7eb679 100644 --- a/Marlin/src/lcd/menu/menu_info.cpp +++ b/Marlin/src/lcd/menu/menu_info.cpp @@ -34,8 +34,8 @@ #include "game/game.h" #endif -#define STATIC_PAIR(MSG, VALUE, CNTR) do{ strcpy_P(buffer, PSTR(": ")); strcpy(buffer + 2, VALUE); STATIC_ITEM(MSG, CNTR, false, buffer); }while(0) -#define STATIC_PAIR_P(MSG, PVALUE, CNTR) do{ strcpy_P(buffer, PSTR(": ")); strcpy_P(buffer + 2, PSTR(PVALUE)); STATIC_ITEM(MSG, CNTR, false, buffer); }while(0) +#define STATIC_PAIR(MSG, VALUE, STYL) do{ strcpy_P(buffer, PSTR(": ")); strcpy(buffer + 2, VALUE); STATIC_ITEM(MSG, STYL, buffer); }while(0) +#define STATIC_PAIR_P(MSG, PVALUE, STYL) do{ strcpy_P(buffer, PSTR(": ")); strcpy_P(buffer + 2, PSTR(PVALUE)); STATIC_ITEM(MSG, STYL, buffer); }while(0) #if ENABLED(PRINTCOUNTER) @@ -55,33 +55,33 @@ printStatistics stats = print_job_timer.getStats(); - START_SCREEN(); // 12345678901234567890 - STATIC_PAIR(MSG_INFO_PRINT_COUNT, i16tostr3left(stats.totalPrints), false); // Print Count: 999 - STATIC_PAIR(MSG_INFO_COMPLETED_PRINTS, i16tostr3left(stats.finishedPrints), false); // Completed : 666 + START_SCREEN(); // 12345678901234567890 + STATIC_PAIR(MSG_INFO_PRINT_COUNT, i16tostr3left(stats.totalPrints), SS_LEFT); // Print Count: 999 + STATIC_PAIR(MSG_INFO_COMPLETED_PRINTS, i16tostr3left(stats.finishedPrints), SS_LEFT); // Completed : 666 - STATIC_PAIR_P(MSG_INFO_PRINT_TIME, "", false); // Total print Time: - STATIC_ITEM("> ", false, false, duration_t(stats.printTime).toString(buffer)); // > 99y 364d 23h 59m 59s + STATIC_PAIR_P(MSG_INFO_PRINT_TIME, "", SS_LEFT); // Total print Time: + STATIC_ITEM("> ", SS_LEFT, duration_t(stats.printTime).toString(buffer)); // > 99y 364d 23h 59m 59s - STATIC_PAIR_P(MSG_INFO_PRINT_LONGEST, "", false); // Longest job time: - STATIC_ITEM("> ", false, false, duration_t(stats.longestPrint).toString(buffer)); // > 99y 364d 23h 59m 59s + STATIC_PAIR_P(MSG_INFO_PRINT_LONGEST, "", SS_LEFT); // Longest job time: + STATIC_ITEM("> ", SS_LEFT, duration_t(stats.longestPrint).toString(buffer)); // > 99y 364d 23h 59m 59s - STATIC_PAIR_P(MSG_INFO_PRINT_FILAMENT, "", false); // Extruded total: + STATIC_PAIR_P(MSG_INFO_PRINT_FILAMENT, "", SS_LEFT); // Extruded total: sprintf_P(buffer, PSTR("%ld.%im"), long(stats.filamentUsed / 1000), int16_t(stats.filamentUsed / 100) % 10); - STATIC_ITEM("> ", false, false, buffer); // > 125m + STATIC_ITEM("> ", SS_LEFT, buffer); // > 125m #if SERVICE_INTERVAL_1 > 0 - STATIC_ITEM(SERVICE_NAME_1 MSG_SERVICE_IN, false, false); // Service X in: - STATIC_ITEM("> ", false, false, duration_t(stats.nextService1).toString(buffer)); // > 7d 12h 11m 10s + STATIC_ITEM(SERVICE_NAME_1 MSG_SERVICE_IN, SS_LEFT); // Service X in: + STATIC_ITEM("> ", SS_LEFT, duration_t(stats.nextService1).toString(buffer)); // > 7d 12h 11m 10s #endif #if SERVICE_INTERVAL_2 > 0 - STATIC_ITEM(SERVICE_NAME_2 MSG_SERVICE_IN, false, false); - STATIC_ITEM("> ", false, false, duration_t(stats.nextService2).toString(buffer)); + STATIC_ITEM(SERVICE_NAME_2 MSG_SERVICE_IN, SS_LEFT); + STATIC_ITEM("> ", SS_LEFT, duration_t(stats.nextService2).toString(buffer)); #endif #if SERVICE_INTERVAL_3 > 0 - STATIC_ITEM(SERVICE_NAME_3 MSG_SERVICE_IN, false, false); - STATIC_ITEM("> ", false, false, duration_t(stats.nextService3).toString(buffer)); + STATIC_ITEM(SERVICE_NAME_3 MSG_SERVICE_IN, SS_LEFT); + STATIC_ITEM("> ", SS_LEFT, duration_t(stats.nextService3).toString(buffer)); #endif END_SCREEN(); @@ -105,63 +105,63 @@ void menu_info_thermistors() { #if EXTRUDERS #define THERMISTOR_ID TEMP_SENSOR_0 #include "../thermistornames.h" - STATIC_ITEM("T0: " THERMISTOR_NAME, false, true); - STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_0_MINTEMP), false); - STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_0_MAXTEMP), false); + STATIC_ITEM("T0: " THERMISTOR_NAME, SS_INVERT); + STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_0_MINTEMP), SS_LEFT); + STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_0_MAXTEMP), SS_LEFT); #endif #if TEMP_SENSOR_1 != 0 #undef THERMISTOR_ID #define THERMISTOR_ID TEMP_SENSOR_1 #include "../thermistornames.h" - STATIC_ITEM("T1: " THERMISTOR_NAME, false, true); - STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_1_MINTEMP), false); - STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_1_MAXTEMP), false); + STATIC_ITEM("T1: " THERMISTOR_NAME, SS_INVERT); + STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_1_MINTEMP), SS_LEFT); + STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_1_MAXTEMP), SS_LEFT); #endif #if TEMP_SENSOR_2 != 0 #undef THERMISTOR_ID #define THERMISTOR_ID TEMP_SENSOR_2 #include "../thermistornames.h" - STATIC_ITEM("T2: " THERMISTOR_NAME, false, true); - STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_2_MINTEMP), false); - STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_2_MAXTEMP), false); + STATIC_ITEM("T2: " THERMISTOR_NAME, SS_INVERT); + STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_2_MINTEMP), SS_LEFT); + STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_2_MAXTEMP), SS_LEFT); #endif #if TEMP_SENSOR_3 != 0 #undef THERMISTOR_ID #define THERMISTOR_ID TEMP_SENSOR_3 #include "../thermistornames.h" - STATIC_ITEM("T3: " THERMISTOR_NAME, false, true); - STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_3_MINTEMP), false); - STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_3_MAXTEMP), false); + STATIC_ITEM("T3: " THERMISTOR_NAME, SS_INVERT); + STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_3_MINTEMP), SS_LEFT); + STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_3_MAXTEMP), SS_LEFT); #endif #if TEMP_SENSOR_4 != 0 #undef THERMISTOR_ID #define THERMISTOR_ID TEMP_SENSOR_4 #include "../thermistornames.h" - STATIC_ITEM("T4: " THERMISTOR_NAME, false, true); - STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_4_MINTEMP), false); - STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_4_MAXTEMP), false); + STATIC_ITEM("T4: " THERMISTOR_NAME, SS_INVERT); + STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_4_MINTEMP), SS_LEFT); + STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_4_MAXTEMP), SS_LEFT); #endif #if TEMP_SENSOR_5 != 0 #undef THERMISTOR_ID #define THERMISTOR_ID TEMP_SENSOR_5 #include "../thermistornames.h" - STATIC_ITEM("T5: " THERMISTOR_NAME, false, true); - STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_5_MINTEMP), false); - STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_5_MAXTEMP), false); + STATIC_ITEM("T5: " THERMISTOR_NAME, SS_INVERT); + STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(HEATER_5_MINTEMP), SS_LEFT); + STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_5_MAXTEMP), SS_LEFT); #endif #if HAS_HEATED_BED #undef THERMISTOR_ID #define THERMISTOR_ID TEMP_SENSOR_BED #include "../thermistornames.h" - STATIC_ITEM("TBed:" THERMISTOR_NAME, false, true); - STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(BED_MINTEMP), false); - STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(BED_MAXTEMP), false); + STATIC_ITEM("TBed:" THERMISTOR_NAME, SS_INVERT); + STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(BED_MINTEMP), SS_LEFT); + STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(BED_MAXTEMP), SS_LEFT); #endif END_SCREEN(); } @@ -179,13 +179,13 @@ void menu_info_board() { char buffer[21]; // for STATIC_PAIR_P START_SCREEN(); - STATIC_ITEM(BOARD_INFO_NAME, true, true); // MyPrinterController + STATIC_ITEM(BOARD_INFO_NAME, SS_CENTER|SS_INVERT); // MyPrinterController #ifdef BOARD_WEBSITE_URL - STATIC_ITEM(BOARD_WEBSITE_URL, false, false); // www.my3dprinter.com + STATIC_ITEM(BOARD_WEBSITE_URL, SS_LEFT); // www.my3dprinter.com #endif - STATIC_PAIR_P(MSG_INFO_BAUDRATE, STRINGIFY(BAUDRATE), true); // Baud: 250000 - STATIC_PAIR_P(MSG_INFO_PROTOCOL, PROTOCOL_VERSION, true); // Protocol: 1.0 - STATIC_PAIR_P(MSG_INFO_PSU, PSU_NAME, true); + STATIC_PAIR_P(MSG_INFO_BAUDRATE, STRINGIFY(BAUDRATE), SS_CENTER); // Baud: 250000 + STATIC_PAIR_P(MSG_INFO_PROTOCOL, PROTOCOL_VERSION, SS_CENTER); // Protocol: 1.0 + STATIC_PAIR_P(MSG_INFO_PSU, PSU_NAME, SS_CENTER); END_SCREEN(); } @@ -215,22 +215,22 @@ void menu_info_board() { #endif ); START_SCREEN(); - STATIC_ITEM(MSG_MARLIN, true, true); // Marlin - STATIC_ITEM(SHORT_BUILD_VERSION, true); // x.x.x-Branch - STATIC_ITEM(STRING_DISTRIBUTION_DATE, true); // YYYY-MM-DD HH:MM - STATIC_ITEM(MACHINE_NAME, true); // My3DPrinter - STATIC_ITEM(WEBSITE_URL, true); // www.my3dprinter.com - STATIC_ITEM(MSG_INFO_EXTRUDERS ": " STRINGIFY(EXTRUDERS), true); // Extruders: 2 + STATIC_ITEM(MSG_MARLIN, SS_CENTER|SS_INVERT); // Marlin + STATIC_ITEM(SHORT_BUILD_VERSION); // x.x.x-Branch + STATIC_ITEM(STRING_DISTRIBUTION_DATE); // YYYY-MM-DD HH:MM + STATIC_ITEM(MACHINE_NAME); // My3DPrinter + STATIC_ITEM(WEBSITE_URL); // www.my3dprinter.com + STATIC_ITEM(MSG_INFO_EXTRUDERS ": " STRINGIFY(EXTRUDERS)); // Extruders: 2 #if ENABLED(AUTO_BED_LEVELING_3POINT) - STATIC_ITEM(MSG_3POINT_LEVELING, true); // 3-Point Leveling + STATIC_ITEM(MSG_3POINT_LEVELING); // 3-Point Leveling #elif ENABLED(AUTO_BED_LEVELING_LINEAR) - STATIC_ITEM(MSG_LINEAR_LEVELING, true); // Linear Leveling + STATIC_ITEM(MSG_LINEAR_LEVELING); // Linear Leveling #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) - STATIC_ITEM(MSG_BILINEAR_LEVELING, true); // Bi-linear Leveling + STATIC_ITEM(MSG_BILINEAR_LEVELING); // Bi-linear Leveling #elif ENABLED(AUTO_BED_LEVELING_UBL) - STATIC_ITEM(MSG_UBL_LEVELING, true); // Unified Bed Leveling + STATIC_ITEM(MSG_UBL_LEVELING); // Unified Bed Leveling #elif ENABLED(MESH_BED_LEVELING) - STATIC_ITEM(MSG_MESH_LEVELING, true); // Mesh Leveling + STATIC_ITEM(MSG_MESH_LEVELING); // Mesh Leveling #endif END_SCREEN(); } @@ -252,15 +252,15 @@ void menu_info() { #endif )); #else - MENU_ITEM(submenu, MSG_INFO_PRINTER_MENU, menu_info_printer); // Printer Info > - MENU_ITEM(submenu, MSG_INFO_BOARD_MENU, menu_info_board); // Board Info > + MENU_ITEM(submenu, MSG_INFO_PRINTER_MENU, menu_info_printer); // Printer Info > + MENU_ITEM(submenu, MSG_INFO_BOARD_MENU, menu_info_board); // Board Info > #if EXTRUDERS - MENU_ITEM(submenu, MSG_INFO_THERMISTOR_MENU, menu_info_thermistors); // Thermistors > + MENU_ITEM(submenu, MSG_INFO_THERMISTOR_MENU, menu_info_thermistors); // Thermistors > #endif #endif #if ENABLED(PRINTCOUNTER) - MENU_ITEM(submenu, MSG_INFO_STATS_MENU, menu_info_stats); // Printer Stats > + MENU_ITEM(submenu, MSG_INFO_STATS_MENU, menu_info_stats); // Printer Stats > #endif #if HAS_GAMES diff --git a/Marlin/src/lcd/menu/menu_led.cpp b/Marlin/src/lcd/menu/menu_led.cpp index a84a8c01f50c..5ccac8a0ee0a 100644 --- a/Marlin/src/lcd/menu/menu_led.cpp +++ b/Marlin/src/lcd/menu/menu_led.cpp @@ -36,7 +36,7 @@ void menu_led_presets() { START_MENU(); #if LCD_HEIGHT > 2 - STATIC_ITEM(MSG_LED_PRESETS, true, true); + STATIC_ITEM(MSG_LED_PRESETS, SS_CENTER|SS_INVERT); #endif MENU_BACK(MSG_LED_CONTROL); MENU_ITEM(function, MSG_SET_LEDS_WHITE, leds.set_white); diff --git a/Marlin/src/lcd/menu/menu_mmu2.cpp b/Marlin/src/lcd/menu/menu_mmu2.cpp index a7dc4e839148..9a0908961e05 100644 --- a/Marlin/src/lcd/menu/menu_mmu2.cpp +++ b/Marlin/src/lcd/menu/menu_mmu2.cpp @@ -164,7 +164,7 @@ inline void action_mmu2_choose4() { action_mmu2_choose(4); } void menu_mmu2_choose_filament() { START_MENU(); #if LCD_HEIGHT > 2 - STATIC_ITEM(MSG_MMU2_CHOOSE_FILAMENT_HEADER, true, true); + STATIC_ITEM(MSG_MMU2_CHOOSE_FILAMENT_HEADER, SS_CENTER|SS_INVERT); #endif MENU_ITEM(function, MSG_MMU2_FILAMENT0, action_mmu2_choose0); MENU_ITEM(function, MSG_MMU2_FILAMENT1, action_mmu2_choose1); @@ -187,7 +187,7 @@ void menu_mmu2_pause() { currentTool = mmu2.get_current_tool(); START_MENU(); #if LCD_HEIGHT > 2 - STATIC_ITEM(MSG_MMU2_FILAMENT_CHANGE_HEADER, true, true); + STATIC_ITEM(MSG_MMU2_FILAMENT_CHANGE_HEADER, SS_CENTER|SS_INVERT); #endif MENU_ITEM(function, MSG_MMU2_RESUME, action_mmu2_M600_resume); MENU_ITEM(function, MSG_MMU2_UNLOAD_FILAMENT, action_mmu2_M600_unload_filament); diff --git a/Marlin/src/lcd/menu/menu_motion.cpp b/Marlin/src/lcd/menu/menu_motion.cpp index b0f713079dff..2a75c2693de6 100644 --- a/Marlin/src/lcd/menu/menu_motion.cpp +++ b/Marlin/src/lcd/menu/menu_motion.cpp @@ -262,14 +262,14 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int START_MENU(); if (LCD_HEIGHT >= 4) { switch (axis) { - case X_AXIS: STATIC_ITEM(MSG_MOVE_X, true, true); break; - case Y_AXIS: STATIC_ITEM(MSG_MOVE_Y, true, true); break; - case Z_AXIS: STATIC_ITEM(MSG_MOVE_Z, true, true); break; + case X_AXIS: STATIC_ITEM(MSG_MOVE_X, SS_CENTER|SS_INVERT); break; + case Y_AXIS: STATIC_ITEM(MSG_MOVE_Y, SS_CENTER|SS_INVERT); break; + case Z_AXIS: STATIC_ITEM(MSG_MOVE_Z, SS_CENTER|SS_INVERT); break; default: #if ENABLED(MANUAL_E_MOVES_RELATIVE) manual_move_e_origin = current_position[E_AXIS]; #endif - STATIC_ITEM(MSG_MOVE_E, true, true); + STATIC_ITEM(MSG_MOVE_E, SS_CENTER|SS_INVERT); break; } } From a8aca59c043b0cf768d199da0dd361d3e9e84866 Mon Sep 17 00:00:00 2001 From: Giuliano Zaro <3684609+GMagician@users.noreply.github.com> Date: Fri, 27 Sep 2019 20:05:53 +0200 Subject: [PATCH 069/120] Update Italian language (#15373) --- Marlin/src/lcd/language/language_it.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h index ffad3992af87..976460d2f298 100644 --- a/Marlin/src/lcd/language/language_it.h +++ b/Marlin/src/lcd/language/language_it.h @@ -35,9 +35,14 @@ #define MSG_YES _UxGT("SI") #define MSG_NO _UxGT("NO") #define MSG_BACK _UxGT("Indietro") +#define MSG_MEDIA_ABORTING _UxGT("Annullando...") #define MSG_MEDIA_INSERTED _UxGT("Media inserito") #define MSG_MEDIA_REMOVED _UxGT("Media rimosso") #define MSG_MEDIA_RELEASED _UxGT("Media rilasciato") +#define MSG_MEDIA_WAITING _UxGT("Aspettando media") +#define MSG_MEDIA_READ_ERROR _UxGT("Err.leggendo media") +#define MSG_MEDIA_USB_REMOVED _UxGT("Dispos.USB rimosso") +#define MSG_MEDIA_USB_FAILED _UxGT("Avvio USB fallito") #define MSG_LCD_ENDSTOPS _UxGT("Finecor.") // Max 8 caratteri #define MSG_LCD_SOFT_ENDSTOPS _UxGT("Finecorsa Soft") #define MSG_MAIN _UxGT("Menu principale") @@ -92,6 +97,7 @@ #define MSG_LEVEL_BED MSG_BED_LEVELING #define MSG_LEVEL_CORNERS _UxGT("Livella spigoli") #define MSG_NEXT_CORNER _UxGT("Prossimo spigolo") +#define MSG_MESH_EDITOR _UxGT("Editor Mesh") #define MSG_EDIT_MESH _UxGT("Modifica Mesh") #define MSG_EDITING_STOPPED _UxGT("Modif. Mesh Fermata") #define MSG_PROBING_MESH _UxGT("Punto sondato") @@ -140,6 +146,13 @@ #define MSG_UBL_VALIDATE_MESH_MENU _UxGT("Valida Mesh") #define MSG_UBL_VALIDATE_MESH_M1 _UxGT("Valida Mesh " PREHEAT_1_LABEL) #define MSG_UBL_VALIDATE_MESH_M2 _UxGT("Valida Mesh " PREHEAT_2_LABEL) +#define MSG_G26_HEATING_BED _UxGT("G26 riscald.letto") +#define MSG_G26_HEATING_NOZZLE _UxGT("G26 riscald.ugello") +#define MSG_G26_MANUAL_PRIME _UxGT("Priming manuale...") +#define MSG_G26_FIXED_LENGTH _UxGT("Prime a lung.fissa") +#define MSG_G26_PRIME_DONE _UxGT("Priming terminato") +#define MSG_G26_CANCELED _UxGT("G26 Annullato") +#define MSG_G26_LEAVING _UxGT("Uscita da G26") #define MSG_UBL_VALIDATE_CUSTOM_MESH _UxGT("Valida Mesh pers.") #define MSG_UBL_CONTINUE_MESH _UxGT("Continua Mesh") #define MSG_UBL_MESH_LEVELING _UxGT("Livell. Mesh") @@ -170,6 +183,7 @@ #define MSG_UBL_NO_STORAGE _UxGT("Nessuna memoria") #define MSG_UBL_SAVE_ERROR _UxGT("Err: Salvataggio UBL") #define MSG_UBL_RESTORE_ERROR _UxGT("Err: Ripristino UBL") +#define MSG_UBL_Z_OFFSET _UxGT("Z-Offset: ") #define MSG_UBL_Z_OFFSET_STOPPED _UxGT("Z-Offset Fermato") #define MSG_UBL_STEP_BY_STEP_MENU _UxGT("UBL passo passo") @@ -424,6 +438,7 @@ #define MSG_INFO_PSU _UxGT("Alimentatore") #define MSG_DRIVE_STRENGTH _UxGT("Potenza Drive") #define MSG_DAC_PERCENT _UxGT("Driver %") +#define MSG_ERROR_TMC _UxGT("ERR.CONNESSIONE TMC") #define MSG_DAC_EEPROM_WRITE _UxGT("Scrivi DAC EEPROM") #define MSG_FILAMENT_CHANGE_HEADER_PAUSE _UxGT("STAMPA IN PAUSA") #define MSG_FILAMENT_CHANGE_HEADER_LOAD _UxGT("CARICA FILAMENTO") From 02bbc51195ecd1b25f0be55a0ba22988bd194a99 Mon Sep 17 00:00:00 2001 From: Marcio Teixeira Date: Fri, 27 Sep 2019 13:02:35 -0600 Subject: [PATCH 070/120] Keep C extension for now, restore (void) arg (#15380) --- Marlin/src/HAL/HAL_DUE/usb/ctrl_access.c | 14 +-- Marlin/src/HAL/HAL_DUE/usb/ctrl_access.h | 6 +- Marlin/src/HAL/HAL_DUE/usb/sd_mmc_spi_mem.h | 8 +- Marlin/src/HAL/HAL_DUE/usb/sysclk.c | 4 +- Marlin/src/HAL/HAL_DUE/usb/sysclk.h | 4 +- Marlin/src/HAL/HAL_DUE/usb/udc.c | 52 +++++----- Marlin/src/HAL/HAL_DUE/usb/udc.h | 48 ++++----- Marlin/src/HAL/HAL_DUE/usb/udd.h | 40 ++++---- Marlin/src/HAL/HAL_DUE/usb/udi.h | 10 +- Marlin/src/HAL/HAL_DUE/usb/udi_cdc.c | 56 +++++------ Marlin/src/HAL/HAL_DUE/usb/udi_cdc.h | 32 +++--- Marlin/src/HAL/HAL_DUE/usb/udi_msc.c | 98 +++++++++---------- Marlin/src/HAL/HAL_DUE/usb/udi_msc.h | 20 ++-- .../src/HAL/HAL_DUE/usb/uotghs_device_due.c | 92 ++++++++--------- Marlin/src/HAL/HAL_DUE/usb/uotghs_otg.h | 4 +- Marlin/src/HAL/HAL_DUE/usb/usb_task.c | 18 ++-- Marlin/src/HAL/HAL_DUE/usb/usb_task.h | 20 ++-- 17 files changed, 263 insertions(+), 263 deletions(-) diff --git a/Marlin/src/HAL/HAL_DUE/usb/ctrl_access.c b/Marlin/src/HAL/HAL_DUE/usb/ctrl_access.c index 7991857d6258..0ec14e0b8f8d 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/ctrl_access.c +++ b/Marlin/src/HAL/HAL_DUE/usb/ctrl_access.c @@ -174,11 +174,11 @@ static xSemaphoreHandle ctrl_access_semphr = NULL; //! LUN descriptor table. static const struct { - Ctrl_status (*test_unit_ready)(); + Ctrl_status (*test_unit_ready)(void); Ctrl_status (*read_capacity)(U32 *); bool (*unload)(bool); - bool (*wr_protect)(); - bool (*removal)(); + bool (*wr_protect)(void); + bool (*removal)(void); #if ACCESS_USB == true Ctrl_status (*usb_read_10)(U32, U16); Ctrl_status (*usb_write_10)(U32, U16); @@ -255,7 +255,7 @@ bool g_wr_protect; #ifdef FREERTOS_USED -bool ctrl_access_init() +bool ctrl_access_init(void) { // If the handle to the protecting semaphore is not valid, if (!ctrl_access_semphr) @@ -275,7 +275,7 @@ bool ctrl_access_init() * * \return \c true if the access was successfully locked, else \c false. */ -static bool ctrl_access_lock() +static bool ctrl_access_lock(void) { // If the semaphore could not be created, there is no backup solution. if (!ctrl_access_semphr) return false; @@ -289,7 +289,7 @@ static bool ctrl_access_lock() #endif // FREERTOS_USED -U8 get_nb_lun() +U8 get_nb_lun(void) { #if MEM_USB == ENABLE # ifndef Lun_usb_get_lun @@ -310,7 +310,7 @@ U8 get_nb_lun() } -U8 get_cur_lun() +U8 get_cur_lun(void) { return LUN_ID_0; } diff --git a/Marlin/src/HAL/HAL_DUE/usb/ctrl_access.h b/Marlin/src/HAL/HAL_DUE/usb/ctrl_access.h index 823887623b64..af6c8ceb963e 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/ctrl_access.h +++ b/Marlin/src/HAL/HAL_DUE/usb/ctrl_access.h @@ -191,7 +191,7 @@ extern bool g_wr_protect; * * \return \c true if the locker was successfully initialized, else \c false. */ -extern bool ctrl_access_init(); +extern bool ctrl_access_init(void); #endif // FREERTOS_USED @@ -199,7 +199,7 @@ extern bool ctrl_access_init(); * * \return Number of LUNs in the system. */ -extern U8 get_nb_lun(); +extern U8 get_nb_lun(void); /*! \brief Returns the current LUN. * @@ -207,7 +207,7 @@ extern U8 get_nb_lun(); * * \todo Implement. */ -extern U8 get_cur_lun(); +extern U8 get_cur_lun(void); /*! \brief Tests the memory state and initializes the memory if required. * diff --git a/Marlin/src/HAL/HAL_DUE/usb/sd_mmc_spi_mem.h b/Marlin/src/HAL/HAL_DUE/usb/sd_mmc_spi_mem.h index f81ce7fdda91..6df82c146b75 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/sd_mmc_spi_mem.h +++ b/Marlin/src/HAL/HAL_DUE/usb/sd_mmc_spi_mem.h @@ -78,7 +78,7 @@ //! //! @brief This function initializes the hw/sw resources required to drive the SD_MMC_SPI. //!/ -extern void sd_mmc_spi_mem_init(); +extern void sd_mmc_spi_mem_init(void); //! //! @brief This function tests the state of the SD_MMC memory and sends it to the Host. @@ -91,7 +91,7 @@ extern void sd_mmc_spi_mem_init(); //! Media not present -> CTRL_NO_PRESENT //! Media has changed -> CTRL_BUSY //!/ -extern Ctrl_status sd_mmc_spi_test_unit_ready(); +extern Ctrl_status sd_mmc_spi_test_unit_ready(void); //! //! @brief This function gives the address of the last valid sector. @@ -124,14 +124,14 @@ extern bool sd_mmc_spi_unload(bool unload); //! //! @return false -> the memory is not write-protected (always) //!/ -extern bool sd_mmc_spi_wr_protect(); +extern bool sd_mmc_spi_wr_protect(void); //! //! @brief This function tells if the memory has been removed or not. //! //! @return false -> The memory isn't removed //! -extern bool sd_mmc_spi_removal(); +extern bool sd_mmc_spi_removal(void); //---- ACCESS DATA FONCTIONS ---- diff --git a/Marlin/src/HAL/HAL_DUE/usb/sysclk.c b/Marlin/src/HAL/HAL_DUE/usb/sysclk.c index 1848b2d819cf..899244dd88d0 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/sysclk.c +++ b/Marlin/src/HAL/HAL_DUE/usb/sysclk.c @@ -71,7 +71,7 @@ extern "C" { * \param pll_id Source of the USB clock. * \param div Actual clock divisor. Must be superior to 0. */ -void sysclk_enable_usb() +void sysclk_enable_usb(void) { Assert(CONFIG_USBCLK_DIV > 0); @@ -103,7 +103,7 @@ void sysclk_enable_usb() * * \note This implementation does not switch off the PLL, it just turns off the USB clock. */ -void sysclk_disable_usb() +void sysclk_disable_usb(void) { pmc_disable_udpck(); } diff --git a/Marlin/src/HAL/HAL_DUE/usb/sysclk.h b/Marlin/src/HAL/HAL_DUE/usb/sysclk.h index 51a311ce2960..48c99de2983e 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/sysclk.h +++ b/Marlin/src/HAL/HAL_DUE/usb/sysclk.h @@ -213,8 +213,8 @@ extern "C" { #endif -extern void sysclk_enable_usb(); -extern void sysclk_disable_usb(); +extern void sysclk_enable_usb(void); +extern void sysclk_disable_usb(void); //! @} diff --git a/Marlin/src/HAL/HAL_DUE/usb/udc.c b/Marlin/src/HAL/HAL_DUE/usb/udc.c index dfc9933a2927..048a902d3b5e 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/udc.c +++ b/Marlin/src/HAL/HAL_DUE/usb/udc.c @@ -132,14 +132,14 @@ static uint8_t udc_string_product_name[] = USB_DEVICE_PRODUCT_NAME; * define USB_DEVICE_GET_SERIAL_NAME_LENGTH. */ #if defined USB_DEVICE_GET_SERIAL_NAME_POINTER - static const uint8_t *udc_get_string_serial_name() + static const uint8_t *udc_get_string_serial_name(void) { return (const uint8_t *)USB_DEVICE_GET_SERIAL_NAME_POINTER; } # define USB_DEVICE_SERIAL_NAME_SIZE \ USB_DEVICE_GET_SERIAL_NAME_LENGTH #elif defined USB_DEVICE_SERIAL_NAME - static const uint8_t *udc_get_string_serial_name() + static const uint8_t *udc_get_string_serial_name(void) { return (const uint8_t *)USB_DEVICE_SERIAL_NAME; } @@ -164,7 +164,7 @@ static UDC_DESC_STORAGE struct udc_string_desc_t udc_string_desc = { }; //! @} -usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc() +usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(void) { return udc_ptr_iface; } @@ -174,7 +174,7 @@ usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc() * * \return address after the last byte of USB Configuration descriptor */ -static usb_conf_desc_t UDC_DESC_STORAGE *udc_get_eof_conf() +static usb_conf_desc_t UDC_DESC_STORAGE *udc_get_eof_conf(void) { return (UDC_DESC_STORAGE usb_conf_desc_t *) ((uint8_t *) udc_ptr_conf->desc + @@ -360,14 +360,14 @@ static bool udc_iface_enable(uint8_t iface_num, uint8_t setting_num) /*! \brief Start the USB Device stack */ -void udc_start() +void udc_start(void) { udd_enable(); } /*! \brief Stop the USB Device stack */ -void udc_stop() +void udc_stop(void) { udd_disable(); udc_reset(); @@ -377,7 +377,7 @@ void udc_stop() * \brief Reset the current configuration of the USB device, * This routines can be called by UDD when a RESET on the USB line occurs. */ -void udc_reset() +void udc_reset(void) { uint8_t iface_num; @@ -404,7 +404,7 @@ void udc_reset() #endif } -void udc_sof_notify() +void udc_sof_notify(void) { uint8_t iface_num; @@ -424,7 +424,7 @@ void udc_sof_notify() * * \return true if success */ -static bool udc_req_std_dev_get_status() +static bool udc_req_std_dev_get_status(void) { if (udd_g_ctrlreq.req.wLength != sizeof(udc_device_status)) { return false; @@ -441,7 +441,7 @@ static bool udc_req_std_dev_get_status() * * \return true if success */ -static bool udc_req_std_ep_get_status() +static bool udc_req_std_ep_get_status(void) { static le16_t udc_ep_status; @@ -463,7 +463,7 @@ static bool udc_req_std_ep_get_status() * * \return true if success */ -static bool udc_req_std_dev_clear_feature() +static bool udc_req_std_dev_clear_feature(void) { if (udd_g_ctrlreq.req.wLength) { return false; @@ -486,7 +486,7 @@ static bool udc_req_std_dev_clear_feature() * * \return true if success */ -static bool udc_req_std_ep_clear_feature() +static bool udc_req_std_ep_clear_feature(void) { if (udd_g_ctrlreq.req.wLength) { return false; @@ -504,7 +504,7 @@ static bool udc_req_std_ep_clear_feature() * * \return true if success */ -static bool udc_req_std_dev_set_feature() +static bool udc_req_std_dev_set_feature(void) { if (udd_g_ctrlreq.req.wLength) { return false; @@ -567,7 +567,7 @@ static bool udc_req_std_dev_set_feature() * \return true if success */ #if (0!=USB_DEVICE_MAX_EP) -static bool udc_req_std_ep_set_feature() +static bool udc_req_std_ep_set_feature(void) { if (udd_g_ctrlreq.req.wLength) { return false; @@ -584,7 +584,7 @@ static bool udc_req_std_ep_set_feature() * \brief Change the address of device * Callback called at the end of request set address */ -static void udc_valid_address() +static void udc_valid_address(void) { udd_set_address(udd_g_ctrlreq.req.wValue & 0x7F); } @@ -594,7 +594,7 @@ static void udc_valid_address() * * \return true if success */ -static bool udc_req_std_dev_set_address() +static bool udc_req_std_dev_set_address(void) { if (udd_g_ctrlreq.req.wLength) { return false; @@ -611,7 +611,7 @@ static bool udc_req_std_dev_set_address() * * \return true if success */ -static bool udc_req_std_dev_get_str_desc() +static bool udc_req_std_dev_get_str_desc(void) { uint8_t i; const uint8_t *str; @@ -670,7 +670,7 @@ static bool udc_req_std_dev_get_str_desc() * * \return true if success */ -static bool udc_req_std_dev_get_descriptor() +static bool udc_req_std_dev_get_descriptor(void) { uint8_t conf_num; @@ -787,7 +787,7 @@ static bool udc_req_std_dev_get_descriptor() * * \return true if success */ -static bool udc_req_std_dev_get_configuration() +static bool udc_req_std_dev_get_configuration(void) { if (udd_g_ctrlreq.req.wLength != 1) { return false; @@ -802,7 +802,7 @@ static bool udc_req_std_dev_get_configuration() * * \return true if success */ -static bool udc_req_std_dev_set_configuration() +static bool udc_req_std_dev_set_configuration(void) { uint8_t iface_num; @@ -867,7 +867,7 @@ static bool udc_req_std_dev_set_configuration() * * \return true if success */ -static bool udc_req_std_iface_get_setting() +static bool udc_req_std_iface_get_setting(void) { uint8_t iface_num; udi_api_t UDC_DESC_STORAGE *udi_api; @@ -905,7 +905,7 @@ static bool udc_req_std_iface_get_setting() * * \return true if success */ -static bool udc_req_std_iface_set_setting() +static bool udc_req_std_iface_set_setting(void) { uint8_t iface_num, setting_num; @@ -933,7 +933,7 @@ static bool udc_req_std_iface_set_setting() * * \return true if the request is supported */ -static bool udc_reqstd() +static bool udc_reqstd(void) { if (Udd_setup_is_in()) { // GET Standard Requests @@ -1027,7 +1027,7 @@ static bool udc_reqstd() * * \return true if the request is supported */ -static bool udc_req_iface() +static bool udc_req_iface(void) { uint8_t iface_num; udi_api_t UDC_DESC_STORAGE *udi_api; @@ -1062,7 +1062,7 @@ static bool udc_req_iface() * * \return true if the request is supported */ -static bool udc_req_ep() +static bool udc_req_ep(void) { uint8_t iface_num; udi_api_t UDC_DESC_STORAGE *udi_api; @@ -1101,7 +1101,7 @@ static bool udc_req_ep() * * \return true if the request is supported, else the request is stalled by UDD */ -bool udc_process_setup() +bool udc_process_setup(void) { // By default no data (receive/send) and no callbacks registered udd_g_ctrlreq.payload_size = 0; diff --git a/Marlin/src/HAL/HAL_DUE/usb/udc.h b/Marlin/src/HAL/HAL_DUE/usb/udc.h index 3c1dd582ed59..885bdf04d651 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/udc.h +++ b/Marlin/src/HAL/HAL_DUE/usb/udc.h @@ -172,18 +172,18 @@ extern "C" { } \endcode */ -static inline bool udc_include_vbus_monitoring() +static inline bool udc_include_vbus_monitoring(void) { return udd_include_vbus_monitoring(); } /*! \brief Start the USB Device stack */ -void udc_start(); +void udc_start(void); /*! \brief Stop the USB Device stack */ -void udc_stop(); +void udc_stop(void); /** * \brief Attach device to the bus when possible @@ -192,7 +192,7 @@ void udc_stop(); * then it will attach device when an acceptable Vbus * level from the host is detected. */ -static inline void udc_attach() +static inline void udc_attach(void) { udd_attach(); } @@ -203,7 +203,7 @@ static inline void udc_attach() * * The driver must remove pull-up on USB line D- or D+. */ -static inline void udc_detach() +static inline void udc_detach(void) { udd_detach(); } @@ -212,7 +212,7 @@ static inline void udc_detach() /*! \brief The USB driver sends a resume signal called \e "Upstream Resume" * This is authorized only when the remote wakeup feature is enabled by host. */ -static inline void udc_remotewakeup() +static inline void udc_remotewakeup(void) { udd_send_remotewakeup(); } @@ -223,7 +223,7 @@ static inline void udc_remotewakeup() * * \return pointer on the current interface descriptor. */ -usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(); +usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(void); //@} @@ -334,7 +334,7 @@ usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(); * * Add to application C-file: * \code - void usb_init() + void usb_init(void) { udc_start(); } @@ -551,23 +551,23 @@ usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(); #define USB_DEVICE_ATTR \ (USB_CONFIG_ATTR_REMOTE_WAKEUP | USB_CONFIG_ATTR_..._POWERED) #define UDC_REMOTEWAKEUP_ENABLE() my_callback_remotewakeup_enable() - extern void my_callback_remotewakeup_enable(); + extern void my_callback_remotewakeup_enable(void); #define UDC_REMOTEWAKEUP_DISABLE() my_callback_remotewakeup_disable() - extern void my_callback_remotewakeup_disable(); + extern void my_callback_remotewakeup_disable(void); \endcode * * Add to application C-file: * \code - void my_callback_remotewakeup_enable() + void my_callback_remotewakeup_enable(void) { // Enable application wakeup events (e.g. enable GPIO interrupt) } - void my_callback_remotewakeup_disable() + void my_callback_remotewakeup_disable(void) { // Disable application wakeup events (e.g. disable GPIO interrupt) } - void my_interrupt_event() + void my_interrupt_event(void) { udc_remotewakeup(); } @@ -580,10 +580,10 @@ usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(); #define USB_DEVICE_ATTR (USB_CONFIG_ATTR_REMOTE_WAKEUP | USB_CONFIG_ATTR_..._POWERED) \endcode * - \code // Define callback called when the host enables the remotewakeup feature #define UDC_REMOTEWAKEUP_ENABLE() my_callback_remotewakeup_enable() - extern void my_callback_remotewakeup_enable(); \endcode + extern void my_callback_remotewakeup_enable(void); \endcode * - \code // Define callback called when the host disables the remotewakeup feature #define UDC_REMOTEWAKEUP_DISABLE() my_callback_remotewakeup_disable() - extern void my_callback_remotewakeup_disable(); \endcode + extern void my_callback_remotewakeup_disable(void); \endcode * -# Send a remote wakeup (USB upstream): * - \code udc_remotewakeup(); \endcode */ @@ -605,18 +605,18 @@ usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(); * \code #define USB_DEVICE_ATTR (USB_CONFIG_ATTR_BUS_POWERED) #define UDC_SUSPEND_EVENT() user_callback_suspend_action() - extern void user_callback_suspend_action() + extern void user_callback_suspend_action(void) #define UDC_RESUME_EVENT() user_callback_resume_action() - extern void user_callback_resume_action() + extern void user_callback_resume_action(void) \endcode * * Add to application C-file: * \code - void user_callback_suspend_action() + void user_callback_suspend_action(void) { // Disable hardware component to reduce power consumption } - void user_callback_resume_action() + void user_callback_resume_action(void) { // Re-enable hardware component } @@ -628,12 +628,12 @@ usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(); #define USB_DEVICE_ATTR (USB_CONFIG_ATTR_BUS_POWERED) \endcode * - \code // Define callback called when the host suspend the USB line #define UDC_SUSPEND_EVENT() user_callback_suspend_action() - extern void user_callback_suspend_action(); \endcode + extern void user_callback_suspend_action(void); \endcode * - \code // Define callback called when the host or device resume the USB line #define UDC_RESUME_EVENT() user_callback_resume_action() - extern void user_callback_resume_action(); \endcode + extern void user_callback_resume_action(void); \endcode * -# Reduce power consumption in suspend mode (max. 2.5mA on Vbus): - * - \code void user_callback_suspend_action() + * - \code void user_callback_suspend_action(void) { turn_off_components(); } \endcode @@ -664,7 +664,7 @@ usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(); * \code uint8_t serial_number[USB_DEVICE_GET_SERIAL_NAME_LENGTH]; - void init_build_usb_serial_number() + void init_build_usb_serial_number(void) { serial_number[0] = 'A'; serial_number[1] = 'B'; @@ -683,7 +683,7 @@ usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(); * - \code uint8_t serial_number[USB_DEVICE_GET_SERIAL_NAME_LENGTH]; - void init_build_usb_serial_number() + void init_build_usb_serial_number(void) { serial_number[0] = 'A'; serial_number[1] = 'B'; diff --git a/Marlin/src/HAL/HAL_DUE/usb/udd.h b/Marlin/src/HAL/HAL_DUE/usb/udd.h index 4d024dbc6341..c87763de23fa 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/udd.h +++ b/Marlin/src/HAL/HAL_DUE/usb/udd.h @@ -94,11 +94,11 @@ typedef struct { uint16_t payload_size; //! Callback called after reception of ZLP from setup request - void (*callback)(); + void (*callback)(void); //! Callback called when the buffer given (.payload) is full or empty. //! This one return false to abort data transfer, or true with a new buffer in .payload. - bool (*over_under_run)(); + bool (*over_under_run)(void); } udd_ctrl_request_t; extern udd_ctrl_request_t udd_g_ctrlreq; @@ -123,7 +123,7 @@ extern udd_ctrl_request_t udd_g_ctrlreq; * Registered by routine udd_ep_wait_stall_clear() * Callback called when endpoint stall is cleared. */ -typedef void (*udd_callback_halt_cleared_t)(); +typedef void (*udd_callback_halt_cleared_t)(void); /** * \brief End of transfer callback function type. @@ -142,17 +142,17 @@ typedef void (*udd_callback_trans_t) (udd_ep_status_t status, * * \return true, if the VBUS monitoring is possible. */ -bool udd_include_vbus_monitoring(); +bool udd_include_vbus_monitoring(void); /** * \brief Enables the USB Device mode */ -void udd_enable(); +void udd_enable(void); /** * \brief Disables the USB Device mode */ -void udd_disable(); +void udd_disable(void); /** * \brief Attach device to the bus when possible @@ -161,14 +161,14 @@ void udd_disable(); * then it will attach device when an acceptable Vbus * level from the host is detected. */ -void udd_attach(); +void udd_attach(void); /** * \brief Detaches the device from the bus * * The driver must remove pull-up on USB line D- or D+. */ -void udd_detach(); +void udd_detach(void); /** * \brief Test whether the USB Device Controller is running at high @@ -176,7 +176,7 @@ void udd_detach(); * * \return \c true if the Device is running at high speed mode, otherwise \c false. */ -bool udd_is_high_speed(); +bool udd_is_high_speed(void); /** * \brief Changes the USB address of device @@ -190,25 +190,25 @@ void udd_set_address(uint8_t address); * * \return USB address */ -uint8_t udd_getaddress(); +uint8_t udd_getaddress(void); /** * \brief Returns the current start of frame number * * \return current start of frame number. */ -uint16_t udd_get_frame_number(); +uint16_t udd_get_frame_number(void); /** * \brief Returns the current micro start of frame number * * \return current micro start of frame number required in high speed mode. */ -uint16_t udd_get_micro_frame_number(); +uint16_t udd_get_micro_frame_number(void); /*! \brief The USB driver sends a resume signal called Upstream Resume */ -void udd_send_remotewakeup(); +void udd_send_remotewakeup(void); /** * \brief Load setup payload @@ -346,10 +346,10 @@ void udd_ep_abort(udd_ep_id_t ep); * The following functions allow the device to jump to a specific test mode required in high speed mode. */ //@{ -void udd_test_mode_j(); -void udd_test_mode_k(); -void udd_test_mode_se0_nak(); -void udd_test_mode_packet(); +void udd_test_mode_j(void); +void udd_test_mode_k(void); +void udd_test_mode_se0_nak(void); +void udd_test_mode_packet(void); //@} @@ -370,21 +370,21 @@ void udd_test_mode_packet(); * * \return \c 1 if the request is accepted, otherwise \c 0. */ -extern bool udc_process_setup(); +extern bool udc_process_setup(void); /** * \brief Reset the UDC * * The UDC must reset all configuration. */ -extern void udc_reset(); +extern void udc_reset(void); /** * \brief To signal that a SOF is occurred * * The UDC must send the signal to all UDIs enabled */ -extern void udc_sof_notify(); +extern void udc_sof_notify(void); //@} diff --git a/Marlin/src/HAL/HAL_DUE/usb/udi.h b/Marlin/src/HAL/HAL_DUE/usb/udi.h index 6a5b470f4c05..709908cad947 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/udi.h +++ b/Marlin/src/HAL/HAL_DUE/usb/udi.h @@ -82,7 +82,7 @@ typedef struct { * * \return \c 1 if function was successfully done, otherwise \c 0. */ - bool (*enable)(); + bool (*enable)(void); /** * \brief Disable the interface. @@ -95,7 +95,7 @@ typedef struct { * - the device is detached from the host (i.e. Vbus is no * longer present) */ - void (*disable)(); + void (*disable)(void); /** * \brief Handle a control request directed at an interface. @@ -108,7 +108,7 @@ typedef struct { * * \return \c 1 if this interface supports the SETUP request, otherwise \c 0. */ - bool (*setup)(); + bool (*setup)(void); /** * \brief Returns the current setting of the selected interface. @@ -117,12 +117,12 @@ typedef struct { * * \return alternate setting of selected interface */ - uint8_t (*getsetting)(); + uint8_t (*getsetting)(void); /** * \brief To signal that a SOF is occurred */ - void (*sof_notify)(); + void (*sof_notify)(void); } udi_api_t; //@} diff --git a/Marlin/src/HAL/HAL_DUE/usb/udi_cdc.c b/Marlin/src/HAL/HAL_DUE/usb/udi_cdc.c index 430de6c01563..60c9546ce236 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/udi_cdc.c +++ b/Marlin/src/HAL/HAL_DUE/usb/udi_cdc.c @@ -84,14 +84,14 @@ * * @{ */ -bool udi_cdc_comm_enable(); -void udi_cdc_comm_disable(); -bool udi_cdc_comm_setup(); -bool udi_cdc_data_enable(); -void udi_cdc_data_disable(); -bool udi_cdc_data_setup(); -uint8_t udi_cdc_getsetting(); -void udi_cdc_data_sof_notify(); +bool udi_cdc_comm_enable(void); +void udi_cdc_comm_disable(void); +bool udi_cdc_comm_setup(void); +bool udi_cdc_data_enable(void); +void udi_cdc_data_disable(void); +bool udi_cdc_data_setup(void); +uint8_t udi_cdc_getsetting(void); +void udi_cdc_data_sof_notify(void); UDC_DESC_STORAGE udi_api_t udi_api_cdc_comm = { .enable = udi_cdc_comm_enable, .disable = udi_cdc_comm_disable, @@ -130,14 +130,14 @@ UDC_DESC_STORAGE udi_api_t udi_api_cdc_data = { * * \return port number */ -static uint8_t udi_cdc_setup_to_port(); +static uint8_t udi_cdc_setup_to_port(void); /** * \brief Sends line coding to application * * Called after SETUP request when line coding data is received. */ -static void udi_cdc_line_coding_received(); +static void udi_cdc_line_coding_received(void); /** * \brief Records new state @@ -267,7 +267,7 @@ static volatile bool udi_cdc_tx_both_buf_to_send[UDI_CDC_PORT_NB]; //@} -bool udi_cdc_comm_enable() +bool udi_cdc_comm_enable(void) { uint8_t port; uint8_t iface_comm_num; @@ -321,7 +321,7 @@ bool udi_cdc_comm_enable() return true; } -bool udi_cdc_data_enable() +bool udi_cdc_data_enable(void) { uint8_t port; @@ -360,13 +360,13 @@ bool udi_cdc_data_enable() return true; } -void udi_cdc_comm_disable() +void udi_cdc_comm_disable(void) { Assert(udi_cdc_nb_comm_enabled != 0); udi_cdc_nb_comm_enabled--; } -void udi_cdc_data_disable() +void udi_cdc_data_disable(void) { uint8_t port; @@ -377,7 +377,7 @@ void udi_cdc_data_disable() udi_cdc_data_running = false; } -bool udi_cdc_comm_setup() +bool udi_cdc_comm_setup(void) { uint8_t port = udi_cdc_setup_to_port(); @@ -433,17 +433,17 @@ bool udi_cdc_comm_setup() return false; // request Not supported } -bool udi_cdc_data_setup() +bool udi_cdc_data_setup(void) { return false; // request Not supported } -uint8_t udi_cdc_getsetting() +uint8_t udi_cdc_getsetting(void) { return 0; // CDC don't have multiple alternate setting } -void udi_cdc_data_sof_notify() +void udi_cdc_data_sof_notify(void) { static uint8_t port_notify = 0; @@ -461,7 +461,7 @@ void udi_cdc_data_sof_notify() // ------------------------ //------- Internal routines to control serial line -static uint8_t udi_cdc_setup_to_port() +static uint8_t udi_cdc_setup_to_port(void) { uint8_t port; @@ -479,7 +479,7 @@ static uint8_t udi_cdc_setup_to_port() return port; } -static void udi_cdc_line_coding_received() +static void udi_cdc_line_coding_received(void) { uint8_t port = udi_cdc_setup_to_port(); UNUSED(port); @@ -797,17 +797,17 @@ void udi_cdc_ctrl_signal_dsr(bool b_set) udi_cdc_ctrl_state_change(0, b_set, CDC_SERIAL_STATE_DSR); } -void udi_cdc_signal_framing_error() +void udi_cdc_signal_framing_error(void) { udi_cdc_ctrl_state_change(0, true, CDC_SERIAL_STATE_FRAMING); } -void udi_cdc_signal_parity_error() +void udi_cdc_signal_parity_error(void) { udi_cdc_ctrl_state_change(0, true, CDC_SERIAL_STATE_PARITY); } -void udi_cdc_signal_overrun() +void udi_cdc_signal_overrun(void) { udi_cdc_ctrl_state_change(0, true, CDC_SERIAL_STATE_OVERRUN); } @@ -853,7 +853,7 @@ iram_size_t udi_cdc_multi_get_nb_received_data(uint8_t port) return nb_received; } -iram_size_t udi_cdc_get_nb_received_data() +iram_size_t udi_cdc_get_nb_received_data(void) { return udi_cdc_multi_get_nb_received_data(0); } @@ -863,7 +863,7 @@ bool udi_cdc_multi_is_rx_ready(uint8_t port) return (udi_cdc_multi_get_nb_received_data(port) > 0); } -bool udi_cdc_is_rx_ready() +bool udi_cdc_is_rx_ready(void) { return udi_cdc_multi_is_rx_ready(0); } @@ -912,7 +912,7 @@ int udi_cdc_multi_getc(uint8_t port) return rx_data; } -int udi_cdc_getc() +int udi_cdc_getc(void) { return udi_cdc_multi_getc(0); } @@ -1041,7 +1041,7 @@ iram_size_t __attribute__((optimize("O0"))) udi_cdc_multi_get_free_tx_buffer(uin return retval; } -iram_size_t udi_cdc_get_free_tx_buffer() +iram_size_t udi_cdc_get_free_tx_buffer(void) { return udi_cdc_multi_get_free_tx_buffer(0); } @@ -1051,7 +1051,7 @@ bool udi_cdc_multi_is_tx_ready(uint8_t port) return (udi_cdc_multi_get_free_tx_buffer(port) != 0); } -bool udi_cdc_is_tx_ready() +bool udi_cdc_is_tx_ready(void) { return udi_cdc_multi_is_tx_ready(0); } diff --git a/Marlin/src/HAL/HAL_DUE/usb/udi_cdc.h b/Marlin/src/HAL/HAL_DUE/usb/udi_cdc.h index 66da384e6cb2..526419c86002 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/udi_cdc.h +++ b/Marlin/src/HAL/HAL_DUE/usb/udi_cdc.h @@ -366,38 +366,38 @@ void udi_cdc_ctrl_signal_dsr(bool b_set); /** * \brief Notify a framing error */ -void udi_cdc_signal_framing_error(); +void udi_cdc_signal_framing_error(void); /** * \brief Notify a parity error */ -void udi_cdc_signal_parity_error(); +void udi_cdc_signal_parity_error(void); /** * \brief Notify a overrun */ -void udi_cdc_signal_overrun(); +void udi_cdc_signal_overrun(void); /** * \brief Gets the number of byte received * * \return the number of data available */ -iram_size_t udi_cdc_get_nb_received_data(); +iram_size_t udi_cdc_get_nb_received_data(void); /** * \brief This function checks if a character has been received on the CDC line * * \return \c 1 if a byte is ready to be read. */ -bool udi_cdc_is_rx_ready(); +bool udi_cdc_is_rx_ready(void); /** * \brief Waits and gets a value on CDC line * * \return value read on CDC line */ -int udi_cdc_getc(); +int udi_cdc_getc(void); /** * \brief Reads a RAM buffer on CDC line @@ -425,7 +425,7 @@ iram_size_t udi_cdc_read_no_polling(void* buf, iram_size_t size); * * \return the number of free byte in TX buffer */ -iram_size_t udi_cdc_get_free_tx_buffer(); +iram_size_t udi_cdc_get_free_tx_buffer(void); /** * \brief This function checks if a new character sent is possible @@ -433,7 +433,7 @@ iram_size_t udi_cdc_get_free_tx_buffer(); * * \return \c 1 if a new character can be sent */ -bool udi_cdc_is_tx_ready(); +bool udi_cdc_is_tx_ready(void); /** * \brief Puts a byte on CDC line @@ -611,9 +611,9 @@ iram_size_t udi_cdc_multi_write_buf(uint8_t port, const void* buf, iram_size_t s * Content of conf_usb.h: * \code #define UDI_CDC_ENABLE_EXT(port) my_callback_cdc_enable() - extern bool my_callback_cdc_enable(); + extern bool my_callback_cdc_enable(void); #define UDI_CDC_DISABLE_EXT(port) my_callback_cdc_disable() - extern void my_callback_cdc_disable(); + extern void my_callback_cdc_disable(void); #define UDI_CDC_LOW_RATE #define UDI_CDC_DEFAULT_RATE 115200 @@ -627,17 +627,17 @@ iram_size_t udi_cdc_multi_write_buf(uint8_t port, const void* buf, iram_size_t s * Add to application C-file: * \code static bool my_flag_autorize_cdc_transfert = false; - bool my_callback_cdc_enable() + bool my_callback_cdc_enable(void) { my_flag_autorize_cdc_transfert = true; return true; } - void my_callback_cdc_disable() + void my_callback_cdc_disable(void) { my_flag_autorize_cdc_transfert = false; } - void task() + void task(void) { if (my_flag_autorize_cdc_transfert) { udi_cdc_putc('A'); @@ -652,14 +652,14 @@ iram_size_t udi_cdc_multi_write_buf(uint8_t port, const void* buf, iram_size_t s * - \code #define USB_DEVICE_SERIAL_NAME "12...EF" // Disk SN for CDC \endcode * \note The USB serial number is mandatory when a CDC interface is used. * - \code #define UDI_CDC_ENABLE_EXT(port) my_callback_cdc_enable() - extern bool my_callback_cdc_enable(); \endcode + extern bool my_callback_cdc_enable(void); \endcode * \note After the device enumeration (detecting and identifying USB devices), * the USB host starts the device configuration. When the USB CDC interface * from the device is accepted by the host, the USB host enables this interface and the * UDI_CDC_ENABLE_EXT() callback function is called and return true. * Thus, when this event is received, the data transfer on CDC interface are authorized. * - \code #define UDI_CDC_DISABLE_EXT(port) my_callback_cdc_disable() - extern void my_callback_cdc_disable(); \endcode + extern void my_callback_cdc_disable(void); \endcode * \note When the USB device is unplugged or is reset by the USB host, the USB * interface is disabled and the UDI_CDC_DISABLE_EXT() callback function * is called. Thus, the data transfer must be stopped on CDC interface. @@ -673,7 +673,7 @@ iram_size_t udi_cdc_multi_write_buf(uint8_t port, const void* buf, iram_size_t s * \note Default configuration of communication port at startup. * -# Send or wait data on CDC line: * - \code // Waits and gets a value on CDC line - int udi_cdc_getc(); + int udi_cdc_getc(void); // Reads a RAM buffer on CDC line iram_size_t udi_cdc_read_buf(int* buf, iram_size_t size); // Puts a byte on CDC line diff --git a/Marlin/src/HAL/HAL_DUE/usb/udi_msc.c b/Marlin/src/HAL/HAL_DUE/usb/udi_msc.c index 95b5e8a24844..627bca0d4f5a 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/udi_msc.c +++ b/Marlin/src/HAL/HAL_DUE/usb/udi_msc.c @@ -71,10 +71,10 @@ * * @{ */ -bool udi_msc_enable(); -void udi_msc_disable(); -bool udi_msc_setup(); -uint8_t udi_msc_getsetting(); +bool udi_msc_enable(void); +void udi_msc_disable(void); +bool udi_msc_setup(void); +uint8_t udi_msc_getsetting(void); //! Global structure which contains standard UDI API for UDC UDC_DESC_STORAGE udi_api_t udi_api_msc = { @@ -151,12 +151,12 @@ volatile bool udi_msc_b_reset_trans = true; /** * \brief Stall CBW request */ -static void udi_msc_cbw_invalid(); +static void udi_msc_cbw_invalid(void); /** * \brief Stall CSW request */ -static void udi_msc_csw_invalid(); +static void udi_msc_csw_invalid(void); /** * \brief Links a callback and buffer on endpoint OUT reception @@ -165,7 +165,7 @@ static void udi_msc_csw_invalid(); * - enable interface * - at the end of previous command after sending the CSW */ -static void udi_msc_cbw_wait(); +static void udi_msc_cbw_wait(void); /** * \brief Callback called after CBW reception @@ -228,7 +228,7 @@ static void udi_msc_data_sent(udd_ep_status_t status, iram_size_t nb_sent, * * Called at the end of SCSI command */ -static void udi_msc_csw_process(); +static void udi_msc_csw_process(void); /** * \brief Sends CSW @@ -236,7 +236,7 @@ static void udi_msc_csw_process(); * Called by #udi_msc_csw_process() * or UDD callback when endpoint halt is cleared */ -void udi_msc_csw_send(); +void udi_msc_csw_send(void); /** * \brief Callback called after CSW sent @@ -259,7 +259,7 @@ static void udi_msc_csw_sent(udd_ep_status_t status, iram_size_t nb_sent, /** * \brief Reinitialize sense data. */ -static void udi_msc_clear_sense(); +static void udi_msc_clear_sense(void); /** * \brief Update sense data with new value to signal a fail @@ -274,37 +274,37 @@ static void udi_msc_sense_fail(uint8_t sense_key, uint16_t add_sense, /** * \brief Update sense data with new value to signal success */ -static void udi_msc_sense_pass(); +static void udi_msc_sense_pass(void); /** * \brief Update sense data to signal that memory is not present */ -static void udi_msc_sense_fail_not_present(); +static void udi_msc_sense_fail_not_present(void); /** * \brief Update sense data to signal that memory is busy */ -static void udi_msc_sense_fail_busy_or_change(); +static void udi_msc_sense_fail_busy_or_change(void); /** * \brief Update sense data to signal a hardware error on memory */ -static void udi_msc_sense_fail_hardware(); +static void udi_msc_sense_fail_hardware(void); /** * \brief Update sense data to signal that memory is protected */ -static void udi_msc_sense_fail_protected(); +static void udi_msc_sense_fail_protected(void); /** * \brief Update sense data to signal that CDB fields are not valid */ -static void udi_msc_sense_fail_cdb_invalid(); +static void udi_msc_sense_fail_cdb_invalid(void); /** * \brief Update sense data to signal that command is not supported */ -static void udi_msc_sense_command_invalid(); +static void udi_msc_sense_command_invalid(void); //@} @@ -317,31 +317,31 @@ static void udi_msc_sense_command_invalid(); * \brief Process SPC Request Sense command * Returns error information about last command */ -static void udi_msc_spc_requestsense(); +static void udi_msc_spc_requestsense(void); /** * \brief Process SPC Inquiry command * Returns information (name,version) about disk */ -static void udi_msc_spc_inquiry(); +static void udi_msc_spc_inquiry(void); /** * \brief Checks state of disk * * \retval true if disk is ready, otherwise false and updates sense data */ -static bool udi_msc_spc_testunitready_global(); +static bool udi_msc_spc_testunitready_global(void); /** * \brief Process test unit ready command * Returns state of logical unit */ -static void udi_msc_spc_testunitready(); +static void udi_msc_spc_testunitready(void); /** * \brief Process prevent allow medium removal command */ -static void udi_msc_spc_prevent_allow_medium_removal(); +static void udi_msc_spc_prevent_allow_medium_removal(void); /** * \brief Process mode sense command @@ -354,12 +354,12 @@ static void udi_msc_spc_mode_sense(bool b_sense10); /** * \brief Process start stop command */ -static void udi_msc_sbc_start_stop(); +static void udi_msc_sbc_start_stop(void); /** * \brief Process read capacity command */ -static void udi_msc_sbc_read_capacity(); +static void udi_msc_sbc_read_capacity(void); /** * \brief Process read10 or write10 command @@ -373,7 +373,7 @@ static void udi_msc_sbc_trans(bool b_read); //@} -bool udi_msc_enable() +bool udi_msc_enable(void) { uint8_t lun; udi_msc_b_trans_req = false; @@ -398,7 +398,7 @@ bool udi_msc_enable() } -void udi_msc_disable() +void udi_msc_disable(void) { udi_msc_b_trans_req = false; udi_msc_b_ack_trans = true; @@ -407,7 +407,7 @@ void udi_msc_disable() } -bool udi_msc_setup() +bool udi_msc_setup(void) { if (Udd_setup_is_in()) { // Requests Interface GET @@ -451,7 +451,7 @@ bool udi_msc_setup() return false; // Not supported request } -uint8_t udi_msc_getsetting() +uint8_t udi_msc_getsetting(void) { return 0; // MSC don't have multiple alternate setting } @@ -460,7 +460,7 @@ uint8_t udi_msc_getsetting() // ------------------------ //------- Routines to process CBW packet -static void udi_msc_cbw_invalid() +static void udi_msc_cbw_invalid(void) { if (!udi_msc_b_cbw_invalid) return; // Don't re-stall endpoint if error reseted by setup @@ -469,7 +469,7 @@ static void udi_msc_cbw_invalid() udd_ep_wait_stall_clear(UDI_MSC_EP_OUT, udi_msc_cbw_invalid); } -static void udi_msc_csw_invalid() +static void udi_msc_csw_invalid(void) { if (!udi_msc_b_cbw_invalid) return; // Don't re-stall endpoint if error reseted by setup @@ -478,7 +478,7 @@ static void udi_msc_csw_invalid() udd_ep_wait_stall_clear(UDI_MSC_EP_IN, udi_msc_csw_invalid); } -static void udi_msc_cbw_wait() +static void udi_msc_cbw_wait(void) { // Register buffer and callback on OUT endpoint if (!udd_ep_run(UDI_MSC_EP_OUT, true, @@ -648,7 +648,7 @@ static void udi_msc_data_sent(udd_ep_status_t status, iram_size_t nb_sent, // ------------------------ //------- Routines to process CSW packet -static void udi_msc_csw_process() +static void udi_msc_csw_process(void) { if (0 != udi_msc_csw.dCSWDataResidue) { // Residue not NULL @@ -665,7 +665,7 @@ static void udi_msc_csw_process() } -void udi_msc_csw_send() +void udi_msc_csw_send(void) { // Sends CSW on IN endpoint if (!udd_ep_run(UDI_MSC_EP_IN, false, @@ -694,7 +694,7 @@ static void udi_msc_csw_sent(udd_ep_status_t status, iram_size_t nb_sent, // ------------------------ //------- Routines manage sense data -static void udi_msc_clear_sense() +static void udi_msc_clear_sense(void) { memset((uint8_t*)&udi_msc_sense, 0, sizeof(struct scsi_request_sense_data)); udi_msc_sense.valid_reponse_code = SCSI_SENSE_VALID | SCSI_SENSE_CURRENT; @@ -715,42 +715,42 @@ static void udi_msc_sense_fail(uint8_t sense_key, uint16_t add_sense, udi_msc_sense.AddSnsCodeQlfr = add_sense; } -static void udi_msc_sense_pass() +static void udi_msc_sense_pass(void) { udi_msc_clear_sense(); udi_msc_csw.bCSWStatus = USB_CSW_STATUS_PASS; } -static void udi_msc_sense_fail_not_present() +static void udi_msc_sense_fail_not_present(void) { udi_msc_sense_fail(SCSI_SK_NOT_READY, SCSI_ASC_MEDIUM_NOT_PRESENT, 0); } -static void udi_msc_sense_fail_busy_or_change() +static void udi_msc_sense_fail_busy_or_change(void) { udi_msc_sense_fail(SCSI_SK_UNIT_ATTENTION, SCSI_ASC_NOT_READY_TO_READY_CHANGE, 0); } -static void udi_msc_sense_fail_hardware() +static void udi_msc_sense_fail_hardware(void) { udi_msc_sense_fail(SCSI_SK_HARDWARE_ERROR, SCSI_ASC_NO_ADDITIONAL_SENSE_INFO, 0); } -static void udi_msc_sense_fail_protected() +static void udi_msc_sense_fail_protected(void) { udi_msc_sense_fail(SCSI_SK_DATA_PROTECT, SCSI_ASC_WRITE_PROTECTED, 0); } -static void udi_msc_sense_fail_cdb_invalid() +static void udi_msc_sense_fail_cdb_invalid(void) { udi_msc_sense_fail(SCSI_SK_ILLEGAL_REQUEST, SCSI_ASC_INVALID_FIELD_IN_CDB, 0); } -static void udi_msc_sense_command_invalid() +static void udi_msc_sense_command_invalid(void) { udi_msc_sense_fail(SCSI_SK_ILLEGAL_REQUEST, SCSI_ASC_INVALID_COMMAND_OPERATION_CODE, 0); @@ -760,7 +760,7 @@ static void udi_msc_sense_command_invalid() // ------------------------ //------- Routines manage SCSI Commands -static void udi_msc_spc_requestsense() +static void udi_msc_spc_requestsense(void) { uint8_t length = udi_msc_cbw.CDB[4]; @@ -775,7 +775,7 @@ static void udi_msc_spc_requestsense() } -static void udi_msc_spc_inquiry() +static void udi_msc_spc_inquiry(void) { uint8_t length, i; UDC_DATA(4) @@ -836,7 +836,7 @@ static void udi_msc_spc_inquiry() } -static bool udi_msc_spc_testunitready_global() +static bool udi_msc_spc_testunitready_global(void) { switch (mem_test_unit_ready(udi_msc_cbw.bCBWLUN)) { case CTRL_GOOD: @@ -856,7 +856,7 @@ static bool udi_msc_spc_testunitready_global() } -static void udi_msc_spc_testunitready() +static void udi_msc_spc_testunitready(void) { if (udi_msc_spc_testunitready_global()) { // LUN ready, then update sense data with status pass @@ -944,7 +944,7 @@ static void udi_msc_spc_mode_sense(bool b_sense10) } -static void udi_msc_spc_prevent_allow_medium_removal() +static void udi_msc_spc_prevent_allow_medium_removal(void) { uint8_t prevent = udi_msc_cbw.CDB[4]; if (0 == prevent) { @@ -956,7 +956,7 @@ static void udi_msc_spc_prevent_allow_medium_removal() } -static void udi_msc_sbc_start_stop() +static void udi_msc_sbc_start_stop(void) { bool start = 0x1 & udi_msc_cbw.CDB[4]; bool loej = 0x2 & udi_msc_cbw.CDB[4]; @@ -968,7 +968,7 @@ static void udi_msc_sbc_start_stop() } -static void udi_msc_sbc_read_capacity() +static void udi_msc_sbc_read_capacity(void) { UDC_BSS(4) static struct sbc_read_capacity10_data udi_msc_capacity; @@ -1039,7 +1039,7 @@ static void udi_msc_sbc_trans(bool b_read) } -bool udi_msc_process_trans() +bool udi_msc_process_trans(void) { Ctrl_status status; diff --git a/Marlin/src/HAL/HAL_DUE/usb/udi_msc.h b/Marlin/src/HAL/HAL_DUE/usb/udi_msc.h index e7271e4835c5..c632ee4aacee 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/udi_msc.h +++ b/Marlin/src/HAL/HAL_DUE/usb/udi_msc.h @@ -148,7 +148,7 @@ typedef struct { * * Routine called by the main loop */ -bool udi_msc_process_trans(); +bool udi_msc_process_trans(void); /** * \brief Transfers data to/from USB MSC endpoints @@ -206,26 +206,26 @@ bool udi_msc_trans_block(bool b_read, uint8_t * block, iram_size_t block_size, #define UDI_MSC_GLOBAL_PRODUCT_VERSION \ '1', '.', '0', '0' #define UDI_MSC_ENABLE_EXT() my_callback_msc_enable() - extern bool my_callback_msc_enable(); + extern bool my_callback_msc_enable(void); #define UDI_MSC_DISABLE_EXT() my_callback_msc_disable() - extern void my_callback_msc_disable(); + extern void my_callback_msc_disable(void); #include "udi_msc_conf.h" // At the end of conf_usb.h file \endcode * * Add to application C-file: * \code static bool my_flag_autorize_msc_transfert = false; - bool my_callback_msc_enable() + bool my_callback_msc_enable(void) { my_flag_autorize_msc_transfert = true; return true; } - void my_callback_msc_disable() + void my_callback_msc_disable(void) { my_flag_autorize_msc_transfert = false; } - void task() + void task(void) { udi_msc_process_trans(); } @@ -244,7 +244,7 @@ bool udi_msc_trans_block(bool b_read, uint8_t * block, iram_size_t block_size, * \note The USB MSC interface requires a vendor ID (8 ASCII characters) * and a product version (4 ASCII characters). * - \code #define UDI_MSC_ENABLE_EXT() my_callback_msc_enable() - extern bool my_callback_msc_enable(); \endcode + extern bool my_callback_msc_enable(void); \endcode * \note After the device enumeration (detecting and identifying USB devices), * the USB host starts the device configuration. When the USB MSC interface * from the device is accepted by the host, the USB host enables this interface and the @@ -252,7 +252,7 @@ bool udi_msc_trans_block(bool b_read, uint8_t * block, iram_size_t block_size, * Thus, when this event is received, the tasks which call * udi_msc_process_trans() must be enabled. * - \code #define UDI_MSC_DISABLE_EXT() my_callback_msc_disable() - extern void my_callback_msc_disable(); \endcode + extern void my_callback_msc_disable(void); \endcode * \note When the USB device is unplugged or is reset by the USB host, the USB * interface is disabled and the UDI_MSC_DISABLE_EXT() callback function * is called. Thus, it is recommended to disable the task which is called udi_msc_process_trans(). @@ -260,14 +260,14 @@ bool udi_msc_trans_block(bool b_read, uint8_t * block, iram_size_t block_size, * which provides the memories interfaces. However, the memory data transfers * must be done outside USB interrupt routine. This is done in the MSC process * ("udi_msc_process_trans()") called by main loop: - * - \code * void task() { + * - \code * void task(void) { udi_msc_process_trans(); } \endcode * -# The MSC speed depends on task periodicity. To get the best speed * the notification callback "UDI_MSC_NOTIFY_TRANS_EXT" can be used to wakeup * this task (Example, through a mutex): * - \code #define UDI_MSC_NOTIFY_TRANS_EXT() msc_notify_trans() - void msc_notify_trans() { + void msc_notify_trans(void) { wakeup_my_task(); } \endcode * diff --git a/Marlin/src/HAL/HAL_DUE/usb/uotghs_device_due.c b/Marlin/src/HAL/HAL_DUE/usb/uotghs_device_due.c index ae569e2f5548..9bac29276c75 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/uotghs_device_due.c +++ b/Marlin/src/HAL/HAL_DUE/usb/uotghs_device_due.c @@ -357,41 +357,41 @@ static uint16_t udd_ctrl_payload_buf_cnt; * * Called after a USB line reset or when UDD is enabled */ -static void udd_reset_ep_ctrl(); +static void udd_reset_ep_ctrl(void); /** * \brief Reset control endpoint management * * Called after a USB line reset or at the end of SETUP request (after ZLP) */ -static void udd_ctrl_init(); +static void udd_ctrl_init(void); //! \brief Managed reception of SETUP packet on control endpoint -static void udd_ctrl_setup_received(); +static void udd_ctrl_setup_received(void); //! \brief Managed reception of IN packet on control endpoint -static void udd_ctrl_in_sent(); +static void udd_ctrl_in_sent(void); //! \brief Managed reception of OUT packet on control endpoint -static void udd_ctrl_out_received(); +static void udd_ctrl_out_received(void); //! \brief Managed underflow event of IN packet on control endpoint -static void udd_ctrl_underflow(); +static void udd_ctrl_underflow(void); //! \brief Managed overflow event of OUT packet on control endpoint -static void udd_ctrl_overflow(); +static void udd_ctrl_overflow(void); //! \brief Managed stall event of IN/OUT packet on control endpoint -static void udd_ctrl_stall_data(); +static void udd_ctrl_stall_data(void); //! \brief Send a ZLP IN on control endpoint -static void udd_ctrl_send_zlp_in(); +static void udd_ctrl_send_zlp_in(void); //! \brief Send a ZLP OUT on control endpoint -static void udd_ctrl_send_zlp_out(); +static void udd_ctrl_send_zlp_out(void); //! \brief Call callback associated to setup request -static void udd_ctrl_endofrequest(); +static void udd_ctrl_endofrequest(void); /** @@ -401,7 +401,7 @@ static void udd_ctrl_endofrequest(); * * \return \c 1 if an event about control endpoint is occured, otherwise \c 0. */ -static bool udd_ctrl_interrupt(); +static bool udd_ctrl_interrupt(void); //@} @@ -448,10 +448,10 @@ typedef struct { static udd_ep_job_t udd_ep_job[USB_DEVICE_MAX_EP]; //! \brief Reset all job table -static void udd_ep_job_table_reset(); +static void udd_ep_job_table_reset(void); //! \brief Abort all endpoint jobs on going -static void udd_ep_job_table_kill(); +static void udd_ep_job_table_kill(void); #ifdef UDD_EP_FIFO_SUPPORTED /** @@ -500,7 +500,7 @@ static void udd_ep_finish_job(udd_ep_job_t * ptr_job, bool b_abort, uint8_t ep_n * * \return \c 1 if an event about bulk/interrupt/isochronous endpoints has occured, otherwise \c 0. */ -static bool udd_ep_interrupt(); +static bool udd_ep_interrupt(void); #endif // (0!=USB_DEVICE_MAX_EP) //@} @@ -524,8 +524,8 @@ static bool udd_ep_interrupt(); * See Technical reference $3.8.3 Masking interrupt requests in peripheral modules. */ #ifdef UHD_ENABLE -void udd_interrupt(); -void udd_interrupt() +void udd_interrupt(void); +void udd_interrupt(void) #else ISR(UDD_USB_INT_FUN) #endif @@ -643,13 +643,13 @@ ISR(UDD_USB_INT_FUN) } -bool udd_include_vbus_monitoring() +bool udd_include_vbus_monitoring(void) { return true; } -void udd_enable() +void udd_enable(void) { irqflags_t flags; @@ -736,7 +736,7 @@ void udd_enable() } -void udd_disable() +void udd_disable(void) { irqflags_t flags; @@ -777,7 +777,7 @@ void udd_disable() } -void udd_attach() +void udd_attach(void) { irqflags_t flags; flags = cpu_irq_save(); @@ -818,7 +818,7 @@ void udd_attach() } -void udd_detach() +void udd_detach(void) { otg_unfreeze_clock(); @@ -829,7 +829,7 @@ void udd_detach() } -bool udd_is_high_speed() +bool udd_is_high_speed(void) { #ifdef USB_DEVICE_HS_SUPPORT return !Is_udd_full_speed_mode(); @@ -847,23 +847,23 @@ void udd_set_address(uint8_t address) } -uint8_t udd_getaddress() +uint8_t udd_getaddress(void) { return udd_get_configured_address(); } -uint16_t udd_get_frame_number() +uint16_t udd_get_frame_number(void) { return udd_frame_number(); } -uint16_t udd_get_micro_frame_number() +uint16_t udd_get_micro_frame_number(void) { return udd_micro_frame_number(); } -void udd_send_remotewakeup() +void udd_send_remotewakeup(void) { #ifndef UDD_NO_SLEEP_MGR if (!udd_b_idle) @@ -1242,27 +1242,27 @@ bool udd_ep_wait_stall_clear(udd_ep_id_t ep, #ifdef USB_DEVICE_HS_SUPPORT -void udd_test_mode_j() +void udd_test_mode_j(void) { udd_enable_hs_test_mode(); udd_enable_hs_test_mode_j(); } -void udd_test_mode_k() +void udd_test_mode_k(void) { udd_enable_hs_test_mode(); udd_enable_hs_test_mode_k(); } -void udd_test_mode_se0_nak() +void udd_test_mode_se0_nak(void) { udd_enable_hs_test_mode(); } -void udd_test_mode_packet() +void udd_test_mode_packet(void) { uint8_t i; uint8_t *ptr_dest; @@ -1310,7 +1310,7 @@ void udd_test_mode_packet() // ------------------------ //--- INTERNAL ROUTINES TO MANAGED THE CONTROL ENDPOINT -static void udd_reset_ep_ctrl() +static void udd_reset_ep_ctrl(void) { irqflags_t flags; @@ -1334,7 +1334,7 @@ static void udd_reset_ep_ctrl() cpu_irq_restore(flags); } -static void udd_ctrl_init() +static void udd_ctrl_init(void) { irqflags_t flags; flags = cpu_irq_save(); @@ -1357,7 +1357,7 @@ static void udd_ctrl_init() } -static void udd_ctrl_setup_received() +static void udd_ctrl_setup_received(void) { irqflags_t flags; uint8_t i; @@ -1419,7 +1419,7 @@ static void udd_ctrl_setup_received() } -static void udd_ctrl_in_sent() +static void udd_ctrl_in_sent(void) { static bool b_shortpacket = false; uint16_t nb_remain; @@ -1503,7 +1503,7 @@ static void udd_ctrl_in_sent() } -static void udd_ctrl_out_received() +static void udd_ctrl_out_received(void) { irqflags_t flags; uint8_t i; @@ -1594,7 +1594,7 @@ static void udd_ctrl_out_received() } -static void udd_ctrl_underflow() +static void udd_ctrl_underflow(void) { if (Is_udd_out_received(0)) return; // Underflow ignored if OUT data is received @@ -1611,7 +1611,7 @@ static void udd_ctrl_underflow() } -static void udd_ctrl_overflow() +static void udd_ctrl_overflow(void) { if (Is_udd_in_send(0)) return; // Overflow ignored if IN data is received @@ -1627,7 +1627,7 @@ static void udd_ctrl_overflow() } -static void udd_ctrl_stall_data() +static void udd_ctrl_stall_data(void) { // Stall all packets on IN & OUT control endpoint udd_ep_control_state = UDD_EPCTRL_STALL_REQ; @@ -1635,7 +1635,7 @@ static void udd_ctrl_stall_data() } -static void udd_ctrl_send_zlp_in() +static void udd_ctrl_send_zlp_in(void) { irqflags_t flags; @@ -1653,7 +1653,7 @@ static void udd_ctrl_send_zlp_in() } -static void udd_ctrl_send_zlp_out() +static void udd_ctrl_send_zlp_out(void) { irqflags_t flags; @@ -1669,7 +1669,7 @@ static void udd_ctrl_send_zlp_out() } -static void udd_ctrl_endofrequest() +static void udd_ctrl_endofrequest(void) { // If a callback is registered then call it if (udd_g_ctrlreq.callback) { @@ -1678,7 +1678,7 @@ static void udd_ctrl_endofrequest() } -static bool udd_ctrl_interrupt() +static bool udd_ctrl_interrupt(void) { if (!Is_udd_endpoint_interrupt(0)) { @@ -1734,7 +1734,7 @@ static bool udd_ctrl_interrupt() #if (0 != USB_DEVICE_MAX_EP) -static void udd_ep_job_table_reset() +static void udd_ep_job_table_reset(void) { uint8_t i; for (i = 0; i < USB_DEVICE_MAX_EP; i++) { @@ -1744,7 +1744,7 @@ static void udd_ep_job_table_reset() } -static void udd_ep_job_table_kill() +static void udd_ep_job_table_kill(void) { uint8_t i; @@ -1970,7 +1970,7 @@ static void udd_ep_out_received(udd_ep_id_t ep) } #endif // #ifdef UDD_EP_FIFO_SUPPORTED -static bool udd_ep_interrupt() +static bool udd_ep_interrupt(void) { udd_ep_id_t ep; udd_ep_job_t *ptr_job; diff --git a/Marlin/src/HAL/HAL_DUE/usb/uotghs_otg.h b/Marlin/src/HAL/HAL_DUE/usb/uotghs_otg.h index 13a66b226155..86c903b2c18f 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/uotghs_otg.h +++ b/Marlin/src/HAL/HAL_DUE/usb/uotghs_otg.h @@ -66,13 +66,13 @@ extern "C" { * * \return \c true if the ID pin management has been started, otherwise \c false. */ -bool otg_dual_enable(); +bool otg_dual_enable(void); /** * \brief Uninitialize the dual role * This function is implemented in uotghs_host.c file. */ -void otg_dual_disable(); +void otg_dual_disable(void); //! @name UOTGHS OTG ID pin management diff --git a/Marlin/src/HAL/HAL_DUE/usb/usb_task.c b/Marlin/src/HAL/HAL_DUE/usb/usb_task.c index 7c95c99c07dd..b735858018df 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/usb_task.c +++ b/Marlin/src/HAL/HAL_DUE/usb/usb_task.c @@ -56,7 +56,7 @@ static volatile bool main_b_cdc_enable = false; static volatile bool main_b_dtr_active = false; -void usb_task_idle() { +void usb_task_idle(void) { #if ENABLED(SDSUPPORT) // Attend SD card access from the USB MSD -- Prioritize access to improve speed int delay = 2; @@ -70,14 +70,14 @@ void usb_task_idle() { } #if ENABLED(SDSUPPORT) - bool usb_task_msc_enable() { return ((main_b_msc_enable = true)); } - void usb_task_msc_disable() { main_b_msc_enable = false; } - bool usb_task_msc_isenabled() { return main_b_msc_enable; } + bool usb_task_msc_enable(void) { return ((main_b_msc_enable = true)); } + void usb_task_msc_disable(void) { main_b_msc_enable = false; } + bool usb_task_msc_isenabled(void) { return main_b_msc_enable; } #endif bool usb_task_cdc_enable(const uint8_t port) { UNUSED(port); return ((main_b_cdc_enable = true)); } void usb_task_cdc_disable(const uint8_t port) { UNUSED(port); main_b_cdc_enable = false; main_b_dtr_active = false; } -bool usb_task_cdc_isenabled() { return main_b_cdc_enable; } +bool usb_task_cdc_isenabled(void) { return main_b_cdc_enable; } /*! \brief Called by CDC interface * Callback running when CDC device have received data @@ -121,7 +121,7 @@ void usb_task_cdc_set_dtr(const uint8_t port, const bool b_enable) { } } -bool usb_task_cdc_dtr_active() { return main_b_dtr_active; } +bool usb_task_cdc_dtr_active(void) { return main_b_dtr_active; } /// Microsoft WCID descriptor typedef struct USB_MicrosoftCompatibleDescriptor_Interface { @@ -202,7 +202,7 @@ static USB_MicrosoftExtendedPropertiesDescriptor microsoft_extended_properties_d ** WCID configuration information ** Hooked into UDC via UDC_GET_EXTRA_STRING #define. */ -bool usb_task_extra_string() { +bool usb_task_extra_string(void) { static uint8_t udi_msft_magic[] = "MSFT100\xEE"; static uint8_t udi_cdc_name[] = "CDC interface"; #if ENABLED(SDSUPPORT) @@ -262,7 +262,7 @@ bool usb_task_extra_string() { /************************************************************************************************** ** Handle device requests that the ASF stack doesn't */ -bool usb_task_other_requests() { +bool usb_task_other_requests(void) { uint8_t* ptr = 0; uint16_t size = 0; @@ -297,7 +297,7 @@ bool usb_task_other_requests() { return true; } -void usb_task_init() { +void usb_task_init(void) { uint16_t *ptr; diff --git a/Marlin/src/HAL/HAL_DUE/usb/usb_task.h b/Marlin/src/HAL/HAL_DUE/usb/usb_task.h index 26e498348170..fad62fda504b 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/usb_task.h +++ b/Marlin/src/HAL/HAL_DUE/usb/usb_task.h @@ -58,12 +58,12 @@ extern "C" { * * \retval true if MSC startup is ok */ -bool usb_task_msc_enable(); +bool usb_task_msc_enable(void); /*! \brief Called by MSC interface * Callback running when USB Host disable MSC interface */ -void usb_task_msc_disable(); +void usb_task_msc_disable(void); /*! \brief Opens the communication port * This is called by CDC interface when USB Host enable it. @@ -84,25 +84,25 @@ void usb_task_cdc_set_dtr(const uint8_t port, const bool b_enable); /*! \brief Check if MSC is enumerated and configured on the PC side */ -bool usb_task_msc_isenabled(); +bool usb_task_msc_isenabled(void); /*! \brief Check if CDC is enumerated and configured on the PC side */ -bool usb_task_cdc_isenabled(); +bool usb_task_cdc_isenabled(void); /*! \brief Check if CDC is actually OPEN by an application on the PC side * assuming DTR signal means a program is listening to messages */ -bool usb_task_cdc_dtr_active(); +bool usb_task_cdc_dtr_active(void); /*! \brief Called by UDC when USB Host request a extra string different * of this specified in USB device descriptor */ -bool usb_task_extra_string(); +bool usb_task_extra_string(void); /*! \brief Called by UDC when USB Host performs unknown requests */ -bool usb_task_other_requests(); +bool usb_task_other_requests(void); /*! \brief Called by CDC interface * Callback running when CDC device have received data @@ -117,15 +117,15 @@ void usb_task_cdc_config(const uint8_t port, usb_cdc_line_coding_t *cfg); /*! \brief The USB device interrupt */ -void USBD_ISR(); +void USBD_ISR(void); /*! \brief USB task init */ -void usb_task_init(); +void usb_task_init(void); /*! \brief USB task idle */ -void usb_task_idle(); +void usb_task_idle(void); #ifdef __cplusplus } From 5221e2d991ccae7ff4283a60afb240165c8f0199 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Fri, 27 Sep 2019 18:06:26 -0400 Subject: [PATCH 071/120] Restore Host Prompt Info (#15387) --- Marlin/src/Marlin.cpp | 6 +++++- Marlin/src/feature/host_actions.cpp | 3 +++ Marlin/src/feature/host_actions.h | 3 ++- Marlin/src/feature/pause.cpp | 10 +++++++++- Marlin/src/gcode/sdcard/M24_M25.cpp | 3 +++ Marlin/src/lcd/ultralcd.cpp | 3 +++ 6 files changed, 25 insertions(+), 3 deletions(-) diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp index 0dca9879d598..89501e9bfaf6 100644 --- a/Marlin/src/Marlin.cpp +++ b/Marlin/src/Marlin.cpp @@ -414,7 +414,7 @@ void disable_all_steppers() { void event_probe_recover() { #if ENABLED(HOST_PROMPT_SUPPORT) - host_prompt_do(PROMPT_INFO, PSTR("G29 Retrying")); + host_prompt_do(PROMPT_INFO, PSTR("G29 Retrying"), PSTR("Dismiss")); #endif #ifdef ACTION_ON_G29_RECOVER host_action(PSTR(ACTION_ON_G29_RECOVER)); @@ -1155,6 +1155,10 @@ void setup() { card.beginautostart(); #endif + #if ENABLED(HOST_PROMPT_SUPPORT) + host_action_prompt_end(); + #endif + #if HAS_TRINAMIC && DISABLED(PS_DEFAULT_OFF) test_tmc_connection(true, true, true, true); #endif diff --git a/Marlin/src/feature/host_actions.cpp b/Marlin/src/feature/host_actions.cpp index 26c24aaf4efb..b39b0fbc3c2f 100644 --- a/Marlin/src/feature/host_actions.cpp +++ b/Marlin/src/feature/host_actions.cpp @@ -154,6 +154,9 @@ void host_action(const char * const pstr, const bool eol) { queue.inject_P(PSTR("M24")); #endif break; + case PROMPT_INFO: + msg = PSTR("GCODE_INFO"); + break; default: break; } say_m876_response(msg); diff --git a/Marlin/src/feature/host_actions.h b/Marlin/src/feature/host_actions.h index 11078ce20fce..7477b6e6dff5 100644 --- a/Marlin/src/feature/host_actions.h +++ b/Marlin/src/feature/host_actions.h @@ -51,7 +51,8 @@ void host_action(const char * const pstr, const bool eol=true); PROMPT_FILAMENT_RUNOUT, PROMPT_USER_CONTINUE, PROMPT_FILAMENT_RUNOUT_REHEAT, - PROMPT_PAUSE_RESUME + PROMPT_PAUSE_RESUME, + PROMPT_INFO }; extern PromptReason host_prompt_reason; diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index cf9f1838d408..ff200d0afb6b 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -401,6 +401,10 @@ bool pause_print(const float &retract, const point_t &park_point, const float &u #endif #endif + #if ENABLED(HOST_PROMPT_SUPPORT) + host_prompt_open(PROMPT_INFO, PSTR("Pause"), PSTR("Dismiss")); + #endif + if (!DEBUGGING(DRYRUN) && unload_length && thermalManager.targetTooColdToExtrude(active_extruder)) { SERIAL_ECHO_MSG(MSG_ERR_HOTEND_TOO_COLD); @@ -554,7 +558,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep while (wait_for_user) idle(true); #if ENABLED(HOST_PROMPT_SUPPORT) - host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Reheating")); + host_prompt_do(PROMPT_INFO, PSTR("Reheating")); #endif #if ENABLED(EXTENSIBLE_UI) ExtUI::onStatusChanged(PSTR("Reheating...")); @@ -676,6 +680,10 @@ void resume_print(const float &slow_load_length/*=0*/, const float &fast_load_le --did_pause_print; + #if ENABLED(HOST_PROMPT_SUPPORT) + host_prompt_open(PROMPT_INFO, PSTR("Resuming"), PSTR("Dismiss")); + #endif + #if ENABLED(SDSUPPORT) if (did_pause_print) { card.startFileprint(); diff --git a/Marlin/src/gcode/sdcard/M24_M25.cpp b/Marlin/src/gcode/sdcard/M24_M25.cpp index 12d5313fcfd4..154a4f7c557a 100644 --- a/Marlin/src/gcode/sdcard/M24_M25.cpp +++ b/Marlin/src/gcode/sdcard/M24_M25.cpp @@ -71,6 +71,9 @@ void GcodeSuite::M24() { #ifdef ACTION_ON_RESUME host_action_resume(); #endif + #if ENABLED(HOST_PROMPT_SUPPORT) + host_prompt_open(PROMPT_INFO, PSTR("Resuming SD"), PSTR("Dismiss")); + #endif #endif ui.reset_status(); diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp index 390e0f17fad5..389a58f2dc40 100644 --- a/Marlin/src/lcd/ultralcd.cpp +++ b/Marlin/src/lcd/ultralcd.cpp @@ -1481,6 +1481,9 @@ void MarlinUI::update() { #ifdef ACTION_ON_CANCEL host_action_cancel(); #endif + #if ENABLED(HOST_PROMPT_SUPPORT) + host_prompt_open(PROMPT_INFO, PSTR("UI Aborted"), PSTR("Dismiss")); + #endif print_job_timer.stop(); set_status_P(PSTR(MSG_PRINT_ABORTED)); #if HAS_LCD_MENU From 5f18f5bb905bcdc5c8688d457e0255548ea7c448 Mon Sep 17 00:00:00 2001 From: Jason Smith Date: Fri, 27 Sep 2019 17:18:12 -0700 Subject: [PATCH 072/120] Require TMCStepper >= 0.5.0 in platformio.ini (#15382) --- platformio.ini | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/platformio.ini b/platformio.ini index 8817fb9bf130..190c8af5da1a 100644 --- a/platformio.ini +++ b/platformio.ini @@ -27,7 +27,7 @@ build_flags = -fmax-errors=5 -g -D__MARLIN_FIRMWARE__ lib_deps = U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/bugfix.zip LiquidCrystal@1.3.4 - TMCStepper@<1.0.0 + TMCStepper@>=0.5.0,<1.0.0 Adafruit NeoPixel@1.1.3 LiquidTWI2=https://github.com/lincomatic/LiquidTWI2/archive/master.zip Arduino-L6470=https://github.com/ameyer/Arduino-L6470/archive/dev.zip @@ -159,7 +159,7 @@ monitor_speed = 250000 lib_deps = Servo LiquidCrystal U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/bugfix.zip - TMCStepper@<1.0.0 + TMCStepper@>=0.5.0,<1.0.0 Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/master.zip SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip @@ -179,7 +179,7 @@ monitor_speed = 250000 lib_deps = Servo LiquidCrystal U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/bugfix.zip - TMCStepper@<1.0.0 + TMCStepper@>=0.5.0,<1.0.0 Adafruit NeoPixel=https://github.com/p3p/Adafruit_NeoPixel/archive/master.zip # @@ -487,7 +487,7 @@ build_flags = ${common.build_flags} lib_deps = U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/bugfix.zip LiquidCrystal@1.3.4 - TMCStepper@<1.0.0 + TMCStepper@>=0.5.0,<1.0.0 Adafruit NeoPixel LiquidTWI2=https://github.com/lincomatic/LiquidTWI2/archive/master.zip Arduino-L6470=https://github.com/ameyer/Arduino-L6470/archive/dev.zip From ebfdf740bc4652432110193f07eb15fbc238cd7d Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Fri, 27 Sep 2019 22:04:13 -0500 Subject: [PATCH 073/120] EZBoard only knows stock display --- Marlin/src/pins/lpc1769/pins_TH3D_EZBOARD.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Marlin/src/pins/lpc1769/pins_TH3D_EZBOARD.h b/Marlin/src/pins/lpc1769/pins_TH3D_EZBOARD.h index f1af6d1fbda7..83e7482807e9 100644 --- a/Marlin/src/pins/lpc1769/pins_TH3D_EZBOARD.h +++ b/Marlin/src/pins/lpc1769/pins_TH3D_EZBOARD.h @@ -169,4 +169,6 @@ #define LCD_PINS_ENABLE P0_18 #define LCD_PINS_D4 P0_15 #define KILL_PIN P2_11 +#elif HAS_SPI_LCD + #error "Only the CR10_STOCKDISPLAY is supported with TH3D EZBoard." #endif From f57ce2b40a61c27d640fbf7e6db6051e9b1eb68a Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 28 Sep 2019 00:00:04 -0500 Subject: [PATCH 074/120] [cron] Bump distribution date --- Marlin/src/inc/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index cf6e77948eb4..b03206484dcc 100644 --- a/Marlin/src/inc/Version.h +++ b/Marlin/src/inc/Version.h @@ -51,7 +51,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ - #define STRING_DISTRIBUTION_DATE "2019-09-27" + #define STRING_DISTRIBUTION_DATE "2019-09-28" /** * Required minimum Configuration.h and Configuration_adv.h file versions. From 1b9fc64d8ae35c28725727f58399abd422a9a7eb Mon Sep 17 00:00:00 2001 From: Maxim Date: Sat, 28 Sep 2019 08:54:30 +0300 Subject: [PATCH 075/120] Add M997 support for SKR PRO 1.1 (#15394) --- Marlin/src/HAL/HAL_STM32/HAL.cpp | 5 +++++ Marlin/src/HAL/HAL_STM32/HAL.h | 3 +++ 2 files changed, 8 insertions(+) diff --git a/Marlin/src/HAL/HAL_STM32/HAL.cpp b/Marlin/src/HAL/HAL_STM32/HAL.cpp index e70d575788f8..6ecde3ef35e2 100644 --- a/Marlin/src/HAL/HAL_STM32/HAL.cpp +++ b/Marlin/src/HAL/HAL_STM32/HAL.cpp @@ -112,4 +112,9 @@ uint16_t HAL_adc_get_result() { return HAL_adc_result; } +void flashFirmware(int16_t value) { + UNUSED(value); + NVIC_SystemReset(); +} + #endif // ARDUINO_ARCH_STM32 && !STM32GENERIC diff --git a/Marlin/src/HAL/HAL_STM32/HAL.h b/Marlin/src/HAL/HAL_STM32/HAL.h index e275290ce5ab..dae75d42f204 100644 --- a/Marlin/src/HAL/HAL_STM32/HAL.h +++ b/Marlin/src/HAL/HAL_STM32/HAL.h @@ -198,3 +198,6 @@ uint16_t HAL_adc_get_result(); #define GET_PIN_MAP_PIN(index) index #define GET_PIN_MAP_INDEX(pin) pin #define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval) + +#define PLATFORM_M997_SUPPORT +void flashFirmware(int16_t value); From a6b0223eead964237e7920c35bb3c7757b722139 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Sat, 28 Sep 2019 02:19:11 -0400 Subject: [PATCH 076/120] Revive and improve DELTA probe bounds, LRFB options (#15372) --- Marlin/Configuration_adv.h | 36 ++++++++ Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 31 ++++--- Marlin/src/gcode/bedlevel/abl/G29.cpp | 7 ++ Marlin/src/inc/Conditionals_post.h | 54 ++++++++++-- Marlin/src/inc/SanityCheck.h | 10 ++- Marlin/src/module/probe.h | 85 +++++++++---------- config/default/Configuration_adv.h | 36 ++++++++ .../3DFabXYZ/Migbot/Configuration_adv.h | 36 ++++++++ .../ADIMLab/Gantry v1/Configuration_adv.h | 36 ++++++++ .../ADIMLab/Gantry v2/Configuration_adv.h | 36 ++++++++ .../AlephObjects/TAZ4/Configuration_adv.h | 36 ++++++++ .../Alfawise/U20-bltouch/Configuration_adv.h | 36 ++++++++ .../examples/Alfawise/U20/Configuration_adv.h | 36 ++++++++ .../AliExpress/UM2pExt/Configuration_adv.h | 36 ++++++++ config/examples/Anet/A2/Configuration_adv.h | 36 ++++++++ .../examples/Anet/A2plus/Configuration_adv.h | 36 ++++++++ config/examples/Anet/A6/Configuration_adv.h | 36 ++++++++ config/examples/Anet/A8/Configuration_adv.h | 36 ++++++++ .../examples/Anet/A8plus/Configuration_adv.h | 36 ++++++++ config/examples/Anet/E16/Configuration_adv.h | 36 ++++++++ .../examples/AnyCubic/i3/Configuration_adv.h | 36 ++++++++ config/examples/ArmEd/Configuration_adv.h | 36 ++++++++ .../BIBO/TouchX/cyclops/Configuration_adv.h | 36 ++++++++ .../BIBO/TouchX/default/Configuration_adv.h | 36 ++++++++ .../examples/BQ/Hephestos/Configuration_adv.h | 36 ++++++++ .../BQ/Hephestos_2/Configuration_adv.h | 36 ++++++++ config/examples/BQ/WITBOX/Configuration_adv.h | 36 ++++++++ config/examples/Cartesio/Configuration_adv.h | 36 ++++++++ .../Creality/CR-10/Configuration_adv.h | 36 ++++++++ .../Creality/CR-10S/Configuration_adv.h | 36 ++++++++ .../Creality/CR-10_5S/Configuration_adv.h | 36 ++++++++ .../Creality/CR-10mini/Configuration_adv.h | 36 ++++++++ .../Creality/CR-20 Pro/Configuration_adv.h | 36 ++++++++ .../Creality/CR-20/Configuration_adv.h | 36 ++++++++ .../Creality/CR-8/Configuration_adv.h | 36 ++++++++ .../Creality/Ender-2/Configuration_adv.h | 36 ++++++++ .../Creality/Ender-3/Configuration_adv.h | 36 ++++++++ .../Creality/Ender-4/Configuration_adv.h | 36 ++++++++ .../Creality/Ender-5/Configuration_adv.h | 36 ++++++++ .../Dagoma/Disco Ultimate/Configuration_adv.h | 36 ++++++++ .../Sidewinder X1/Configuration_adv.h | 36 ++++++++ .../examples/Einstart-S/Configuration_adv.h | 36 ++++++++ .../FYSETC/AIO_II/Configuration_adv.h | 36 ++++++++ .../Cheetah 1.2/BLTouch/Configuration_adv.h | 36 ++++++++ .../Cheetah 1.2/base/Configuration_adv.h | 36 ++++++++ .../Cheetah/BLTouch/Configuration_adv.h | 36 ++++++++ .../FYSETC/Cheetah/base/Configuration_adv.h | 36 ++++++++ .../examples/FYSETC/F6_13/Configuration_adv.h | 36 ++++++++ config/examples/Felix/Configuration_adv.h | 36 ++++++++ .../FlashForge/CreatorPro/Configuration_adv.h | 36 ++++++++ .../FolgerTech/i3-2020/Configuration_adv.h | 36 ++++++++ .../Formbot/Raptor/Configuration_adv.h | 36 ++++++++ .../Formbot/T_Rex_2+/Configuration_adv.h | 36 ++++++++ .../Formbot/T_Rex_3/Configuration_adv.h | 36 ++++++++ .../examples/Geeetech/A10/Configuration_adv.h | 36 ++++++++ .../Geeetech/A10M/Configuration_adv.h | 36 ++++++++ .../Geeetech/A20M/Configuration_adv.h | 36 ++++++++ .../Geeetech/MeCreator2/Configuration_adv.h | 36 ++++++++ .../Prusa i3 Pro C/Configuration_adv.h | 36 ++++++++ .../Prusa i3 Pro W/Configuration_adv.h | 36 ++++++++ config/examples/HMS434/Configuration_adv.h | 36 ++++++++ .../Infitary/i3-M508/Configuration_adv.h | 36 ++++++++ .../examples/JGAurora/A1/Configuration_adv.h | 36 ++++++++ .../examples/JGAurora/A5/Configuration_adv.h | 36 ++++++++ .../examples/JGAurora/A5S/Configuration_adv.h | 36 ++++++++ .../examples/MakerParts/Configuration_adv.h | 36 ++++++++ .../examples/Malyan/M150/Configuration_adv.h | 36 ++++++++ .../examples/Malyan/M200/Configuration_adv.h | 36 ++++++++ .../Micromake/C1/enhanced/Configuration_adv.h | 36 ++++++++ config/examples/Mks/Robin/Configuration_adv.h | 36 ++++++++ config/examples/Mks/Sbase/Configuration_adv.h | 36 ++++++++ .../RapideLite/RL200/Configuration_adv.h | 36 ++++++++ config/examples/RigidBot/Configuration_adv.h | 36 ++++++++ config/examples/SCARA/Configuration_adv.h | 36 ++++++++ .../Black_STM32F407VET6/Configuration_adv.h | 36 ++++++++ .../examples/Sanguinololu/Configuration_adv.h | 36 ++++++++ .../Tevo/Michelangelo/Configuration_adv.h | 36 ++++++++ .../Tevo/Tarantula Pro/Configuration_adv.h | 36 ++++++++ .../Tornado/V1 (MKS Base)/Configuration_adv.h | 36 ++++++++ .../V2 (MKS GEN-L)/Configuration_adv.h | 36 ++++++++ config/examples/TheBorg/Configuration_adv.h | 36 ++++++++ config/examples/TinyBoy2/Configuration_adv.h | 36 ++++++++ .../examples/Tronxy/X3A/Configuration_adv.h | 36 ++++++++ .../Tronxy/X5S-2E/Configuration_adv.h | 36 ++++++++ .../UltiMachine/Archim1/Configuration_adv.h | 36 ++++++++ .../UltiMachine/Archim2/Configuration_adv.h | 36 ++++++++ .../examples/VORONDesign/Configuration_adv.h | 36 ++++++++ .../Velleman/K8200/Configuration_adv.h | 36 ++++++++ .../Velleman/K8400/Configuration_adv.h | 36 ++++++++ .../WASP/PowerWASP/Configuration_adv.h | 36 ++++++++ .../Wanhao/Duplicator 6/Configuration_adv.h | 36 ++++++++ .../Duplicator i3 Mini/Configuration_adv.h | 36 ++++++++ .../delta/Anycubic/Kossel/Configuration_adv.h | 36 ++++++++ .../Dreammaker/Overlord/Configuration_adv.h | 36 ++++++++ .../Overlord_Pro/Configuration_adv.h | 36 ++++++++ .../FLSUN/auto_calibrate/Configuration_adv.h | 36 ++++++++ .../delta/FLSUN/kossel/Configuration_adv.h | 36 ++++++++ .../FLSUN/kossel_mini/Configuration_adv.h | 36 ++++++++ .../Geeetech/Rostock 301/Configuration_adv.h | 36 ++++++++ .../delta/MKS/SBASE/Configuration_adv.h | 36 ++++++++ .../Tevo Little Monster/Configuration_adv.h | 36 ++++++++ .../delta/generic/Configuration_adv.h | 36 ++++++++ .../delta/kossel_mini/Configuration_adv.h | 36 ++++++++ .../delta/kossel_xl/Configuration_adv.h | 36 ++++++++ .../gCreate/gMax1.5+/Configuration_adv.h | 36 ++++++++ config/examples/makibox/Configuration_adv.h | 36 ++++++++ .../tvrrug/Round2/Configuration_adv.h | 36 ++++++++ config/examples/wt150/Configuration_adv.h | 36 ++++++++ 108 files changed, 3833 insertions(+), 62 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 8a3a88ba5d31..3f69ba0f23b8 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index 2ffeb17e2f1e..54c7666bacfb 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -1391,6 +1391,18 @@ dx = (x_max - x_min) / (g29_grid_size - 1), dy = (y_max - y_min) / (g29_grid_size - 1); + vector_3 points[3] = { + #if ENABLED(HAS_FIXED_3POINT) + vector_3(PROBE_PT_1_X, PROBE_PT_1_Y, 0), + vector_3(PROBE_PT_2_X, PROBE_PT_2_Y, 0), + vector_3(PROBE_PT_3_X, PROBE_PT_3_Y, 0) + #else + vector_3(x_min, y_min, 0), + vector_3(x_max, y_min, 0), + vector_3((x_max - x_min) / 2, y_max, 0) + #endif + }; + float measured_z; bool abort_flag = false; @@ -1407,11 +1419,11 @@ ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 1/3")); #endif - measured_z = probe_at_point(x_min, y_min, PROBE_PT_RAISE, g29_verbose_level); + measured_z = probe_at_point(points[0].x, points[0].y, PROBE_PT_RAISE, g29_verbose_level); if (isnan(measured_z)) abort_flag = true; else { - measured_z -= get_z_correction(x_min, y_min); + measured_z -= get_z_correction(points[0].x, points[0].y); #ifdef VALIDATE_MESH_TILT z1 = measured_z; #endif @@ -1419,7 +1431,7 @@ serial_spaces(16); SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z); } - incremental_LSF(&lsf_results, x_min, y_min, measured_z); + incremental_LSF(&lsf_results, points[0].x, points[0].y, measured_z); } if (!abort_flag) { @@ -1428,19 +1440,19 @@ ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 2/3")); #endif - measured_z = probe_at_point(x_max, y_min, PROBE_PT_RAISE, g29_verbose_level); + measured_z = probe_at_point(points[1].x, points[1].y, PROBE_PT_RAISE, g29_verbose_level); #ifdef VALIDATE_MESH_TILT z2 = measured_z; #endif if (isnan(measured_z)) abort_flag = true; else { - measured_z -= get_z_correction(x_max, y_min); + measured_z -= get_z_correction(points[1].x, points[1].y); if (g29_verbose_level > 3) { serial_spaces(16); SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z); } - incremental_LSF(&lsf_results, x_max, y_min, measured_z); + incremental_LSF(&lsf_results, points[1].x, points[1].y, measured_z); } } @@ -1450,20 +1462,19 @@ ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 3/3")); #endif - const float center_probe = (x_max - x_min) / 2; - measured_z = probe_at_point(center_probe, y_max, PROBE_PT_STOW, g29_verbose_level); + measured_z = probe_at_point(points[2].x, points[2].y, PROBE_PT_STOW, g29_verbose_level); #ifdef VALIDATE_MESH_TILT z3 = measured_z; #endif if (isnan(measured_z)) abort_flag = true; else { - measured_z -= get_z_correction(center_probe, y_max); + measured_z -= get_z_correction(points[2].x, points[2].y); if (g29_verbose_level > 3) { serial_spaces(16); SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z); } - incremental_LSF(&lsf_results, center_probe, y_max, measured_z); + incremental_LSF(&lsf_results, points[2].x, points[2].y, measured_z); } } diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 82dc02502e5a..45eec2805d19 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -267,10 +267,17 @@ G29_TYPE GcodeSuite::G29() { // Probe at 3 arbitrary points const float x_min = probe_min_x(), x_max = probe_max_x(), y_min = probe_min_y(), y_max = probe_max_y(); + ABL_VAR vector_3 points[3] = { + #if ENABLED(HAS_FIXED_3POINT) + vector_3(PROBE_PT_1_X, PROBE_PT_1_Y, 0), + vector_3(PROBE_PT_2_X, PROBE_PT_2_Y, 0), + vector_3(PROBE_PT_3_X, PROBE_PT_3_Y, 0) + #else vector_3(x_min, y_min, 0), vector_3(x_max, y_min, 0), vector_3((x_max - x_min) / 2, y_max, 0) + #endif }; #endif // AUTO_BED_LEVELING_3POINT diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 829fb7c5fbc7..d5aae1e0f8b7 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -1448,6 +1448,18 @@ #ifndef MIN_PROBE_EDGE #define MIN_PROBE_EDGE 0 #endif +#ifndef MIN_PROBE_EDGE_LEFT + #define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE +#endif +#ifndef MIN_PROBE_EDGE_RIGHT + #define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE +#endif +#ifndef MIN_PROBE_EDGE_FRONT + #define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE +#endif +#ifndef MIN_PROBE_EDGE_BACK + #define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif #ifndef NOZZLE_TO_PROBE_OFFSET #define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0 } @@ -1490,10 +1502,10 @@ #define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2) #define _PROBE_RADIUS (SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - #define PROBE_X_MIN (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MIN_PROBE_EDGE) - #define PROBE_Y_MIN (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MIN_PROBE_EDGE) - #define PROBE_X_MAX (X_CENTER + SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) - #define PROBE_Y_MAX (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) + #define PROBE_X_MIN (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MIN_PROBE_EDGE_LEFT) + #define PROBE_Y_MIN (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MIN_PROBE_EDGE_FRONT) + #define PROBE_X_MAX (X_CENTER + SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE_RIGHT)) + #define PROBE_Y_MAX (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE_BACK)) #endif #if ENABLED(SEGMENT_LEVELED_MOVES) && !defined(LEVELED_SEGMENT_LENGTH) @@ -1503,7 +1515,7 @@ /** * Default mesh area is an area with an inset margin on the print area. */ -#if ANY(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL, AUTO_BED_LEVELING_BILINEAR) +#if HAS_LEVELING #if IS_KINEMATIC // Probing points may be verified at compile time within the radius // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!") @@ -1543,6 +1555,38 @@ #endif // MESH_BED_LEVELING || AUTO_BED_LEVELING_UBL +#if ALL(PROBE_PT_1_X, PROBE_PT_2_X, PROBE_PT_3_X, PROBE_PT_1_Y, PROBE_PT_2_Y, PROBE_PT_3_Y) + #define HAS_FIXED_3POINT; +#endif + +#if EITHER(AUTO_BED_LEVELING_UBL, AUTO_BED_LEVELING_3POINT) && IS_KINEMATIC + #define HAS_FIXED_3POINT + #define SIN0 0.0 + #define SIN120 0.866025 + #define SIN240 -0.866025 + #define COS0 1.0 + #define COS120 -0.5 + #define COS240 -0.5 + #ifndef PROBE_PT_1_X + #define PROBE_PT_1_X (X_CENTER + (_PROBE_RADIUS) * COS0) + #endif + #ifndef PROBE_PT_1_Y + #define PROBE_PT_1_Y (Y_CENTER + (_PROBE_RADIUS) * SIN0) + #endif + #ifndef PROBE_PT_2_X + #define PROBE_PT_2_X (X_CENTER + (_PROBE_RADIUS) * COS120) + #endif + #ifndef PROBE_PT_2_Y + #define PROBE_PT_2_Y (Y_CENTER + (_PROBE_RADIUS) * SIN120) + #endif + #ifndef PROBE_PT_3_X + #define PROBE_PT_3_X (X_CENTER + (_PROBE_RADIUS) * COS240) + #endif + #ifndef PROBE_PT_3_Y + #define PROBE_PT_3_Y (Y_CENTER + (_PROBE_RADIUS) * SIN240) + #endif +#endif + /** * Buzzer/Speaker */ diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 55ff76efb675..d8ca989ab2de 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -251,8 +251,14 @@ #error "ABL_PROBE_PT_[123]_[XY] is no longer required. Please remove it from Configuration.h." #elif defined(UBL_PROBE_PT_1_X) || defined(UBL_PROBE_PT_1_Y) || defined(UBL_PROBE_PT_2_X) || defined(UBL_PROBE_PT_2_Y) || defined(UBL_PROBE_PT_3_X) || defined(UBL_PROBE_PT_3_Y) #error "UBL_PROBE_PT_[123]_[XY] is no longer required. Please remove it from Configuration.h." -#elif defined(PROBE_PT_1_X) || defined(PROBE_PT_1_Y) || defined(PROBE_PT_2_X) || defined(PROBE_PT_2_Y) || defined(PROBE_PT_3_X) || defined(PROBE_PT_3_Y) - #error "PROBE_PT_[123]_[XY] is no longer required. Please remove it from Configuration.h." +#elif defined(LEFT_PROBE_BED_POSITION) + #error LEFT_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_LEFT. Please note the differences and update your configuration." +#elif defined(RIGHT_PROBE_BED_POSITION) + #error RIGHT_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_RIGHT. Please note the differences and update your configuration." +#elif defined(FRONT_PROBE_BED_POSITION) + #error FRONT_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_FRONT. Please note the differences and update your configuration." +#elif defined(BACK_PROBE_BED_POSITION) + #error BACK_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_BACK. Please note the differences and update your configuration." #elif defined(ENABLE_MESH_EDIT_GFX_OVERLAY) #error "ENABLE_MESH_EDIT_GFX_OVERLAY is now MESH_EDIT_GFX_OVERLAY. Please update your configuration." #elif defined(BABYSTEP_ZPROBE_GFX_REVERSE) diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h index 8efb75e41d44..dbdb66e14347 100644 --- a/Marlin/src/module/probe.h +++ b/Marlin/src/module/probe.h @@ -50,61 +50,56 @@ extern const char msg_wait_for_bed_heating[25]; #endif - #if HAS_LEVELING - - inline float probe_min_x() { - return _MAX( - #if ENABLED(DELTA) || IS_SCARA - PROBE_X_MIN, MESH_MIN_X - #else - (X_MIN_BED) + (MIN_PROBE_EDGE), (X_MIN_POS) + probe_offset[X_AXIS] - #endif - ); - } - - inline float probe_max_x() { - return _MIN( - #if ENABLED(DELTA) || IS_SCARA - PROBE_X_MAX, MESH_MAX_X - #else - (X_MAX_BED) - (MIN_PROBE_EDGE), (X_MAX_POS) + probe_offset[X_AXIS] - #endif - ); - } - - inline float probe_min_y() { - return _MAX( - #if ENABLED(DELTA) || IS_SCARA - PROBE_Y_MIN, MESH_MIN_Y - #else - (Y_MIN_BED) + (MIN_PROBE_EDGE), (Y_MIN_POS) + probe_offset[Y_AXIS] - #endif - ); - } - - inline float probe_max_y() { - return _MIN( - #if ENABLED(DELTA) || IS_SCARA - PROBE_Y_MAX, MESH_MAX_Y - #else - (Y_MAX_BED) - (MIN_PROBE_EDGE), (Y_MAX_POS) + probe_offset[Y_AXIS] - #endif - ); - } - - #endif - #else constexpr float probe_offset[XYZ] = { 0 }; #define DEPLOY_PROBE() #define STOW_PROBE() +#endif + +#if HAS_LEVELING && HAS_BED_PROBE + inline float probe_min_x() { + return _MAX( + #if IS_KINEMATIC + PROBE_X_MIN, MESH_MIN_X + #else + (X_MIN_BED) + (MIN_PROBE_EDGE_LEFT), (X_MIN_POS) + probe_offset[X_AXIS] + #endif + ); + } + inline float probe_max_x() { + return _MIN( + #if IS_KINEMATIC + PROBE_X_MAX, MESH_MAX_X + #else + (X_MAX_BED) - (MIN_PROBE_EDGE_RIGHT), (X_MAX_POS) + probe_offset[X_AXIS] + #endif + ); + } + inline float probe_min_y() { + return _MAX( + #if IS_KINEMATIC + PROBE_Y_MIN, MESH_MIN_Y + #else + (Y_MIN_BED) + (MIN_PROBE_EDGE_FRONT), (Y_MIN_POS) + probe_offset[Y_AXIS] + #endif + ); + } + inline float probe_max_y() { + return _MIN( + #if IS_KINEMATIC + PROBE_Y_MAX, MESH_MAX_Y + #else + (Y_MAX_BED) - (MIN_PROBE_EDGE_BACK), (Y_MAX_POS) + probe_offset[Y_AXIS] + #endif + ); + } +#else inline float probe_min_x() { return 0; }; inline float probe_max_x() { return 0; }; inline float probe_min_y() { return 0; }; inline float probe_max_y() { return 0; }; - #endif #if HAS_Z_SERVO_PROBE diff --git a/config/default/Configuration_adv.h b/config/default/Configuration_adv.h index 8a3a88ba5d31..bac2acf1bcb7 100644 --- a/config/default/Configuration_adv.h +++ b/config/default/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h index a18166461875..1007185a9381 100644 --- a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h +++ b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h index d89af8ae23e4..abb62a696254 100644 --- a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h index 9ebe0f5f1e2e..e4ef517ca77d 100644 --- a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/AlephObjects/TAZ4/Configuration_adv.h b/config/examples/AlephObjects/TAZ4/Configuration_adv.h index 45e4b7d73906..05ae34b208ee 100644 --- a/config/examples/AlephObjects/TAZ4/Configuration_adv.h +++ b/config/examples/AlephObjects/TAZ4/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h index 7f67e066bd91..0a5629b873e0 100644 --- a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h +++ b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h @@ -1342,6 +1342,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Alfawise/U20/Configuration_adv.h b/config/examples/Alfawise/U20/Configuration_adv.h index 78ed3049441a..278fd6709591 100644 --- a/config/examples/Alfawise/U20/Configuration_adv.h +++ b/config/examples/Alfawise/U20/Configuration_adv.h @@ -1341,6 +1341,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/AliExpress/UM2pExt/Configuration_adv.h b/config/examples/AliExpress/UM2pExt/Configuration_adv.h index ec4763307e57..74bf6ea7fbc9 100644 --- a/config/examples/AliExpress/UM2pExt/Configuration_adv.h +++ b/config/examples/AliExpress/UM2pExt/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Anet/A2/Configuration_adv.h b/config/examples/Anet/A2/Configuration_adv.h index cbcbd526b21d..a3fb3c5c568f 100644 --- a/config/examples/Anet/A2/Configuration_adv.h +++ b/config/examples/Anet/A2/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Anet/A2plus/Configuration_adv.h b/config/examples/Anet/A2plus/Configuration_adv.h index cbcbd526b21d..a3fb3c5c568f 100644 --- a/config/examples/Anet/A2plus/Configuration_adv.h +++ b/config/examples/Anet/A2plus/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Anet/A6/Configuration_adv.h b/config/examples/Anet/A6/Configuration_adv.h index 62d5566883fd..26835659ff2d 100644 --- a/config/examples/Anet/A6/Configuration_adv.h +++ b/config/examples/Anet/A6/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Anet/A8/Configuration_adv.h b/config/examples/Anet/A8/Configuration_adv.h index 66fe7deca134..7c66ebfbc30c 100644 --- a/config/examples/Anet/A8/Configuration_adv.h +++ b/config/examples/Anet/A8/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Anet/A8plus/Configuration_adv.h b/config/examples/Anet/A8plus/Configuration_adv.h index e838677df1b8..261792854592 100644 --- a/config/examples/Anet/A8plus/Configuration_adv.h +++ b/config/examples/Anet/A8plus/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Anet/E16/Configuration_adv.h b/config/examples/Anet/E16/Configuration_adv.h index 6c6682dcdb75..de6d2d8cadbd 100644 --- a/config/examples/Anet/E16/Configuration_adv.h +++ b/config/examples/Anet/E16/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/AnyCubic/i3/Configuration_adv.h b/config/examples/AnyCubic/i3/Configuration_adv.h index 08a40bfd883b..4535ddd15d96 100644 --- a/config/examples/AnyCubic/i3/Configuration_adv.h +++ b/config/examples/AnyCubic/i3/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/ArmEd/Configuration_adv.h b/config/examples/ArmEd/Configuration_adv.h index d257be07a7f0..206ec66b7321 100644 --- a/config/examples/ArmEd/Configuration_adv.h +++ b/config/examples/ArmEd/Configuration_adv.h @@ -1341,6 +1341,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h index 4aa648f938e0..948553cc0267 100644 --- a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/BIBO/TouchX/default/Configuration_adv.h b/config/examples/BIBO/TouchX/default/Configuration_adv.h index 4423281c44a6..57b3879264cf 100644 --- a/config/examples/BIBO/TouchX/default/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/default/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/BQ/Hephestos/Configuration_adv.h b/config/examples/BQ/Hephestos/Configuration_adv.h index 266c86e0e0fc..7caba1b36a6d 100644 --- a/config/examples/BQ/Hephestos/Configuration_adv.h +++ b/config/examples/BQ/Hephestos/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/BQ/Hephestos_2/Configuration_adv.h b/config/examples/BQ/Hephestos_2/Configuration_adv.h index 88f89018574c..39546c03aafc 100644 --- a/config/examples/BQ/Hephestos_2/Configuration_adv.h +++ b/config/examples/BQ/Hephestos_2/Configuration_adv.h @@ -1345,6 +1345,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/BQ/WITBOX/Configuration_adv.h b/config/examples/BQ/WITBOX/Configuration_adv.h index 266c86e0e0fc..7caba1b36a6d 100644 --- a/config/examples/BQ/WITBOX/Configuration_adv.h +++ b/config/examples/BQ/WITBOX/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Cartesio/Configuration_adv.h b/config/examples/Cartesio/Configuration_adv.h index d1d48b66beec..4829230178cf 100644 --- a/config/examples/Cartesio/Configuration_adv.h +++ b/config/examples/Cartesio/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Creality/CR-10/Configuration_adv.h b/config/examples/Creality/CR-10/Configuration_adv.h index 88a287e24666..38579f130b12 100644 --- a/config/examples/Creality/CR-10/Configuration_adv.h +++ b/config/examples/Creality/CR-10/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Creality/CR-10S/Configuration_adv.h b/config/examples/Creality/CR-10S/Configuration_adv.h index c90716a664ed..39c40f594fe2 100644 --- a/config/examples/Creality/CR-10S/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Creality/CR-10_5S/Configuration_adv.h b/config/examples/Creality/CR-10_5S/Configuration_adv.h index 71eaa7bc38ec..a18004fc7a38 100644 --- a/config/examples/Creality/CR-10_5S/Configuration_adv.h +++ b/config/examples/Creality/CR-10_5S/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Creality/CR-10mini/Configuration_adv.h b/config/examples/Creality/CR-10mini/Configuration_adv.h index c2f085e52604..9f265b4bcb8a 100644 --- a/config/examples/Creality/CR-10mini/Configuration_adv.h +++ b/config/examples/Creality/CR-10mini/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Creality/CR-20 Pro/Configuration_adv.h b/config/examples/Creality/CR-20 Pro/Configuration_adv.h index de9c4ef088ce..62861301fb0a 100644 --- a/config/examples/Creality/CR-20 Pro/Configuration_adv.h +++ b/config/examples/Creality/CR-20 Pro/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Creality/CR-20/Configuration_adv.h b/config/examples/Creality/CR-20/Configuration_adv.h index 164b5c154e7b..5ef0e0ecb5f4 100644 --- a/config/examples/Creality/CR-20/Configuration_adv.h +++ b/config/examples/Creality/CR-20/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Creality/CR-8/Configuration_adv.h b/config/examples/Creality/CR-8/Configuration_adv.h index e0ef03de3ed8..872dd34dc502 100644 --- a/config/examples/Creality/CR-8/Configuration_adv.h +++ b/config/examples/Creality/CR-8/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Creality/Ender-2/Configuration_adv.h b/config/examples/Creality/Ender-2/Configuration_adv.h index b16c71959f64..a694cd9b15eb 100644 --- a/config/examples/Creality/Ender-2/Configuration_adv.h +++ b/config/examples/Creality/Ender-2/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Creality/Ender-3/Configuration_adv.h b/config/examples/Creality/Ender-3/Configuration_adv.h index 378a1d7ace7d..4af52ddc118f 100644 --- a/config/examples/Creality/Ender-3/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Creality/Ender-4/Configuration_adv.h b/config/examples/Creality/Ender-4/Configuration_adv.h index 5831e95e134c..8f4262e48d47 100644 --- a/config/examples/Creality/Ender-4/Configuration_adv.h +++ b/config/examples/Creality/Ender-4/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Creality/Ender-5/Configuration_adv.h b/config/examples/Creality/Ender-5/Configuration_adv.h index 6acb053724a4..89d508aa90f2 100644 --- a/config/examples/Creality/Ender-5/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h index cd6fc824e323..b46b40e6d308 100644 --- a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h +++ b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h index d57feb9b0288..8f3db3fa7996 100755 --- a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h +++ b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Einstart-S/Configuration_adv.h b/config/examples/Einstart-S/Configuration_adv.h index 2cbbf501313f..7f19fe213bf5 100644 --- a/config/examples/Einstart-S/Configuration_adv.h +++ b/config/examples/Einstart-S/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/FYSETC/AIO_II/Configuration_adv.h b/config/examples/FYSETC/AIO_II/Configuration_adv.h index 815a764d31a1..0bfa79d0002f 100644 --- a/config/examples/FYSETC/AIO_II/Configuration_adv.h +++ b/config/examples/FYSETC/AIO_II/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h index 7f9ebd48355f..e0299a507a15 100644 --- a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h index 7f9ebd48355f..e0299a507a15 100644 --- a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h index 7f9ebd48355f..e0299a507a15 100644 --- a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h index 7f9ebd48355f..e0299a507a15 100644 --- a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/FYSETC/F6_13/Configuration_adv.h b/config/examples/FYSETC/F6_13/Configuration_adv.h index d6888629a028..435f1b485dfe 100644 --- a/config/examples/FYSETC/F6_13/Configuration_adv.h +++ b/config/examples/FYSETC/F6_13/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Felix/Configuration_adv.h b/config/examples/Felix/Configuration_adv.h index 4e43356f62cc..7848cac6ce59 100644 --- a/config/examples/Felix/Configuration_adv.h +++ b/config/examples/Felix/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/FlashForge/CreatorPro/Configuration_adv.h b/config/examples/FlashForge/CreatorPro/Configuration_adv.h index 4bdce369379e..4fe03c42abb7 100644 --- a/config/examples/FlashForge/CreatorPro/Configuration_adv.h +++ b/config/examples/FlashForge/CreatorPro/Configuration_adv.h @@ -1336,6 +1336,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/FolgerTech/i3-2020/Configuration_adv.h b/config/examples/FolgerTech/i3-2020/Configuration_adv.h index a8963f000fe4..488c7b73ae2a 100644 --- a/config/examples/FolgerTech/i3-2020/Configuration_adv.h +++ b/config/examples/FolgerTech/i3-2020/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Formbot/Raptor/Configuration_adv.h b/config/examples/Formbot/Raptor/Configuration_adv.h index d4f1ab3a92b0..655443a27ea5 100644 --- a/config/examples/Formbot/Raptor/Configuration_adv.h +++ b/config/examples/Formbot/Raptor/Configuration_adv.h @@ -1339,6 +1339,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h index 0e1a5666a7b2..7f5ba7c33e79 100644 --- a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h @@ -1341,6 +1341,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X 4 diff --git a/config/examples/Formbot/T_Rex_3/Configuration_adv.h b/config/examples/Formbot/T_Rex_3/Configuration_adv.h index 4603bb46cf15..4d70eaabae5f 100644 --- a/config/examples/Formbot/T_Rex_3/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_3/Configuration_adv.h @@ -1341,6 +1341,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X 4 diff --git a/config/examples/Geeetech/A10/Configuration_adv.h b/config/examples/Geeetech/A10/Configuration_adv.h index 6a63fe134f0d..affcf4399a7e 100644 --- a/config/examples/Geeetech/A10/Configuration_adv.h +++ b/config/examples/Geeetech/A10/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Geeetech/A10M/Configuration_adv.h b/config/examples/Geeetech/A10M/Configuration_adv.h index e45949e265c2..099176935025 100644 --- a/config/examples/Geeetech/A10M/Configuration_adv.h +++ b/config/examples/Geeetech/A10M/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Geeetech/A20M/Configuration_adv.h b/config/examples/Geeetech/A20M/Configuration_adv.h index 4c7ea8c85e84..409a1b1658ed 100644 --- a/config/examples/Geeetech/A20M/Configuration_adv.h +++ b/config/examples/Geeetech/A20M/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Geeetech/MeCreator2/Configuration_adv.h b/config/examples/Geeetech/MeCreator2/Configuration_adv.h index b98dbc72550e..66c10df22ff3 100644 --- a/config/examples/Geeetech/MeCreator2/Configuration_adv.h +++ b/config/examples/Geeetech/MeCreator2/Configuration_adv.h @@ -1336,6 +1336,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h index 6a63fe134f0d..affcf4399a7e 100644 --- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h index 6a63fe134f0d..affcf4399a7e 100644 --- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/HMS434/Configuration_adv.h b/config/examples/HMS434/Configuration_adv.h index 6d6bec513413..e89f3699e966 100644 --- a/config/examples/HMS434/Configuration_adv.h +++ b/config/examples/HMS434/Configuration_adv.h @@ -1316,6 +1316,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Infitary/i3-M508/Configuration_adv.h b/config/examples/Infitary/i3-M508/Configuration_adv.h index 6bf7d1849f38..47ee220ae950 100644 --- a/config/examples/Infitary/i3-M508/Configuration_adv.h +++ b/config/examples/Infitary/i3-M508/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/JGAurora/A1/Configuration_adv.h b/config/examples/JGAurora/A1/Configuration_adv.h index 011ed0447b7b..d9a3fe6f6b90 100644 --- a/config/examples/JGAurora/A1/Configuration_adv.h +++ b/config/examples/JGAurora/A1/Configuration_adv.h @@ -1342,6 +1342,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/JGAurora/A5/Configuration_adv.h b/config/examples/JGAurora/A5/Configuration_adv.h index 2f94d31f0cc3..8fde777de9e1 100644 --- a/config/examples/JGAurora/A5/Configuration_adv.h +++ b/config/examples/JGAurora/A5/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/JGAurora/A5S/Configuration_adv.h b/config/examples/JGAurora/A5S/Configuration_adv.h index 011ed0447b7b..d9a3fe6f6b90 100644 --- a/config/examples/JGAurora/A5S/Configuration_adv.h +++ b/config/examples/JGAurora/A5S/Configuration_adv.h @@ -1342,6 +1342,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/MakerParts/Configuration_adv.h b/config/examples/MakerParts/Configuration_adv.h index 9d25fa59291f..9e9a2b279c5d 100644 --- a/config/examples/MakerParts/Configuration_adv.h +++ b/config/examples/MakerParts/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Malyan/M150/Configuration_adv.h b/config/examples/Malyan/M150/Configuration_adv.h index 5053030dcf6b..af59554c0fe8 100644 --- a/config/examples/Malyan/M150/Configuration_adv.h +++ b/config/examples/Malyan/M150/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Malyan/M200/Configuration_adv.h b/config/examples/Malyan/M200/Configuration_adv.h index 2191f8bdead9..cf422c358ed6 100644 --- a/config/examples/Malyan/M200/Configuration_adv.h +++ b/config/examples/Malyan/M200/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Micromake/C1/enhanced/Configuration_adv.h b/config/examples/Micromake/C1/enhanced/Configuration_adv.h index b8122dc51842..420653d89088 100644 --- a/config/examples/Micromake/C1/enhanced/Configuration_adv.h +++ b/config/examples/Micromake/C1/enhanced/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Mks/Robin/Configuration_adv.h b/config/examples/Mks/Robin/Configuration_adv.h index 1f844aa8f5ac..00297f58afc4 100644 --- a/config/examples/Mks/Robin/Configuration_adv.h +++ b/config/examples/Mks/Robin/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Mks/Sbase/Configuration_adv.h b/config/examples/Mks/Sbase/Configuration_adv.h index ab476163e09d..63e1a876f226 100644 --- a/config/examples/Mks/Sbase/Configuration_adv.h +++ b/config/examples/Mks/Sbase/Configuration_adv.h @@ -1338,6 +1338,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/RapideLite/RL200/Configuration_adv.h b/config/examples/RapideLite/RL200/Configuration_adv.h index 898c0bbfec15..0a13f81e30fd 100644 --- a/config/examples/RapideLite/RL200/Configuration_adv.h +++ b/config/examples/RapideLite/RL200/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/RigidBot/Configuration_adv.h b/config/examples/RigidBot/Configuration_adv.h index e8dc00170238..4604dae51fe4 100644 --- a/config/examples/RigidBot/Configuration_adv.h +++ b/config/examples/RigidBot/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/SCARA/Configuration_adv.h b/config/examples/SCARA/Configuration_adv.h index a5ec22406035..8db4c49b02ed 100644 --- a/config/examples/SCARA/Configuration_adv.h +++ b/config/examples/SCARA/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h index b9624125f7eb..e4cdc12787fe 100644 --- a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h +++ b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Sanguinololu/Configuration_adv.h b/config/examples/Sanguinololu/Configuration_adv.h index d94398efef1e..3124a1ec789e 100644 --- a/config/examples/Sanguinololu/Configuration_adv.h +++ b/config/examples/Sanguinololu/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Tevo/Michelangelo/Configuration_adv.h b/config/examples/Tevo/Michelangelo/Configuration_adv.h index e54854cf690b..6f14749ccf1e 100644 --- a/config/examples/Tevo/Michelangelo/Configuration_adv.h +++ b/config/examples/Tevo/Michelangelo/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h index 022de25f16b3..e0ed16159183 100755 --- a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h +++ b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h @@ -1333,6 +1333,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h index 96a76391c11d..9337d9e8be1e 100755 --- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h index 96a76391c11d..9337d9e8be1e 100755 --- a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/TheBorg/Configuration_adv.h b/config/examples/TheBorg/Configuration_adv.h index 08f169eee02d..38b0eac8340a 100644 --- a/config/examples/TheBorg/Configuration_adv.h +++ b/config/examples/TheBorg/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/TinyBoy2/Configuration_adv.h b/config/examples/TinyBoy2/Configuration_adv.h index 221c1f983360..ca6ebd41fbde 100644 --- a/config/examples/TinyBoy2/Configuration_adv.h +++ b/config/examples/TinyBoy2/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Tronxy/X3A/Configuration_adv.h b/config/examples/Tronxy/X3A/Configuration_adv.h index e3a7d5605744..54de6476008d 100644 --- a/config/examples/Tronxy/X3A/Configuration_adv.h +++ b/config/examples/Tronxy/X3A/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Tronxy/X5S-2E/Configuration_adv.h b/config/examples/Tronxy/X5S-2E/Configuration_adv.h index f65c7e91c966..a0510df92d80 100644 --- a/config/examples/Tronxy/X5S-2E/Configuration_adv.h +++ b/config/examples/Tronxy/X5S-2E/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/UltiMachine/Archim1/Configuration_adv.h b/config/examples/UltiMachine/Archim1/Configuration_adv.h index 4fc54828b172..0d8f0a74dd36 100644 --- a/config/examples/UltiMachine/Archim1/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim1/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/UltiMachine/Archim2/Configuration_adv.h b/config/examples/UltiMachine/Archim2/Configuration_adv.h index a6702b9bc5ef..b9aa479139d2 100644 --- a/config/examples/UltiMachine/Archim2/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim2/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/VORONDesign/Configuration_adv.h b/config/examples/VORONDesign/Configuration_adv.h index 7bb2065b1bc2..112f85030e15 100644 --- a/config/examples/VORONDesign/Configuration_adv.h +++ b/config/examples/VORONDesign/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Velleman/K8200/Configuration_adv.h b/config/examples/Velleman/K8200/Configuration_adv.h index 3168255e220a..b8f87d706670 100644 --- a/config/examples/Velleman/K8200/Configuration_adv.h +++ b/config/examples/Velleman/K8200/Configuration_adv.h @@ -1350,6 +1350,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Velleman/K8400/Configuration_adv.h b/config/examples/Velleman/K8400/Configuration_adv.h index f9e7e9b717a6..13ad305e88cb 100644 --- a/config/examples/Velleman/K8400/Configuration_adv.h +++ b/config/examples/Velleman/K8400/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/WASP/PowerWASP/Configuration_adv.h b/config/examples/WASP/PowerWASP/Configuration_adv.h index d59bffcbf2ac..ddc59ae65ed8 100644 --- a/config/examples/WASP/PowerWASP/Configuration_adv.h +++ b/config/examples/WASP/PowerWASP/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h index 45acc24b8e59..9ed77b96c7f2 100644 --- a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h @@ -1339,6 +1339,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h index 2e185b9bd789..9ea28ae69e84 100644 --- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h index f407354daa36..260b9a1f45ab 100644 --- a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h +++ b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h @@ -1339,6 +1339,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h index 63071e848043..7fa5d375a465 100644 --- a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h @@ -1339,6 +1339,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h index 63071e848043..7fa5d375a465 100644 --- a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h @@ -1339,6 +1339,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h index e1a89cb1e8f2..eb4f8146c334 100644 --- a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h +++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h @@ -1339,6 +1339,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/delta/FLSUN/kossel/Configuration_adv.h b/config/examples/delta/FLSUN/kossel/Configuration_adv.h index e1a89cb1e8f2..eb4f8146c334 100644 --- a/config/examples/delta/FLSUN/kossel/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel/Configuration_adv.h @@ -1339,6 +1339,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h index 25929c77bef8..1cfa958cd4af 100644 --- a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h @@ -1339,6 +1339,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h index d1107a376b7f..1ee610af6b7f 100644 --- a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h +++ b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h @@ -1339,6 +1339,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/delta/MKS/SBASE/Configuration_adv.h b/config/examples/delta/MKS/SBASE/Configuration_adv.h index d50b30efe47c..0727cd9cbda3 100644 --- a/config/examples/delta/MKS/SBASE/Configuration_adv.h +++ b/config/examples/delta/MKS/SBASE/Configuration_adv.h @@ -1339,6 +1339,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/delta/Tevo Little Monster/Configuration_adv.h b/config/examples/delta/Tevo Little Monster/Configuration_adv.h index 672c12c24bb4..801b19fc91b2 100644 --- a/config/examples/delta/Tevo Little Monster/Configuration_adv.h +++ b/config/examples/delta/Tevo Little Monster/Configuration_adv.h @@ -1339,6 +1339,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/delta/generic/Configuration_adv.h b/config/examples/delta/generic/Configuration_adv.h index 25929c77bef8..1cfa958cd4af 100644 --- a/config/examples/delta/generic/Configuration_adv.h +++ b/config/examples/delta/generic/Configuration_adv.h @@ -1339,6 +1339,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/delta/kossel_mini/Configuration_adv.h b/config/examples/delta/kossel_mini/Configuration_adv.h index 25929c77bef8..1cfa958cd4af 100644 --- a/config/examples/delta/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/kossel_mini/Configuration_adv.h @@ -1339,6 +1339,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/delta/kossel_xl/Configuration_adv.h b/config/examples/delta/kossel_xl/Configuration_adv.h index 7f1be1da3377..45a07f46679b 100644 --- a/config/examples/delta/kossel_xl/Configuration_adv.h +++ b/config/examples/delta/kossel_xl/Configuration_adv.h @@ -1339,6 +1339,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/gCreate/gMax1.5+/Configuration_adv.h b/config/examples/gCreate/gMax1.5+/Configuration_adv.h index 14d1c46ecad5..fa0c0e0b23c9 100644 --- a/config/examples/gCreate/gMax1.5+/Configuration_adv.h +++ b/config/examples/gCreate/gMax1.5+/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/makibox/Configuration_adv.h b/config/examples/makibox/Configuration_adv.h index 061f6ada0e8e..411986b0c8fa 100644 --- a/config/examples/makibox/Configuration_adv.h +++ b/config/examples/makibox/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/tvrrug/Round2/Configuration_adv.h b/config/examples/tvrrug/Round2/Configuration_adv.h index fc2220ea9f93..82c6bb2ee705 100644 --- a/config/examples/tvrrug/Round2/Configuration_adv.h +++ b/config/examples/tvrrug/Round2/Configuration_adv.h @@ -1337,6 +1337,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET diff --git a/config/examples/wt150/Configuration_adv.h b/config/examples/wt150/Configuration_adv.h index a9b00c7d3731..2a02e8423447 100644 --- a/config/examples/wt150/Configuration_adv.h +++ b/config/examples/wt150/Configuration_adv.h @@ -1338,6 +1338,42 @@ // @section leveling +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + #if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) // Override the mesh area if the automatic (max) area is too large //#define MESH_MIN_X MESH_INSET From 1834d86df5a78913425eecd3b1bd8d1057d18971 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 28 Sep 2019 15:24:31 -0500 Subject: [PATCH 077/120] Fix sanity check typos --- Marlin/src/inc/SanityCheck.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index d8ca989ab2de..4de7a41f1fcc 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -252,13 +252,13 @@ #elif defined(UBL_PROBE_PT_1_X) || defined(UBL_PROBE_PT_1_Y) || defined(UBL_PROBE_PT_2_X) || defined(UBL_PROBE_PT_2_Y) || defined(UBL_PROBE_PT_3_X) || defined(UBL_PROBE_PT_3_Y) #error "UBL_PROBE_PT_[123]_[XY] is no longer required. Please remove it from Configuration.h." #elif defined(LEFT_PROBE_BED_POSITION) - #error LEFT_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_LEFT. Please note the differences and update your configuration." + #error "LEFT_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_LEFT. Please update your configuration." #elif defined(RIGHT_PROBE_BED_POSITION) - #error RIGHT_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_RIGHT. Please note the differences and update your configuration." + #error "RIGHT_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_RIGHT. Please update your configuration." #elif defined(FRONT_PROBE_BED_POSITION) - #error FRONT_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_FRONT. Please note the differences and update your configuration." + #error "FRONT_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_FRONT. Please update your configuration." #elif defined(BACK_PROBE_BED_POSITION) - #error BACK_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_BACK. Please note the differences and update your configuration." + #error "BACK_PROBE_BED_POSITION has been replaced by MIN_PROBE_EDGE_BACK. Please update your configuration." #elif defined(ENABLE_MESH_EDIT_GFX_OVERLAY) #error "ENABLE_MESH_EDIT_GFX_OVERLAY is now MESH_EDIT_GFX_OVERLAY. Please update your configuration." #elif defined(BABYSTEP_ZPROBE_GFX_REVERSE) From 2277c6dffcdb9acbd33e9d020417b71b2b766f25 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 28 Sep 2019 15:28:05 -0500 Subject: [PATCH 078/120] Optimize SD card reader, sorting (#15395) --- Marlin/src/lcd/extensible_ui/ui_api.cpp | 4 +- Marlin/src/lcd/extui_malyan_lcd.cpp | 6 +- Marlin/src/lcd/menu/menu_media.cpp | 4 +- Marlin/src/sd/cardreader.cpp | 349 ++++++++++++++---------- Marlin/src/sd/cardreader.h | 148 +++++----- 5 files changed, 293 insertions(+), 218 deletions(-) diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp index 5035e0cebdf6..dc3fc731ce12 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.cpp +++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp @@ -1002,14 +1002,14 @@ namespace ExtUI { void FileList::upDir() { #if ENABLED(SDSUPPORT) - card.updir(); + card.cdup(); num_files = 0xFFFF; #endif } void FileList::changeDir(const char * const dirname) { #if ENABLED(SDSUPPORT) - card.chdir(dirname); + card.cd(dirname); num_files = 0xFFFF; #endif } diff --git a/Marlin/src/lcd/extui_malyan_lcd.cpp b/Marlin/src/lcd/extui_malyan_lcd.cpp index 3954a1a52161..8be34a3ccaa1 100644 --- a/Marlin/src/lcd/extui_malyan_lcd.cpp +++ b/Marlin/src/lcd/extui_malyan_lcd.cpp @@ -246,13 +246,13 @@ void process_lcd_p_command(const char* command) { // Find the name of the file to print. // It's needed to echo the PRINTFILE option. // The {S:L} command should've ensured the SD card was mounted. - card.getfilename(atoi(command)); + card.selectFileByIndex(atoi(command)); // There may be a difference in how V1 and V2 LCDs handle subdirectory // prints. Investigate more. This matches the V1 motion controller actions // but the V2 LCD switches to "print" mode on {SYS:DIR} response. if (card.flag.filenameIsDir) { - card.chdir(card.filename); + card.cd(card.filename); write_to_lcd_P(PSTR("{SYS:DIR}")); } else { @@ -309,7 +309,7 @@ void process_lcd_s_command(const char* command) { char message_buffer[MAX_CURLY_COMMAND]; uint16_t file_count = card.get_num_Files(); for (uint16_t i = 0; i < file_count; i++) { - card.getfilename(i); + card.selectFileByIndex(i); sprintf_P(message_buffer, card.flag.filenameIsDir ? PSTR("{DIR:%s}") : PSTR("{FILE:%s}"), card.longest_filename()); write_to_lcd(message_buffer); } diff --git a/Marlin/src/lcd/menu/menu_media.cpp b/Marlin/src/lcd/menu/menu_media.cpp index b11963b173ce..6a922acdc2a0 100644 --- a/Marlin/src/lcd/menu/menu_media.cpp +++ b/Marlin/src/lcd/menu/menu_media.cpp @@ -39,7 +39,7 @@ #endif void lcd_sd_updir() { - ui.encoderPosition = card.updir() ? ENCODER_STEPS_PER_MENU_ITEM : 0; + ui.encoderPosition = card.cdup() ? ENCODER_STEPS_PER_MENU_ITEM : 0; encoderTopLine = 0; screen_changed = true; ui.refresh(); @@ -115,7 +115,7 @@ class MenuItem_sdfile { class MenuItem_sdfolder { public: static void action(CardReader &theCard) { - card.chdir(theCard.filename); + card.cd(theCard.filename); encoderTopLine = 0; ui.encoderPosition = 2 * (ENCODER_STEPS_PER_MENU_ITEM); screen_changed = true; diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index 98a03af16839..15ed4bda58e2 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -62,6 +62,7 @@ SdFile CardReader::root, CardReader::workDir, CardReader::workDirParents[MAX_DIR uint8_t CardReader::workDirDepth; #if ENABLED(SDCARD_SORT_ALPHA) + uint16_t CardReader::sort_count; #if ENABLED(SDSORT_GCODE) bool CardReader::sort_alpha; @@ -78,6 +79,7 @@ uint8_t CardReader::workDirDepth; #if ENABLED(SDSORT_USES_RAM) #if ENABLED(SDSORT_CACHE_NAMES) + uint16_t CardReader::nrFiles; // Cached total file count #if ENABLED(SDSORT_DYNAMIC_RAM) char **CardReader::sortshort, **CardReader::sortnames; #else @@ -94,6 +96,7 @@ uint8_t CardReader::workDirDepth; #elif ENABLED(SDSORT_CACHE_NAMES) || DISABLED(SDSORT_USES_STACK) uint8_t CardReader::isDir[(SDSORT_LIMIT+7)>>3]; #endif + #define IS_DIR(n) TEST(isDir[(n) >> 3], (n) & 0x07) #endif #endif // SDSORT_USES_RAM @@ -110,10 +113,6 @@ char CardReader::proc_filenames[SD_PROCEDURE_DEPTH][MAXPATHNAMELENGTH]; uint32_t CardReader::filesize, CardReader::sdpos; -LsAction CardReader::lsAction; //stored for recursion. -uint16_t CardReader::nrFiles; //counter for the files in the current directory and recycled as position counter for getting the nrFiles'th name in the directory. -char *CardReader::diveDirName; - CardReader::CardReader() { #if ENABLED(SDCARD_SORT_ALPHA) sort_count = 0; @@ -138,7 +137,10 @@ CardReader::CardReader() { #endif } -char *createFilename(char *buffer, const dir_t &p) { +// +// Get a DOS 8.3 filename in its useful form +// +char *createFilename(char * const buffer, const dir_t &p) { char *pos = buffer; for (uint8_t i = 0; i < 11; i++) { if (p.name[i] == ' ') continue; @@ -149,24 +151,78 @@ char *createFilename(char *buffer, const dir_t &p) { return buffer; } -/** - * Dive into a folder and recurse depth-first to perform a pre-set operation lsAction: - * LS_Count - Add +1 to nrFiles for every file within the parent - * LS_GetFilename - Get the filename of the file indexed by nrFile_index - * LS_SerialPrint - Print the full path and size of each file to serial output - */ +// +// Return 'true' if the item is a folder or G-code file +// +bool CardReader::is_dir_or_gcode(const dir_t &p) { + uint8_t pn0 = p.name[0]; + + if ( pn0 == DIR_NAME_FREE || pn0 == DIR_NAME_DELETED // Clear or Deleted entry + || pn0 == '.' || longFilename[0] == '.' // Hidden file + || !DIR_IS_FILE_OR_SUBDIR(&p) // Not a File or Directory + || (p.attributes & DIR_ATT_HIDDEN) // Hidden by attribute + ) return false; -uint16_t nrFile_index; + flag.filenameIsDir = DIR_IS_SUBDIR(&p); // We know it's a File or Folder -void CardReader::lsDive(const char *prepend, SdFile parent, const char * const match/*=nullptr*/) { + return ( + flag.filenameIsDir // All Directories are ok + || (p.name[8] == 'G' && p.name[9] != '~') // Non-backup *.G* files are accepted + ); +} + +// +// Get the number of (compliant) items in the folder +// +int CardReader::countItems(SdFile dir) { dir_t p; - uint8_t cnt = 0; + int c = 0; + while (dir.readDir(&p, longFilename) > 0) + c += is_dir_or_gcode(p); - // Read the next entry from a directory - while (parent.readDir(&p, longFilename) > 0) { + #if ENABLED(SDCARD_SORT_ALPHA) && SDSORT_USES_RAM && SDSORT_CACHE_NAMES + nrFiles = c; + #endif - // If the entry is a directory and the action is LS_SerialPrint - if (DIR_IS_SUBDIR(&p) && lsAction != LS_Count && lsAction != LS_GetFilename) { + return c; +} + +// +// Get file/folder info for an item by index +// +void CardReader::selectByIndex(SdFile dir, const uint8_t index) { + dir_t p; + for (uint8_t cnt = 0; dir.readDir(&p, longFilename) > 0;) { + if (is_dir_or_gcode(p)) { + if (cnt == index) { + createFilename(filename, p); + return; // 0 based index + } + cnt++; + } + } +} + +// +// Get file/folder info for an item by name +// +void CardReader::selectByName(SdFile dir, const char * const match) { + dir_t p; + for (uint8_t cnt = 0; dir.readDir(&p, longFilename) > 0; cnt++) { + if (is_dir_or_gcode(p)) { + createFilename(filename, p); + if (strcasecmp(match, filename) == 0) return; + } + } +} + +// +// Recursive method to list all files within a folder +// +void CardReader::printListing(SdFile parent, const char * const prepend/*=nullptr*/) { + dir_t p; + while (parent.readDir(&p, longFilename) > 0) { + if (DIR_IS_SUBDIR(&p)) { // Get the short name for the item, which we know is a folder char dosFilename[FILENAME_LENGTH]; @@ -188,68 +244,38 @@ void CardReader::lsDive(const char *prepend, SdFile parent, const char * const m // Get a new directory object using the full path // and dive recursively into it. - SdFile dir; - if (!dir.open(&parent, dosFilename, O_READ)) { - if (lsAction == LS_SerialPrint) { - SERIAL_ECHO_START(); - SERIAL_ECHOLNPAIR(MSG_SD_CANT_OPEN_SUBDIR, dosFilename); - } + SdFile child; + if (!child.open(&parent, dosFilename, O_READ)) { + SERIAL_ECHO_START(); + SERIAL_ECHOLNPAIR(MSG_SD_CANT_OPEN_SUBDIR, dosFilename); } - lsDive(path, dir); + printListing(child, path); // close() is done automatically by destructor of SdFile } - else { - uint8_t pn0 = p.name[0]; - if (pn0 == DIR_NAME_FREE) break; - if (pn0 == DIR_NAME_DELETED || pn0 == '.') continue; - if (longFilename[0] == '.') continue; - - if (!DIR_IS_FILE_OR_SUBDIR(&p) || (p.attributes & DIR_ATT_HIDDEN)) continue; - - flag.filenameIsDir = DIR_IS_SUBDIR(&p); - - if (!flag.filenameIsDir && (p.name[8] != 'G' || p.name[9] == '~')) continue; - - switch (lsAction) { // 1 based file count - case LS_Count: - nrFiles++; - break; - - case LS_SerialPrint: - createFilename(filename, p); - if (prepend) SERIAL_ECHO(prepend); - SERIAL_ECHO(filename); - SERIAL_CHAR(' '); - SERIAL_ECHOLN(p.fileSize); - break; - - case LS_GetFilename: - createFilename(filename, p); - if (match != nullptr) { - if (strcasecmp(match, filename) == 0) return; - } - else if (cnt == nrFile_index) return; // 0 based index - cnt++; - break; - } - + else if (is_dir_or_gcode(p)) { + createFilename(filename, p); + if (prepend) SERIAL_ECHO(prepend); + SERIAL_ECHO(filename); + SERIAL_CHAR(' '); + SERIAL_ECHOLN(p.fileSize); } - } // while readDir + } } +// +// List all files on the SD card +// void CardReader::ls() { - lsAction = LS_SerialPrint; root.rewind(); - lsDive(nullptr, root); + printListing(root); } #if ENABLED(LONG_FILENAME_HOST_SUPPORT) - /** - * Get a long pretty path based on a DOS 8.3 path - */ - void CardReader::printLongPath(char *path) { - lsAction = LS_GetFilename; + // + // Get a long pretty path based on a DOS 8.3 path + // + void CardReader::printLongPath(char * const path) { int i, pathLen = strlen(path); @@ -275,7 +301,7 @@ void CardReader::ls() { // Find the item, setting the long filename diveDir.rewind(); - lsDive(nullptr, diveDir, segment); + selectByName(diveDir, segment); // Print /LongNamePart to serial output SERIAL_CHAR('/'); @@ -305,16 +331,16 @@ void CardReader::ls() { #endif // LONG_FILENAME_HOST_SUPPORT -/** - * Echo the DOS 8.3 filename (and long filename, if any) - */ +// +// Echo the DOS 8.3 filename (and long filename, if any) +// void CardReader::printFilename() { if (file.isOpen()) { char dosFilename[FILENAME_LENGTH]; file.getDosName(dosFilename); SERIAL_ECHO(dosFilename); #if ENABLED(LONG_FILENAME_HOST_SUPPORT) - getfilename(0, dosFilename); + selectFileByName(dosFilename); if (longFilename[0]) { SERIAL_ECHO(' '); SERIAL_ECHO(longFilename); @@ -339,10 +365,7 @@ void CardReader::mount() { #if defined(LCD_SDSS) && (LCD_SDSS != SDSS) && !sd2card.init(SPI_SPEED, LCD_SDSS) #endif - ) { - //if (!sd2card.init(SPI_HALF_SPEED,SDSS)) - SERIAL_ECHO_MSG(MSG_SD_INIT_FAIL); - } + ) SERIAL_ECHO_MSG(MSG_SD_INIT_FAIL); else if (!volume.init(&sd2card)) SERIAL_ERROR_MSG(MSG_SD_VOL_INIT_FAIL); else if (!root.openRoot(&volume)) @@ -354,7 +377,7 @@ void CardReader::mount() { settings.first_load(); #endif } - setroot(); + cdroot(); ui.refresh(); } @@ -401,26 +424,32 @@ void CardReader::openLogFile(char * const path) { openFile(path, false); } -void appendAtom(SdFile &file, char *& dst, uint8_t &cnt) { - file.getDosName(dst); - while (*dst && cnt < MAXPATHNAMELENGTH) { dst++; cnt++; } - if (cnt < MAXPATHNAMELENGTH) { *dst = '/'; dst++; cnt++; } -} - -void CardReader::getAbsFilename(char *t) { - *t++ = '/'; // Root folder +// +// Get the root-relative DOS path of the selected file +// +void CardReader::getAbsFilename(char *dst) { + *dst++ = '/'; uint8_t cnt = 1; - for (uint8_t i = 0; i < workDirDepth; i++) // Loop to current work dir - appendAtom(workDirParents[i], t, cnt); + auto appendAtom = [&](SdFile &file) { + file.getDosName(dst); + while (*dst && cnt < MAXPATHNAMELENGTH) { dst++; cnt++; } + if (cnt < MAXPATHNAMELENGTH) { *dst = '/'; dst++; cnt++; } + }; + + for (uint8_t i = 0; i < workDirDepth; i++) // Loop down to current work dir + appendAtom(workDirParents[i]); if (cnt < MAXPATHNAMELENGTH - (FILENAME_LENGTH) - 1) { // Leave room for filename and nul - appendAtom(file, t, cnt); - --t; + appendAtom(file); + --dst; } - *t = '\0'; + *dst = '\0'; } +// +// Open a file by DOS path - for read or write +// void CardReader::openFile(char * const path, const bool read, const bool subcall/*=false*/) { if (!isMounted()) return; @@ -472,7 +501,7 @@ void CardReader::openFile(char * const path, const bool read, const bool subcall SERIAL_ECHOLNPAIR(MSG_SD_FILE_OPENED, fname, MSG_SD_SIZE, filesize); SERIAL_ECHOLNPGM(MSG_SD_FILE_SELECTED); - getfilename(0, fname); + selectFileByName(fname); ui.set_status(longFilename[0] ? longFilename : fname); //if (longFilename[0]) { // SERIAL_ECHOPAIR(MSG_SD_FILE_LONG_NAME, longFilename); @@ -486,7 +515,7 @@ void CardReader::openFile(char * const path, const bool read, const bool subcall SERIAL_ECHOLNPAIR(MSG_SD_OPEN_FILE_FAIL, fname, "."); else { flag.saving = true; - getfilename(0, fname); + selectFileByName(fname); #if ENABLED(EMERGENCY_PARSER) emergency_parser.disable(); #endif @@ -496,6 +525,9 @@ void CardReader::openFile(char * const path, const bool read, const bool subcall } } +// +// Delete a file by name in the working directory +// void CardReader::removeFile(const char * const name) { if (!isMounted()) return; @@ -527,7 +559,7 @@ void CardReader::report_status() { SERIAL_ECHOLNPGM(MSG_SD_NOT_PRINTING); } -void CardReader::write_command(char *buf) { +void CardReader::write_command(char * const buf) { char* begin = buf; char* npos = nullptr; char* end = buf + strlen(buf) - 1; @@ -584,7 +616,7 @@ void CardReader::checkautostart() { void CardReader::beginautostart() { autostart_index = 0; - setroot(); + cdroot(); } void CardReader::closefile(const bool store_location) { @@ -602,38 +634,42 @@ void CardReader::closefile(const bool store_location) { } } -/** - * Get the name of a file in the current directory by index - * with optional name to match. - */ -void CardReader::getfilename(uint16_t nr, const char * const match/*=nullptr*/) { +// +// Get info for a file in the working directory by index +// +void CardReader::selectFileByIndex(const uint16_t nr) { #if ENABLED(SDSORT_CACHE_NAMES) - if (match != nullptr) { - while (nr < sort_count) { - if (strcasecmp(match, sortshort[nr]) == 0) break; - nr++; - } - } if (nr < sort_count) { strcpy(filename, sortshort[nr]); strcpy(longFilename, sortnames[nr]); - flag.filenameIsDir = TEST(isDir[nr>>3], nr & 0x07); + flag.filenameIsDir = IS_DIR(nr); return; } - #endif // SDSORT_CACHE_NAMES - lsAction = LS_GetFilename; - nrFile_index = nr; + #endif + workDir.rewind(); + selectByIndex(workDir, nr); +} + +// +// Get info for a file in the working directory by DOS name +// +void CardReader::selectFileByName(const char * const match) { + #if ENABLED(SDSORT_CACHE_NAMES) + for (int nr = 0; nr < sort_count; nr++) + if (strcasecmp(match, sortshort[nr]) == 0) { + strcpy(filename, sortshort[nr]); + strcpy(longFilename, sortnames[nr]); + flag.filenameIsDir = IS_DIR(nr); + return; + } + #endif workDir.rewind(); - lsDive(nullptr, workDir, match); + selectByName(workDir, match); } uint16_t CardReader::countFilesInWorkDir() { - lsAction = LS_Count; - nrFiles = 0; workDir.rewind(); - lsDive(nullptr, workDir); - //SERIAL_ECHOLN(nrFiles); - return nrFiles; + return countItems(workDir); } /** @@ -650,11 +686,11 @@ const char* CardReader::diveToFile(SdFile*& curDir, const char * const path, con static SdFile newDir1, newDir2; SdFile *sub = &newDir1, *startDir; - const char *dirname_start = path; + const char *item_name_adr = path; if (path[0] == '/') { curDir = &root; workDirDepth = 0; - dirname_start++; + item_name_adr++; } else curDir = &workDir; @@ -662,15 +698,15 @@ const char* CardReader::diveToFile(SdFile*& curDir, const char * const path, con startDir = curDir; // Start dive - while (dirname_start) { + while (item_name_adr) { // Find next sub - char * const dirname_end = strchr(dirname_start, '/'); - if (dirname_end <= dirname_start) break; + char * const name_end = strchr(item_name_adr, '/'); + if (name_end <= item_name_adr) break; // Set subDirName - const uint8_t len = dirname_end - dirname_start; + const uint8_t len = name_end - item_name_adr; char dosSubdirname[len + 1]; - strncpy(dosSubdirname, dirname_start, len); + strncpy(dosSubdirname, item_name_adr, len); dosSubdirname[len] = 0; if (echo) SERIAL_ECHOLN(dosSubdirname); @@ -693,13 +729,13 @@ const char* CardReader::diveToFile(SdFile*& curDir, const char * const path, con // Point sub pointer to unused newDir sub = (curDir != &newDir1) ? &newDir1 : &newDir2; - // dirname_start point to next sub - dirname_start = dirname_end + 1; + // item_name_adr point to next sub + item_name_adr = name_end + 1; } - return dirname_start; + return item_name_adr; } -void CardReader::chdir(const char * relpath) { +void CardReader::cd(const char * relpath) { SdFile newDir; SdFile *parent = workDir.isOpen() ? &workDir : &root; @@ -718,7 +754,7 @@ void CardReader::chdir(const char * relpath) { } } -int8_t CardReader::updir() { +int8_t CardReader::cdup() { if (workDirDepth > 0) { // At least 1 dir has been saved workDir = --workDirDepth ? workDirParents[workDirDepth - 1] : root; // Use parent, or root if none #if ENABLED(SDCARD_SORT_ALPHA) @@ -729,7 +765,7 @@ int8_t CardReader::updir() { return workDirDepth; } -void CardReader::setroot() { +void CardReader::cdroot() { workDir = root; flag.workDirIsRoot = true; #if ENABLED(SDCARD_SORT_ALPHA) @@ -740,10 +776,10 @@ void CardReader::setroot() { #if ENABLED(SDCARD_SORT_ALPHA) /** - * Get the name of a file in the current directory by sort-index + * Get the name of a file in the working directory by sort-index */ void CardReader::getfilename_sorted(const uint16_t nr) { - getfilename( + selectFileByIndex( #if ENABLED(SDSORT_GCODE) sort_alpha && #endif @@ -757,7 +793,7 @@ void CardReader::setroot() { #define SET_SORTNAME(I) (sortnames[I] = strdup(longest_filename())) #if ENABLED(SDSORT_CACHE_NAMES) // When caching also store the short name, since - // we're replacing the getfilename() behavior. + // we're replacing the selectFileByIndex() behavior. #define SET_SORTSHORT(I) (sortshort[I] = strdup(filename)) #else #define SET_SORTSHORT(I) NOOP @@ -854,7 +890,7 @@ void CardReader::setroot() { i); // If using RAM then read all filenames now. #if ENABLED(SDSORT_USES_RAM) - getfilename(i); + selectFileByIndex(i); SET_SORTNAME(i); SET_SORTSHORT(i); // char out[30]; @@ -871,8 +907,17 @@ void CardReader::setroot() { // Bubble Sort for (uint16_t i = fileCnt; --i;) { bool didSwap = false; + uint8_t o1 = sort_order[0]; + #if DISABLED(SDSORT_USES_RAM) + selectFileByIndex(o1); // Pre-fetch the first entry and save it + strcpy(name1, longest_filename()); // so the loop only needs one fetch + #if HAS_FOLDER_SORTING + bool dir1 = flag.filenameIsDir; + #endif + #endif + for (uint16_t j = 0; j < i; ++j) { - const uint16_t o1 = sort_order[j], o2 = sort_order[j + 1]; + const uint16_t o2 = sort_order[j + 1]; // Compare names from the array or just the two buffered names #if ENABLED(SDSORT_USES_RAM) @@ -884,12 +929,7 @@ void CardReader::setroot() { #if HAS_FOLDER_SORTING #if ENABLED(SDSORT_USES_RAM) // Folder sorting needs an index and bit to test for folder-ness. - const uint8_t ind1 = o1 >> 3, bit1 = o1 & 0x07, - ind2 = o2 >> 3, bit2 = o2 & 0x07; - #define _SORT_CMP_DIR(fs) \ - (((isDir[ind1] & _BV(bit1)) != 0) == ((isDir[ind2] & _BV(bit2)) != 0) \ - ? _SORT_CMP_NODIR() \ - : (isDir[fs > 0 ? ind1 : ind2] & (fs > 0 ? _BV(bit1) : _BV(bit2))) != 0) + #define _SORT_CMP_DIR(fs) IS_DIR(o1) == IS_DIR(o2) ? _SORT_CMP_NODIR() : IS_DIR(fs > 0 ? o1 : o2) #else #define _SORT_CMP_DIR(fs) ((dir1 == flag.filenameIsDir) ? _SORT_CMP_NODIR() : (fs > 0 ? dir1 : !dir1)) #endif @@ -898,13 +938,9 @@ void CardReader::setroot() { // The most economical method reads names as-needed // throughout the loop. Slow if there are many. #if DISABLED(SDSORT_USES_RAM) - getfilename(o1); - strcpy(name1, longest_filename()); // save (or getfilename below will trounce it) - #if HAS_FOLDER_SORTING - bool dir1 = flag.filenameIsDir; - #endif - getfilename(o2); - char *name2 = longest_filename(); // use the string in-place + selectFileByIndex(o2); + const bool dir2 = flag.filenameIsDir; + char * const name2 = longest_filename(); // use the string in-place #endif // !SDSORT_USES_RAM // Sort the current pair according to settings. @@ -919,10 +955,22 @@ void CardReader::setroot() { _SORT_CMP_NODIR() #endif ) { + // Reorder the index, indicate that sorting happened + // Note that the next o1 will be the current o1. No new fetch needed. sort_order[j] = o2; sort_order[j + 1] = o1; didSwap = true; } + else { + // The next o1 is the current o2. No new fetch needed. + o1 = o2; + #if DISABLED(SDSORT_USES_RAM) + #if HAS_FOLDER_SORTING + dir1 = dir2; + #endif + strcpy(name1, name2); + #endif + } } if (!didSwap) break; } @@ -944,10 +992,10 @@ void CardReader::setroot() { sortshort = new char*[1]; isDir = new uint8_t[1]; #endif - getfilename(0); + selectFileByIndex(0); SET_SORTNAME(0); SET_SORTSHORT(0); - isDir[0] = flag.filenameIsDir ? 0x01 : 0x00; + isDir[0] = flag.filenameIsDir; #endif } @@ -984,6 +1032,9 @@ uint16_t CardReader::get_num_Files() { ; } +// +// Return from procedure or close out the Print Job +// void CardReader::printingHasFinished() { planner.synchronize(); file.close(); diff --git a/Marlin/src/sd/cardreader.h b/Marlin/src/sd/cardreader.h index 629efb29661c..e089f86f9e40 100644 --- a/Marlin/src/sd/cardreader.h +++ b/Marlin/src/sd/cardreader.h @@ -33,8 +33,6 @@ #include "SdFile.h" -enum LsAction : uint8_t { LS_SerialPrint, LS_Count, LS_GetFilename }; - typedef struct { bool saving:1, logging:1, @@ -51,48 +49,80 @@ typedef struct { class CardReader { public: + static card_flags_t flag; // Flags (above) + static char filename[FILENAME_LENGTH], // DOS 8.3 filename of the selected item + longFilename[LONG_FILENAME_LENGTH]; // Long name of the selected item + + // Fast! binary file transfer + #if ENABLED(BINARY_FILE_TRANSFER) + #if NUM_SERIAL > 1 + static int8_t transfer_port_index; + #else + static constexpr int8_t transfer_port_index = 0; + #endif + #endif + + // // // Methods // // // + CardReader(); + static SdFile getroot() { return root; } + static void mount(); - static void write_command(char *buf); + static void release(); + static inline bool isMounted() { return flag.mounted; } + static void ls(); + // SD Card Logging + static void openLogFile(char * const path); + static void write_command(char * const buf); + + // Auto-Start files + static int8_t autostart_index; // Index of autoX.g files static void beginautostart(); static void checkautostart(); + // Basic file ops static void openFile(char * const path, const bool read, const bool subcall=false); - static void openLogFile(char * const path); - static void removeFile(const char * const name); static void closefile(const bool store_location=false); - static void release(); - static void openAndPrintFile(const char *name); - static void startFileprint(); - static void stopSDPrint( - #if SD_RESORT - const bool re_sort=false - #endif - ); - static void report_status(); - static void printingHasFinished(); - static void printFilename(); + static void removeFile(const char * const name); + static inline char* longest_filename() { return longFilename[0] ? longFilename : filename; } #if ENABLED(LONG_FILENAME_HOST_SUPPORT) - static void printLongPath(char *path); + static void printLongPath(char * const path); // Used by M33 #endif - static void getfilename(uint16_t nr, const char* const match=nullptr); + // Working Directory for SD card menu + static void cdroot(); + static void cd(const char *relpath); + static int8_t cdup(); static uint16_t countFilesInWorkDir(); + static uint16_t get_num_Files(); - static void getAbsFilename(char *t); + // Select a file + static void selectFileByIndex(const uint16_t nr); + static void selectFileByName(const char* const match); - static void ls(); - static void chdir(const char *relpath); - static int8_t updir(); - static void setroot(); + // Print job + static void openAndPrintFile(const char *name); // (working directory) + static void printingHasFinished(); + static void getAbsFilename(char *dst); + static void startFileprint(); + static void printFilename(); + static void stopSDPrint( + #if SD_RESORT + const bool re_sort=false + #endif + ); + static void report_status(); + static inline void pauseSDPrint() { flag.sdprinting = false; } + static inline bool isPaused() { return isFileOpen() && !flag.sdprinting; } + static inline bool isPrinting() { return flag.sdprinting; } + static inline uint8_t percentDone() { return (isFileOpen() && filesize) ? sdpos / ((filesize + 99) / 100) : 0; } + // Helper for open and remove static const char* diveToFile(SdFile*& curDir, const char * const path, const bool echo=false); - static uint16_t get_num_Files(); - #if ENABLED(SDCARD_SORT_ALPHA) static void presort(); static void getfilename_sorted(const uint16_t nr); @@ -102,7 +132,7 @@ class CardReader { //FORCE_INLINE static void setSortReverse(bool b) { sort_reverse = b; } #endif #else - FORCE_INLINE static void getfilename_sorted(const uint16_t nr) { getfilename(nr); } + FORCE_INLINE static void getfilename_sorted(const uint16_t nr) { selectFileByIndex(nr); } #endif #if ENABLED(POWER_LOSS_RECOVERY) @@ -111,17 +141,12 @@ class CardReader { static void removeJobRecoveryFile(); #endif - static inline void pauseSDPrint() { flag.sdprinting = false; } - static inline bool isMounted() { return flag.mounted; } static inline bool isFileOpen() { return isMounted() && file.isOpen(); } - static inline bool isPaused() { return isFileOpen() && !flag.sdprinting; } - static inline bool isPrinting() { return flag.sdprinting; } + static inline uint32_t getIndex() { return sdpos; } static inline bool eof() { return sdpos >= filesize; } - static inline int16_t get() { sdpos = file.curPosition(); return (int16_t)file.read(); } static inline void setIndex(const uint32_t index) { sdpos = index; file.seekSet(index); } - static inline uint32_t getIndex() { return sdpos; } - static inline uint8_t percentDone() { return (isFileOpen() && filesize) ? sdpos / ((filesize + 99) / 100) : 0; } static inline char* getWorkDirName() { workDir.getDosName(filename); return filename; } + static inline int16_t get() { sdpos = file.curPosition(); return (int16_t)file.read(); } static inline int16_t read(void* buf, uint16_t nbyte) { return file.isOpen() ? file.read(buf, nbyte) : -1; } static inline int16_t write(void* buf, uint16_t nbyte) { return file.isOpen() ? file.write(buf, nbyte) : -1; } @@ -139,27 +164,16 @@ class CardReader { } #endif - static inline char* longest_filename() { return longFilename[0] ? longFilename : filename; } - -public: - static card_flags_t flag; - static char filename[FILENAME_LENGTH], longFilename[LONG_FILENAME_LENGTH]; - static int8_t autostart_index; - static SdFile getroot() { return root; } - - #if ENABLED(BINARY_FILE_TRANSFER) - #if NUM_SERIAL > 1 - static int8_t transfer_port_index; - #else - static constexpr int8_t transfer_port_index = 0; - #endif - #endif - private: + // + // Working directory and parents + // static SdFile root, workDir, workDirParents[MAX_DIR_DEPTH]; static uint8_t workDirDepth; - // Sort files and folders alphabetically. + // + // Alphabetical file and folder sorting + // #if ENABLED(SDCARD_SORT_ALPHA) static uint16_t sort_count; // Count of sorted items in the current directory #if ENABLED(SDSORT_GCODE) @@ -188,6 +202,7 @@ class CardReader { // If using dynamic ram for names, allocate on the heap. #if ENABLED(SDSORT_CACHE_NAMES) + static uint16_t nrFiles; // Cache the total count #if ENABLED(SDSORT_DYNAMIC_RAM) static char **sortshort, **sortnames; #else @@ -216,25 +231,21 @@ class CardReader { static SdVolume volume; static SdFile file; + static uint32_t filesize, sdpos; + + // + // Procedure calls to other files + // #ifndef SD_PROCEDURE_DEPTH #define SD_PROCEDURE_DEPTH 1 #endif - static uint8_t file_subcall_ctr; static uint32_t filespos[SD_PROCEDURE_DEPTH]; static char proc_filenames[SD_PROCEDURE_DEPTH][MAXPATHNAMELENGTH]; - static uint32_t filesize, sdpos; - - static LsAction lsAction; //stored for recursion. - static uint16_t nrFiles; //counter for the files in the current directory and recycled as position counter for getting the nrFiles'th name in the directory. - static char *diveDirName; - static void lsDive(const char *prepend, SdFile parent, const char * const match=nullptr); - - #if ENABLED(SDCARD_SORT_ALPHA) - static void flush_presort(); - #endif - + // + // SD Auto Reporting + // #if ENABLED(AUTO_REPORT_SD_STATUS) static uint8_t auto_report_sd_interval; static millis_t next_sd_report_ms; @@ -242,6 +253,19 @@ class CardReader { static int8_t auto_report_port; #endif #endif + + // + // Directory items + // + static bool is_dir_or_gcode(const dir_t &p); + static int countItems(SdFile dir); + static void selectByIndex(SdFile dir, const uint8_t index); + static void selectByName(SdFile dir, const char * const match); + static void printListing(SdFile parent, const char * const prepend=nullptr); + + #if ENABLED(SDCARD_SORT_ALPHA) + static void flush_presort(); + #endif }; #if ENABLED(USB_FLASH_DRIVE_SUPPORT) From 6509dc04f5270fa82d79b48459da19d94a7d9442 Mon Sep 17 00:00:00 2001 From: Ludy Date: Sat, 28 Sep 2019 22:29:41 +0200 Subject: [PATCH 079/120] Fix German error (#15404) --- Marlin/src/lcd/language/language_de.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h index 76acb55e8044..3c505b60ebe9 100644 --- a/Marlin/src/lcd/language/language_de.h +++ b/Marlin/src/lcd/language/language_de.h @@ -382,7 +382,7 @@ #define MSG_ERR_MINTEMP_BED _UxGT("BETT ") LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN") #define MSG_ERR_MAXTEMP_CHAMBER _UxGT("Err:Gehäuse max Temp") #define MSG_ERR_MINTEMP_CHAMBER _UxGT("Err:Gehäuse min Temp") -#define MSG_ERR_Z_HOMING _UxGT("Vorher XY vorher") +#define MSG_ERR_Z_HOMING _UxGT("Vorher XY homen") #define MSG_HALTED _UxGT("DRUCKER GESTOPPT") #define MSG_PLEASE_RESET _UxGT("Bitte neustarten") #define MSG_SHORT_DAY _UxGT("t") // One character only From a628d7779809933f87ef131aad1d5b327a8d8056 Mon Sep 17 00:00:00 2001 From: Ludy Date: Sat, 28 Sep 2019 22:30:41 +0200 Subject: [PATCH 080/120] Fix compile error with 6 hot-ends (#15405) --- Marlin/src/lcd/extensible_ui/ui_api.cpp | 4 ++-- Marlin/src/lcd/menu/menu.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp index dc3fc731ce12..fc6c47e2670a 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.cpp +++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp @@ -884,7 +884,7 @@ namespace ExtUI { #endif { #if HOTENDS - static constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP); + static constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP); const int16_t e = heater - H0; thermalManager.setTargetHotend(constrain(value, 0, heater_maxtemp[e] - 15), e); #endif @@ -893,7 +893,7 @@ namespace ExtUI { void setTargetTemp_celsius(float value, const extruder_t extruder) { #if HOTENDS - constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP); + constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP); const int16_t e = extruder - E0; enableHeater(extruder); thermalManager.setTargetHotend(constrain(value, 0, heater_maxtemp[e] - 15), e); diff --git a/Marlin/src/lcd/menu/menu.h b/Marlin/src/lcd/menu/menu.h index 0b638bc47a6d..e34b8b18f8ea 100644 --- a/Marlin/src/lcd/menu/menu.h +++ b/Marlin/src/lcd/menu/menu.h @@ -31,7 +31,7 @@ extern int8_t encoderLine, encoderTopLine, screen_items; extern bool screen_changed; #if HOTENDS - constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP); + constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP); #endif void scroll_screen(const uint8_t limit, const bool is_menu); From f28f191ebf2c8d5f0ad2997c8cd15698adbb7b4a Mon Sep 17 00:00:00 2001 From: Ludy Date: Sat, 28 Sep 2019 22:32:37 +0200 Subject: [PATCH 081/120] Trailing whitespace (#15403) --- Marlin/Configuration_adv.h | 6 +++--- config/default/Configuration_adv.h | 6 +++--- config/examples/3DFabXYZ/Migbot/Configuration_adv.h | 6 +++--- config/examples/ADIMLab/Gantry v1/Configuration_adv.h | 6 +++--- config/examples/ADIMLab/Gantry v2/Configuration_adv.h | 6 +++--- config/examples/AlephObjects/TAZ4/Configuration_adv.h | 6 +++--- config/examples/Alfawise/U20-bltouch/Configuration_adv.h | 6 +++--- config/examples/Alfawise/U20/Configuration_adv.h | 6 +++--- config/examples/AliExpress/UM2pExt/Configuration_adv.h | 6 +++--- config/examples/Anet/A2/Configuration_adv.h | 6 +++--- config/examples/Anet/A2plus/Configuration_adv.h | 6 +++--- config/examples/Anet/A6/Configuration_adv.h | 6 +++--- config/examples/Anet/A8/Configuration_adv.h | 6 +++--- config/examples/Anet/A8plus/Configuration_adv.h | 6 +++--- config/examples/Anet/E16/Configuration_adv.h | 6 +++--- config/examples/AnyCubic/i3/Configuration_adv.h | 6 +++--- config/examples/ArmEd/Configuration_adv.h | 6 +++--- config/examples/BIBO/TouchX/cyclops/Configuration_adv.h | 6 +++--- config/examples/BIBO/TouchX/default/Configuration_adv.h | 6 +++--- config/examples/BQ/Hephestos/Configuration_adv.h | 6 +++--- config/examples/BQ/Hephestos_2/Configuration_adv.h | 6 +++--- config/examples/BQ/WITBOX/Configuration_adv.h | 6 +++--- config/examples/Cartesio/Configuration_adv.h | 6 +++--- config/examples/Creality/CR-10/Configuration_adv.h | 6 +++--- config/examples/Creality/CR-10S/Configuration_adv.h | 6 +++--- config/examples/Creality/CR-10_5S/Configuration_adv.h | 6 +++--- config/examples/Creality/CR-10mini/Configuration_adv.h | 6 +++--- config/examples/Creality/CR-20 Pro/Configuration_adv.h | 6 +++--- config/examples/Creality/CR-20/Configuration_adv.h | 6 +++--- config/examples/Creality/CR-8/Configuration_adv.h | 6 +++--- config/examples/Creality/Ender-2/Configuration_adv.h | 6 +++--- config/examples/Creality/Ender-3/Configuration_adv.h | 6 +++--- config/examples/Creality/Ender-4/Configuration_adv.h | 6 +++--- config/examples/Creality/Ender-5/Configuration_adv.h | 6 +++--- config/examples/Dagoma/Disco Ultimate/Configuration_adv.h | 6 +++--- .../EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h | 6 +++--- config/examples/Einstart-S/Configuration_adv.h | 6 +++--- config/examples/FYSETC/AIO_II/Configuration_adv.h | 6 +++--- .../examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h | 6 +++--- config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h | 6 +++--- config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h | 6 +++--- config/examples/FYSETC/Cheetah/base/Configuration_adv.h | 6 +++--- config/examples/FYSETC/F6_13/Configuration_adv.h | 6 +++--- config/examples/Felix/Configuration_adv.h | 6 +++--- config/examples/FlashForge/CreatorPro/Configuration_adv.h | 6 +++--- config/examples/FolgerTech/i3-2020/Configuration_adv.h | 6 +++--- config/examples/Formbot/Raptor/Configuration_adv.h | 6 +++--- config/examples/Formbot/T_Rex_2+/Configuration_adv.h | 6 +++--- config/examples/Formbot/T_Rex_3/Configuration_adv.h | 6 +++--- config/examples/Geeetech/A10/Configuration_adv.h | 6 +++--- config/examples/Geeetech/A10M/Configuration_adv.h | 6 +++--- config/examples/Geeetech/A20M/Configuration_adv.h | 6 +++--- config/examples/Geeetech/MeCreator2/Configuration_adv.h | 6 +++--- config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h | 6 +++--- config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h | 6 +++--- config/examples/HMS434/Configuration_adv.h | 6 +++--- config/examples/Infitary/i3-M508/Configuration_adv.h | 6 +++--- config/examples/JGAurora/A1/Configuration_adv.h | 6 +++--- config/examples/JGAurora/A5/Configuration_adv.h | 6 +++--- config/examples/JGAurora/A5S/Configuration_adv.h | 6 +++--- config/examples/MakerParts/Configuration_adv.h | 6 +++--- config/examples/Malyan/M150/Configuration_adv.h | 6 +++--- config/examples/Malyan/M200/Configuration_adv.h | 6 +++--- config/examples/Micromake/C1/enhanced/Configuration_adv.h | 6 +++--- config/examples/Mks/Robin/Configuration_adv.h | 6 +++--- config/examples/Mks/Sbase/Configuration_adv.h | 6 +++--- config/examples/RapideLite/RL200/Configuration_adv.h | 6 +++--- config/examples/RigidBot/Configuration_adv.h | 6 +++--- config/examples/SCARA/Configuration_adv.h | 6 +++--- .../examples/STM32/Black_STM32F407VET6/Configuration_adv.h | 6 +++--- config/examples/Sanguinololu/Configuration_adv.h | 6 +++--- config/examples/Tevo/Michelangelo/Configuration_adv.h | 6 +++--- config/examples/Tevo/Tarantula Pro/Configuration_adv.h | 6 +++--- .../examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h | 6 +++--- .../Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h | 6 +++--- config/examples/TheBorg/Configuration_adv.h | 6 +++--- config/examples/TinyBoy2/Configuration_adv.h | 6 +++--- config/examples/Tronxy/X3A/Configuration_adv.h | 6 +++--- config/examples/Tronxy/X5S-2E/Configuration_adv.h | 6 +++--- config/examples/UltiMachine/Archim1/Configuration_adv.h | 6 +++--- config/examples/UltiMachine/Archim2/Configuration_adv.h | 6 +++--- config/examples/VORONDesign/Configuration_adv.h | 6 +++--- config/examples/Velleman/K8200/Configuration_adv.h | 6 +++--- config/examples/Velleman/K8400/Configuration_adv.h | 6 +++--- config/examples/WASP/PowerWASP/Configuration_adv.h | 6 +++--- config/examples/Wanhao/Duplicator 6/Configuration_adv.h | 6 +++--- .../examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h | 6 +++--- config/examples/delta/Anycubic/Kossel/Configuration_adv.h | 6 +++--- .../examples/delta/Dreammaker/Overlord/Configuration_adv.h | 6 +++--- .../delta/Dreammaker/Overlord_Pro/Configuration_adv.h | 6 +++--- .../examples/delta/FLSUN/auto_calibrate/Configuration_adv.h | 6 +++--- config/examples/delta/FLSUN/kossel/Configuration_adv.h | 6 +++--- config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h | 6 +++--- .../examples/delta/Geeetech/Rostock 301/Configuration_adv.h | 6 +++--- config/examples/delta/MKS/SBASE/Configuration_adv.h | 6 +++--- .../examples/delta/Tevo Little Monster/Configuration_adv.h | 6 +++--- config/examples/delta/generic/Configuration_adv.h | 6 +++--- config/examples/delta/kossel_mini/Configuration_adv.h | 6 +++--- config/examples/delta/kossel_xl/Configuration_adv.h | 6 +++--- config/examples/gCreate/gMax1.5+/Configuration_adv.h | 6 +++--- config/examples/makibox/Configuration_adv.h | 6 +++--- config/examples/tvrrug/Round2/Configuration_adv.h | 6 +++--- config/examples/wt150/Configuration_adv.h | 6 +++--- 103 files changed, 309 insertions(+), 309 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 3f69ba0f23b8..fa45ad078731 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/default/Configuration_adv.h b/config/default/Configuration_adv.h index bac2acf1bcb7..9f0217a802b6 100644 --- a/config/default/Configuration_adv.h +++ b/config/default/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h index 1007185a9381..c93807b61500 100644 --- a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h +++ b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h index abb62a696254..a41fa9e9b7b3 100644 --- a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h index e4ef517ca77d..9d69ca35f96a 100644 --- a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/AlephObjects/TAZ4/Configuration_adv.h b/config/examples/AlephObjects/TAZ4/Configuration_adv.h index 05ae34b208ee..d365fdcd4545 100644 --- a/config/examples/AlephObjects/TAZ4/Configuration_adv.h +++ b/config/examples/AlephObjects/TAZ4/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h index 0a5629b873e0..8bf2c2beb744 100644 --- a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h +++ b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h @@ -1360,12 +1360,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Alfawise/U20/Configuration_adv.h b/config/examples/Alfawise/U20/Configuration_adv.h index 278fd6709591..56ac66671daa 100644 --- a/config/examples/Alfawise/U20/Configuration_adv.h +++ b/config/examples/Alfawise/U20/Configuration_adv.h @@ -1359,12 +1359,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/AliExpress/UM2pExt/Configuration_adv.h b/config/examples/AliExpress/UM2pExt/Configuration_adv.h index 74bf6ea7fbc9..a488416522a6 100644 --- a/config/examples/AliExpress/UM2pExt/Configuration_adv.h +++ b/config/examples/AliExpress/UM2pExt/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Anet/A2/Configuration_adv.h b/config/examples/Anet/A2/Configuration_adv.h index a3fb3c5c568f..3bed49adf5ad 100644 --- a/config/examples/Anet/A2/Configuration_adv.h +++ b/config/examples/Anet/A2/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Anet/A2plus/Configuration_adv.h b/config/examples/Anet/A2plus/Configuration_adv.h index a3fb3c5c568f..3bed49adf5ad 100644 --- a/config/examples/Anet/A2plus/Configuration_adv.h +++ b/config/examples/Anet/A2plus/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Anet/A6/Configuration_adv.h b/config/examples/Anet/A6/Configuration_adv.h index 26835659ff2d..01d8e89e119e 100644 --- a/config/examples/Anet/A6/Configuration_adv.h +++ b/config/examples/Anet/A6/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Anet/A8/Configuration_adv.h b/config/examples/Anet/A8/Configuration_adv.h index 7c66ebfbc30c..605afc09fb42 100644 --- a/config/examples/Anet/A8/Configuration_adv.h +++ b/config/examples/Anet/A8/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Anet/A8plus/Configuration_adv.h b/config/examples/Anet/A8plus/Configuration_adv.h index 261792854592..3b759d3b3b49 100644 --- a/config/examples/Anet/A8plus/Configuration_adv.h +++ b/config/examples/Anet/A8plus/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Anet/E16/Configuration_adv.h b/config/examples/Anet/E16/Configuration_adv.h index de6d2d8cadbd..c64d24c602c5 100644 --- a/config/examples/Anet/E16/Configuration_adv.h +++ b/config/examples/Anet/E16/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/AnyCubic/i3/Configuration_adv.h b/config/examples/AnyCubic/i3/Configuration_adv.h index 4535ddd15d96..0e0349ebcaee 100644 --- a/config/examples/AnyCubic/i3/Configuration_adv.h +++ b/config/examples/AnyCubic/i3/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/ArmEd/Configuration_adv.h b/config/examples/ArmEd/Configuration_adv.h index 206ec66b7321..1ad055cb411c 100644 --- a/config/examples/ArmEd/Configuration_adv.h +++ b/config/examples/ArmEd/Configuration_adv.h @@ -1359,12 +1359,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h index 948553cc0267..760915c3befc 100644 --- a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/BIBO/TouchX/default/Configuration_adv.h b/config/examples/BIBO/TouchX/default/Configuration_adv.h index 57b3879264cf..5ce50d730d26 100644 --- a/config/examples/BIBO/TouchX/default/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/default/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/BQ/Hephestos/Configuration_adv.h b/config/examples/BQ/Hephestos/Configuration_adv.h index 7caba1b36a6d..5561fd1e2962 100644 --- a/config/examples/BQ/Hephestos/Configuration_adv.h +++ b/config/examples/BQ/Hephestos/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/BQ/Hephestos_2/Configuration_adv.h b/config/examples/BQ/Hephestos_2/Configuration_adv.h index 39546c03aafc..43ad192cc15e 100644 --- a/config/examples/BQ/Hephestos_2/Configuration_adv.h +++ b/config/examples/BQ/Hephestos_2/Configuration_adv.h @@ -1363,12 +1363,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/BQ/WITBOX/Configuration_adv.h b/config/examples/BQ/WITBOX/Configuration_adv.h index 7caba1b36a6d..5561fd1e2962 100644 --- a/config/examples/BQ/WITBOX/Configuration_adv.h +++ b/config/examples/BQ/WITBOX/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Cartesio/Configuration_adv.h b/config/examples/Cartesio/Configuration_adv.h index 4829230178cf..53cd20647a5a 100644 --- a/config/examples/Cartesio/Configuration_adv.h +++ b/config/examples/Cartesio/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Creality/CR-10/Configuration_adv.h b/config/examples/Creality/CR-10/Configuration_adv.h index 38579f130b12..1131506e3da2 100644 --- a/config/examples/Creality/CR-10/Configuration_adv.h +++ b/config/examples/Creality/CR-10/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Creality/CR-10S/Configuration_adv.h b/config/examples/Creality/CR-10S/Configuration_adv.h index 39c40f594fe2..0c968a812f65 100644 --- a/config/examples/Creality/CR-10S/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Creality/CR-10_5S/Configuration_adv.h b/config/examples/Creality/CR-10_5S/Configuration_adv.h index a18004fc7a38..ed9957a67875 100644 --- a/config/examples/Creality/CR-10_5S/Configuration_adv.h +++ b/config/examples/Creality/CR-10_5S/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Creality/CR-10mini/Configuration_adv.h b/config/examples/Creality/CR-10mini/Configuration_adv.h index 9f265b4bcb8a..11bfdca892cc 100644 --- a/config/examples/Creality/CR-10mini/Configuration_adv.h +++ b/config/examples/Creality/CR-10mini/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Creality/CR-20 Pro/Configuration_adv.h b/config/examples/Creality/CR-20 Pro/Configuration_adv.h index 62861301fb0a..8b2e7cc246d6 100644 --- a/config/examples/Creality/CR-20 Pro/Configuration_adv.h +++ b/config/examples/Creality/CR-20 Pro/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Creality/CR-20/Configuration_adv.h b/config/examples/Creality/CR-20/Configuration_adv.h index 5ef0e0ecb5f4..6eda8d4498eb 100644 --- a/config/examples/Creality/CR-20/Configuration_adv.h +++ b/config/examples/Creality/CR-20/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Creality/CR-8/Configuration_adv.h b/config/examples/Creality/CR-8/Configuration_adv.h index 872dd34dc502..987ffe6ab83b 100644 --- a/config/examples/Creality/CR-8/Configuration_adv.h +++ b/config/examples/Creality/CR-8/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Creality/Ender-2/Configuration_adv.h b/config/examples/Creality/Ender-2/Configuration_adv.h index a694cd9b15eb..9fc48d4e868a 100644 --- a/config/examples/Creality/Ender-2/Configuration_adv.h +++ b/config/examples/Creality/Ender-2/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Creality/Ender-3/Configuration_adv.h b/config/examples/Creality/Ender-3/Configuration_adv.h index 4af52ddc118f..44d99596ddfc 100644 --- a/config/examples/Creality/Ender-3/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Creality/Ender-4/Configuration_adv.h b/config/examples/Creality/Ender-4/Configuration_adv.h index 8f4262e48d47..112b55f85d76 100644 --- a/config/examples/Creality/Ender-4/Configuration_adv.h +++ b/config/examples/Creality/Ender-4/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Creality/Ender-5/Configuration_adv.h b/config/examples/Creality/Ender-5/Configuration_adv.h index 89d508aa90f2..2ff116c69e68 100644 --- a/config/examples/Creality/Ender-5/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h index b46b40e6d308..075f5605a97f 100644 --- a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h +++ b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h index 8f3db3fa7996..525e9963bae1 100755 --- a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h +++ b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Einstart-S/Configuration_adv.h b/config/examples/Einstart-S/Configuration_adv.h index 7f19fe213bf5..f24f158f3a4c 100644 --- a/config/examples/Einstart-S/Configuration_adv.h +++ b/config/examples/Einstart-S/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/FYSETC/AIO_II/Configuration_adv.h b/config/examples/FYSETC/AIO_II/Configuration_adv.h index 0bfa79d0002f..6451f40a5079 100644 --- a/config/examples/FYSETC/AIO_II/Configuration_adv.h +++ b/config/examples/FYSETC/AIO_II/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h index e0299a507a15..745cd643e5d8 100644 --- a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h index e0299a507a15..745cd643e5d8 100644 --- a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h index e0299a507a15..745cd643e5d8 100644 --- a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h index e0299a507a15..745cd643e5d8 100644 --- a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/FYSETC/F6_13/Configuration_adv.h b/config/examples/FYSETC/F6_13/Configuration_adv.h index 435f1b485dfe..7588b43aa2d0 100644 --- a/config/examples/FYSETC/F6_13/Configuration_adv.h +++ b/config/examples/FYSETC/F6_13/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Felix/Configuration_adv.h b/config/examples/Felix/Configuration_adv.h index 7848cac6ce59..231458b21854 100644 --- a/config/examples/Felix/Configuration_adv.h +++ b/config/examples/Felix/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/FlashForge/CreatorPro/Configuration_adv.h b/config/examples/FlashForge/CreatorPro/Configuration_adv.h index 4fe03c42abb7..80bfc2959ac3 100644 --- a/config/examples/FlashForge/CreatorPro/Configuration_adv.h +++ b/config/examples/FlashForge/CreatorPro/Configuration_adv.h @@ -1354,12 +1354,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/FolgerTech/i3-2020/Configuration_adv.h b/config/examples/FolgerTech/i3-2020/Configuration_adv.h index 488c7b73ae2a..d00a05a8660a 100644 --- a/config/examples/FolgerTech/i3-2020/Configuration_adv.h +++ b/config/examples/FolgerTech/i3-2020/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Formbot/Raptor/Configuration_adv.h b/config/examples/Formbot/Raptor/Configuration_adv.h index 655443a27ea5..a40d28e4ecad 100644 --- a/config/examples/Formbot/Raptor/Configuration_adv.h +++ b/config/examples/Formbot/Raptor/Configuration_adv.h @@ -1357,12 +1357,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h index 7f5ba7c33e79..d3b290730f41 100644 --- a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h @@ -1359,12 +1359,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Formbot/T_Rex_3/Configuration_adv.h b/config/examples/Formbot/T_Rex_3/Configuration_adv.h index 4d70eaabae5f..c919581ec446 100644 --- a/config/examples/Formbot/T_Rex_3/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_3/Configuration_adv.h @@ -1359,12 +1359,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Geeetech/A10/Configuration_adv.h b/config/examples/Geeetech/A10/Configuration_adv.h index affcf4399a7e..d18140a7092b 100644 --- a/config/examples/Geeetech/A10/Configuration_adv.h +++ b/config/examples/Geeetech/A10/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Geeetech/A10M/Configuration_adv.h b/config/examples/Geeetech/A10M/Configuration_adv.h index 099176935025..85e13f4d5f1b 100644 --- a/config/examples/Geeetech/A10M/Configuration_adv.h +++ b/config/examples/Geeetech/A10M/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Geeetech/A20M/Configuration_adv.h b/config/examples/Geeetech/A20M/Configuration_adv.h index 409a1b1658ed..3be72ca3db08 100644 --- a/config/examples/Geeetech/A20M/Configuration_adv.h +++ b/config/examples/Geeetech/A20M/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Geeetech/MeCreator2/Configuration_adv.h b/config/examples/Geeetech/MeCreator2/Configuration_adv.h index 66c10df22ff3..048a1e955e1b 100644 --- a/config/examples/Geeetech/MeCreator2/Configuration_adv.h +++ b/config/examples/Geeetech/MeCreator2/Configuration_adv.h @@ -1354,12 +1354,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h index affcf4399a7e..d18140a7092b 100644 --- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h index affcf4399a7e..d18140a7092b 100644 --- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/HMS434/Configuration_adv.h b/config/examples/HMS434/Configuration_adv.h index e89f3699e966..333a0c85b5bf 100644 --- a/config/examples/HMS434/Configuration_adv.h +++ b/config/examples/HMS434/Configuration_adv.h @@ -1334,12 +1334,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Infitary/i3-M508/Configuration_adv.h b/config/examples/Infitary/i3-M508/Configuration_adv.h index 47ee220ae950..6a3b21a04369 100644 --- a/config/examples/Infitary/i3-M508/Configuration_adv.h +++ b/config/examples/Infitary/i3-M508/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/JGAurora/A1/Configuration_adv.h b/config/examples/JGAurora/A1/Configuration_adv.h index d9a3fe6f6b90..642cb2bde878 100644 --- a/config/examples/JGAurora/A1/Configuration_adv.h +++ b/config/examples/JGAurora/A1/Configuration_adv.h @@ -1360,12 +1360,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/JGAurora/A5/Configuration_adv.h b/config/examples/JGAurora/A5/Configuration_adv.h index 8fde777de9e1..c244a2a0a5c9 100644 --- a/config/examples/JGAurora/A5/Configuration_adv.h +++ b/config/examples/JGAurora/A5/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/JGAurora/A5S/Configuration_adv.h b/config/examples/JGAurora/A5S/Configuration_adv.h index d9a3fe6f6b90..642cb2bde878 100644 --- a/config/examples/JGAurora/A5S/Configuration_adv.h +++ b/config/examples/JGAurora/A5S/Configuration_adv.h @@ -1360,12 +1360,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/MakerParts/Configuration_adv.h b/config/examples/MakerParts/Configuration_adv.h index 9e9a2b279c5d..04527f748e5e 100644 --- a/config/examples/MakerParts/Configuration_adv.h +++ b/config/examples/MakerParts/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Malyan/M150/Configuration_adv.h b/config/examples/Malyan/M150/Configuration_adv.h index af59554c0fe8..3fff5c7cc4cf 100644 --- a/config/examples/Malyan/M150/Configuration_adv.h +++ b/config/examples/Malyan/M150/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Malyan/M200/Configuration_adv.h b/config/examples/Malyan/M200/Configuration_adv.h index cf422c358ed6..372b708c2ae2 100644 --- a/config/examples/Malyan/M200/Configuration_adv.h +++ b/config/examples/Malyan/M200/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Micromake/C1/enhanced/Configuration_adv.h b/config/examples/Micromake/C1/enhanced/Configuration_adv.h index 420653d89088..3f3ae4054805 100644 --- a/config/examples/Micromake/C1/enhanced/Configuration_adv.h +++ b/config/examples/Micromake/C1/enhanced/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Mks/Robin/Configuration_adv.h b/config/examples/Mks/Robin/Configuration_adv.h index 00297f58afc4..2b43d67e64d6 100644 --- a/config/examples/Mks/Robin/Configuration_adv.h +++ b/config/examples/Mks/Robin/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Mks/Sbase/Configuration_adv.h b/config/examples/Mks/Sbase/Configuration_adv.h index 63e1a876f226..28ec8ab8f3e9 100644 --- a/config/examples/Mks/Sbase/Configuration_adv.h +++ b/config/examples/Mks/Sbase/Configuration_adv.h @@ -1356,12 +1356,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/RapideLite/RL200/Configuration_adv.h b/config/examples/RapideLite/RL200/Configuration_adv.h index 0a13f81e30fd..32436ebc912b 100644 --- a/config/examples/RapideLite/RL200/Configuration_adv.h +++ b/config/examples/RapideLite/RL200/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/RigidBot/Configuration_adv.h b/config/examples/RigidBot/Configuration_adv.h index 4604dae51fe4..9ffc55cc9664 100644 --- a/config/examples/RigidBot/Configuration_adv.h +++ b/config/examples/RigidBot/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/SCARA/Configuration_adv.h b/config/examples/SCARA/Configuration_adv.h index 8db4c49b02ed..5ce747fb3bca 100644 --- a/config/examples/SCARA/Configuration_adv.h +++ b/config/examples/SCARA/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h index e4cdc12787fe..8fad7e1b9d56 100644 --- a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h +++ b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Sanguinololu/Configuration_adv.h b/config/examples/Sanguinololu/Configuration_adv.h index 3124a1ec789e..77da1c18dff6 100644 --- a/config/examples/Sanguinololu/Configuration_adv.h +++ b/config/examples/Sanguinololu/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Tevo/Michelangelo/Configuration_adv.h b/config/examples/Tevo/Michelangelo/Configuration_adv.h index 6f14749ccf1e..aa71156d6d37 100644 --- a/config/examples/Tevo/Michelangelo/Configuration_adv.h +++ b/config/examples/Tevo/Michelangelo/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h index e0ed16159183..1cc140d9d002 100755 --- a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h +++ b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h @@ -1351,12 +1351,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h index 9337d9e8be1e..56c1900e7cd1 100755 --- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h index 9337d9e8be1e..56c1900e7cd1 100755 --- a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/TheBorg/Configuration_adv.h b/config/examples/TheBorg/Configuration_adv.h index 38b0eac8340a..60053f18a35e 100644 --- a/config/examples/TheBorg/Configuration_adv.h +++ b/config/examples/TheBorg/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/TinyBoy2/Configuration_adv.h b/config/examples/TinyBoy2/Configuration_adv.h index ca6ebd41fbde..1c7f8e266cfd 100644 --- a/config/examples/TinyBoy2/Configuration_adv.h +++ b/config/examples/TinyBoy2/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Tronxy/X3A/Configuration_adv.h b/config/examples/Tronxy/X3A/Configuration_adv.h index 54de6476008d..b207a08f4bf1 100644 --- a/config/examples/Tronxy/X3A/Configuration_adv.h +++ b/config/examples/Tronxy/X3A/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Tronxy/X5S-2E/Configuration_adv.h b/config/examples/Tronxy/X5S-2E/Configuration_adv.h index a0510df92d80..5f8969c6eefc 100644 --- a/config/examples/Tronxy/X5S-2E/Configuration_adv.h +++ b/config/examples/Tronxy/X5S-2E/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/UltiMachine/Archim1/Configuration_adv.h b/config/examples/UltiMachine/Archim1/Configuration_adv.h index 0d8f0a74dd36..f72be1c5ed69 100644 --- a/config/examples/UltiMachine/Archim1/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim1/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/UltiMachine/Archim2/Configuration_adv.h b/config/examples/UltiMachine/Archim2/Configuration_adv.h index b9aa479139d2..6b399f2d741c 100644 --- a/config/examples/UltiMachine/Archim2/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim2/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/VORONDesign/Configuration_adv.h b/config/examples/VORONDesign/Configuration_adv.h index 112f85030e15..47e3eeef3771 100644 --- a/config/examples/VORONDesign/Configuration_adv.h +++ b/config/examples/VORONDesign/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Velleman/K8200/Configuration_adv.h b/config/examples/Velleman/K8200/Configuration_adv.h index b8f87d706670..d7bc110d43b6 100644 --- a/config/examples/Velleman/K8200/Configuration_adv.h +++ b/config/examples/Velleman/K8200/Configuration_adv.h @@ -1368,12 +1368,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Velleman/K8400/Configuration_adv.h b/config/examples/Velleman/K8400/Configuration_adv.h index 13ad305e88cb..66938132df55 100644 --- a/config/examples/Velleman/K8400/Configuration_adv.h +++ b/config/examples/Velleman/K8400/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/WASP/PowerWASP/Configuration_adv.h b/config/examples/WASP/PowerWASP/Configuration_adv.h index ddc59ae65ed8..c2a3ec8d6ef6 100644 --- a/config/examples/WASP/PowerWASP/Configuration_adv.h +++ b/config/examples/WASP/PowerWASP/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h index 9ed77b96c7f2..5742f9852675 100644 --- a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h @@ -1357,12 +1357,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h index 9ea28ae69e84..d38da532dd5a 100644 --- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h index 260b9a1f45ab..e6ca073dd253 100644 --- a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h +++ b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h @@ -1357,12 +1357,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h index 7fa5d375a465..5d7d144a0454 100644 --- a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h @@ -1357,12 +1357,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h index 7fa5d375a465..5d7d144a0454 100644 --- a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h @@ -1357,12 +1357,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h index eb4f8146c334..421699caa39f 100644 --- a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h +++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h @@ -1357,12 +1357,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/delta/FLSUN/kossel/Configuration_adv.h b/config/examples/delta/FLSUN/kossel/Configuration_adv.h index eb4f8146c334..421699caa39f 100644 --- a/config/examples/delta/FLSUN/kossel/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel/Configuration_adv.h @@ -1357,12 +1357,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h index 1cfa958cd4af..810f4d90ec6a 100644 --- a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h @@ -1357,12 +1357,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h index 1ee610af6b7f..eb1d0d74f626 100644 --- a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h +++ b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h @@ -1357,12 +1357,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/delta/MKS/SBASE/Configuration_adv.h b/config/examples/delta/MKS/SBASE/Configuration_adv.h index 0727cd9cbda3..74c94824cf67 100644 --- a/config/examples/delta/MKS/SBASE/Configuration_adv.h +++ b/config/examples/delta/MKS/SBASE/Configuration_adv.h @@ -1357,12 +1357,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/delta/Tevo Little Monster/Configuration_adv.h b/config/examples/delta/Tevo Little Monster/Configuration_adv.h index 801b19fc91b2..e19512907c06 100644 --- a/config/examples/delta/Tevo Little Monster/Configuration_adv.h +++ b/config/examples/delta/Tevo Little Monster/Configuration_adv.h @@ -1357,12 +1357,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/delta/generic/Configuration_adv.h b/config/examples/delta/generic/Configuration_adv.h index 1cfa958cd4af..810f4d90ec6a 100644 --- a/config/examples/delta/generic/Configuration_adv.h +++ b/config/examples/delta/generic/Configuration_adv.h @@ -1357,12 +1357,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/delta/kossel_mini/Configuration_adv.h b/config/examples/delta/kossel_mini/Configuration_adv.h index 1cfa958cd4af..810f4d90ec6a 100644 --- a/config/examples/delta/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/kossel_mini/Configuration_adv.h @@ -1357,12 +1357,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/delta/kossel_xl/Configuration_adv.h b/config/examples/delta/kossel_xl/Configuration_adv.h index 45a07f46679b..0b93b37687af 100644 --- a/config/examples/delta/kossel_xl/Configuration_adv.h +++ b/config/examples/delta/kossel_xl/Configuration_adv.h @@ -1357,12 +1357,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/gCreate/gMax1.5+/Configuration_adv.h b/config/examples/gCreate/gMax1.5+/Configuration_adv.h index fa0c0e0b23c9..2c1683b18889 100644 --- a/config/examples/gCreate/gMax1.5+/Configuration_adv.h +++ b/config/examples/gCreate/gMax1.5+/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/makibox/Configuration_adv.h b/config/examples/makibox/Configuration_adv.h index 411986b0c8fa..5bfcb3ee28fc 100644 --- a/config/examples/makibox/Configuration_adv.h +++ b/config/examples/makibox/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/tvrrug/Round2/Configuration_adv.h b/config/examples/tvrrug/Round2/Configuration_adv.h index 82c6bb2ee705..cdd57bee19cd 100644 --- a/config/examples/tvrrug/Round2/Configuration_adv.h +++ b/config/examples/tvrrug/Round2/Configuration_adv.h @@ -1355,12 +1355,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing diff --git a/config/examples/wt150/Configuration_adv.h b/config/examples/wt150/Configuration_adv.h index 2a02e8423447..7228429ea45b 100644 --- a/config/examples/wt150/Configuration_adv.h +++ b/config/examples/wt150/Configuration_adv.h @@ -1356,12 +1356,12 @@ * Useful to get probe points to exact positions on targets or * to allow leveling to avoid plate clamps on only specific * sides of the bed. - * + * * If you are replacing the prior *_PROBE_BED_POSITION options, * LEFT and FRONT values in most cases will map directly over - * RIGHT and REAR would be the inverse such as + * RIGHT and REAR would be the inverse such as * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) - * + * * This will allow all positions to match at compilation, however * should the probe position be modified with M851XY then the * probe points will follow. This prevents any change from causing From be3c4a7930742bd634b6383a7890aeb62da12709 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Sat, 28 Sep 2019 16:35:13 -0400 Subject: [PATCH 082/120] Bring Raptor pins in parity with others (#15410) --- Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h b/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h index e7a2a5da01d1..0ff0ec57ba70 100644 --- a/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h +++ b/Marlin/src/pins/ramps/pins_FORMBOT_RAPTOR.h @@ -31,8 +31,12 @@ #error "Formbot supports up to 3 hotends / E-steppers. Comment out this line to continue." #endif -#define BOARD_INFO_NAME "Formbot Raptor" -#define DEFAULT_MACHINE_NAME BOARD_INFO_NAME +#ifndef BOARD_INFO_NAME + #define BOARD_INFO_NAME "Formbot Raptor" +#endif +#ifndef DEFAULT_MACHINE_NAME + #define DEFAULT_MACHINE_NAME BOARD_INFO_NAME +#endif // // Servos From 41ea2d8c31f10c09715079d7fc2d0dff1444a459 Mon Sep 17 00:00:00 2001 From: Ludy Date: Sat, 28 Sep 2019 22:37:41 +0200 Subject: [PATCH 083/120] Fix auto-fan compile error (#15402) --- Marlin/src/module/temperature.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index d637b68d7b73..c0a12c7ffa4b 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -665,10 +665,10 @@ int16_t Temperature::getHeaterPower(const heater_ind_t heater_id) { , AUTO_2_IS_0 ? 0 : AUTO_2_IS_1 ? 1 : 2 #endif #if HOTENDS > 3 - , AUTO_3_IS_0 ? 0 : AUTO_3_IS_1 ? 1 : AUTO_3_IS_2 ? 2 : 3, + , AUTO_3_IS_0 ? 0 : AUTO_3_IS_1 ? 1 : AUTO_3_IS_2 ? 2 : 3 #endif #if HOTENDS > 4 - , AUTO_4_IS_0 ? 0 : AUTO_4_IS_1 ? 1 : AUTO_4_IS_2 ? 2 : AUTO_4_IS_3 ? 3 : 4, + , AUTO_4_IS_0 ? 0 : AUTO_4_IS_1 ? 1 : AUTO_4_IS_2 ? 2 : AUTO_4_IS_3 ? 3 : 4 #endif #if HOTENDS > 5 , AUTO_5_IS_0 ? 0 : AUTO_5_IS_1 ? 1 : AUTO_5_IS_2 ? 2 : AUTO_5_IS_3 ? 3 : AUTO_5_IS_4 ? 4 : 5 From e942b352c67899d074ad30246fe634b1f6f9838a Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Sat, 28 Sep 2019 17:18:23 -0400 Subject: [PATCH 084/120] Fix Photograph Pin Sanity Check (#15406) --- Marlin/src/inc/SanityCheck.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 4de7a41f1fcc..636919ea813c 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2367,7 +2367,7 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2) * Photo G-code requirements */ #if ENABLED(PHOTO_GCODE) - #if (PIN_EXISTS(CHDK) + PIN_EXISTS(PHOTOGRAPH_PIN) + defined(PHOTO_SWITCH_POSITION)) > 1 + #if (PIN_EXISTS(CHDK) + PIN_EXISTS(PHOTOGRAPH) + defined(PHOTO_SWITCH_POSITION)) > 1 #error "Please define only one of CHDK_PIN, PHOTOGRAPH_PIN, or PHOTO_SWITCH_POSITION." #elif defined(PHOTO_SWITCH_POSITION) && !defined(PHOTO_POSITION) #error "PHOTO_SWITCH_POSITION requires PHOTO_POSITION. Please update your Configuration_adv.h." From 0ca6abce72415c500713714e47980423e9b20b47 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Sat, 28 Sep 2019 17:58:48 -0400 Subject: [PATCH 085/120] Add reporting to M290 (#15376) --- Marlin/src/feature/babystep.cpp | 17 +++++------- Marlin/src/feature/babystep.h | 29 +++++++++------------ Marlin/src/gcode/motion/M290.cpp | 44 +++++++++++++++++++++++++++++++- 3 files changed, 61 insertions(+), 29 deletions(-) diff --git a/Marlin/src/feature/babystep.cpp b/Marlin/src/feature/babystep.cpp index e16912d69e62..1fc24991101e 100644 --- a/Marlin/src/feature/babystep.cpp +++ b/Marlin/src/feature/babystep.cpp @@ -36,13 +36,10 @@ Babystep babystep; volatile int16_t Babystep::steps[BS_TODO_AXIS(Z_AXIS) + 1]; - -#if HAS_LCD_MENU || ENABLED(EXTENSIBLE_UI) - int16_t Babystep::accum; - #if ENABLED(BABYSTEP_DISPLAY_TOTAL) - int16_t Babystep::axis_total[BS_TOTAL_AXIS(Z_AXIS) + 1]; - #endif +#if ENABLED(BABYSTEP_DISPLAY_TOTAL) + int16_t Babystep::axis_total[BS_TOTAL_AXIS(Z_AXIS) + 1]; #endif +int16_t Babystep::accum; void Babystep::step_axis(const AxisEnum axis) { const int16_t curTodo = steps[BS_TODO_AXIS(axis)]; // get rid of volatile for performance @@ -75,11 +72,9 @@ void Babystep::add_steps(const AxisEnum axis, const int16_t distance) { if (!CAN_BABYSTEP(axis)) return; - #if HAS_LCD_MENU || ENABLED(EXTENSIBLE_UI) - accum += distance; // Count up babysteps for the UI - #if ENABLED(BABYSTEP_DISPLAY_TOTAL) - axis_total[BS_TOTAL_AXIS(axis)] += distance; - #endif + accum += distance; // Count up babysteps for the UI + #if ENABLED(BABYSTEP_DISPLAY_TOTAL) + axis_total[BS_TOTAL_AXIS(axis)] += distance; #endif #if ENABLED(BABYSTEP_ALWAYS_AVAILABLE) diff --git a/Marlin/src/feature/babystep.h b/Marlin/src/feature/babystep.h index 617108316f40..fbf04a03f945 100644 --- a/Marlin/src/feature/babystep.h +++ b/Marlin/src/feature/babystep.h @@ -29,7 +29,7 @@ #define BS_TODO_AXIS(A) 0 #endif -#if (HAS_LCD_MENU || ENABLED(EXTENSIBLE_UI)) && ENABLED(BABYSTEP_DISPLAY_TOTAL) +#if ENABLED(BABYSTEP_DISPLAY_TOTAL) #if ENABLED(BABYSTEP_XY) #define BS_TOTAL_AXIS(A) A #else @@ -40,22 +40,17 @@ class Babystep { public: static volatile int16_t steps[BS_TODO_AXIS(Z_AXIS) + 1]; - - #if HAS_LCD_MENU || ENABLED(EXTENSIBLE_UI) - - static int16_t accum; // Total babysteps in current edit - - #if ENABLED(BABYSTEP_DISPLAY_TOTAL) - static int16_t axis_total[BS_TOTAL_AXIS(Z_AXIS) + 1]; // Total babysteps since G28 - static inline void reset_total(const AxisEnum axis) { - if (true - #if ENABLED(BABYSTEP_XY) - && axis == Z_AXIS - #endif - ) axis_total[BS_TOTAL_AXIS(axis)] = 0; - } - #endif - + static int16_t accum; // Total babysteps in current edit + + #if ENABLED(BABYSTEP_DISPLAY_TOTAL) + static int16_t axis_total[BS_TOTAL_AXIS(Z_AXIS) + 1]; // Total babysteps since G28 + static inline void reset_total(const AxisEnum axis) { + if (true + #if ENABLED(BABYSTEP_XY) + && axis == Z_AXIS + #endif + ) axis_total[BS_TOTAL_AXIS(axis)] = 0; + } #endif static void add_steps(const AxisEnum axis, const int16_t distance); diff --git a/Marlin/src/gcode/motion/M290.cpp b/Marlin/src/gcode/motion/M290.cpp index a2ac85cd0ba2..7763f965cb8f 100644 --- a/Marlin/src/gcode/motion/M290.cpp +++ b/Marlin/src/gcode/motion/M290.cpp @@ -34,6 +34,10 @@ #include "../../core/serial.h" #endif +#if ENABLED(MESH_BED_LEVELING) + #include "../../feature/bedlevel/bedlevel.h" +#endif + #if ENABLED(BABYSTEP_ZPROBE_OFFSET) FORCE_INLINE void mod_zprobe_zoffset(const float &offs) { @@ -60,13 +64,15 @@ /** * M290: Babystepping * + * Send 'R' or no parameters for a report. + * * X - Distance to step X * Y - Distance to step Y * Z - Distance to step Z * S - Distance to step Z (alias for Z) * * With BABYSTEP_ZPROBE_OFFSET: - * P0 - Don't adjust the Z probe offset. + * P0 - Don't adjust the Z probe offset */ void GcodeSuite::M290() { #if ENABLED(BABYSTEP_XY) @@ -87,6 +93,42 @@ void GcodeSuite::M290() { #endif } #endif + + if (!parser.seen("XYZ") || parser.seen('R')) { + SERIAL_ECHO_START(); + + #if ENABLED(BABYSTEP_ZPROBE_OFFSET) + SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET " " MSG_Z, probe_offset[Z_AXIS]); + #endif + + #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) + { + SERIAL_ECHOLNPAIR("Hotend ", int(active_extruder), "Offset" + #if ENABLED(BABYSTEP_XY) + " X", hotend_offset[X_AXIS][active_extruder], + " Y", hotend_offset[Y_AXIS][active_extruder], + #endif + " Z", hotend_offset[Z_AXIS][active_extruder] + ); + } + #endif + + #if ENABLED(MESH_BED_LEVELING) + SERIAL_ECHOLNPAIR("MBL Adjust Z", mbl.z_offset); + #endif + + #if ENABLED(BABYSTEP_DISPLAY_TOTAL) + { + SERIAL_ECHOLNPAIR("Babystep" + #if ENABLED(BABYSTEP_XY) + " X", babystep.axis_total[X_AXIS], + " Y", babystep.axis_total[Y_AXIS], + #endif + " Z", babystep.axis_total[Z_AXIS] + ); + } + #endif + } } #endif // BABYSTEPPING From 8683d4abfd04944d9b015f96c0f4479009ae3a0c Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 28 Sep 2019 19:02:34 -0500 Subject: [PATCH 086/120] Improved list-oriented macros --- Marlin/src/core/macros.h | 39 ++++++++++++++++++++------------------- Marlin/src/core/serial.h | 31 +++++++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 21 deletions(-) diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h index 73a8ec5823ad..faf3859f16f0 100644 --- a/Marlin/src/core/macros.h +++ b/Marlin/src/core/macros.h @@ -205,25 +205,26 @@ }while(0) // Macros for initializing arrays -#define ARRAY_16(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,...) { A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P } -#define ARRAY_15(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,...) { A,B,C,D,E,F,G,H,I,J,K,L,M,N,O } -#define ARRAY_14(A,B,C,D,E,F,G,H,I,J,K,L,M,N,...) { A,B,C,D,E,F,G,H,I,J,K,L,M,N } -#define ARRAY_13(A,B,C,D,E,F,G,H,I,J,K,L,M,...) { A,B,C,D,E,F,G,H,I,J,K,L,M } -#define ARRAY_12(A,B,C,D,E,F,G,H,I,J,K,L,...) { A,B,C,D,E,F,G,H,I,J,K,L } -#define ARRAY_11(A,B,C,D,E,F,G,H,I,J,K,...) { A,B,C,D,E,F,G,H,I,J,K } -#define ARRAY_10(A,B,C,D,E,F,G,H,I,J,...) { A,B,C,D,E,F,G,H,I,J } -#define ARRAY_9( A,B,C,D,E,F,G,H,I,...) { A,B,C,D,E,F,G,H,I } -#define ARRAY_8( A,B,C,D,E,F,G,H,...) { A,B,C,D,E,F,G,H } -#define ARRAY_7( A,B,C,D,E,F,G,...) { A,B,C,D,E,F,G } -#define ARRAY_6( A,B,C,D,E,F,...) { A,B,C,D,E,F } -#define ARRAY_5( A,B,C,D,E,...) { A,B,C,D,E } -#define ARRAY_4( A,B,C,D,...) { A,B,C,D } -#define ARRAY_3( A,B,C,...) { A,B,C } -#define ARRAY_2( A,B,...) { A,B } -#define ARRAY_1( A,...) { A } - -#define _ARRAY_N(N,V...) ARRAY_##N(V) -#define ARRAY_N(N,V...) _ARRAY_N(N,V) +#define LIST_16(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,...) A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P +#define LIST_15(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,...) A,B,C,D,E,F,G,H,I,J,K,L,M,N,O +#define LIST_14(A,B,C,D,E,F,G,H,I,J,K,L,M,N,...) A,B,C,D,E,F,G,H,I,J,K,L,M,N +#define LIST_13(A,B,C,D,E,F,G,H,I,J,K,L,M,...) A,B,C,D,E,F,G,H,I,J,K,L,M +#define LIST_12(A,B,C,D,E,F,G,H,I,J,K,L,...) A,B,C,D,E,F,G,H,I,J,K,L +#define LIST_11(A,B,C,D,E,F,G,H,I,J,K,...) A,B,C,D,E,F,G,H,I,J,K +#define LIST_10(A,B,C,D,E,F,G,H,I,J,...) A,B,C,D,E,F,G,H,I,J +#define LIST_9( A,B,C,D,E,F,G,H,I,...) A,B,C,D,E,F,G,H,I +#define LIST_8( A,B,C,D,E,F,G,H,...) A,B,C,D,E,F,G,H +#define LIST_7( A,B,C,D,E,F,G,...) A,B,C,D,E,F,G +#define LIST_6( A,B,C,D,E,F,...) A,B,C,D,E,F +#define LIST_5( A,B,C,D,E,...) A,B,C,D,E +#define LIST_4( A,B,C,D,...) A,B,C,D +#define LIST_3( A,B,C,...) A,B,C +#define LIST_2( A,B,...) A,B +#define LIST_1( A,...) A + +#define _LIST_N(N,V...) LIST_##N(V) +#define LIST_N(N,V...) _LIST_N(N,V) +#define ARRAY_N(N,V...) { _LIST_N(N,V) } // Macros for adding #define INC_0 1 diff --git a/Marlin/src/core/serial.h b/Marlin/src/core/serial.h index 23f6240e1ed9..f1b18c214e0a 100644 --- a/Marlin/src/core/serial.h +++ b/Marlin/src/core/serial.h @@ -139,14 +139,41 @@ extern uint8_t marlin_debug_flags; #define _SELP_21(a,b,V...) do{ _SEP_2(a,b); _SELP_19(V); }while(0) #define _SELP_22(a,b,V...) do{ _SEP_2(a,b); _SELP_20(V); }while(0) #define _SELP_23(a,b,V...) do{ _SEP_2(a,b); _SELP_21(V); }while(0) -#define _SELP_24(a,b,V...) do{ _SEP_2(a,b); _SELP_22(V); }while(0) +#define _SELP_24(a,b,V...) do{ _SEP_2(a,b); _SELP_22(V); }while(0) // Use up two, pass the rest up #define SERIAL_ECHOLNPAIR(V...) _SELP_N(NUM_ARGS(V),V) +// Print up to 20 comma-separated pairs of values +#define __SLST_N(N,V...) _SLST_##N(V) +#define _SLST_N(N,V...) __SLST_N(N,V) +#define _SLST_1(a) SERIAL_ECHO(a) +#define _SLST_2(a,b) do{ SERIAL_ECHO(a); SERIAL_ECHOPAIR(", ",b); }while(0) +#define _SLST_3(a,b,c) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_1(c); }while(0) +#define _SLST_4(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_2(V); }while(0) +#define _SLST_5(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_3(V); }while(0) +#define _SLST_6(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_4(V); }while(0) +#define _SLST_7(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_5(V); }while(0) +#define _SLST_8(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_6(V); }while(0) +#define _SLST_9(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_7(V); }while(0) +#define _SLST_10(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_8(V); }while(0) +#define _SLST_11(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_9(V); }while(0) +#define _SLST_12(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_10(V); }while(0) +#define _SLST_13(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_11(V); }while(0) +#define _SLST_14(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_12(V); }while(0) +#define _SLST_15(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_13(V); }while(0) +#define _SLST_16(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_14(V); }while(0) +#define _SLST_17(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_15(V); }while(0) +#define _SLST_18(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_16(V); }while(0) +#define _SLST_19(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_17(V); }while(0) +#define _SLST_20(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_18(V); }while(0) // Use up two, pass the rest up + +#define SERIAL_ECHOLIST(pre,V...) do{ SERIAL_ECHOPGM(pre); _SLST_N(NUM_ARGS(V),V); }while(0) +#define SERIAL_ECHOLIST_N(N,V...) _SLST_N(N,LIST_N(N,V)) + #define SERIAL_ECHOPGM(S) (serialprintPGM(PSTR(S))) #define SERIAL_ECHOLNPGM(S) (serialprintPGM(PSTR(S "\n"))) -#define SERIAL_ECHOPAIR_F(S, V...) do{ SERIAL_ECHOPGM(S); SERIAL_ECHO_F(V); }while(0) +#define SERIAL_ECHOPAIR_F(S,V...) do{ SERIAL_ECHOPGM(S); SERIAL_ECHO_F(V); }while(0) #define SERIAL_ECHOLNPAIR_F(V...) do{ SERIAL_ECHOPAIR_F(V); SERIAL_EOL(); }while(0) #define SERIAL_ECHO_START() serial_echo_start() From ddded80ff3baaf9530ce2e7d79b6def9d5fd0533 Mon Sep 17 00:00:00 2001 From: Christian Date: Sun, 29 Sep 2019 02:12:23 +0200 Subject: [PATCH 087/120] Fix mixing for up to 6 steppers (#15374) --- Marlin/src/feature/mixing.h | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/Marlin/src/feature/mixing.h b/Marlin/src/feature/mixing.h index 55b54f96c10c..095f22d13bc9 100644 --- a/Marlin/src/feature/mixing.h +++ b/Marlin/src/feature/mixing.h @@ -142,13 +142,19 @@ class Mixer { static inline void copy_mix_to_color(mixer_comp_t (&tcolor)[MIXING_STEPPERS]) { // Scale each component to the largest one in terms of COLOR_A_MASK // So the largest component will be COLOR_A_MASK and the other will be in proportion to it - const float scale = (COLOR_A_MASK) * RECIPROCAL(float(_MAX(mix[0], mix[1]))); + const float scale = (COLOR_A_MASK) * RECIPROCAL(_MAX( + LIST_N(MIXING_STEPPERS, mix[0], mix[1], mix[2], mix[3], mix[4], mix[5]) + )); // Scale all values so their maximum is COLOR_A_MASK MIXER_STEPPER_LOOP(i) tcolor[i] = mix[i] * scale; #ifdef MIXER_NORMALIZER_DEBUG - SERIAL_ECHOLNPAIR("Mix [", int(mix[0]), ", ", int(mix[1]), "] to Color [", int(tcolor[0]), ", ", int(tcolor[1]), "]"); + SERIAL_ECHOPGM("Mix [ "); + SERIAL_ECHOLIST_N(MIXING_STEPPERS, int(mix[0]), int(mix[1]), int(mix[2]), int(mix[3]), int(mix[4]), int(mix[5])); + SERIAL_ECHOPGM(" ] to Color [ "); + SERIAL_ECHOLIST_N(MIXING_STEPPERS, int(tcolor[0]), int(tcolor[1]), int(tcolor[2]), int(tcolor[3]), int(tcolor[4]), int(tcolor[5])); + SERIAL_ECHOLNPGM(" ]"); #endif } @@ -156,10 +162,14 @@ class Mixer { float ctot = 0; MIXER_STEPPER_LOOP(i) ctot += color[j][i]; //MIXER_STEPPER_LOOP(i) mix[i] = 100.0f * color[j][i] / ctot; - mix[0] = mixer_perc_t(100.0f * color[j][0] / ctot); - mix[1] = 100 - mix[0]; + MIXER_STEPPER_LOOP(i) mix[i] = mixer_perc_t(100.0f * color[j][i] / ctot); + #ifdef MIXER_NORMALIZER_DEBUG - SERIAL_ECHOLNPAIR("V-tool ", int(j), " [", int(color[j][0]), ", ", int(color[j][1]), "] to Mix [", int(mix[0]), ", ", int(mix[1]), "]"); + SERIAL_ECHOPAIR("V-tool ", int(j), " [ "); + SERIAL_ECHOLIST_N(MIXING_STEPPERS, int(color[j][0]), int(color[j][1]), int(color[j][2]), int(color[j][3]), int(color[j][4]), int(color[j][5])); + SERIAL_ECHOPGM(" ] to Mix [ "); + SERIAL_ECHOLIST_N(MIXING_STEPPERS, int(mix[0]), int(mix[1]), int(mix[2]), int(mix[3]), int(mix[4]), int(mix[5])); + SERIAL_ECHOLNPGM(" ]"); #endif } @@ -199,10 +209,14 @@ class Mixer { static inline void update_mix_from_gradient() { float ctot = 0; MIXER_STEPPER_LOOP(i) ctot += gradient.color[i]; - mix[0] = (mixer_perc_t)CEIL(100.0f * gradient.color[0] / ctot); - mix[1] = 100 - mix[0]; + MIXER_STEPPER_LOOP(i) mix[i] = (mixer_perc_t)CEIL(100.0f * gradient.color[i] / ctot); + #ifdef MIXER_NORMALIZER_DEBUG - SERIAL_ECHOLNPAIR("Gradient [", int(gradient.color[0]), ", ", int(gradient.color[1]), "] to Mix [", int(mix[0]), ", ", int(mix[1]), "]"); + SERIAL_ECHOPGM("Gradient [ "); + SERIAL_ECHOLIST_N(MIXING_STEPPERS, int(gradient.color[0]), int(gradient.color[1]), int(gradient.color[2]), int(gradient.color[3]), int(gradient.color[4]), int(gradient.color[5])); + SERIAL_ECHOPGM(" ] to Mix [ "); + SERIAL_ECHOLIST_N(MIXING_STEPPERS, int(mix[0]), int(mix[1]), int(mix[2]), int(mix[3]), int(mix[4]), int(mix[5])); + SERIAL_ECHOLNPGM(" ]"); #endif } From 81b9c7c6eeebbeb2c78df7b7b7bc635f0a7bc118 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 28 Sep 2019 21:35:42 -0500 Subject: [PATCH 088/120] No motion constraint before homing Sensible approach to soft endstops before the machine is homed. Ref: https://github.com/MarlinFirmware/Marlin/pull/15027#issuecomment-533301094 Co-Authored-By: comps --- Marlin/src/module/motion.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index 928bb65ac07a..e2351150b1b0 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -573,7 +573,7 @@ void restore_feedrate_and_scaling() { */ void apply_motion_limits(float target[XYZ]) { - if (!soft_endstops_enabled) return; + if (!soft_endstops_enabled || !all_axes_homed()) return; #if IS_KINEMATIC From 7e727684334d9feca024eb749329bf4a795ca4f2 Mon Sep 17 00:00:00 2001 From: Tim Moore Date: Sat, 28 Sep 2019 19:53:40 -0700 Subject: [PATCH 089/120] Info Menu: Runaway Watch state (#14827) --- .../HAL/HAL_DUE/persistent_store_eeprom.cpp | 2 +- .../HAL/HAL_ESP32/persistent_store_spiffs.cpp | 2 +- .../HAL_LPC1768/persistent_store_flash.cpp | 2 +- .../HAL_SAMD51/persistent_store_eeprom.cpp | 2 +- .../HAL/HAL_STM32/persistent_store_impl.cpp | 2 +- .../HAL_STM32F1/persistent_store_eeprom.cpp | 2 +- .../persistent_store_eeprom.cpp | 2 +- .../HAL_TEENSY31_32/persistent_store_impl.cpp | 2 +- .../persistent_store_eeprom.cpp | 2 +- Marlin/src/HAL/shared/persistent_store_api.h | 2 +- Marlin/src/lcd/language/language_en.h | 7 +++ Marlin/src/lcd/menu/menu_info.cpp | 44 +++++++++++++++++++ 12 files changed, 61 insertions(+), 10 deletions(-) diff --git a/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp index fc1baa22ac8b..270324b68976 100644 --- a/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp +++ b/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp @@ -44,7 +44,7 @@ bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { while (size--) { uint8_t * const p = (uint8_t * const)pos; uint8_t v = *value; diff --git a/Marlin/src/HAL/HAL_ESP32/persistent_store_spiffs.cpp b/Marlin/src/HAL/HAL_ESP32/persistent_store_spiffs.cpp index 5227da356860..deefde9155b6 100644 --- a/Marlin/src/HAL/HAL_ESP32/persistent_store_spiffs.cpp +++ b/Marlin/src/HAL/HAL_ESP32/persistent_store_spiffs.cpp @@ -72,7 +72,7 @@ bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { if (!eeprom_file.seek(pos)) return true; // return true for any error if (eeprom_file.write(value, size) != size) return true; diff --git a/Marlin/src/HAL/HAL_LPC1768/persistent_store_flash.cpp b/Marlin/src/HAL/HAL_LPC1768/persistent_store_flash.cpp index dac7d7a3a93a..4f4f371f5e4d 100644 --- a/Marlin/src/HAL/HAL_LPC1768/persistent_store_flash.cpp +++ b/Marlin/src/HAL/HAL_LPC1768/persistent_store_flash.cpp @@ -109,7 +109,7 @@ bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { for (size_t i = 0; i < size; i++) ram_eeprom[pos + i] = value[i]; eeprom_dirty = true; crc16(crc, value, size); diff --git a/Marlin/src/HAL/HAL_SAMD51/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_SAMD51/persistent_store_eeprom.cpp index e41dd85c8556..2a0c991742e9 100644 --- a/Marlin/src/HAL/HAL_SAMD51/persistent_store_eeprom.cpp +++ b/Marlin/src/HAL/HAL_SAMD51/persistent_store_eeprom.cpp @@ -58,7 +58,7 @@ bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { #if NONE(SPI_EEPROM, I2C_EEPROM) if (NVMCTRL->SEESTAT.bit.RLOCK) NVMCTRL_CMD(NVMCTRL_CTRLB_CMD_USEE); // Unlock E2P data write access diff --git a/Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp b/Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp index c94bce3b650e..ff8313dd8308 100644 --- a/Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp +++ b/Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp @@ -50,7 +50,7 @@ bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { while (size--) { uint8_t v = *value; diff --git a/Marlin/src/HAL/HAL_STM32F1/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_STM32F1/persistent_store_eeprom.cpp index babcdeaee31a..a7fe530c6aaf 100644 --- a/Marlin/src/HAL/HAL_STM32F1/persistent_store_eeprom.cpp +++ b/Marlin/src/HAL/HAL_STM32F1/persistent_store_eeprom.cpp @@ -40,7 +40,7 @@ bool PersistentStore::access_start() { } bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { while (size--) { uint8_t * const p = (uint8_t * const)pos; uint8_t v = *value; diff --git a/Marlin/src/HAL/HAL_STM32_F4_F7/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_STM32_F4_F7/persistent_store_eeprom.cpp index 4bd86d225d4f..0b119730b6f9 100644 --- a/Marlin/src/HAL/HAL_STM32_F4_F7/persistent_store_eeprom.cpp +++ b/Marlin/src/HAL/HAL_STM32_F4_F7/persistent_store_eeprom.cpp @@ -32,7 +32,7 @@ bool PersistentStore::access_start() { return true; } bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { while (size--) { uint8_t * const p = (uint8_t * const)pos; uint8_t v = *value; diff --git a/Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp b/Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp index 6da102638f63..0c95277438fe 100644 --- a/Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp +++ b/Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp @@ -27,7 +27,7 @@ bool PersistentStore::access_start() { return true; } bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { while (size--) { uint8_t * const p = (uint8_t * const)pos; uint8_t v = *value; diff --git a/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp index 17934f71a327..2f063a4d4ab8 100644 --- a/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp +++ b/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp @@ -33,7 +33,7 @@ bool PersistentStore::access_start() { return true; } bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { while (size--) { uint8_t * const p = (uint8_t * const)pos; uint8_t v = *value; diff --git a/Marlin/src/HAL/shared/persistent_store_api.h b/Marlin/src/HAL/shared/persistent_store_api.h index 02013120a72a..0f4834b9b3ef 100644 --- a/Marlin/src/HAL/shared/persistent_store_api.h +++ b/Marlin/src/HAL/shared/persistent_store_api.h @@ -31,7 +31,7 @@ class PersistentStore { public: static bool access_start(); static bool access_finish(); - static bool write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc); + static bool write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc); static bool read_data(int &pos, uint8_t* value, size_t size, uint16_t *crc, const bool writing=true); static size_t capacity(); diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 225a83e8d4c9..ce24ecba67e0 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -1194,6 +1194,13 @@ #ifndef MSG_INFO_PROTOCOL #define MSG_INFO_PROTOCOL _UxGT("Protocol") #endif +#ifndef MSG_INFO_RUNAWAY_OFF + #define MSG_INFO_RUNAWAY_OFF _UxGT("Runaway Watch: OFF") +#endif +#ifndef MSG_INFO_RUNAWAY_ON + #define MSG_INFO_RUNAWAY_ON _UxGT("Runaway Watch: ON") +#endif + #ifndef MSG_CASE_LIGHT #define MSG_CASE_LIGHT _UxGT("Case Light") #endif diff --git a/Marlin/src/lcd/menu/menu_info.cpp b/Marlin/src/lcd/menu/menu_info.cpp index 7732bd7eb679..ac3e720281a3 100644 --- a/Marlin/src/lcd/menu/menu_info.cpp +++ b/Marlin/src/lcd/menu/menu_info.cpp @@ -102,6 +102,7 @@ void menu_info_thermistors() { char buffer[21]; // for STATIC_PAIR_P START_SCREEN(); + #if EXTRUDERS #define THERMISTOR_ID TEMP_SENSOR_0 #include "../thermistornames.h" @@ -155,14 +156,57 @@ void menu_info_thermistors() { STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(HEATER_5_MAXTEMP), SS_LEFT); #endif + #if EXTRUDERS + { + STATIC_ITEM( + #if WATCH_HOTENDS + MSG_INFO_RUNAWAY_ON + #else + MSG_INFO_RUNAWAY_OFF + #endif + , SS_LEFT + ); + } + #endif + #if HAS_HEATED_BED + { #undef THERMISTOR_ID #define THERMISTOR_ID TEMP_SENSOR_BED #include "../thermistornames.h" STATIC_ITEM("TBed:" THERMISTOR_NAME, SS_INVERT); STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(BED_MINTEMP), SS_LEFT); STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(BED_MAXTEMP), SS_LEFT); + STATIC_ITEM( + #if WATCH_BED + MSG_INFO_RUNAWAY_ON + #else + MSG_INFO_RUNAWAY_OFF + #endif + , SS_LEFT + ); + } + #endif + + #if HAS_HEATED_CHAMBER + { + #undef THERMISTOR_ID + #define THERMISTOR_ID TEMP_SENSOR_CHAMBER + #include "../thermistornames.h" + STATIC_ITEM("TCham:" THERMISTOR_NAME, SS_INVERT); + STATIC_PAIR_P(MSG_INFO_MIN_TEMP, STRINGIFY(CHAMBER_MINTEMP), SS_LEFT); + STATIC_PAIR_P(MSG_INFO_MAX_TEMP, STRINGIFY(CHAMBER_MAXTEMP), SS_LEFT); + STATIC_ITEM( + #if WATCH_CHAMBER + MSG_INFO_RUNAWAY_ON + #else + MSG_INFO_RUNAWAY_OFF + #endif + , SS_LEFT + ); + } #endif + END_SCREEN(); } From 7c5e6900e1cd9637ef08f83e048507e575af3c95 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 28 Sep 2019 20:35:24 -0500 Subject: [PATCH 090/120] Tweak comment --- Marlin/src/gcode/parser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/gcode/parser.cpp b/Marlin/src/gcode/parser.cpp index 76a63a21af1b..0840043e5dde 100644 --- a/Marlin/src/gcode/parser.cpp +++ b/Marlin/src/gcode/parser.cpp @@ -245,7 +245,7 @@ void GCodeParser::parse(char *p) { * For 'M118' you must use 'E1' and 'A1' rather than just 'E' or 'A' */ string_arg = nullptr; - while (const char code = *p++) { // Get the next parameter. A NUL ends the loop + while (const char code = *p++) { // Get the next parameter. A NUL ends the loop // Special handling for M32 [P] !/path/to/file.g# // The path must be the last parameter From f2d93f61c3432e08dab361e9b0ae0f996b507eb4 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sat, 28 Sep 2019 23:51:04 -0500 Subject: [PATCH 091/120] Revert errant const --- Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp | 2 +- Marlin/src/HAL/HAL_ESP32/persistent_store_spiffs.cpp | 2 +- Marlin/src/HAL/HAL_LPC1768/persistent_store_flash.cpp | 2 +- Marlin/src/HAL/HAL_SAMD51/persistent_store_eeprom.cpp | 2 +- Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp | 2 +- Marlin/src/HAL/HAL_STM32F1/persistent_store_eeprom.cpp | 2 +- Marlin/src/HAL/HAL_STM32_F4_F7/persistent_store_eeprom.cpp | 2 +- Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp | 2 +- Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp | 2 +- Marlin/src/HAL/shared/persistent_store_api.h | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp index 270324b68976..fc1baa22ac8b 100644 --- a/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp +++ b/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp @@ -44,7 +44,7 @@ bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { while (size--) { uint8_t * const p = (uint8_t * const)pos; uint8_t v = *value; diff --git a/Marlin/src/HAL/HAL_ESP32/persistent_store_spiffs.cpp b/Marlin/src/HAL/HAL_ESP32/persistent_store_spiffs.cpp index deefde9155b6..5227da356860 100644 --- a/Marlin/src/HAL/HAL_ESP32/persistent_store_spiffs.cpp +++ b/Marlin/src/HAL/HAL_ESP32/persistent_store_spiffs.cpp @@ -72,7 +72,7 @@ bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { if (!eeprom_file.seek(pos)) return true; // return true for any error if (eeprom_file.write(value, size) != size) return true; diff --git a/Marlin/src/HAL/HAL_LPC1768/persistent_store_flash.cpp b/Marlin/src/HAL/HAL_LPC1768/persistent_store_flash.cpp index 4f4f371f5e4d..dac7d7a3a93a 100644 --- a/Marlin/src/HAL/HAL_LPC1768/persistent_store_flash.cpp +++ b/Marlin/src/HAL/HAL_LPC1768/persistent_store_flash.cpp @@ -109,7 +109,7 @@ bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { for (size_t i = 0; i < size; i++) ram_eeprom[pos + i] = value[i]; eeprom_dirty = true; crc16(crc, value, size); diff --git a/Marlin/src/HAL/HAL_SAMD51/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_SAMD51/persistent_store_eeprom.cpp index 2a0c991742e9..e41dd85c8556 100644 --- a/Marlin/src/HAL/HAL_SAMD51/persistent_store_eeprom.cpp +++ b/Marlin/src/HAL/HAL_SAMD51/persistent_store_eeprom.cpp @@ -58,7 +58,7 @@ bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { #if NONE(SPI_EEPROM, I2C_EEPROM) if (NVMCTRL->SEESTAT.bit.RLOCK) NVMCTRL_CMD(NVMCTRL_CTRLB_CMD_USEE); // Unlock E2P data write access diff --git a/Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp b/Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp index ff8313dd8308..c94bce3b650e 100644 --- a/Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp +++ b/Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp @@ -50,7 +50,7 @@ bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { while (size--) { uint8_t v = *value; diff --git a/Marlin/src/HAL/HAL_STM32F1/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_STM32F1/persistent_store_eeprom.cpp index a7fe530c6aaf..babcdeaee31a 100644 --- a/Marlin/src/HAL/HAL_STM32F1/persistent_store_eeprom.cpp +++ b/Marlin/src/HAL/HAL_STM32F1/persistent_store_eeprom.cpp @@ -40,7 +40,7 @@ bool PersistentStore::access_start() { } bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { while (size--) { uint8_t * const p = (uint8_t * const)pos; uint8_t v = *value; diff --git a/Marlin/src/HAL/HAL_STM32_F4_F7/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_STM32_F4_F7/persistent_store_eeprom.cpp index 0b119730b6f9..4bd86d225d4f 100644 --- a/Marlin/src/HAL/HAL_STM32_F4_F7/persistent_store_eeprom.cpp +++ b/Marlin/src/HAL/HAL_STM32_F4_F7/persistent_store_eeprom.cpp @@ -32,7 +32,7 @@ bool PersistentStore::access_start() { return true; } bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { while (size--) { uint8_t * const p = (uint8_t * const)pos; uint8_t v = *value; diff --git a/Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp b/Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp index 0c95277438fe..6da102638f63 100644 --- a/Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp +++ b/Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp @@ -27,7 +27,7 @@ bool PersistentStore::access_start() { return true; } bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { while (size--) { uint8_t * const p = (uint8_t * const)pos; uint8_t v = *value; diff --git a/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp index 2f063a4d4ab8..17934f71a327 100644 --- a/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp +++ b/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp @@ -33,7 +33,7 @@ bool PersistentStore::access_start() { return true; } bool PersistentStore::access_finish() { return true; } -bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) { +bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) { while (size--) { uint8_t * const p = (uint8_t * const)pos; uint8_t v = *value; diff --git a/Marlin/src/HAL/shared/persistent_store_api.h b/Marlin/src/HAL/shared/persistent_store_api.h index 0f4834b9b3ef..02013120a72a 100644 --- a/Marlin/src/HAL/shared/persistent_store_api.h +++ b/Marlin/src/HAL/shared/persistent_store_api.h @@ -31,7 +31,7 @@ class PersistentStore { public: static bool access_start(); static bool access_finish(); - static bool write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc); + static bool write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc); static bool read_data(int &pos, uint8_t* value, size_t size, uint16_t *crc, const bool writing=true); static size_t capacity(); From 5e9898600b5a632ffd45c14abe90392bc8dcd2ed Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 29 Sep 2019 00:00:07 -0500 Subject: [PATCH 092/120] [cron] Bump distribution date --- Marlin/src/inc/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index b03206484dcc..c76a2ae1248b 100644 --- a/Marlin/src/inc/Version.h +++ b/Marlin/src/inc/Version.h @@ -51,7 +51,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ - #define STRING_DISTRIBUTION_DATE "2019-09-28" + #define STRING_DISTRIBUTION_DATE "2019-09-29" /** * Required minimum Configuration.h and Configuration_adv.h file versions. From 43d6e9fa4361cf744b6497b8819fa241812692e2 Mon Sep 17 00:00:00 2001 From: Tanguy Pruvot Date: Sun, 29 Sep 2019 09:04:53 +0200 Subject: [PATCH 093/120] STM32F103.. reorganization, SKR mini fix (#15398) --- .circleci/config.yml | 6 ++-- .travis.yml | 13 +++++---- Marlin/src/core/boards.h | 4 +-- Marlin/src/inc/SanityCheck.h | 6 +++- Marlin/src/pins/pins.h | 28 +++++++++---------- .../src/pins/stm32/pins_BIGTREE_SKR_E3_DIP.h | 8 +++++- .../src/pins/stm32/pins_BIGTREE_SKR_MINI_E3.h | 8 +++++- .../pins/stm32/pins_BIGTREE_SKR_MINI_V1_1.h | 15 +++++++--- ...F1_SKR_MINI.ld => STM32F103RC_SKR_MINI.ld} | 0 ...{longer_STM32.ld => STM32F103VE_longer.ld} | 0 ...F1_SKR_MINI.py => STM32F103RC_SKR_MINI.py} | 2 +- ...2F103R_fysetc.py => STM32F103RC_fysetc.py} | 0 ...{longer_STM32.py => STM32F103VE_longer.py} | 2 +- buildroot/share/git/mftest | 4 +-- ...yanm200-tests => STM32F103CB_malyan-tests} | 2 +- ...igtree-tests => STM32F103RC_bigtree-tests} | 2 +- .../share/tests/STM32F103RC_bigtree_USB-tests | 19 +++++++++++++ ..._fysetc-tests => STM32F103RC_fysetc-tests} | 2 +- .../{STM32F103R-tests => STM32F103RE-tests} | 2 +- ..._longer-tests => STM32F103VE_longer-tests} | 0 .../Configuration.h | 2 +- .../STM32/stm32f103ret6/Configuration.h | 2 +- platformio.ini | 26 ++++++++--------- 23 files changed, 98 insertions(+), 55 deletions(-) rename buildroot/share/PlatformIO/ldscripts/{STM32F1_SKR_MINI.ld => STM32F103RC_SKR_MINI.ld} (100%) rename buildroot/share/PlatformIO/ldscripts/{longer_STM32.ld => STM32F103VE_longer.ld} (100%) rename buildroot/share/PlatformIO/scripts/{STM32F1_SKR_MINI.py => STM32F103RC_SKR_MINI.py} (91%) rename buildroot/share/PlatformIO/scripts/{STM32F103R_fysetc.py => STM32F103RC_fysetc.py} (100%) rename buildroot/share/PlatformIO/scripts/{longer_STM32.py => STM32F103VE_longer.py} (97%) rename buildroot/share/tests/{malyanm200-tests => STM32F103CB_malyan-tests} (78%) rename buildroot/share/tests/{STM32F103R_bigtree-tests => STM32F103RC_bigtree-tests} (84%) create mode 100644 buildroot/share/tests/STM32F103RC_bigtree_USB-tests rename buildroot/share/tests/{STM32F103R_fysetc-tests => STM32F103RC_fysetc-tests} (85%) rename buildroot/share/tests/{STM32F103R-tests => STM32F103RE-tests} (94%) rename buildroot/share/tests/{STM32F103V_longer-tests => STM32F103VE_longer-tests} (100%) rename config/examples/STM32/{STM32F103R => STM32F103RE}/Configuration.h (99%) diff --git a/.circleci/config.yml b/.circleci/config.yml index cb8c31b22b52..5369e2f4d5ac 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -240,10 +240,10 @@ jobs: build_marlin_pio ./ ${TEST_PLATFORM} restore_configs echo testing STM32F1 targets... - export TEST_PLATFORM="-e STM32F103R" + export TEST_PLATFORM="-e STM32F103RE" restore_configs - echo use_example_configs STM32/STM32F103R - use_example_configs STM32/STM32F103R + echo use_example_configs STM32/STM32F103RE + use_example_configs STM32/STM32F103RE build_marlin_pio ./ ${TEST_PLATFORM} restore_configs echo use_example_configs STM32/stm32f103ret6 diff --git a/.travis.yml b/.travis.yml index cfd6a6755651..4bfadbcc6b77 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,7 @@ env: - TEST_PLATFORM="LPC1768" - TEST_PLATFORM="LPC1769" - TEST_PLATFORM="megaatmega2560" - - TEST_PLATFORM="STM32F103R" + - TEST_PLATFORM="STM32F103RE" - TEST_PLATFORM="teensy31" - TEST_PLATFORM="teensy35" @@ -31,22 +31,23 @@ env: - TEST_PLATFORM="ARMED" - TEST_PLATFORM="BIGTREE_BTT002" - TEST_PLATFORM="BIGTREE_SKR_PRO" - - TEST_PLATFORM="STM32F103R_bigtree" + - TEST_PLATFORM="STM32F103RC_bigtree" - TEST_PLATFORM="jgaurora_a5s_a1" - - TEST_PLATFORM="STM32F103V_longer" + - TEST_PLATFORM="STM32F103VE_longer" - TEST_PLATFORM="STM32F407VE_black" # Non-working environment tests #- TEST_PLATFORM="at90usb1286_cdc" #- TEST_PLATFORM="at90usb1286_dfu" - #- TEST_PLATFORM="malyanm200" + #- TEST_PLATFORM="STM32F103CB_malyan" #- TEST_PLATFORM="mks_robin" #- TEST_PLATFORM="mks_robin_lite" #- TEST_PLATFORM="mks_robin_mini" #- TEST_PLATFORM="mks_robin_nano" #- TEST_PLATFORM="SAMD51_grandcentral_m4" - #- TEST_PLATFORM="STM32F103R_bigtree" - #- TEST_PLATFORM="STM32F103R_fysetc" + #- TEST_PLATFORM="STM32F103RC_bigtree" + #- TEST_PLATFORM="STM32F103RC_bigtree_USB" + #- TEST_PLATFORM="STM32F103RC_fysetc" #- TEST_PLATFORM="STM32F4" #- TEST_PLATFORM="STM32F7" diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h index 89f1f0d20d90..4924afa44543 100644 --- a/Marlin/src/core/boards.h +++ b/Marlin/src/core/boards.h @@ -255,9 +255,9 @@ // STM32 ARM Cortex-M3 // -#define BOARD_STM32F103R 4000 // STM32F103R Libmaple-based STM32F1 controller +#define BOARD_STM32F103RE 4000 // STM32F103RE Libmaple-based STM32F1 controller #define BOARD_MALYAN_M200 4001 // STM32C8T6 Libmaple-based STM32F1 controller -#define BOARD_STM3R_MINI 4002 // STM32F103R Libmaple-based STM32F1 controller +#define BOARD_STM3R_MINI 4002 // STM32F103RE Libmaple-based STM32F1 controller #define BOARD_GTM32_PRO_VB 4003 // STM32F103VET6 controller #define BOARD_MORPHEUS 4004 // STM32F103C8 / STM32F103CB Libmaple-based STM32F1 controller #define BOARD_CHITU3D 4005 // Chitu3D (STM32F103RET6) diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 636919ea813c..bf76e5fe8d81 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -410,6 +410,7 @@ #define BOARD_FORMBOT_TREX2 -1003 #define BOARD_BIQU_SKR_V1_1 -1004 #define BOARD_STM32F1R -1005 +#define BOARD_STM32F103R -1006 #if MB(MKS_13) #error "BOARD_MKS_13 has been renamed BOARD_MKS_GEN_13. Please update your configuration." #elif MB(TRIGORILLA) @@ -421,7 +422,9 @@ #elif MB(BIQU_SKR_V1_1) #error "BOARD_BIQU_SKR_V1_1 has been renamed BOARD_BIGTREE_SKR_V1_1. Please update your configuration." #elif MB(STM32F1R) - #error "BOARD_STM32F1R has been renamed BOARD_STM32F103R. Please update your configuration." + #error "BOARD_STM32F1R has been renamed BOARD_STM32F103RE. Please update your configuration." +#elif MB(STM32F103R) + #error "BOARD_STM32F103R has been renamed BOARD_STM32F103RE. Please update your configuration." #endif #undef BOARD_MKS_13 #undef BOARD_TRIGORILLA @@ -429,6 +432,7 @@ #undef BOARD_FORMBOT_TREX2 #undef BOARD_BIQU_SKR_V1_1 #undef BOARD_STM32F1R +#undef BOARD_STM32F103R /** * Marlin release, version and default string diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index 4058c72836c0..19bdc5a741f8 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -442,18 +442,18 @@ // STM32 ARM Cortex-M3 // -#elif MB(STM32F103R) - #include "stm32/pins_STM32F1R.h" // STM32F1 env:STM32F103R +#elif MB(STM32F103RE) + #include "stm32/pins_STM32F1R.h" // STM32F1 env:STM32F103RE #elif MB(MALYAN_M200) - #include "stm32/pins_MALYAN_M200.h" // STM32F1 env:malyanm200 + #include "stm32/pins_MALYAN_M200.h" // STM32F1 env:STM32F103CB_malyan #elif MB(STM3R_MINI) - #include "stm32/pins_STM3R_MINI.h" // STM32F1 env:STM32F103R + #include "stm32/pins_STM3R_MINI.h" // STM32F1 env:STM32F103RE #elif MB(GTM32_PRO_VB) - #include "stm32/pins_GTM32_PRO_VB.h" // STM32F1 env:STM32F103R + #include "stm32/pins_GTM32_PRO_VB.h" // STM32F1 env:STM32F103RE #elif MB(MORPHEUS) - #include "stm32/pins_MORPHEUS.h" // STM32F1 env:STM32F103R + #include "stm32/pins_MORPHEUS.h" // STM32F1 env:STM32F103RE #elif MB(CHITU3D) - #include "stm32/pins_CHITU3D.h" // STM32F1 env:STM32F103R + #include "stm32/pins_CHITU3D.h" // STM32F1 env:STM32F103RE #elif MB(MKS_ROBIN) #include "stm32/pins_MKS_ROBIN.h" // STM32F1 env:mks_robin #elif MB(MKS_ROBIN_MINI) @@ -463,21 +463,21 @@ #elif MB(MKS_ROBIN_LITE) #include "stm32/pins_MKS_ROBIN_LITE.h" // STM32F1 env:mks_robin_lite #elif MB(BIGTREE_SKR_MINI_V1_1) - #include "stm32/pins_BIGTREE_SKR_MINI_V1_1.h" // STM32F1 env:STM32F103R_bigtree + #include "stm32/pins_BIGTREE_SKR_MINI_V1_1.h" // STM32F1 env:STM32F103RC_bigtree #elif MB(BIGTREE_SKR_MINI_E3) - #include "stm32/pins_BIGTREE_SKR_MINI_E3.h" // STM32F1 env:STM32F103R_bigtree + #include "stm32/pins_BIGTREE_SKR_MINI_E3.h" // STM32F1 env:STM32F103RC_bigtree #elif MB(BIGTREE_SKR_E3_DIP) - #include "stm32/pins_BIGTREE_SKR_E3_DIP.h" // STM32F1 env:STM32F103R_bigtree + #include "stm32/pins_BIGTREE_SKR_E3_DIP.h" // STM32F1 env:STM32F103RC_bigtree #elif MB(JGAURORA_A5S_A1) #include "stm32/pins_JGAURORA_A5S_A1.h" // STM32F1 env:jgaurora_a5s_a1 #elif MB(FYSETC_AIO_II) - #include "stm32/pins_FYSETC_AIO_II.h" // STM32F1 env:STM32F103R_fysetc + #include "stm32/pins_FYSETC_AIO_II.h" // STM32F1 env:STM32F103RC_fysetc #elif MB(FYSETC_CHEETAH) - #include "stm32/pins_FYSETC_CHEETAH.h" // STM32F1 env:STM32F103R_fysetc + #include "stm32/pins_FYSETC_CHEETAH.h" // STM32F1 env:STM32F103RC_fysetc #elif MB(FYSETC_CHEETAH_V12) - #include "stm32/pins_FYSETC_CHEETAH_V12.h" // STM32F1 env:STM32F103R_fysetc + #include "stm32/pins_FYSETC_CHEETAH_V12.h" // STM32F1 env:STM32F103RC_fysetc #elif MB(LONGER3D_LK) - #include "stm32/pins_LONGER3D_LK.h" // STM32F1 env:STM32F103V_longer + #include "stm32/pins_LONGER3D_LK.h" // STM32F1 env:STM32F103VE_longer // // ARM Cortex-M4F diff --git a/Marlin/src/pins/stm32/pins_BIGTREE_SKR_E3_DIP.h b/Marlin/src/pins/stm32/pins_BIGTREE_SKR_E3_DIP.h index 1e8e605abb69..d3c1cc2a1a87 100644 --- a/Marlin/src/pins/stm32/pins_BIGTREE_SKR_E3_DIP.h +++ b/Marlin/src/pins/stm32/pins_BIGTREE_SKR_E3_DIP.h @@ -33,9 +33,15 @@ // Ignore temp readings during development. //#define BOGUS_TEMPERATURE_GRACE_PERIOD 2000 +#ifdef MCU_STM32F103RE + #define STM32_FLASH_SIZE (512 * 1024) +#else + #define STM32_FLASH_SIZE (256 * 1024) +#endif + #define FLASH_EEPROM_EMULATION #define EEPROM_PAGE_SIZE uint16(0x800) // 2KB -#define EEPROM_START_ADDRESS uint32(0x8000000 + 256 * 1024 - 2 * EEPROM_PAGE_SIZE) +#define EEPROM_START_ADDRESS uint32(0x8000000 + STM32_FLASH_SIZE - 2 * EEPROM_PAGE_SIZE) #undef E2END #define E2END (EEPROM_PAGE_SIZE - 1) // 2KB diff --git a/Marlin/src/pins/stm32/pins_BIGTREE_SKR_MINI_E3.h b/Marlin/src/pins/stm32/pins_BIGTREE_SKR_MINI_E3.h index b0039b109c8a..7f0698483e6b 100644 --- a/Marlin/src/pins/stm32/pins_BIGTREE_SKR_MINI_E3.h +++ b/Marlin/src/pins/stm32/pins_BIGTREE_SKR_MINI_E3.h @@ -33,9 +33,15 @@ // Ignore temp readings during development. //#define BOGUS_TEMPERATURE_GRACE_PERIOD 2000 +#ifdef MCU_STM32F103RE + #define STM32_FLASH_SIZE (512 * 1024) +#else + #define STM32_FLASH_SIZE (256 * 1024) +#endif + #define FLASH_EEPROM_EMULATION #define EEPROM_PAGE_SIZE uint16(0x800) // 2KB -#define EEPROM_START_ADDRESS uint32(0x8000000 + 256 * 1024 - 2 * EEPROM_PAGE_SIZE) +#define EEPROM_START_ADDRESS uint32(0x8000000 + STM32_FLASH_SIZE - 2 * EEPROM_PAGE_SIZE) #undef E2END #define E2END (EEPROM_PAGE_SIZE - 1) // 2KB diff --git a/Marlin/src/pins/stm32/pins_BIGTREE_SKR_MINI_V1_1.h b/Marlin/src/pins/stm32/pins_BIGTREE_SKR_MINI_V1_1.h index 181773c6b1e6..01719236ad1f 100644 --- a/Marlin/src/pins/stm32/pins_BIGTREE_SKR_MINI_V1_1.h +++ b/Marlin/src/pins/stm32/pins_BIGTREE_SKR_MINI_V1_1.h @@ -33,6 +33,17 @@ // Ignore temp readings during development. //#define BOGUS_TEMPERATURE_GRACE_PERIOD 2000 +#ifdef MCU_STM32F103RE + #define STM32_FLASH_SIZE (512 * 1024) +#else + #define STM32_FLASH_SIZE (256 * 1024) +#endif + +#define FLASH_EEPROM_EMULATION +#define EEPROM_PAGE_SIZE (0x800) // 2KB +#define EEPROM_START_ADDRESS (0x8000000 + STM32_FLASH_SIZE - 2 * EEPROM_PAGE_SIZE) +#define E2END (EEPROM_PAGE_SIZE - 1) + // // Limit Switches // @@ -208,7 +219,3 @@ #define ST7920_DELAY_3 DELAY_NS(125) #endif -#define FLASH_EEPROM_EMULATION -#define EEPROM_PAGE_SIZE (0x800) // 2KB -#define EEPROM_START_ADDRESS (0x8000000 + (256 * 1024) - 2 * EEPROM_PAGE_SIZE) -#define E2END (EEPROM_PAGE_SIZE - 1) diff --git a/buildroot/share/PlatformIO/ldscripts/STM32F1_SKR_MINI.ld b/buildroot/share/PlatformIO/ldscripts/STM32F103RC_SKR_MINI.ld similarity index 100% rename from buildroot/share/PlatformIO/ldscripts/STM32F1_SKR_MINI.ld rename to buildroot/share/PlatformIO/ldscripts/STM32F103RC_SKR_MINI.ld diff --git a/buildroot/share/PlatformIO/ldscripts/longer_STM32.ld b/buildroot/share/PlatformIO/ldscripts/STM32F103VE_longer.ld similarity index 100% rename from buildroot/share/PlatformIO/ldscripts/longer_STM32.ld rename to buildroot/share/PlatformIO/ldscripts/STM32F103VE_longer.ld diff --git a/buildroot/share/PlatformIO/scripts/STM32F1_SKR_MINI.py b/buildroot/share/PlatformIO/scripts/STM32F103RC_SKR_MINI.py similarity index 91% rename from buildroot/share/PlatformIO/scripts/STM32F1_SKR_MINI.py rename to buildroot/share/PlatformIO/scripts/STM32F103RC_SKR_MINI.py index 0ef67ee60234..1697515dc32a 100644 --- a/buildroot/share/PlatformIO/scripts/STM32F1_SKR_MINI.py +++ b/buildroot/share/PlatformIO/scripts/STM32F103RC_SKR_MINI.py @@ -5,4 +5,4 @@ if define[0] == "VECT_TAB_ADDR": env['CPPDEFINES'].remove(define) env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08007000")) -env.Replace(LDSCRIPT_PATH="buildroot/share/PlatformIO/ldscripts/STM32F1_SKR_MINI.ld") +env.Replace(LDSCRIPT_PATH="buildroot/share/PlatformIO/ldscripts/STM32F103RC_SKR_MINI.ld") diff --git a/buildroot/share/PlatformIO/scripts/STM32F103R_fysetc.py b/buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py similarity index 100% rename from buildroot/share/PlatformIO/scripts/STM32F103R_fysetc.py rename to buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py diff --git a/buildroot/share/PlatformIO/scripts/longer_STM32.py b/buildroot/share/PlatformIO/scripts/STM32F103VE_longer.py similarity index 97% rename from buildroot/share/PlatformIO/scripts/longer_STM32.py rename to buildroot/share/PlatformIO/scripts/STM32F103VE_longer.py index 77df4825c127..d48a2a417645 100644 --- a/buildroot/share/PlatformIO/scripts/longer_STM32.py +++ b/buildroot/share/PlatformIO/scripts/STM32F103VE_longer.py @@ -5,7 +5,7 @@ if define[0] == "VECT_TAB_ADDR": env['CPPDEFINES'].remove(define) env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08010000")) -env.Replace(LDSCRIPT_PATH="buildroot/share/PlatformIO/ldscripts/longer_STM32.ld") +env.Replace(LDSCRIPT_PATH="buildroot/share/PlatformIO/ldscripts/STM32F103VE_longer.ld") # Rename ${PROGNAME}.bin and save it as 'project.bin' (No encryption on the Longer3D) def encrypt(source, target, env): diff --git a/buildroot/share/git/mftest b/buildroot/share/git/mftest index a585ae326621..3ee78c49a08e 100755 --- a/buildroot/share/git/mftest +++ b/buildroot/share/git/mftest @@ -28,8 +28,8 @@ case $TESTENV in m128) TESTENV='megaatmega1280' ;; m256) TESTENV='megaatmega2560' ;; mega) TESTENV='megaatmega2560' ;; - stm) TESTENV='STM32F103R' ;; - f1) TESTENV='STM32F103R' ;; + stm) TESTENV='STM32F103RE' ;; + f1) TESTENV='STM32F103RE' ;; f4) TESTENV='STM32F4' ;; f7) TESTENV='STM32F7' ;; teensy) TESTENV='teensy31' ;; diff --git a/buildroot/share/tests/malyanm200-tests b/buildroot/share/tests/STM32F103CB_malyan-tests similarity index 78% rename from buildroot/share/tests/malyanm200-tests rename to buildroot/share/tests/STM32F103CB_malyan-tests index 3856d058669f..fced4d5d2404 100644 --- a/buildroot/share/tests/malyanm200-tests +++ b/buildroot/share/tests/STM32F103CB_malyan-tests @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Build tests for STM32F1 malyanM200 +# Build tests for STM32F103CB Malyan M200 # # exit on first failure diff --git a/buildroot/share/tests/STM32F103R_bigtree-tests b/buildroot/share/tests/STM32F103RC_bigtree-tests similarity index 84% rename from buildroot/share/tests/STM32F103R_bigtree-tests rename to buildroot/share/tests/STM32F103RC_bigtree-tests index 11479feb0dd2..50c37e36de83 100644 --- a/buildroot/share/tests/STM32F103R_bigtree-tests +++ b/buildroot/share/tests/STM32F103RC_bigtree-tests @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Build tests for STM32F1 Bigtreetech (SKR Mini v1.1) +# Build tests for STM32F103RC Bigtreetech (SKR Mini v1.1) # # exit on first failure diff --git a/buildroot/share/tests/STM32F103RC_bigtree_USB-tests b/buildroot/share/tests/STM32F103RC_bigtree_USB-tests new file mode 100644 index 000000000000..50c37e36de83 --- /dev/null +++ b/buildroot/share/tests/STM32F103RC_bigtree_USB-tests @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +# +# Build tests for STM32F103RC Bigtreetech (SKR Mini v1.1) +# + +# exit on first failure +set -e + +# +# Build with the default configurations +# +restore_configs +opt_set MOTHERBOARD BOARD_BIGTREE_SKR_MINI_V1_1 +opt_set SERIAL_PORT 1 +opt_set SERIAL_PORT_2 -1 +exec_test $1 $2 "Bigtreetech SKR Mini v1.1 - Basic Configuration" + +# clean up +restore_configs diff --git a/buildroot/share/tests/STM32F103R_fysetc-tests b/buildroot/share/tests/STM32F103RC_fysetc-tests similarity index 85% rename from buildroot/share/tests/STM32F103R_fysetc-tests rename to buildroot/share/tests/STM32F103RC_fysetc-tests index ad0f5ea81bdd..7d08fb7c5862 100644 --- a/buildroot/share/tests/STM32F103R_fysetc-tests +++ b/buildroot/share/tests/STM32F103RC_fysetc-tests @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Build tests for STM32F1 FYSETC +# Build tests for STM32F103RC FYSETC # # exit on first failure diff --git a/buildroot/share/tests/STM32F103R-tests b/buildroot/share/tests/STM32F103RE-tests similarity index 94% rename from buildroot/share/tests/STM32F103R-tests rename to buildroot/share/tests/STM32F103RE-tests index 519957c470c6..63fe5ba393b8 100755 --- a/buildroot/share/tests/STM32F103R-tests +++ b/buildroot/share/tests/STM32F103RE-tests @@ -10,7 +10,7 @@ set -e # Build with the default configurations # restore_configs -opt_set MOTHERBOARD BOARD_STM32F103R +opt_set MOTHERBOARD BOARD_STM32F103RE opt_set EXTRUDERS 2 opt_set SERIAL_PORT -1 opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT \ diff --git a/buildroot/share/tests/STM32F103V_longer-tests b/buildroot/share/tests/STM32F103VE_longer-tests similarity index 100% rename from buildroot/share/tests/STM32F103V_longer-tests rename to buildroot/share/tests/STM32F103VE_longer-tests diff --git a/config/examples/STM32/STM32F103R/Configuration.h b/config/examples/STM32/STM32F103RE/Configuration.h similarity index 99% rename from config/examples/STM32/STM32F103R/Configuration.h rename to config/examples/STM32/STM32F103RE/Configuration.h index f31ac7831bfe..e80ebe989670 100644 --- a/config/examples/STM32/STM32F103R/Configuration.h +++ b/config/examples/STM32/STM32F103RE/Configuration.h @@ -129,7 +129,7 @@ // Choose the name from boards.h that matches your setup #ifndef MOTHERBOARD - #define MOTHERBOARD BOARD_STM32F103R + #define MOTHERBOARD BOARD_STM32F103RE #endif // Name displayed in the LCD "Ready" message and Info menu diff --git a/config/examples/STM32/stm32f103ret6/Configuration.h b/config/examples/STM32/stm32f103ret6/Configuration.h index 16b6cd70205f..9f3c034af336 100644 --- a/config/examples/STM32/stm32f103ret6/Configuration.h +++ b/config/examples/STM32/stm32f103ret6/Configuration.h @@ -129,7 +129,7 @@ // Choose the name from boards.h that matches your setup #ifndef MOTHERBOARD - #define MOTHERBOARD BOARD_STM32F103R + #define MOTHERBOARD BOARD_STM32F103RE #endif // Name displayed in the LCD "Ready" message and Info menu diff --git a/platformio.ini b/platformio.ini index 190c8af5da1a..447a10e81a2f 100644 --- a/platformio.ini +++ b/platformio.ini @@ -253,7 +253,7 @@ monitor_speed = 250000 # # STM32F103RE # -[env:STM32F103R] +[env:STM32F103RE] platform = ststm32 framework = arduino board = genericSTM32F103RE @@ -262,20 +262,20 @@ build_flags = !python Marlin/src/HAL/HAL_STM32F1/build_flags.py -DDEBUG_LEVEL=0 build_unflags = -std=gnu++11 lib_deps = ${common.lib_deps} -lib_ignore = U8glib-HAL, Adafruit NeoPixel, SPI +lib_ignore = Adafruit NeoPixel, SPI src_filter = ${common.default_src_filter} + monitor_speed = 250000 # -# STM32F103R_fysetc +# STM32F103RC_fysetc # -[env:STM32F103R_fysetc] +[env:STM32F103RC_fysetc] platform = ststm32 framework = arduino board = genericSTM32F103RC #board_build.core = maple platform_packages = tool-stm32duino -extra_scripts = buildroot/share/PlatformIO/scripts/STM32F103R_fysetc.py +extra_scripts = buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py build_flags = !python Marlin/src/HAL/HAL_STM32F1/build_flags.py ${common.build_flags} -std=gnu++14 -DDEBUG_LEVEL=0 -DHAVE_SW_SERIAL @@ -292,12 +292,12 @@ upload_protocol = serial # # BigTree SKR Mini V1.1 / SKR mini E3 / SKR E3 DIP (STM32F103RCT6 ARM Cortex-M3) # -[env:STM32F103R_bigtree] +[env:STM32F103RC_bigtree] platform = ststm32 framework = arduino board = genericSTM32F103RC platform_packages = tool-stm32duino -extra_scripts = buildroot/share/PlatformIO/scripts/STM32F1_SKR_MINI.py +extra_scripts = buildroot/share/PlatformIO/scripts/STM32F103RC_SKR_MINI.py build_flags = !python Marlin/src/HAL/HAL_STM32F1/build_flags.py ${common.build_flags} -DDEBUG_LEVEL=0 -std=gnu++14 build_unflags = -std=gnu++11 @@ -308,12 +308,12 @@ monitor_speed = 115200 upload_protocol = stlink debug_tool = stlink -[env:STM32F103R_bigtree_USB] +[env:STM32F103RC_bigtree_USB] platform = ststm32 framework = arduino board = genericSTM32F103RC platform_packages = tool-stm32duino -extra_scripts = buildroot/share/PlatformIO/scripts/STM32F1_SKR_MINI.py +extra_scripts = buildroot/share/PlatformIO/scripts/STM32F103RC_SKR_MINI.py build_flags = !python Marlin/src/HAL/HAL_STM32F1/build_flags.py ${common.build_flags} -DDEBUG_LEVEL=0 -DUSE_USB_COMPOSITE -std=gnu++14 build_unflags = -std=gnu++11 @@ -366,12 +366,12 @@ monitor_speed = 250000 # # Longer 3D board in Alfawise U20 (STM32F103VET6) # -[env:STM32F103V_longer] +[env:STM32F103VE_longer] platform = ststm32 framework = arduino board = genericSTM32F103VE monitor_speed = 250000 -extra_scripts = buildroot/share/PlatformIO/scripts/longer_STM32.py +extra_scripts = buildroot/share/PlatformIO/scripts/STM32F103VE_longer.py build_flags = !python Marlin/src/HAL/HAL_STM32F1/build_flags.py ${common.build_flags} -std=gnu++14 -USERIAL_USB -DSTM32F1xx -DU20 -DTS_V12 @@ -543,9 +543,9 @@ src_filter = ${common.default_src_filter} + monitor_speed = 250000 # -# Malyan M200 (STM32F1) +# Malyan M200 (STM32F103CB) # -[env:malyanm200] +[env:STM32F103CB_malyan] platform = ststm32 framework = arduino board = malyanM200 From 50e4545255605eb506c20eb107270038b0fe7bdb Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 29 Sep 2019 04:25:39 -0500 Subject: [PATCH 094/120] Add custom types for position (#15204) --- Marlin/Configuration_adv.h | 4 +- Marlin/src/Marlin.cpp | 12 +- Marlin/src/core/enum.h | 63 --- Marlin/src/core/macros.h | 7 +- Marlin/src/core/serial.cpp | 7 +- Marlin/src/core/serial.h | 12 +- Marlin/src/core/types.h | 486 +++++++++++++++++ Marlin/src/core/utility.cpp | 50 +- Marlin/src/core/utility.h | 26 +- Marlin/src/feature/I2CPositionEncoder.cpp | 39 +- Marlin/src/feature/I2CPositionEncoder.h | 2 - Marlin/src/feature/backlash.cpp | 24 +- Marlin/src/feature/backlash.h | 8 +- Marlin/src/feature/bedlevel/abl/abl.cpp | 162 +++--- Marlin/src/feature/bedlevel/abl/abl.h | 12 +- Marlin/src/feature/bedlevel/bedlevel.cpp | 32 +- Marlin/src/feature/bedlevel/bedlevel.h | 22 +- .../bedlevel/mbl/mesh_bed_leveling.cpp | 55 +- .../feature/bedlevel/mbl/mesh_bed_leveling.h | 34 +- Marlin/src/feature/bedlevel/ubl/ubl.cpp | 5 +- Marlin/src/feature/bedlevel/ubl/ubl.h | 47 +- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 490 +++++++++--------- .../src/feature/bedlevel/ubl/ubl_motion.cpp | 355 ++++++------- Marlin/src/feature/dac/dac_mcp4728.cpp | 6 +- Marlin/src/feature/dac/dac_mcp4728.h | 4 +- Marlin/src/feature/dac/stepper_dac.cpp | 8 +- Marlin/src/feature/dac/stepper_dac.h | 2 +- Marlin/src/feature/fwretract.cpp | 14 +- Marlin/src/feature/joystick.cpp | 29 +- Marlin/src/feature/joystick.h | 4 +- Marlin/src/feature/pause.cpp | 22 +- Marlin/src/feature/pause.h | 2 +- Marlin/src/feature/power_loss_recovery.cpp | 32 +- Marlin/src/feature/power_loss_recovery.h | 6 +- Marlin/src/feature/prusa_MMU2/mmu2.cpp | 16 +- Marlin/src/feature/runout.h | 4 +- Marlin/src/feature/tmc_util.h | 4 +- Marlin/src/gcode/bedlevel/G26.cpp | 297 +++++------ Marlin/src/gcode/bedlevel/G42.cpp | 11 +- Marlin/src/gcode/bedlevel/M420.cpp | 11 +- Marlin/src/gcode/bedlevel/abl/G29.cpp | 316 +++++------ Marlin/src/gcode/bedlevel/mbl/G29.cpp | 8 +- Marlin/src/gcode/bedlevel/ubl/M421.cpp | 19 +- Marlin/src/gcode/calibrate/G28.cpp | 50 +- Marlin/src/gcode/calibrate/G33.cpp | 166 +++--- Marlin/src/gcode/calibrate/G34_M422.cpp | 41 +- Marlin/src/gcode/calibrate/G425.cpp | 154 +++--- Marlin/src/gcode/calibrate/M48.cpp | 34 +- Marlin/src/gcode/calibrate/M665.cpp | 22 +- Marlin/src/gcode/config/M200-M205.cpp | 10 +- Marlin/src/gcode/config/M218.cpp | 14 +- Marlin/src/gcode/config/M92.cpp | 2 +- Marlin/src/gcode/control/M211.cpp | 12 +- Marlin/src/gcode/control/M605.cpp | 8 +- Marlin/src/gcode/feature/camera/M240.cpp | 32 +- Marlin/src/gcode/feature/pause/M125.cpp | 5 +- Marlin/src/gcode/feature/pause/M600.cpp | 6 +- Marlin/src/gcode/feature/pause/M701_M702.cpp | 13 +- Marlin/src/gcode/feature/trinamic/M122.cpp | 10 +- .../src/gcode/feature/trinamic/M911-M914.cpp | 16 +- Marlin/src/gcode/gcode.cpp | 19 +- Marlin/src/gcode/gcode.h | 2 +- Marlin/src/gcode/geometry/G53-G59.cpp | 4 +- Marlin/src/gcode/geometry/G92.cpp | 4 +- Marlin/src/gcode/geometry/M206_M428.cpp | 2 +- Marlin/src/gcode/host/M114.cpp | 40 +- Marlin/src/gcode/motion/G0_G1.cpp | 10 +- Marlin/src/gcode/motion/G2_G3.cpp | 73 ++- Marlin/src/gcode/motion/G5.cpp | 16 +- Marlin/src/gcode/motion/M290.cpp | 22 +- Marlin/src/gcode/probe/G30.cpp | 11 +- Marlin/src/gcode/probe/G38.cpp | 7 +- Marlin/src/gcode/probe/M851.cpp | 12 +- Marlin/src/gcode/scara/M360-M364.cpp | 2 +- Marlin/src/inc/Conditionals_post.h | 11 +- Marlin/src/inc/MarlinConfig.h | 2 +- Marlin/src/inc/MarlinConfigPre.h | 1 - Marlin/src/inc/SanityCheck.h | 7 +- Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp | 20 +- Marlin/src/lcd/dogm/status_screen_DOGM.cpp | 7 +- .../lcd/dogm/status_screen_lite_ST7920.cpp | 12 +- .../src/lcd/dogm/status_screen_lite_ST7920.h | 3 +- Marlin/src/lcd/dogm/ultralcd_DOGM.cpp | 6 +- .../lib/dgus/DGUSDisplayDefinition.cpp | 8 +- .../lib/lulzbot/screens/bio_status_screen.cpp | 33 +- .../screens/change_filament_screen.cpp | 4 +- .../lib/lulzbot/screens/move_axis_screen.cpp | 4 +- .../lulzbot/screens/nudge_nozzle_screen.cpp | 23 +- .../lib/lulzbot/screens/screen_data.h | 2 +- Marlin/src/lcd/extensible_ui/ui_api.cpp | 74 ++- Marlin/src/lcd/extensible_ui/ui_api.h | 9 +- Marlin/src/lcd/menu/menu.cpp | 18 +- Marlin/src/lcd/menu/menu_advanced.cpp | 4 +- Marlin/src/lcd/menu/menu_bed_corners.cpp | 14 +- Marlin/src/lcd/menu/menu_bed_leveling.cpp | 6 +- Marlin/src/lcd/menu/menu_configuration.cpp | 10 +- Marlin/src/lcd/menu/menu_delta_calibrate.cpp | 38 +- Marlin/src/lcd/menu/menu_motion.cpp | 20 +- Marlin/src/lcd/menu/menu_ubl.cpp | 15 +- Marlin/src/lcd/ultralcd.cpp | 2 +- Marlin/src/lcd/ultralcd.h | 1 - Marlin/src/libs/L6470/L6470_Marlin.cpp | 26 +- Marlin/src/libs/least_squares_fit.h | 6 + Marlin/src/libs/nozzle.cpp | 77 ++- Marlin/src/libs/nozzle.h | 19 +- Marlin/src/libs/point_t.h | 55 -- Marlin/src/libs/vector_3.cpp | 94 ++-- Marlin/src/libs/vector_3.h | 35 +- Marlin/src/module/configuration_store.cpp | 147 +++--- Marlin/src/module/delta.cpp | 85 ++- Marlin/src/module/delta.h | 41 +- Marlin/src/module/motion.cpp | 326 ++++++------ Marlin/src/module/motion.h | 99 ++-- Marlin/src/module/planner.cpp | 432 +++++++-------- Marlin/src/module/planner.h | 102 ++-- Marlin/src/module/planner_bezier.cpp | 56 +- Marlin/src/module/planner_bezier.h | 9 +- Marlin/src/module/probe.cpp | 80 ++- Marlin/src/module/probe.h | 18 +- Marlin/src/module/scara.cpp | 43 +- Marlin/src/module/scara.h | 6 +- Marlin/src/module/stepper.cpp | 109 ++-- Marlin/src/module/stepper.h | 26 +- Marlin/src/module/tool_change.cpp | 175 +++---- Marlin/src/module/tool_change.h | 3 +- config/default/Configuration_adv.h | 4 +- .../3DFabXYZ/Migbot/Configuration_adv.h | 4 +- .../ADIMLab/Gantry v1/Configuration_adv.h | 4 +- .../ADIMLab/Gantry v2/Configuration_adv.h | 4 +- .../AlephObjects/TAZ4/Configuration_adv.h | 4 +- .../Alfawise/U20-bltouch/Configuration_adv.h | 4 +- .../examples/Alfawise/U20/Configuration_adv.h | 4 +- .../AliExpress/UM2pExt/Configuration_adv.h | 4 +- config/examples/Anet/A2/Configuration_adv.h | 4 +- .../examples/Anet/A2plus/Configuration_adv.h | 4 +- config/examples/Anet/A6/Configuration_adv.h | 4 +- config/examples/Anet/A8/Configuration_adv.h | 4 +- .../examples/Anet/A8plus/Configuration_adv.h | 4 +- config/examples/Anet/E16/Configuration_adv.h | 4 +- .../examples/AnyCubic/i3/Configuration_adv.h | 4 +- config/examples/ArmEd/Configuration_adv.h | 4 +- .../BIBO/TouchX/cyclops/Configuration_adv.h | 4 +- .../BIBO/TouchX/default/Configuration_adv.h | 4 +- .../examples/BQ/Hephestos/Configuration_adv.h | 4 +- .../BQ/Hephestos_2/Configuration_adv.h | 4 +- config/examples/BQ/WITBOX/Configuration_adv.h | 4 +- config/examples/Cartesio/Configuration_adv.h | 4 +- .../Creality/CR-10/Configuration_adv.h | 4 +- .../Creality/CR-10S/Configuration_adv.h | 4 +- .../Creality/CR-10_5S/Configuration_adv.h | 4 +- .../Creality/CR-10mini/Configuration_adv.h | 4 +- .../Creality/CR-20 Pro/Configuration_adv.h | 4 +- .../Creality/CR-20/Configuration_adv.h | 4 +- .../Creality/CR-8/Configuration_adv.h | 4 +- .../Creality/Ender-2/Configuration_adv.h | 4 +- .../Creality/Ender-3/Configuration_adv.h | 4 +- .../Creality/Ender-4/Configuration_adv.h | 4 +- .../Creality/Ender-5/Configuration_adv.h | 4 +- .../Dagoma/Disco Ultimate/Configuration_adv.h | 4 +- .../Sidewinder X1/Configuration_adv.h | 4 +- .../examples/Einstart-S/Configuration_adv.h | 4 +- .../FYSETC/AIO_II/Configuration_adv.h | 4 +- .../Cheetah 1.2/BLTouch/Configuration_adv.h | 4 +- .../Cheetah 1.2/base/Configuration_adv.h | 4 +- .../Cheetah/BLTouch/Configuration_adv.h | 4 +- .../FYSETC/Cheetah/base/Configuration_adv.h | 4 +- .../examples/FYSETC/F6_13/Configuration_adv.h | 4 +- config/examples/Felix/Configuration_adv.h | 4 +- .../FlashForge/CreatorPro/Configuration_adv.h | 4 +- .../FolgerTech/i3-2020/Configuration_adv.h | 4 +- .../Formbot/Raptor/Configuration_adv.h | 4 +- .../Formbot/T_Rex_2+/Configuration_adv.h | 4 +- .../Formbot/T_Rex_3/Configuration_adv.h | 4 +- .../examples/Geeetech/A10/Configuration_adv.h | 4 +- .../Geeetech/A10M/Configuration_adv.h | 4 +- .../Geeetech/A20M/Configuration_adv.h | 4 +- .../Geeetech/MeCreator2/Configuration_adv.h | 4 +- .../Prusa i3 Pro C/Configuration_adv.h | 4 +- .../Prusa i3 Pro W/Configuration_adv.h | 4 +- config/examples/HMS434/Configuration_adv.h | 4 +- .../Infitary/i3-M508/Configuration_adv.h | 4 +- .../examples/JGAurora/A1/Configuration_adv.h | 4 +- .../examples/JGAurora/A5/Configuration_adv.h | 4 +- .../examples/JGAurora/A5S/Configuration_adv.h | 4 +- .../examples/MakerParts/Configuration_adv.h | 4 +- .../examples/Malyan/M150/Configuration_adv.h | 4 +- .../examples/Malyan/M200/Configuration_adv.h | 4 +- .../Micromake/C1/enhanced/Configuration_adv.h | 4 +- config/examples/Mks/Robin/Configuration_adv.h | 4 +- config/examples/Mks/Sbase/Configuration_adv.h | 4 +- .../RapideLite/RL200/Configuration_adv.h | 4 +- config/examples/RigidBot/Configuration_adv.h | 4 +- config/examples/SCARA/Configuration_adv.h | 4 +- .../Black_STM32F407VET6/Configuration_adv.h | 4 +- .../examples/Sanguinololu/Configuration_adv.h | 4 +- .../Tevo/Michelangelo/Configuration_adv.h | 4 +- .../Tevo/Tarantula Pro/Configuration_adv.h | 4 +- .../Tornado/V1 (MKS Base)/Configuration_adv.h | 4 +- .../V2 (MKS GEN-L)/Configuration_adv.h | 4 +- config/examples/TheBorg/Configuration_adv.h | 4 +- config/examples/TinyBoy2/Configuration_adv.h | 4 +- .../examples/Tronxy/X3A/Configuration_adv.h | 4 +- .../Tronxy/X5S-2E/Configuration_adv.h | 4 +- .../UltiMachine/Archim1/Configuration_adv.h | 4 +- .../UltiMachine/Archim2/Configuration_adv.h | 4 +- .../examples/VORONDesign/Configuration_adv.h | 4 +- .../Velleman/K8200/Configuration_adv.h | 4 +- .../Velleman/K8400/Configuration_adv.h | 4 +- .../WASP/PowerWASP/Configuration_adv.h | 4 +- .../Wanhao/Duplicator 6/Configuration_adv.h | 4 +- .../Duplicator i3 Mini/Configuration_adv.h | 4 +- .../delta/Anycubic/Kossel/Configuration_adv.h | 4 +- .../Dreammaker/Overlord/Configuration_adv.h | 4 +- .../Overlord_Pro/Configuration_adv.h | 4 +- .../FLSUN/auto_calibrate/Configuration_adv.h | 4 +- .../delta/FLSUN/kossel/Configuration_adv.h | 4 +- .../FLSUN/kossel_mini/Configuration_adv.h | 4 +- .../Geeetech/Rostock 301/Configuration_adv.h | 4 +- .../delta/MKS/SBASE/Configuration_adv.h | 4 +- .../Tevo Little Monster/Configuration_adv.h | 4 +- .../delta/generic/Configuration_adv.h | 4 +- .../delta/kossel_mini/Configuration_adv.h | 4 +- .../delta/kossel_xl/Configuration_adv.h | 4 +- .../gCreate/gMax1.5+/Configuration_adv.h | 4 +- config/examples/makibox/Configuration_adv.h | 4 +- .../tvrrug/Round2/Configuration_adv.h | 4 +- config/examples/wt150/Configuration_adv.h | 4 +- 227 files changed, 3151 insertions(+), 3268 deletions(-) delete mode 100644 Marlin/src/core/enum.h create mode 100644 Marlin/src/core/types.h delete mode 100644 Marlin/src/libs/point_t.h diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index fa45ad078731..9a8682ca126f 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp index 89501e9bfaf6..d21570198786 100644 --- a/Marlin/src/Marlin.cpp +++ b/Marlin/src/Marlin.cpp @@ -582,10 +582,10 @@ void manage_inactivity(const bool ignore_stepper_queue/*=false*/) { } #endif // !SWITCHING_EXTRUDER - const float olde = current_position[E_AXIS]; - current_position[E_AXIS] += EXTRUDER_RUNOUT_EXTRUDE; - planner.buffer_line(current_position, MMM_TO_MMS(EXTRUDER_RUNOUT_SPEED), active_extruder); - current_position[E_AXIS] = olde; + const float olde = current_position.e; + current_position.e += EXTRUDER_RUNOUT_EXTRUDE; + line_to_current_position(MMM_TO_MMS(EXTRUDER_RUNOUT_SPEED)); + current_position.e = olde; planner.set_e_position_mm(olde); planner.synchronize(); @@ -629,7 +629,7 @@ void manage_inactivity(const bool ignore_stepper_queue/*=false*/) { if (delayed_move_time && ELAPSED(ms, delayed_move_time + 1000UL) && IsRunning()) { // travel moves have been received so enact them delayed_move_time = 0xFFFFFFFFUL; // force moves to be done - set_destination_from_current(); + destination = current_position; prepare_move_to_destination(); } #endif @@ -1002,7 +1002,7 @@ void setup() { #if HAS_M206_COMMAND // Initialize current position based on home_offset - LOOP_XYZ(a) current_position[a] += home_offset[a]; + current_position += home_offset; #endif // Vital to init stepper/planner equivalent for current_position diff --git a/Marlin/src/core/enum.h b/Marlin/src/core/enum.h deleted file mode 100644 index 15118f7b28d1..000000000000 --- a/Marlin/src/core/enum.h +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Marlin 3D Printer Firmware - * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] - * - * Based on Sprinter and grbl. - * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ -#pragma once - -/** - * Axis indices as enumerated constants - * - * - X_AXIS, Y_AXIS, and Z_AXIS should be used for axes in Cartesian space - * - A_AXIS, B_AXIS, and C_AXIS should be used for Steppers, corresponding to XYZ on Cartesians - * - X_HEAD, Y_HEAD, and Z_HEAD should be used for Steppers on Core kinematics - */ -enum AxisEnum : unsigned char { - X_AXIS = 0, - A_AXIS = 0, - Y_AXIS = 1, - B_AXIS = 1, - Z_AXIS = 2, - C_AXIS = 2, - E_AXIS = 3, - X_HEAD = 4, - Y_HEAD = 5, - Z_HEAD = 6, - E0_AXIS = 3, - E1_AXIS = 4, - E2_AXIS = 5, - E3_AXIS = 6, - E4_AXIS = 7, - E5_AXIS = 8, - ALL_AXES = 0xFE, - NO_AXIS = 0xFF -}; - -#define LOOP_S_LE_N(VAR, S, N) for (uint8_t VAR=(S); VAR<=(N); VAR++) -#define LOOP_S_L_N(VAR, S, N) for (uint8_t VAR=(S); VAR<(N); VAR++) -#define LOOP_LE_N(VAR, N) LOOP_S_LE_N(VAR, 0, N) -#define LOOP_L_N(VAR, N) LOOP_S_L_N(VAR, 0, N) - -#define LOOP_NA(VAR) LOOP_L_N(VAR, NUM_AXIS) -#define LOOP_XYZ(VAR) LOOP_S_LE_N(VAR, X_AXIS, Z_AXIS) -#define LOOP_XYZE(VAR) LOOP_S_LE_N(VAR, X_AXIS, E_AXIS) -#define LOOP_XYZE_N(VAR) LOOP_S_L_N(VAR, X_AXIS, XYZE_N) -#define LOOP_ABC(VAR) LOOP_S_LE_N(VAR, A_AXIS, C_AXIS) -#define LOOP_ABCE(VAR) LOOP_S_LE_N(VAR, A_AXIS, E_AXIS) -#define LOOP_ABCE_N(VAR) LOOP_S_L_N(VAR, A_AXIS, XYZE_N) diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h index faf3859f16f0..c13b34260021 100644 --- a/Marlin/src/core/macros.h +++ b/Marlin/src/core/macros.h @@ -26,6 +26,7 @@ #define XYZE 4 #define ABC 3 #define XYZ 3 +#define XY 2 #define _AXIS(A) (A##_AXIS) @@ -252,12 +253,6 @@ #define DECREMENT_(n) DEC_##n #define DECREMENT(n) DECREMENT_(n) -// Feedrate -typedef float feedRate_t; -#define MMM_TO_MMS(MM_M) ((MM_M)/60.0f) -#define MMS_TO_MMM(MM_S) ((MM_S)*60.0f) -#define MMS_SCALED(V) ((V) * 0.01f * feedrate_percentage) - #define NOOP (void(0)) #define CEILING(x,y) (((x) + (y) - 1) / (y)) diff --git a/Marlin/src/core/serial.cpp b/Marlin/src/core/serial.cpp index a468802ecc6d..2369c3acbf7c 100644 --- a/Marlin/src/core/serial.cpp +++ b/Marlin/src/core/serial.cpp @@ -22,7 +22,6 @@ #include "serial.h" #include "language.h" -#include "enum.h" uint8_t marlin_debug_flags = MARLIN_DEBUG_NONE; @@ -68,12 +67,8 @@ void print_bin(const uint16_t val) { } } -void print_xyz(PGM_P const prefix, PGM_P const suffix, const float &x, const float &y, const float &z) { +void print_xyz(const float &x, const float &y, const float &z, PGM_P const prefix/*=nullptr*/, PGM_P const suffix/*=nullptr*/) { serialprintPGM(prefix); SERIAL_ECHOPAIR(" " MSG_X, x, " " MSG_Y, y, " " MSG_Z, z); if (suffix) serialprintPGM(suffix); else SERIAL_EOL(); } - -void print_xyz(PGM_P const prefix, PGM_P const suffix, const float xyz[]) { - print_xyz(prefix, suffix, xyz[X_AXIS], xyz[Y_AXIS], xyz[Z_AXIS]); -} diff --git a/Marlin/src/core/serial.h b/Marlin/src/core/serial.h index f1b18c214e0a..f4c2570ca7fa 100644 --- a/Marlin/src/core/serial.h +++ b/Marlin/src/core/serial.h @@ -213,7 +213,11 @@ void serial_spaces(uint8_t count); void print_bin(const uint16_t val); -void print_xyz(PGM_P const prefix, PGM_P const suffix, const float xyz[]); -void print_xyz(PGM_P const prefix, PGM_P const suffix, const float &x, const float &y, const float &z); -#define SERIAL_POS(SUFFIX,VAR) do { print_xyz(PSTR(" " STRINGIFY(VAR) "="), PSTR(" : " SUFFIX "\n"), VAR); }while(0) -#define SERIAL_XYZ(PREFIX,V...) do { print_xyz(PSTR(PREFIX), nullptr, V); }while(0) +void print_xyz(const float &x, const float &y, const float &z, PGM_P const prefix=nullptr, PGM_P const suffix=nullptr); + +inline void print_xyz(const xyz_pos_t &xyz, PGM_P const prefix=nullptr, PGM_P const suffix=nullptr) { + print_xyz(xyz.x, xyz.y, xyz.z, prefix, suffix); +} + +#define SERIAL_POS(SUFFIX,VAR) do { print_xyz(VAR, PSTR(" " STRINGIFY(VAR) "="), PSTR(" : " SUFFIX "\n")); }while(0) +#define SERIAL_XYZ(PREFIX,V...) do { print_xyz(V, PSTR(PREFIX), nullptr); }while(0) diff --git a/Marlin/src/core/types.h b/Marlin/src/core/types.h new file mode 100644 index 000000000000..567b35c8b901 --- /dev/null +++ b/Marlin/src/core/types.h @@ -0,0 +1,486 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +#include +#include + +#include "millis_t.h" + +// +// Enumerated axis indices +// +// - X_AXIS, Y_AXIS, and Z_AXIS should be used for axes in Cartesian space +// - A_AXIS, B_AXIS, and C_AXIS should be used for Steppers, corresponding to XYZ on Cartesians +// - X_HEAD, Y_HEAD, and Z_HEAD should be used for Steppers on Core kinematics +// +enum AxisEnum : uint8_t { + X_AXIS = 0, A_AXIS = 0, + Y_AXIS = 1, B_AXIS = 1, + Z_AXIS = 2, C_AXIS = 2, + E_AXIS = 3, + X_HEAD = 4, Y_HEAD = 5, Z_HEAD = 6, + E0_AXIS = 3, + E1_AXIS = 4, + E2_AXIS = 5, + E3_AXIS = 6, + E4_AXIS = 7, + E5_AXIS = 8, + ALL_AXES = 0xFE, NO_AXIS = 0xFF +}; + +// +// Loop over XYZE axes +// + +#define LOOP_S_LE_N(VAR, S, N) for (uint8_t VAR=(S); VAR<=(N); VAR++) +#define LOOP_S_L_N(VAR, S, N) for (uint8_t VAR=(S); VAR<(N); VAR++) +#define LOOP_LE_N(VAR, N) LOOP_S_LE_N(VAR, 0, N) +#define LOOP_L_N(VAR, N) LOOP_S_L_N(VAR, 0, N) + +#define LOOP_XYZ(VAR) LOOP_S_LE_N(VAR, X_AXIS, Z_AXIS) +#define LOOP_XYZE(VAR) LOOP_S_LE_N(VAR, X_AXIS, E_AXIS) +#define LOOP_XYZE_N(VAR) LOOP_S_L_N(VAR, X_AXIS, XYZE_N) +#define LOOP_ABC(VAR) LOOP_S_LE_N(VAR, A_AXIS, C_AXIS) +#define LOOP_ABCE(VAR) LOOP_S_LE_N(VAR, A_AXIS, E_AXIS) +#define LOOP_ABCE_N(VAR) LOOP_S_L_N(VAR, A_AXIS, XYZE_N) + +// +// Conditional type assignment magic. For example... +// +// typename IF<(MYOPT==12), int, float>::type myvar; +// +template +struct IF { typedef R type; }; +template +struct IF { typedef L type; }; + +// +// feedRate_t is just a humble float +// +typedef float feedRate_t; + +// Conversion macros +#define MMM_TO_MMS(MM_M) feedRate_t(float(MM_M) / 60.0f) +#define MMS_TO_MMM(MM_S) (float(MM_S) * 60.0f) +#define MMS_SCALED(V) ((V) * 0.01f * feedrate_percentage) + +// +// Coordinates structures for XY, XYZ, XYZE... +// + +// Helpers +#define _RECIP(N) ((N) ? 1.0f / float(N) : 0.0f) +#define _ABS(N) ((N) < 0 ? -(N) : (N)) +#define _LS(N) (N = (T)(uint32_t(N) << v)) +#define _RS(N) (N = (T)(uint32_t(N) >> v)) +#define FI FORCE_INLINE + +// Forward declarations +template struct XYval; +template struct XYZval; +template struct XYZEval; + +typedef struct XYval xy_bool_t; +typedef struct XYZval xyz_bool_t; +typedef struct XYZEval xyze_bool_t; + +typedef struct XYval xy_char_t; +typedef struct XYZval xyz_char_t; +typedef struct XYZEval xyze_char_t; + +typedef struct XYval xy_uchar_t; +typedef struct XYZval xyz_uchar_t; +typedef struct XYZEval xyze_uchar_t; + +typedef struct XYval xy_int8_t; +typedef struct XYZval xyz_int8_t; +typedef struct XYZEval xyze_int8_t; + +typedef struct XYval xy_uint8_t; +typedef struct XYZval xyz_uint8_t; +typedef struct XYZEval xyze_uint8_t; + +typedef struct XYval xy_int_t; +typedef struct XYZval xyz_int_t; +typedef struct XYZEval xyze_int_t; + +typedef struct XYval xy_uint_t; +typedef struct XYZval xyz_uint_t; +typedef struct XYZEval xyze_uint_t; + +typedef struct XYval xy_long_t; +typedef struct XYZval xyz_long_t; +typedef struct XYZEval xyze_long_t; + +typedef struct XYval xy_ulong_t; +typedef struct XYZval xyz_ulong_t; +typedef struct XYZEval xyze_ulong_t; + +typedef struct XYZval xyz_vlong_t; +typedef struct XYZEval xyze_vlong_t; + +typedef struct XYval xy_float_t; +typedef struct XYZval xyz_float_t; +typedef struct XYZEval xyze_float_t; + +typedef struct XYval xy_feedrate_t; +typedef struct XYZval xyz_feedrate_t; +typedef struct XYZEval xyze_feedrate_t; + +typedef xy_uint8_t xy_byte_t; +typedef xyz_uint8_t xyz_byte_t; +typedef xyze_uint8_t xyze_byte_t; + +typedef xyz_long_t abc_long_t; +typedef xyze_long_t abce_long_t; +typedef xyz_ulong_t abc_ulong_t; +typedef xyze_ulong_t abce_ulong_t; + +typedef xy_float_t xy_pos_t; +typedef xyz_float_t xyz_pos_t; +typedef xyze_float_t xyze_pos_t; + +typedef xy_float_t ab_float_t; +typedef xyz_float_t abc_float_t; +typedef xyze_float_t abce_float_t; + +typedef ab_float_t ab_pos_t; +typedef abc_float_t abc_pos_t; +typedef abce_float_t abce_pos_t; + +// External conversion methods +void toLogical(xy_pos_t &raw); +void toLogical(xyz_pos_t &raw); +void toLogical(xyze_pos_t &raw); +void toNative(xy_pos_t &raw); +void toNative(xyz_pos_t &raw); +void toNative(xyze_pos_t &raw); + +// +// XY coordinates, counters, etc. +// +template +struct XYval { + union { + struct { T x, y; }; + struct { T a, b; }; + T pos[2]; + }; + FI void set(const T px) { x = px; } + FI void set(const T px, const T py) { x = px; y = py; } + FI void reset() { x = y = 0; } + FI T magnitude() const { return (T)sqrtf(x*x + y*y); } + FI operator T* () { return pos; } + FI operator bool() { return x || y; } + FI XYval copy() const { return *this; } + FI XYval ABS() const { return { T(_ABS(x)), T(_ABS(y)) }; } + FI XYval asInt() { return { int16_t(x), int16_t(y) }; } + FI XYval asInt() const { return { int16_t(x), int16_t(y) }; } + FI XYval asLong() { return { int32_t(x), int32_t(y) }; } + FI XYval asLong() const { return { int32_t(x), int32_t(y) }; } + FI XYval asFloat() { return { float(x), float(y) }; } + FI XYval asFloat() const { return { float(x), float(y) }; } + FI XYval reciprocal() const { return { _RECIP(x), _RECIP(y) }; } + FI XYval asLogical() const { XYval o = asFloat(); toLogical(o); return o; } + FI XYval asNative() const { XYval o = asFloat(); toNative(o); return o; } + FI operator XYZval() { return { x, y }; } + FI operator XYZval() const { return { x, y }; } + FI operator XYZEval() { return { x, y }; } + FI operator XYZEval() const { return { x, y }; } + FI T& operator[](const int i) { return pos[i]; } + FI const T& operator[](const int i) const { return pos[i]; } + FI XYval& operator= (const T v) { set(v, v ); return *this; } + FI XYval& operator= (const XYZval &rs) { set(rs.x, rs.y); return *this; } + FI XYval& operator= (const XYZEval &rs) { set(rs.x, rs.y); return *this; } + FI XYval operator+ (const XYval &rs) const { XYval ls = *this; ls.x += rs.x; ls.y += rs.y; return ls; } + FI XYval operator+ (const XYval &rs) { XYval ls = *this; ls.x += rs.x; ls.y += rs.y; return ls; } + FI XYval operator- (const XYval &rs) const { XYval ls = *this; ls.x -= rs.x; ls.y -= rs.y; return ls; } + FI XYval operator- (const XYval &rs) { XYval ls = *this; ls.x -= rs.x; ls.y -= rs.y; return ls; } + FI XYval operator* (const XYval &rs) const { XYval ls = *this; ls.x *= rs.x; ls.y *= rs.y; return ls; } + FI XYval operator* (const XYval &rs) { XYval ls = *this; ls.x *= rs.x; ls.y *= rs.y; return ls; } + FI XYval operator/ (const XYval &rs) const { XYval ls = *this; ls.x /= rs.x; ls.y /= rs.y; return ls; } + FI XYval operator/ (const XYval &rs) { XYval ls = *this; ls.x /= rs.x; ls.y /= rs.y; return ls; } + FI XYval operator+ (const XYZval &rs) const { XYval ls = *this; ls.x += rs.x; ls.y += rs.y; return ls; } + FI XYval operator+ (const XYZval &rs) { XYval ls = *this; ls.x += rs.x; ls.y += rs.y; return ls; } + FI XYval operator- (const XYZval &rs) const { XYval ls = *this; ls.x -= rs.x; ls.y -= rs.y; return ls; } + FI XYval operator- (const XYZval &rs) { XYval ls = *this; ls.x -= rs.x; ls.y -= rs.y; return ls; } + FI XYval operator* (const XYZval &rs) const { XYval ls = *this; ls.x *= rs.x; ls.y *= rs.y; return ls; } + FI XYval operator* (const XYZval &rs) { XYval ls = *this; ls.x *= rs.x; ls.y *= rs.y; return ls; } + FI XYval operator/ (const XYZval &rs) const { XYval ls = *this; ls.x /= rs.x; ls.y /= rs.y; return ls; } + FI XYval operator/ (const XYZval &rs) { XYval ls = *this; ls.x /= rs.x; ls.y /= rs.y; return ls; } + FI XYval operator+ (const XYZEval &rs) const { XYval ls = *this; ls.x += rs.x; ls.y += rs.y; return ls; } + FI XYval operator+ (const XYZEval &rs) { XYval ls = *this; ls.x += rs.x; ls.y += rs.y; return ls; } + FI XYval operator- (const XYZEval &rs) const { XYval ls = *this; ls.x -= rs.x; ls.y -= rs.y; return ls; } + FI XYval operator- (const XYZEval &rs) { XYval ls = *this; ls.x -= rs.x; ls.y -= rs.y; return ls; } + FI XYval operator* (const XYZEval &rs) const { XYval ls = *this; ls.x *= rs.x; ls.y *= rs.y; return ls; } + FI XYval operator* (const XYZEval &rs) { XYval ls = *this; ls.x *= rs.x; ls.y *= rs.y; return ls; } + FI XYval operator/ (const XYZEval &rs) const { XYval ls = *this; ls.x /= rs.x; ls.y /= rs.y; return ls; } + FI XYval operator/ (const XYZEval &rs) { XYval ls = *this; ls.x /= rs.x; ls.y /= rs.y; return ls; } + FI XYval operator* (const float &v) const { XYval ls = *this; ls.x *= v; ls.y *= v; return ls; } + FI XYval operator* (const float &v) { XYval ls = *this; ls.x *= v; ls.y *= v; return ls; } + FI XYval operator* (const int &v) const { XYval ls = *this; ls.x *= v; ls.y *= v; return ls; } + FI XYval operator* (const int &v) { XYval ls = *this; ls.x *= v; ls.y *= v; return ls; } + FI XYval operator/ (const float &v) const { XYval ls = *this; ls.x /= v; ls.y /= v; return ls; } + FI XYval operator/ (const float &v) { XYval ls = *this; ls.x /= v; ls.y /= v; return ls; } + FI XYval operator/ (const int &v) const { XYval ls = *this; ls.x /= v; ls.y /= v; return ls; } + FI XYval operator/ (const int &v) { XYval ls = *this; ls.x /= v; ls.y /= v; return ls; } + FI XYval operator>>(const int &v) const { XYval ls = *this; _RS(ls.x); _RS(ls.y); return ls; } + FI XYval operator>>(const int &v) { XYval ls = *this; _RS(ls.x); _RS(ls.y); return ls; } + FI XYval operator<<(const int &v) const { XYval ls = *this; _LS(ls.x); _LS(ls.y); return ls; } + FI XYval operator<<(const int &v) { XYval ls = *this; _LS(ls.x); _LS(ls.y); return ls; } + FI XYval& operator+=(const XYval &rs) { x += rs.x; y += rs.y; return *this; } + FI XYval& operator-=(const XYval &rs) { x -= rs.x; y -= rs.y; return *this; } + FI XYval& operator*=(const XYval &rs) { x *= rs.x; y *= rs.y; return *this; } + FI XYval& operator+=(const XYZval &rs) { x += rs.x; y += rs.y; return *this; } + FI XYval& operator-=(const XYZval &rs) { x -= rs.x; y -= rs.y; return *this; } + FI XYval& operator*=(const XYZval &rs) { x *= rs.x; y *= rs.y; return *this; } + FI XYval& operator+=(const XYZEval &rs) { x += rs.x; y += rs.y; return *this; } + FI XYval& operator-=(const XYZEval &rs) { x -= rs.x; y -= rs.y; return *this; } + FI XYval& operator*=(const XYZEval &rs) { x *= rs.x; y *= rs.y; return *this; } + FI XYval& operator*=(const float &v) { x *= v; y *= v; return *this; } + FI XYval& operator*=(const int &v) { x *= v; y *= v; return *this; } + FI XYval& operator>>=(const int &v) { _RS(x); _RS(y); return *this; } + FI XYval& operator<<=(const int &v) { _LS(x); _LS(y); return *this; } + FI bool operator==(const XYval &rs) { return x == rs.x && y == rs.y; } + FI bool operator==(const XYZval &rs) { return x == rs.x && y == rs.y; } + FI bool operator==(const XYZEval &rs) { return x == rs.x && y == rs.y; } + FI bool operator==(const XYval &rs) const { return x == rs.x && y == rs.y; } + FI bool operator==(const XYZval &rs) const { return x == rs.x && y == rs.y; } + FI bool operator==(const XYZEval &rs) const { return x == rs.x && y == rs.y; } + FI bool operator!=(const XYval &rs) { return !operator==(rs); } + FI bool operator!=(const XYZval &rs) { return !operator==(rs); } + FI bool operator!=(const XYZEval &rs) { return !operator==(rs); } + FI bool operator!=(const XYval &rs) const { return !operator==(rs); } + FI bool operator!=(const XYZval &rs) const { return !operator==(rs); } + FI bool operator!=(const XYZEval &rs) const { return !operator==(rs); } + FI XYval operator-() { XYval o = *this; o.x = -x; o.y = -y; return o; } + FI const XYval operator-() const { XYval o = *this; o.x = -x; o.y = -y; return o; } +}; + +// +// XYZ coordinates, counters, etc. +// +template +struct XYZval { + union { + struct { T x, y, z; }; + struct { T a, b, c; }; + T pos[3]; + }; + FI void set(const T px) { x = px; } + FI void set(const T px, const T py) { x = px; y = py; } + FI void set(const T px, const T py, const T pz) { x = px; y = py; z = pz; } + FI void set(const XYval pxy, const T pz) { x = pxy.x; y = pxy.y; z = pz; } + FI void reset() { x = y = z = 0; } + FI T magnitude() const { return (T)sqrtf(x*x + y*y + z*z); } + FI operator T* () { return pos; } + FI operator bool() { return z || x || y; } + FI XYZval copy() const { XYZval o = *this; return o; } + FI XYZval ABS() const { return { T(_ABS(x)), T(_ABS(y)), T(_ABS(z)) }; } + FI XYZval asInt() { return { int16_t(x), int16_t(y), int16_t(z) }; } + FI XYZval asInt() const { return { int16_t(x), int16_t(y), int16_t(z) }; } + FI XYZval asLong() { return { int32_t(x), int32_t(y), int32_t(z) }; } + FI XYZval asLong() const { return { int32_t(x), int32_t(y), int32_t(z) }; } + FI XYZval asFloat() { return { float(x), float(y), float(z) }; } + FI XYZval asFloat() const { return { float(x), float(y), float(z) }; } + FI XYZval reciprocal() const { return { _RECIP(x), _RECIP(y), _RECIP(z) }; } + FI XYZval asLogical() const { XYZval o = asFloat(); toLogical(o); return o; } + FI XYZval asNative() const { XYZval o = asFloat(); toNative(o); return o; } + FI operator XYval&() { return *(XYval*)this; } + FI operator const XYval&() const { return *(const XYval*)this; } + FI operator XYZEval() const { return { x, y, z }; } + FI T& operator[](const int i) { return pos[i]; } + FI const T& operator[](const int i) const { return pos[i]; } + FI XYZval& operator= (const T v) { set(v, v, v ); return *this; } + FI XYZval& operator= (const XYval &rs) { set(rs.x, rs.y ); return *this; } + FI XYZval& operator= (const XYZEval &rs) { set(rs.x, rs.y, rs.z); return *this; } + FI XYZval operator+ (const XYval &rs) const { XYZval ls = *this; ls.x += rs.x; ls.y += rs.y; return ls; } + FI XYZval operator+ (const XYval &rs) { XYZval ls = *this; ls.x += rs.x; ls.y += rs.y; return ls; } + FI XYZval operator- (const XYval &rs) const { XYZval ls = *this; ls.x -= rs.x; ls.y -= rs.y; return ls; } + FI XYZval operator- (const XYval &rs) { XYZval ls = *this; ls.x -= rs.x; ls.y -= rs.y; return ls; } + FI XYZval operator* (const XYval &rs) const { XYZval ls = *this; ls.x *= rs.x; ls.y *= rs.y; return ls; } + FI XYZval operator* (const XYval &rs) { XYZval ls = *this; ls.x *= rs.x; ls.y *= rs.y; return ls; } + FI XYZval operator/ (const XYval &rs) const { XYZval ls = *this; ls.x /= rs.x; ls.y /= rs.y; return ls; } + FI XYZval operator/ (const XYval &rs) { XYZval ls = *this; ls.x /= rs.x; ls.y /= rs.y; return ls; } + FI XYZval operator+ (const XYZval &rs) const { XYZval ls = *this; ls.x += rs.x; ls.y += rs.y; ls.z += rs.z; return ls; } + FI XYZval operator+ (const XYZval &rs) { XYZval ls = *this; ls.x += rs.x; ls.y += rs.y; ls.z += rs.z; return ls; } + FI XYZval operator- (const XYZval &rs) const { XYZval ls = *this; ls.x -= rs.x; ls.y -= rs.y; ls.z -= rs.z; return ls; } + FI XYZval operator- (const XYZval &rs) { XYZval ls = *this; ls.x -= rs.x; ls.y -= rs.y; ls.z -= rs.z; return ls; } + FI XYZval operator* (const XYZval &rs) const { XYZval ls = *this; ls.x *= rs.x; ls.y *= rs.y; ls.z *= rs.z; return ls; } + FI XYZval operator* (const XYZval &rs) { XYZval ls = *this; ls.x *= rs.x; ls.y *= rs.y; ls.z *= rs.z; return ls; } + FI XYZval operator/ (const XYZval &rs) const { XYZval ls = *this; ls.x /= rs.x; ls.y /= rs.y; ls.z /= rs.z; return ls; } + FI XYZval operator/ (const XYZval &rs) { XYZval ls = *this; ls.x /= rs.x; ls.y /= rs.y; ls.z /= rs.z; return ls; } + FI XYZval operator+ (const XYZEval &rs) const { XYZval ls = *this; ls.x += rs.x; ls.y += rs.y; ls.z += rs.z; return ls; } + FI XYZval operator+ (const XYZEval &rs) { XYZval ls = *this; ls.x += rs.x; ls.y += rs.y; ls.z += rs.z; return ls; } + FI XYZval operator- (const XYZEval &rs) const { XYZval ls = *this; ls.x -= rs.x; ls.y -= rs.y; ls.z -= rs.z; return ls; } + FI XYZval operator- (const XYZEval &rs) { XYZval ls = *this; ls.x -= rs.x; ls.y -= rs.y; ls.z -= rs.z; return ls; } + FI XYZval operator* (const XYZEval &rs) const { XYZval ls = *this; ls.x *= rs.x; ls.y *= rs.y; ls.z *= rs.z; return ls; } + FI XYZval operator* (const XYZEval &rs) { XYZval ls = *this; ls.x *= rs.x; ls.y *= rs.y; ls.z *= rs.z; return ls; } + FI XYZval operator/ (const XYZEval &rs) const { XYZval ls = *this; ls.x /= rs.x; ls.y /= rs.y; ls.z /= rs.z; return ls; } + FI XYZval operator/ (const XYZEval &rs) { XYZval ls = *this; ls.x /= rs.x; ls.y /= rs.y; ls.z /= rs.z; return ls; } + FI XYZval operator* (const float &v) const { XYZval ls = *this; ls.x *= v; ls.y *= v; ls.z *= z; return ls; } + FI XYZval operator* (const float &v) { XYZval ls = *this; ls.x *= v; ls.y *= v; ls.z *= z; return ls; } + FI XYZval operator* (const int &v) const { XYZval ls = *this; ls.x *= v; ls.y *= v; ls.z *= z; return ls; } + FI XYZval operator* (const int &v) { XYZval ls = *this; ls.x *= v; ls.y *= v; ls.z *= z; return ls; } + FI XYZval operator/ (const float &v) const { XYZval ls = *this; ls.x /= v; ls.y /= v; ls.z /= z; return ls; } + FI XYZval operator/ (const float &v) { XYZval ls = *this; ls.x /= v; ls.y /= v; ls.z /= z; return ls; } + FI XYZval operator/ (const int &v) const { XYZval ls = *this; ls.x /= v; ls.y /= v; ls.z /= z; return ls; } + FI XYZval operator/ (const int &v) { XYZval ls = *this; ls.x /= v; ls.y /= v; ls.z /= z; return ls; } + FI XYZval operator>>(const int &v) const { XYZval ls = *this; _RS(ls.x); _RS(ls.y); _RS(ls.z); return ls; } + FI XYZval operator>>(const int &v) { XYZval ls = *this; _RS(ls.x); _RS(ls.y); _RS(ls.z); return ls; } + FI XYZval operator<<(const int &v) const { XYZval ls = *this; _LS(ls.x); _LS(ls.y); _LS(ls.z); return ls; } + FI XYZval operator<<(const int &v) { XYZval ls = *this; _LS(ls.x); _LS(ls.y); _LS(ls.z); return ls; } + FI XYZval& operator+=(const XYval &rs) { x += rs.x; y += rs.y; return *this; } + FI XYZval& operator-=(const XYval &rs) { x -= rs.x; y -= rs.y; return *this; } + FI XYZval& operator*=(const XYval &rs) { x *= rs.x; y *= rs.y; return *this; } + FI XYZval& operator/=(const XYval &rs) { x /= rs.x; y /= rs.y; return *this; } + FI XYZval& operator+=(const XYZval &rs) { x += rs.x; y += rs.y; z += rs.z; return *this; } + FI XYZval& operator-=(const XYZval &rs) { x -= rs.x; y -= rs.y; z -= rs.z; return *this; } + FI XYZval& operator*=(const XYZval &rs) { x *= rs.x; y *= rs.y; z *= rs.z; return *this; } + FI XYZval& operator/=(const XYZval &rs) { x /= rs.x; y /= rs.y; z /= rs.z; return *this; } + FI XYZval& operator+=(const XYZEval &rs) { x += rs.x; y += rs.y; z += rs.z; return *this; } + FI XYZval& operator-=(const XYZEval &rs) { x -= rs.x; y -= rs.y; z -= rs.z; return *this; } + FI XYZval& operator*=(const XYZEval &rs) { x *= rs.x; y *= rs.y; z *= rs.z; return *this; } + FI XYZval& operator/=(const XYZEval &rs) { x /= rs.x; y /= rs.y; z /= rs.z; return *this; } + FI XYZval& operator*=(const float &v) { x *= v; y *= v; z *= v; return *this; } + FI XYZval& operator*=(const int &v) { x *= v; y *= v; z *= v; return *this; } + FI XYZval& operator>>=(const int &v) { _RS(x); _RS(y); _RS(z); return *this; } + FI XYZval& operator<<=(const int &v) { _LS(x); _LS(y); _LS(z); return *this; } + FI bool operator==(const XYZEval &rs) { return x == rs.x && y == rs.y && z == rs.z; } + FI bool operator!=(const XYZEval &rs) { return !operator==(rs); } + FI bool operator==(const XYZEval &rs) const { return x == rs.x && y == rs.y && z == rs.z; } + FI bool operator!=(const XYZEval &rs) const { return !operator==(rs); } + FI XYZval operator-() { XYZval o = *this; o.x = -x; o.y = -y; o.z = -z; return o; } + FI const XYZval operator-() const { XYZval o = *this; o.x = -x; o.y = -y; o.z = -z; return o; } +}; + +// +// XYZE coordinates, counters, etc. +// +template +struct XYZEval { + union { + struct{ T x, y, z, e; }; + struct{ T a, b, c; }; + T pos[4]; + }; + FI void reset() { x = y = z = e = 0; } + FI T magnitude() const { return (T)sqrtf(x*x + y*y + z*z + e*e); } + FI operator T* () { return pos; } + FI operator bool() { return e || z || x || y; } + FI void set(const T px) { x = px; } + FI void set(const T px, const T py) { x = px; y = py; } + FI void set(const T px, const T py, const T pz) { x = px; y = py; z = pz; } + FI void set(const T px, const T py, const T pz, const T pe) { x = px; y = py; z = pz; e = pe; } + FI void set(const XYval pxy) { x = pxy.x; y = pxy.y; } + FI void set(const XYval pxy, const T pz) { x = pxy.x; y = pxy.y; z = pz; } + FI void set(const XYZval pxyz) { x = pxyz.x; y = pxyz.y; z = pxyz.z; } + FI void set(const XYval pxy, const T pz, const T pe) { x = pxy.x; y = pxy.y; z = pz; e = pe; } + FI void set(const XYval pxy, const XYval pze) { x = pxy.x; y = pxy.y; z = pze.z; e = pze.e; } + FI void set(const XYZval pxyz, const T pe) { x = pxyz.x; y = pxyz.y; z = pxyz.z; e = pe; } + FI XYZEval copy() const { return *this; } + FI XYZEval ABS() const { return { T(_ABS(x)), T(_ABS(y)), T(_ABS(z)), T(_ABS(e)) }; } + FI XYZEval asInt() { return { int16_t(x), int16_t(y), int16_t(z), int16_t(e) }; } + FI XYZEval asInt() const { return { int16_t(x), int16_t(y), int16_t(z), int16_t(e) }; } + FI XYZEval asLong() const { return { int32_t(x), int32_t(y), int32_t(z), int32_t(e) }; } + FI XYZEval asLong() { return { int32_t(x), int32_t(y), int32_t(z), int32_t(e) }; } + FI XYZEval asFloat() { return { float(x), float(y), float(z), float(e) }; } + FI XYZEval asFloat() const { return { float(x), float(y), float(z), float(e) }; } + FI XYZEval reciprocal() const { return { _RECIP(x), _RECIP(y), _RECIP(z), _RECIP(e) }; } + FI XYZEval asLogical() const { XYZEval o = asFloat(); toLogical(o); return o; } + FI XYZEval asNative() const { XYZEval o = asFloat(); toNative(o); return o; } + FI operator XYval&() { return *(XYval*)this; } + FI operator const XYval&() const { return *(const XYval*)this; } + FI operator XYZval&() { return *(XYZval*)this; } + FI operator const XYZval&() const { return *(const XYZval*)this; } + FI T& operator[](const int i) { return pos[i]; } + FI const T& operator[](const int i) const { return pos[i]; } + FI XYZEval& operator= (const T v) { set(v, v, v, v); return *this; } + FI XYZEval& operator= (const XYval &rs) { set(rs.x, rs.y); return *this; } + FI XYZEval& operator= (const XYZval &rs) { set(rs.x, rs.y, rs.z); return *this; } + FI XYZEval operator+ (const XYval &rs) const { XYZEval ls = *this; ls.x += rs.x; ls.y += rs.y; return ls; } + FI XYZEval operator+ (const XYval &rs) { XYZEval ls = *this; ls.x += rs.x; ls.y += rs.y; return ls; } + FI XYZEval operator- (const XYval &rs) const { XYZEval ls = *this; ls.x -= rs.x; ls.y -= rs.y; return ls; } + FI XYZEval operator- (const XYval &rs) { XYZEval ls = *this; ls.x -= rs.x; ls.y -= rs.y; return ls; } + FI XYZEval operator* (const XYval &rs) const { XYZEval ls = *this; ls.x *= rs.x; ls.y *= rs.y; return ls; } + FI XYZEval operator* (const XYval &rs) { XYZEval ls = *this; ls.x *= rs.x; ls.y *= rs.y; return ls; } + FI XYZEval operator/ (const XYval &rs) const { XYZEval ls = *this; ls.x /= rs.x; ls.y /= rs.y; return ls; } + FI XYZEval operator/ (const XYval &rs) { XYZEval ls = *this; ls.x /= rs.x; ls.y /= rs.y; return ls; } + FI XYZEval operator+ (const XYZval &rs) const { XYZEval ls = *this; ls.x += rs.x; ls.y += rs.y; ls.z += rs.z; return ls; } + FI XYZEval operator+ (const XYZval &rs) { XYZEval ls = *this; ls.x += rs.x; ls.y += rs.y; ls.z += rs.z; return ls; } + FI XYZEval operator- (const XYZval &rs) const { XYZEval ls = *this; ls.x -= rs.x; ls.y -= rs.y; ls.z -= rs.z; return ls; } + FI XYZEval operator- (const XYZval &rs) { XYZEval ls = *this; ls.x -= rs.x; ls.y -= rs.y; ls.z -= rs.z; return ls; } + FI XYZEval operator* (const XYZval &rs) const { XYZEval ls = *this; ls.x *= rs.x; ls.y *= rs.y; ls.z *= rs.z; return ls; } + FI XYZEval operator* (const XYZval &rs) { XYZEval ls = *this; ls.x *= rs.x; ls.y *= rs.y; ls.z *= rs.z; return ls; } + FI XYZEval operator/ (const XYZval &rs) const { XYZEval ls = *this; ls.x /= rs.x; ls.y /= rs.y; ls.z /= rs.z; return ls; } + FI XYZEval operator/ (const XYZval &rs) { XYZEval ls = *this; ls.x /= rs.x; ls.y /= rs.y; ls.z /= rs.z; return ls; } + FI XYZEval operator+ (const XYZEval &rs) const { XYZEval ls = *this; ls.x += rs.x; ls.y += rs.y; ls.z += rs.z; ls.e += rs.e; return ls; } + FI XYZEval operator+ (const XYZEval &rs) { XYZEval ls = *this; ls.x += rs.x; ls.y += rs.y; ls.z += rs.z; ls.e += rs.e; return ls; } + FI XYZEval operator- (const XYZEval &rs) const { XYZEval ls = *this; ls.x -= rs.x; ls.y -= rs.y; ls.z -= rs.z; ls.e -= rs.e; return ls; } + FI XYZEval operator- (const XYZEval &rs) { XYZEval ls = *this; ls.x -= rs.x; ls.y -= rs.y; ls.z -= rs.z; ls.e -= rs.e; return ls; } + FI XYZEval operator* (const XYZEval &rs) const { XYZEval ls = *this; ls.x *= rs.x; ls.y *= rs.y; ls.z *= rs.z; ls.e *= rs.e; return ls; } + FI XYZEval operator* (const XYZEval &rs) { XYZEval ls = *this; ls.x *= rs.x; ls.y *= rs.y; ls.z *= rs.z; ls.e *= rs.e; return ls; } + FI XYZEval operator/ (const XYZEval &rs) const { XYZEval ls = *this; ls.x /= rs.x; ls.y /= rs.y; ls.z /= rs.z; ls.e /= rs.e; return ls; } + FI XYZEval operator/ (const XYZEval &rs) { XYZEval ls = *this; ls.x /= rs.x; ls.y /= rs.y; ls.z /= rs.z; ls.e /= rs.e; return ls; } + FI XYZEval operator* (const float &v) const { XYZEval ls = *this; ls.x *= v; ls.y *= v; ls.z *= v; ls.e *= v; return ls; } + FI XYZEval operator* (const float &v) { XYZEval ls = *this; ls.x *= v; ls.y *= v; ls.z *= v; ls.e *= v; return ls; } + FI XYZEval operator* (const int &v) const { XYZEval ls = *this; ls.x *= v; ls.y *= v; ls.z *= v; ls.e *= v; return ls; } + FI XYZEval operator* (const int &v) { XYZEval ls = *this; ls.x *= v; ls.y *= v; ls.z *= v; ls.e *= v; return ls; } + FI XYZEval operator/ (const float &v) const { XYZEval ls = *this; ls.x /= v; ls.y /= v; ls.z /= v; ls.e /= v; return ls; } + FI XYZEval operator/ (const float &v) { XYZEval ls = *this; ls.x /= v; ls.y /= v; ls.z /= v; ls.e /= v; return ls; } + FI XYZEval operator/ (const int &v) const { XYZEval ls = *this; ls.x /= v; ls.y /= v; ls.z /= v; ls.e /= v; return ls; } + FI XYZEval operator/ (const int &v) { XYZEval ls = *this; ls.x /= v; ls.y /= v; ls.z /= v; ls.e /= v; return ls; } + FI XYZEval operator>>(const int &v) const { XYZEval ls = *this; _RS(ls.x); _RS(ls.y); _RS(ls.z); _RS(ls.e); return ls; } + FI XYZEval operator>>(const int &v) { XYZEval ls = *this; _RS(ls.x); _RS(ls.y); _RS(ls.z); _RS(ls.e); return ls; } + FI XYZEval operator<<(const int &v) const { XYZEval ls = *this; _LS(ls.x); _LS(ls.y); _LS(ls.z); _LS(ls.e); return ls; } + FI XYZEval operator<<(const int &v) { XYZEval ls = *this; _LS(ls.x); _LS(ls.y); _LS(ls.z); _LS(ls.e); return ls; } + FI XYZEval& operator+=(const XYval &rs) { x += rs.x; y += rs.y; return *this; } + FI XYZEval& operator-=(const XYval &rs) { x -= rs.x; y -= rs.y; return *this; } + FI XYZEval& operator*=(const XYval &rs) { x *= rs.x; y *= rs.y; return *this; } + FI XYZEval& operator/=(const XYval &rs) { x /= rs.x; y /= rs.y; return *this; } + FI XYZEval& operator+=(const XYZval &rs) { x += rs.x; y += rs.y; z += rs.z; return *this; } + FI XYZEval& operator-=(const XYZval &rs) { x -= rs.x; y -= rs.y; z -= rs.z; return *this; } + FI XYZEval& operator*=(const XYZval &rs) { x *= rs.x; y *= rs.y; z *= rs.z; return *this; } + FI XYZEval& operator/=(const XYZval &rs) { x /= rs.x; y /= rs.y; z /= rs.z; return *this; } + FI XYZEval& operator+=(const XYZEval &rs) { x += rs.x; y += rs.y; z += rs.z; e += rs.e; return *this; } + FI XYZEval& operator-=(const XYZEval &rs) { x -= rs.x; y -= rs.y; z -= rs.z; e -= rs.e; return *this; } + FI XYZEval& operator*=(const XYZEval &rs) { x *= rs.x; y *= rs.y; z *= rs.z; e *= rs.e; return *this; } + FI XYZEval& operator/=(const XYZEval &rs) { x /= rs.x; y /= rs.y; z /= rs.z; e /= rs.e; return *this; } + FI XYZEval& operator*=(const T &v) { x *= v; y *= v; z *= v; e *= v; return *this; } + FI XYZEval& operator>>=(const int &v) { _RS(x); _RS(y); _RS(z); _RS(e); return *this; } + FI XYZEval& operator<<=(const int &v) { _LS(x); _LS(y); _LS(z); _LS(e); return *this; } + FI bool operator==(const XYZval &rs) { return x == rs.x && y == rs.y && z == rs.z; } + FI bool operator!=(const XYZval &rs) { return !operator==(rs); } + FI bool operator==(const XYZval &rs) const { return x == rs.x && y == rs.y && z == rs.z; } + FI bool operator!=(const XYZval &rs) const { return !operator==(rs); } + FI XYZEval operator-() { return { -x, -y, -z, -e }; } + FI const XYZEval operator-() const { return { -x, -y, -z, -e }; } +}; + +#undef _RECIP +#undef _ABS +#undef _LS +#undef _RS +#undef FI + +const xyze_char_t axis_codes { 'X', 'Y', 'Z', 'E' }; diff --git a/Marlin/src/core/utility.cpp b/Marlin/src/core/utility.cpp index 5ebd84afd138..ca8cd67ccf9a 100644 --- a/Marlin/src/core/utility.cpp +++ b/Marlin/src/core/utility.cpp @@ -79,36 +79,36 @@ void safe_delay(millis_t ms) { ); #if HAS_BED_PROBE - SERIAL_ECHOPAIR("Probe Offset X:", probe_offset[X_AXIS], " Y:", probe_offset[Y_AXIS], " Z:", probe_offset[Z_AXIS]); - if (probe_offset[X_AXIS] > 0) + SERIAL_ECHOPAIR("Probe Offset X", probe_offset.x, " Y", probe_offset.y, " Z", probe_offset.z); + if (probe_offset.x > 0) SERIAL_ECHOPGM(" (Right"); - else if (probe_offset[X_AXIS] < 0) + else if (probe_offset.x < 0) SERIAL_ECHOPGM(" (Left"); - else if (probe_offset[Y_AXIS] != 0) + else if (probe_offset.y != 0) SERIAL_ECHOPGM(" (Middle"); else SERIAL_ECHOPGM(" (Aligned With"); - if (probe_offset[Y_AXIS] > 0) { + if (probe_offset.y > 0) { #if IS_SCARA SERIAL_ECHOPGM("-Distal"); #else SERIAL_ECHOPGM("-Back"); #endif } - else if (probe_offset[Y_AXIS] < 0) { + else if (probe_offset.y < 0) { #if IS_SCARA SERIAL_ECHOPGM("-Proximal"); #else SERIAL_ECHOPGM("-Front"); #endif } - else if (probe_offset[X_AXIS] != 0) + else if (probe_offset.x != 0) SERIAL_ECHOPGM("-Center"); - if (probe_offset[Z_AXIS] < 0) + if (probe_offset.z < 0) SERIAL_ECHOPGM(" & Below"); - else if (probe_offset[Z_AXIS] > 0) + else if (probe_offset.z > 0) SERIAL_ECHOPGM(" & Above"); else SERIAL_ECHOPGM(" & Same Z as"); @@ -134,24 +134,18 @@ void safe_delay(millis_t ms) { SERIAL_ECHOLNPAIR("Z Fade: ", planner.z_fade_height); #endif #if ABL_PLANAR - const float diff[XYZ] = { - planner.get_axis_position_mm(X_AXIS) - current_position[X_AXIS], - planner.get_axis_position_mm(Y_AXIS) - current_position[Y_AXIS], - planner.get_axis_position_mm(Z_AXIS) - current_position[Z_AXIS] - }; SERIAL_ECHOPGM("ABL Adjustment X"); - if (diff[X_AXIS] > 0) SERIAL_CHAR('+'); - SERIAL_ECHO(diff[X_AXIS]); - SERIAL_ECHOPGM(" Y"); - if (diff[Y_AXIS] > 0) SERIAL_CHAR('+'); - SERIAL_ECHO(diff[Y_AXIS]); - SERIAL_ECHOPGM(" Z"); - if (diff[Z_AXIS] > 0) SERIAL_CHAR('+'); - SERIAL_ECHO(diff[Z_AXIS]); + LOOP_XYZ(a) { + float v = planner.get_axis_position_mm(AxisEnum(a)) - current_position[a]; + SERIAL_CHAR(' '); + SERIAL_CHAR('X' + char(a)); + if (v > 0) SERIAL_CHAR('+'); + SERIAL_ECHO(v); + } #else #if ENABLED(AUTO_BED_LEVELING_UBL) SERIAL_ECHOPGM("UBL Adjustment Z"); - const float rz = ubl.get_z_correction(current_position[X_AXIS], current_position[Y_AXIS]); + const float rz = ubl.get_z_correction(current_position); #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) SERIAL_ECHOPGM("ABL Adjustment Z"); const float rz = bilinear_z_offset(current_position); @@ -159,7 +153,7 @@ void safe_delay(millis_t ms) { SERIAL_ECHO(ftostr43sign(rz, '+')); #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) if (planner.z_fade_height) { - SERIAL_ECHOPAIR(" (", ftostr43sign(rz * planner.fade_scaling_factor_for_z(current_position[Z_AXIS]), '+')); + SERIAL_ECHOPAIR(" (", ftostr43sign(rz * planner.fade_scaling_factor_for_z(current_position.z), '+')); SERIAL_CHAR(')'); } #endif @@ -175,15 +169,11 @@ void safe_delay(millis_t ms) { SERIAL_ECHOPGM("Mesh Bed Leveling"); if (planner.leveling_active) { SERIAL_ECHOLNPGM(" (enabled)"); - SERIAL_ECHOPAIR("MBL Adjustment Z", ftostr43sign(mbl.get_z(current_position[X_AXIS], current_position[Y_AXIS] - #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) - , 1.0 - #endif - ), '+')); + SERIAL_ECHOPAIR("MBL Adjustment Z", ftostr43sign(mbl.get_z(current_position), '+')); #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) if (planner.z_fade_height) { SERIAL_ECHOPAIR(" (", ftostr43sign( - mbl.get_z(current_position[X_AXIS], current_position[Y_AXIS], planner.fade_scaling_factor_for_z(current_position[Z_AXIS])), '+' + mbl.get_z(current_position, planner.fade_scaling_factor_for_z(current_position.z)), '+' )); SERIAL_CHAR(')'); } diff --git a/Marlin/src/core/utility.h b/Marlin/src/core/utility.h index 4ae6a96713b6..2956f9289250 100644 --- a/Marlin/src/core/utility.h +++ b/Marlin/src/core/utility.h @@ -22,8 +22,7 @@ #pragma once #include "../inc/MarlinConfigPre.h" - -constexpr char axis_codes[XYZE] = { 'X', 'Y', 'Z', 'E' }; +#include "../core/types.h" // Delay that ensures heaters and watchdog are kept alive void safe_delay(millis_t ms); @@ -37,10 +36,25 @@ inline void serial_delay(const millis_t ms) { #endif } -// 16x16 bit arrays -FORCE_INLINE void bitmap_clear(uint16_t bits[16], const uint8_t x, const uint8_t y) { CBI(bits[y], x); } -FORCE_INLINE void bitmap_set(uint16_t bits[16], const uint8_t x, const uint8_t y) { SBI(bits[y], x); } -FORCE_INLINE bool is_bitmap_set(uint16_t bits[16], const uint8_t x, const uint8_t y) { return TEST(bits[y], x); } +#if GRID_MAX_POINTS_X && GRID_MAX_POINTS_Y + + // 16x16 bit arrays + template + struct FlagBits { + typename IF<(W>8), uint16_t, uint8_t>::type bits[H]; + void fill() { memset(bits, 0xFF, sizeof(bits)); } + void reset() { memset(bits, 0x00, sizeof(bits)); } + void unmark(const uint8_t x, const uint8_t y) { CBI(bits[y], x); } + void mark(const uint8_t x, const uint8_t y) { SBI(bits[y], x); } + bool marked(const uint8_t x, const uint8_t y) { return TEST(bits[y], x); } + inline void unmark(const xy_int8_t &xy) { unmark(xy.y, xy.x); } + inline void mark(const xy_int8_t &xy) { mark(xy.y, xy.x); } + inline bool marked(const xy_int8_t &xy) { return marked(xy.y, xy.x); } + }; + + typedef FlagBits MeshFlags; + +#endif #if ENABLED(DEBUG_LEVELING_FEATURE) void log_machine_info(); diff --git a/Marlin/src/feature/I2CPositionEncoder.cpp b/Marlin/src/feature/I2CPositionEncoder.cpp index 1f73f1417b52..c3b182c72a0f 100644 --- a/Marlin/src/feature/I2CPositionEncoder.cpp +++ b/Marlin/src/feature/I2CPositionEncoder.cpp @@ -326,25 +326,23 @@ bool I2CPositionEncoder::test_axis() { //only works on XYZ cartesian machines for the time being if (!(encoderAxis == X_AXIS || encoderAxis == Y_AXIS || encoderAxis == Z_AXIS)) return false; - float startCoord[NUM_AXIS] = { 0 }, endCoord[NUM_AXIS] = { 0 }; - - const float startPosition = soft_endstop[encoderAxis].min + 10, - endPosition = soft_endstop[encoderAxis].max - 10; + const float startPosition = soft_endstop.min[encoderAxis] + 10, + endPosition = soft_endstop.max[encoderAxis] - 10; const feedRate_t fr_mm_s = FLOOR(MMM_TO_MMS((encoderAxis == Z_AXIS) ? HOMING_FEEDRATE_Z : HOMING_FEEDRATE_XY)); ec = false; - LOOP_XYZ(i) { - startCoord[i] = planner.get_axis_position_mm((AxisEnum)i); - endCoord[i] = planner.get_axis_position_mm((AxisEnum)i); + xyze_pos_t startCoord, endCoord; + LOOP_XYZ(a) { + startCoord[a] = planner.get_axis_position_mm((AxisEnum)a); + endCoord[a] = planner.get_axis_position_mm((AxisEnum)a); } startCoord[encoderAxis] = startPosition; endCoord[encoderAxis] = endPosition; planner.synchronize(); - - planner.buffer_line(startCoord[X_AXIS], startCoord[Y_AXIS], startCoord[Z_AXIS], - planner.get_axis_position_mm(E_AXIS), fr_mm_s, 0); + startCoord.e = planner.get_axis_position_mm(E_AXIS); + planner.buffer_line(startCoord, fr_mm_s, 0); planner.synchronize(); // if the module isn't currently trusted, wait until it is (or until it should be if things are working) @@ -355,8 +353,8 @@ bool I2CPositionEncoder::test_axis() { } if (trusted) { // if trusted, commence test - planner.buffer_line(endCoord[X_AXIS], endCoord[Y_AXIS], endCoord[Z_AXIS], - planner.get_axis_position_mm(E_AXIS), fr_mm_s, 0); + endCoord.e = planner.get_axis_position_mm(E_AXIS); + planner.buffer_line(endCoord, fr_mm_s, 0); planner.synchronize(); } @@ -376,8 +374,7 @@ void I2CPositionEncoder::calibrate_steps_mm(const uint8_t iter) { float old_steps_mm, new_steps_mm, startDistance, endDistance, - travelDistance, travelledDistance, total = 0, - startCoord[NUM_AXIS] = { 0 }, endCoord[NUM_AXIS] = { 0 }; + travelDistance, travelledDistance, total = 0; int32_t startCount, stopCount; @@ -387,31 +384,31 @@ void I2CPositionEncoder::calibrate_steps_mm(const uint8_t iter) { ec = false; startDistance = 20; - endDistance = soft_endstop[encoderAxis].max - 20; + endDistance = soft_endstop.max[encoderAxis] - 20; travelDistance = endDistance - startDistance; + xyze_pos_t startCoord, endCoord; LOOP_XYZ(a) { startCoord[a] = planner.get_axis_position_mm((AxisEnum)a); endCoord[a] = planner.get_axis_position_mm((AxisEnum)a); } - startCoord[encoderAxis] = startDistance; endCoord[encoderAxis] = endDistance; planner.synchronize(); LOOP_L_N(i, iter) { - planner.buffer_line(startCoord[X_AXIS], startCoord[Y_AXIS], startCoord[Z_AXIS], - planner.get_axis_position_mm(E_AXIS), fr_mm_s, 0); + startCoord.e = planner.get_axis_position_mm(E_AXIS); + planner.buffer_line(startCoord, fr_mm_s, 0); planner.synchronize(); delay(250); startCount = get_position(); - //do_blocking_move_to(endCoord[X_AXIS],endCoord[Y_AXIS],endCoord[Z_AXIS]); + //do_blocking_move_to(endCoord); - planner.buffer_line(endCoord[X_AXIS], endCoord[Y_AXIS], endCoord[Z_AXIS], - planner.get_axis_position_mm(E_AXIS), fr_mm_s, 0); + endCoord.e = planner.get_axis_position_mm(E_AXIS); + planner.buffer_line(endCoord, fr_mm_s, 0); planner.synchronize(); //Read encoder distance diff --git a/Marlin/src/feature/I2CPositionEncoder.h b/Marlin/src/feature/I2CPositionEncoder.h index ad3e30a513ca..25350b27873f 100644 --- a/Marlin/src/feature/I2CPositionEncoder.h +++ b/Marlin/src/feature/I2CPositionEncoder.h @@ -93,8 +93,6 @@ #define LOOP_PE(VAR) LOOP_L_N(VAR, I2CPE_ENCODER_CNT) #define CHECK_IDX() do{ if (!WITHIN(idx, 0, I2CPE_ENCODER_CNT - 1)) return; }while(0) -extern const char axis_codes[XYZE]; - typedef union { volatile int32_t val = 0; uint8_t bval[4]; diff --git a/Marlin/src/feature/backlash.cpp b/Marlin/src/feature/backlash.cpp index 8f708c14f6b2..f1a14df49dcd 100644 --- a/Marlin/src/feature/backlash.cpp +++ b/Marlin/src/feature/backlash.cpp @@ -31,9 +31,9 @@ #ifdef BACKLASH_DISTANCE_MM #if ENABLED(BACKLASH_GCODE) - float Backlash::distance_mm[XYZ] = BACKLASH_DISTANCE_MM; + xyz_float_t Backlash::distance_mm = BACKLASH_DISTANCE_MM; #else - const float Backlash::distance_mm[XYZ] = BACKLASH_DISTANCE_MM; + const xyz_float_t Backlash::distance_mm = BACKLASH_DISTANCE_MM; #endif #endif @@ -45,8 +45,8 @@ #endif #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING) - float Backlash::measured_mm[XYZ] = { 0 }; - uint8_t Backlash::measured_count[XYZ] = { 0 }; + xyz_float_t Backlash::measured_mm{0}; + xyz_uint8_t Backlash::measured_count{0}; #endif Backlash backlash; @@ -80,12 +80,12 @@ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const // Residual error carried forward across multiple segments, so correction can be applied // to segments where there is no direction change. - static int32_t residual_error[XYZ] = { 0 }; + static xyz_long_t residual_error{0}; #else // No direction change, no correction. if (!changed_dir) return; // No leftover residual error from segment to segment - int32_t residual_error[XYZ] = { 0 }; + xyz_long_t residual_error{0}; #endif const float f_corr = float(correction) / 255.0f; @@ -131,15 +131,15 @@ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const // Measure Z backlash by raising nozzle in increments until probe deactivates void Backlash::measure_with_probe() { - if (measured_count[Z_AXIS] == 255) return; + if (measured_count.z == 255) return; - float start_height = current_position[Z_AXIS]; - while (current_position[Z_AXIS] < (start_height + BACKLASH_MEASUREMENT_LIMIT) && TEST_PROBE_PIN) - do_blocking_move_to_z(current_position[Z_AXIS] + BACKLASH_MEASUREMENT_RESOLUTION, MMM_TO_MMS(BACKLASH_MEASUREMENT_FEEDRATE)); + const float start_height = current_position.z; + while (current_position.z < (start_height + BACKLASH_MEASUREMENT_LIMIT) && TEST_PROBE_PIN) + do_blocking_move_to_z(current_position.z + BACKLASH_MEASUREMENT_RESOLUTION, MMM_TO_MMS(BACKLASH_MEASUREMENT_FEEDRATE)); // The backlash from all probe points is averaged, so count the number of measurements - measured_mm[Z_AXIS] += current_position[Z_AXIS] - start_height; - measured_count[Z_AXIS]++; + measured_mm.z += current_position.z - start_height; + measured_count.z++; } #endif diff --git a/Marlin/src/feature/backlash.h b/Marlin/src/feature/backlash.h index 19d653491756..0ded86565b51 100644 --- a/Marlin/src/feature/backlash.h +++ b/Marlin/src/feature/backlash.h @@ -29,7 +29,7 @@ constexpr uint8_t all_on = 0xFF, all_off = 0x00; class Backlash { public: #if ENABLED(BACKLASH_GCODE) - static float distance_mm[XYZ]; + static xyz_float_t distance_mm; static uint8_t correction; #ifdef BACKLASH_SMOOTHING_MM static float smoothing_mm; @@ -39,7 +39,7 @@ class Backlash { static inline float get_correction() { return float(ui8_to_percent(correction)) / 100.0f; } #else static constexpr uint8_t correction = (BACKLASH_CORRECTION) * 0xFF; - static const float distance_mm[XYZ]; + static const xyz_float_t distance_mm; #ifdef BACKLASH_SMOOTHING_MM static constexpr float smoothing_mm = BACKLASH_SMOOTHING_MM; #endif @@ -47,8 +47,8 @@ class Backlash { #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING) private: - static float measured_mm[XYZ]; - static uint8_t measured_count[XYZ]; + static xyz_float_t measured_mm; + static xyz_uint8_t measured_count; public: static void measure_with_probe(); #endif diff --git a/Marlin/src/feature/bedlevel/abl/abl.cpp b/Marlin/src/feature/bedlevel/abl/abl.cpp index d1857af11294..d5c5532ad45d 100644 --- a/Marlin/src/feature/bedlevel/abl/abl.cpp +++ b/Marlin/src/feature/bedlevel/abl/abl.cpp @@ -35,9 +35,9 @@ #include "../../../lcd/extensible_ui/ui_api.h" #endif -int bilinear_grid_spacing[2], bilinear_start[2]; -float bilinear_grid_factor[2], - z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; +xy_int_t bilinear_grid_spacing, bilinear_start; +xy_float_t bilinear_grid_factor; +bed_mesh_t z_values; /** * Extrapolate a single point from its neighbors @@ -153,8 +153,8 @@ void print_bilinear_leveling_grid() { #define ABL_TEMP_POINTS_X (GRID_MAX_POINTS_X + 2) #define ABL_TEMP_POINTS_Y (GRID_MAX_POINTS_Y + 2) float z_values_virt[ABL_GRID_POINTS_VIRT_X][ABL_GRID_POINTS_VIRT_Y]; - int bilinear_grid_spacing_virt[2] = { 0 }; - float bilinear_grid_factor_virt[2] = { 0 }; + xy_int_t bilinear_grid_spacing_virt; + xy_float_t bilinear_grid_factor_virt; void print_bilinear_leveling_grid_virt() { SERIAL_ECHOLNPGM("Subdivided with CATMULL ROM Leveling Grid:"); @@ -207,7 +207,7 @@ void print_bilinear_leveling_grid() { + p[i] * (2 - 5 * sq(t) + 3 * t * sq(t)) + p[i+1] * t * (1 + 4 * t - 3 * sq(t)) - p[i+2] * sq(t) * (1 - t) - ) * 0.5; + ) * 0.5f; } static float bed_level_virt_2cmr(const uint8_t x, const uint8_t y, const float &tx, const float &ty) { @@ -222,10 +222,8 @@ void print_bilinear_leveling_grid() { } void bed_level_virt_interpolate() { - bilinear_grid_spacing_virt[X_AXIS] = bilinear_grid_spacing[X_AXIS] / (BILINEAR_SUBDIVISIONS); - bilinear_grid_spacing_virt[Y_AXIS] = bilinear_grid_spacing[Y_AXIS] / (BILINEAR_SUBDIVISIONS); - bilinear_grid_factor_virt[X_AXIS] = RECIPROCAL(bilinear_grid_spacing_virt[X_AXIS]); - bilinear_grid_factor_virt[Y_AXIS] = RECIPROCAL(bilinear_grid_spacing_virt[Y_AXIS]); + bilinear_grid_spacing_virt = bilinear_grid_spacing / (BILINEAR_SUBDIVISIONS); + bilinear_grid_factor_virt = bilinear_grid_spacing_virt.reciprocal(); for (uint8_t y = 0; y < GRID_MAX_POINTS_Y; y++) for (uint8_t x = 0; x < GRID_MAX_POINTS_X; x++) for (uint8_t ty = 0; ty < BILINEAR_SUBDIVISIONS; ty++) @@ -245,40 +243,38 @@ void print_bilinear_leveling_grid() { // Refresh after other values have been updated void refresh_bed_level() { - bilinear_grid_factor[X_AXIS] = RECIPROCAL(bilinear_grid_spacing[X_AXIS]); - bilinear_grid_factor[Y_AXIS] = RECIPROCAL(bilinear_grid_spacing[Y_AXIS]); + bilinear_grid_factor = bilinear_grid_spacing.reciprocal(); #if ENABLED(ABL_BILINEAR_SUBDIVISION) bed_level_virt_interpolate(); #endif } #if ENABLED(ABL_BILINEAR_SUBDIVISION) - #define ABL_BG_SPACING(A) bilinear_grid_spacing_virt[A] - #define ABL_BG_FACTOR(A) bilinear_grid_factor_virt[A] + #define ABL_BG_SPACING(A) bilinear_grid_spacing_virt.A + #define ABL_BG_FACTOR(A) bilinear_grid_factor_virt.A #define ABL_BG_POINTS_X ABL_GRID_POINTS_VIRT_X #define ABL_BG_POINTS_Y ABL_GRID_POINTS_VIRT_Y #define ABL_BG_GRID(X,Y) z_values_virt[X][Y] #else - #define ABL_BG_SPACING(A) bilinear_grid_spacing[A] - #define ABL_BG_FACTOR(A) bilinear_grid_factor[A] + #define ABL_BG_SPACING(A) bilinear_grid_spacing.A + #define ABL_BG_FACTOR(A) bilinear_grid_factor.A #define ABL_BG_POINTS_X GRID_MAX_POINTS_X #define ABL_BG_POINTS_Y GRID_MAX_POINTS_Y #define ABL_BG_GRID(X,Y) z_values[X][Y] #endif // Get the Z adjustment for non-linear bed leveling -float bilinear_z_offset(const float raw[XYZ]) { +float bilinear_z_offset(const xy_pos_t &raw) { - static float z1, d2, z3, d4, L, D, ratio_x, ratio_y, - last_x = -999.999, last_y = -999.999; + static float z1, d2, z3, d4, L, D; + + static xy_pos_t prev { -999.999, -999.999 }, ratio; // Whole units for the grid line indices. Constrained within bounds. - static int8_t gridx, gridy, nextx, nexty, - last_gridx = -99, last_gridy = -99; + static xy_int8_t thisg, nextg, lastg { -99, -99 }; // XY relative to the probed area - const float rx = raw[X_AXIS] - bilinear_start[X_AXIS], - ry = raw[Y_AXIS] - bilinear_start[Y_AXIS]; + xy_pos_t rel = raw - bilinear_start.asFloat(); #if ENABLED(EXTRAPOLATE_BEYOND_GRID) #define FAR_EDGE_OR_BOX 2 // Keep using the last grid box @@ -286,63 +282,62 @@ float bilinear_z_offset(const float raw[XYZ]) { #define FAR_EDGE_OR_BOX 1 // Just use the grid far edge #endif - if (last_x != rx) { - last_x = rx; - ratio_x = rx * ABL_BG_FACTOR(X_AXIS); - const float gx = constrain(FLOOR(ratio_x), 0, ABL_BG_POINTS_X - (FAR_EDGE_OR_BOX)); - ratio_x -= gx; // Subtract whole to get the ratio within the grid box + if (prev.x != rel.x) { + prev.x = rel.x; + ratio.x = rel.x * ABL_BG_FACTOR(x); + const float gx = constrain(FLOOR(ratio.x), 0, ABL_BG_POINTS_X - (FAR_EDGE_OR_BOX)); + ratio.x -= gx; // Subtract whole to get the ratio within the grid box #if DISABLED(EXTRAPOLATE_BEYOND_GRID) // Beyond the grid maintain height at grid edges - NOLESS(ratio_x, 0); // Never < 0.0. (> 1.0 is ok when nextx==gridx.) + NOLESS(ratio.x, 0); // Never <0 (>1 is ok when nextg.x==thisg.x) #endif - gridx = gx; - nextx = _MIN(gridx + 1, ABL_BG_POINTS_X - 1); + thisg.x = gx; + nextg.x = _MIN(thisg.x + 1, ABL_BG_POINTS_X - 1); } - if (last_y != ry || last_gridx != gridx) { + if (prev.y != rel.y || lastg.x != thisg.x) { - if (last_y != ry) { - last_y = ry; - ratio_y = ry * ABL_BG_FACTOR(Y_AXIS); - const float gy = constrain(FLOOR(ratio_y), 0, ABL_BG_POINTS_Y - (FAR_EDGE_OR_BOX)); - ratio_y -= gy; + if (prev.y != rel.y) { + prev.y = rel.y; + ratio.y = rel.y * ABL_BG_FACTOR(y); + const float gy = constrain(FLOOR(ratio.y), 0, ABL_BG_POINTS_Y - (FAR_EDGE_OR_BOX)); + ratio.y -= gy; #if DISABLED(EXTRAPOLATE_BEYOND_GRID) // Beyond the grid maintain height at grid edges - NOLESS(ratio_y, 0); // Never < 0.0. (> 1.0 is ok when nexty==gridy.) + NOLESS(ratio.y, 0); // Never < 0.0. (> 1.0 is ok when nextg.y==thisg.y.) #endif - gridy = gy; - nexty = _MIN(gridy + 1, ABL_BG_POINTS_Y - 1); + thisg.y = gy; + nextg.y = _MIN(thisg.y + 1, ABL_BG_POINTS_Y - 1); } - if (last_gridx != gridx || last_gridy != gridy) { - last_gridx = gridx; - last_gridy = gridy; + if (lastg != thisg) { + lastg = thisg; // Z at the box corners - z1 = ABL_BG_GRID(gridx, gridy); // left-front - d2 = ABL_BG_GRID(gridx, nexty) - z1; // left-back (delta) - z3 = ABL_BG_GRID(nextx, gridy); // right-front - d4 = ABL_BG_GRID(nextx, nexty) - z3; // right-back (delta) + z1 = ABL_BG_GRID(thisg.x, thisg.y); // left-front + d2 = ABL_BG_GRID(thisg.x, nextg.y) - z1; // left-back (delta) + z3 = ABL_BG_GRID(nextg.x, thisg.y); // right-front + d4 = ABL_BG_GRID(nextg.x, nextg.y) - z3; // right-back (delta) } - // Bilinear interpolate. Needed since ry or gridx has changed. - L = z1 + d2 * ratio_y; // Linear interp. LF -> LB - const float R = z3 + d4 * ratio_y; // Linear interp. RF -> RB + // Bilinear interpolate. Needed since rel.y or thisg.x has changed. + L = z1 + d2 * ratio.y; // Linear interp. LF -> LB + const float R = z3 + d4 * ratio.y; // Linear interp. RF -> RB D = R - L; } - const float offset = L + ratio_x * D; // the offset almost always changes + const float offset = L + ratio.x * D; // the offset almost always changes /* static float last_offset = 0; if (ABS(last_offset - offset) > 0.2) { - SERIAL_ECHOLNPAIR("Sudden Shift at x=", rx, " / ", bilinear_grid_spacing[X_AXIS], " -> gridx=", gridx); - SERIAL_ECHOLNPAIR(" y=", ry, " / ", bilinear_grid_spacing[Y_AXIS], " -> gridy=", gridy); - SERIAL_ECHOLNPAIR(" ratio_x=", ratio_x, " ratio_y=", ratio_y); + SERIAL_ECHOLNPAIR("Sudden Shift at x=", rel.x, " / ", bilinear_grid_spacing.x, " -> thisg.x=", thisg.x); + SERIAL_ECHOLNPAIR(" y=", rel.y, " / ", bilinear_grid_spacing.y, " -> thisg.y=", thisg.y); + SERIAL_ECHOLNPAIR(" ratio.x=", ratio.x, " ratio.y=", ratio.y); SERIAL_ECHOLNPAIR(" z1=", z1, " z2=", z2, " z3=", z3, " z4=", z4); SERIAL_ECHOLNPAIR(" L=", L, " R=", R, " offset=", offset); } @@ -354,7 +349,7 @@ float bilinear_z_offset(const float raw[XYZ]) { #if IS_CARTESIAN && DISABLED(SEGMENT_LEVELED_MOVES) - #define CELL_INDEX(A,V) ((V - bilinear_start[_AXIS(A)]) * ABL_BG_FACTOR(_AXIS(A))) + #define CELL_INDEX(A,V) ((V - bilinear_start.A) * ABL_BG_FACTOR(A)) /** * Prepare a bilinear-leveled linear move on Cartesian, @@ -362,62 +357,61 @@ float bilinear_z_offset(const float raw[XYZ]) { */ void bilinear_line_to_destination(const feedRate_t scaled_fr_mm_s, uint16_t x_splits, uint16_t y_splits) { // Get current and destination cells for this line - int cx1 = CELL_INDEX(X, current_position[X_AXIS]), - cy1 = CELL_INDEX(Y, current_position[Y_AXIS]), - cx2 = CELL_INDEX(X, destination[X_AXIS]), - cy2 = CELL_INDEX(Y, destination[Y_AXIS]); - LIMIT(cx1, 0, ABL_BG_POINTS_X - 2); - LIMIT(cy1, 0, ABL_BG_POINTS_Y - 2); - LIMIT(cx2, 0, ABL_BG_POINTS_X - 2); - LIMIT(cy2, 0, ABL_BG_POINTS_Y - 2); + xy_int_t c1 { CELL_INDEX(x, current_position.x), CELL_INDEX(y, current_position.y) }, + c2 { CELL_INDEX(x, destination.x), CELL_INDEX(y, destination.y) }; + LIMIT(c1.x, 0, ABL_BG_POINTS_X - 2); + LIMIT(c1.y, 0, ABL_BG_POINTS_Y - 2); + LIMIT(c2.x, 0, ABL_BG_POINTS_X - 2); + LIMIT(c2.y, 0, ABL_BG_POINTS_Y - 2); // Start and end in the same cell? No split needed. - if (cx1 == cx2 && cy1 == cy2) { - set_current_from_destination(); + if (c1 == c2) { + current_position = destination; line_to_current_position(scaled_fr_mm_s); return; } - #define LINE_SEGMENT_END(A) (current_position[_AXIS(A)] + (destination[_AXIS(A)] - current_position[_AXIS(A)]) * normalized_dist) + #define LINE_SEGMENT_END(A) (current_position.A + (destination.A - current_position.A) * normalized_dist) - float normalized_dist, end[XYZE]; - const int8_t gcx = _MAX(cx1, cx2), gcy = _MAX(cy1, cy2); + float normalized_dist; + xyze_pos_t end; + const xy_int8_t gc { _MAX(c1.x, c2.x), _MAX(c1.y, c2.y) }; // Crosses on the X and not already split on this X? // The x_splits flags are insurance against rounding errors. - if (cx2 != cx1 && TEST(x_splits, gcx)) { + if (c2.x != c1.x && TEST(x_splits, gc.x)) { // Split on the X grid line - CBI(x_splits, gcx); - COPY(end, destination); - destination[X_AXIS] = bilinear_start[X_AXIS] + ABL_BG_SPACING(X_AXIS) * gcx; - normalized_dist = (destination[X_AXIS] - current_position[X_AXIS]) / (end[X_AXIS] - current_position[X_AXIS]); - destination[Y_AXIS] = LINE_SEGMENT_END(Y); + CBI(x_splits, gc.x); + end = destination; + destination.x = bilinear_start.x + ABL_BG_SPACING(x) * gc.x; + normalized_dist = (destination.x - current_position.x) / (end.x - current_position.x); + destination.y = LINE_SEGMENT_END(y); } // Crosses on the Y and not already split on this Y? - else if (cy2 != cy1 && TEST(y_splits, gcy)) { + else if (c2.y != c1.y && TEST(y_splits, gc.y)) { // Split on the Y grid line - CBI(y_splits, gcy); - COPY(end, destination); - destination[Y_AXIS] = bilinear_start[Y_AXIS] + ABL_BG_SPACING(Y_AXIS) * gcy; - normalized_dist = (destination[Y_AXIS] - current_position[Y_AXIS]) / (end[Y_AXIS] - current_position[Y_AXIS]); - destination[X_AXIS] = LINE_SEGMENT_END(X); + CBI(y_splits, gc.y); + end = destination; + destination.y = bilinear_start.y + ABL_BG_SPACING(y) * gc.y; + normalized_dist = (destination.y - current_position.y) / (end.y - current_position.y); + destination.x = LINE_SEGMENT_END(x); } else { // Must already have been split on these border(s) // This should be a rare case. - set_current_from_destination(); + current_position = destination; line_to_current_position(scaled_fr_mm_s); return; } - destination[Z_AXIS] = LINE_SEGMENT_END(Z); - destination[E_AXIS] = LINE_SEGMENT_END(E); + destination.z = LINE_SEGMENT_END(z); + destination.e = LINE_SEGMENT_END(e); // Do the split and look for more borders bilinear_line_to_destination(scaled_fr_mm_s, x_splits, y_splits); // Restore destination from stack - COPY(destination, end); + destination = end; bilinear_line_to_destination(scaled_fr_mm_s, x_splits, y_splits); } diff --git a/Marlin/src/feature/bedlevel/abl/abl.h b/Marlin/src/feature/bedlevel/abl/abl.h index 71c7d836326a..84ab853f8f8e 100644 --- a/Marlin/src/feature/bedlevel/abl/abl.h +++ b/Marlin/src/feature/bedlevel/abl/abl.h @@ -23,10 +23,10 @@ #include "../../../inc/MarlinConfigPre.h" -extern int bilinear_grid_spacing[2], bilinear_start[2]; -extern float bilinear_grid_factor[2], - z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; -float bilinear_z_offset(const float raw[XYZ]); +extern xy_int_t bilinear_grid_spacing, bilinear_start; +extern xy_float_t bilinear_grid_factor; +extern bed_mesh_t z_values; +float bilinear_z_offset(const xy_pos_t &raw); void extrapolate_unprobed_bed_level(); void print_bilinear_leveling_grid(); @@ -40,6 +40,6 @@ void refresh_bed_level(); void bilinear_line_to_destination(const feedRate_t &scaled_fr_mm_s, uint16_t x_splits=0xFFFF, uint16_t y_splits=0xFFFF); #endif -#define _GET_MESH_X(I) (bilinear_start[X_AXIS] + (I) * bilinear_grid_spacing[X_AXIS]) -#define _GET_MESH_Y(J) (bilinear_start[Y_AXIS] + (J) * bilinear_grid_spacing[Y_AXIS]) +#define _GET_MESH_X(I) float(bilinear_start.x + (I) * bilinear_grid_spacing.x) +#define _GET_MESH_Y(J) float(bilinear_start.y + (J) * bilinear_grid_spacing.y) #define Z_VALUES_ARR z_values diff --git a/Marlin/src/feature/bedlevel/bedlevel.cpp b/Marlin/src/feature/bedlevel/bedlevel.cpp index f4a17b003525..d92f903a9f86 100644 --- a/Marlin/src/feature/bedlevel/bedlevel.cpp +++ b/Marlin/src/feature/bedlevel/bedlevel.cpp @@ -51,7 +51,7 @@ bool leveling_is_valid() { #if ENABLED(MESH_BED_LEVELING) mbl.has_mesh() #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) - !!bilinear_grid_spacing[X_AXIS] + !!bilinear_grid_spacing.x #elif ENABLED(AUTO_BED_LEVELING_UBL) ubl.mesh_is_valid() #else // 3POINT, LINEAR @@ -81,13 +81,13 @@ void set_bed_leveling_enabled(const bool enable/*=true*/) { #if ENABLED(AUTO_BED_LEVELING_BILINEAR) // Force bilinear_z_offset to re-calculate next time - const float reset[XYZ] = { -9999.999, -9999.999, 0 }; + const xyz_pos_t reset { -9999.999, -9999.999, 0 }; (void)bilinear_z_offset(reset); #endif if (planner.leveling_active) { // leveling from on to off // change unleveled current_position to physical current_position without moving steppers. - planner.apply_leveling(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS]); + planner.apply_leveling(current_position); planner.leveling_active = false; // disable only AFTER calling apply_leveling } else { // leveling from off to on @@ -116,9 +116,9 @@ TemporaryBedLevelingState::TemporaryBedLevelingState(const bool enable) : saved( planner.set_z_fade_height(zfh); if (leveling_was_active) { - const float oldpos[] = { current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] }; + const xyz_pos_t oldpos = current_position; set_bed_leveling_enabled(true); - if (do_report && memcmp(oldpos, current_position, sizeof(oldpos))) + if (do_report && oldpos != current_position) report_current_position(); } } @@ -137,8 +137,8 @@ void reset_bed_level() { #if ENABLED(MESH_BED_LEVELING) mbl.reset(); #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) - bilinear_start[X_AXIS] = bilinear_start[Y_AXIS] = - bilinear_grid_spacing[X_AXIS] = bilinear_grid_spacing[Y_AXIS] = 0; + bilinear_start.reset(); + bilinear_grid_spacing.reset(); for (uint8_t x = 0; x < GRID_MAX_POINTS_X; x++) for (uint8_t y = 0; y < GRID_MAX_POINTS_Y; y++) { z_values[x][y] = NAN; @@ -223,25 +223,25 @@ void reset_bed_level() { #if EITHER(MESH_BED_LEVELING, PROBE_MANUALLY) - void _manual_goto_xy(const float &rx, const float &ry) { + void _manual_goto_xy(const xy_pos_t &pos) { #ifdef MANUAL_PROBE_START_Z + constexpr float startz = _MAX(0, MANUAL_PROBE_START_Z); #if MANUAL_PROBE_HEIGHT > 0 - do_blocking_move_to(rx, ry, MANUAL_PROBE_HEIGHT); - do_blocking_move_to_z(_MAX(0,MANUAL_PROBE_START_Z)); + do_blocking_move_to(pos, MANUAL_PROBE_HEIGHT); + do_blocking_move_to_z(startz); #else - do_blocking_move_to(rx, ry, _MAX(0,MANUAL_PROBE_START_Z)); + do_blocking_move_to(pos, startz); #endif #elif MANUAL_PROBE_HEIGHT > 0 - const float prev_z = current_position[Z_AXIS]; - do_blocking_move_to(rx, ry, MANUAL_PROBE_HEIGHT); + const float prev_z = current_position.z; + do_blocking_move_to(pos, MANUAL_PROBE_HEIGHT); do_blocking_move_to_z(prev_z); #else - do_blocking_move_to_xy(rx, ry); + do_blocking_move_to_xy(pos); #endif - current_position[X_AXIS] = rx; - current_position[Y_AXIS] = ry; + current_position = pos; #if ENABLED(LCD_BED_LEVELING) ui.wait_for_bl_move = false; diff --git a/Marlin/src/feature/bedlevel/bedlevel.h b/Marlin/src/feature/bedlevel/bedlevel.h index d01751407af4..6ba09488801c 100644 --- a/Marlin/src/feature/bedlevel/bedlevel.h +++ b/Marlin/src/feature/bedlevel/bedlevel.h @@ -38,7 +38,7 @@ void reset_bed_level(); #endif #if EITHER(MESH_BED_LEVELING, PROBE_MANUALLY) - void _manual_goto_xy(const float &x, const float &y); + void _manual_goto_xy(const xy_pos_t &pos); #endif /** @@ -57,11 +57,6 @@ class TemporaryBedLevelingState { typedef float bed_mesh_t[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; - typedef struct { - int8_t x_index, y_index; - float distance; // When populated, the distance from the search location - } mesh_index_pair; - #if ENABLED(AUTO_BED_LEVELING_BILINEAR) #include "abl/abl.h" #elif ENABLED(AUTO_BED_LEVELING_UBL) @@ -71,6 +66,7 @@ class TemporaryBedLevelingState { #endif #define Z_VALUES(X,Y) Z_VALUES_ARR[X][Y] + #define _GET_MESH_POS(M) { _GET_MESH_X(M.a), _GET_MESH_Y(M.b) } #if EITHER(AUTO_BED_LEVELING_BILINEAR, MESH_BED_LEVELING) @@ -85,4 +81,18 @@ class TemporaryBedLevelingState { #endif + struct mesh_index_pair { + xy_int8_t pos; + float distance; // When populated, the distance from the search location + void invalidate() { pos = -1; } + bool valid() const { return pos.x >= 0 && pos.y >= 0; } + #if ENABLED(AUTO_BED_LEVELING_UBL) + xy_pos_t meshpos() { + return { ubl.mesh_index_to_xpos(pos.x), ubl.mesh_index_to_ypos(pos.y) }; + } + #endif + operator xy_int8_t&() { return pos; } + operator const xy_int8_t&() const { return pos; } + }; + #endif diff --git a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp index b3a1a13529da..af9c671d6a2d 100644 --- a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp +++ b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp @@ -24,10 +24,9 @@ #if ENABLED(MESH_BED_LEVELING) - #include "mesh_bed_leveling.h" + #include "../bedlevel.h" #include "../../../module/motion.h" - #include "../../../feature/bedlevel/bedlevel.h" #if ENABLED(EXTENSIBLE_UI) #include "../../../lcd/extensible_ui/ui_api.h" @@ -66,62 +65,60 @@ */ void mesh_bed_leveling::line_to_destination(const feedRate_t &scaled_fr_mm_s, uint8_t x_splits, uint8_t y_splits) { // Get current and destination cells for this line - int cx1 = cell_index_x(current_position[X_AXIS]), - cy1 = cell_index_y(current_position[Y_AXIS]), - cx2 = cell_index_x(destination[X_AXIS]), - cy2 = cell_index_y(destination[Y_AXIS]); - NOMORE(cx1, GRID_MAX_POINTS_X - 2); - NOMORE(cy1, GRID_MAX_POINTS_Y - 2); - NOMORE(cx2, GRID_MAX_POINTS_X - 2); - NOMORE(cy2, GRID_MAX_POINTS_Y - 2); + xy_int8_t scel = cell_indexes(current_position), ecel = cell_indexes(destination); + NOMORE(scel.x, GRID_MAX_POINTS_X - 2); + NOMORE(scel.y, GRID_MAX_POINTS_Y - 2); + NOMORE(ecel.x, GRID_MAX_POINTS_X - 2); + NOMORE(ecel.y, GRID_MAX_POINTS_Y - 2); // Start and end in the same cell? No split needed. - if (cx1 == cx2 && cy1 == cy2) { + if (scel == ecel) { line_to_destination(scaled_fr_mm_s); - set_current_from_destination(); + current_position = destination; return; } - #define MBL_SEGMENT_END(A) (current_position[_AXIS(A)] + (destination[_AXIS(A)] - current_position[_AXIS(A)]) * normalized_dist) + #define MBL_SEGMENT_END(A) (current_position.A + (destination.A - current_position.A) * normalized_dist) - float normalized_dist, end[XYZE]; - const int8_t gcx = _MAX(cx1, cx2), gcy = _MAX(cy1, cy2); + float normalized_dist; + xyze_pos_t dest; + const int8_t gcx = _MAX(scel.x, ecel.x), gcy = _MAX(scel.y, ecel.y); // Crosses on the X and not already split on this X? // The x_splits flags are insurance against rounding errors. - if (cx2 != cx1 && TEST(x_splits, gcx)) { + if (ecel.x != scel.x && TEST(x_splits, gcx)) { // Split on the X grid line CBI(x_splits, gcx); - COPY(end, destination); - destination[X_AXIS] = index_to_xpos[gcx]; - normalized_dist = (destination[X_AXIS] - current_position[X_AXIS]) / (end[X_AXIS] - current_position[X_AXIS]); - destination[Y_AXIS] = MBL_SEGMENT_END(Y); + dest = destination; + destination.x = index_to_xpos[gcx]; + normalized_dist = (destination.x - current_position.x) / (dest.x - current_position.x); + destination.y = MBL_SEGMENT_END(y); } // Crosses on the Y and not already split on this Y? - else if (cy2 != cy1 && TEST(y_splits, gcy)) { + else if (ecel.y != scel.y && TEST(y_splits, gcy)) { // Split on the Y grid line CBI(y_splits, gcy); - COPY(end, destination); - destination[Y_AXIS] = index_to_ypos[gcy]; - normalized_dist = (destination[Y_AXIS] - current_position[Y_AXIS]) / (end[Y_AXIS] - current_position[Y_AXIS]); - destination[X_AXIS] = MBL_SEGMENT_END(X); + dest = destination; + destination.y = index_to_ypos[gcy]; + normalized_dist = (destination.y - current_position.y) / (dest.y - current_position.y); + destination.x = MBL_SEGMENT_END(x); } else { // Must already have been split on these border(s) // This should be a rare case. line_to_destination(scaled_fr_mm_s); - set_current_from_destination(); + current_position = destination; return; } - destination[Z_AXIS] = MBL_SEGMENT_END(Z); - destination[E_AXIS] = MBL_SEGMENT_END(E); + destination.z = MBL_SEGMENT_END(z); + destination.e = MBL_SEGMENT_END(e); // Do the split and look for more borders line_to_destination(scaled_fr_mm_s, x_splits, y_splits); // Restore destination from stack - COPY(destination, end); + destination = dest; line_to_destination(scaled_fr_mm_s, x_splits, y_splits); } diff --git a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h index def380399eb2..3009f4aea4c3 100644 --- a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h +++ b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h @@ -76,21 +76,27 @@ class mesh_bed_leveling { int8_t cx = (x - (MESH_MIN_X)) * RECIPROCAL(MESH_X_DIST); return constrain(cx, 0, (GRID_MAX_POINTS_X) - 2); } - static int8_t cell_index_y(const float &y) { int8_t cy = (y - (MESH_MIN_Y)) * RECIPROCAL(MESH_Y_DIST); return constrain(cy, 0, (GRID_MAX_POINTS_Y) - 2); } + static inline xy_int8_t cell_indexes(const float &x, const float &y) { + return { cell_index_x(x), cell_index_y(y) }; + } + static inline xy_int8_t cell_indexes(const xy_pos_t &xy) { return cell_indexes(xy.x, xy.y); } static int8_t probe_index_x(const float &x) { int8_t px = (x - (MESH_MIN_X) + 0.5f * (MESH_X_DIST)) * RECIPROCAL(MESH_X_DIST); return WITHIN(px, 0, GRID_MAX_POINTS_X - 1) ? px : -1; } - static int8_t probe_index_y(const float &y) { int8_t py = (y - (MESH_MIN_Y) + 0.5f * (MESH_Y_DIST)) * RECIPROCAL(MESH_Y_DIST); return WITHIN(py, 0, GRID_MAX_POINTS_Y - 1) ? py : -1; } + static inline xy_int8_t probe_indexes(const float &x, const float &y) { + return { probe_index_x(x), probe_index_y(y) }; + } + static inline xy_int8_t probe_indexes(const xy_pos_t &xy) { return probe_indexes(xy.x, xy.y); } static float calc_z0(const float &a0, const float &a1, const float &z1, const float &a2, const float &z2) { const float delta_z = (z2 - z1) / (a2 - a1), @@ -98,21 +104,21 @@ class mesh_bed_leveling { return z1 + delta_a * delta_z; } - static float get_z(const float &x0, const float &y0 + static float get_z(const xy_pos_t &pos #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) - , const float &factor + , const float &factor=1.0f #endif ) { - const int8_t cx = cell_index_x(x0), cy = cell_index_y(y0); - const float z1 = calc_z0(x0, index_to_xpos[cx], z_values[cx][cy], index_to_xpos[cx + 1], z_values[cx + 1][cy]), - z2 = calc_z0(x0, index_to_xpos[cx], z_values[cx][cy + 1], index_to_xpos[cx + 1], z_values[cx + 1][cy + 1]), - z0 = calc_z0(y0, index_to_ypos[cy], z1, index_to_ypos[cy + 1], z2); - - return z_offset + z0 - #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) - * factor - #endif - ; + #if DISABLED(ENABLE_LEVELING_FADE_HEIGHT) + constexpr float factor = 1.0f; + #endif + const xy_int8_t ind = cell_indexes(pos); + const float x1 = index_to_xpos[ind.x], x2 = index_to_xpos[ind.x+1], + y1 = index_to_xpos[ind.y], y2 = index_to_xpos[ind.y+1], + z1 = calc_z0(pos.x, x1, z_values[ind.x][ind.y ], x2, z_values[ind.x+1][ind.y ]), + z2 = calc_z0(pos.x, x1, z_values[ind.x][ind.y+1], x2, z_values[ind.x+1][ind.y+1]); + + return z_offset + calc_z0(pos.y, y1, z1, y2, z2) * factor; } #if IS_CARTESIAN && DISABLED(SEGMENT_LEVELED_MOVES) diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.cpp b/Marlin/src/feature/bedlevel/ubl/ubl.cpp index 4cdc4721b5a5..259ee1096619 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl.cpp @@ -176,8 +176,7 @@ // Add XY probe offset from extruder because probe_at_point() subtracts them when // moving to the XY position to be measured. This ensures better agreement between // the current Z position after G28 and the mesh values. - const float current_xi = find_closest_x_index(current_position[X_AXIS] + probe_offset[X_AXIS]), - current_yi = find_closest_y_index(current_position[Y_AXIS] + probe_offset[Y_AXIS]); + const xy_int8_t curr = closest_indexes(xy_pos_t(current_position) + xy_pos_t(probe_offset)); if (!lcd) SERIAL_EOL(); for (int8_t j = GRID_MAX_POINTS_Y - 1; j >= 0; j--) { @@ -193,7 +192,7 @@ for (uint8_t i = 0; i < GRID_MAX_POINTS_X; i++) { // Opening Brace or Space - const bool is_current = i == current_xi && j == current_yi; + const bool is_current = i == curr.x && j == curr.y; if (human) SERIAL_CHAR(is_current ? '[' : ' '); // Z Value at current I, J diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.h b/Marlin/src/feature/bedlevel/ubl/ubl.h index 6897217c3843..2202bb6524a1 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.h +++ b/Marlin/src/feature/bedlevel/ubl/ubl.h @@ -32,15 +32,12 @@ #define UBL_OK false #define UBL_ERR true -#define USE_NOZZLE_AS_REFERENCE 0 -#define USE_PROBE_AS_REFERENCE 1 - -// ubl_G29.cpp - enum MeshPointType : char { INVALID, REAL, SET_IN_BITMAP }; // External references +struct mesh_index_pair; + #define MESH_X_DIST (float(MESH_MAX_X - (MESH_MIN_X)) / float(GRID_MAX_POINTS_X - 1)) #define MESH_Y_DIST (float(MESH_MAX_Y - (MESH_MIN_Y)) / float(GRID_MAX_POINTS_Y - 1)) @@ -52,10 +49,11 @@ class unified_bed_leveling { g29_repetition_cnt, g29_storage_slot, g29_map_type; - static bool g29_c_flag, g29_x_flag, g29_y_flag; - static float g29_x_pos, g29_y_pos, - g29_card_thickness, + static bool g29_c_flag; + static float g29_card_thickness, g29_constant; + static xy_pos_t g29_pos; + static xy_bool_t xy_seen; #if HAS_BED_PROBE static int g29_grid_size; @@ -65,16 +63,19 @@ class unified_bed_leveling { static void move_z_with_encoder(const float &multiplier); static float measure_point_with_encoder(); static float measure_business_card_thickness(float in_height); - static void manually_probe_remaining_mesh(const float&, const float&, const float&, const float&, const bool) _O0; - static void fine_tune_mesh(const float &rx, const float &ry, const bool do_ubl_mesh_map) _O0; + static void manually_probe_remaining_mesh(const xy_pos_t&, const float&, const float&, const bool) _O0; + static void fine_tune_mesh(const xy_pos_t &pos, const bool do_ubl_mesh_map) _O0; #endif static bool g29_parameter_parsing() _O0; static void shift_mesh_height(); - static void probe_entire_mesh(const float &rx, const float &ry, const bool do_ubl_mesh_map, const bool stow_probe, const bool do_furthest) _O0; + static void probe_entire_mesh(const xy_pos_t &near, const bool do_ubl_mesh_map, const bool stow_probe, const bool do_furthest) _O0; static void tilt_mesh_based_on_3pts(const float &z1, const float &z2, const float &z3); static void tilt_mesh_based_on_probed_grid(const bool do_ubl_mesh_map); static bool smart_fill_one(const uint8_t x, const uint8_t y, const int8_t xdir, const int8_t ydir); + static inline bool smart_fill_one(const xy_uint8_t &pos, const xy_uint8_t &dir) { + return smart_fill_one(pos.x, pos.y, dir.x, dir.y); + } static void smart_fill_mesh(); #if ENABLED(UBL_DEVEL_DEBUGGING) @@ -91,7 +92,7 @@ class unified_bed_leveling { static void save_ubl_active_state_and_disable(); static void restore_ubl_active_state_and_leave(); static void display_map(const int) _O0; - static mesh_index_pair find_closest_mesh_point_of_type(const MeshPointType, const float&, const float&, const bool, uint16_t[16]) _O0; + static mesh_index_pair find_closest_mesh_point_of_type(const MeshPointType, const xy_pos_t&, const bool=false, MeshFlags *done_flags=nullptr) _O0; static mesh_index_pair find_furthest_invalid_mesh_point() _O0; static void reset(); static void invalidate(); @@ -118,14 +119,14 @@ class unified_bed_leveling { FORCE_INLINE static void set_z(const int8_t px, const int8_t py, const float &z) { z_values[px][py] = z; } - static int8_t get_cell_index_x(const float &x) { + static int8_t cell_index_x(const float &x) { const int8_t cx = (x - (MESH_MIN_X)) * RECIPROCAL(MESH_X_DIST); return constrain(cx, 0, (GRID_MAX_POINTS_X) - 1); // -1 is appropriate if we want all movement to the X_MAX } // position. But with this defined this way, it is possible // to extrapolate off of this point even further out. Probably // that is OK because something else should be keeping that from // happening and should not be worried about at this level. - static int8_t get_cell_index_y(const float &y) { + static int8_t cell_index_y(const float &y) { const int8_t cy = (y - (MESH_MIN_Y)) * RECIPROCAL(MESH_Y_DIST); return constrain(cy, 0, (GRID_MAX_POINTS_Y) - 1); // -1 is appropriate if we want all movement to the Y_MAX } // position. But with this defined this way, it is possible @@ -133,15 +134,22 @@ class unified_bed_leveling { // that is OK because something else should be keeping that from // happening and should not be worried about at this level. - static int8_t find_closest_x_index(const float &x) { + static inline xy_int8_t cell_indexes(const float &x, const float &y) { + return { cell_index_x(x), cell_index_y(y) }; + } + static inline xy_int8_t cell_indexes(const xy_pos_t &xy) { return cell_indexes(xy.x, xy.y); } + + static int8_t closest_x_index(const float &x) { const int8_t px = (x - (MESH_MIN_X) + (MESH_X_DIST) * 0.5) * RECIPROCAL(MESH_X_DIST); return WITHIN(px, 0, GRID_MAX_POINTS_X - 1) ? px : -1; } - - static int8_t find_closest_y_index(const float &y) { + static int8_t closest_y_index(const float &y) { const int8_t py = (y - (MESH_MIN_Y) + (MESH_Y_DIST) * 0.5) * RECIPROCAL(MESH_Y_DIST); return WITHIN(py, 0, GRID_MAX_POINTS_Y - 1) ? py : -1; } + static inline xy_int8_t closest_indexes(const xy_pos_t &xy) { + return { closest_x_index(xy.x), closest_y_index(xy.y) }; + } /** * z2 --| @@ -228,8 +236,7 @@ class unified_bed_leveling { * on the Y position within the cell. */ static float get_z_correction(const float &rx0, const float &ry0) { - const int8_t cx = get_cell_index_x(rx0), - cy = get_cell_index_y(ry0); // return values are clamped + const int8_t cx = cell_index_x(rx0), cy = cell_index_y(ry0); // return values are clamped /** * Check if the requested location is off the mesh. If so, and @@ -275,11 +282,11 @@ class unified_bed_leveling { } return z0; } + static inline float get_z_correction(const xy_pos_t &pos) { return get_z_correction(pos.x, pos.y); } static inline float mesh_index_to_xpos(const uint8_t i) { return i < GRID_MAX_POINTS_X ? pgm_read_float(&_mesh_index_to_xpos[i]) : MESH_MIN_X + i * (MESH_X_DIST); } - static inline float mesh_index_to_ypos(const uint8_t i) { return i < GRID_MAX_POINTS_Y ? pgm_read_float(&_mesh_index_to_ypos[i]) : MESH_MIN_Y + i * (MESH_Y_DIST); } diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index 54c7666bacfb..6005e9881f01 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -53,8 +53,6 @@ #define UBL_G29_P31 - extern float destination[XYZE], current_position[XYZE]; - #if HAS_LCD_MENU void _lcd_ubl_output_map_lcd(); #endif @@ -67,13 +65,11 @@ unified_bed_leveling::g29_repetition_cnt, unified_bed_leveling::g29_storage_slot = 0, unified_bed_leveling::g29_map_type; - bool unified_bed_leveling::g29_c_flag, - unified_bed_leveling::g29_x_flag, - unified_bed_leveling::g29_y_flag; - float unified_bed_leveling::g29_x_pos, - unified_bed_leveling::g29_y_pos, - unified_bed_leveling::g29_card_thickness = 0, + bool unified_bed_leveling::g29_c_flag; + float unified_bed_leveling::g29_card_thickness = 0, unified_bed_leveling::g29_constant = 0; + xy_bool_t unified_bed_leveling::xy_seen; + xy_pos_t unified_bed_leveling::g29_pos; #if HAS_BED_PROBE int unified_bed_leveling::g29_grid_size; @@ -330,18 +326,19 @@ else { while (g29_repetition_cnt--) { if (cnt > 20) { cnt = 0; idle(); } - const mesh_index_pair location = find_closest_mesh_point_of_type(REAL, g29_x_pos, g29_y_pos, USE_NOZZLE_AS_REFERENCE, nullptr); - if (location.x_index < 0) { - // No more REACHABLE mesh points to invalidate, so we ASSUME the user + const mesh_index_pair closest = find_closest_mesh_point_of_type(REAL, g29_pos); + const xy_int8_t &cpos = closest.pos; + if (cpos.x < 0) { + // No more REAL mesh points to invalidate, so we ASSUME the user // meant to invalidate the ENTIRE mesh, which cannot be done with - // find_closest_mesh_point loop which only returns REACHABLE points. + // find_closest_mesh_point loop which only returns REAL points. set_all_mesh_points_to_value(NAN); SERIAL_ECHOLNPGM("Entire Mesh invalidated.\n"); break; // No more invalid Mesh Points to populate } - z_values[location.x_index][location.y_index] = NAN; + z_values[cpos.x][cpos.y] = NAN; #if ENABLED(EXTENSIBLE_UI) - ExtUI::onMeshUpdate(location.x_index, location.y_index, 0); + ExtUI::onMeshUpdate(closest, 0); #endif cnt++; } @@ -448,13 +445,13 @@ SERIAL_ECHOLNPGM("Mesh invalidated. Probing mesh."); } if (g29_verbose_level > 1) { - SERIAL_ECHOPAIR("Probing around (", g29_x_pos); + SERIAL_ECHOPAIR("Probing around (", g29_pos.x); SERIAL_CHAR(','); - SERIAL_ECHO(g29_y_pos); + SERIAL_ECHO(g29_pos.y); SERIAL_ECHOLNPGM(").\n"); } - probe_entire_mesh(g29_x_pos + probe_offset[X_AXIS], g29_y_pos + probe_offset[Y_AXIS], - parser.seen('T'), parser.seen('E'), parser.seen('U')); + const xy_pos_t near = g29_pos + probe_offset; + probe_entire_mesh(near, parser.seen('T'), parser.seen('E'), parser.seen('U')); report_current_position(); probe_deployed = true; @@ -470,7 +467,7 @@ SERIAL_ECHOLNPGM("Manually probing unreachable mesh locations."); do_blocking_move_to_z(Z_CLEARANCE_BETWEEN_PROBES); - if (parser.seen('C') && !g29_x_flag && !g29_y_flag) { + if (parser.seen('C') && !xy_seen) { /** * Use a good default location for the path. * The flipped > and < operators in these comparisons is intentional. @@ -478,13 +475,14 @@ * It may make sense to have Delta printers default to the center of the bed. * Until that is decided, this can be forced with the X and Y parameters. */ - #if IS_KINEMATIC - g29_x_pos = X_HOME_POS; - g29_y_pos = Y_HOME_POS; - #else // cartesian - g29_x_pos = probe_offset[X_AXIS] > 0 ? X_BED_SIZE : 0; - g29_y_pos = probe_offset[Y_AXIS] < 0 ? Y_BED_SIZE : 0; - #endif + g29_pos.set( + #if IS_KINEMATIC + X_HOME_POS, Y_HOME_POS + #else + probe_offset.x > 0 ? X_BED_SIZE : 0, + probe_offset.y < 0 ? Y_BED_SIZE : 0 + #endif + ); } if (parser.seen('B')) { @@ -496,13 +494,13 @@ probe_deployed = true; } - if (!position_is_reachable(g29_x_pos, g29_y_pos)) { + if (!position_is_reachable(g29_pos)) { SERIAL_ECHOLNPGM("XY outside printable radius."); return; } const float height = parser.floatval('H', Z_CLEARANCE_BETWEEN_PROBES); - manually_probe_remaining_mesh(g29_x_pos, g29_y_pos, height, g29_card_thickness, parser.seen('T')); + manually_probe_remaining_mesh(g29_pos, height, g29_card_thickness, parser.seen('T')); SERIAL_ECHOLNPGM("G29 P2 finished."); @@ -530,20 +528,22 @@ } else { while (g29_repetition_cnt--) { // this only populates reachable mesh points near - const mesh_index_pair location = find_closest_mesh_point_of_type(INVALID, g29_x_pos, g29_y_pos, USE_NOZZLE_AS_REFERENCE, nullptr); - if (location.x_index < 0) { - // No more REACHABLE INVALID mesh points to populate, so we ASSUME + const mesh_index_pair closest = find_closest_mesh_point_of_type(INVALID, g29_pos); + const xy_int8_t &cpos = closest.pos; + if (cpos.x < 0) { + // No more REAL INVALID mesh points to populate, so we ASSUME // user meant to populate ALL INVALID mesh points to value for (uint8_t x = 0; x < GRID_MAX_POINTS_X; x++) for (uint8_t y = 0; y < GRID_MAX_POINTS_Y; y++) - if (isnan(z_values[x][y])) - z_values[x][y] = g29_constant; + if (isnan(z_values[x][y])) z_values[x][y] = g29_constant; break; // No more invalid Mesh Points to populate } - z_values[location.x_index][location.y_index] = g29_constant; - #if ENABLED(EXTENSIBLE_UI) - ExtUI::onMeshUpdate(location.x_index, location.y_index, z_values[location.x_index][location.y_index]); - #endif + else { + z_values[cpos.x][cpos.y] = g29_constant; + #if ENABLED(EXTENSIBLE_UI) + ExtUI::onMeshUpdate(closest, g29_constant); + #endif + } } } } @@ -576,7 +576,7 @@ case 4: // Fine Tune (i.e., Edit) the Mesh #if HAS_LCD_MENU - fine_tune_mesh(g29_x_pos, g29_y_pos, parser.seen('T')); + fine_tune_mesh(g29_pos, parser.seen('T')); #else SERIAL_ECHOLNPGM("?P4 is only available when an LCD is present."); return; @@ -740,9 +740,7 @@ * Probe all invalidated locations of the mesh that can be reached by the probe. * This attempts to fill in locations closest to the nozzle's start location first. */ - void unified_bed_leveling::probe_entire_mesh(const float &rx, const float &ry, const bool do_ubl_mesh_map, const bool stow_probe, const bool do_furthest) { - mesh_index_pair location; - + void unified_bed_leveling::probe_entire_mesh(const xy_pos_t &near, const bool do_ubl_mesh_map, const bool stow_probe, const bool do_furthest) { #if HAS_LCD_MENU ui.capture(); #endif @@ -752,6 +750,7 @@ uint8_t count = GRID_MAX_POINTS; + mesh_index_pair best; do { if (do_ubl_mesh_map) display_map(g29_map_type); @@ -773,23 +772,23 @@ } #endif - if (do_furthest) - location = find_furthest_invalid_mesh_point(); - else - location = find_closest_mesh_point_of_type(INVALID, rx, ry, USE_PROBE_AS_REFERENCE, nullptr); + best = do_furthest + ? find_furthest_invalid_mesh_point() + : find_closest_mesh_point_of_type(INVALID, near, true); - if (location.x_index >= 0) { // mesh point found and is reachable by probe - const float rawx = mesh_index_to_xpos(location.x_index), - rawy = mesh_index_to_ypos(location.y_index), - measured_z = probe_at_point(rawx, rawy, stow_probe ? PROBE_PT_STOW : PROBE_PT_RAISE, g29_verbose_level); // TODO: Needs error handling - z_values[location.x_index][location.y_index] = measured_z; + if (best.pos.x >= 0) { // mesh point found and is reachable by probe + const float measured_z = probe_at_point( + best.meshpos(), + stow_probe ? PROBE_PT_STOW : PROBE_PT_RAISE, g29_verbose_level + ); + z_values[best.pos.x][best.pos.y] = measured_z; #if ENABLED(EXTENSIBLE_UI) - ExtUI::onMeshUpdate(location.x_index, location.y_index, measured_z); + ExtUI::onMeshUpdate(best, measured_z); #endif } SERIAL_FLUSH(); // Prevent host M105 buffer overrun. - } while (location.x_index >= 0 && --count); + } while (best.pos.x >= 0 && --count); STOW_PROBE(); @@ -800,8 +799,8 @@ restore_ubl_active_state_and_leave(); do_blocking_move_to_xy( - constrain(rx - probe_offset[X_AXIS], MESH_MIN_X, MESH_MAX_X), - constrain(ry - probe_offset[Y_AXIS], MESH_MIN_Y, MESH_MAX_Y) + constrain(near.x - probe_offset.x, MESH_MIN_X, MESH_MAX_X), + constrain(near.y - probe_offset.y, MESH_MIN_Y, MESH_MAX_Y) ); } @@ -835,7 +834,7 @@ idle(); gcode.reset_stepper_timeout(); // Keep steppers powered if (encoder_diff) { - do_blocking_move_to_z(current_position[Z_AXIS] + float(encoder_diff) * multiplier); + do_blocking_move_to_z(current_position.z + float(encoder_diff) * multiplier); encoder_diff = 0; } } @@ -844,7 +843,7 @@ float unified_bed_leveling::measure_point_with_encoder() { KEEPALIVE_STATE(PAUSED_FOR_USER); move_z_with_encoder(0.01f); - return current_position[Z_AXIS]; + return current_position.z; } static void echo_and_take_a_measurement() { SERIAL_ECHOLNPGM(" and take a measurement."); } @@ -863,7 +862,7 @@ echo_and_take_a_measurement(); const float z1 = measure_point_with_encoder(); - do_blocking_move_to_z(current_position[Z_AXIS] + SIZE_OF_LITTLE_RAISE); + do_blocking_move_to_z(current_position.z + SIZE_OF_LITTLE_RAISE); planner.synchronize(); SERIAL_ECHOPGM("Remove shim"); @@ -872,7 +871,7 @@ const float z2 = measure_point_with_encoder(); - do_blocking_move_to_z(current_position[Z_AXIS] + Z_CLEARANCE_BETWEEN_PROBES); + do_blocking_move_to_z(current_position.z + Z_CLEARANCE_BETWEEN_PROBES); const float thickness = ABS(z1 - z2); @@ -888,29 +887,33 @@ return thickness; } - void unified_bed_leveling::manually_probe_remaining_mesh(const float &rx, const float &ry, const float &z_clearance, const float &thick, const bool do_ubl_mesh_map) { + void unified_bed_leveling::manually_probe_remaining_mesh(const xy_pos_t &pos, const float &z_clearance, const float &thick, const bool do_ubl_mesh_map) { ui.capture(); save_ubl_active_state_and_disable(); // No bed level correction so only raw data is obtained - do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], z_clearance); + do_blocking_move_to(current_position.x, current_position.y, z_clearance); ui.return_to_status(); mesh_index_pair location; + xy_int8_t &lpos = location.pos; do { - location = find_closest_mesh_point_of_type(INVALID, rx, ry, USE_NOZZLE_AS_REFERENCE, nullptr); + location = find_closest_mesh_point_of_type(INVALID, pos); // It doesn't matter if the probe can't reach the NAN location. This is a manual probe. - if (location.x_index < 0 && location.y_index < 0) continue; + if (!location.valid()) continue; - const float xProbe = mesh_index_to_xpos(location.x_index), - yProbe = mesh_index_to_ypos(location.y_index); + const xyz_pos_t ppos = { + mesh_index_to_xpos(lpos.x), + mesh_index_to_ypos(lpos.y), + Z_CLEARANCE_BETWEEN_PROBES + }; - if (!position_is_reachable(xProbe, yProbe)) break; // SHOULD NOT OCCUR (find_closest_mesh_point only returns reachable points) + if (!position_is_reachable(ppos)) break; // SHOULD NOT OCCUR (find_closest_mesh_point only returns reachable points) LCD_MESSAGEPGM(MSG_UBL_MOVING_TO_NEXT); - do_blocking_move_to(xProbe, yProbe, Z_CLEARANCE_BETWEEN_PROBES); + do_blocking_move_to(ppos); do_blocking_move_to_z(z_clearance); KEEPALIVE_STATE(PAUSED_FOR_USER); @@ -932,20 +935,20 @@ return restore_ubl_active_state_and_leave(); } - z_values[location.x_index][location.y_index] = current_position[Z_AXIS] - thick; + z_values[lpos.x][lpos.y] = current_position.z - thick; #if ENABLED(EXTENSIBLE_UI) - ExtUI::onMeshUpdate(location.x_index, location.y_index, z_values[location.x_index][location.y_index]); + ExtUI::onMeshUpdate(location, z_values[lpos.x][lpos.y]); #endif if (g29_verbose_level > 2) - SERIAL_ECHOLNPAIR_F("Mesh Point Measured at: ", z_values[location.x_index][location.y_index], 6); + SERIAL_ECHOLNPAIR_F("Mesh Point Measured at: ", z_values[lpos.x][lpos.y], 6); SERIAL_FLUSH(); // Prevent host M105 buffer overrun. - } while (location.x_index >= 0 && location.y_index >= 0); + } while (location.valid()); if (do_ubl_mesh_map) display_map(g29_map_type); // show user where we're probing restore_ubl_active_state_and_leave(); - do_blocking_move_to(rx, ry, Z_CLEARANCE_DEPLOY_PROBE); + do_blocking_move_to(pos, Z_CLEARANCE_DEPLOY_PROBE); } inline void set_message_with_feedback(PGM_P const msg_P) { @@ -959,8 +962,8 @@ set_message_with_feedback(PSTR(MSG_EDITING_STOPPED)); } - void unified_bed_leveling::fine_tune_mesh(const float &rx, const float &ry, const bool do_ubl_mesh_map) { - if (!parser.seen('R')) // fine_tune_mesh() is special. If no repetition count flag is specified + void unified_bed_leveling::fine_tune_mesh(const xy_pos_t &pos, const bool do_ubl_mesh_map) { + if (!parser.seen('R')) // fine_tune_mesh() is special. If no repetition count flag is specified g29_repetition_cnt = 1; // do exactly one mesh location. Otherwise use what the parser decided. #if ENABLED(UBL_MESH_EDIT_MOVES_Z) @@ -973,7 +976,7 @@ mesh_index_pair location; - if (!position_is_reachable(rx, ry)) { + if (!position_is_reachable(pos)) { SERIAL_ECHOLNPGM("(X,Y) outside printable radius."); return; } @@ -981,76 +984,78 @@ save_ubl_active_state_and_disable(); LCD_MESSAGEPGM(MSG_UBL_FINE_TUNE_MESH); - ui.capture(); // Take over control of the LCD encoder + ui.capture(); // Take over control of the LCD encoder - do_blocking_move_to(rx, ry, Z_CLEARANCE_BETWEEN_PROBES); // Move to the given XY with probe clearance + do_blocking_move_to(pos, Z_CLEARANCE_BETWEEN_PROBES); // Move to the given XY with probe clearance #if ENABLED(UBL_MESH_EDIT_MOVES_Z) - do_blocking_move_to_z(h_offset); // Move Z to the given 'H' offset + do_blocking_move_to_z(h_offset); // Move Z to the given 'H' offset #endif - uint16_t not_done[16]; - memset(not_done, 0xFF, sizeof(not_done)); + MeshFlags done_flags{0}; + xy_int8_t &lpos = location.pos; do { - location = find_closest_mesh_point_of_type(SET_IN_BITMAP, rx, ry, USE_NOZZLE_AS_REFERENCE, not_done); - - if (location.x_index < 0) break; // Stop when there are no more reachable points + location = find_closest_mesh_point_of_type(SET_IN_BITMAP, pos, false, &done_flags); - bitmap_clear(not_done, location.x_index, location.y_index); // Mark this location as 'adjusted' so a new - // location is used on the next loop + if (lpos.x < 0) break; // Stop when there are no more reachable points - const float rawx = mesh_index_to_xpos(location.x_index), - rawy = mesh_index_to_ypos(location.y_index); + done_flags.mark(lpos); // Mark this location as 'adjusted' so a new + // location is used on the next loop + const xyz_pos_t raw = { + mesh_index_to_xpos(lpos.x), + mesh_index_to_ypos(lpos.y), + Z_CLEARANCE_BETWEEN_PROBES + }; - if (!position_is_reachable(rawx, rawy)) break; // SHOULD NOT OCCUR because find_closest_mesh_point_of_type will only return reachable + if (!position_is_reachable(raw)) break; // SHOULD NOT OCCUR (find_closest_mesh_point_of_type only returns reachable) - do_blocking_move_to(rawx, rawy, Z_CLEARANCE_BETWEEN_PROBES); // Move the nozzle to the edit point with probe clearance + do_blocking_move_to(raw); // Move the nozzle to the edit point with probe clearance #if ENABLED(UBL_MESH_EDIT_MOVES_Z) - do_blocking_move_to_z(h_offset); // Move Z to the given 'H' offset before editing + do_blocking_move_to_z(h_offset); // Move Z to the given 'H' offset before editing #endif KEEPALIVE_STATE(PAUSED_FOR_USER); - if (do_ubl_mesh_map) display_map(g29_map_type); // Display the current point + if (do_ubl_mesh_map) display_map(g29_map_type); // Display the current point ui.refresh(); - float new_z = z_values[location.x_index][location.y_index]; - if (isnan(new_z)) new_z = 0; // Invalid points begin at 0 - new_z = FLOOR(new_z * 1000) * 0.001f; // Chop off digits after the 1000ths place + float new_z = z_values[lpos.x][lpos.y]; + if (isnan(new_z)) new_z = 0; // Invalid points begin at 0 + new_z = FLOOR(new_z * 1000) * 0.001f; // Chop off digits after the 1000ths place lcd_mesh_edit_setup(new_z); do { new_z = lcd_mesh_edit(); #if ENABLED(UBL_MESH_EDIT_MOVES_Z) - do_blocking_move_to_z(h_offset + new_z); // Move the nozzle as the point is edited + do_blocking_move_to_z(h_offset + new_z); // Move the nozzle as the point is edited #endif idle(); - SERIAL_FLUSH(); // Prevent host M105 buffer overrun. + SERIAL_FLUSH(); // Prevent host M105 buffer overrun. } while (!ui.button_pressed()); - if (!lcd_map_control) ui.return_to_status(); // Just editing a single point? Return to status + if (!lcd_map_control) ui.return_to_status(); // Just editing a single point? Return to status - if (click_and_hold(abort_fine_tune)) break; // Button held down? Abort editing + if (click_and_hold(abort_fine_tune)) break; // Button held down? Abort editing - z_values[location.x_index][location.y_index] = new_z; // Save the updated Z value + z_values[lpos.x][lpos.y] = new_z; // Save the updated Z value #if ENABLED(EXTENSIBLE_UI) - ExtUI::onMeshUpdate(location.x_index, location.y_index, new_z); + ExtUI::onMeshUpdate(location, new_z); #endif - serial_delay(20); // No switch noise + serial_delay(20); // No switch noise ui.refresh(); - } while (location.x_index >= 0 && --g29_repetition_cnt > 0); + } while (lpos.x >= 0 && --g29_repetition_cnt > 0); ui.release(); if (do_ubl_mesh_map) display_map(g29_map_type); restore_ubl_active_state_and_leave(); - do_blocking_move_to(rx, ry, Z_CLEARANCE_BETWEEN_PROBES); + do_blocking_move_to(pos, Z_CLEARANCE_BETWEEN_PROBES); LCD_MESSAGEPGM(MSG_UBL_DONE_EDITING_MESH); SERIAL_ECHOLNPGM("Done Editing Mesh"); @@ -1073,11 +1078,6 @@ g29_constant = 0; g29_repetition_cnt = 0; - g29_x_flag = parser.seenval('X'); - g29_x_pos = g29_x_flag ? parser.value_float() : current_position[X_AXIS]; - g29_y_flag = parser.seenval('Y'); - g29_y_pos = g29_y_flag ? parser.value_float() : current_position[Y_AXIS]; - if (parser.seen('R')) { g29_repetition_cnt = parser.has_value() ? parser.value_int() : GRID_MAX_POINTS; NOMORE(g29_repetition_cnt, GRID_MAX_POINTS); @@ -1124,17 +1124,24 @@ #endif } - if (g29_x_flag != g29_y_flag) { + xy_seen.x = parser.seenval('X'); + float sx = xy_seen.x ? parser.value_float() : current_position.x; + xy_seen.y = parser.seenval('Y'); + float sy = xy_seen.y ? parser.value_float() : current_position.y; + + if (xy_seen.x != xy_seen.y) { SERIAL_ECHOLNPGM("Both X & Y locations must be specified.\n"); err_flag = true; } // If X or Y are not valid, use center of the bed values - if (!WITHIN(g29_x_pos, X_MIN_BED, X_MAX_BED)) g29_x_pos = X_CENTER; - if (!WITHIN(g29_y_pos, Y_MIN_BED, Y_MAX_BED)) g29_y_pos = Y_CENTER; + if (!WITHIN(sx, X_MIN_BED, X_MAX_BED)) sx = X_CENTER; + if (!WITHIN(sy, Y_MIN_BED, Y_MAX_BED)) sy = Y_CENTER; if (err_flag) return UBL_ERR; + g29_pos.set(sx, sy); + /** * Activate or deactivate UBL * Note: UBL's G29 restores the state set here when done. @@ -1213,26 +1220,22 @@ mesh_index_pair unified_bed_leveling::find_furthest_invalid_mesh_point() { - bool found_a_NAN = false, found_a_real = false; + bool found_a_NAN = false, found_a_real = false; - mesh_index_pair out_mesh; - out_mesh.x_index = out_mesh.y_index = -1; - out_mesh.distance = -99999.99f; + mesh_index_pair farthest { -1, -1, -99999.99 }; for (int8_t i = 0; i < GRID_MAX_POINTS_X; i++) { for (int8_t j = 0; j < GRID_MAX_POINTS_Y; j++) { - if (isnan(z_values[i][j])) { // Check to see if this location holds an invalid mesh point - - const float mx = mesh_index_to_xpos(i), - my = mesh_index_to_ypos(j); + if (isnan(z_values[i][j])) { // Invalid mesh point? - if (!position_is_reachable_by_probe(mx, my)) // make sure the probe can get to the mesh point + // Skip points the probe can't reach + if (!position_is_reachable_by_probe(mesh_index_to_xpos(i), mesh_index_to_ypos(j))) continue; found_a_NAN = true; - int8_t closest_x = -1, closest_y = -1; + xy_int8_t near { -1, -1 }; float d1, d2 = 99999.9f; for (int8_t k = 0; k < GRID_MAX_POINTS_X; k++) { for (int8_t l = 0; l < GRID_MAX_POINTS_Y; l++) { @@ -1245,84 +1248,75 @@ d1 = HYPOT(i - k, j - l) + (1.0f / ((millis() % 47) + 13)); - if (d1 < d2) { // found a closer distance from invalid mesh point at (i,j) to defined mesh point at (k,l) - d2 = d1; // found a closer location with - closest_x = i; // an assigned mesh point value - closest_y = j; + if (d1 < d2) { // Invalid mesh point (i,j) is closer to the defined point (k,l) + d2 = d1; + near.set(i, j); } } } } // - // At this point d2 should have the closest defined mesh point to invalid mesh point (i,j) + // At this point d2 should have the near defined mesh point to invalid mesh point (i,j) // - if (found_a_real && (closest_x >= 0) && (d2 > out_mesh.distance)) { - out_mesh.distance = d2; // found an invalid location with a greater distance - out_mesh.x_index = closest_x; // to a defined mesh point - out_mesh.y_index = closest_y; + if (found_a_real && near.x >= 0 && d2 > farthest.distance) { + farthest.pos = near; // Found an invalid location farther from the defined mesh point + farthest.distance = d2; } } } // for j } // for i if (!found_a_real && found_a_NAN) { // if the mesh is totally unpopulated, start the probing - out_mesh.x_index = GRID_MAX_POINTS_X / 2; - out_mesh.y_index = GRID_MAX_POINTS_Y / 2; - out_mesh.distance = 1; + farthest.pos.set(GRID_MAX_POINTS_X / 2, GRID_MAX_POINTS_Y / 2); + farthest.distance = 1; } - return out_mesh; + return farthest; } - mesh_index_pair unified_bed_leveling::find_closest_mesh_point_of_type(const MeshPointType type, const float &rx, const float &ry, const bool probe_as_reference, uint16_t bits[16]) { - mesh_index_pair out_mesh; - out_mesh.x_index = out_mesh.y_index = -1; - out_mesh.distance = -99999.9f; + mesh_index_pair unified_bed_leveling::find_closest_mesh_point_of_type(const MeshPointType type, const xy_pos_t &pos, const bool probe_relative/*=false*/, MeshFlags *done_flags/*=nullptr*/) { + mesh_index_pair closest; + closest.invalidate(); + closest.distance = -99999.9f; - // Get our reference position. Either the nozzle or probe location. - const float px = rx + (probe_as_reference == USE_PROBE_AS_REFERENCE ? probe_offset[X_AXIS] : 0), - py = ry + (probe_as_reference == USE_PROBE_AS_REFERENCE ? probe_offset[Y_AXIS] : 0); + // Get the reference position, either nozzle or probe + const xy_pos_t ref = probe_relative ? pos + probe_offset : pos; float best_so_far = 99999.99f; for (int8_t i = 0; i < GRID_MAX_POINTS_X; i++) { for (int8_t j = 0; j < GRID_MAX_POINTS_Y; j++) { - - if ( (type == INVALID && isnan(z_values[i][j])) // Check to see if this location holds the right thing - || (type == REAL && !isnan(z_values[i][j])) - || (type == SET_IN_BITMAP && is_bitmap_set(bits, i, j)) + if ( (type == (isnan(z_values[i][j]) ? INVALID : REAL)) + || (type == SET_IN_BITMAP && !done_flags->marked(i, j)) ) { - // We only get here if we found a Mesh Point of the specified type - - const float mx = mesh_index_to_xpos(i), - my = mesh_index_to_ypos(j); + // Found a Mesh Point of the specified type! + const xy_pos_t mpos = { mesh_index_to_xpos(i), mesh_index_to_ypos(j) }; // If using the probe as the reference there are some unreachable locations. // Also for round beds, there are grid points outside the bed the nozzle can't reach. // Prune them from the list and ignore them till the next Phase (manual nozzle probing). - if (probe_as_reference ? !position_is_reachable_by_probe(mx, my) : !position_is_reachable(mx, my)) + if (probe_relative ? !position_is_reachable_by_probe(mpos) : !position_is_reachable(mpos)) continue; // Reachable. Check if it's the best_so_far location to the nozzle. - float distance = HYPOT(px - mx, py - my); + const xy_pos_t diff = current_position - mpos; + const float distance = (ref - mpos).magnitude() + diff.magnitude() * 0.1f; // factor in the distance from the current location for the normal case // so the nozzle isn't running all over the bed. - distance += HYPOT(current_position[X_AXIS] - mx, current_position[Y_AXIS] - my) * 0.1f; if (distance < best_so_far) { - best_so_far = distance; // We found a closer location with - out_mesh.x_index = i; // the specified type of mesh value. - out_mesh.y_index = j; - out_mesh.distance = best_so_far; + best_so_far = distance; // Found a closer location with the desired value type. + closest.pos.set(i, j); + closest.distance = best_so_far; } } } // for j } // for i - return out_mesh; + return closest; } /** @@ -1332,20 +1326,20 @@ */ bool unified_bed_leveling::smart_fill_one(const uint8_t x, const uint8_t y, const int8_t xdir, const int8_t ydir) { - const int8_t x1 = x + xdir, x2 = x1 + xdir, - y1 = y + ydir, y2 = y1 + ydir; - // A NAN next to a pair of real values? - if (isnan(z_values[x][y]) && !isnan(z_values[x1][y1]) && !isnan(z_values[x2][y2])) { - if (z_values[x1][y1] < z_values[x2][y2]) // Angled downward? - z_values[x][y] = z_values[x1][y1]; // Use nearest (maybe a little too high.) - else - z_values[x][y] = 2.0f * z_values[x1][y1] - z_values[x2][y2]; // Angled upward... - - #if ENABLED(EXTENSIBLE_UI) - ExtUI::onMeshUpdate(x, y, z_values[x][y]); - #endif - - return true; + const float v = z_values[x][y]; + if (isnan(v)) { // A NAN... + const int8_t dx = x + xdir, dy = y + ydir; + const float v1 = z_values[dx][dy]; + if (!isnan(v1)) { // ...next to a pair of real values? + const float v2 = z_values[dx + xdir][dy + ydir]; + if (!isnan(v2)) { + z_values[x][y] = v1 < v2 ? v1 : v1 + v1 - v2; + #if ENABLED(EXTENSIBLE_UI) + ExtUI::onMeshUpdate(x, y, z_values[pos.x][pos.y]); + #endif + return true; + } + } } return false; } @@ -1391,15 +1385,15 @@ dx = (x_max - x_min) / (g29_grid_size - 1), dy = (y_max - y_min) / (g29_grid_size - 1); - vector_3 points[3] = { + const vector_3 points[3] = { #if ENABLED(HAS_FIXED_3POINT) - vector_3(PROBE_PT_1_X, PROBE_PT_1_Y, 0), - vector_3(PROBE_PT_2_X, PROBE_PT_2_Y, 0), - vector_3(PROBE_PT_3_X, PROBE_PT_3_Y, 0) + { PROBE_PT_1_X, PROBE_PT_1_Y, 0 }, + { PROBE_PT_2_X, PROBE_PT_2_Y, 0 }, + { PROBE_PT_3_X, PROBE_PT_3_Y, 0 } #else - vector_3(x_min, y_min, 0), - vector_3(x_max, y_min, 0), - vector_3((x_max - x_min) / 2, y_max, 0) + { x_min, y_min, 0 }, + { x_max, y_min, 0 }, + { (x_max - x_min) / 2, y_max, 0 } #endif }; @@ -1419,11 +1413,11 @@ ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 1/3")); #endif - measured_z = probe_at_point(points[0].x, points[0].y, PROBE_PT_RAISE, g29_verbose_level); + measured_z = probe_at_point(points[0], PROBE_PT_RAISE, g29_verbose_level); if (isnan(measured_z)) abort_flag = true; else { - measured_z -= get_z_correction(points[0].x, points[0].y); + measured_z -= get_z_correction(points[0]); #ifdef VALIDATE_MESH_TILT z1 = measured_z; #endif @@ -1431,7 +1425,7 @@ serial_spaces(16); SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z); } - incremental_LSF(&lsf_results, points[0].x, points[0].y, measured_z); + incremental_LSF(&lsf_results, points[0], measured_z); } if (!abort_flag) { @@ -1440,19 +1434,19 @@ ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 2/3")); #endif - measured_z = probe_at_point(points[1].x, points[1].y, PROBE_PT_RAISE, g29_verbose_level); + measured_z = probe_at_point(points[1], PROBE_PT_RAISE, g29_verbose_level); #ifdef VALIDATE_MESH_TILT z2 = measured_z; #endif if (isnan(measured_z)) abort_flag = true; else { - measured_z -= get_z_correction(points[1].x, points[1].y); + measured_z -= get_z_correction(points[1]); if (g29_verbose_level > 3) { serial_spaces(16); SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z); } - incremental_LSF(&lsf_results, points[1].x, points[1].y, measured_z); + incremental_LSF(&lsf_results, points[1], measured_z); } } @@ -1462,19 +1456,19 @@ ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " 3/3")); #endif - measured_z = probe_at_point(points[2].x, points[2].y, PROBE_PT_STOW, g29_verbose_level); + measured_z = probe_at_point(points[2], PROBE_PT_STOW, g29_verbose_level); #ifdef VALIDATE_MESH_TILT z3 = measured_z; #endif if (isnan(measured_z)) abort_flag = true; else { - measured_z -= get_z_correction(points[2].x, points[2].y); + measured_z -= get_z_correction(points[2]); if (g29_verbose_level > 3) { serial_spaces(16); SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z); } - incremental_LSF(&lsf_results, points[2].x, points[2].y, measured_z); + incremental_LSF(&lsf_results, points[2], measured_z); } } @@ -1494,10 +1488,11 @@ uint16_t total_points = g29_grid_size * g29_grid_size, point_num = 1; + xy_pos_t rpos; for (uint8_t ix = 0; ix < g29_grid_size; ix++) { - const float rx = x_min + ix * dx; + rpos.x = x_min + ix * dx; for (int8_t iy = 0; iy < g29_grid_size; iy++) { - const float ry = y_min + dy * (zig_zag ? g29_grid_size - 1 - iy : iy); + rpos.y = y_min + dy * (zig_zag ? g29_grid_size - 1 - iy : iy); if (!abort_flag) { SERIAL_ECHOLNPAIR("Tilting mesh point ", point_num, "/", total_points, "\n"); @@ -1505,24 +1500,24 @@ ui.status_printf_P(0, PSTR(MSG_LCD_TILTING_MESH " %i/%i"), point_num, total_points); #endif - measured_z = probe_at_point(rx, ry, parser.seen('E') ? PROBE_PT_STOW : PROBE_PT_RAISE, g29_verbose_level); // TODO: Needs error handling + measured_z = probe_at_point(rpos, parser.seen('E') ? PROBE_PT_STOW : PROBE_PT_RAISE, g29_verbose_level); // TODO: Needs error handling abort_flag = isnan(measured_z); if (DEBUGGING(LEVELING)) { + const xy_pos_t lpos = rpos.asLogical(); DEBUG_CHAR('('); - DEBUG_ECHO_F(rx, 7); + DEBUG_ECHO_F(rpos.x, 7); DEBUG_CHAR(','); - DEBUG_ECHO_F(ry, 7); - DEBUG_ECHOPGM(") logical: ("); - DEBUG_ECHO_F(LOGICAL_X_POSITION(rx), 7); + DEBUG_ECHO_F(rpos.y, 7); + DEBUG_ECHOPAIR_F(") logical: (", lpos.x, 7); DEBUG_CHAR(','); - DEBUG_ECHO_F(LOGICAL_Y_POSITION(ry), 7); + DEBUG_ECHO_F(lpos.y, 7); DEBUG_ECHOPAIR_F(") measured: ", measured_z, 7); - DEBUG_ECHOPAIR_F(" correction: ", get_z_correction(rx, ry), 7); + DEBUG_ECHOPAIR_F(" correction: ", get_z_correction(rpos), 7); } - measured_z -= get_z_correction(rx, ry) /* + probe_offset[Z_AXIS] */ ; + measured_z -= get_z_correction(rpos) /* + probe_offset.z */ ; if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR_F(" final >>>---> ", measured_z, 7); @@ -1530,7 +1525,7 @@ serial_spaces(16); SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z); } - incremental_LSF(&lsf_results, rx, ry, measured_z); + incremental_LSF(&lsf_results, rpos, measured_z); } point_num++; @@ -1564,33 +1559,33 @@ for (uint8_t i = 0; i < GRID_MAX_POINTS_X; i++) { for (uint8_t j = 0; j < GRID_MAX_POINTS_Y; j++) { - float x_tmp = mesh_index_to_xpos(i), - y_tmp = mesh_index_to_ypos(j), - z_tmp = z_values[i][j]; + float mx = mesh_index_to_xpos(i), + my = mesh_index_to_ypos(j), + mz = z_values[i][j]; if (DEBUGGING(LEVELING)) { - DEBUG_ECHOPAIR_F("before rotation = [", x_tmp, 7); + DEBUG_ECHOPAIR_F("before rotation = [", mx, 7); DEBUG_CHAR(','); - DEBUG_ECHO_F(y_tmp, 7); + DEBUG_ECHO_F(my, 7); DEBUG_CHAR(','); - DEBUG_ECHO_F(z_tmp, 7); + DEBUG_ECHO_F(mz, 7); DEBUG_ECHOPGM("] ---> "); DEBUG_DELAY(20); } - apply_rotation_xyz(rotation, x_tmp, y_tmp, z_tmp); + apply_rotation_xyz(rotation, mx, my, mz); if (DEBUGGING(LEVELING)) { - DEBUG_ECHOPAIR_F("after rotation = [", x_tmp, 7); + DEBUG_ECHOPAIR_F("after rotation = [", mx, 7); DEBUG_CHAR(','); - DEBUG_ECHO_F(y_tmp, 7); + DEBUG_ECHO_F(my, 7); DEBUG_CHAR(','); - DEBUG_ECHO_F(z_tmp, 7); + DEBUG_ECHO_F(mz, 7); DEBUG_ECHOLNPGM("]"); - DEBUG_DELAY(55); + DEBUG_DELAY(20); } - z_values[i][j] = z_tmp - lsf_results.D; + z_values[i][j] = mz - lsf_results.D; #if ENABLED(EXTENSIBLE_UI) ExtUI::onMeshUpdate(i, j, z_values[i][j]); #endif @@ -1613,41 +1608,32 @@ DEBUG_EOL(); /** - * The following code can be used to check the validity of the mesh tilting algorithm. - * When a 3-Point Mesh Tilt is done, the same algorithm is used as the grid based tilting. - * The only difference is just 3 points are used in the calculations. That fact guarantees - * each probed point should have an exact match when a get_z_correction() for that location - * is calculated. The Z error between the probed point locations and the get_z_correction() + * Use the code below to check the validity of the mesh tilting algorithm. + * 3-Point Mesh Tilt uses the same algorithm as grid-based tilting, but only + * three points are used in the calculation. This guarantees that each probed point + * has an exact match when get_z_correction() for that location is calculated. + * The Z error between the probed point locations and the get_z_correction() * numbers for those locations should be 0. */ #ifdef VALIDATE_MESH_TILT - float t, t1, d; - t = normal.x * x_min + normal.y * y_min; - d = t + normal.z * z1; - DEBUG_ECHOPAIR_F("D from 1st point: ", d, 6); - DEBUG_ECHOLNPAIR_F(" Z error: ", normal.z * z1 - get_z_correction(x_min, y_min), 6); - - t = normal.x * x_max + normal.y * y_min; - d = t + normal.z * z2; - DEBUG_EOL(); - DEBUG_ECHOPAIR_F("D from 2nd point: ", d, 6); - DEBUG_ECHOLNPAIR_F(" Z error: ", normal.z * z2 - get_z_correction(x_max, y_min), 6); - - t = normal.x * ((x_max - x_min) / 2) + normal.y * (y_min); - d = t + normal.z * z3; - DEBUG_ECHOPAIR_F("D from 3rd point: ", d, 6); - DEBUG_ECHOLNPAIR_F(" Z error: ", normal.z * z3 - get_z_correction((x_max - x_min) / 2, y_max), 6); - - t = normal.x * (Z_SAFE_HOMING_X_POINT) + normal.y * (Z_SAFE_HOMING_Y_POINT); - d = t + normal.z * 0; - DEBUG_ECHOLNPAIR_F("D from home location with Z=0 : ", d, 6); - - t = normal.x * (Z_SAFE_HOMING_X_POINT) + normal.y * (Z_SAFE_HOMING_Y_POINT); - d = t + get_z_correction(Z_SAFE_HOMING_X_POINT, Z_SAFE_HOMING_Y_POINT); // normal.z * 0; - DEBUG_ECHOPAIR_F("D from home location using mesh value for Z: ", d, 6); - + auto d_from = []() { DEBUG_ECHOPGM("D from "); }; + auto normed = [&](const xy_pos_t &pos, const float &zadd) { + return normal.x * pos.x + normal.y * pos.y + zadd; + }; + auto debug_pt = [](PGM_P const pre, const xy_pos_t &pos, const float &zadd) { + d_from(); serialprintPGM(pre); + DEBUG_ECHO_F(normed(pos, zadd), 6); + DEBUG_ECHOLNPAIR_F(" Z error: ", zadd - get_z_correction(pos), 6); + }; + debug_pt(PSTR("1st point: "), probe_pt[0], normal.z * z1); + debug_pt(PSTR("2nd point: "), probe_pt[1], normal.z * z2); + debug_pt(PSTR("3rd point: "), probe_pt[2], normal.z * z3); + d_from(); DEBUG_ECHOPGM("safe home with Z="); + DEBUG_ECHOLNPAIR_F("0 : ", normed(safe_homing_xy, 0), 6); + d_from(); DEBUG_ECHOPGM("safe home with Z="); + DEBUG_ECHOLNPAIR_F("mesh value ", normed(safe_homing_xy, get_z_correction(safe_homing_xy)), 6); DEBUG_ECHOPAIR(" Z error: (", Z_SAFE_HOMING_X_POINT, ",", Z_SAFE_HOMING_Y_POINT); - DEBUG_ECHOLNPAIR_F(") = ", get_z_correction(Z_SAFE_HOMING_X_POINT, Z_SAFE_HOMING_Y_POINT), 6); + DEBUG_ECHOLNPAIR_F(") = ", get_z_correction(safe_homing_xy), 6); #endif } // DEBUGGING(LEVELING) @@ -1676,21 +1662,23 @@ if (!isnan(z_values[jx][jy])) SBI(bitmap[jx], jy); + xy_pos_t ppos; for (uint8_t ix = 0; ix < GRID_MAX_POINTS_X; ix++) { - const float px = mesh_index_to_xpos(ix); + ppos.x = mesh_index_to_xpos(ix); for (uint8_t iy = 0; iy < GRID_MAX_POINTS_Y; iy++) { - const float py = mesh_index_to_ypos(iy); + ppos.y = mesh_index_to_ypos(iy); if (isnan(z_values[ix][iy])) { - // undefined mesh point at (px,py), compute weighted LSF from original valid mesh points. + // undefined mesh point at (ppos.x,ppos.y), compute weighted LSF from original valid mesh points. incremental_LSF_reset(&lsf_results); + xy_pos_t rpos; for (uint8_t jx = 0; jx < GRID_MAX_POINTS_X; jx++) { - const float rx = mesh_index_to_xpos(jx); + rpos.x = mesh_index_to_xpos(jx); for (uint8_t jy = 0; jy < GRID_MAX_POINTS_Y; jy++) { if (TEST(bitmap[jx], jy)) { - const float ry = mesh_index_to_ypos(jy), - rz = z_values[jx][jy], - w = 1 + weight_scaled / HYPOT((rx - px), (ry - py)); - incremental_WLSF(&lsf_results, rx, ry, rz, w); + rpos.y = mesh_index_to_ypos(jy); + const float rz = z_values[jx][jy], + w = 1.0f + weight_scaled / (rpos - ppos).magnitude(); + incremental_WLSF(&lsf_results, rpos, rz, w); } } } @@ -1698,12 +1686,12 @@ SERIAL_ECHOLNPGM("Insufficient data"); return; } - const float ez = -lsf_results.D - lsf_results.A * px - lsf_results.B * py; + const float ez = -lsf_results.D - lsf_results.A * ppos.x - lsf_results.B * ppos.y; z_values[ix][iy] = ez; #if ENABLED(EXTENSIBLE_UI) ExtUI::onMeshUpdate(ix, iy, z_values[ix][iy]); #endif - idle(); // housekeeping + idle(); // housekeeping } } } @@ -1734,7 +1722,7 @@ adjust_mesh_to_mean(g29_c_flag, g29_constant); #if HAS_BED_PROBE - SERIAL_ECHOLNPAIR_F("Probe Offset M851 Z", probe_offset[Z_AXIS], 7); + SERIAL_ECHOLNPAIR_F("Probe Offset M851 Z", probe_offset.z, 7); #endif SERIAL_ECHOLNPAIR("MESH_MIN_X " STRINGIFY(MESH_MIN_X) "=", MESH_MIN_X); serial_delay(50); diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp index fcce41169a32..a0d5518c451a 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp @@ -35,12 +35,6 @@ #include "../../../Marlin.h" #include -#if AVR_AT90USB1286_FAMILY // Teensyduino & Printrboard IDE extensions have compile errors without this - inline void set_current_from_destination() { COPY(current_position, destination); } -#else - extern void set_current_from_destination(); -#endif - #if !UBL_SEGMENTED void unified_bed_leveling::line_to_destination_cartesian(const feedRate_t &scaled_fr_mm_s, const uint8_t extruder) { @@ -50,60 +44,57 @@ * just do the required Z-Height correction, call the Planner's buffer_line() routine, and leave */ #if HAS_POSITION_MODIFIERS - float start[XYZE] = { current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS] }, - end[XYZE] = { destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS] }; + xyze_pos_t start = current_position, end = destination; planner.apply_modifiers(start); planner.apply_modifiers(end); #else - const float (&start)[XYZE] = current_position, - (&end)[XYZE] = destination; + const xyze_pos_t &start = current_position, &end = destination; #endif - const int cell_start_xi = get_cell_index_x(start[X_AXIS]), - cell_start_yi = get_cell_index_y(start[Y_AXIS]), - cell_dest_xi = get_cell_index_x(end[X_AXIS]), - cell_dest_yi = get_cell_index_y(end[Y_AXIS]); + const xy_int8_t istart = cell_indexes(start), iend = cell_indexes(end); // A move within the same cell needs no splitting - if (cell_start_xi == cell_dest_xi && cell_start_yi == cell_dest_yi) { + if (istart == iend) { // For a move off the bed, use a constant Z raise - if (!WITHIN(cell_dest_xi, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(cell_dest_yi, 0, GRID_MAX_POINTS_Y - 1)) { + if (!WITHIN(iend.x, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(iend.y, 0, GRID_MAX_POINTS_Y - 1)) { // Note: There is no Z Correction in this case. We are off the grid and don't know what // a reasonable correction would be. If the user has specified a UBL_Z_RAISE_WHEN_OFF_MESH // value, that will be used instead of a calculated (Bi-Linear interpolation) correction. - const float z_raise = 0.0 - #ifdef UBL_Z_RAISE_WHEN_OFF_MESH - + UBL_Z_RAISE_WHEN_OFF_MESH - #endif - ; - planner.buffer_segment(end[X_AXIS], end[Y_AXIS], end[Z_AXIS] + z_raise, end[E_AXIS], scaled_fr_mm_s, extruder); - set_current_from_destination(); + #ifdef UBL_Z_RAISE_WHEN_OFF_MESH + end.z += UBL_Z_RAISE_WHEN_OFF_MESH; + #endif + planner.buffer_segment(end, scaled_fr_mm_s, extruder); + current_position = destination; return; } FINAL_MOVE: // The distance is always MESH_X_DIST so multiply by the constant reciprocal. - const float xratio = (end[X_AXIS] - mesh_index_to_xpos(cell_dest_xi)) * RECIPROCAL(MESH_X_DIST); + const float xratio = (end.x - mesh_index_to_xpos(iend.x)) * RECIPROCAL(MESH_X_DIST); - float z1 = z_values[cell_dest_xi ][cell_dest_yi ] + xratio * - (z_values[cell_dest_xi + 1][cell_dest_yi ] - z_values[cell_dest_xi][cell_dest_yi ]), - z2 = z_values[cell_dest_xi ][cell_dest_yi + 1] + xratio * - (z_values[cell_dest_xi + 1][cell_dest_yi + 1] - z_values[cell_dest_xi][cell_dest_yi + 1]); - - if (cell_dest_xi >= GRID_MAX_POINTS_X - 1) z1 = z2 = 0.0; + float z1, z2; + if (iend.x >= GRID_MAX_POINTS_X - 1) + z1 = z2 = 0.0; + else { + z1 = z_values[iend.x ][iend.y ] + xratio * + (z_values[iend.x + 1][iend.y ] - z_values[iend.x][iend.y ]), + z2 = z_values[iend.x ][iend.y + 1] + xratio * + (z_values[iend.x + 1][iend.y + 1] - z_values[iend.x][iend.y + 1]); + } // X cell-fraction done. Interpolate the two Z offsets with the Y fraction for the final Z offset. - const float yratio = (end[Y_AXIS] - mesh_index_to_ypos(cell_dest_yi)) * RECIPROCAL(MESH_Y_DIST), - z0 = cell_dest_yi < GRID_MAX_POINTS_Y - 1 ? (z1 + (z2 - z1) * yratio) * planner.fade_scaling_factor_for_z(end[Z_AXIS]) : 0.0; + const float yratio = (end.y - mesh_index_to_ypos(iend.y)) * RECIPROCAL(MESH_Y_DIST), + z0 = iend.y < GRID_MAX_POINTS_Y - 1 ? (z1 + (z2 - z1) * yratio) * planner.fade_scaling_factor_for_z(end.z) : 0.0; // Undefined parts of the Mesh in z_values[][] are NAN. // Replace NAN corrections with 0.0 to prevent NAN propagation. - planner.buffer_segment(end[X_AXIS], end[Y_AXIS], end[Z_AXIS] + (isnan(z0) ? 0.0 : z0), end[E_AXIS], scaled_fr_mm_s, extruder); - set_current_from_destination(); + if (!isnan(z0)) end.z += z0; + planner.buffer_segment(end, scaled_fr_mm_s, extruder); + current_position = destination; return; } @@ -112,17 +103,11 @@ * case - crossing only one X or Y line - after details are worked out to reduce computation. */ - const float dx = end[X_AXIS] - start[X_AXIS], - dy = end[Y_AXIS] - start[Y_AXIS]; - - const int left_flag = dx < 0.0 ? 1 : 0, - down_flag = dy < 0.0 ? 1 : 0; - - const float adx = left_flag ? -dx : dx, - ady = down_flag ? -dy : dy; - - const int dxi = cell_start_xi == cell_dest_xi ? 0 : left_flag ? -1 : 1, - dyi = cell_start_yi == cell_dest_yi ? 0 : down_flag ? -1 : 1; + const xy_float_t dist = end - start; + const xy_bool_t neg { dist.x < 0, dist.y < 0 }; + const xy_int8_t ineg { int8_t(neg.x), int8_t(neg.y) }; + const xy_float_t sign { neg.x ? -1.0f : 1.0f, neg.y ? -1.0f : 1.0f }; + const xy_int8_t iadd { int8_t(iend.x == istart.x ? 0 : sign.x), int8_t(iend.y == istart.y ? 0 : sign.y) }; /** * Compute the extruder scaling factor for each partial move, checking for @@ -132,64 +117,64 @@ * components. The larger of the two is used to preserve precision. */ - const bool use_x_dist = adx > ady; + const xy_float_t ad = sign * dist; + const bool use_x_dist = ad.x > ad.y; - float on_axis_distance = use_x_dist ? dx : dy, - e_position = end[E_AXIS] - start[E_AXIS], - z_position = end[Z_AXIS] - start[Z_AXIS]; + float on_axis_distance = use_x_dist ? dist.x : dist.y, + e_position = end.e - start.e, + z_position = end.z - start.z; - const float e_normalized_dist = e_position / on_axis_distance, + const float e_normalized_dist = e_position / on_axis_distance, // Allow divide by zero z_normalized_dist = z_position / on_axis_distance; - int current_xi = cell_start_xi, - current_yi = cell_start_yi; + xy_int8_t icell = istart; - const float m = dy / dx, - c = start[Y_AXIS] - m * start[X_AXIS]; + const float ratio = dist.y / dist.x, // Allow divide by zero + c = start.y - ratio * start.x; - const bool inf_normalized_flag = (isinf(e_normalized_dist) != 0), - inf_m_flag = (isinf(m) != 0); + const bool inf_normalized_flag = isinf(e_normalized_dist), + inf_ratio_flag = isinf(ratio); /** * Handle vertical lines that stay within one column. * These need not be perfectly vertical. */ - if (dxi == 0) { // Vertical line? - current_yi += down_flag; // Line going down? Just go to the bottom. - while (current_yi != cell_dest_yi + down_flag) { - current_yi += dyi; - const float next_mesh_line_y = mesh_index_to_ypos(current_yi); + if (iadd.x == 0) { // Vertical line? + icell.y += ineg.y; // Line going down? Just go to the bottom. + while (icell.y != iend.y + ineg.y) { + icell.y += iadd.y; + const float next_mesh_line_y = mesh_index_to_ypos(icell.y); /** * Skip the calculations for an infinite slope. * For others the next X is the same so this can continue. * Calculate X at the next Y mesh line. */ - const float rx = inf_m_flag ? start[X_AXIS] : (next_mesh_line_y - c) / m; + const float rx = inf_ratio_flag ? start.x : (next_mesh_line_y - c) / ratio; - float z0 = z_correction_for_x_on_horizontal_mesh_line(rx, current_xi, current_yi) - * planner.fade_scaling_factor_for_z(end[Z_AXIS]); + float z0 = z_correction_for_x_on_horizontal_mesh_line(rx, icell.x, icell.y) + * planner.fade_scaling_factor_for_z(end.z); // Undefined parts of the Mesh in z_values[][] are NAN. // Replace NAN corrections with 0.0 to prevent NAN propagation. if (isnan(z0)) z0 = 0.0; - const float ry = mesh_index_to_ypos(current_yi); + const float ry = mesh_index_to_ypos(icell.y); /** * Without this check, it's possible to generate a zero length move, as in the case where * the line is heading down, starting exactly on a mesh line boundary. Since this is rare * it might be fine to remove this check and let planner.buffer_segment() filter it out. */ - if (ry != start[Y_AXIS]) { - if (!inf_normalized_flag) { - on_axis_distance = use_x_dist ? rx - start[X_AXIS] : ry - start[Y_AXIS]; - e_position = start[E_AXIS] + on_axis_distance * e_normalized_dist; - z_position = start[Z_AXIS] + on_axis_distance * z_normalized_dist; + if (ry != start.y) { + if (!inf_normalized_flag) { // fall-through faster than branch + on_axis_distance = use_x_dist ? rx - start.x : ry - start.y; + e_position = start.e + on_axis_distance * e_normalized_dist; + z_position = start.z + on_axis_distance * z_normalized_dist; } else { - e_position = end[E_AXIS]; - z_position = end[Z_AXIS]; + e_position = end.e; + z_position = end.z; } planner.buffer_segment(rx, ry, z_position + z0, e_position, scaled_fr_mm_s, extruder); @@ -197,10 +182,10 @@ } // At the final destination? Usually not, but when on a Y Mesh Line it's completed. - if (current_position[X_AXIS] != end[X_AXIS] || current_position[Y_AXIS] != end[Y_AXIS]) + if (xy_pos_t(current_position) != xy_pos_t(end)) goto FINAL_MOVE; - set_current_from_destination(); + current_position = destination; return; } @@ -208,36 +193,34 @@ * Handle horizontal lines that stay within one row. * These need not be perfectly horizontal. */ - if (dyi == 0) { // Horizontal line? - current_xi += left_flag; // Heading left? Just go to the left edge of the cell for the first move. - while (current_xi != cell_dest_xi + left_flag) { - current_xi += dxi; - const float next_mesh_line_x = mesh_index_to_xpos(current_xi), - ry = m * next_mesh_line_x + c; // Calculate Y at the next X mesh line + if (iadd.y == 0) { // Horizontal line? + icell.x += ineg.x; // Heading left? Just go to the left edge of the cell for the first move. + while (icell.x != iend.x + ineg.x) { + icell.x += iadd.x; + const float rx = mesh_index_to_xpos(icell.x); + const float ry = ratio * rx + c; // Calculate Y at the next X mesh line - float z0 = z_correction_for_y_on_vertical_mesh_line(ry, current_xi, current_yi) - * planner.fade_scaling_factor_for_z(end[Z_AXIS]); + float z0 = z_correction_for_y_on_vertical_mesh_line(ry, icell.x, icell.y) + * planner.fade_scaling_factor_for_z(end.z); // Undefined parts of the Mesh in z_values[][] are NAN. // Replace NAN corrections with 0.0 to prevent NAN propagation. if (isnan(z0)) z0 = 0.0; - const float rx = mesh_index_to_xpos(current_xi); - /** * Without this check, it's possible to generate a zero length move, as in the case where * the line is heading left, starting exactly on a mesh line boundary. Since this is rare * it might be fine to remove this check and let planner.buffer_segment() filter it out. */ - if (rx != start[X_AXIS]) { + if (rx != start.x) { if (!inf_normalized_flag) { - on_axis_distance = use_x_dist ? rx - start[X_AXIS] : ry - start[Y_AXIS]; - e_position = start[E_AXIS] + on_axis_distance * e_normalized_dist; // is based on X or Y because this is a horizontal move - z_position = start[Z_AXIS] + on_axis_distance * z_normalized_dist; + on_axis_distance = use_x_dist ? rx - start.x : ry - start.y; + e_position = start.e + on_axis_distance * e_normalized_dist; // is based on X or Y because this is a horizontal move + z_position = start.z + on_axis_distance * z_normalized_dist; } else { - e_position = end[E_AXIS]; - z_position = end[Z_AXIS]; + e_position = end.e; + z_position = end.z; } if (!planner.buffer_segment(rx, ry, z_position + z0, e_position, scaled_fr_mm_s, extruder)) @@ -245,93 +228,88 @@ } //else printf("FIRST MOVE PRUNED "); } - if (current_position[X_AXIS] != end[X_AXIS] || current_position[Y_AXIS] != end[Y_AXIS]) + if (xy_pos_t(current_position) != xy_pos_t(end)) goto FINAL_MOVE; - set_current_from_destination(); + current_position = destination; return; } /** * - * Handle the generic case of a line crossing both X and Y Mesh lines. + * Generic case of a line crossing both X and Y Mesh lines. * */ - int xi_cnt = cell_start_xi - cell_dest_xi, - yi_cnt = cell_start_yi - cell_dest_yi; - - if (xi_cnt < 0) xi_cnt = -xi_cnt; - if (yi_cnt < 0) yi_cnt = -yi_cnt; + xy_int8_t cnt = (istart - iend).ABS(); - current_xi += left_flag; - current_yi += down_flag; + icell += ineg; - while (xi_cnt || yi_cnt) { + while (cnt) { - const float next_mesh_line_x = mesh_index_to_xpos(current_xi + dxi), - next_mesh_line_y = mesh_index_to_ypos(current_yi + dyi), - ry = m * next_mesh_line_x + c, // Calculate Y at the next X mesh line - rx = (next_mesh_line_y - c) / m; // Calculate X at the next Y mesh line - // (No need to worry about m being zero. - // If that was the case, it was already detected - // as a vertical line move above.) + const float next_mesh_line_x = mesh_index_to_xpos(icell.x + iadd.x), + next_mesh_line_y = mesh_index_to_ypos(icell.y + iadd.y), + ry = ratio * next_mesh_line_x + c, // Calculate Y at the next X mesh line + rx = (next_mesh_line_y - c) / ratio; // Calculate X at the next Y mesh line + // (No need to worry about ratio == 0. + // In that case, it was already detected + // as a vertical line move above.) - if (left_flag == (rx > next_mesh_line_x)) { // Check if we hit the Y line first + if (neg.x == (rx > next_mesh_line_x)) { // Check if we hit the Y line first // Yes! Crossing a Y Mesh Line next - float z0 = z_correction_for_x_on_horizontal_mesh_line(rx, current_xi - left_flag, current_yi + dyi) - * planner.fade_scaling_factor_for_z(end[Z_AXIS]); + float z0 = z_correction_for_x_on_horizontal_mesh_line(rx, icell.x - ineg.x, icell.y + iadd.y) + * planner.fade_scaling_factor_for_z(end.z); // Undefined parts of the Mesh in z_values[][] are NAN. // Replace NAN corrections with 0.0 to prevent NAN propagation. if (isnan(z0)) z0 = 0.0; if (!inf_normalized_flag) { - on_axis_distance = use_x_dist ? rx - start[X_AXIS] : next_mesh_line_y - start[Y_AXIS]; - e_position = start[E_AXIS] + on_axis_distance * e_normalized_dist; - z_position = start[Z_AXIS] + on_axis_distance * z_normalized_dist; + on_axis_distance = use_x_dist ? rx - start.x : next_mesh_line_y - start.y; + e_position = start.e + on_axis_distance * e_normalized_dist; + z_position = start.z + on_axis_distance * z_normalized_dist; } else { - e_position = end[E_AXIS]; - z_position = end[Z_AXIS]; + e_position = end.e; + z_position = end.z; } if (!planner.buffer_segment(rx, next_mesh_line_y, z_position + z0, e_position, scaled_fr_mm_s, extruder)) break; - current_yi += dyi; - yi_cnt--; + icell.y += iadd.y; + cnt.y--; } else { // Yes! Crossing a X Mesh Line next - float z0 = z_correction_for_y_on_vertical_mesh_line(ry, current_xi + dxi, current_yi - down_flag) - * planner.fade_scaling_factor_for_z(end[Z_AXIS]); + float z0 = z_correction_for_y_on_vertical_mesh_line(ry, icell.x + iadd.x, icell.y - ineg.y) + * planner.fade_scaling_factor_for_z(end.z); // Undefined parts of the Mesh in z_values[][] are NAN. // Replace NAN corrections with 0.0 to prevent NAN propagation. if (isnan(z0)) z0 = 0.0; if (!inf_normalized_flag) { - on_axis_distance = use_x_dist ? next_mesh_line_x - start[X_AXIS] : ry - start[Y_AXIS]; - e_position = start[E_AXIS] + on_axis_distance * e_normalized_dist; - z_position = start[Z_AXIS] + on_axis_distance * z_normalized_dist; + on_axis_distance = use_x_dist ? next_mesh_line_x - start.x : ry - start.y; + e_position = start.e + on_axis_distance * e_normalized_dist; + z_position = start.z + on_axis_distance * z_normalized_dist; } else { - e_position = end[E_AXIS]; - z_position = end[Z_AXIS]; + e_position = end.e; + z_position = end.z; } if (!planner.buffer_segment(next_mesh_line_x, ry, z_position + z0, e_position, scaled_fr_mm_s, extruder)) break; - current_xi += dxi; - xi_cnt--; + icell.x += iadd.x; + cnt.x--; } - if (xi_cnt < 0 || yi_cnt < 0) break; // Too far! Exit the loop and go to FINAL_MOVE + if (cnt.x < 0 || cnt.y < 0) break; // Too far! Exit the loop and go to FINAL_MOVE } - if (current_position[X_AXIS] != end[X_AXIS] || current_position[Y_AXIS] != end[Y_AXIS]) + if (xy_pos_t(current_position) != xy_pos_t(end)) goto FINAL_MOVE; - set_current_from_destination(); + current_position = destination; } #else // UBL_SEGMENTED @@ -356,56 +334,42 @@ bool _O2 unified_bed_leveling::line_to_destination_segmented(const feedRate_t &scaled_fr_mm_s) { - if (!position_is_reachable(destination[X_AXIS], destination[Y_AXIS])) // fail if moving outside reachable boundary - return true; // did not move, so current_position still accurate + if (!position_is_reachable(destination)) // fail if moving outside reachable boundary + return true; // did not move, so current_position still accurate - const float total[XYZE] = { - destination[X_AXIS] - current_position[X_AXIS], - destination[Y_AXIS] - current_position[Y_AXIS], - destination[Z_AXIS] - current_position[Z_AXIS], - destination[E_AXIS] - current_position[E_AXIS] - }; + const xyze_pos_t total = destination - current_position; - const float cartesian_xy_mm = HYPOT(total[X_AXIS], total[Y_AXIS]); // total horizontal xy distance + const float cart_xy_mm_2 = HYPOT2(total.x, total.y), + cart_xy_mm = SQRT(cart_xy_mm_2); // Total XY distance #if IS_KINEMATIC - const float seconds = cartesian_xy_mm / scaled_fr_mm_s; // Duration of XY move at requested rate - uint16_t segments = LROUND(delta_segments_per_second * seconds), // Preferred number of segments for distance @ feedrate - seglimit = LROUND(cartesian_xy_mm * RECIPROCAL(DELTA_SEGMENT_MIN_LENGTH)); // Number of segments at minimum segment length - NOMORE(segments, seglimit); // Limit to minimum segment length (fewer segments) + const float seconds = cart_xy_mm / scaled_fr_mm_s; // Duration of XY move at requested rate + uint16_t segments = LROUND(delta_segments_per_second * seconds), // Preferred number of segments for distance @ feedrate + seglimit = LROUND(cart_xy_mm * RECIPROCAL(DELTA_SEGMENT_MIN_LENGTH)); // Number of segments at minimum segment length + NOMORE(segments, seglimit); // Limit to minimum segment length (fewer segments) #else - uint16_t segments = LROUND(cartesian_xy_mm * RECIPROCAL(DELTA_SEGMENT_MIN_LENGTH)); // cartesian fixed segment length + uint16_t segments = LROUND(cart_xy_mm * RECIPROCAL(DELTA_SEGMENT_MIN_LENGTH)); // Cartesian fixed segment length #endif - NOLESS(segments, 1U); // must have at least one segment - const float inv_segments = 1.0f / segments; // divide once, multiply thereafter + NOLESS(segments, 1U); // Must have at least one segment + const float inv_segments = 1.0f / segments, // Reciprocal to save calculation + segment_xyz_mm = SQRT(cart_xy_mm_2 + sq(total.z)) * inv_segments; // Length of each segment - const float segment_xyz_mm = HYPOT(cartesian_xy_mm, total[Z_AXIS]) * inv_segments; // length of each segment #if ENABLED(SCARA_FEEDRATE_SCALING) const float inv_duration = scaled_fr_mm_s / segment_xyz_mm; #endif - const float diff[XYZE] = { - total[X_AXIS] * inv_segments, - total[Y_AXIS] * inv_segments, - total[Z_AXIS] * inv_segments, - total[E_AXIS] * inv_segments - }; + xyze_float_t diff = total * inv_segments; // Note that E segment distance could vary slightly as z mesh height // changes for each segment, but small enough to ignore. - float raw[XYZE] = { - current_position[X_AXIS], - current_position[Y_AXIS], - current_position[Z_AXIS], - current_position[E_AXIS] - }; + xyze_pos_t raw = current_position; // Just do plain segmentation if UBL is inactive or the target is above the fade height - if (!planner.leveling_active || !planner.leveling_active_at_z(destination[Z_AXIS])) { + if (!planner.leveling_active || !planner.leveling_active_at_z(destination.z)) { while (--segments) { - LOOP_XYZE(i) raw[i] += diff[i]; + raw += diff; planner.buffer_line(raw, scaled_fr_mm_s, active_extruder, segment_xyz_mm #if ENABLED(SCARA_FEEDRATE_SCALING) , inv_duration @@ -417,17 +381,17 @@ , inv_duration #endif ); - return false; // moved but did not set_current_from_destination(); + return false; // Did not set current from destination } // Otherwise perform per-segment leveling #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) - const float fade_scaling_factor = planner.fade_scaling_factor_for_z(destination[Z_AXIS]); + const float fade_scaling_factor = planner.fade_scaling_factor_for_z(destination.z); #endif - // increment to first segment destination - LOOP_XYZE(i) raw[i] += diff[i]; + // Move to first segment destination + raw += diff; for (;;) { // for each mesh cell encountered during the move @@ -438,75 +402,68 @@ // in top of loop and again re-find same adjacent cell and use it, just less efficient // for mesh inset area. - int8_t cell_xi = (raw[X_AXIS] - (MESH_MIN_X)) * RECIPROCAL(MESH_X_DIST), - cell_yi = (raw[Y_AXIS] - (MESH_MIN_Y)) * RECIPROCAL(MESH_Y_DIST); + xy_int8_t icell = { + int8_t((raw.x - (MESH_MIN_X)) * RECIPROCAL(MESH_X_DIST)), + int8_t((raw.y - (MESH_MIN_Y)) * RECIPROCAL(MESH_Y_DIST)) + }; + LIMIT(icell.x, 0, (GRID_MAX_POINTS_X) - 1); + LIMIT(icell.y, 0, (GRID_MAX_POINTS_Y) - 1); - LIMIT(cell_xi, 0, (GRID_MAX_POINTS_X) - 1); - LIMIT(cell_yi, 0, (GRID_MAX_POINTS_Y) - 1); - - const float x0 = mesh_index_to_xpos(cell_xi), // 64 byte table lookup avoids mul+add - y0 = mesh_index_to_ypos(cell_yi); - - float z_x0y0 = z_values[cell_xi ][cell_yi ], // z at lower left corner - z_x1y0 = z_values[cell_xi+1][cell_yi ], // z at upper left corner - z_x0y1 = z_values[cell_xi ][cell_yi+1], // z at lower right corner - z_x1y1 = z_values[cell_xi+1][cell_yi+1]; // z at upper right corner + float z_x0y0 = z_values[icell.x ][icell.y ], // z at lower left corner + z_x1y0 = z_values[icell.x+1][icell.y ], // z at upper left corner + z_x0y1 = z_values[icell.x ][icell.y+1], // z at lower right corner + z_x1y1 = z_values[icell.x+1][icell.y+1]; // z at upper right corner if (isnan(z_x0y0)) z_x0y0 = 0; // ideally activating planner.leveling_active (G29 A) if (isnan(z_x1y0)) z_x1y0 = 0; // should refuse if any invalid mesh points if (isnan(z_x0y1)) z_x0y1 = 0; // in order to avoid isnan tests per cell, if (isnan(z_x1y1)) z_x1y1 = 0; // thus guessing zero for undefined points - float cx = raw[X_AXIS] - x0, // cell-relative x and y - cy = raw[Y_AXIS] - y0; + const xy_pos_t pos = { mesh_index_to_xpos(icell.x), mesh_index_to_ypos(icell.y) }; + xy_pos_t cell = raw - pos; const float z_xmy0 = (z_x1y0 - z_x0y0) * RECIPROCAL(MESH_X_DIST), // z slope per x along y0 (lower left to lower right) z_xmy1 = (z_x1y1 - z_x0y1) * RECIPROCAL(MESH_X_DIST); // z slope per x along y1 (upper left to upper right) - float z_cxy0 = z_x0y0 + z_xmy0 * cx; // z height along y0 at cx (changes for each cx in cell) + float z_cxy0 = z_x0y0 + z_xmy0 * cell.x; // z height along y0 at cell.x (changes for each cell.x in cell) - const float z_cxy1 = z_x0y1 + z_xmy1 * cx, // z height along y1 at cx - z_cxyd = z_cxy1 - z_cxy0; // z height difference along cx from y0 to y1 + const float z_cxy1 = z_x0y1 + z_xmy1 * cell.x, // z height along y1 at cell.x + z_cxyd = z_cxy1 - z_cxy0; // z height difference along cell.x from y0 to y1 - float z_cxym = z_cxyd * RECIPROCAL(MESH_Y_DIST); // z slope per y along cx from y0 to y1 (changes for each cx in cell) + float z_cxym = z_cxyd * RECIPROCAL(MESH_Y_DIST); // z slope per y along cell.x from pos.y to y1 (changes for each cell.x in cell) - // float z_cxcy = z_cxy0 + z_cxym * cy; // interpolated mesh z height along cx at cy (do inside the segment loop) + // float z_cxcy = z_cxy0 + z_cxym * cell.y; // interpolated mesh z height along cell.x at cell.y (do inside the segment loop) // As subsequent segments step through this cell, the z_cxy0 intercept will change - // and the z_cxym slope will change, both as a function of cx within the cell, and + // and the z_cxym slope will change, both as a function of cell.x within the cell, and // each change by a constant for fixed segment lengths. - const float z_sxy0 = z_xmy0 * diff[X_AXIS], // per-segment adjustment to z_cxy0 - z_sxym = (z_xmy1 - z_xmy0) * RECIPROCAL(MESH_Y_DIST) * diff[X_AXIS]; // per-segment adjustment to z_cxym + const float z_sxy0 = z_xmy0 * diff.x, // per-segment adjustment to z_cxy0 + z_sxym = (z_xmy1 - z_xmy0) * RECIPROCAL(MESH_Y_DIST) * diff.x; // per-segment adjustment to z_cxym for (;;) { // for all segments within this mesh cell - if (--segments == 0) COPY(raw, destination); // if this is last segment, use destination for exact + if (--segments == 0) raw = destination; // if this is last segment, use destination for exact - const float z_cxcy = (z_cxy0 + z_cxym * cy) // interpolated mesh z height along cx at cy + const float z_cxcy = (z_cxy0 + z_cxym * cell.y) // interpolated mesh z height along cell.x at cell.y #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) * fade_scaling_factor // apply fade factor to interpolated mesh height #endif ; - const float z = raw[Z_AXIS]; - raw[Z_AXIS] += z_cxcy; - planner.buffer_line(raw, scaled_fr_mm_s, active_extruder, segment_xyz_mm + planner.buffer_line(raw.x, raw.y, raw.z + z_cxcy, raw.e, scaled_fr_mm_s, active_extruder, segment_xyz_mm #if ENABLED(SCARA_FEEDRATE_SCALING) , inv_duration #endif ); - raw[Z_AXIS] = z; if (segments == 0) // done with last segment - return false; // did not set_current_from_destination() - - LOOP_XYZE(i) raw[i] += diff[i]; + return false; // didn't set current from destination - cx += diff[X_AXIS]; - cy += diff[Y_AXIS]; + raw += diff; + cell += diff; - if (!WITHIN(cx, 0, MESH_X_DIST) || !WITHIN(cy, 0, MESH_Y_DIST)) // done within this cell, break to next + if (!WITHIN(cell.x, 0, MESH_X_DIST) || !WITHIN(cell.y, 0, MESH_Y_DIST)) // done within this cell, break to next break; // Next segment still within same mesh cell, adjust the per-segment diff --git a/Marlin/src/feature/dac/dac_mcp4728.cpp b/Marlin/src/feature/dac/dac_mcp4728.cpp index cfe36dd39f81..19f8d5f64302 100644 --- a/Marlin/src/feature/dac/dac_mcp4728.cpp +++ b/Marlin/src/feature/dac/dac_mcp4728.cpp @@ -36,7 +36,7 @@ #include "dac_mcp4728.h" -uint16_t mcp4728_values[XYZE]; +xyze_uint_t mcp4728_values; /** * Begin I2C, get current values (input register and eeprom) of mcp4728 @@ -121,8 +121,8 @@ uint8_t mcp4728_getDrvPct(const uint8_t channel) { return uint8_t(100.0 * mcp472 * Receives all Drive strengths as 0-100 percent values, updates * DAC Values array and calls fastwrite to update the DAC. */ -void mcp4728_setDrvPct(uint8_t pct[XYZE]) { - LOOP_XYZE(i) mcp4728_values[i] = 0.01 * pct[i] * (DAC_STEPPER_MAX); +void mcp4728_setDrvPct(xyze_uint8_t &pct) { + mcp4728_values *= 0.01 * pct * (DAC_STEPPER_MAX); mcp4728_fastWrite(); } diff --git a/Marlin/src/feature/dac/dac_mcp4728.h b/Marlin/src/feature/dac/dac_mcp4728.h index c814829456a3..92e28ffb2bab 100644 --- a/Marlin/src/feature/dac/dac_mcp4728.h +++ b/Marlin/src/feature/dac/dac_mcp4728.h @@ -25,6 +25,8 @@ * Arduino library for MicroChip MCP4728 I2C D/A converter. */ +#include "../../core/types.h" + #include #define defaultVDD DAC_STEPPER_MAX //was 5000 but differs with internal Vref @@ -54,4 +56,4 @@ uint16_t mcp4728_getValue(const uint8_t channel); uint8_t mcp4728_fastWrite(); uint8_t mcp4728_simpleCommand(const byte simpleCommand); uint8_t mcp4728_getDrvPct(const uint8_t channel); -void mcp4728_setDrvPct(uint8_t pct[XYZE]); +void mcp4728_setDrvPct(xyze_uint8_t &pct); diff --git a/Marlin/src/feature/dac/stepper_dac.cpp b/Marlin/src/feature/dac/stepper_dac.cpp index d1e101bd5059..565b62a3921b 100644 --- a/Marlin/src/feature/dac/stepper_dac.cpp +++ b/Marlin/src/feature/dac/stepper_dac.cpp @@ -31,8 +31,8 @@ #include "stepper_dac.h" bool dac_present = false; -const uint8_t dac_order[NUM_AXIS] = DAC_STEPPER_ORDER; -uint8_t dac_channel_pct[XYZE] = DAC_MOTOR_CURRENT_DEFAULT; +constexpr xyze_uint8_t dac_order = DAC_STEPPER_ORDER; +xyze_uint8_t dac_channel_pct = DAC_MOTOR_CURRENT_DEFAULT; int dac_init() { #if PIN_EXISTS(DAC_DISABLE) @@ -77,8 +77,8 @@ void dac_current_raw(uint8_t channel, uint16_t val) { static float dac_perc(int8_t n) { return 100.0 * mcp4728_getValue(dac_order[n]) * RECIPROCAL(DAC_STEPPER_MAX); } static float dac_amps(int8_t n) { return mcp4728_getDrvPct(dac_order[n]) * (DAC_STEPPER_MAX) * 0.125 * RECIPROCAL(DAC_STEPPER_SENSE); } -uint8_t dac_current_get_percent(AxisEnum axis) { return mcp4728_getDrvPct(dac_order[axis]); } -void dac_current_set_percents(const uint8_t pct[XYZE]) { +uint8_t dac_current_get_percent(const AxisEnum axis) { return mcp4728_getDrvPct(dac_order[axis]); } +void dac_current_set_percents(xyze_uint8_t &pct) { LOOP_XYZE(i) dac_channel_pct[i] = pct[dac_order[i]]; mcp4728_setDrvPct(dac_channel_pct); } diff --git a/Marlin/src/feature/dac/stepper_dac.h b/Marlin/src/feature/dac/stepper_dac.h index 8ad51ee78164..3496ebec4897 100644 --- a/Marlin/src/feature/dac/stepper_dac.h +++ b/Marlin/src/feature/dac/stepper_dac.h @@ -33,4 +33,4 @@ void dac_current_raw(uint8_t channel, uint16_t val); void dac_print_values(); void dac_commit_eeprom(); uint8_t dac_current_get_percent(AxisEnum axis); -void dac_current_set_percents(const uint8_t pct[XYZE]); +void dac_current_set_percents(xyze_uint8_t &pct); diff --git a/Marlin/src/feature/fwretract.cpp b/Marlin/src/feature/fwretract.cpp index b4302cb17ad9..896e60295091 100644 --- a/Marlin/src/feature/fwretract.cpp +++ b/Marlin/src/feature/fwretract.cpp @@ -123,8 +123,8 @@ void FWRetract::retract(const bool retracting SERIAL_ECHOLNPAIR("retracted_swap[", i, "] ", retracted_swap[i]); #endif } - SERIAL_ECHOLNPAIR("current_position[z] ", current_position[Z_AXIS]); - SERIAL_ECHOLNPAIR("current_position[e] ", current_position[E_AXIS]); + SERIAL_ECHOLNPAIR("current_position.z ", current_position.z); + SERIAL_ECHOLNPAIR("current_position.e ", current_position.e); SERIAL_ECHOLNPAIR("current_hop ", current_hop); //*/ @@ -136,7 +136,7 @@ void FWRetract::retract(const bool retracting ); // The current position will be the destination for E and Z moves - set_destination_from_current(); + destination = current_position; #if ENABLED(RETRACT_SYNC_MIXING) const uint8_t old_mixing_tool = mixer.get_current_vtool(); @@ -147,7 +147,7 @@ void FWRetract::retract(const bool retracting if (retracting) { // Retract by moving from a faux E position back to the current E position current_retract[active_extruder] = base_retract; - prepare_internal_move_to_destination( // set_current_to_destination + prepare_internal_move_to_destination( // set current to destination settings.retract_feedrate_mm_s #if ENABLED(RETRACT_SYNC_MIXING) * (MIXING_STEPPERS) @@ -171,7 +171,7 @@ void FWRetract::retract(const bool retracting const float extra_recover = swapping ? settings.swap_retract_recover_extra : settings.retract_recover_extra; if (extra_recover) { - current_position[E_AXIS] -= extra_recover; // Adjust the current E position by the extra amount to recover + current_position.e -= extra_recover; // Adjust the current E position by the extra amount to recover sync_plan_position_e(); // Sync the planner position so the extra amount is recovered } @@ -207,8 +207,8 @@ void FWRetract::retract(const bool retracting SERIAL_ECHOLNPAIR("retracted_swap[", i, "] ", retracted_swap[i]); #endif } - SERIAL_ECHOLNPAIR("current_position[z] ", current_position[Z_AXIS]); - SERIAL_ECHOLNPAIR("current_position[e] ", current_position[E_AXIS]); + SERIAL_ECHOLNPAIR("current_position.z ", current_position.z); + SERIAL_ECHOLNPAIR("current_position.e ", current_position.e); SERIAL_ECHOLNPAIR("current_hop ", current_hop); //*/ } diff --git a/Marlin/src/feature/joystick.cpp b/Marlin/src/feature/joystick.cpp index bb54ff1d6db2..baa3142b6f4d 100644 --- a/Marlin/src/feature/joystick.cpp +++ b/Marlin/src/feature/joystick.cpp @@ -71,35 +71,35 @@ Joystick joystick; #if HAS_JOY_ADC_X || HAS_JOY_ADC_Y || HAS_JOY_ADC_Z - void Joystick::calculate(float (&norm_jog)[XYZ]) { + void Joystick::calculate(xyz_float_t &norm_jog) { // Do nothing if enable pin (active-low) is not LOW #if HAS_JOY_ADC_EN if (READ(JOY_EN_PIN)) return; #endif - auto _normalize_joy = [](float &norm_jog, const int16_t raw, const int16_t (&joy_limits)[4]) { + auto _normalize_joy = [](float &axis_jog, const int16_t raw, const int16_t (&joy_limits)[4]) { if (WITHIN(raw, joy_limits[0], joy_limits[3])) { // within limits, check deadzone if (raw > joy_limits[2]) - norm_jog = (raw - joy_limits[2]) / float(joy_limits[3] - joy_limits[2]); + axis_jog = (raw - joy_limits[2]) / float(joy_limits[3] - joy_limits[2]); else if (raw < joy_limits[1]) - norm_jog = (raw - joy_limits[1]) / float(joy_limits[1] - joy_limits[0]); // negative value + axis_jog = (raw - joy_limits[1]) / float(joy_limits[1] - joy_limits[0]); // negative value // Map normal to jog value via quadratic relationship - norm_jog = SIGN(norm_jog) * sq(norm_jog); + axis_jog = SIGN(axis_jog) * sq(axis_jog); } }; #if HAS_JOY_ADC_X static constexpr int16_t joy_x_limits[4] = JOY_X_LIMITS; - _normalize_joy(norm_jog[X_AXIS], x.raw, joy_x_limits); + _normalize_joy(norm_jog.x, x.raw, joy_x_limits); #endif #if HAS_JOY_ADC_Y static constexpr int16_t joy_y_limits[4] = JOY_Y_LIMITS; - _normalize_joy(norm_jog[Y_AXIS], y.raw, joy_y_limits); + _normalize_joy(norm_jog.y, y.raw, joy_y_limits); #endif #if HAS_JOY_ADC_Z static constexpr int16_t joy_z_limits[4] = JOY_Z_LIMITS; - _normalize_joy(norm_jog[Z_AXIS], z.raw, joy_z_limits); + _normalize_joy(norm_jog.z, z.raw, joy_z_limits); #endif } @@ -129,7 +129,7 @@ Joystick joystick; // Normalized jog values are 0 for no movement and -1 or +1 for as max feedrate (nonlinear relationship) // Jog are initialized to zero and handling input can update values but doesn't have to // You could use a two-axis joystick and a one-axis keypad and they might work together - float norm_jog[XYZ] = { 0 }; + xyz_float_t norm_jog{0}; // Use ADC values and defined limits. The active zone is normalized: -1..0 (dead) 0..1 #if HAS_JOY_ADC_X || HAS_JOY_ADC_Y || HAS_JOY_ADC_Z @@ -143,16 +143,13 @@ Joystick joystick; ExtUI::_joystick_update(norm_jog); #endif - #if EITHER(ULTIPANEL, EXTENSIBLE_UI) - constexpr float manual_feedrate[XYZE] = MANUAL_FEEDRATE; - #endif - // norm_jog values of [-1 .. 1] maps linearly to [-feedrate .. feedrate] - float move_dist[XYZ] = { 0 }, hypot2 = 0; + xyz_float_t move_dist{0}; + float hypot2 = 0; LOOP_XYZ(i) if (norm_jog[i]) { move_dist[i] = seg_time * norm_jog[i] * #if EITHER(ULTIPANEL, EXTENSIBLE_UI) - MMM_TO_MMS(manual_feedrate[i]); + MMM_TO_MMS(manual_feedrate_mm_m[i]); #else planner.settings.max_feedrate_mm_s[i]; #endif @@ -160,7 +157,7 @@ Joystick joystick; } if (!UNEAR_ZERO(hypot2)) { - LOOP_XYZ(i) current_position[i] += move_dist[i]; + current_position += move_dist; const float length = sqrt(hypot2); injecting_now = true; planner.buffer_line(current_position, length / seg_time, active_extruder, length); diff --git a/Marlin/src/feature/joystick.h b/Marlin/src/feature/joystick.h index e96120517e96..50196374a762 100644 --- a/Marlin/src/feature/joystick.h +++ b/Marlin/src/feature/joystick.h @@ -25,6 +25,8 @@ * joystick.h - joystick input / jogging */ +#include "../inc/MarlinConfigPre.h" +#include "../core/types.h" #include "../core/macros.h" #include "../module/temperature.h" @@ -46,7 +48,7 @@ class Joystick { #if ENABLED(JOYSTICK_DEBUG) static void report(); #endif - static void calculate(float (&norm_jog)[XYZ]); + static void calculate(xyz_float_t &norm_jog); static void inject_jog_moves(); }; diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index ff200d0afb6b..ccb6f6323df5 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -64,7 +64,7 @@ // private: -static float resume_position[XYZE]; +static xyze_pos_t resume_position; PauseMode pause_mode = PAUSE_MODE_PAUSE_PRINT; @@ -126,8 +126,8 @@ void do_pause_e_move(const float &length, const feedRate_t &fr_mm_s) { #if HAS_FILAMENT_SENSOR runout.reset(); #endif - current_position[E_AXIS] += length / planner.e_factor[active_extruder]; - planner.buffer_line(current_position, fr_mm_s, active_extruder); + current_position.e += length / planner.e_factor[active_extruder]; + line_to_current_position(fr_mm_s); planner.synchronize(); } @@ -385,7 +385,7 @@ bool unload_filament(const float &unload_length, const bool show_lcd/*=false*/, */ uint8_t did_pause_print = 0; -bool pause_print(const float &retract, const point_t &park_point, const float &unload_length/*=0*/, const bool show_lcd/*=false*/ DXC_ARGS) { +bool pause_print(const float &retract, const xyz_pos_t &park_point, const float &unload_length/*=0*/, const bool show_lcd/*=false*/ DXC_ARGS) { #if !HAS_LCD_MENU UNUSED(show_lcd); @@ -432,7 +432,7 @@ bool pause_print(const float &retract, const point_t &park_point, const float &u print_job_timer.pause(); // Save current position - COPY(resume_position, current_position); + resume_position = current_position; // Wait for buffered blocks to complete planner.synchronize(); @@ -611,10 +611,10 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep * - Display "wait for print to resume" * - Re-prime the nozzle... * - FWRETRACT: Recover/prime from the prior G10. - * - !FWRETRACT: Retract by resume_position[E], if negative. + * - !FWRETRACT: Retract by resume_position.e, if negative. * Not sure how this logic comes into use. * - Move the nozzle back to resume_position - * - Sync the planner E to resume_position[E] + * - Sync the planner E to resume_position.e * - Send host action for resume, if configured * - Resume the current SD print job, if any */ @@ -652,13 +652,13 @@ void resume_print(const float &slow_load_length/*=0*/, const float &fast_load_le #endif // If resume_position is negative - if (resume_position[E_AXIS] < 0) do_pause_e_move(resume_position[E_AXIS], feedRate_t(PAUSE_PARK_RETRACT_FEEDRATE)); + if (resume_position.e < 0) do_pause_e_move(resume_position.e, feedRate_t(PAUSE_PARK_RETRACT_FEEDRATE)); // Move XY to starting position, then Z - do_blocking_move_to_xy(resume_position[X_AXIS], resume_position[Y_AXIS], feedRate_t(NOZZLE_PARK_XY_FEEDRATE)); + do_blocking_move_to_xy(xy_pos_t(resume_position), feedRate_t(NOZZLE_PARK_XY_FEEDRATE)); // Move Z_AXIS to saved position - do_blocking_move_to_z(resume_position[Z_AXIS], feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); + do_blocking_move_to_z(resume_position.z, feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); #if ADVANCED_PAUSE_RESUME_PRIME != 0 do_pause_e_move(ADVANCED_PAUSE_RESUME_PRIME, feedRate_t(ADVANCED_PAUSE_PURGE_FEEDRATE)); @@ -666,7 +666,7 @@ void resume_print(const float &slow_load_length/*=0*/, const float &fast_load_le // Now all extrusion positions are resumed and ready to be confirmed // Set extruder to saved position - planner.set_e_position_mm((destination[E_AXIS] = current_position[E_AXIS] = resume_position[E_AXIS])); + planner.set_e_position_mm((destination.e = current_position.e = resume_position.e)); #if HAS_LCD_MENU lcd_pause_show_message(PAUSE_MESSAGE_STATUS); diff --git a/Marlin/src/feature/pause.h b/Marlin/src/feature/pause.h index deb19f46a8dc..cb6787d9134c 100644 --- a/Marlin/src/feature/pause.h +++ b/Marlin/src/feature/pause.h @@ -83,7 +83,7 @@ extern uint8_t did_pause_print; void do_pause_e_move(const float &length, const feedRate_t &fr_mm_s); -bool pause_print(const float &retract, const point_t &park_point, const float &unload_length=0, const bool show_lcd=false DXC_PARAMS); +bool pause_print(const float &retract, const xyz_pos_t &park_point, const float &unload_length=0, const bool show_lcd=false DXC_PARAMS); void wait_for_confirmation(const bool is_reload=false, const int8_t max_beep_count=0 DXC_PARAMS); diff --git a/Marlin/src/feature/power_loss_recovery.cpp b/Marlin/src/feature/power_loss_recovery.cpp index 3420f205f66b..bf13bb4b1a13 100644 --- a/Marlin/src/feature/power_loss_recovery.cpp +++ b/Marlin/src/feature/power_loss_recovery.cpp @@ -156,7 +156,7 @@ void PrintJobRecovery::save(const bool force/*=false*/, const bool save_queue/*= || ELAPSED(ms, next_save_ms) #endif // Save if Z is above the last-saved position by some minimum height - || current_position[Z_AXIS] > info.current_position[Z_AXIS] + POWER_LOSS_MIN_Z_CHANGE + || current_position.z > info.current_position.z + POWER_LOSS_MIN_Z_CHANGE #endif ) { @@ -170,12 +170,12 @@ void PrintJobRecovery::save(const bool force/*=false*/, const bool save_queue/*= info.valid_foot = info.valid_head; // Machine state - COPY(info.current_position, current_position); + info.current_position = current_position; #if HAS_HOME_OFFSET - COPY(info.home_offset, home_offset); + info.home_offset = home_offset; #endif #if HAS_POSITION_SHIFT - COPY(info.position_shift, position_shift); + info.position_shift = position_shift; #endif info.feedrate = uint16_t(feedrate_mm_s * 60.0f); @@ -361,13 +361,13 @@ void PrintJobRecovery::resume() { // Move back to the saved XY sprintf_P(cmd, PSTR("G1 X%s Y%s F3000"), - dtostrf(info.current_position[X_AXIS], 1, 3, str_1), - dtostrf(info.current_position[Y_AXIS], 1, 3, str_2) + dtostrf(info.current_position.x, 1, 3, str_1), + dtostrf(info.current_position.y, 1, 3, str_2) ); gcode.process_subcommands_now(cmd); // Move back to the saved Z - dtostrf(info.current_position[Z_AXIS], 1, 3, str_1); + dtostrf(info.current_position.z, 1, 3, str_1); #if Z_HOME_DIR > 0 sprintf_P(cmd, PSTR("G1 Z%s F200"), str_1); #else @@ -388,22 +388,20 @@ void PrintJobRecovery::resume() { gcode.process_subcommands_now(cmd); // Restore E position with G92.9 - sprintf_P(cmd, PSTR("G92.9 E%s"), dtostrf(info.current_position[E_AXIS], 1, 3, str_1)); + sprintf_P(cmd, PSTR("G92.9 E%s"), dtostrf(info.current_position.e, 1, 3, str_1)); gcode.process_subcommands_now(cmd); // Relative axis modes gcode.axis_relative = info.axis_relative; + #if HAS_HOME_OFFSET + home_offset = info.home_offset; + #endif + #if HAS_POSITION_SHIFT + position_shift = info.position_shift; + #endif #if HAS_HOME_OFFSET || HAS_POSITION_SHIFT - LOOP_XYZ(i) { - #if HAS_HOME_OFFSET - home_offset[i] = info.home_offset[i]; - #endif - #if HAS_POSITION_SHIFT - position_shift[i] = info.position_shift[i]; - #endif - update_workspace_offset((AxisEnum)i); - } + LOOP_XYZ(i) update_workspace_offset((AxisEnum)i); #endif // Resume the SD file from the last position diff --git a/Marlin/src/feature/power_loss_recovery.h b/Marlin/src/feature/power_loss_recovery.h index 58b6c1dc7ab6..c02d5d34cca7 100644 --- a/Marlin/src/feature/power_loss_recovery.h +++ b/Marlin/src/feature/power_loss_recovery.h @@ -44,13 +44,13 @@ typedef struct { uint8_t valid_head; // Machine state - float current_position[NUM_AXIS]; + xyze_pos_t current_position; #if HAS_HOME_OFFSET - float home_offset[XYZ]; + xyz_pos_t home_offset; #endif #if HAS_POSITION_SHIFT - float position_shift[XYZ]; + xyz_pos_t position_shift; #endif uint16_t feedrate; diff --git a/Marlin/src/feature/prusa_MMU2/mmu2.cpp b/Marlin/src/feature/prusa_MMU2/mmu2.cpp index 8f5537ba9ccd..dd0b2c681cef 100644 --- a/Marlin/src/feature/prusa_MMU2/mmu2.cpp +++ b/Marlin/src/feature/prusa_MMU2/mmu2.cpp @@ -550,10 +550,10 @@ bool MMU2::get_response() { */ void MMU2::manage_response(const bool move_axes, const bool turn_off_nozzle) { + constexpr xyz_pos_t park_point = NOZZLE_PARK_POINT; bool response = false; mmu_print_saved = false; - point_t park_point = NOZZLE_PARK_POINT; - float resume_position[XYZE]; + xyz_pos_t resume_position; int16_t resume_hotend_temp; KEEPALIVE_STATE(PAUSED_FOR_USER); @@ -572,7 +572,7 @@ void MMU2::manage_response(const bool move_axes, const bool turn_off_nozzle) { SERIAL_ECHOLNPGM("MMU not responding"); resume_hotend_temp = thermalManager.degTargetHotend(active_extruder); - COPY(resume_position, current_position); + resume_position = current_position; if (move_axes && all_axes_homed()) nozzle.park(2, park_point /*= NOZZLE_PARK_POINT*/); @@ -604,10 +604,10 @@ void MMU2::manage_response(const bool move_axes, const bool turn_off_nozzle) { BUZZ(200, 404); // Move XY to starting position, then Z - do_blocking_move_to_xy(resume_position[X_AXIS], resume_position[Y_AXIS], feedRate_t(NOZZLE_PARK_XY_FEEDRATE)); + do_blocking_move_to_xy(resume_position, feedRate_t(NOZZLE_PARK_XY_FEEDRATE)); // Move Z_AXIS to saved position - do_blocking_move_to_z(resume_position[Z_AXIS], feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); + do_blocking_move_to_z(resume_position.z, feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); } else { BUZZ(200, 404); @@ -698,8 +698,8 @@ void MMU2::filament_runout() { LCD_MESSAGEPGM(MSG_MMU2_EJECTING_FILAMENT); enable_E0(); - current_position[E_AXIS] -= MMU2_FILAMENTCHANGE_EJECT_FEED; - planner.buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 2500 / 60, active_extruder); + current_position.e -= MMU2_FILAMENTCHANGE_EJECT_FEED; + line_to_current_position(2500 / 60); planner.synchronize(); command(MMU_CMD_E0 + index); manage_response(false, false); @@ -787,7 +787,7 @@ void MMU2::filament_runout() { DEBUG_ECHO_START(); DEBUG_ECHOLNPAIR("E step ", es, "/", fr_mm_m); - current_position[E_AXIS] += es; + current_position.e += es; line_to_current_position(MMM_TO_MMS(fr_mm_m)); planner.synchronize(); diff --git a/Marlin/src/feature/runout.h b/Marlin/src/feature/runout.h index ab92c1f7c1e1..0ce2c9af7c4f 100644 --- a/Marlin/src/feature/runout.h +++ b/Marlin/src/feature/runout.h @@ -327,14 +327,14 @@ class FilamentSensorBase { } static inline void block_completed(const block_t* const b) { - if (b->steps[X_AXIS] || b->steps[Y_AXIS] || b->steps[Z_AXIS] + if (b->steps.x || b->steps.y || b->steps.z #if ENABLED(ADVANCED_PAUSE_FEATURE) || did_pause_print // Allow pause purge move to re-trigger runout state #endif ) { // Only trigger on extrusion with XYZ movement to allow filament change and retract/recover. const uint8_t e = b->extruder; - const int32_t steps = b->steps[E_AXIS]; + const int32_t steps = b->steps.e; runout_mm_countdown[e] -= (TEST(b->direction_bits, E_AXIS) ? -steps : steps) * planner.steps_to_mm[E_AXIS_N(e)]; } } diff --git a/Marlin/src/feature/tmc_util.h b/Marlin/src/feature/tmc_util.h index b5b45089b9cc..bea5e14e9ad9 100644 --- a/Marlin/src/feature/tmc_util.h +++ b/Marlin/src/feature/tmc_util.h @@ -367,9 +367,9 @@ void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z constexpr uint16_t default_sg_guard_duration = 400; struct slow_homing_t { - struct { uint32_t x, y; } acceleration; + xy_ulong_t acceleration; #if HAS_CLASSIC_JERK - struct { float x, y; } jerk; + xy_float_t jerk_xy; #endif }; #endif diff --git a/Marlin/src/gcode/bedlevel/G26.cpp b/Marlin/src/gcode/bedlevel/G26.cpp index f98ffc88cb01..2356f0428d57 100644 --- a/Marlin/src/gcode/bedlevel/G26.cpp +++ b/Marlin/src/gcode/bedlevel/G26.cpp @@ -62,7 +62,7 @@ #define G26_ERR true #if ENABLED(ARC_SUPPORT) - void plan_arc(const float (&cart)[XYZE], const float (&offset)[2], const uint8_t clockwise); + void plan_arc(const xyze_pos_t &cart, const ab_float_t &offset, const uint8_t clockwise); #endif /** @@ -142,7 +142,7 @@ // Private functions -static uint16_t circle_flags[16], horizontal_mesh_line_flags[16], vertical_mesh_line_flags[16]; +static MeshFlags circle_flags, horizontal_mesh_line_flags, vertical_mesh_line_flags; float g26_e_axis_feedrate = 0.025, random_deviation = 0.0; @@ -154,7 +154,7 @@ float g26_extrusion_multiplier, g26_layer_height, g26_prime_length; -float g26_x_pos = 0, g26_y_pos = 0; +xy_pos_t g26_pos; // = { 0, 0 } int16_t g26_bed_temp, g26_hotend_temp; @@ -178,85 +178,85 @@ int8_t g26_prime_flag; #endif -mesh_index_pair find_closest_circle_to_print(const float &X, const float &Y) { +mesh_index_pair find_closest_circle_to_print(const xy_pos_t &pos) { float closest = 99999.99; - mesh_index_pair return_val; + mesh_index_pair out_point; - return_val.x_index = return_val.y_index = -1; + out_point.pos = -1; for (uint8_t i = 0; i < GRID_MAX_POINTS_X; i++) { for (uint8_t j = 0; j < GRID_MAX_POINTS_Y; j++) { - if (!is_bitmap_set(circle_flags, i, j)) { - const float mx = _GET_MESH_X(i), // We found a circle that needs to be printed - my = _GET_MESH_Y(j); + if (!circle_flags.marked(i, j)) { + // We found a circle that needs to be printed + const xy_pos_t m = { _GET_MESH_X(i), _GET_MESH_Y(j) }; // Get the distance to this intersection - float f = HYPOT(X - mx, Y - my); + float f = (pos - m).magnitude(); // It is possible that we are being called with the values // to let us find the closest circle to the start position. // But if this is not the case, add a small weighting to the // distance calculation to help it choose a better place to continue. - f += HYPOT(g26_x_pos - mx, g26_y_pos - my) / 15.0; + f += (g26_pos - m).magnitude() / 15.0f; - // Add in the specified amount of Random Noise to our search - if (random_deviation > 1.0) - f += random(0.0, random_deviation); + // Add the specified amount of Random Noise to our search + if (random_deviation > 1.0) f += random(0.0, random_deviation); if (f < closest) { - closest = f; // We found a closer location that is still - return_val.x_index = i; // un-printed --- save the data for it - return_val.y_index = j; - return_val.distance = closest; + closest = f; // Found a closer un-printed location + out_point.pos.set(i, j); // Save its data + out_point.distance = closest; } } } } - bitmap_set(circle_flags, return_val.x_index, return_val.y_index); // Mark this location as done. - return return_val; + circle_flags.mark(out_point); // Mark this location as done. + return out_point; } void move_to(const float &rx, const float &ry, const float &z, const float &e_delta) { static float last_z = -999.99; - bool has_xy_component = (rx != current_position[X_AXIS] || ry != current_position[Y_AXIS]); // Check if X or Y is involved in the movement. + const xy_pos_t dest = { rx, ry }; - if (z != last_z) { - last_z = z; - const feedRate_t feed_value = planner.settings.max_feedrate_mm_s[Z_AXIS] * 0.5f; // Use half of the Z_AXIS max feed rate + const bool has_xy_component = dest != current_position; // Check if X or Y is involved in the movement. - destination[X_AXIS] = current_position[X_AXIS]; - destination[Y_AXIS] = current_position[Y_AXIS]; - destination[Z_AXIS] = z; // We know the last_z!=z or we wouldn't be in this block of code. - destination[E_AXIS] = current_position[E_AXIS]; + destination = current_position; + if (z != last_z) { + last_z = destination.z = z; + const feedRate_t feed_value = planner.settings.max_feedrate_mm_s[Z_AXIS] * 0.5f; // Use half of the Z_AXIS max feed rate prepare_internal_move_to_destination(feed_value); - set_destination_from_current(); + destination = current_position; } // If X or Y is involved do a 'normal' move. Otherwise retract/recover/hop. + destination = dest; + destination.e += e_delta; const feedRate_t feed_value = has_xy_component ? feedRate_t(G26_XY_FEEDRATE) : planner.settings.max_feedrate_mm_s[E_AXIS] * 0.666f; - - destination[X_AXIS] = rx; - destination[Y_AXIS] = ry; - destination[E_AXIS] += e_delta; - prepare_internal_move_to_destination(feed_value); - set_destination_from_current(); + destination = current_position; } -FORCE_INLINE void move_to(const float (&where)[XYZE], const float &de) { move_to(where[X_AXIS], where[Y_AXIS], where[Z_AXIS], de); } +FORCE_INLINE void move_to(const xyz_pos_t &where, const float &de) { move_to(where.x, where.y, where.z, de); } -void retract_filament(const float (&where)[XYZE]) { +void retract_filament(const xyz_pos_t &where) { if (!g26_retracted) { // Only retract if we are not already retracted! g26_retracted = true; - move_to(where, -1.0 * g26_retraction_multiplier); + move_to(where, -1.0f * g26_retraction_multiplier); } } -void recover_filament(const float (&where)[XYZE]) { +// TODO: Parameterize the Z lift with a define +void retract_lift_move(const xyz_pos_t &s) { + retract_filament(destination); + move_to(current_position.x, current_position.y, current_position.z + 0.5f, 0.0); // Z lift to minimize scraping + move_to(s.x, s.y, s.z + 0.5f, 0.0); // Get to the starting point with no extrusion while lifted +} + +void recover_filament(const xyz_pos_t &where) { if (g26_retracted) { // Only un-retract if we are retracted. - move_to(where, 1.2 * g26_retraction_multiplier); + move_to(where, 1.2f * g26_retraction_multiplier); g26_retracted = false; } } @@ -276,41 +276,34 @@ void recover_filament(const float (&where)[XYZE]) { * segment of a 'circle'. The time this requires is very short and is easily saved by the other * cases where the optimization comes into play. */ -void print_line_from_here_to_there(const float &sx, const float &sy, const float &sz, const float &ex, const float &ey, const float &ez) { - const float dx_s = current_position[X_AXIS] - sx, // find our distance from the start of the actual line segment - dy_s = current_position[Y_AXIS] - sy, - dist_start = HYPOT2(dx_s, dy_s), // We don't need to do a sqrt(), we can compare the distance^2 - // to save computation time - dx_e = current_position[X_AXIS] - ex, // find our distance from the end of the actual line segment - dy_e = current_position[Y_AXIS] - ey, - dist_end = HYPOT2(dx_e, dy_e), +void print_line_from_here_to_there(const xyz_pos_t &s, const xyz_pos_t &e) { - line_length = HYPOT(ex - sx, ey - sy); + // Distances to the start / end of the line + xy_float_t svec = current_position - s, evec = current_position - e; + + const float dist_start = HYPOT2(svec.x, svec.y), + dist_end = HYPOT2(evec.x, evec.y), + line_length = HYPOT(e.x - s.x, e.y - s.y); // If the end point of the line is closer to the nozzle, flip the direction, // moving from the end to the start. On very small lines the optimization isn't worth it. if (dist_end < dist_start && (INTERSECTION_CIRCLE_RADIUS) < ABS(line_length)) - return print_line_from_here_to_there(ex, ey, ez, sx, sy, sz); + return print_line_from_here_to_there(e, s); - // Decide whether to retract & bump + // Decide whether to retract & lift + if (dist_start > 2.0) retract_lift_move(s); - if (dist_start > 2.0) { - retract_filament(destination); - //todo: parameterize the bump height with a define - move_to(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] + 0.500, 0.0); // Z bump to minimize scraping - move_to(sx, sy, sz + 0.500, 0.0); // Get to the starting point with no extrusion while bumped - } - - move_to(sx, sy, sz, 0.0); // Get to the starting point with no extrusion / un-Z bump + move_to(s, 0.0); // Get to the starting point with no extrusion / un-Z lift const float e_pos_delta = line_length * g26_e_axis_feedrate * g26_extrusion_multiplier; recover_filament(destination); - move_to(ex, ey, ez, e_pos_delta); // Get to the ending point with an appropriate amount of extrusion + move_to(e, e_pos_delta); // Get to the ending point with an appropriate amount of extrusion } inline bool look_for_lines_to_connect() { - float sx, sy, ex, ey; + xyz_pos_t s, e; + s.z = e.z = g26_layer_height; for (uint8_t i = 0; i < GRID_MAX_POINTS_X; i++) { for (uint8_t j = 0; j < GRID_MAX_POINTS_Y; j++) { @@ -319,43 +312,43 @@ inline bool look_for_lines_to_connect() { if (user_canceled()) return true; #endif - if (i < GRID_MAX_POINTS_X) { // Can't connect to anything to the right than GRID_MAX_POINTS_X. - // Already a half circle at the edge of the bed. + if (i < GRID_MAX_POINTS_X) { // Can't connect to anything farther to the right than GRID_MAX_POINTS_X. + // Already a half circle at the edge of the bed. - if (is_bitmap_set(circle_flags, i, j) && is_bitmap_set(circle_flags, i + 1, j)) { // check if we can do a line to the left - if (!is_bitmap_set(horizontal_mesh_line_flags, i, j)) { + if (circle_flags.marked(i, j) && circle_flags.marked(i + 1, j)) { // Test whether a leftward line can be done + if (!horizontal_mesh_line_flags.marked(i, j)) { // Two circles need a horizontal line to connect them - sx = _GET_MESH_X( i ) + (INTERSECTION_CIRCLE_RADIUS - (CROSSHAIRS_SIZE)); // right edge - ex = _GET_MESH_X(i + 1) - (INTERSECTION_CIRCLE_RADIUS - (CROSSHAIRS_SIZE)); // left edge + s.x = _GET_MESH_X( i ) + (INTERSECTION_CIRCLE_RADIUS - (CROSSHAIRS_SIZE)); // right edge + e.x = _GET_MESH_X(i + 1) - (INTERSECTION_CIRCLE_RADIUS - (CROSSHAIRS_SIZE)); // left edge - LIMIT(sx, X_MIN_POS + 1, X_MAX_POS - 1); - sy = ey = constrain(_GET_MESH_Y(j), Y_MIN_POS + 1, Y_MAX_POS - 1); - LIMIT(ex, X_MIN_POS + 1, X_MAX_POS - 1); + LIMIT(s.x, X_MIN_POS + 1, X_MAX_POS - 1); + s.y = e.y = constrain(_GET_MESH_Y(j), Y_MIN_POS + 1, Y_MAX_POS - 1); + LIMIT(e.x, X_MIN_POS + 1, X_MAX_POS - 1); - if (position_is_reachable(sx, sy) && position_is_reachable(ex, ey)) - print_line_from_here_to_there(sx, sy, g26_layer_height, ex, ey, g26_layer_height); + if (position_is_reachable(s.x, s.y) && position_is_reachable(e.x, e.y)) + print_line_from_here_to_there(s, e); - bitmap_set(horizontal_mesh_line_flags, i, j); // Mark done, even if skipped + horizontal_mesh_line_flags.mark(i, j); // Mark done, even if skipped } } if (j < GRID_MAX_POINTS_Y) { // Can't connect to anything further back than GRID_MAX_POINTS_Y. // Already a half circle at the edge of the bed. - if (is_bitmap_set(circle_flags, i, j) && is_bitmap_set(circle_flags, i, j + 1)) { // check if we can do a line straight down - if (!is_bitmap_set( vertical_mesh_line_flags, i, j)) { + if (circle_flags.marked(i, j) && circle_flags.marked(i, j + 1)) { // Test whether a downward line can be done + if (!vertical_mesh_line_flags.marked(i, j)) { // Two circles that need a vertical line to connect them - sy = _GET_MESH_Y( j ) + (INTERSECTION_CIRCLE_RADIUS - (CROSSHAIRS_SIZE)); // top edge - ey = _GET_MESH_Y(j + 1) - (INTERSECTION_CIRCLE_RADIUS - (CROSSHAIRS_SIZE)); // bottom edge + s.y = _GET_MESH_Y( j ) + (INTERSECTION_CIRCLE_RADIUS - (CROSSHAIRS_SIZE)); // top edge + e.y = _GET_MESH_Y(j + 1) - (INTERSECTION_CIRCLE_RADIUS - (CROSSHAIRS_SIZE)); // bottom edge - sx = ex = constrain(_GET_MESH_X(i), X_MIN_POS + 1, X_MAX_POS - 1); - LIMIT(sy, Y_MIN_POS + 1, Y_MAX_POS - 1); - LIMIT(ey, Y_MIN_POS + 1, Y_MAX_POS - 1); + s.x = e.x = constrain(_GET_MESH_X(i), X_MIN_POS + 1, X_MAX_POS - 1); + LIMIT(s.y, Y_MIN_POS + 1, Y_MAX_POS - 1); + LIMIT(e.y, Y_MIN_POS + 1, Y_MAX_POS - 1); - if (position_is_reachable(sx, sy) && position_is_reachable(ex, ey)) - print_line_from_here_to_there(sx, sy, g26_layer_height, ex, ey, g26_layer_height); + if (position_is_reachable(s.x, s.y) && position_is_reachable(e.x, e.y)) + print_line_from_here_to_there(s, e); - bitmap_set(vertical_mesh_line_flags, i, j); // Mark done, even if skipped + vertical_mesh_line_flags.mark(i, j); // Mark done, even if skipped } } } @@ -436,19 +429,19 @@ inline bool prime_nozzle() { ui.set_status_P(PSTR(MSG_G26_MANUAL_PRIME), 99); ui.chirp(); - set_destination_from_current(); + destination = current_position; recover_filament(destination); // Make sure G26 doesn't think the filament is retracted(). while (!ui.button_pressed()) { ui.chirp(); - destination[E_AXIS] += 0.25; + destination.e += 0.25; #if ENABLED(PREVENT_LENGTHY_EXTRUDE) Total_Prime += 0.25; if (Total_Prime >= EXTRUDE_MAXLENGTH) return G26_ERR; #endif prepare_internal_move_to_destination(fr_slow_e); - set_destination_from_current(); + destination = current_position; planner.synchronize(); // Without this synchronize, the purge is more consistent, // but because the planner has a buffer, we won't be able // to stop as quickly. So we put up with the less smooth @@ -468,10 +461,10 @@ inline bool prime_nozzle() { ui.set_status_P(PSTR(MSG_G26_FIXED_LENGTH), 99); ui.quick_feedback(); #endif - set_destination_from_current(); - destination[E_AXIS] += g26_prime_length; + destination = current_position; + destination.e += g26_prime_length; prepare_internal_move_to_destination(fr_slow_e); - set_destination_from_current(); + destination.e -= g26_prime_length; retract_filament(destination); } @@ -630,9 +623,9 @@ void GcodeSuite::G26() { return; } - g26_x_pos = parser.seenval('X') ? RAW_X_POSITION(parser.value_linear_units()) : current_position[X_AXIS]; - g26_y_pos = parser.seenval('Y') ? RAW_Y_POSITION(parser.value_linear_units()) : current_position[Y_AXIS]; - if (!position_is_reachable(g26_x_pos, g26_y_pos)) { + g26_pos.set(parser.seenval('X') ? RAW_X_POSITION(parser.value_linear_units()) : current_position.x, + parser.seenval('Y') ? RAW_Y_POSITION(parser.value_linear_units()) : current_position.y); + if (!position_is_reachable(g26_pos.x, g26_pos.y)) { SERIAL_ECHOLNPGM("?Specified X,Y coordinate out of bounds."); return; } @@ -642,9 +635,9 @@ void GcodeSuite::G26() { */ set_bed_leveling_enabled(!parser.seen('D')); - if (current_position[Z_AXIS] < Z_CLEARANCE_BETWEEN_PROBES) { + if (current_position.z < Z_CLEARANCE_BETWEEN_PROBES) { do_blocking_move_to_z(Z_CLEARANCE_BETWEEN_PROBES); - set_current_from_destination(); + current_position = destination; } #if DISABLED(NO_VOLUMETRICS) @@ -655,7 +648,7 @@ void GcodeSuite::G26() { if (turn_on_heaters() != G26_OK) goto LEAVE; - current_position[E_AXIS] = 0.0; + current_position.e = 0.0; sync_plan_position_e(); if (g26_prime_flag && prime_nozzle() != G26_OK) goto LEAVE; @@ -670,13 +663,13 @@ void GcodeSuite::G26() { * It's "Show Time" !!! */ - ZERO(circle_flags); - ZERO(horizontal_mesh_line_flags); - ZERO(vertical_mesh_line_flags); + circle_flags.reset(); + horizontal_mesh_line_flags.reset(); + vertical_mesh_line_flags.reset(); // Move nozzle to the specified height for the first layer - set_destination_from_current(); - destination[Z_AXIS] = g26_layer_height; + destination = current_position; + destination.z = g26_layer_height; move_to(destination, 0.0); move_to(destination, g26_ooze_amount); @@ -706,71 +699,68 @@ void GcodeSuite::G26() { mesh_index_pair location; do { - location = g26_continue_with_closest - ? find_closest_circle_to_print(current_position[X_AXIS], current_position[Y_AXIS]) - : find_closest_circle_to_print(g26_x_pos, g26_y_pos); // Find the closest Mesh Intersection to where we are now. + // Find the nearest confluence + location = find_closest_circle_to_print(g26_continue_with_closest ? xy_pos_t(current_position) : g26_pos); - if (location.x_index >= 0 && location.y_index >= 0) { - const float circle_x = _GET_MESH_X(location.x_index), - circle_y = _GET_MESH_Y(location.y_index); + if (location.valid()) { + const xy_pos_t circle = _GET_MESH_POS(location.pos); // If this mesh location is outside the printable_radius, skip it. - if (!position_is_reachable(circle_x, circle_y)) continue; + if (!position_is_reachable(circle)) continue; // Determine where to start and end the circle, // which is always drawn counter-clockwise. - const uint8_t xi = location.x_index, yi = location.y_index; - const bool f = yi == 0, r = xi >= GRID_MAX_POINTS_X - 1, b = yi >= GRID_MAX_POINTS_Y - 1; + const xy_int8_t st = location; + const bool f = st.y == 0, + r = st.x >= GRID_MAX_POINTS_X - 1, + b = st.y >= GRID_MAX_POINTS_Y - 1; #if ENABLED(ARC_SUPPORT) #define ARC_LENGTH(quarters) (INTERSECTION_CIRCLE_RADIUS * M_PI * (quarters) / 2) #define INTERSECTION_CIRCLE_DIAM ((INTERSECTION_CIRCLE_RADIUS) * 2) - float sx = circle_x + INTERSECTION_CIRCLE_RADIUS, // default to full circle - ex = circle_x + INTERSECTION_CIRCLE_RADIUS, - sy = circle_y, ey = circle_y, - arc_length = ARC_LENGTH(4); + + xy_float_t e = { circle.x + INTERSECTION_CIRCLE_RADIUS, circle.y }; + xyz_float_t s = e; // Figure out where to start and end the arc - we always print counterclockwise - if (xi == 0) { // left edge - if (!f) { sx = circle_x; sy -= INTERSECTION_CIRCLE_RADIUS; } - if (!b) { ex = circle_x; ey += INTERSECTION_CIRCLE_RADIUS; } + float arc_length = ARC_LENGTH(4); + if (st.x == 0) { // left edge + if (!f) { s.x = circle.x; s.y -= INTERSECTION_CIRCLE_RADIUS; } + if (!b) { e.x = circle.x; e.y += INTERSECTION_CIRCLE_RADIUS; } arc_length = (f || b) ? ARC_LENGTH(1) : ARC_LENGTH(2); } else if (r) { // right edge - sx = b ? circle_x - (INTERSECTION_CIRCLE_RADIUS) : circle_x; - ex = f ? circle_x - (INTERSECTION_CIRCLE_RADIUS) : circle_x; - sy = b ? circle_y : circle_y + INTERSECTION_CIRCLE_RADIUS; - ey = f ? circle_y : circle_y - (INTERSECTION_CIRCLE_RADIUS); + if (b) s.set(circle.x - (INTERSECTION_CIRCLE_RADIUS), circle.y); + else s.set(circle.x, circle.y + INTERSECTION_CIRCLE_RADIUS); + if (f) e.set(circle.x - (INTERSECTION_CIRCLE_RADIUS), circle.y); + else e.set(circle.x, circle.y - (INTERSECTION_CIRCLE_RADIUS)); arc_length = (f || b) ? ARC_LENGTH(1) : ARC_LENGTH(2); } else if (f) { - ex -= INTERSECTION_CIRCLE_DIAM; + e.x -= INTERSECTION_CIRCLE_DIAM; arc_length = ARC_LENGTH(2); } else if (b) { - sx -= INTERSECTION_CIRCLE_DIAM; + s.x -= INTERSECTION_CIRCLE_DIAM; arc_length = ARC_LENGTH(2); } - const float arc_offset[2] = { circle_x - sx, circle_y - sy }, - dx_s = current_position[X_AXIS] - sx, // find our distance from the start of the actual circle - dy_s = current_position[Y_AXIS] - sy, - dist_start = HYPOT2(dx_s, dy_s), - endpoint[XYZE] = { - ex, ey, - g26_layer_height, - current_position[E_AXIS] + (arc_length * g26_e_axis_feedrate * g26_extrusion_multiplier) - }; + const ab_float_t arc_offset = circle - s; + const xy_float_t dist = current_position - s; // Distance from the start of the actual circle + const float dist_start = HYPOT2(dist.x, dist.y); + const xyze_pos_t endpoint = { + e.x, e.y, g26_layer_height, + current_position.e + (arc_length * g26_e_axis_feedrate * g26_extrusion_multiplier) + }; if (dist_start > 2.0) { - retract_filament(destination); - //todo: parameterize the bump height with a define - move_to(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] + 0.500, 0.0); // Z bump to minimize scraping - move_to(sx, sy, g26_layer_height + 0.500, 0.0); // Get to the starting point with no extrusion while bumped + s.z = g26_layer_height + 0.5f; + retract_lift_move(s); } - move_to(sx, sy, g26_layer_height, 0.0); // Get to the starting point with no extrusion / un-Z bump + s.z = g26_layer_height; + move_to(s, 0.0); // Get to the starting point with no extrusion / un-Z lift recover_filament(destination); @@ -778,7 +768,7 @@ void GcodeSuite::G26() { feedrate_mm_s = PLANNER_XY_FEEDRATE() * 0.1f; plan_arc(endpoint, arc_offset, false); // Draw a counter-clockwise arc feedrate_mm_s = old_feedrate; - set_destination_from_current(); + destination = current_position; #if HAS_LCD_MENU if (user_canceled()) goto LEAVE; // Check if the user wants to stop the Mesh Validation @@ -787,7 +777,7 @@ void GcodeSuite::G26() { #else // !ARC_SUPPORT int8_t start_ind = -2, end_ind = 9; // Assume a full circle (from 5:00 to 5:00) - if (xi == 0) { // Left edge? Just right half. + if (st.x == 0) { // Left edge? Just right half. start_ind = f ? 0 : -3; // 03:00 to 12:00 for front-left end_ind = b ? 0 : 2; // 06:00 to 03:00 for back-left } @@ -810,23 +800,21 @@ void GcodeSuite::G26() { if (user_canceled()) goto LEAVE; // Check if the user wants to stop the Mesh Validation #endif - float rx = circle_x + _COS(ind), // For speed, these are now a lookup table entry - ry = circle_y + _SIN(ind), - xe = circle_x + _COS(ind + 1), - ye = circle_y + _SIN(ind + 1); + xy_float_t p = { circle.x + _COS(ind ), circle.y + _SIN(ind ), g26_layer_height }, + q = { circle.x + _COS(ind + 1), circle.y + _SIN(ind + 1), g26_layer_height }; #if IS_KINEMATIC // Check to make sure this segment is entirely on the bed, skip if not. - if (!position_is_reachable(rx, ry) || !position_is_reachable(xe, ye)) continue; - #else // not, we need to skip - LIMIT(rx, X_MIN_POS + 1, X_MAX_POS - 1); // This keeps us from bumping the endstops - LIMIT(ry, Y_MIN_POS + 1, Y_MAX_POS - 1); - LIMIT(xe, X_MIN_POS + 1, X_MAX_POS - 1); - LIMIT(ye, Y_MIN_POS + 1, Y_MAX_POS - 1); + if (!position_is_reachable(p) || !position_is_reachable(q)) continue; + #else + LIMIT(p.x, X_MIN_POS + 1, X_MAX_POS - 1); // Prevent hitting the endstops + LIMIT(p.y, Y_MIN_POS + 1, Y_MAX_POS - 1); + LIMIT(q.x, X_MIN_POS + 1, X_MAX_POS - 1); + LIMIT(q.y, Y_MIN_POS + 1, Y_MAX_POS - 1); #endif - print_line_from_here_to_there(rx, ry, g26_layer_height, xe, ye, g26_layer_height); - SERIAL_FLUSH(); // Prevent host M105 buffer overrun. + print_line_from_here_to_there(p, q); + SERIAL_FLUSH(); // Prevent host M105 buffer overrun. } #endif // !ARC_SUPPORT @@ -836,19 +824,18 @@ void GcodeSuite::G26() { SERIAL_FLUSH(); // Prevent host M105 buffer overrun. - } while (--g26_repeats && location.x_index >= 0 && location.y_index >= 0); + } while (--g26_repeats && location.valid()); LEAVE: ui.set_status_P(PSTR(MSG_G26_LEAVING), -1); retract_filament(destination); - destination[Z_AXIS] = Z_CLEARANCE_BETWEEN_PROBES; + destination.z = Z_CLEARANCE_BETWEEN_PROBES; move_to(destination, 0); // Raise the nozzle - destination[X_AXIS] = g26_x_pos; // Move back to the starting position - destination[Y_AXIS] = g26_y_pos; - //destination[Z_AXIS] = Z_CLEARANCE_BETWEEN_PROBES; // Keep the nozzle where it is + destination.set(g26_pos.x, g26_pos.y); // Move back to the starting position + //destination.z = Z_CLEARANCE_BETWEEN_PROBES; // Keep the nozzle where it is move_to(destination, 0); // Move back to the starting position diff --git a/Marlin/src/gcode/bedlevel/G42.cpp b/Marlin/src/gcode/bedlevel/G42.cpp index 55bc82317c3a..424e5a6995f9 100644 --- a/Marlin/src/gcode/bedlevel/G42.cpp +++ b/Marlin/src/gcode/bedlevel/G42.cpp @@ -27,6 +27,7 @@ #include "../gcode.h" #include "../../Marlin.h" // for IsRunning() #include "../../module/motion.h" +#include "../../module/probe.h" // for probe_offset #include "../../feature/bedlevel/bedlevel.h" /** @@ -44,15 +45,15 @@ void GcodeSuite::G42() { return; } - set_destination_from_current(); + destination = current_position; - if (hasI) destination[X_AXIS] = _GET_MESH_X(ix); - if (hasJ) destination[Y_AXIS] = _GET_MESH_Y(iy); + if (hasI) destination.x = _GET_MESH_X(ix); + if (hasJ) destination.y = _GET_MESH_Y(iy); #if HAS_BED_PROBE if (parser.boolval('P')) { - if (hasI) destination[X_AXIS] -= probe_offset[X_AXIS]; - if (hasJ) destination[Y_AXIS] -= probe_offset[Y_AXIS]; + if (hasI) destination.x -= probe_offset.x; + if (hasJ) destination.y -= probe_offset.y; } #endif diff --git a/Marlin/src/gcode/bedlevel/M420.cpp b/Marlin/src/gcode/bedlevel/M420.cpp index d3d94a99cc48..779490840778 100644 --- a/Marlin/src/gcode/bedlevel/M420.cpp +++ b/Marlin/src/gcode/bedlevel/M420.cpp @@ -66,10 +66,9 @@ void GcodeSuite::M420() { #if ENABLED(AUTO_BED_LEVELING_BILINEAR) const float x_min = probe_min_x(), x_max = probe_max_x(), y_min = probe_min_y(), y_max = probe_max_y(); - bilinear_start[X_AXIS] = x_min; - bilinear_start[Y_AXIS] = y_min; - bilinear_grid_spacing[X_AXIS] = (x_max - x_min) / (GRID_MAX_POINTS_X - 1); - bilinear_grid_spacing[Y_AXIS] = (y_max - y_min) / (GRID_MAX_POINTS_Y - 1); + bilinear_start.set(x_min, y_min); + bilinear_grid_spacing.set((x_max - x_min) / (GRID_MAX_POINTS_X - 1), + (y_max - y_min) / (GRID_MAX_POINTS_Y - 1)); #endif for (uint8_t x = 0; x < GRID_MAX_POINTS_X; x++) for (uint8_t y = 0; y < GRID_MAX_POINTS_Y; y++) { @@ -91,7 +90,7 @@ void GcodeSuite::M420() { // (Don't disable for just M420 or M420 V) if (seen_S && !to_enable) set_bed_leveling_enabled(false); - const float oldpos[] = { current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] }; + xyz_pos_t oldpos = current_position; #if ENABLED(AUTO_BED_LEVELING_UBL) @@ -251,7 +250,7 @@ void GcodeSuite::M420() { #endif // Report change in position - if (memcmp(oldpos, current_position, sizeof(oldpos))) + if (oldpos != current_position) report_current_position(); } diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 45eec2805d19..5f1ef2e9a3c8 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -61,15 +61,15 @@ #if ABL_GRID #if ENABLED(PROBE_Y_FIRST) - #define PR_OUTER_VAR xCount - #define PR_OUTER_END abl_grid_points_x - #define PR_INNER_VAR yCount - #define PR_INNER_END abl_grid_points_y + #define PR_OUTER_VAR meshCount.x + #define PR_OUTER_END abl_grid_points.x + #define PR_INNER_VAR meshCount.y + #define PR_INNER_END abl_grid_points.y #else - #define PR_OUTER_VAR yCount - #define PR_OUTER_END abl_grid_points_y - #define PR_INNER_VAR xCount - #define PR_INNER_END abl_grid_points_x + #define PR_OUTER_VAR meshCount.y + #define PR_OUTER_END abl_grid_points.y + #define PR_INNER_VAR meshCount.x + #define PR_INNER_END abl_grid_points.x #endif #endif @@ -210,7 +210,8 @@ G29_TYPE GcodeSuite::G29() { #endif ABL_VAR int verbose_level; - ABL_VAR float xProbe, yProbe, measured_z; + ABL_VAR xy_pos_t probePos; + ABL_VAR float measured_z; ABL_VAR bool dryrun, abl_should_enable; #if EITHER(PROBE_MANUALLY, AUTO_BED_LEVELING_LINEAR) @@ -224,20 +225,17 @@ G29_TYPE GcodeSuite::G29() { #if ABL_GRID #if ENABLED(PROBE_MANUALLY) - ABL_VAR uint8_t PR_OUTER_VAR; - ABL_VAR int8_t PR_INNER_VAR; + ABL_VAR xy_int8_t meshCount; #endif - ABL_VAR int left_probe_bed_position, right_probe_bed_position, front_probe_bed_position, back_probe_bed_position; - ABL_VAR float xGridSpacing = 0, yGridSpacing = 0; + ABL_VAR xy_int_t probe_position_lf, probe_position_rb; + ABL_VAR xy_float_t gridSpacing = { 0, 0 }; #if ENABLED(AUTO_BED_LEVELING_LINEAR) - ABL_VAR uint8_t abl_grid_points_x = GRID_MAX_POINTS_X, - abl_grid_points_y = GRID_MAX_POINTS_Y; ABL_VAR bool do_topography_map; + ABL_VAR xy_uint8_t abl_grid_points; #else // Bilinear - uint8_t constexpr abl_grid_points_x = GRID_MAX_POINTS_X, - abl_grid_points_y = GRID_MAX_POINTS_Y; + constexpr xy_uint8_t abl_grid_points = { GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y }; #endif #if ENABLED(AUTO_BED_LEVELING_LINEAR) @@ -269,15 +267,15 @@ G29_TYPE GcodeSuite::G29() { const float x_min = probe_min_x(), x_max = probe_max_x(), y_min = probe_min_y(), y_max = probe_max_y(); ABL_VAR vector_3 points[3] = { - #if ENABLED(HAS_FIXED_3POINT) - vector_3(PROBE_PT_1_X, PROBE_PT_1_Y, 0), - vector_3(PROBE_PT_2_X, PROBE_PT_2_Y, 0), - vector_3(PROBE_PT_3_X, PROBE_PT_3_Y, 0) - #else - vector_3(x_min, y_min, 0), - vector_3(x_max, y_min, 0), - vector_3((x_max - x_min) / 2, y_max, 0) - #endif + #if ENABLED(HAS_FIXED_3POINT) + { PROBE_PT_1_X, PROBE_PT_1_Y, 0 }, + { PROBE_PT_2_X, PROBE_PT_2_Y, 0 }, + { PROBE_PT_3_X, PROBE_PT_3_Y, 0 } + #else + { x_min, y_min, 0 }, + { x_max, y_min, 0 }, + { (x_max - x_min) / 2, y_max, 0 } + #endif }; #endif // AUTO_BED_LEVELING_3POINT @@ -311,7 +309,7 @@ G29_TYPE GcodeSuite::G29() { G29_RETURN(false); } - const float rz = parser.seenval('Z') ? RAW_Z_POSITION(parser.value_linear_units()) : current_position[Z_AXIS]; + const float rz = parser.seenval('Z') ? RAW_Z_POSITION(parser.value_linear_units()) : current_position.z; if (!WITHIN(rz, -10, 10)) { SERIAL_ERROR_MSG("Bad Z value"); G29_RETURN(false); @@ -323,8 +321,8 @@ G29_TYPE GcodeSuite::G29() { if (!isnan(rx) && !isnan(ry)) { // Get nearest i / j from rx / ry - i = (rx - bilinear_start[X_AXIS] + 0.5 * xGridSpacing) / xGridSpacing; - j = (ry - bilinear_start[Y_AXIS] + 0.5 * yGridSpacing) / yGridSpacing; + i = (rx - bilinear_start.x + 0.5 * gridSpacing.x) / gridSpacing.x; + j = (ry - bilinear_start.y + 0.5 * gridSpacing.y) / gridSpacing.y; LIMIT(i, 0, GRID_MAX_POINTS_X - 1); LIMIT(j, 0, GRID_MAX_POINTS_Y - 1); } @@ -373,20 +371,22 @@ G29_TYPE GcodeSuite::G29() { // X and Y specify points in each direction, overriding the default // These values may be saved with the completed mesh - abl_grid_points_x = parser.intval('X', GRID_MAX_POINTS_X); - abl_grid_points_y = parser.intval('Y', GRID_MAX_POINTS_Y); - if (parser.seenval('P')) abl_grid_points_x = abl_grid_points_y = parser.value_int(); + abl_grid_points.set( + parser.byteval('X', GRID_MAX_POINTS_X), + parser.byteval('Y', GRID_MAX_POINTS_Y) + ); + if (parser.seenval('P')) abl_grid_points.x = abl_grid_points.y = parser.value_int(); - if (!WITHIN(abl_grid_points_x, 2, GRID_MAX_POINTS_X)) { + if (!WITHIN(abl_grid_points.x, 2, GRID_MAX_POINTS_X)) { SERIAL_ECHOLNPGM("?Probe points (X) implausible (2-" STRINGIFY(GRID_MAX_POINTS_X) ")."); G29_RETURN(false); } - if (!WITHIN(abl_grid_points_y, 2, GRID_MAX_POINTS_Y)) { + if (!WITHIN(abl_grid_points.y, 2, GRID_MAX_POINTS_Y)) { SERIAL_ECHOLNPGM("?Probe points (Y) implausible (2-" STRINGIFY(GRID_MAX_POINTS_Y) ")."); G29_RETURN(false); } - abl_points = abl_grid_points_x * abl_grid_points_y; + abl_points = abl_grid_points.x * abl_grid_points.y; mean = 0; #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) @@ -404,27 +404,35 @@ G29_TYPE GcodeSuite::G29() { if (parser.seen('H')) { const int16_t size = (int16_t)parser.value_linear_units(); - left_probe_bed_position = _MAX(X_CENTER - size / 2, x_min); - right_probe_bed_position = _MIN(left_probe_bed_position + size, x_max); - front_probe_bed_position = _MAX(Y_CENTER - size / 2, y_min); - back_probe_bed_position = _MIN(front_probe_bed_position + size, y_max); + probe_position_lf.set( + _MAX(X_CENTER - size / 2, x_min), + _MAX(Y_CENTER - size / 2, y_min) + ); + probe_position_rb.set( + _MIN(probe_position_lf.x + size, x_max), + _MIN(probe_position_lf.y + size, y_max) + ); } else { - left_probe_bed_position = parser.seenval('L') ? (int)RAW_X_POSITION(parser.value_linear_units()) : _MAX(X_CENTER - X_BED_SIZE / 2, x_min); - right_probe_bed_position = parser.seenval('R') ? (int)RAW_X_POSITION(parser.value_linear_units()) : _MIN(left_probe_bed_position + X_BED_SIZE, x_max); - front_probe_bed_position = parser.seenval('F') ? (int)RAW_Y_POSITION(parser.value_linear_units()) : _MAX(Y_CENTER - Y_BED_SIZE / 2, y_min); - back_probe_bed_position = parser.seenval('B') ? (int)RAW_Y_POSITION(parser.value_linear_units()) : _MIN(front_probe_bed_position + Y_BED_SIZE, y_max); + probe_position_lf.set( + parser.seenval('L') ? (int)RAW_X_POSITION(parser.value_linear_units()) : _MAX(X_CENTER - (X_BED_SIZE) / 2, x_min), + parser.seenval('F') ? (int)RAW_Y_POSITION(parser.value_linear_units()) : _MAX(Y_CENTER - (Y_BED_SIZE) / 2, y_min) + ); + probe_position_rb.set( + parser.seenval('R') ? (int)RAW_X_POSITION(parser.value_linear_units()) : _MIN(probe_position_lf.x + X_BED_SIZE, x_max), + parser.seenval('B') ? (int)RAW_Y_POSITION(parser.value_linear_units()) : _MIN(probe_position_lf.y + Y_BED_SIZE, y_max) + ); } if ( #if IS_SCARA || ENABLED(DELTA) - !position_is_reachable_by_probe(left_probe_bed_position, 0) - || !position_is_reachable_by_probe(right_probe_bed_position, 0) - || !position_is_reachable_by_probe(0, front_probe_bed_position) - || !position_is_reachable_by_probe(0, back_probe_bed_position) + !position_is_reachable_by_probe(probe_position_lf.x, 0) + || !position_is_reachable_by_probe(probe_position_rb.x, 0) + || !position_is_reachable_by_probe(0, probe_position_lf.y) + || !position_is_reachable_by_probe(0, probe_position_rb.y) #else - !position_is_reachable_by_probe(left_probe_bed_position, front_probe_bed_position) - || !position_is_reachable_by_probe(right_probe_bed_position, back_probe_bed_position) + !position_is_reachable_by_probe(probe_position_lf) + || !position_is_reachable_by_probe(probe_position_rb) #endif ) { SERIAL_ECHOLNPGM("? (L,R,F,B) out of bounds."); @@ -432,8 +440,8 @@ G29_TYPE GcodeSuite::G29() { } // probe at the points of a lattice grid - xGridSpacing = (right_probe_bed_position - left_probe_bed_position) / (abl_grid_points_x - 1); - yGridSpacing = (back_probe_bed_position - front_probe_bed_position) / (abl_grid_points_y - 1); + gridSpacing.set((probe_position_rb.x - probe_position_lf.x) / (abl_grid_points.x - 1), + (probe_position_rb.y - probe_position_lf.y) / (abl_grid_points.y - 1)); #endif // ABL_GRID @@ -464,19 +472,13 @@ G29_TYPE GcodeSuite::G29() { #if ENABLED(PROBE_MANUALLY) if (!no_action) #endif - if ( xGridSpacing != bilinear_grid_spacing[X_AXIS] - || yGridSpacing != bilinear_grid_spacing[Y_AXIS] - || left_probe_bed_position != bilinear_start[X_AXIS] - || front_probe_bed_position != bilinear_start[Y_AXIS] - ) { + if (gridSpacing != bilinear_grid_spacing || probe_position_lf != bilinear_start) { // Reset grid to 0.0 or "not probed". (Also disables ABL) reset_bed_level(); // Initialize a grid with the given dimensions - bilinear_grid_spacing[X_AXIS] = xGridSpacing; - bilinear_grid_spacing[Y_AXIS] = yGridSpacing; - bilinear_start[X_AXIS] = left_probe_bed_position; - bilinear_start[Y_AXIS] = front_probe_bed_position; + bilinear_grid_spacing = gridSpacing.asInt(); + bilinear_start = probe_position_lf; // Can't re-enable (on error) until the new grid is written abl_should_enable = false; @@ -546,17 +548,17 @@ G29_TYPE GcodeSuite::G29() { // For G29 after adjusting Z. // Save the previous Z before going to the next point - measured_z = current_position[Z_AXIS]; + measured_z = current_position.z; #if ENABLED(AUTO_BED_LEVELING_LINEAR) mean += measured_z; eqnBVector[index] = measured_z; - eqnAMatrix[index + 0 * abl_points] = xProbe; - eqnAMatrix[index + 1 * abl_points] = yProbe; + eqnAMatrix[index + 0 * abl_points] = probePos.x; + eqnAMatrix[index + 1 * abl_points] = probePos.y; eqnAMatrix[index + 2 * abl_points] = 1; - incremental_LSF(&lsf_results, xProbe, yProbe, measured_z); + incremental_LSF(&lsf_results, probePos, measured_z); #elif ENABLED(AUTO_BED_LEVELING_3POINT) @@ -564,12 +566,13 @@ G29_TYPE GcodeSuite::G29() { #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) - z_values[xCount][yCount] = measured_z + zoffset; + const float newz = measured_z + zoffset; + z_values[meshCount.x][meshCount.y] = newz; #if ENABLED(EXTENSIBLE_UI) - ExtUI::onMeshUpdate(xCount, yCount, z_values[xCount][yCount]); + ExtUI::onMeshUpdate(meshCount, newz); #endif - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Save X", xCount, " Y", yCount, " Z", measured_z + zoffset); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Save X", meshCount.x, " Y", meshCount.y, " Z", measured_z + zoffset); #endif } @@ -583,7 +586,7 @@ G29_TYPE GcodeSuite::G29() { // Skip any unreachable points while (abl_probe_index < abl_points) { - // Set xCount, yCount based on abl_probe_index, with zig-zag + // Set meshCount.x, meshCount.y based on abl_probe_index, with zig-zag PR_OUTER_VAR = abl_probe_index / PR_INNER_END; PR_INNER_VAR = abl_probe_index - (PR_OUTER_VAR * PR_INNER_END); @@ -592,24 +595,23 @@ G29_TYPE GcodeSuite::G29() { if (zig) PR_INNER_VAR = (PR_INNER_END - 1) - PR_INNER_VAR; - const float xBase = xCount * xGridSpacing + left_probe_bed_position, - yBase = yCount * yGridSpacing + front_probe_bed_position; + const xy_pos_t base = probe_position_lf.asFloat() + gridSpacing * meshCount.asFloat(); - xProbe = FLOOR(xBase + (xBase < 0 ? 0 : 0.5)); - yProbe = FLOOR(yBase + (yBase < 0 ? 0 : 0.5)); + probePos.set(FLOOR(base.x + (base.x < 0 ? 0 : 0.5)), + FLOOR(base.y + (base.y < 0 ? 0 : 0.5))); #if ENABLED(AUTO_BED_LEVELING_LINEAR) - indexIntoAB[xCount][yCount] = abl_probe_index; + indexIntoAB[meshCount.x][meshCount.y] = abl_probe_index; #endif // Keep looping till a reachable point is found - if (position_is_reachable(xProbe, yProbe)) break; + if (position_is_reachable(probePos)) break; ++abl_probe_index; } // Is there a next point to move to? if (abl_probe_index < abl_points) { - _manual_goto_xy(xProbe, yProbe); // Can be used here too! + _manual_goto_xy(probePos); // Can be used here too! #if HAS_SOFTWARE_ENDSTOPS // Disable software endstops to allow manual adjustment // If G29 is not completed, they will not be re-enabled @@ -633,9 +635,8 @@ G29_TYPE GcodeSuite::G29() { // Probe at 3 arbitrary points if (abl_probe_index < abl_points) { - xProbe = points[abl_probe_index].x; - yProbe = points[abl_probe_index].y; - _manual_goto_xy(xProbe, yProbe); + probePos = points[abl_probe_index]; + _manual_goto_xy(probePos); #if HAS_SOFTWARE_ENDSTOPS // Disable software endstops to allow manual adjustment // If G29 is not completed, they will not be re-enabled @@ -654,11 +655,7 @@ G29_TYPE GcodeSuite::G29() { if (!dryrun) { vector_3 planeNormal = vector_3::cross(points[0] - points[1], points[2] - points[1]).get_normal(); - if (planeNormal.z < 0) { - planeNormal.x *= -1; - planeNormal.y *= -1; - planeNormal.z *= -1; - } + if (planeNormal.z < 0) planeNormal *= -1; planner.bed_level_matrix = matrix_3x3::create_look_at(planeNormal); // Can't re-enable (on error) until the new grid is written @@ -681,8 +678,11 @@ G29_TYPE GcodeSuite::G29() { measured_z = 0; + xy_int8_t meshCount; + + // Outer loop is X with PROBE_Y_FIRST enabled // Outer loop is Y with PROBE_Y_FIRST disabled - for (uint8_t PR_OUTER_VAR = 0; PR_OUTER_VAR < PR_OUTER_END && !isnan(measured_z); PR_OUTER_VAR++) { + for (PR_OUTER_VAR = 0; PR_OUTER_VAR < PR_OUTER_END && !isnan(measured_z); PR_OUTER_VAR++) { int8_t inStart, inStop, inInc; @@ -703,21 +703,21 @@ G29_TYPE GcodeSuite::G29() { uint8_t pt_index = (PR_OUTER_VAR) * (PR_INNER_END) + 1; // Inner loop is Y with PROBE_Y_FIRST enabled - for (int8_t PR_INNER_VAR = inStart; PR_INNER_VAR != inStop; pt_index++, PR_INNER_VAR += inInc) { + // Inner loop is X with PROBE_Y_FIRST disabled + for (PR_INNER_VAR = inStart; PR_INNER_VAR != inStop; pt_index++, PR_INNER_VAR += inInc) { - const float xBase = left_probe_bed_position + xGridSpacing * xCount, - yBase = front_probe_bed_position + yGridSpacing * yCount; + const xy_pos_t base = probe_position_lf.asFloat() + gridSpacing * meshCount.asFloat(); - xProbe = FLOOR(xBase + (xBase < 0 ? 0 : 0.5)); - yProbe = FLOOR(yBase + (yBase < 0 ? 0 : 0.5)); + probePos.set(FLOOR(base.x + (base.x < 0 ? 0 : 0.5)), + FLOOR(base.y + (base.y < 0 ? 0 : 0.5))); #if ENABLED(AUTO_BED_LEVELING_LINEAR) - indexIntoAB[xCount][yCount] = ++abl_probe_index; // 0... + indexIntoAB[meshCount.x][meshCount.y] = ++abl_probe_index; // 0... #endif #if IS_KINEMATIC // Avoid probing outside the round or hexagonal area - if (!position_is_reachable_by_probe(xProbe, yProbe)) continue; + if (!position_is_reachable_by_probe(probePos)) continue; #endif if (verbose_level) SERIAL_ECHOLNPAIR("Probing mesh point ", int(pt_index), "/", int(GRID_MAX_POINTS), "."); @@ -725,7 +725,7 @@ G29_TYPE GcodeSuite::G29() { ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), PSTR(MSG_PROBING_MESH), int(pt_index), int(GRID_MAX_POINTS)); #endif - measured_z = faux ? 0.001 * random(-100, 101) : probe_at_point(xProbe, yProbe, raise_after, verbose_level); + measured_z = faux ? 0.001 * random(-100, 101) : probe_at_point(probePos, raise_after, verbose_level); if (isnan(measured_z)) { set_bed_leveling_enabled(abl_should_enable); @@ -736,17 +736,17 @@ G29_TYPE GcodeSuite::G29() { mean += measured_z; eqnBVector[abl_probe_index] = measured_z; - eqnAMatrix[abl_probe_index + 0 * abl_points] = xProbe; - eqnAMatrix[abl_probe_index + 1 * abl_points] = yProbe; + eqnAMatrix[abl_probe_index + 0 * abl_points] = probePos.x; + eqnAMatrix[abl_probe_index + 1 * abl_points] = probePos.y; eqnAMatrix[abl_probe_index + 2 * abl_points] = 1; - incremental_LSF(&lsf_results, xProbe, yProbe, measured_z); + incremental_LSF(&lsf_results, probePos, measured_z); #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) - z_values[xCount][yCount] = measured_z + zoffset; + z_values[meshCount.x][meshCount.y] = measured_z + zoffset; #if ENABLED(EXTENSIBLE_UI) - ExtUI::onMeshUpdate(xCount, yCount, z_values[xCount][yCount]); + ExtUI::onMeshUpdate(meshCount.x, meshCount.y, z_values[meshCount.x][meshCount.y]); #endif #endif @@ -768,9 +768,8 @@ G29_TYPE GcodeSuite::G29() { #endif // Retain the last probe position - xProbe = points[i].x; - yProbe = points[i].y; - measured_z = faux ? 0.001 * random(-100, 101) : probe_at_point(xProbe, yProbe, raise_after, verbose_level); + probePos = points[i]; + measured_z = faux ? 0.001 * random(-100, 101) : probe_at_point(probePos, raise_after, verbose_level); if (isnan(measured_z)) { set_bed_leveling_enabled(abl_should_enable); break; @@ -845,19 +844,19 @@ G29_TYPE GcodeSuite::G29() { * plane equation in the standard form, which is Vx*x+Vy*y+Vz*z+d = 0 * so Vx = -a Vy = -b Vz = 1 (we want the vector facing towards positive Z */ - float plane_equation_coefficients[3]; + struct { float a, b, d; } plane_equation_coefficients; finish_incremental_LSF(&lsf_results); - plane_equation_coefficients[0] = -lsf_results.A; // We should be able to eliminate the '-' on these three lines and down below - plane_equation_coefficients[1] = -lsf_results.B; // but that is not yet tested. - plane_equation_coefficients[2] = -lsf_results.D; + plane_equation_coefficients.a = -lsf_results.A; // We should be able to eliminate the '-' on these three lines and down below + plane_equation_coefficients.b = -lsf_results.B; // but that is not yet tested. + plane_equation_coefficients.d = -lsf_results.D; mean /= abl_points; if (verbose_level) { - SERIAL_ECHOPAIR_F("Eqn coefficients: a: ", plane_equation_coefficients[0], 8); - SERIAL_ECHOPAIR_F(" b: ", plane_equation_coefficients[1], 8); - SERIAL_ECHOPAIR_F(" d: ", plane_equation_coefficients[2], 8); + SERIAL_ECHOPAIR_F("Eqn coefficients: a: ", plane_equation_coefficients.a, 8); + SERIAL_ECHOPAIR_F(" b: ", plane_equation_coefficients.b, 8); + SERIAL_ECHOPAIR_F(" d: ", plane_equation_coefficients.d, 8); if (verbose_level > 2) SERIAL_ECHOPAIR_F("\nMean of sampled points: ", mean, 8); SERIAL_EOL(); @@ -866,13 +865,34 @@ G29_TYPE GcodeSuite::G29() { // Create the matrix but don't correct the position yet if (!dryrun) planner.bed_level_matrix = matrix_3x3::create_look_at( - vector_3(-plane_equation_coefficients[0], -plane_equation_coefficients[1], 1) // We can eliminate the '-' here and up above + vector_3(-plane_equation_coefficients.a, -plane_equation_coefficients.b, 1) // We can eliminate the '-' here and up above ); // Show the Topography map if enabled if (do_topography_map) { - SERIAL_ECHOLNPGM("\nBed Height Topography:\n" + float min_diff = 999; + + auto print_topo_map = [&](PGM_P const title, const bool get_min) { + serialprintPGM(title); + for (int8_t yy = abl_grid_points.y - 1; yy >= 0; yy--) { + for (uint8_t xx = 0; xx < abl_grid_points.x; xx++) { + const int ind = indexIntoAB[xx][yy]; + xyz_float_t tmp = { eqnAMatrix[ind + 0 * abl_points], + eqnAMatrix[ind + 1 * abl_points], 0 }; + apply_rotation_xyz(planner.bed_level_matrix, tmp); + if (get_min) NOMORE(min_diff, eqnBVector[ind] - tmp.z); + const float subval = get_min ? mean : tmp.z + min_diff, + diff = eqnBVector[ind] - subval; + SERIAL_CHAR(' '); if (diff >= 0.0) SERIAL_CHAR('+'); // Include + for column alignment + SERIAL_ECHO_F(diff, 5); + } // xx + SERIAL_EOL(); + } // yy + SERIAL_EOL(); + }; + + print_topo_map(PSTR("\nBed Height Topography:\n" " +--- BACK --+\n" " | |\n" " L | (+) | R\n" @@ -882,56 +902,10 @@ G29_TYPE GcodeSuite::G29() { " | (-) | T\n" " | |\n" " O-- FRONT --+\n" - " (0,0)"); + " (0,0)\n"), true); + if (verbose_level > 3) + print_topo_map(PSTR("\nCorrected Bed Height vs. Bed Topology:\n"), false); - float min_diff = 999; - - for (int8_t yy = abl_grid_points_y - 1; yy >= 0; yy--) { - for (uint8_t xx = 0; xx < abl_grid_points_x; xx++) { - int ind = indexIntoAB[xx][yy]; - float diff = eqnBVector[ind] - mean, - x_tmp = eqnAMatrix[ind + 0 * abl_points], - y_tmp = eqnAMatrix[ind + 1 * abl_points], - z_tmp = 0; - - apply_rotation_xyz(planner.bed_level_matrix, x_tmp, y_tmp, z_tmp); - - NOMORE(min_diff, eqnBVector[ind] - z_tmp); - - if (diff >= 0.0) - SERIAL_ECHOPGM(" +"); // Include + for column alignment - else - SERIAL_CHAR(' '); - SERIAL_ECHO_F(diff, 5); - } // xx - SERIAL_EOL(); - } // yy - SERIAL_EOL(); - - if (verbose_level > 3) { - SERIAL_ECHOLNPGM("\nCorrected Bed Height vs. Bed Topology:"); - - for (int8_t yy = abl_grid_points_y - 1; yy >= 0; yy--) { - for (uint8_t xx = 0; xx < abl_grid_points_x; xx++) { - int ind = indexIntoAB[xx][yy]; - float x_tmp = eqnAMatrix[ind + 0 * abl_points], - y_tmp = eqnAMatrix[ind + 1 * abl_points], - z_tmp = 0; - - apply_rotation_xyz(planner.bed_level_matrix, x_tmp, y_tmp, z_tmp); - - float diff = eqnBVector[ind] - z_tmp - min_diff; - if (diff >= 0.0) - SERIAL_ECHOPGM(" +"); - // Include + for column alignment - else - SERIAL_CHAR(' '); - SERIAL_ECHO_F(diff, 5); - } // xx - SERIAL_EOL(); - } // yy - SERIAL_EOL(); - } } //do_topography_map #endif // AUTO_BED_LEVELING_LINEAR @@ -950,24 +924,20 @@ G29_TYPE GcodeSuite::G29() { if (DEBUGGING(LEVELING)) DEBUG_POS("G29 uncorrected XYZ", current_position); - float converted[XYZ]; - COPY(converted, current_position); - - planner.leveling_active = true; - planner.unapply_leveling(converted); // use conversion machinery - planner.leveling_active = false; + xyze_pos_t converted = current_position; + planner.force_unapply_leveling(converted); // use conversion machinery // Use the last measured distance to the bed, if possible - if ( NEAR(current_position[X_AXIS], xProbe - probe_offset[X_AXIS]) - && NEAR(current_position[Y_AXIS], yProbe - probe_offset[Y_AXIS]) + if ( NEAR(current_position.x, probePos.x - probe_offset.x) + && NEAR(current_position.y, probePos.y - probe_offset.y) ) { - const float simple_z = current_position[Z_AXIS] - measured_z; - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Probed Z", simple_z, " Matrix Z", converted[Z_AXIS], " Discrepancy ", simple_z - converted[Z_AXIS]); - converted[Z_AXIS] = simple_z; + const float simple_z = current_position.z - measured_z; + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Probed Z", simple_z, " Matrix Z", converted.z, " Discrepancy ", simple_z - converted.z); + converted.z = simple_z; } // The rotated XY and corrected Z are now current_position - COPY(current_position, converted); + current_position = converted; if (DEBUGGING(LEVELING)) DEBUG_POS("G29 corrected XYZ", current_position); } @@ -975,13 +945,13 @@ G29_TYPE GcodeSuite::G29() { #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) if (!dryrun) { - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("G29 uncorrected Z:", current_position[Z_AXIS]); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("G29 uncorrected Z:", current_position.z); // Unapply the offset because it is going to be immediately applied // and cause compensation movement in Z - current_position[Z_AXIS] -= bilinear_z_offset(current_position); + current_position.z -= bilinear_z_offset(current_position); - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR(" corrected Z:", current_position[Z_AXIS]); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR(" corrected Z:", current_position.z); } #endif // ABL_PLANAR diff --git a/Marlin/src/gcode/bedlevel/mbl/G29.cpp b/Marlin/src/gcode/bedlevel/mbl/G29.cpp index eee542a6f56d..944e8d3a69bf 100644 --- a/Marlin/src/gcode/bedlevel/mbl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/mbl/G29.cpp @@ -110,7 +110,7 @@ void GcodeSuite::G29() { } else { // Save Z for the previous mesh position - mbl.set_zigzag_z(mbl_probe_index - 1, current_position[Z_AXIS]); + mbl.set_zigzag_z(mbl_probe_index - 1, current_position.z); #if HAS_SOFTWARE_ENDSTOPS soft_endstops_enabled = saved_soft_endstops_state; #endif @@ -124,11 +124,11 @@ void GcodeSuite::G29() { #endif mbl.zigzag(mbl_probe_index++, ix, iy); - _manual_goto_xy(mbl.index_to_xpos[ix], mbl.index_to_ypos[iy]); + _manual_goto_xy({ mbl.index_to_xpos[ix], mbl.index_to_ypos[iy] }); } else { // One last "return to the bed" (as originally coded) at completion - current_position[Z_AXIS] = MANUAL_PROBE_HEIGHT; + current_position.z = MANUAL_PROBE_HEIGHT; line_to_current_position(); planner.synchronize(); @@ -142,7 +142,7 @@ void GcodeSuite::G29() { set_bed_leveling_enabled(true); #if ENABLED(MESH_G28_REST_ORIGIN) - current_position[Z_AXIS] = 0; + current_position.z = 0; line_to_current_position(homing_feedrate(Z_AXIS)); planner.synchronize(); #endif diff --git a/Marlin/src/gcode/bedlevel/ubl/M421.cpp b/Marlin/src/gcode/bedlevel/ubl/M421.cpp index 34afe786258a..153e6018aa61 100644 --- a/Marlin/src/gcode/bedlevel/ubl/M421.cpp +++ b/Marlin/src/gcode/bedlevel/ubl/M421.cpp @@ -46,28 +46,25 @@ * M421 C Q */ void GcodeSuite::M421() { - int8_t ix = parser.intval('I', -1), iy = parser.intval('J', -1); - const bool hasI = ix >= 0, - hasJ = iy >= 0, + xy_int8_t ij = { int8_t(parser.intval('I', -1)), int8_t(parser.intval('J', -1)) }; + const bool hasI = ij.x >= 0, + hasJ = ij.y >= 0, hasC = parser.seen('C'), hasN = parser.seen('N'), hasZ = parser.seen('Z'), hasQ = !hasZ && parser.seen('Q'); - if (hasC) { - const mesh_index_pair location = ubl.find_closest_mesh_point_of_type(REAL, current_position[X_AXIS], current_position[Y_AXIS], USE_NOZZLE_AS_REFERENCE, nullptr); - ix = location.x_index; - iy = location.y_index; - } + if (hasC) ij = ubl.find_closest_mesh_point_of_type(REAL, current_position); if (int(hasC) + int(hasI && hasJ) != 1 || !(hasZ || hasQ || hasN)) SERIAL_ERROR_MSG(MSG_ERR_M421_PARAMETERS); - else if (!WITHIN(ix, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1)) + else if (!WITHIN(ij.x, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(ij.y, 0, GRID_MAX_POINTS_Y - 1)) SERIAL_ERROR_MSG(MSG_ERR_MESH_XY); else { - ubl.z_values[ix][iy] = hasN ? NAN : parser.value_linear_units() + (hasQ ? ubl.z_values[ix][iy] : 0); + float &zval = ubl.z_values[ij.x][ij.y]; + zval = hasN ? NAN : parser.value_linear_units() + (hasQ ? zval : 0); #if ENABLED(EXTENSIBLE_UI) - ExtUI::onMeshUpdate(ix, iy, ubl.z_values[ix][iy]); + ExtUI::onMeshUpdate(ij.x, ij.y, zval); #endif } } diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 514bb6589153..6fda4e84d3f0 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -59,7 +59,7 @@ static void quick_home_xy() { // Pretend the current position is 0,0 - current_position[X_AXIS] = current_position[Y_AXIS] = 0.0; + current_position.set(0.0, 0.0); sync_plan_position(); const int x_axis_home_dir = @@ -95,7 +95,7 @@ endstops.validate_homing_move(); - current_position[X_AXIS] = current_position[Y_AXIS] = 0.0; + current_position.set(0.0, 0.0); #if ENABLED(SENSORLESS_HOMING) tmc_disable_stallguard(stepperX, stealth_states.x); @@ -128,17 +128,15 @@ /** * Move the Z probe (or just the nozzle) to the safe homing point + * (Z is already at the right height) */ - destination[X_AXIS] = Z_SAFE_HOMING_X_POINT; - destination[Y_AXIS] = Z_SAFE_HOMING_Y_POINT; - destination[Z_AXIS] = current_position[Z_AXIS]; // Z is already at the right height + destination.set(safe_homing_xy, current_position.z); #if HOMING_Z_WITH_PROBE - destination[X_AXIS] -= probe_offset[X_AXIS]; - destination[Y_AXIS] -= probe_offset[Y_AXIS]; + destination -= probe_offset; #endif - if (position_is_reachable(destination[X_AXIS], destination[Y_AXIS])) { + if (position_is_reachable(destination)) { if (DEBUGGING(LEVELING)) DEBUG_POS("home_z_safely", destination); @@ -151,7 +149,7 @@ safe_delay(500); // Short delay needed to settle #endif - do_blocking_move_to_xy(destination[X_AXIS], destination[Y_AXIS]); + do_blocking_move_to_xy(destination); homeaxis(Z_AXIS); } else { @@ -232,16 +230,14 @@ void GcodeSuite::G28(const bool always_home_all) { #endif #if ENABLED(IMPROVE_HOMING_RELIABILITY) - slow_homing_t slow_homing { 0 }; - slow_homing.acceleration.x = planner.settings.max_acceleration_mm_per_s2[X_AXIS]; - slow_homing.acceleration.y = planner.settings.max_acceleration_mm_per_s2[Y_AXIS]; + slow_homing_t slow_homing{0}; + slow_homing.acceleration.set(planner.settings.max_acceleration_mm_per_s2[X_AXIS]; + planner.settings.max_acceleration_mm_per_s2[Y_AXIS]); planner.settings.max_acceleration_mm_per_s2[X_AXIS] = 100; planner.settings.max_acceleration_mm_per_s2[Y_AXIS] = 100; #if HAS_CLASSIC_JERK - slow_homing.jerk.x = planner.max_jerk[X_AXIS]; - slow_homing.jerk.y = planner.max_jerk[Y_AXIS]; - planner.max_jerk[X_AXIS] = 0; - planner.max_jerk[Y_AXIS] = 0; + slow_homing.jerk_xy = planner.max_jerk; + planner.max_jerk.set(0, 0); #endif planner.reset_acceleration_rates(); @@ -274,7 +270,7 @@ void GcodeSuite::G28(const bool always_home_all) { home_all = always_home_all || (homeX == homeY && homeX == homeZ), doX = home_all || homeX, doY = home_all || homeY, doZ = home_all || homeZ; - set_destination_from_current(); + destination = current_position; #if Z_HOME_DIR > 0 // If homing away from BED do Z first @@ -291,10 +287,10 @@ void GcodeSuite::G28(const bool always_home_all) { if (z_homing_height && (doX || doY)) { // Raise Z before homing any other axes and z is not already high enough (never lower z) - destination[Z_AXIS] = z_homing_height; - if (destination[Z_AXIS] > current_position[Z_AXIS]) { - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Raise Z (before homing) to ", destination[Z_AXIS]); - do_blocking_move_to_z(destination[Z_AXIS]); + destination.z = z_homing_height; + if (destination.z > current_position.z) { + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Raise Z (before homing) to ", destination.z); + do_blocking_move_to_z(destination.z); } } @@ -329,14 +325,14 @@ void GcodeSuite::G28(const bool always_home_all) { homeaxis(X_AXIS); // Remember this extruder's position for later tool change - inactive_extruder_x_pos = current_position[X_AXIS]; + inactive_extruder_x_pos = current_position.x; // Home the 1st (left) extruder active_extruder = 0; homeaxis(X_AXIS); // Consider the active extruder to be parked - COPY(raised_parked_position, current_position); + raised_parked_position = current_position; delayed_move_time = 0; active_extruder_parked = true; @@ -390,14 +386,14 @@ void GcodeSuite::G28(const bool always_home_all) { homeaxis(X_AXIS); // Remember this extruder's position for later tool change - inactive_extruder_x_pos = current_position[X_AXIS]; + inactive_extruder_x_pos = current_position.x; // Home the 1st (left) extruder active_extruder = 0; homeaxis(X_AXIS); // Consider the active extruder to be parked - COPY(raised_parked_position, current_position); + raised_parked_position = current_position; delayed_move_time = 0; active_extruder_parked = true; extruder_duplication_enabled = IDEX_saved_duplication_state; @@ -441,10 +437,8 @@ void GcodeSuite::G28(const bool always_home_all) { planner.settings.max_acceleration_mm_per_s2[X_AXIS] = slow_homing.acceleration.x; planner.settings.max_acceleration_mm_per_s2[Y_AXIS] = slow_homing.acceleration.y; #if HAS_CLASSIC_JERK - planner.max_jerk[X_AXIS] = slow_homing.jerk.x; - planner.max_jerk[Y_AXIS] = slow_homing.jerk.y; + planner.max_jerk = slow_homing.jerk_xy; #endif - planner.reset_acceleration_rates(); #endif diff --git a/Marlin/src/gcode/calibrate/G33.cpp b/Marlin/src/gcode/calibrate/G33.cpp index 1e3e84a1e421..f961302fb53a 100644 --- a/Marlin/src/gcode/calibrate/G33.cpp +++ b/Marlin/src/gcode/calibrate/G33.cpp @@ -70,7 +70,7 @@ enum CalEnum : char { // the 7 main calibration points - #define AC_CLEANUP() ac_cleanup() #endif -float lcd_probe_pt(const float &rx, const float &ry); +float lcd_probe_pt(const xy_pos_t &xy); void ac_home() { endstops.enable(true); @@ -122,9 +122,9 @@ void print_signed_float(PGM_P const prefix, const float &f) { static void print_calibration_settings(const bool end_stops, const bool tower_angles) { SERIAL_ECHOPAIR(".Height:", delta_height); if (end_stops) { - print_signed_float(PSTR("Ex"), delta_endstop_adj[A_AXIS]); - print_signed_float(PSTR("Ey"), delta_endstop_adj[B_AXIS]); - print_signed_float(PSTR("Ez"), delta_endstop_adj[C_AXIS]); + print_signed_float(PSTR("Ex"), delta_endstop_adj.a); + print_signed_float(PSTR("Ey"), delta_endstop_adj.b); + print_signed_float(PSTR("Ez"), delta_endstop_adj.c); } if (end_stops && tower_angles) { SERIAL_ECHOPAIR(" Radius:", delta_radius); @@ -133,9 +133,9 @@ static void print_calibration_settings(const bool end_stops, const bool tower_an SERIAL_ECHO_SP(13); } if (tower_angles) { - print_signed_float(PSTR("Tx"), delta_tower_angle_trim[A_AXIS]); - print_signed_float(PSTR("Ty"), delta_tower_angle_trim[B_AXIS]); - print_signed_float(PSTR("Tz"), delta_tower_angle_trim[C_AXIS]); + print_signed_float(PSTR("Tx"), delta_tower_angle_trim.a); + print_signed_float(PSTR("Ty"), delta_tower_angle_trim.b); + print_signed_float(PSTR("Tz"), delta_tower_angle_trim.c); } if ((!end_stops && tower_angles) || (end_stops && !tower_angles)) { // XOR SERIAL_ECHOPAIR(" Radius:", delta_radius); @@ -188,12 +188,12 @@ static float std_dev_points(float z_pt[NPP + 1], const bool _0p_cal, const bool /** * - Probe a point */ -static float calibration_probe(const float &nx, const float &ny, const bool stow) { +static float calibration_probe(const xy_pos_t &xy, const bool stow) { #if HAS_BED_PROBE - return probe_at_point(nx, ny, stow ? PROBE_PT_STOW : PROBE_PT_RAISE, 0, false); + return probe_at_point(xy, stow ? PROBE_PT_STOW : PROBE_PT_RAISE, 0, false); #else UNUSED(stow); - return lcd_probe_pt(nx, ny); + return lcd_probe_pt(xy); #endif } @@ -223,7 +223,8 @@ static bool probe_calibration_points(float z_pt[NPP + 1], const int8_t probe_poi if (!_0p_calibration) { if (!_7p_no_intermediates && !_7p_4_intermediates && !_7p_11_intermediates) { // probe the center - z_pt[CEN] += calibration_probe(0, 0, stow_after_each); + const xy_pos_t center{0}; + z_pt[CEN] += calibration_probe(center, stow_after_each); if (isnan(z_pt[CEN])) return false; } @@ -233,7 +234,8 @@ static bool probe_calibration_points(float z_pt[NPP + 1], const int8_t probe_poi I_LOOP_CAL_PT(rad, start, steps) { const float a = RADIANS(210 + (360 / NPP) * (rad - 1)), r = delta_calibration_radius * 0.1; - z_pt[CEN] += calibration_probe(cos(a) * r, sin(a) * r, stow_after_each); + const xy_pos_t vec = { cos(a), sin(a) }; + z_pt[CEN] += calibration_probe(vec * r, stow_after_each); if (isnan(z_pt[CEN])) return false; } z_pt[CEN] /= float(_7p_2_intermediates ? 7 : probe_points); @@ -257,7 +259,8 @@ static bool probe_calibration_points(float z_pt[NPP + 1], const int8_t probe_poi const float a = RADIANS(210 + (360 / NPP) * (rad - 1)), r = delta_calibration_radius * (1 - 0.1 * (zig_zag ? offset - circle : circle)), interpol = FMOD(rad, 1); - const float z_temp = calibration_probe(cos(a) * r, sin(a) * r, stow_after_each); + const xy_pos_t vec = { cos(a), sin(a) }; + const float z_temp = calibration_probe(vec * r, stow_after_each); if (isnan(z_temp)) return false; // split probe point to neighbouring calibration points z_pt[uint8_t(LROUND(rad - interpol + NPP - 1)) % NPP + 1] += z_temp * sq(cos(RADIANS(interpol * 90))); @@ -281,80 +284,69 @@ static bool probe_calibration_points(float z_pt[NPP + 1], const int8_t probe_poi * - formulae for approximative forward kinematics in the end-stop displacement matrix * - definition of the matrix scaling parameters */ -static void reverse_kinematics_probe_points(float z_pt[NPP + 1], float mm_at_pt_axis[NPP + 1][ABC]) { - float pos[XYZ] = { 0.0 }; +static void reverse_kinematics_probe_points(float z_pt[NPP + 1], abc_float_t mm_at_pt_axis[NPP + 1]) { + xyz_pos_t pos{0}; LOOP_CAL_ALL(rad) { const float a = RADIANS(210 + (360 / NPP) * (rad - 1)), r = (rad == CEN ? 0.0f : delta_calibration_radius); - pos[X_AXIS] = cos(a) * r; - pos[Y_AXIS] = sin(a) * r; - pos[Z_AXIS] = z_pt[rad]; + pos.set(cos(a) * r, sin(a) * r, z_pt[rad]); inverse_kinematics(pos); - LOOP_XYZ(axis) mm_at_pt_axis[rad][axis] = delta[axis]; + mm_at_pt_axis[rad] = delta; } } -static void forward_kinematics_probe_points(float mm_at_pt_axis[NPP + 1][ABC], float z_pt[NPP + 1]) { +static void forward_kinematics_probe_points(abc_float_t mm_at_pt_axis[NPP + 1], float z_pt[NPP + 1]) { const float r_quot = delta_calibration_radius / delta_radius; - #define ZPP(N,I,A) ((1 / 3.0f + r_quot * (N) / 3.0f ) * mm_at_pt_axis[I][A]) + #define ZPP(N,I,A) (((1.0f + r_quot * (N)) / 3.0f) * mm_at_pt_axis[I].A) #define Z00(I, A) ZPP( 0, I, A) #define Zp1(I, A) ZPP(+1, I, A) #define Zm1(I, A) ZPP(-1, I, A) #define Zp2(I, A) ZPP(+2, I, A) #define Zm2(I, A) ZPP(-2, I, A) - z_pt[CEN] = Z00(CEN, A_AXIS) + Z00(CEN, B_AXIS) + Z00(CEN, C_AXIS); - z_pt[__A] = Zp2(__A, A_AXIS) + Zm1(__A, B_AXIS) + Zm1(__A, C_AXIS); - z_pt[__B] = Zm1(__B, A_AXIS) + Zp2(__B, B_AXIS) + Zm1(__B, C_AXIS); - z_pt[__C] = Zm1(__C, A_AXIS) + Zm1(__C, B_AXIS) + Zp2(__C, C_AXIS); - z_pt[_BC] = Zm2(_BC, A_AXIS) + Zp1(_BC, B_AXIS) + Zp1(_BC, C_AXIS); - z_pt[_CA] = Zp1(_CA, A_AXIS) + Zm2(_CA, B_AXIS) + Zp1(_CA, C_AXIS); - z_pt[_AB] = Zp1(_AB, A_AXIS) + Zp1(_AB, B_AXIS) + Zm2(_AB, C_AXIS); + z_pt[CEN] = Z00(CEN, a) + Z00(CEN, b) + Z00(CEN, c); + z_pt[__A] = Zp2(__A, a) + Zm1(__A, b) + Zm1(__A, c); + z_pt[__B] = Zm1(__B, a) + Zp2(__B, b) + Zm1(__B, c); + z_pt[__C] = Zm1(__C, a) + Zm1(__C, b) + Zp2(__C, c); + z_pt[_BC] = Zm2(_BC, a) + Zp1(_BC, b) + Zp1(_BC, c); + z_pt[_CA] = Zp1(_CA, a) + Zm2(_CA, b) + Zp1(_CA, c); + z_pt[_AB] = Zp1(_AB, a) + Zp1(_AB, b) + Zm2(_AB, c); } -static void calc_kinematics_diff_probe_points(float z_pt[NPP + 1], float delta_e[ABC], float delta_r, float delta_t[ABC]) { +static void calc_kinematics_diff_probe_points(float z_pt[NPP + 1], abc_float_t delta_e, const float delta_r, abc_float_t delta_t) { const float z_center = z_pt[CEN]; - float diff_mm_at_pt_axis[NPP + 1][ABC], - new_mm_at_pt_axis[NPP + 1][ABC]; + abc_float_t diff_mm_at_pt_axis[NPP + 1], new_mm_at_pt_axis[NPP + 1]; reverse_kinematics_probe_points(z_pt, diff_mm_at_pt_axis); delta_radius += delta_r; - LOOP_XYZ(axis) delta_tower_angle_trim[axis] += delta_t[axis]; + delta_tower_angle_trim += delta_t; recalc_delta_settings(); reverse_kinematics_probe_points(z_pt, new_mm_at_pt_axis); - LOOP_XYZ(axis) LOOP_CAL_ALL(rad) diff_mm_at_pt_axis[rad][axis] -= new_mm_at_pt_axis[rad][axis] + delta_e[axis]; + LOOP_CAL_ALL(rad) diff_mm_at_pt_axis[rad] -= new_mm_at_pt_axis[rad] + delta_e; forward_kinematics_probe_points(diff_mm_at_pt_axis, z_pt); LOOP_CAL_RAD(rad) z_pt[rad] -= z_pt[CEN] - z_center; z_pt[CEN] = z_center; delta_radius -= delta_r; - LOOP_XYZ(axis) delta_tower_angle_trim[axis] -= delta_t[axis]; + delta_tower_angle_trim -= delta_t; recalc_delta_settings(); } static float auto_tune_h() { const float r_quot = delta_calibration_radius / delta_radius; - float h_fac = 0.0f; - - h_fac = r_quot / (2.0f / 3.0f); - h_fac = 1.0f / h_fac; // (2/3)/CR - return h_fac; + return RECIPROCAL(r_quot / (2.0f / 3.0f)); // (2/3)/CR } static float auto_tune_r() { - const float diff = 0.01f; - float r_fac = 0.0f, - z_pt[NPP + 1] = { 0.0f }, - delta_e[ABC] = { 0.0f }, - delta_r = { 0.0f }, - delta_t[ABC] = { 0.0f }; - - delta_r = diff; + constexpr float diff = 0.01f, delta_r = diff; + float r_fac = 0.0f, z_pt[NPP + 1] = { 0.0f }; + abc_float_t delta_e = { 0.0f }, delta_t = { 0.0f }; + calc_kinematics_diff_probe_points(z_pt, delta_e, delta_r, delta_t); r_fac = -(z_pt[__A] + z_pt[__B] + z_pt[__C] + z_pt[_BC] + z_pt[_CA] + z_pt[_AB]) / 6.0f; r_fac = diff / r_fac / 3.0f; // 1/(3*delta_Z) @@ -362,14 +354,11 @@ static float auto_tune_r() { } static float auto_tune_a() { - const float diff = 0.01f; - float a_fac = 0.0f, - z_pt[NPP + 1] = { 0.0f }, - delta_e[ABC] = { 0.0f }, - delta_r = { 0.0f }, - delta_t[ABC] = { 0.0f }; - - ZERO(delta_t); + constexpr float diff = 0.01f, delta_r = 0.0f; + float a_fac = 0.0f, z_pt[NPP + 1] = { 0.0f }; + abc_float_t delta_e = { 0.0f }, delta_t = { 0.0f }; + + delta_t.reset(); LOOP_XYZ(axis) { delta_t[axis] = diff; calc_kinematics_diff_probe_points(z_pt, delta_e, delta_r, delta_t); @@ -453,21 +442,11 @@ void GcodeSuite::G33() { zero_std_dev = (verbose_level ? 999.0f : 0.0f), // 0.0 in dry-run mode : forced end zero_std_dev_min = zero_std_dev, zero_std_dev_old = zero_std_dev, - h_factor, - r_factor, - a_factor, - e_old[ABC] = { - delta_endstop_adj[A_AXIS], - delta_endstop_adj[B_AXIS], - delta_endstop_adj[C_AXIS] - }, + h_factor, r_factor, a_factor, r_old = delta_radius, - h_old = delta_height, - a_old[ABC] = { - delta_tower_angle_trim[A_AXIS], - delta_tower_angle_trim[B_AXIS], - delta_tower_angle_trim[C_AXIS] - }; + h_old = delta_height; + + abc_pos_t e_old = delta_endstop_adj, a_old = delta_tower_angle_trim; SERIAL_ECHOLNPGM("G33 Auto Calibrate"); @@ -520,15 +499,14 @@ void GcodeSuite::G33() { if (zero_std_dev < zero_std_dev_min) { // set roll-back point - COPY(e_old, delta_endstop_adj); + e_old = delta_endstop_adj; r_old = delta_radius; h_old = delta_height; - COPY(a_old, delta_tower_angle_trim); + a_old = delta_tower_angle_trim; } - float e_delta[ABC] = { 0.0f }, - r_delta = 0.0f, - t_delta[ABC] = { 0.0f }; + abc_float_t e_delta = { 0.0f }, t_delta = { 0.0f }; + float r_delta = 0.0f; /** * convergence matrices: @@ -563,42 +541,42 @@ void GcodeSuite::G33() { case 2: if (towers_set) { // see 4 point calibration (towers) matrix - e_delta[A_AXIS] = (+Z4(__A) -Z2(__B) -Z2(__C)) * h_factor +Z4(CEN); - e_delta[B_AXIS] = (-Z2(__A) +Z4(__B) -Z2(__C)) * h_factor +Z4(CEN); - e_delta[C_AXIS] = (-Z2(__A) -Z2(__B) +Z4(__C)) * h_factor +Z4(CEN); - r_delta = (+Z4(__A) +Z4(__B) +Z4(__C) -Z12(CEN)) * r_factor; + e_delta.set((+Z4(__A) -Z2(__B) -Z2(__C)) * h_factor +Z4(CEN), + (-Z2(__A) +Z4(__B) -Z2(__C)) * h_factor +Z4(CEN), + (-Z2(__A) -Z2(__B) +Z4(__C)) * h_factor +Z4(CEN)); + r_delta = (+Z4(__A) +Z4(__B) +Z4(__C) -Z12(CEN)) * r_factor; } else { // see 4 point calibration (opposites) matrix - e_delta[A_AXIS] = (-Z4(_BC) +Z2(_CA) +Z2(_AB)) * h_factor +Z4(CEN); - e_delta[B_AXIS] = (+Z2(_BC) -Z4(_CA) +Z2(_AB)) * h_factor +Z4(CEN); - e_delta[C_AXIS] = (+Z2(_BC) +Z2(_CA) -Z4(_AB)) * h_factor +Z4(CEN); - r_delta = (+Z4(_BC) +Z4(_CA) +Z4(_AB) -Z12(CEN)) * r_factor; + e_delta.set((-Z4(_BC) +Z2(_CA) +Z2(_AB)) * h_factor +Z4(CEN), + (+Z2(_BC) -Z4(_CA) +Z2(_AB)) * h_factor +Z4(CEN), + (+Z2(_BC) +Z2(_CA) -Z4(_AB)) * h_factor +Z4(CEN)); + r_delta = (+Z4(_BC) +Z4(_CA) +Z4(_AB) -Z12(CEN)) * r_factor; } break; default: // see 7 point calibration (towers & opposites) matrix - e_delta[A_AXIS] = (+Z2(__A) -Z1(__B) -Z1(__C) -Z2(_BC) +Z1(_CA) +Z1(_AB)) * h_factor +Z4(CEN); - e_delta[B_AXIS] = (-Z1(__A) +Z2(__B) -Z1(__C) +Z1(_BC) -Z2(_CA) +Z1(_AB)) * h_factor +Z4(CEN); - e_delta[C_AXIS] = (-Z1(__A) -Z1(__B) +Z2(__C) +Z1(_BC) +Z1(_CA) -Z2(_AB)) * h_factor +Z4(CEN); - r_delta = (+Z2(__A) +Z2(__B) +Z2(__C) +Z2(_BC) +Z2(_CA) +Z2(_AB) -Z12(CEN)) * r_factor; + e_delta.set((+Z2(__A) -Z1(__B) -Z1(__C) -Z2(_BC) +Z1(_CA) +Z1(_AB)) * h_factor +Z4(CEN), + (-Z1(__A) +Z2(__B) -Z1(__C) +Z1(_BC) -Z2(_CA) +Z1(_AB)) * h_factor +Z4(CEN), + (-Z1(__A) -Z1(__B) +Z2(__C) +Z1(_BC) +Z1(_CA) -Z2(_AB)) * h_factor +Z4(CEN)); + r_delta = (+Z2(__A) +Z2(__B) +Z2(__C) +Z2(_BC) +Z2(_CA) +Z2(_AB) -Z12(CEN)) * r_factor; if (towers_set) { // see 7 point tower angle calibration (towers & opposites) matrix - t_delta[A_AXIS] = (+Z0(__A) -Z4(__B) +Z4(__C) +Z0(_BC) -Z4(_CA) +Z4(_AB) +Z0(CEN)) * a_factor; - t_delta[B_AXIS] = (+Z4(__A) +Z0(__B) -Z4(__C) +Z4(_BC) +Z0(_CA) -Z4(_AB) +Z0(CEN)) * a_factor; - t_delta[C_AXIS] = (-Z4(__A) +Z4(__B) +Z0(__C) -Z4(_BC) +Z4(_CA) +Z0(_AB) +Z0(CEN)) * a_factor; + t_delta.set((+Z0(__A) -Z4(__B) +Z4(__C) +Z0(_BC) -Z4(_CA) +Z4(_AB) +Z0(CEN)) * a_factor, + (+Z4(__A) +Z0(__B) -Z4(__C) +Z4(_BC) +Z0(_CA) -Z4(_AB) +Z0(CEN)) * a_factor, + (-Z4(__A) +Z4(__B) +Z0(__C) -Z4(_BC) +Z4(_CA) +Z0(_AB) +Z0(CEN)) * a_factor); } break; } - LOOP_XYZ(axis) delta_endstop_adj[axis] += e_delta[axis]; + delta_endstop_adj += e_delta; delta_radius += r_delta; - LOOP_XYZ(axis) delta_tower_angle_trim[axis] += t_delta[axis]; + delta_tower_angle_trim += t_delta; } else if (zero_std_dev >= test_precision) { // roll back - COPY(delta_endstop_adj, e_old); + delta_endstop_adj = e_old; delta_radius = r_old; delta_height = h_old; - COPY(delta_tower_angle_trim, a_old); + delta_tower_angle_trim = a_old; } if (verbose_level != 0) { // !dry run @@ -611,7 +589,7 @@ void GcodeSuite::G33() { } // adjust delta_height and endstops by the max amount - const float z_temp = _MAX(delta_endstop_adj[A_AXIS], delta_endstop_adj[B_AXIS], delta_endstop_adj[C_AXIS]); + const float z_temp = _MAX(delta_endstop_adj.a, delta_endstop_adj.b, delta_endstop_adj.c); delta_height -= z_temp; LOOP_XYZ(axis) delta_endstop_adj[axis] -= z_temp; } diff --git a/Marlin/src/gcode/calibrate/G34_M422.cpp b/Marlin/src/gcode/calibrate/G34_M422.cpp index b7b366a1cf59..48ed8fe986b9 100644 --- a/Marlin/src/gcode/calibrate/G34_M422.cpp +++ b/Marlin/src/gcode/calibrate/G34_M422.cpp @@ -45,8 +45,17 @@ #define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE) #include "../../core/debug_out.h" -float z_auto_align_xpos[Z_STEPPER_COUNT] = Z_STEPPER_ALIGN_X, - z_auto_align_ypos[Z_STEPPER_COUNT] = Z_STEPPER_ALIGN_Y; +// Sanity-check +constexpr xy_pos_t sanity_arr_z_align[] = Z_STEPPER_ALIGN_XY; +static_assert(COUNT(sanity_arr_z_align) == Z_STEPPER_COUNT, + #if ENABLED(Z_TRIPLE_STEPPER_DRIVERS) + "Z_STEPPER_ALIGN_XY requires three {X,Y} entries (Z, Z2, and Z3)." + #else + "Z_STEPPER_ALIGN_XY requires two {X,Y} entries (Z and Z2)." + #endif +); + +xy_pos_t z_auto_align_pos[Z_STEPPER_COUNT] = Z_STEPPER_ALIGN_XY; inline void set_all_z_lock(const bool lock) { stepper.set_z_lock(lock); @@ -123,11 +132,11 @@ void GcodeSuite::G34() { float z_probe = Z_BASIC_CLEARANCE + (G34_MAX_GRADE) * 0.01f * ( #if ENABLED(Z_TRIPLE_STEPPER_DRIVERS) - SQRT(_MAX(HYPOT2(z_auto_align_xpos[0] - z_auto_align_ypos[0], z_auto_align_xpos[1] - z_auto_align_ypos[1]), - HYPOT2(z_auto_align_xpos[1] - z_auto_align_ypos[1], z_auto_align_xpos[2] - z_auto_align_ypos[2]), - HYPOT2(z_auto_align_xpos[2] - z_auto_align_ypos[2], z_auto_align_xpos[0] - z_auto_align_ypos[0]))) + SQRT(_MAX(HYPOT2(z_auto_align_pos[0].x - z_auto_align_pos[0].y, z_auto_align_pos[1].x - z_auto_align_pos[1].y), + HYPOT2(z_auto_align_pos[1].x - z_auto_align_pos[1].y, z_auto_align_pos[2].x - z_auto_align_pos[2].y), + HYPOT2(z_auto_align_pos[2].x - z_auto_align_pos[2].y, z_auto_align_pos[0].x - z_auto_align_pos[0].y))) #else - HYPOT(z_auto_align_xpos[0] - z_auto_align_ypos[0], z_auto_align_xpos[1] - z_auto_align_ypos[1]) + HYPOT(z_auto_align_pos[0].x - z_auto_align_pos[0].y, z_auto_align_pos[1].x - z_auto_align_pos[1].y) #endif ); @@ -135,7 +144,7 @@ void GcodeSuite::G34() { if (!all_axes_known()) home_all_axes(); // Move the Z coordinate realm towards the positive - dirty trick - current_position[Z_AXIS] -= z_probe * 0.5; + current_position.z -= z_probe * 0.5f; float last_z_align_move[Z_STEPPER_COUNT] = ARRAY_N(Z_STEPPER_COUNT, 10000.0f, 10000.0f, 10000.0f), z_measured[Z_STEPPER_COUNT] = { 0 }, @@ -162,7 +171,7 @@ void GcodeSuite::G34() { if (iteration == 0 || izstepper > 0) do_blocking_move_to_z(z_probe); // Probe a Z height for each stepper. - const float z_probed_height = probe_at_point(z_auto_align_xpos[zstepper], z_auto_align_ypos[zstepper], raise_after, 0, true); + const float z_probed_height = probe_at_point(z_auto_align_pos[zstepper], raise_after, 0, true); if (isnan(z_probed_height)) { SERIAL_ECHOLNPGM("Probing failed."); err_break = true; @@ -240,7 +249,7 @@ void GcodeSuite::G34() { } // Do a move to correct part of the misalignment for the current stepper - do_blocking_move_to_z(amplification * z_align_move + current_position[Z_AXIS]); + do_blocking_move_to_z(amplification * z_align_move + current_position.z); } // for (zstepper) // Back to normal stepper operations @@ -299,20 +308,22 @@ void GcodeSuite::M422() { return; } - const float x_pos = parser.floatval('X', z_auto_align_xpos[zstepper]); - if (!WITHIN(x_pos, X_MIN_POS, X_MAX_POS)) { + const xy_pos_t pos = { + parser.floatval('X', z_auto_align_pos[zstepper].x), + parser.floatval('Y', z_auto_align_pos[zstepper].y) + }; + + if (!WITHIN(pos.x, X_MIN_POS, X_MAX_POS)) { SERIAL_ECHOLNPGM("?(X) out of bounds."); return; } - const float y_pos = parser.floatval('Y', z_auto_align_ypos[zstepper]); - if (!WITHIN(y_pos, Y_MIN_POS, Y_MAX_POS)) { + if (!WITHIN(pos.y, Y_MIN_POS, Y_MAX_POS)) { SERIAL_ECHOLNPGM("?(Y) out of bounds."); return; } - z_auto_align_xpos[zstepper] = x_pos; - z_auto_align_ypos[zstepper] = y_pos; + z_auto_align_pos[zstepper] = pos; } #endif // Z_STEPPER_AUTO_ALIGN diff --git a/Marlin/src/gcode/calibrate/G425.cpp b/Marlin/src/gcode/calibrate/G425.cpp index 5c4272346f91..2b2c16657dec 100644 --- a/Marlin/src/gcode/calibrate/G425.cpp +++ b/Marlin/src/gcode/calibrate/G425.cpp @@ -61,17 +61,17 @@ enum side_t : uint8_t { TOP, RIGHT, FRONT, LEFT, BACK, NUM_SIDES }; -struct measurements_t { - static constexpr float dimensions[XYZ] = CALIBRATION_OBJECT_DIMENSIONS; - static constexpr float true_center[XYZ] = CALIBRATION_OBJECT_CENTER; +static constexpr xyz_pos_t true_center CALIBRATION_OBJECT_CENTER; +static constexpr xyz_float_t dimensions CALIBRATION_OBJECT_DIMENSIONS; +static constexpr xy_float_t nod = { CALIBRATION_NOZZLE_OUTER_DIAMETER, CALIBRATION_NOZZLE_OUTER_DIAMETER }; - float obj_center[XYZ] = CALIBRATION_OBJECT_CENTER; - float obj_side[NUM_SIDES]; +struct measurements_t { + xyz_pos_t obj_center = true_center; // Non-static must be assigned from xyz_pos_t - float backlash[NUM_SIDES]; - float pos_error[XYZ]; + float obj_side[NUM_SIDES], backlash[NUM_SIDES]; + xyz_float_t pos_error; - float nozzle_outer_dimension[2] = {CALIBRATION_NOZZLE_OUTER_DIAMETER, CALIBRATION_NOZZLE_OUTER_DIAMETER}; + xy_float_t nozzle_outer_dimension = nod; }; #define TEMPORARY_SOFT_ENDSTOP_STATE(enable) REMEMBER(tes, soft_endstops_enabled, enable); @@ -88,29 +88,8 @@ struct measurements_t { #define TEMPORARY_BACKLASH_SMOOTHING(value) #endif -/** - * Move to a particular location. Up to three individual axes - * and their destinations can be specified, in any order. - */ -inline void move_to( - const AxisEnum a1 = NO_AXIS, const float p1 = 0, - const AxisEnum a2 = NO_AXIS, const float p2 = 0, - const AxisEnum a3 = NO_AXIS, const float p3 = 0 -) { - set_destination_from_current(); - - // Note: The order of p1, p2, p3 may not correspond to X, Y, Z - if (a1 != NO_AXIS) destination[a1] = p1; - if (a2 != NO_AXIS) destination[a2] = p2; - if (a3 != NO_AXIS) destination[a3] = p3; - - // Make sure coordinates are within bounds - destination[X_AXIS] = _MAX(_MIN(destination[X_AXIS], X_MAX_POS), X_MIN_POS); - destination[Y_AXIS] = _MAX(_MIN(destination[Y_AXIS], Y_MAX_POS), Y_MIN_POS); - destination[Z_AXIS] = _MAX(_MIN(destination[Z_AXIS], Z_MAX_POS), Z_MIN_POS); - - // Move to position - do_blocking_move_to(destination, MMM_TO_MMS(CALIBRATION_FEEDRATE_TRAVEL)); +inline void calibration_move() { + do_blocking_move_to(current_position, MMM_TO_MMS(CALIBRATION_FEEDRATE_TRAVEL)); } /** @@ -121,10 +100,12 @@ inline void move_to( */ inline void park_above_object(measurements_t &m, const float uncertainty) { // Move to safe distance above calibration object - move_to(Z_AXIS, m.obj_center[Z_AXIS] + m.dimensions[Z_AXIS] / 2 + uncertainty); + current_position.z = m.obj_center.z + dimensions.z / 2 + uncertainty; + calibration_move(); // Move to center of calibration object in XY - move_to(X_AXIS, m.obj_center[X_AXIS], Y_AXIS, m.obj_center[Y_AXIS]); + current_position = xy_pos_t(m.obj_center); + calibration_move(); } #if HOTENDS > 1 @@ -139,14 +120,9 @@ inline void park_above_object(measurements_t &m, const float uncertainty) { #if HAS_HOTEND_OFFSET inline void normalize_hotend_offsets() { - for (uint8_t e = 1; e < HOTENDS; e++) { - hotend_offset[X_AXIS][e] -= hotend_offset[X_AXIS][0]; - hotend_offset[Y_AXIS][e] -= hotend_offset[Y_AXIS][0]; - hotend_offset[Z_AXIS][e] -= hotend_offset[Z_AXIS][0]; - } - hotend_offset[X_AXIS][0] = 0; - hotend_offset[Y_AXIS][0] = 0; - hotend_offset[Z_AXIS][0] = 0; + for (uint8_t e = 1; e < HOTENDS; e++) + hotend_offset[e] -= hotend_offset[0]; + hotend_offset[0].reset(); } #endif @@ -175,7 +151,7 @@ float measuring_movement(const AxisEnum axis, const int dir, const bool stop_sta const feedRate_t mms = fast ? MMM_TO_MMS(CALIBRATION_FEEDRATE_FAST) : MMM_TO_MMS(CALIBRATION_FEEDRATE_SLOW); const float limit = fast ? 50 : 5; - set_destination_from_current(); + destination = current_position; for (float travel = 0; travel < limit; travel += step) { destination[axis] += dir * step; do_blocking_move_to(destination, mms); @@ -199,7 +175,7 @@ inline float measure(const AxisEnum axis, const int dir, const bool stop_state, const bool fast = uncertainty == CALIBRATION_MEASUREMENT_UNKNOWN; // Save position - set_destination_from_current(); + destination = current_position; const float start_pos = destination[axis]; const float measured_pos = measuring_movement(axis, dir, stop_state, fast); // Measure backlash @@ -223,7 +199,7 @@ inline float measure(const AxisEnum axis, const int dir, const bool stop_state, * to find out height of edge */ inline void probe_side(measurements_t &m, const float uncertainty, const side_t side, const bool probe_top_at_edge=false) { - const float dimensions[] = CALIBRATION_OBJECT_DIMENSIONS; + const xyz_float_t dimensions = CALIBRATION_OBJECT_DIMENSIONS; AxisEnum axis; float dir; @@ -232,7 +208,7 @@ inline void probe_side(measurements_t &m, const float uncertainty, const side_t switch (side) { case TOP: { const float measurement = measure(Z_AXIS, -1, true, &m.backlash[TOP], uncertainty); - m.obj_center[Z_AXIS] = measurement - dimensions[Z_AXIS] / 2; + m.obj_center.z = measurement - dimensions.z / 2; m.obj_side[TOP] = measurement; return; } @@ -240,22 +216,24 @@ inline void probe_side(measurements_t &m, const float uncertainty, const side_t case FRONT: axis = Y_AXIS; dir = 1; break; case LEFT: axis = X_AXIS; dir = 1; break; case BACK: axis = Y_AXIS; dir = -1; break; - default: - return; + default: return; } if (probe_top_at_edge) { // Probe top nearest the side we are probing - move_to(axis, m.obj_center[axis] + (-dir) * (dimensions[axis] / 2 - m.nozzle_outer_dimension[axis])); + current_position[axis] = m.obj_center[axis] + (-dir) * (dimensions[axis] / 2 - m.nozzle_outer_dimension[axis]); + calibration_move(); m.obj_side[TOP] = measure(Z_AXIS, -1, true, &m.backlash[TOP], uncertainty); - m.obj_center[Z_AXIS] = m.obj_side[TOP] - dimensions[Z_AXIS] / 2; + m.obj_center.z = m.obj_side[TOP] - dimensions.z / 2; } // Move to safe distance to the side of the calibration object - move_to(axis, m.obj_center[axis] + (-dir) * (dimensions[axis] / 2 + m.nozzle_outer_dimension[axis] / 2 + uncertainty)); + current_position[axis] = m.obj_center[axis] + (-dir) * (dimensions[axis] / 2 + m.nozzle_outer_dimension[axis] / 2 + uncertainty); + calibration_move(); // Plunge below the side of the calibration object and measure - move_to(Z_AXIS, m.obj_side[TOP] - CALIBRATION_NOZZLE_TIP_HEIGHT * 0.7); + current_position.z = m.obj_side[TOP] - CALIBRATION_NOZZLE_TIP_HEIGHT * 0.7; + calibration_move(); const float measurement = measure(axis, dir, true, &m.backlash[side], uncertainty); m.obj_center[axis] = measurement + dir * (dimensions[axis] / 2 + m.nozzle_outer_dimension[axis] / 2); m.obj_side[side] = measurement; @@ -294,36 +272,36 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { // Compute the measured center of the calibration object. #if HAS_X_CENTER - m.obj_center[X_AXIS] = (m.obj_side[LEFT] + m.obj_side[RIGHT]) / 2; + m.obj_center.x = (m.obj_side[LEFT] + m.obj_side[RIGHT]) / 2; #endif #if HAS_Y_CENTER - m.obj_center[Y_AXIS] = (m.obj_side[FRONT] + m.obj_side[BACK]) / 2; + m.obj_center.y = (m.obj_side[FRONT] + m.obj_side[BACK]) / 2; #endif // Compute the outside diameter of the nozzle at the height // at which it makes contact with the calibration object #if HAS_X_CENTER - m.nozzle_outer_dimension[X_AXIS] = m.obj_side[RIGHT] - m.obj_side[LEFT] - m.dimensions[X_AXIS]; + m.nozzle_outer_dimension.x = m.obj_side[RIGHT] - m.obj_side[LEFT] - dimensions.x; #endif #if HAS_Y_CENTER - m.nozzle_outer_dimension[Y_AXIS] = m.obj_side[BACK] - m.obj_side[FRONT] - m.dimensions[Y_AXIS]; + m.nozzle_outer_dimension.y = m.obj_side[BACK] - m.obj_side[FRONT] - dimensions.y; #endif park_above_object(m, uncertainty); // The difference between the known and the measured location // of the calibration object is the positional error - m.pos_error[X_AXIS] = (0 + m.pos_error.x = (0 #if HAS_X_CENTER - + m.true_center[X_AXIS] - m.obj_center[X_AXIS] + + true_center.x - m.obj_center.x #endif ); - m.pos_error[Y_AXIS] = (0 + m.pos_error.y = (0 #if HAS_Y_CENTER - + m.true_center[Y_AXIS] - m.obj_center[Y_AXIS] + + true_center.y - m.obj_center.y #endif ); - m.pos_error[Z_AXIS] = m.true_center[Z_AXIS] - m.obj_center[Z_AXIS]; + m.pos_error.z = true_center.z - m.obj_center.z; } #if ENABLED(CALIBRATION_REPORTING) @@ -348,12 +326,12 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { inline void report_measured_center(const measurements_t &m) { SERIAL_ECHOLNPGM("Center:"); #if HAS_X_CENTER - SERIAL_ECHOLNPAIR(" X", m.obj_center[X_AXIS]); + SERIAL_ECHOLNPAIR(" X", m.obj_center.x); #endif #if HAS_Y_CENTER - SERIAL_ECHOLNPAIR(" Y", m.obj_center[Y_AXIS]); + SERIAL_ECHOLNPAIR(" Y", m.obj_center.y); #endif - SERIAL_ECHOLNPAIR(" Z", m.obj_center[Z_AXIS]); + SERIAL_ECHOLNPAIR(" Z", m.obj_center.z); SERIAL_EOL(); } @@ -380,12 +358,12 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { SERIAL_ECHO(int(active_extruder)); SERIAL_ECHOLNPGM(" Positional Error:"); #if HAS_X_CENTER - SERIAL_ECHOLNPAIR(" X", m.pos_error[X_AXIS]); + SERIAL_ECHOLNPAIR(" X", m.pos_error.x); #endif #if HAS_Y_CENTER - SERIAL_ECHOLNPAIR(" Y", m.pos_error[Y_AXIS]); + SERIAL_ECHOLNPAIR(" Y", m.pos_error.y); #endif - SERIAL_ECHOLNPAIR(" Z", m.pos_error[Z_AXIS]); + SERIAL_ECHOLNPAIR(" Z", m.pos_error.z); SERIAL_EOL(); } @@ -393,10 +371,10 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { SERIAL_ECHOLNPGM("Nozzle Tip Outer Dimensions:"); #if HAS_X_CENTER || HAS_Y_CENTER #if HAS_X_CENTER - SERIAL_ECHOLNPAIR(" X", m.nozzle_outer_dimension[X_AXIS]); + SERIAL_ECHOLNPAIR(" X", m.nozzle_outer_dimension.x); #endif #if HAS_Y_CENTER - SERIAL_ECHOLNPAIR(" Y", m.nozzle_outer_dimension[Y_AXIS]); + SERIAL_ECHOLNPAIR(" Y", m.nozzle_outer_dimension.y); #endif #else UNUSED(m); @@ -410,7 +388,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) { // inline void report_hotend_offsets() { for (uint8_t e = 1; e < HOTENDS; e++) - SERIAL_ECHOLNPAIR("T", int(e), " Hotend Offset X", hotend_offset[X_AXIS][e], " Y", hotend_offset[Y_AXIS][e], " Z", hotend_offset[Z_AXIS][e]); + SERIAL_ECHOLNPAIR("T", int(e), " Hotend Offset X", hotend_offset[e].x, " Y", hotend_offset[e].y, " Z", hotend_offset[e].z); } #endif @@ -434,49 +412,40 @@ inline void calibrate_backlash(measurements_t &m, const float uncertainty) { #if ENABLED(BACKLASH_GCODE) #if HAS_X_CENTER - backlash.distance_mm[X_AXIS] = (m.backlash[LEFT] + m.backlash[RIGHT]) / 2; + backlash.distance_mm.x = (m.backlash[LEFT] + m.backlash[RIGHT]) / 2; #elif ENABLED(CALIBRATION_MEASURE_LEFT) - backlash.distance_mm[X_AXIS] = m.backlash[LEFT]; + backlash.distance_mm.x = m.backlash[LEFT]; #elif ENABLED(CALIBRATION_MEASURE_RIGHT) - backlash.distance_mm[X_AXIS] = m.backlash[RIGHT]; + backlash.distance_mm.x = m.backlash[RIGHT]; #endif #if HAS_Y_CENTER - backlash.distance_mm[Y_AXIS] = (m.backlash[FRONT] + m.backlash[BACK]) / 2; + backlash.distance_mm.y = (m.backlash[FRONT] + m.backlash[BACK]) / 2; #elif ENABLED(CALIBRATION_MEASURE_FRONT) - backlash.distance_mm[Y_AXIS] = m.backlash[FRONT]; + backlash.distance_mm.y = m.backlash[FRONT]; #elif ENABLED(CALIBRATION_MEASURE_BACK) - backlash.distance_mm[Y_AXIS] = m.backlash[BACK]; + backlash.distance_mm.y = m.backlash[BACK]; #endif - backlash.distance_mm[Z_AXIS] = m.backlash[TOP]; + backlash.distance_mm.z = m.backlash[TOP]; #endif } #if ENABLED(BACKLASH_GCODE) // Turn on backlash compensation and move in all // directions to take up any backlash - { // New scope for TEMPORARY_BACKLASH_CORRECTION TEMPORARY_BACKLASH_CORRECTION(all_on); TEMPORARY_BACKLASH_SMOOTHING(0.0f); - move_to( - X_AXIS, current_position[X_AXIS] + 3, - Y_AXIS, current_position[Y_AXIS] + 3, - Z_AXIS, current_position[Z_AXIS] + 3 - ); - move_to( - X_AXIS, current_position[X_AXIS] - 3, - Y_AXIS, current_position[Y_AXIS] - 3, - Z_AXIS, current_position[Z_AXIS] - 3 - ); + const xyz_float_t move = { 3, 3, 3 }; + current_position += move; calibration_move(); + current_position -= move; calibration_move(); } #endif } inline void update_measurements(measurements_t &m, const AxisEnum axis) { - const float true_center[XYZ] = CALIBRATION_OBJECT_CENTER; current_position[axis] += m.pos_error[axis]; m.obj_center[axis] = true_center[axis]; m.pos_error[axis] = 0; @@ -508,12 +477,12 @@ inline void calibrate_toolhead(measurements_t &m, const float uncertainty, const // Adjust the hotend offset #if HAS_HOTEND_OFFSET #if HAS_X_CENTER - hotend_offset[X_AXIS][extruder] += m.pos_error[X_AXIS]; + hotend_offset[extruder].x += m.pos_error.x; #endif #if HAS_Y_CENTER - hotend_offset[Y_AXIS][extruder] += m.pos_error[Y_AXIS]; + hotend_offset[extruder].y += m.pos_error.y; #endif - hotend_offset[Z_AXIS][extruder] += m.pos_error[Z_AXIS]; + hotend_offset[extruder].z += m.pos_error.z; normalize_hotend_offsets(); #endif @@ -589,7 +558,8 @@ inline void calibrate_all() { // Do a slow and precise calibration of the toolheads calibrate_all_toolheads(m, CALIBRATION_MEASUREMENT_UNCERTAIN); - move_to(X_AXIS, 150); // Park nozzle away from calibration object + current_position.x = X_CENTER; + calibration_move(); // Park nozzle away from calibration object } /** diff --git a/Marlin/src/gcode/calibrate/M48.cpp b/Marlin/src/gcode/calibrate/M48.cpp index 49fc9982dcd9..d8fe4e410484 100644 --- a/Marlin/src/gcode/calibrate/M48.cpp +++ b/Marlin/src/gcode/calibrate/M48.cpp @@ -74,13 +74,14 @@ void GcodeSuite::M48() { const ProbePtRaise raise_after = parser.boolval('E') ? PROBE_PT_STOW : PROBE_PT_RAISE; - float X_current = current_position[X_AXIS], - Y_current = current_position[Y_AXIS]; + xy_float_t next_pos = current_position; - const float X_probe_location = parser.linearval('X', X_current + probe_offset[X_AXIS]), - Y_probe_location = parser.linearval('Y', Y_current + probe_offset[Y_AXIS]); + const xy_pos_t probe_pos = { + parser.linearval('X', next_pos.x + probe_offset.x), + parser.linearval('Y', next_pos.y + probe_offset.y) + }; - if (!position_is_reachable_by_probe(X_probe_location, Y_probe_location)) { + if (!position_is_reachable_by_probe(probe_pos)) { SERIAL_ECHOLNPGM("? (X,Y) out of bounds."); return; } @@ -116,7 +117,7 @@ void GcodeSuite::M48() { float mean = 0.0, sigma = 0.0, min = 99999.9, max = -99999.9, sample_set[n_samples]; // Move to the first point, deploy, and probe - const float t = probe_at_point(X_probe_location, Y_probe_location, raise_after, verbose_level); + const float t = probe_at_point(probe_pos, raise_after, verbose_level); bool probing_good = !isnan(t); if (probing_good) { @@ -165,32 +166,31 @@ void GcodeSuite::M48() { while (angle < 0.0) angle += 360.0; // outside of this range. It looks like they behave correctly with // numbers outside of the range, but just to be safe we clamp them. - X_current = X_probe_location - probe_offset[X_AXIS] + cos(RADIANS(angle)) * radius; - Y_current = Y_probe_location - probe_offset[Y_AXIS] + sin(RADIANS(angle)) * radius; + next_pos.set(probe_pos.x - probe_offset.x + cos(RADIANS(angle)) * radius, + probe_pos.y - probe_offset.y + sin(RADIANS(angle)) * radius); #if DISABLED(DELTA) - LIMIT(X_current, X_MIN_POS, X_MAX_POS); - LIMIT(Y_current, Y_MIN_POS, Y_MAX_POS); + LIMIT(next_pos.x, X_MIN_POS, X_MAX_POS); + LIMIT(next_pos.y, Y_MIN_POS, Y_MAX_POS); #else // If we have gone out too far, we can do a simple fix and scale the numbers // back in closer to the origin. - while (!position_is_reachable_by_probe(X_current, Y_current)) { - X_current *= 0.8; - Y_current *= 0.8; + while (!position_is_reachable_by_probe(next_pos)) { + next_pos *= 0.8; if (verbose_level > 3) - SERIAL_ECHOLNPAIR("Moving inward: X", X_current, " Y", Y_current); + SERIAL_ECHOLNPAIR("Moving inward: X", next_pos.x, " Y", next_pos.y); } #endif if (verbose_level > 3) - SERIAL_ECHOLNPAIR("Going to: X", X_current, " Y", Y_current, " Z", current_position[Z_AXIS]); + SERIAL_ECHOLNPAIR("Going to: X", next_pos.x, " Y", next_pos.y); - do_blocking_move_to_xy(X_current, Y_current); + do_blocking_move_to_xy(next_pos); } // n_legs loop } // n_legs // Probe a single point - sample_set[n] = probe_at_point(X_probe_location, Y_probe_location, raise_after, 0); + sample_set[n] = probe_at_point(probe_pos, raise_after, 0); // Break the loop if the probe fails probing_good = !isnan(sample_set[n]); diff --git a/Marlin/src/gcode/calibrate/M665.cpp b/Marlin/src/gcode/calibrate/M665.cpp index 6422057ef83c..1b37fa8bb6b5 100644 --- a/Marlin/src/gcode/calibrate/M665.cpp +++ b/Marlin/src/gcode/calibrate/M665.cpp @@ -43,14 +43,14 @@ * Z = Gamma (Tower 3) angle trim */ void GcodeSuite::M665() { - if (parser.seen('H')) delta_height = parser.value_linear_units(); - if (parser.seen('L')) delta_diagonal_rod = parser.value_linear_units(); - if (parser.seen('R')) delta_radius = parser.value_linear_units(); - if (parser.seen('S')) delta_segments_per_second = parser.value_float(); - if (parser.seen('B')) delta_calibration_radius = parser.value_float(); - if (parser.seen('X')) delta_tower_angle_trim[A_AXIS] = parser.value_float(); - if (parser.seen('Y')) delta_tower_angle_trim[B_AXIS] = parser.value_float(); - if (parser.seen('Z')) delta_tower_angle_trim[C_AXIS] = parser.value_float(); + if (parser.seen('H')) delta_height = parser.value_linear_units(); + if (parser.seen('L')) delta_diagonal_rod = parser.value_linear_units(); + if (parser.seen('R')) delta_radius = parser.value_linear_units(); + if (parser.seen('S')) delta_segments_per_second = parser.value_float(); + if (parser.seen('B')) delta_calibration_radius = parser.value_float(); + if (parser.seen('X')) delta_tower_angle_trim.a = parser.value_float(); + if (parser.seen('Y')) delta_tower_angle_trim.b = parser.value_float(); + if (parser.seen('Z')) delta_tower_angle_trim.c = parser.value_float(); recalc_delta_settings(); } @@ -76,13 +76,13 @@ #if HAS_SCARA_OFFSET - if (parser.seenval('Z')) scara_home_offset[Z_AXIS] = parser.value_linear_units(); + if (parser.seenval('Z')) scara_home_offset.z = parser.value_linear_units(); const bool hasA = parser.seenval('A'), hasP = parser.seenval('P'), hasX = parser.seenval('X'); const uint8_t sumAPX = hasA + hasP + hasX; if (sumAPX) { if (sumAPX == 1) - scara_home_offset[A_AXIS] = parser.value_float(); + scara_home_offset.a = parser.value_float(); else { SERIAL_ERROR_MSG("Only one of A, P, or X is allowed."); return; @@ -93,7 +93,7 @@ const uint8_t sumBTY = hasB + hasT + hasY; if (sumBTY) { if (sumBTY == 1) - scara_home_offset[B_AXIS] = parser.value_float(); + scara_home_offset.b = parser.value_float(); else { SERIAL_ERROR_MSG("Only one of B, T, or Y is allowed."); return; diff --git a/Marlin/src/gcode/config/M200-M205.cpp b/Marlin/src/gcode/config/M200-M205.cpp index c43b889244a2..0edffe5b49af 100644 --- a/Marlin/src/gcode/config/M200-M205.cpp +++ b/Marlin/src/gcode/config/M200-M205.cpp @@ -152,17 +152,17 @@ void GcodeSuite::M205() { } #endif #if HAS_CLASSIC_JERK - if (parser.seen('X')) planner.max_jerk[X_AXIS] = parser.value_linear_units(); - if (parser.seen('Y')) planner.max_jerk[Y_AXIS] = parser.value_linear_units(); + if (parser.seen('X')) planner.max_jerk.x = parser.value_linear_units(); + if (parser.seen('Y')) planner.max_jerk.y = parser.value_linear_units(); if (parser.seen('Z')) { - planner.max_jerk[Z_AXIS] = parser.value_linear_units(); + planner.max_jerk.z = parser.value_linear_units(); #if HAS_MESH - if (planner.max_jerk[Z_AXIS] <= 0.1f) + if (planner.max_jerk.z <= 0.1f) SERIAL_ECHOLNPGM("WARNING! Low Z Jerk may lead to unwanted pauses."); #endif } #if !BOTH(JUNCTION_DEVIATION, LIN_ADVANCE) - if (parser.seen('E')) planner.max_jerk[E_AXIS] = parser.value_linear_units(); + if (parser.seen('E')) planner.max_jerk.e = parser.value_linear_units(); #endif #endif } diff --git a/Marlin/src/gcode/config/M218.cpp b/Marlin/src/gcode/config/M218.cpp index d43991171316..790d7714a370 100644 --- a/Marlin/src/gcode/config/M218.cpp +++ b/Marlin/src/gcode/config/M218.cpp @@ -44,27 +44,27 @@ void GcodeSuite::M218() { const int8_t target_extruder = get_target_extruder_from_command(); if (target_extruder < 0) return; - if (parser.seenval('X')) hotend_offset[X_AXIS][target_extruder] = parser.value_linear_units(); - if (parser.seenval('Y')) hotend_offset[Y_AXIS][target_extruder] = parser.value_linear_units(); - if (parser.seenval('Z')) hotend_offset[Z_AXIS][target_extruder] = parser.value_linear_units(); + if (parser.seenval('X')) hotend_offset[target_extruder].x = parser.value_linear_units(); + if (parser.seenval('Y')) hotend_offset[target_extruder].y = parser.value_linear_units(); + if (parser.seenval('Z')) hotend_offset[target_extruder].z = parser.value_linear_units(); if (!parser.seen("XYZ")) { SERIAL_ECHO_START(); SERIAL_ECHOPGM(MSG_HOTEND_OFFSET); HOTEND_LOOP() { SERIAL_CHAR(' '); - SERIAL_ECHO(hotend_offset[X_AXIS][e]); + SERIAL_ECHO(hotend_offset[e].x); SERIAL_CHAR(','); - SERIAL_ECHO(hotend_offset[Y_AXIS][e]); + SERIAL_ECHO(hotend_offset[e].y); SERIAL_CHAR(','); - SERIAL_ECHO_F(hotend_offset[Z_AXIS][e], 3); + SERIAL_ECHO_F(hotend_offset[e].z, 3); } SERIAL_EOL(); } #if ENABLED(DELTA) if (target_extruder == active_extruder) - do_blocking_move_to_xy(current_position[X_AXIS], current_position[Y_AXIS], planner.settings.max_feedrate_mm_s[X_AXIS]); + do_blocking_move_to_xy(current_position, planner.settings.max_feedrate_mm_s[X_AXIS]); #endif } diff --git a/Marlin/src/gcode/config/M92.cpp b/Marlin/src/gcode/config/M92.cpp index f0e27e82d1dd..0fd8dbea166f 100644 --- a/Marlin/src/gcode/config/M92.cpp +++ b/Marlin/src/gcode/config/M92.cpp @@ -77,7 +77,7 @@ void GcodeSuite::M92() { if (value < 20) { float factor = planner.settings.axis_steps_per_mm[E_AXIS_N(target_extruder)] / value; // increase e constants if M92 E14 is given for netfab. #if HAS_CLASSIC_JERK && !BOTH(JUNCTION_DEVIATION, LIN_ADVANCE) - planner.max_jerk[E_AXIS] *= factor; + planner.max_jerk.e *= factor; #endif planner.settings.max_feedrate_mm_s[E_AXIS_N(target_extruder)] *= factor; planner.max_acceleration_steps_per_s2[E_AXIS_N(target_extruder)] *= factor; diff --git a/Marlin/src/gcode/control/M211.cpp b/Marlin/src/gcode/control/M211.cpp index 64c27327559d..432ab1379af0 100644 --- a/Marlin/src/gcode/control/M211.cpp +++ b/Marlin/src/gcode/control/M211.cpp @@ -33,18 +33,14 @@ * Usage: M211 S1 to enable, M211 S0 to disable, M211 alone for report */ void GcodeSuite::M211() { + const xyz_pos_t l_soft_min = soft_endstop.min.asLogical(), + l_soft_max = soft_endstop.max.asLogical(); SERIAL_ECHO_START(); SERIAL_ECHOPGM(MSG_SOFT_ENDSTOPS); if (parser.seen('S')) soft_endstops_enabled = parser.value_bool(); serialprint_onoff(soft_endstops_enabled); - SERIAL_ECHOPGM(MSG_SOFT_MIN); - SERIAL_ECHOPAIR( MSG_X, LOGICAL_X_POSITION(soft_endstop[X_AXIS].min)); - SERIAL_ECHOPAIR(" " MSG_Y, LOGICAL_Y_POSITION(soft_endstop[Y_AXIS].min)); - SERIAL_ECHOPAIR(" " MSG_Z, LOGICAL_Z_POSITION(soft_endstop[Z_AXIS].min)); - SERIAL_ECHOPGM(MSG_SOFT_MAX); - SERIAL_ECHOPAIR( MSG_X, LOGICAL_X_POSITION(soft_endstop[X_AXIS].max)); - SERIAL_ECHOPAIR(" " MSG_Y, LOGICAL_Y_POSITION(soft_endstop[Y_AXIS].max)); - SERIAL_ECHOLNPAIR(" " MSG_Z, LOGICAL_Z_POSITION(soft_endstop[Z_AXIS].max)); + print_xyz(l_soft_min, PSTR(MSG_SOFT_MIN), PSTR(" ")); + print_xyz(l_soft_max, PSTR(MSG_SOFT_MAX)); } #endif diff --git a/Marlin/src/gcode/control/M605.cpp b/Marlin/src/gcode/control/M605.cpp index 84a75686a4ce..007c6fc6b826 100644 --- a/Marlin/src/gcode/control/M605.cpp +++ b/Marlin/src/gcode/control/M605.cpp @@ -79,9 +79,9 @@ } mirrored_duplication_mode = true; stepper.set_directions(); - float x_jog = current_position[X_AXIS] - .1; + float x_jog = current_position.x - .1; for (uint8_t i = 2; --i;) { - planner.buffer_line(x_jog, current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate_mm_s, 0); + planner.buffer_line(x_jog, current_position.y, current_position.z, current_position.e, feedrate_mm_s, 0); x_jog += .1; } return; @@ -122,7 +122,7 @@ DEBUG_ECHOPAIR("\nActive Ext: ", int(active_extruder)); if (!active_extruder_parked) DEBUG_ECHOPGM(" NOT "); DEBUG_ECHOPGM(" parked."); - DEBUG_ECHOPAIR("\nactive_extruder_x_pos: ", current_position[X_AXIS]); + DEBUG_ECHOPAIR("\nactive_extruder_x_pos: ", current_position.x); DEBUG_ECHOPAIR("\ninactive_extruder_x_pos: ", inactive_extruder_x_pos); DEBUG_ECHOPAIR("\nextruder_duplication_enabled: ", int(extruder_duplication_enabled)); DEBUG_ECHOPAIR("\nduplicate_extruder_x_offset: ", duplicate_extruder_x_offset); @@ -138,7 +138,7 @@ HOTEND_LOOP() { DEBUG_ECHOPAIR(" T", int(e)); - LOOP_XYZ(a) DEBUG_ECHOPAIR(" hotend_offset[", axis_codes[a], "_AXIS][", int(e), "]=", hotend_offset[a][e]); + LOOP_XYZ(a) DEBUG_ECHOPAIR(" hotend_offset[", int(e), "].", axis_codes[a] | 0x20, "=", hotend_offset[e][a]); DEBUG_EOL(); } DEBUG_EOL(); diff --git a/Marlin/src/gcode/feature/camera/M240.cpp b/Marlin/src/gcode/feature/camera/M240.cpp index 3144126fe5c8..6fb68d454e65 100644 --- a/Marlin/src/gcode/feature/camera/M240.cpp +++ b/Marlin/src/gcode/feature/camera/M240.cpp @@ -48,8 +48,8 @@ #if ENABLED(ADVANCED_PAUSE_FEATURE) do_pause_e_move(length, fr_mm_s); #else - current_position[E_AXIS] += length / planner.e_factor[active_extruder]; - planner.buffer_line(current_position, fr_mm_s, active_extruder); + current_position.e += length / planner.e_factor[active_extruder]; + line_to_current_position(fr_mm_s); #endif } } @@ -97,10 +97,10 @@ void GcodeSuite::M240() { if (axis_unhomed_error()) return; - const float old_pos[XYZ] = { - current_position[X_AXIS] + parser.linearval('A'), - current_position[Y_AXIS] + parser.linearval('B'), - current_position[Z_AXIS] + const xyz_pos_t old_pos = { + current_position.x + parser.linearval('A'), + current_position.y + parser.linearval('B'), + current_position.z }; #ifdef PHOTO_RETRACT_MM @@ -121,22 +121,22 @@ void GcodeSuite::M240() { feedRate_t fr_mm_s = MMM_TO_MMS(parser.linearval('F')); if (fr_mm_s) NOLESS(fr_mm_s, 10.0f); - constexpr float photo_position[XYZ] = PHOTO_POSITION; - float raw[XYZ] = { - parser.seenval('X') ? RAW_X_POSITION(parser.value_linear_units()) : photo_position[X_AXIS], - parser.seenval('Y') ? RAW_Y_POSITION(parser.value_linear_units()) : photo_position[Y_AXIS], - (parser.seenval('Z') ? parser.value_linear_units() : photo_position[Z_AXIS]) + current_position[Z_AXIS] + constexpr xyz_pos_t photo_position = PHOTO_POSITION; + xyz_pos_t raw = { + parser.seenval('X') ? RAW_X_POSITION(parser.value_linear_units()) : photo_position.x, + parser.seenval('Y') ? RAW_Y_POSITION(parser.value_linear_units()) : photo_position.y, + (parser.seenval('Z') ? parser.value_linear_units() : photo_position.z) + current_position.z }; apply_motion_limits(raw); do_blocking_move_to(raw, fr_mm_s); #ifdef PHOTO_SWITCH_POSITION - constexpr float photo_switch_position[2] = PHOTO_SWITCH_POSITION; - const float sraw[] = { - parser.seenval('I') ? RAW_X_POSITION(parser.value_linear_units()) : photo_switch_position[X_AXIS], - parser.seenval('J') ? RAW_Y_POSITION(parser.value_linear_units()) : photo_switch_position[Y_AXIS] + constexpr xy_pos_t photo_switch_position = PHOTO_SWITCH_POSITION; + const xy_pos_t sraw = { + parser.seenval('I') ? RAW_X_POSITION(parser.value_linear_units()) : photo_switch_position.x, + parser.seenval('J') ? RAW_Y_POSITION(parser.value_linear_units()) : photo_switch_position.y }; - do_blocking_move_to_xy(sraw[X_AXIS], sraw[Y_AXIS], get_homing_bump_feedrate(X_AXIS)); + do_blocking_move_to_xy(sraw, get_homing_bump_feedrate(X_AXIS)); #if PHOTO_SWITCH_MS > 0 safe_delay(parser.intval('D', PHOTO_SWITCH_MS)); #endif diff --git a/Marlin/src/gcode/feature/pause/M125.cpp b/Marlin/src/gcode/feature/pause/M125.cpp index 86e8f61c1cd2..22aaf2c446f1 100644 --- a/Marlin/src/gcode/feature/pause/M125.cpp +++ b/Marlin/src/gcode/feature/pause/M125.cpp @@ -58,7 +58,7 @@ void GcodeSuite::M125() { #endif ); - point_t park_point = NOZZLE_PARK_POINT; + xyz_pos_t park_point = NOZZLE_PARK_POINT; // Move XY axes to filament change position or given position if (parser.seenval('X')) park_point.x = RAW_X_POSITION(parser.linearval('X')); @@ -68,8 +68,7 @@ void GcodeSuite::M125() { if (parser.seenval('Z')) park_point.z = parser.linearval('Z'); #if HAS_HOTEND_OFFSET && NONE(DUAL_X_CARRIAGE, DELTA) - park_point.x += hotend_offset[X_AXIS][active_extruder]; - park_point.y += hotend_offset[Y_AXIS][active_extruder]; + park_point += hotend_offset[active_extruder]; #endif #if ENABLED(SDSUPPORT) diff --git a/Marlin/src/gcode/feature/pause/M600.cpp b/Marlin/src/gcode/feature/pause/M600.cpp index f2ade740b42d..4056a398e4f1 100644 --- a/Marlin/src/gcode/feature/pause/M600.cpp +++ b/Marlin/src/gcode/feature/pause/M600.cpp @@ -60,7 +60,6 @@ * Default values are used for omitted arguments. */ void GcodeSuite::M600() { - point_t park_point = NOZZLE_PARK_POINT; #if ENABLED(MIXING_EXTRUDER) const int8_t target_e_stepper = get_target_e_stepper_from_command(); @@ -119,6 +118,8 @@ void GcodeSuite::M600() { #endif ); + xyz_pos_t park_point NOZZLE_PARK_POINT; + // Lift Z axis if (parser.seenval('Z')) park_point.z = parser.linearval('Z'); @@ -127,8 +128,7 @@ void GcodeSuite::M600() { if (parser.seenval('Y')) park_point.y = parser.linearval('Y'); #if HAS_HOTEND_OFFSET && NONE(DUAL_X_CARRIAGE, DELTA) - park_point.x += hotend_offset[X_AXIS][active_extruder]; - park_point.y += hotend_offset[Y_AXIS][active_extruder]; + park_point += hotend_offset[active_extruder]; #endif #if ENABLED(MMU2_MENUS) diff --git a/Marlin/src/gcode/feature/pause/M701_M702.cpp b/Marlin/src/gcode/feature/pause/M701_M702.cpp index 6add2ebfaec2..80a7f76d934b 100644 --- a/Marlin/src/gcode/feature/pause/M701_M702.cpp +++ b/Marlin/src/gcode/feature/pause/M701_M702.cpp @@ -28,7 +28,6 @@ #include "../../../Marlin.h" #include "../../../module/motion.h" #include "../../../module/temperature.h" -#include "../../../libs/point_t.h" #if EXTRUDERS > 1 #include "../../../module/tool_change.h" @@ -57,7 +56,7 @@ * Default values are used for omitted arguments. */ void GcodeSuite::M701() { - point_t park_point = NOZZLE_PARK_POINT; + xyz_pos_t park_point = NOZZLE_PARK_POINT; #if ENABLED(NO_MOTION_BEFORE_HOMING) // Don't raise Z if the machine isn't homed @@ -97,7 +96,7 @@ void GcodeSuite::M701() { // Lift Z axis if (park_point.z > 0) - do_blocking_move_to_z(_MIN(current_position[Z_AXIS] + park_point.z, Z_MAX_POS), feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); + do_blocking_move_to_z(_MIN(current_position.z + park_point.z, Z_MAX_POS), feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); // Load filament #if ENABLED(PRUSA_MMU2) @@ -116,7 +115,7 @@ void GcodeSuite::M701() { // Restore Z axis if (park_point.z > 0) - do_blocking_move_to_z(_MAX(current_position[Z_AXIS] - park_point.z, 0), feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); + do_blocking_move_to_z(_MAX(current_position.z - park_point.z, 0), feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); #if EXTRUDERS > 1 && DISABLED(PRUSA_MMU2) // Restore toolhead if it was changed @@ -146,7 +145,7 @@ void GcodeSuite::M701() { * Default values are used for omitted arguments. */ void GcodeSuite::M702() { - point_t park_point = NOZZLE_PARK_POINT; + xyz_pos_t park_point = NOZZLE_PARK_POINT; #if ENABLED(NO_MOTION_BEFORE_HOMING) // Don't raise Z if the machine isn't homed @@ -196,7 +195,7 @@ void GcodeSuite::M702() { // Lift Z axis if (park_point.z > 0) - do_blocking_move_to_z(_MIN(current_position[Z_AXIS] + park_point.z, Z_MAX_POS), feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); + do_blocking_move_to_z(_MIN(current_position.z + park_point.z, Z_MAX_POS), feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); // Unload filament #if ENABLED(PRUSA_MMU2) @@ -226,7 +225,7 @@ void GcodeSuite::M702() { // Restore Z axis if (park_point.z > 0) - do_blocking_move_to_z(_MAX(current_position[Z_AXIS] - park_point.z, 0), feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); + do_blocking_move_to_z(_MAX(current_position.z - park_point.z, 0), feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); #if EXTRUDERS > 1 && DISABLED(PRUSA_MMU2) // Restore toolhead if it was changed diff --git a/Marlin/src/gcode/feature/trinamic/M122.cpp b/Marlin/src/gcode/feature/trinamic/M122.cpp index bbbe86bdb89f..a7e6d65172ae 100644 --- a/Marlin/src/gcode/feature/trinamic/M122.cpp +++ b/Marlin/src/gcode/feature/trinamic/M122.cpp @@ -31,8 +31,8 @@ * M122: Debug TMC drivers */ void GcodeSuite::M122() { - bool print_axis[XYZE] = { false, false, false, false }, - print_all = true; + xyze_bool_t print_axis = { false, false, false, false }; + bool print_all = true; LOOP_XYZE(i) if (parser.seen(axis_codes[i])) { print_axis[i] = true; print_all = false; } if (print_all) LOOP_XYZE(i) print_axis[i] = true; @@ -45,12 +45,12 @@ void GcodeSuite::M122() { #endif if (parser.seen('V')) - tmc_get_registers(print_axis[X_AXIS], print_axis[Y_AXIS], print_axis[Z_AXIS], print_axis[E_AXIS]); + tmc_get_registers(print_axis.x, print_axis.y, print_axis.z, print_axis.e); else - tmc_report_all(print_axis[X_AXIS], print_axis[Y_AXIS], print_axis[Z_AXIS], print_axis[E_AXIS]); + tmc_report_all(print_axis.x, print_axis.y, print_axis.z, print_axis.e); #endif - test_tmc_connection(print_axis[X_AXIS], print_axis[Y_AXIS], print_axis[Z_AXIS], print_axis[E_AXIS]); + test_tmc_connection(print_axis.x, print_axis.y, print_axis.z, print_axis.e); } #endif // HAS_TRINAMIC diff --git a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp index 27a0be9a64cc..feb891544d08 100644 --- a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp +++ b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp @@ -104,25 +104,25 @@ */ void GcodeSuite::M912() { #if M91x_SOME_X - const bool hasX = parser.seen(axis_codes[X_AXIS]); + const bool hasX = parser.seen(axis_codes.x); #else constexpr bool hasX = false; #endif #if M91x_SOME_Y - const bool hasY = parser.seen(axis_codes[Y_AXIS]); + const bool hasY = parser.seen(axis_codes.y); #else constexpr bool hasY = false; #endif #if M91x_SOME_Z - const bool hasZ = parser.seen(axis_codes[Z_AXIS]); + const bool hasZ = parser.seen(axis_codes.z); #else constexpr bool hasZ = false; #endif #if M91x_SOME_E - const bool hasE = parser.seen(axis_codes[E_AXIS]); + const bool hasE = parser.seen(axis_codes.e); #else constexpr bool hasE = false; #endif @@ -130,7 +130,7 @@ const bool hasNone = !hasX && !hasY && !hasZ && !hasE; #if M91x_SOME_X - const int8_t xval = int8_t(parser.byteval(axis_codes[X_AXIS], 0xFF)); + const int8_t xval = int8_t(parser.byteval(axis_codes.x, 0xFF)); #if M91x_USE(X) if (hasNone || xval == 1 || (hasX && xval < 0)) tmc_clear_otpw(stepperX); #endif @@ -140,7 +140,7 @@ #endif #if M91x_SOME_Y - const int8_t yval = int8_t(parser.byteval(axis_codes[Y_AXIS], 0xFF)); + const int8_t yval = int8_t(parser.byteval(axis_codes.y, 0xFF)); #if M91x_USE(Y) if (hasNone || yval == 1 || (hasY && yval < 0)) tmc_clear_otpw(stepperY); #endif @@ -150,7 +150,7 @@ #endif #if M91x_SOME_Z - const int8_t zval = int8_t(parser.byteval(axis_codes[Z_AXIS], 0xFF)); + const int8_t zval = int8_t(parser.byteval(axis_codes.z, 0xFF)); #if M91x_USE(Z) if (hasNone || zval == 1 || (hasZ && zval < 0)) tmc_clear_otpw(stepperZ); #endif @@ -163,7 +163,7 @@ #endif #if M91x_SOME_E - const int8_t eval = int8_t(parser.byteval(axis_codes[E_AXIS], 0xFF)); + const int8_t eval = int8_t(parser.byteval(axis_codes.e, 0xFF)); #if M91x_USE_E(0) if (hasNone || eval == 0 || (hasE && eval < 0)) tmc_clear_otpw(stepperE0); #endif diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp index f542f842ce21..32885af6ca35 100644 --- a/Marlin/src/gcode/gcode.cpp +++ b/Marlin/src/gcode/gcode.cpp @@ -49,12 +49,13 @@ GcodeSuite gcode; millis_t GcodeSuite::previous_move_ms; -static constexpr bool ar_init[XYZE] = AXIS_RELATIVE_MODES; +// Relative motion mode for each logical axis +static constexpr xyze_bool_t ar_init = AXIS_RELATIVE_MODES; uint8_t GcodeSuite::axis_relative = ( - (ar_init[X_AXIS] ? _BV(REL_X) : 0) - | (ar_init[Y_AXIS] ? _BV(REL_Y) : 0) - | (ar_init[Z_AXIS] ? _BV(REL_Z) : 0) - | (ar_init[E_AXIS] ? _BV(REL_E) : 0) + (ar_init.x ? _BV(REL_X) : 0) + | (ar_init.y ? _BV(REL_Y) : 0) + | (ar_init.z ? _BV(REL_Z) : 0) + | (ar_init.e ? _BV(REL_E) : 0) ); #if ENABLED(HOST_KEEPALIVE_FEATURE) @@ -68,7 +69,7 @@ uint8_t GcodeSuite::axis_relative = ( #if ENABLED(CNC_COORDINATE_SYSTEMS) int8_t GcodeSuite::active_coordinate_system = -1; // machine space - float GcodeSuite::coordinate_system[MAX_COORDINATE_SYSTEMS][XYZ]; + xyz_pos_t GcodeSuite::coordinate_system[MAX_COORDINATE_SYSTEMS]; #endif /** @@ -112,7 +113,7 @@ int8_t GcodeSuite::get_target_e_stepper_from_command() { * - Set the feedrate, if included */ void GcodeSuite::get_destination_from_command() { - bool seen[XYZE] = { false, false, false, false }; + xyze_bool_t seen = { false, false, false, false }; LOOP_XYZE(i) { if ( (seen[i] = parser.seenval(axis_codes[i])) ) { const float v = parser.value_axis_units((AxisEnum)i); @@ -124,7 +125,7 @@ void GcodeSuite::get_destination_from_command() { #if ENABLED(POWER_LOSS_RECOVERY) && !PIN_EXISTS(POWER_LOSS) // Only update power loss recovery on moves with E - if (recovery.enabled && IS_SD_PRINTING() && seen[E_AXIS] && (seen[X_AXIS] || seen[Y_AXIS])) + if (recovery.enabled && IS_SD_PRINTING() && seen.e && (seen.x || seen.y)) recovery.save(); #endif @@ -133,7 +134,7 @@ void GcodeSuite::get_destination_from_command() { #if ENABLED(PRINTCOUNTER) if (!DEBUGGING(DRYRUN)) - print_job_timer.incFilamentUsed(destination[E_AXIS] - current_position[E_AXIS]); + print_job_timer.incFilamentUsed(destination.e - current_position.e); #endif // Get ABCDHI mixing factors diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index f871d6d216a5..619f50b61f13 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -321,7 +321,7 @@ class GcodeSuite { #define MAX_COORDINATE_SYSTEMS 9 #if ENABLED(CNC_COORDINATE_SYSTEMS) static int8_t active_coordinate_system; - static float coordinate_system[MAX_COORDINATE_SYSTEMS][XYZ]; + static xyz_pos_t coordinate_system[MAX_COORDINATE_SYSTEMS]; static bool select_coordinate_system(const int8_t _new); #endif diff --git a/Marlin/src/gcode/geometry/G53-G59.cpp b/Marlin/src/gcode/geometry/G53-G59.cpp index 88914ccffde0..38f72ae62e7d 100644 --- a/Marlin/src/gcode/geometry/G53-G59.cpp +++ b/Marlin/src/gcode/geometry/G53-G59.cpp @@ -36,9 +36,9 @@ bool GcodeSuite::select_coordinate_system(const int8_t _new) { if (active_coordinate_system == _new) return false; active_coordinate_system = _new; - float new_offset[XYZ] = { 0 }; + xyz_float_t new_offset{0}; if (WITHIN(_new, 0, MAX_COORDINATE_SYSTEMS - 1)) - COPY(new_offset, coordinate_system[_new]); + new_offset = coordinate_system[_new]; LOOP_XYZ(i) { if (position_shift[i] != new_offset[i]) { position_shift[i] = new_offset[i]; diff --git a/Marlin/src/gcode/geometry/G92.cpp b/Marlin/src/gcode/geometry/G92.cpp index 0ecf43e580dc..65ad06fe2c5b 100644 --- a/Marlin/src/gcode/geometry/G92.cpp +++ b/Marlin/src/gcode/geometry/G92.cpp @@ -86,7 +86,7 @@ void GcodeSuite::G92() { #elif HAS_POSITION_SHIFT if (i == E_AXIS) { didE = true; - current_position[E_AXIS] = v; // When using coordinate spaces, only E is set directly + current_position.e = v; // When using coordinate spaces, only E is set directly } else { position_shift[i] += d; // Other axes simply offset the coordinate space @@ -102,7 +102,7 @@ void GcodeSuite::G92() { #if ENABLED(CNC_COORDINATE_SYSTEMS) // Apply workspace offset to the active coordinate system if (WITHIN(active_coordinate_system, 0, MAX_COORDINATE_SYSTEMS - 1)) - COPY(coordinate_system[active_coordinate_system], position_shift); + coordinate_system[active_coordinate_system] = position_shift; #endif if (didXYZ) sync_plan_position(); diff --git a/Marlin/src/gcode/geometry/M206_M428.cpp b/Marlin/src/gcode/geometry/M206_M428.cpp index f2d166e0a899..e17f41f83540 100644 --- a/Marlin/src/gcode/geometry/M206_M428.cpp +++ b/Marlin/src/gcode/geometry/M206_M428.cpp @@ -63,7 +63,7 @@ void GcodeSuite::M206() { void GcodeSuite::M428() { if (axis_unhomed_error()) return; - float diff[XYZ]; + xyz_float_t diff; LOOP_XYZ(i) { diff[i] = base_home_pos((AxisEnum)i) - current_position[i]; if (!WITHIN(diff[i], -20, 20) && home_dir((AxisEnum)i) > 0) diff --git a/Marlin/src/gcode/host/M114.cpp b/Marlin/src/gcode/host/M114.cpp index c10b58f7054f..8b65f2983ac0 100644 --- a/Marlin/src/gcode/host/M114.cpp +++ b/Marlin/src/gcode/host/M114.cpp @@ -36,7 +36,7 @@ #include "../../core/debug_out.h" #endif - void report_xyze(const float pos[], const uint8_t n = 4, const uint8_t precision = 3) { + void report_xyze(const xyze_pos_t &pos, const uint8_t n=4, const uint8_t precision=3) { char str[12]; for (uint8_t a = 0; a < n; a++) { SERIAL_CHAR(' '); @@ -47,22 +47,27 @@ SERIAL_EOL(); } - inline void report_xyz(const float pos[]) { report_xyze(pos, 3); } + void report_xyz(const xyz_pos_t &pos, const uint8_t precision=3) { + char str[12]; + for (uint8_t a = X_AXIS; a <= Z_AXIS; a++) { + SERIAL_CHAR(' '); + SERIAL_CHAR(axis_codes[a]); + SERIAL_CHAR(':'); + SERIAL_ECHO(dtostrf(pos[a], 1, precision, str)); + } + SERIAL_EOL(); + } + inline void report_xyz(const xyze_pos_t &pos) { report_xyze(pos, 3); } void report_current_position_detail() { SERIAL_ECHOPGM("\nLogical:"); - const float logical[XYZ] = { - LOGICAL_X_POSITION(current_position[X_AXIS]), - LOGICAL_Y_POSITION(current_position[Y_AXIS]), - LOGICAL_Z_POSITION(current_position[Z_AXIS]) - }; - report_xyz(logical); + report_xyz(current_position.asLogical()); SERIAL_ECHOPGM("Raw: "); report_xyz(current_position); - float leveled[XYZ] = { current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] }; + xyze_pos_t leveled = current_position; #if HAS_LEVELING SERIAL_ECHOPGM("Leveled:"); @@ -70,7 +75,7 @@ report_xyz(leveled); SERIAL_ECHOPGM("UnLevel:"); - float unleveled[XYZ] = { leveled[X_AXIS], leveled[Y_AXIS], leveled[Z_AXIS] }; + xyze_pos_t unleveled = leveled; planner.unapply_leveling(unleveled); report_xyz(unleveled); #endif @@ -153,7 +158,7 @@ SERIAL_EOL(); #if IS_SCARA - const float deg[XYZ] = { + const xy_float_t deg = { planner.get_axis_position_degrees(A_AXIS), planner.get_axis_position_degrees(B_AXIS) }; @@ -162,17 +167,12 @@ #endif SERIAL_ECHOPGM("FromStp:"); - get_cartesian_from_steppers(); // writes cartes[XYZ] (with forward kinematics) - const float from_steppers[XYZE] = { cartes[X_AXIS], cartes[Y_AXIS], cartes[Z_AXIS], planner.get_axis_position_mm(E_AXIS) }; + get_cartesian_from_steppers(); // writes 'cartes' (with forward kinematics) + xyze_pos_t from_steppers = { cartes.x, cartes.y, cartes.z, planner.get_axis_position_mm(E_AXIS) }; report_xyze(from_steppers); - const float diff[XYZE] = { - from_steppers[X_AXIS] - leveled[X_AXIS], - from_steppers[Y_AXIS] - leveled[Y_AXIS], - from_steppers[Z_AXIS] - leveled[Z_AXIS], - from_steppers[E_AXIS] - current_position[E_AXIS] - }; - SERIAL_ECHOPGM("Differ: "); + const xyze_float_t diff = from_steppers - leveled; + SERIAL_ECHOPGM("Diff: "); report_xyze(diff); } diff --git a/Marlin/src/gcode/motion/G0_G1.cpp b/Marlin/src/gcode/motion/G0_G1.cpp index fed70f553e17..36bc29026ef7 100644 --- a/Marlin/src/gcode/motion/G0_G1.cpp +++ b/Marlin/src/gcode/motion/G0_G1.cpp @@ -35,7 +35,7 @@ #include "../../module/stepper.h" #endif -extern float destination[XYZE]; +extern xyze_pos_t destination; #if ENABLED(VARIABLE_G0_FEEDRATE) feedRate_t fast_move_feedrate = MMM_TO_MMS(G0_FEEDRATE); @@ -87,12 +87,12 @@ void GcodeSuite::G0_G1( if (MIN_AUTORETRACT <= MAX_AUTORETRACT) { // When M209 Autoretract is enabled, convert E-only moves to firmware retract/recover moves if (fwretract.autoretract_enabled && parser.seen('E') && !(parser.seen('X') || parser.seen('Y') || parser.seen('Z'))) { - const float echange = destination[E_AXIS] - current_position[E_AXIS]; + const float echange = destination.e - current_position.e; // Is this a retract or recover move? if (WITHIN(ABS(echange), MIN_AUTORETRACT, MAX_AUTORETRACT) && fwretract.retracted[active_extruder] == (echange > 0.0)) { - current_position[E_AXIS] = destination[E_AXIS]; // Hide a G1-based retract/recover from calculations - sync_plan_position_e(); // AND from the planner - return fwretract.retract(echange < 0.0); // Firmware-based retract/recover (double-retract ignored) + current_position.e = destination.e; // Hide a G1-based retract/recover from calculations + sync_plan_position_e(); // AND from the planner + return fwretract.retract(echange < 0.0); // Firmware-based retract/recover (double-retract ignored) } } } diff --git a/Marlin/src/gcode/motion/G2_G3.cpp b/Marlin/src/gcode/motion/G2_G3.cpp index 2a713a9f4170..e856afff11ee 100644 --- a/Marlin/src/gcode/motion/G2_G3.cpp +++ b/Marlin/src/gcode/motion/G2_G3.cpp @@ -50,9 +50,9 @@ * options for G2/G3 arc generation. In future these options may be GCode tunable. */ void plan_arc( - const float (&cart)[XYZE], // Destination position - const float (&offset)[2], // Center of rotation relative to current_position - const uint8_t clockwise // Clockwise? + const xyze_pos_t &cart, // Destination position + const ab_float_t &offset, // Center of rotation relative to current_position + const uint8_t clockwise // Clockwise? ) { #if ENABLED(CNC_WORKSPACE_PLANES) AxisEnum p_axis, q_axis, l_axis; @@ -67,21 +67,21 @@ void plan_arc( #endif // Radius vector from center to current location - float r_P = -offset[0], r_Q = -offset[1]; + ab_float_t rvec = -offset; - const float radius = HYPOT(r_P, r_Q), + const float radius = HYPOT(rvec.a, rvec.b), #if ENABLED(AUTO_BED_LEVELING_UBL) start_L = current_position[l_axis], #endif - center_P = current_position[p_axis] - r_P, - center_Q = current_position[q_axis] - r_Q, + center_P = current_position[p_axis] - rvec.a, + center_Q = current_position[q_axis] - rvec.b, rt_X = cart[p_axis] - center_P, rt_Y = cart[q_axis] - center_Q, linear_travel = cart[l_axis] - current_position[l_axis], - extruder_travel = cart[E_AXIS] - current_position[E_AXIS]; + extruder_travel = cart.e - current_position.e; // CCW angle of rotation between position and target from the circle center. Only one atan2() trig computation required. - float angular_travel = ATAN2(r_P * rt_Y - r_Q * rt_X, r_P * rt_X + r_Q * rt_Y); + float angular_travel = ATAN2(rvec.a * rt_Y - rvec.b * rt_X, rvec.a * rt_X + rvec.b * rt_Y); if (angular_travel < 0) angular_travel += RADIANS(360); #ifdef MIN_ARC_SEGMENTS uint16_t min_segments = CEIL((MIN_ARC_SEGMENTS) * (angular_travel / RADIANS(360))); @@ -133,7 +133,7 @@ void plan_arc( * This is important when there are successive arc motions. */ // Vector rotation matrix values - float raw[XYZE]; + xyze_pos_t raw; const float theta_per_segment = angular_travel / segments, linear_per_segment = linear_travel / segments, extruder_per_segment = extruder_travel / segments, @@ -144,7 +144,7 @@ void plan_arc( raw[l_axis] = current_position[l_axis]; // Initialize the extruder axis - raw[E_AXIS] = current_position[E_AXIS]; + raw.e = current_position.e; const feedRate_t scaled_fr_mm_s = MMS_SCALED(feedrate_mm_s); @@ -168,10 +168,10 @@ void plan_arc( #if N_ARC_CORRECTION > 1 if (--arc_recalc_count) { - // Apply vector rotation matrix to previous r_P / 1 - const float r_new_Y = r_P * sin_T + r_Q * cos_T; - r_P = r_P * cos_T - r_Q * sin_T; - r_Q = r_new_Y; + // Apply vector rotation matrix to previous rvec.a / 1 + const float r_new_Y = rvec.a * sin_T + rvec.b * cos_T; + rvec.a = rvec.a * cos_T - rvec.b * sin_T; + rvec.b = r_new_Y; } else #endif @@ -185,20 +185,20 @@ void plan_arc( // To reduce stuttering, the sin and cos could be computed at different times. // For now, compute both at the same time. const float cos_Ti = cos(i * theta_per_segment), sin_Ti = sin(i * theta_per_segment); - r_P = -offset[0] * cos_Ti + offset[1] * sin_Ti; - r_Q = -offset[0] * sin_Ti - offset[1] * cos_Ti; + rvec.a = -offset[0] * cos_Ti + offset[1] * sin_Ti; + rvec.b = -offset[0] * sin_Ti - offset[1] * cos_Ti; } // Update raw location - raw[p_axis] = center_P + r_P; - raw[q_axis] = center_Q + r_Q; + raw[p_axis] = center_P + rvec.a; + raw[q_axis] = center_Q + rvec.b; #if ENABLED(AUTO_BED_LEVELING_UBL) raw[l_axis] = start_L; UNUSED(linear_per_segment); #else raw[l_axis] += linear_per_segment; #endif - raw[E_AXIS] += extruder_per_segment; + raw.e += extruder_per_segment; apply_motion_limits(raw); @@ -215,7 +215,7 @@ void plan_arc( } // Ensure last segment arrives at target location. - COPY(raw, cart); + raw = cart; #if ENABLED(AUTO_BED_LEVELING_UBL) raw[l_axis] = start_L; #endif @@ -235,7 +235,7 @@ void plan_arc( #if ENABLED(AUTO_BED_LEVELING_UBL) raw[l_axis] = start_L; #endif - COPY(current_position, raw); + current_position = raw; } // plan_arc /** @@ -278,32 +278,27 @@ void GcodeSuite::G2_G3(const bool clockwise) { relative_mode = relative_mode_backup; #endif - float arc_offset[2] = { 0, 0 }; + ab_float_t arc_offset = { 0, 0 }; if (parser.seenval('R')) { const float r = parser.value_linear_units(); if (r) { - const float p1 = current_position[X_AXIS], q1 = current_position[Y_AXIS], - p2 = destination[X_AXIS], q2 = destination[Y_AXIS]; - if (p2 != p1 || q2 != q1) { - const float e = clockwise ^ (r < 0) ? -1 : 1, // clockwise -1/1, counterclockwise 1/-1 - dx = p2 - p1, dy = q2 - q1, // X and Y differences - d = HYPOT(dx, dy), // Linear distance between the points - dinv = 1/d, // Inverse of d - h = SQRT(sq(r) - sq(d * 0.5f)), // Distance to the arc pivot-point - mx = (p1 + p2) * 0.5f, my = (q1 + q2) * 0.5f,// Point between the two points - sx = -dy * dinv, sy = dx * dinv, // Slope of the perpendicular bisector - cx = mx + e * h * sx, cy = my + e * h * sy; // Pivot-point of the arc - arc_offset[0] = cx - p1; - arc_offset[1] = cy - q1; + const xy_pos_t p1 = current_position, p2 = destination; + if (p1 != p2) { + const xy_pos_t d = p2 - p1, m = (p1 + p2) * 0.5f; // XY distance and midpoint + const float e = clockwise ^ (r < 0) ? -1 : 1, // clockwise -1/1, counterclockwise 1/-1 + len = d.magnitude(), // Total move length + h = SQRT(sq(r) - sq(len * 0.5f)); // Distance to the arc pivot-point + const xy_pos_t s = { d.x, -d.y }; // Inverse Slope of the perpendicular bisector + arc_offset = m + s * RECIPROCAL(len) * e * h - p1; // The calculated offset } } } else { - if (parser.seenval('I')) arc_offset[0] = parser.value_linear_units(); - if (parser.seenval('J')) arc_offset[1] = parser.value_linear_units(); + if (parser.seenval('I')) arc_offset.a = parser.value_linear_units(); + if (parser.seenval('J')) arc_offset.b = parser.value_linear_units(); } - if (arc_offset[0] || arc_offset[1]) { + if (arc_offset) { #if ENABLED(ARC_P_CIRCLES) // P indicates number of circles to do diff --git a/Marlin/src/gcode/motion/G5.cpp b/Marlin/src/gcode/motion/G5.cpp index f392668ced79..7125532e9b9a 100644 --- a/Marlin/src/gcode/motion/G5.cpp +++ b/Marlin/src/gcode/motion/G5.cpp @@ -27,11 +27,6 @@ #include "../../module/motion.h" #include "../../module/planner_bezier.h" -void plan_cubic_move(const float (&cart)[XYZE], const float (&offset)[4]) { - cubic_b_spline(current_position, cart, offset, MMS_SCALED(feedrate_mm_s), active_extruder); - COPY(current_position, cart); -} - /** * Parameters interpreted according to: * http://linuxcnc.org/docs/2.6/html/gcode/parser.html#sec:G5-Cubic-Spline @@ -57,14 +52,13 @@ void GcodeSuite::G5() { get_destination_from_command(); - const float offset[4] = { - parser.linearval('I'), - parser.linearval('J'), - parser.linearval('P'), - parser.linearval('Q') + const xy_pos_t offsets[2] = { + { parser.linearval('I'), parser.linearval('J') }, + { parser.linearval('P'), parser.linearval('Q') } }; - plan_cubic_move(destination, offset); + cubic_b_spline(current_position, destination, offsets, MMS_SCALED(feedrate_mm_s), active_extruder); + current_position = destination; } } diff --git a/Marlin/src/gcode/motion/M290.cpp b/Marlin/src/gcode/motion/M290.cpp index 7763f965cb8f..7bf274a18d54 100644 --- a/Marlin/src/gcode/motion/M290.cpp +++ b/Marlin/src/gcode/motion/M290.cpp @@ -40,21 +40,21 @@ #if ENABLED(BABYSTEP_ZPROBE_OFFSET) - FORCE_INLINE void mod_zprobe_zoffset(const float &offs) { + FORCE_INLINE void mod_probe_offset(const float &offs) { if (true #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) && active_extruder == 0 #endif ) { - probe_offset[Z_AXIS] += offs; + probe_offset.z += offs; SERIAL_ECHO_START(); - SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET MSG_Z ": ", probe_offset[Z_AXIS]); + SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET MSG_Z ": ", probe_offset.z); } else { #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) - hotend_offset[Z_AXIS][active_extruder] -= offs; + hotend_offset[active_extruder].z -= offs; SERIAL_ECHO_START(); - SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET MSG_Z ": ", hotend_offset[Z_AXIS][active_extruder]); + SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET MSG_Z ": ", hotend_offset[active_extruder].z); #endif } } @@ -81,7 +81,7 @@ void GcodeSuite::M290() { const float offs = constrain(parser.value_axis_units((AxisEnum)a), -2, 2); babystep.add_mm((AxisEnum)a, offs); #if ENABLED(BABYSTEP_ZPROBE_OFFSET) - if (a == Z_AXIS && (!parser.seen('P') || parser.value_bool())) mod_zprobe_zoffset(offs); + if (a == Z_AXIS && (!parser.seen('P') || parser.value_bool())) mod_probe_offset(offs); #endif } #else @@ -89,7 +89,7 @@ void GcodeSuite::M290() { const float offs = constrain(parser.value_axis_units(Z_AXIS), -2, 2); babystep.add_mm(Z_AXIS, offs); #if ENABLED(BABYSTEP_ZPROBE_OFFSET) - if (!parser.seen('P') || parser.value_bool()) mod_zprobe_zoffset(offs); + if (!parser.seen('P') || parser.value_bool()) mod_probe_offset(offs); #endif } #endif @@ -98,17 +98,17 @@ void GcodeSuite::M290() { SERIAL_ECHO_START(); #if ENABLED(BABYSTEP_ZPROBE_OFFSET) - SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET " " MSG_Z, probe_offset[Z_AXIS]); + SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET " " MSG_Z, probe_offset.z); #endif #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) { SERIAL_ECHOLNPAIR("Hotend ", int(active_extruder), "Offset" #if ENABLED(BABYSTEP_XY) - " X", hotend_offset[X_AXIS][active_extruder], - " Y", hotend_offset[Y_AXIS][active_extruder], + " X", hotend_offset[active_extruder].x, + " Y", hotend_offset[active_extruder].y, #endif - " Z", hotend_offset[Z_AXIS][active_extruder] + " Z", hotend_offset[active_extruder].z ); } #endif diff --git a/Marlin/src/gcode/probe/G30.cpp b/Marlin/src/gcode/probe/G30.cpp index 50d0ea6ae303..e91e3e9d8ba8 100644 --- a/Marlin/src/gcode/probe/G30.cpp +++ b/Marlin/src/gcode/probe/G30.cpp @@ -39,10 +39,10 @@ * E Engage the probe for each probe (default 1) */ void GcodeSuite::G30() { - const float xpos = parser.linearval('X', current_position[X_AXIS] + probe_offset[X_AXIS]), - ypos = parser.linearval('Y', current_position[Y_AXIS] + probe_offset[Y_AXIS]); + const xy_pos_t pos = { parser.linearval('X', current_position.x + probe_offset.x), + parser.linearval('Y', current_position.y + probe_offset.y) }; - if (!position_is_reachable_by_probe(xpos, ypos)) return; + if (!position_is_reachable_by_probe(pos)) return; // Disable leveling so the planner won't mess with us #if HAS_LEVELING @@ -52,10 +52,9 @@ void GcodeSuite::G30() { remember_feedrate_scaling_off(); const ProbePtRaise raise_after = parser.boolval('E', true) ? PROBE_PT_STOW : PROBE_PT_NONE; - const float measured_z = probe_at_point(xpos, ypos, raise_after, 1); - + const float measured_z = probe_at_point(pos, raise_after, 1); if (!isnan(measured_z)) - SERIAL_ECHOLNPAIR("Bed X: ", FIXFLOAT(xpos), " Y: ", FIXFLOAT(ypos), " Z: ", FIXFLOAT(measured_z)); + SERIAL_ECHOLNPAIR("Bed X: ", FIXFLOAT(pos.x), " Y: ", FIXFLOAT(pos.y), " Z: ", FIXFLOAT(measured_z)); restore_feedrate_and_scaling(); diff --git a/Marlin/src/gcode/probe/G38.cpp b/Marlin/src/gcode/probe/G38.cpp index 33f5611a43ca..cb298bcccb28 100644 --- a/Marlin/src/gcode/probe/G38.cpp +++ b/Marlin/src/gcode/probe/G38.cpp @@ -48,7 +48,7 @@ inline bool G38_run_probe() { #if MULTIPLE_PROBING > 1 // Get direction of move and retract - float retract_mm[XYZ]; + xyz_float_t retract_mm; LOOP_XYZ(i) { const float dist = destination[i] - current_position[i]; retract_mm[i] = ABS(dist) < G38_MINIMUM_MOVE ? 0 : home_bump_mm((AxisEnum)i) * (dist > 0 ? -1 : 1); @@ -75,8 +75,7 @@ inline bool G38_run_probe() { #if MULTIPLE_PROBING > 1 // Move away by the retract distance - set_destination_from_current(); - LOOP_XYZ(i) destination[i] += retract_mm[i]; + destination = current_position + retract_mm; endstops.enable(false); prepare_move_to_destination(); planner.synchronize(); @@ -84,7 +83,7 @@ inline bool G38_run_probe() { REMEMBER(fr, feedrate_mm_s, feedrate_mm_s * 0.25); // Bump the target more slowly - LOOP_XYZ(i) destination[i] -= retract_mm[i] * 2; + destination -= retract_mm * 2; G38_single_probe(move_value); #endif diff --git a/Marlin/src/gcode/probe/M851.cpp b/Marlin/src/gcode/probe/M851.cpp index eec6b2f2553f..19f96eecd29f 100644 --- a/Marlin/src/gcode/probe/M851.cpp +++ b/Marlin/src/gcode/probe/M851.cpp @@ -35,18 +35,18 @@ void GcodeSuite::M851() { // Show usage with no parameters if (!parser.seen("XYZ")) { - SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET " X", probe_offset[X_AXIS], " Y", probe_offset[Y_AXIS], " Z", probe_offset[Z_AXIS]); + SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET " X", probe_offset.x, " Y", probe_offset.y, " Z", probe_offset.z); return; } - float offs[XYZ] = { probe_offset[X_AXIS], probe_offset[Y_AXIS], probe_offset[Z_AXIS] }; + xyz_pos_t offs = probe_offset; bool ok = true; if (parser.seenval('X')) { const float x = parser.value_float(); if (WITHIN(x, -(X_BED_SIZE), X_BED_SIZE)) - offs[X_AXIS] = x; + offs.x = x; else { SERIAL_ECHOLNPAIR("?X out of range (-", int(X_BED_SIZE), " to ", int(X_BED_SIZE), ")"); ok = false; @@ -56,7 +56,7 @@ void GcodeSuite::M851() { if (parser.seenval('Y')) { const float y = parser.value_float(); if (WITHIN(y, -(Y_BED_SIZE), Y_BED_SIZE)) - offs[Y_AXIS] = y; + offs.y = y; else { SERIAL_ECHOLNPAIR("?Y out of range (-", int(Y_BED_SIZE), " to ", int(Y_BED_SIZE), ")"); ok = false; @@ -66,7 +66,7 @@ void GcodeSuite::M851() { if (parser.seenval('Z')) { const float z = parser.value_float(); if (WITHIN(z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) - offs[Z_AXIS] = z; + offs.z = z; else { SERIAL_ECHOLNPAIR("?Z out of range (", int(Z_PROBE_OFFSET_RANGE_MIN), " to ", int(Z_PROBE_OFFSET_RANGE_MAX), ")"); ok = false; @@ -74,7 +74,7 @@ void GcodeSuite::M851() { } // Save the new offsets - if (ok) COPY(probe_offset, offs); + if (ok) probe_offset = offs; } #endif // HAS_BED_PROBE diff --git a/Marlin/src/gcode/scara/M360-M364.cpp b/Marlin/src/gcode/scara/M360-M364.cpp index 585c4d8c8670..0e6f51b6280e 100644 --- a/Marlin/src/gcode/scara/M360-M364.cpp +++ b/Marlin/src/gcode/scara/M360-M364.cpp @@ -32,7 +32,7 @@ inline bool SCARA_move_to_cal(const uint8_t delta_a, const uint8_t delta_b) { if (IsRunning()) { forward_kinematics_SCARA(delta_a, delta_b); - do_blocking_move_to_xy(cartes[X_AXIS], cartes[Y_AXIS]); + do_blocking_move_to_xy(cartes); return true; } return false; diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index d5aae1e0f8b7..8b7e393bd90f 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -1472,7 +1472,7 @@ #define _PROBE_RADIUS (DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE)) #ifndef DELTA_CALIBRATION_RADIUS #ifdef NOZZLE_TO_PROBE_OFFSET - #define DELTA_CALIBRATION_RADIUS (DELTA_PRINTABLE_RADIUS - _MAX(ABS(nozzle_to_probe_offset[X_AXIS]), ABS(nozzle_to_probe_offset[Y_AXIS]), ABS(MIN_PROBE_EDGE))) + #define DELTA_CALIBRATION_RADIUS (DELTA_PRINTABLE_RADIUS - _MAX(ABS(nozzle_to_probe_offset.x), ABS(nozzle_to_probe_offset.y), ABS(MIN_PROBE_EDGE))) #else #define DELTA_CALIBRATION_RADIUS _PROBE_RADIUS #endif @@ -1506,6 +1506,7 @@ #define PROBE_Y_MIN (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MIN_PROBE_EDGE_FRONT) #define PROBE_X_MAX (X_CENTER + SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE_RIGHT)) #define PROBE_Y_MAX (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE_BACK)) + #endif #if ENABLED(SEGMENT_LEVELED_MOVES) && !defined(LEVELED_SEGMENT_LENGTH) @@ -1532,10 +1533,10 @@ #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)) #else - #define _MESH_MIN_X (_MAX(X_MIN_BED + MESH_INSET, X_MIN_POS + nozzle_to_probe_offset[X_AXIS])) - #define _MESH_MIN_Y (_MAX(Y_MIN_BED + MESH_INSET, Y_MIN_POS + nozzle_to_probe_offset[Y_AXIS])) - #define _MESH_MAX_X (_MIN(X_MAX_BED - (MESH_INSET), X_MAX_POS + nozzle_to_probe_offset[X_AXIS])) - #define _MESH_MAX_Y (_MIN(Y_MAX_BED - (MESH_INSET), Y_MAX_POS + nozzle_to_probe_offset[Y_AXIS])) + #define _MESH_MIN_X (_MAX(X_MIN_BED + MESH_INSET, X_MIN_POS + nozzle_to_probe_offset.x)) + #define _MESH_MIN_Y (_MAX(Y_MIN_BED + MESH_INSET, Y_MIN_POS + nozzle_to_probe_offset.y)) + #define _MESH_MAX_X (_MIN(X_MAX_BED - (MESH_INSET), X_MAX_POS + nozzle_to_probe_offset.x)) + #define _MESH_MAX_Y (_MIN(Y_MAX_BED - (MESH_INSET), Y_MAX_POS + nozzle_to_probe_offset.y)) #endif #endif diff --git a/Marlin/src/inc/MarlinConfig.h b/Marlin/src/inc/MarlinConfig.h index bb974e64d956..fc26862853bc 100644 --- a/Marlin/src/inc/MarlinConfig.h +++ b/Marlin/src/inc/MarlinConfig.h @@ -39,7 +39,7 @@ #include HAL_PATH(../HAL, inc/SanityCheck.h) // Include all core headers -#include "../core/enum.h" +#include "../core/types.h" #include "../core/language.h" #include "../core/utility.h" #include "../core/serial.h" diff --git a/Marlin/src/inc/MarlinConfigPre.h b/Marlin/src/inc/MarlinConfigPre.h index 96ee5d347c0b..e34b70376e1f 100644 --- a/Marlin/src/inc/MarlinConfigPre.h +++ b/Marlin/src/inc/MarlinConfigPre.h @@ -34,7 +34,6 @@ #include "../core/boards.h" #include "../core/macros.h" -#include "../core/millis_t.h" #include "Version.h" #include "../../Configuration.h" diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index bf76e5fe8d81..5b0c630216ad 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -402,6 +402,8 @@ #error "[XYZ]_PROBE_OFFSET_FROM_EXTRUDER is now NOZZLE_TO_PROBE_OFFSET. Please update your configuration." #elif defined(MIN_PROBE_X) || defined(MIN_PROBE_Y) || defined(MAX_PROBE_X) || defined(MAX_PROBE_Y) #error "(MIN|MAX)_PROBE_[XY] are now calculated at runtime. Please remove them from Configuration.h." +#elif defined(Z_STEPPER_ALIGN_X) || defined(Z_STEPPER_ALIGN_X) + #error "Z_STEPPER_ALIGN_X and Z_STEPPER_ALIGN_Y are now combined as Z_STEPPER_ALIGN_XY. Please update your Configuration_adv.h." #endif #define BOARD_MKS_13 -1000 @@ -2305,11 +2307,6 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2) #elif !HAS_BED_PROBE #error "Z_STEPPER_AUTO_ALIGN requires a Z-bed probe." #endif - constexpr float sanity_arr_z_align_x[] = Z_STEPPER_ALIGN_X, sanity_arr_z_align_y[] = Z_STEPPER_ALIGN_Y; - static_assert( - COUNT(sanity_arr_z_align_x) == Z_STEPPER_COUNT && COUNT(sanity_arr_z_align_y) == Z_STEPPER_COUNT, - "Z_STEPPER_ALIGN_[XY] settings require one element per Z stepper." - ); #endif #if ENABLED(PRINTCOUNTER) && DISABLED(EEPROM_SETTINGS) diff --git a/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp b/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp index 146563750437..819a5c5bc670 100644 --- a/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp +++ b/Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp @@ -817,11 +817,10 @@ void MarlinUI::draw_status_screen() { #else - _draw_axis_value(X_AXIS, ftostr4sign(LOGICAL_X_POSITION(current_position[X_AXIS])), blink); - + xy_pos_t lpos = current_position; toLogical(lpos); + _draw_axis_value(X_AXIS, ftostr4sign(lpos.x), blink); lcd_put_wchar(' '); - - _draw_axis_value(Y_AXIS, ftostr4sign(LOGICAL_Y_POSITION(current_position[Y_AXIS])), blink); + _draw_axis_value(Y_AXIS, ftostr4sign(lpos.y), blink); #endif @@ -830,7 +829,7 @@ void MarlinUI::draw_status_screen() { #endif // LCD_WIDTH >= 20 lcd_moveto(LCD_WIDTH - 8, 1); - _draw_axis_value(Z_AXIS, ftostr52sp(LOGICAL_Z_POSITION(current_position[Z_AXIS])), blink); + _draw_axis_value(Z_AXIS, ftostr52sp(LOGICAL_Z_POSITION(current_position.z)), blink); #if HAS_LEVELING && !HAS_HEATED_BED lcd_put_wchar(planner.leveling_active || blink ? '_' : ' '); @@ -902,7 +901,7 @@ void MarlinUI::draw_status_screen() { // Z Coordinate // lcd_moveto(LCD_WIDTH - 9, 0); - _draw_axis_value(Z_AXIS, ftostr52sp(LOGICAL_Z_POSITION(current_position[Z_AXIS])), blink); + _draw_axis_value(Z_AXIS, ftostr52sp(LOGICAL_Z_POSITION(current_position.z)), blink); #if HAS_LEVELING && (HOTENDS > 1 || !HAS_HEATED_BED) lcd_put_wchar(LCD_WIDTH - 1, 0, planner.leveling_active || blink ? '_' : ' '); @@ -1189,10 +1188,9 @@ void MarlinUI::draw_status_screen() { * Show X and Y positions */ _XLABEL(_PLOT_X, 0); - lcd_put_u8str(ftostr52(LOGICAL_X_POSITION(pgm_read_float(&ubl._mesh_index_to_xpos[x_plot])))); - + lcd_put_u8str(ftostr52(LOGICAL_X_POSITION(ubl.mesh_index_to_xpos(x_plot)))); _YLABEL(_LCD_W_POS, 0); - lcd_put_u8str(ftostr52(LOGICAL_Y_POSITION(pgm_read_float(&ubl._mesh_index_to_ypos[y_plot])))); + lcd_put_u8str(ftostr52(LOGICAL_Y_POSITION(ubl.mesh_index_to_ypos(y_plot)))); lcd_moveto(_PLOT_X, 0); @@ -1395,9 +1393,9 @@ void MarlinUI::draw_status_screen() { * Show all values at right of screen */ _XLABEL(_LCD_W_POS, 1); - lcd_put_u8str(ftostr52(LOGICAL_X_POSITION(pgm_read_float(&ubl._mesh_index_to_xpos[x_plot])))); + lcd_put_u8str(ftostr52(LOGICAL_X_POSITION(ubl.mesh_index_to_xpos(x_plot)))); _YLABEL(_LCD_W_POS, 2); - lcd_put_u8str(ftostr52(LOGICAL_Y_POSITION(pgm_read_float(&ubl._mesh_index_to_ypos[y_plot])))); + lcd_put_u8str(ftostr52(LOGICAL_Y_POSITION(ubl.mesh_index_to_ypos(y_plot)))); /** * Show the location value diff --git a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp index e9023515cf2e..34d01400868a 100644 --- a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp +++ b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp @@ -345,9 +345,10 @@ void MarlinUI::draw_status_screen() { #endif heat_bits = new_bits; #endif - strcpy(xstring, ftostr4sign(LOGICAL_X_POSITION(current_position[X_AXIS]))); - strcpy(ystring, ftostr4sign(LOGICAL_Y_POSITION(current_position[Y_AXIS]))); - strcpy(zstring, ftostr52sp( LOGICAL_Z_POSITION(current_position[Z_AXIS]))); + const xyz_pos_t lpos = current_position.asLogical(); + strcpy(xstring, ftostr4sign(lpos.x)); + strcpy(ystring, ftostr4sign(lpos.y)); + strcpy(zstring, ftostr52sp( lpos.z)); #if ENABLED(FILAMENT_LCD_DISPLAY) strcpy(wstring, ftostr12ns(filwidth.measured_mm)); strcpy(mstring, i16tostr3(planner.volumetric_percent(parser.volumetric_enabled))); diff --git a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp index 660cf07673d0..5e73ba8bf332 100644 --- a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp +++ b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp @@ -660,7 +660,7 @@ void ST7920_Lite_Status_Screen::draw_status_message() { #endif } -void ST7920_Lite_Status_Screen::draw_position(const float (&pos)[XYZE], const bool position_known) { +void ST7920_Lite_Status_Screen::draw_position(const xyz_pos_t &pos, const bool position_known) { char str[7]; set_ddram_address(DDRAM_LINE_4); begin_data(); @@ -669,13 +669,13 @@ void ST7920_Lite_Status_Screen::draw_position(const float (&pos)[XYZE], const bo const unsigned char alt_label = position_known ? 0 : (ui.get_blink() ? ' ' : 0); write_byte(alt_label ? alt_label : 'X'); - write_str(dtostrf(pos[X_AXIS], -4, 0, str), 4); + write_str(dtostrf(pos.x, -4, 0, str), 4); write_byte(alt_label ? alt_label : 'Y'); - write_str(dtostrf(pos[Y_AXIS], -4, 0, str), 4); + write_str(dtostrf(pos.y, -4, 0, str), 4); write_byte(alt_label ? alt_label : 'Z'); - write_str(dtostrf(pos[Z_AXIS], -5, 1, str), 5); + write_str(dtostrf(pos.z, -5, 1, str), 5); } bool ST7920_Lite_Status_Screen::indicators_changed() { @@ -750,8 +750,8 @@ void ST7920_Lite_Status_Screen::update_indicators(const bool forceUpdate) { } bool ST7920_Lite_Status_Screen::position_changed() { - const float x_pos = current_position[X_AXIS], y_pos = current_position[Y_AXIS], z_pos = current_position[Z_AXIS]; - const uint8_t checksum = uint8_t(x_pos) ^ uint8_t(y_pos) ^ uint8_t(z_pos); + const xyz_pos_t pos = current_position; + const uint8_t checksum = uint8_t(pos.x) ^ uint8_t(pos.y) ^ uint8_t(pos.z); static uint8_t last_checksum = 0, changed = last_checksum != checksum; if (changed) last_checksum = checksum; return changed; diff --git a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h index 18a5ed77f2ed..754c9933e7ce 100644 --- a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h +++ b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h @@ -17,6 +17,7 @@ #include "../../HAL/shared/HAL_ST7920.h" +#include "../../core/types.h" #include "../../core/macros.h" #include "../../libs/duration_t.h" @@ -86,7 +87,7 @@ class ST7920_Lite_Status_Screen { static void draw_print_time(const duration_t &elapsed); static void draw_feedrate_percentage(const uint16_t percentage); static void draw_status_message(); - static void draw_position(const float (&pos)[XYZE], bool position_known = true); + static void draw_position(const xyz_pos_t &pos, bool position_known = true); static bool indicators_changed(); static bool position_changed(); diff --git a/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp b/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp index 7eb51eea4d61..7f9376fbc1db 100644 --- a/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp +++ b/Marlin/src/lcd/dogm/ultralcd_DOGM.cpp @@ -547,10 +547,12 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop // Show X and Y positions at top of screen u8g.setColorIndex(1); if (PAGE_UNDER(7)) { + const xy_pos_t pos = { ubl.mesh_index_to_xpos(x_plot), ubl.mesh_index_to_ypos(y_plot) }, + lpos = pos.asLogical(); lcd_put_u8str(5, 7, "X:"); - lcd_put_u8str(ftostr52(LOGICAL_X_POSITION(pgm_read_float(&ubl._mesh_index_to_xpos[x_plot])))); + lcd_put_u8str(ftostr52(lpos.x)); lcd_put_u8str(74, 7, "Y:"); - lcd_put_u8str(ftostr52(LOGICAL_Y_POSITION(pgm_read_float(&ubl._mesh_index_to_ypos[y_plot])))); + lcd_put_u8str(ftostr52(lpos.y)); } // Print plot position diff --git a/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.cpp b/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.cpp index 1ac5270c4b9e..bc1296f2f57b 100644 --- a/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinition.cpp @@ -169,7 +169,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { VPHELPER(VP_T_E1_Is, &thermalManager.temp_hotend[0].celsius, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<0>), VPHELPER(VP_T_E1_Set, &thermalManager.temp_hotend[0].target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), VPHELPER(VP_Flowrate_E1, nullptr, DGUSScreenVariableHandler::HandleFlowRateChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), - VPHELPER(VP_EPos, &destination[3], nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), + VPHELPER(VP_EPos, &destination.e, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), VPHELPER(VP_MOVE_E1, nullptr, &DGUSScreenVariableHandler::HandleManualExtrude, nullptr), #endif #if HOTENDS >= 2 @@ -195,9 +195,9 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { VPHELPER(VP_Feedrate_Percentage, &feedrate_percentage, DGUSScreenVariableHandler::DGUSLCD_SetValueDirectly, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay ), // Position Data. - VPHELPER(VP_XPos, ¤t_position[0], nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), - VPHELPER(VP_YPos, ¤t_position[1], nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), - VPHELPER(VP_ZPos, ¤t_position[2], nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), + VPHELPER(VP_XPos, ¤t_position.x, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), + VPHELPER(VP_YPos, ¤t_position.y, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), + VPHELPER(VP_ZPos, ¤t_position.z, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), // Print Progress. VPHELPER(VP_PrintProgress_Percentage, &ui.progress_bar_percent, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay ), diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp index 17d9eefbcae9..1efce50a1678 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp @@ -258,22 +258,22 @@ bool StatusScreen::onTouchStart(uint8_t) { bool StatusScreen::onTouchEnd(uint8_t tag) { switch (tag) { - case 1: - case 2: - case 3: - case 4: + case 1: + case 2: + case 3: + case 4: case 12: if (!jog_xy) { jog_xy = true; injectCommands_P(PSTR("M17")); } - jog(0, 0, 0); + jog({ 0, 0, 0 }); break; - case 5: - case 6: - jog(0, 0, 0); + case 5: + case 6: + jog({ 0, 0, 0 }); break; - case 9: GOTO_SCREEN(FilesScreen); break; + case 9: GOTO_SCREEN(FilesScreen); break; case 10: GOTO_SCREEN(MainMenu); break; case 13: SpinnerDialogBox::enqueueAndWait_P(F("G112")); break; case 14: SpinnerDialogBox::enqueueAndWait_P(F("G28 Z")); break; @@ -291,14 +291,13 @@ bool StatusScreen::onTouchHeld(uint8_t tag) { if (tag >= 1 && tag <= 4 && !jog_xy) return false; const float s = min_speed + (fine_motion ? 0 : (max_speed - min_speed) * sq(increment)); switch (tag) { - case 1: jog(-s, 0, 0); break; - case 2: jog( s, 0, 0); break; - case 4: jog( 0, -s, 0); break; // NOTE: Y directions inverted because bed rather than needle moves - case 3: jog( 0, s, 0); break; - case 5: jog( 0, 0, -s); break; - case 6: jog( 0, 0, s); break; - case 7: - case 8: + case 1: jog({-s, 0, 0}); break; + case 2: jog({ s, 0, 0}); break; + case 4: jog({ 0, -s, 0}); break; // NOTE: Y directions inverted because bed rather than needle moves + case 3: jog({ 0, s, 0}); break; + case 5: jog({ 0, 0, -s}); break; + case 6: jog({ 0, 0, s}); break; + case 7: case 8: { if (ExtUI::isMoving()) return false; const feedRate_t feedrate = emin_speed + (fine_motion ? 0 : (emax_speed - emin_speed) * sq(increment)); diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/change_filament_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/change_filament_screen.cpp index de63824f0c56..9692572942e9 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/change_filament_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/change_filament_screen.cpp @@ -305,8 +305,8 @@ bool ChangeFilamentScreen::onTouchEnd(uint8_t tag) { bool ChangeFilamentScreen::onTouchHeld(uint8_t tag) { if (ExtUI::isMoving()) return false; // Don't allow moves to accumulate constexpr float increment = 1; - #define UI_INCREMENT_AXIS(axis) MoveAxisScreen::setManualFeedrate(axis, increment); UI_INCREMENT(AxisPosition_mm, axis); - #define UI_DECREMENT_AXIS(axis) MoveAxisScreen::setManualFeedrate(axis, increment); UI_DECREMENT(AxisPosition_mm, axis); + #define UI_INCREMENT_AXIS(axis) UI_INCREMENT(AxisPosition_mm, axis); + #define UI_DECREMENT_AXIS(axis) UI_DECREMENT(AxisPosition_mm, axis); switch (tag) { case 5: case 7: UI_DECREMENT_AXIS(getExtruder()); break; case 6: case 8: UI_INCREMENT_AXIS(getExtruder()); break; diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp index 86032e8562c6..6206043230ee 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/move_axis_screen.cpp @@ -110,8 +110,8 @@ float MoveAxisScreen::getManualFeedrate(uint8_t axis, float increment_mm) { // Compute feedrate so that the tool lags the adjuster when it is // being held down, this allows enough margin for the planner to // connect segments and even out the motion. - constexpr float manual_feedrate[XYZE] = MANUAL_FEEDRATE; - return min(manual_feedrate[axis] / 60.0f, abs(increment_mm * (TOUCH_REPEATS_PER_SECOND) * 0.80f)); + constexpr xyze_feedrate_t max_manual_feedrate = MANUAL_FEEDRATE; + return min(max_manual_feedrate[axis] / 60.0f, abs(increment_mm * (TOUCH_REPEATS_PER_SECOND) * 0.80f)); } void MoveAxisScreen::setManualFeedrate(ExtUI::axis_t axis, float increment_mm) { diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nudge_nozzle_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nudge_nozzle_screen.cpp index 74e7c450407e..069fea34316d 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nudge_nozzle_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/nudge_nozzle_screen.cpp @@ -36,9 +36,8 @@ void NudgeNozzleScreen::onEntry() { #if EXTRUDERS > 1 screen_data.NudgeNozzleScreen.link_nozzles = true; #endif - LOOP_XYZ(i) { - screen_data.NudgeNozzleScreen.rel[i] = 0; - } + screen_data.NudgeNozzleScreen.rel.reset(); + BaseNumericAdjustmentScreen::onEntry(); } @@ -48,10 +47,10 @@ void NudgeNozzleScreen::onRedraw(draw_mode_t what) { w.heading( GET_TEXTF(NUDGE_NOZZLE)); #if ENABLED(BABYSTEP_XY) - w.color(x_axis).adjuster(2, GET_TEXTF(AXIS_X), screen_data.NudgeNozzleScreen.rel[0] / getAxisSteps_per_mm(X)); - w.color(y_axis).adjuster(4, GET_TEXTF(AXIS_Y), screen_data.NudgeNozzleScreen.rel[1] / getAxisSteps_per_mm(Y)); + w.color(x_axis).adjuster(2, GET_TEXTF(AXIS_X), screen_data.NudgeNozzleScreen.rel.x / getAxisSteps_per_mm(X)); + w.color(y_axis).adjuster(4, GET_TEXTF(AXIS_Y), screen_data.NudgeNozzleScreen.rel.y / getAxisSteps_per_mm(Y)); #endif - w.color(z_axis).adjuster(6, GET_TEXTF(AXIS_Z), screen_data.NudgeNozzleScreen.rel[2] / getAxisSteps_per_mm(Z)); + w.color(z_axis).adjuster(6, GET_TEXTF(AXIS_Z), screen_data.NudgeNozzleScreen.rel.z / getAxisSteps_per_mm(Z)); w.increments(); #if EXTRUDERS > 1 w.toggle (8, GET_TEXTF(ADJUST_BOTH_NOZZLES), screen_data.NudgeNozzleScreen.link_nozzles); @@ -90,12 +89,12 @@ bool NudgeNozzleScreen::onTouchHeld(uint8_t tag) { #endif int16_t steps; switch (tag) { - case 2: steps = mmToWholeSteps(inc, X); smartAdjustAxis_steps(-steps, X, link); screen_data.NudgeNozzleScreen.rel[0] -= steps; break; - case 3: steps = mmToWholeSteps(inc, X); smartAdjustAxis_steps( steps, X, link); screen_data.NudgeNozzleScreen.rel[0] += steps; break; - case 4: steps = mmToWholeSteps(inc, Y); smartAdjustAxis_steps(-steps, Y, link); screen_data.NudgeNozzleScreen.rel[1] -= steps; break; - case 5: steps = mmToWholeSteps(inc, Y); smartAdjustAxis_steps( steps, Y, link); screen_data.NudgeNozzleScreen.rel[1] += steps; break; - case 6: steps = mmToWholeSteps(inc, Z); smartAdjustAxis_steps(-steps, Z, link); screen_data.NudgeNozzleScreen.rel[2] -= steps; break; - case 7: steps = mmToWholeSteps(inc, Z); smartAdjustAxis_steps( steps, Z, link); screen_data.NudgeNozzleScreen.rel[2] += steps; break; + case 2: steps = mmToWholeSteps(inc, X); smartAdjustAxis_steps(-steps, X, link); screen_data.NudgeNozzleScreen.rel.x -= steps; break; + case 3: steps = mmToWholeSteps(inc, X); smartAdjustAxis_steps( steps, X, link); screen_data.NudgeNozzleScreen.rel.x += steps; break; + case 4: steps = mmToWholeSteps(inc, Y); smartAdjustAxis_steps(-steps, Y, link); screen_data.NudgeNozzleScreen.rel.y -= steps; break; + case 5: steps = mmToWholeSteps(inc, Y); smartAdjustAxis_steps( steps, Y, link); screen_data.NudgeNozzleScreen.rel.y += steps; break; + case 6: steps = mmToWholeSteps(inc, Z); smartAdjustAxis_steps(-steps, Z, link); screen_data.NudgeNozzleScreen.rel.z -= steps; break; + case 7: steps = mmToWholeSteps(inc, Z); smartAdjustAxis_steps( steps, Z, link); screen_data.NudgeNozzleScreen.rel.z += steps; break; #if EXTRUDERS > 1 case 8: screen_data.NudgeNozzleScreen.link_nozzles = !link; break; #endif diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screen_data.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screen_data.h index 65cb6e85d7fb..adaccc8e5ae2 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screen_data.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screen_data.h @@ -65,7 +65,7 @@ union screen_data_t { #if ENABLED(BABYSTEPPING) struct { struct base_numeric_adjustment_t placeholder; - int16_t rel[XYZ]; + xyz_int_t rel; #if EXTRUDERS > 1 bool link_nozzles; #endif diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp index fc6c47e2670a..2cbb0e082241 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.cpp +++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp @@ -204,33 +204,29 @@ namespace ExtUI { * The axis will continue to jog until this function is * called with all zeros. */ - void jog(float dx, float dy, float dz) { + void jog(const xyz_float_t &dir) { // The "destination" variable is used as a scratchpad in // Marlin by GCODE routines, but should remain untouched // during manual jogging, allowing us to reuse the space // for our direction vector. - destination[X] = dx; - destination[Y] = dy; - destination[Z] = dz; - flags.jogging = !NEAR_ZERO(dx) || !NEAR_ZERO(dy) || !NEAR_ZERO(dz); + destination = dir; + flags.jogging = !NEAR_ZERO(dir.x) || !NEAR_ZERO(dir.y) || !NEAR_ZERO(dir.z); } // Called by the polling routine in "joystick.cpp" - void _joystick_update(float (&norm_jog)[XYZ]) { + void _joystick_update(xyz_float_t &norm_jog) { if (flags.jogging) { #define OUT_OF_RANGE(VALUE) (VALUE < -1.0f || VALUE > 1.0f) - if (OUT_OF_RANGE(destination[X_AXIS]) || OUT_OF_RANGE(destination[Y_AXIS]) || OUT_OF_RANGE(destination[Z_AXIS])) { - // If destination[] on any axis is out of range, it + if (OUT_OF_RANGE(destination.x) || OUT_OF_RANGE(destination.y) || OUT_OF_RANGE(destination.z)) { + // If destination on any axis is out of range, it // probably means the UI forgot to stop jogging and - // ran GCODE that wrote a position to destination[]. + // ran GCODE that wrote a position to destination. // To prevent a disaster, stop jogging. flags.jogging = false; return; } - norm_jog[X_AXIS] = destination[X_AXIS]; - norm_jog[Y_AXIS] = destination[Y_AXIS]; - norm_jog[Z_AXIS] = destination[Z_AXIS]; + norm_jog = destination; } } #endif @@ -328,18 +324,16 @@ namespace ExtUI { float getAxisPosition_mm(const extruder_t extruder) { const extruder_t old_tool = getActiveTool(); setActiveTool(extruder, true); - const float pos = ( + const float epos = ( #if ENABLED(JOYSTICK) - flags.jogging ? destination[E_AXIS] : + flags.jogging ? destination.e : #endif - current_position[E_AXIS] + current_position.e ); setActiveTool(old_tool, true); - return pos; + return epos; } - constexpr feedRate_t manual_feedrate_mm_m[XYZE] = MANUAL_FEEDRATE; - void setAxisPosition_mm(const float position, const axis_t axis) { // Start with no limits to movement float min = current_position[axis] - 1000, @@ -350,26 +344,26 @@ namespace ExtUI { if (soft_endstops_enabled) switch (axis) { case X_AXIS: #if ENABLED(MIN_SOFTWARE_ENDSTOP_X) - min = soft_endstop[X_AXIS].min; + min = soft_endstop.min.x; #endif #if ENABLED(MAX_SOFTWARE_ENDSTOP_X) - max = soft_endstop[X_AXIS].max; + max = soft_endstop.max.x; #endif break; case Y_AXIS: #if ENABLED(MIN_SOFTWARE_ENDSTOP_Y) - min = soft_endstop[Y_AXIS].min; + min = soft_endstop.min.y; #endif #if ENABLED(MAX_SOFTWARE_ENDSTOP_Y) - max = soft_endstop[Y_AXIS].max; + max = soft_endstop.max.y; #endif break; case Z_AXIS: #if ENABLED(MIN_SOFTWARE_ENDSTOP_Z) - min = soft_endstop[Z_AXIS].min; + min = soft_endstop.min.z; #endif #if ENABLED(MAX_SOFTWARE_ENDSTOP_Z) - max = soft_endstop[Z_AXIS].max; + max = soft_endstop.max.z; #endif default: break; } @@ -391,8 +385,8 @@ namespace ExtUI { void setAxisPosition_mm(const float position, const extruder_t extruder) { setActiveTool(extruder, true); - current_position[E_AXIS] = position; - line_to_current_position(MMM_TO_MMS(manual_feedrate_mm_m[E_AXIS])); + current_position.e = position; + line_to_current_position(MMM_TO_MMS(manual_feedrate_mm_m.e)); } void setActiveTool(const extruder_t extruder, bool no_move) { @@ -652,7 +646,7 @@ namespace ExtUI { } float getAxisMaxJerk_mm_s(const extruder_t) { - return planner.max_jerk[E_AXIS]; + return planner.max_jerk.e; } void setAxisMaxJerk_mm_s(const float value, const axis_t axis) { @@ -660,7 +654,7 @@ namespace ExtUI { } void setAxisMaxJerk_mm_s(const float value, const extruder_t) { - planner.max_jerk[E_AXIS] = value; + planner.max_jerk.e = value; } #endif @@ -710,7 +704,7 @@ namespace ExtUI { #if EXTRUDERS > 1 && (linked_nozzles || active_extruder == 0) #endif - ) probe_offset[Z_AXIS] += mm; + ) probe_offset.z += mm; #else UNUSED(mm); #endif @@ -724,7 +718,7 @@ namespace ExtUI { if (!linked_nozzles) { HOTEND_LOOP() if (e != active_extruder) - hotend_offset[axis][e] += mm; + hotend_offset[e][axis] += mm; normalizeNozzleOffset(X); normalizeNozzleOffset(Y); @@ -748,7 +742,7 @@ namespace ExtUI { float getZOffset_mm() { #if HAS_BED_PROBE - return probe_offset[Z_AXIS]; + return probe_offset.z; #elif ENABLED(BABYSTEP_DISPLAY_TOTAL) return babystep.axis_total[BS_TOTAL_AXIS(Z_AXIS) + 1]; #else @@ -759,7 +753,7 @@ namespace ExtUI { void setZOffset_mm(const float value) { #if HAS_BED_PROBE if (WITHIN(value, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) - probe_offset[Z_AXIS] = value; + probe_offset.z = value; #elif ENABLED(BABYSTEP_DISPLAY_TOTAL) babystep.add_mm(Z_AXIS, (value - babystep.axis_total[BS_TOTAL_AXIS(Z_AXIS) + 1])); #else @@ -771,12 +765,12 @@ namespace ExtUI { float getNozzleOffset_mm(const axis_t axis, const extruder_t extruder) { if (extruder - E0 >= HOTENDS) return 0; - return hotend_offset[axis][extruder - E0]; + return hotend_offset[extruder - E0][axis]; } void setNozzleOffset_mm(const float value, const axis_t axis, const extruder_t extruder) { if (extruder - E0 >= HOTENDS) return; - hotend_offset[axis][extruder - E0] = value; + hotend_offset[extruder - E0][axis] = value; } /** @@ -785,8 +779,8 @@ namespace ExtUI { * user to edit the offset the first nozzle). */ void normalizeNozzleOffset(const axis_t axis) { - const float offs = hotend_offset[axis][0]; - HOTEND_LOOP() hotend_offset[axis][e] -= offs; + const float offs = hotend_offset[0][axis]; + HOTEND_LOOP() hotend_offset[e][axis] -= offs; } #endif // HAS_HOTEND_OFFSET @@ -820,10 +814,10 @@ namespace ExtUI { bool getMeshValid() { return leveling_is_valid(); } #if HAS_MESH bed_mesh_t& getMeshArray() { return Z_VALUES_ARR; } - float getMeshPoint(const uint8_t xpos, const uint8_t ypos) { return Z_VALUES(xpos,ypos); } - void setMeshPoint(const uint8_t xpos, const uint8_t ypos, const float zoff) { - if (WITHIN(xpos, 0, GRID_MAX_POINTS_X) && WITHIN(ypos, 0, GRID_MAX_POINTS_Y)) { - Z_VALUES(xpos, ypos) = zoff; + float getMeshPoint(const xy_uint8_t &pos) { return Z_VALUES(pos.x, pos.y); } + void setMeshPoint(const xy_uint8_t &pos, const float zoff) { + if (WITHIN(pos.x, 0, GRID_MAX_POINTS_X) && WITHIN(pos.y, 0, GRID_MAX_POINTS_Y)) { + Z_VALUES(pos.x, pos.y) = zoff; #if ENABLED(ABL_BILINEAR_SUBDIVISION) bed_level_virt_interpolate(); #endif diff --git a/Marlin/src/lcd/extensible_ui/ui_api.h b/Marlin/src/lcd/extensible_ui/ui_api.h index 38cd19b579e4..1ae2ebd4c113 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.h +++ b/Marlin/src/lcd/extensible_ui/ui_api.h @@ -81,8 +81,8 @@ namespace ExtUI { void enableHeater(const extruder_t); #if ENABLED(JOYSTICK) - void jog(float dx, float dy, float dz); - void _joystick_update(float (&norm_jog)[XYZ]); + void jog(const xyz_float_t &dir); + void _joystick_update(xyz_float_t &norm_jog); #endif /** @@ -135,9 +135,10 @@ namespace ExtUI { bool getMeshValid(); #if HAS_MESH bed_mesh_t& getMeshArray(); - float getMeshPoint(const uint8_t xpos, const uint8_t ypos); - void setMeshPoint(const uint8_t xpos, const uint8_t ypos, const float zval); + float getMeshPoint(const xy_uint8_t &pos); + void setMeshPoint(const xy_uint8_t &pos, const float zval); void onMeshUpdate(const uint8_t xpos, const uint8_t ypos, const float zval); + inline void onMeshUpdate(const xy_uint8_t &pos, const float zval) { setMeshPoint(pos, zval); } #endif #endif diff --git a/Marlin/src/lcd/menu/menu.cpp b/Marlin/src/lcd/menu/menu.cpp index 012b3b58474a..ca5dd29a2456 100644 --- a/Marlin/src/lcd/menu/menu.cpp +++ b/Marlin/src/lcd/menu/menu.cpp @@ -379,8 +379,8 @@ void scroll_screen(const uint8_t limit, const bool is_menu) { #if HAS_LINE_TO_Z void line_to_z(const float &z) { - current_position[Z_AXIS] = z; - planner.buffer_line(current_position, MMM_TO_MMS(manual_feedrate_mm_m[Z_AXIS]), active_extruder); + current_position.z = z; + line_to_current_position(MMM_TO_MMS(manual_feedrate_mm_m.z)); } #endif @@ -402,10 +402,10 @@ void scroll_screen(const uint8_t limit, const bool is_menu) { ui.encoderPosition = 0; const float diff = planner.steps_to_mm[Z_AXIS] * babystep_increment, - new_probe_offset = probe_offset[Z_AXIS] + diff, + new_probe_offset = probe_offset.z + diff, new_offs = #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) - do_probe ? new_probe_offset : hotend_offset[Z_AXIS][active_extruder] - diff + do_probe ? new_probe_offset : hotend_offset[active_extruder].z - diff #else new_probe_offset #endif @@ -414,9 +414,9 @@ void scroll_screen(const uint8_t limit, const bool is_menu) { babystep.add_steps(Z_AXIS, babystep_increment); - if (do_probe) probe_offset[Z_AXIS] = new_offs; + if (do_probe) probe_offset.z = new_offs; #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) - else hotend_offset[Z_AXIS][active_extruder] = new_offs; + else hotend_offset[active_extruder].z = new_offs; #endif ui.refresh(LCDVIEW_CALL_REDRAW_NEXT); @@ -425,13 +425,13 @@ void scroll_screen(const uint8_t limit, const bool is_menu) { if (ui.should_draw()) { #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET) if (!do_probe) - draw_edit_screen(PSTR(MSG_Z_OFFSET), ftostr43sign(hotend_offset[Z_AXIS][active_extruder])); + draw_edit_screen(PSTR(MSG_Z_OFFSET), ftostr43sign(hotend_offset[active_extruder].z)); else #endif - draw_edit_screen(PSTR(MSG_ZPROBE_ZOFFSET), ftostr43sign(probe_offset[Z_AXIS])); + draw_edit_screen(PSTR(MSG_ZPROBE_ZOFFSET), ftostr43sign(probe_offset.z)); #if ENABLED(BABYSTEP_ZPROBE_GFX_OVERLAY) - if (do_probe) _lcd_zoffset_overlay_gfx(probe_offset[Z_AXIS]); + if (do_probe) _lcd_zoffset_overlay_gfx(probe_offset.z); #endif } } diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp index 9e2746920293..1d5f728c19ff 100644 --- a/Marlin/src/lcd/menu/menu_advanced.cpp +++ b/Marlin/src/lcd/menu/menu_advanced.cpp @@ -55,7 +55,7 @@ void menu_backlash(); #include "../../feature/dac/stepper_dac.h" - uint8_t driverPercent[XYZE]; + xyze_uint8_t driverPercent; inline void dac_driver_getValues() { LOOP_XYZE(i) driverPercent[i] = dac_current_get_percent((AxisEnum)i); } static void dac_driver_commit() { dac_current_set_percents(driverPercent); } @@ -552,7 +552,7 @@ void menu_backlash(); #if ENABLED(DELTA) EDIT_JERK(C); #else - MENU_MULTIPLIER_ITEM_EDIT(float52sign, MSG_VC_JERK, &planner.max_jerk[C_AXIS], 0.1f, 990); + MENU_MULTIPLIER_ITEM_EDIT(float52sign, MSG_VC_JERK, &planner.max_jerk.c, 0.1f, 990); #endif #if !BOTH(JUNCTION_DEVIATION, LIN_ADVANCE) EDIT_JERK(E); diff --git a/Marlin/src/lcd/menu/menu_bed_corners.cpp b/Marlin/src/lcd/menu/menu_bed_corners.cpp index 07629b71796f..13441e6f3d36 100644 --- a/Marlin/src/lcd/menu/menu_bed_corners.cpp +++ b/Marlin/src/lcd/menu/menu_bed_corners.cpp @@ -58,26 +58,24 @@ static inline void _lcd_goto_next_corner() { line_to_z(LEVEL_CORNERS_Z_HOP); switch (bed_corner) { case 0: - current_position[X_AXIS] = X_MIN_BED + LEVEL_CORNERS_INSET; - current_position[Y_AXIS] = Y_MIN_BED + LEVEL_CORNERS_INSET; + current_position.set(X_MIN_BED + LEVEL_CORNERS_INSET, Y_MIN_BED + LEVEL_CORNERS_INSET); break; case 1: - current_position[X_AXIS] = X_MAX_BED - (LEVEL_CORNERS_INSET); + current_position.x = X_MAX_BED - (LEVEL_CORNERS_INSET); break; case 2: - current_position[Y_AXIS] = Y_MAX_BED - (LEVEL_CORNERS_INSET); + current_position.y = Y_MAX_BED - (LEVEL_CORNERS_INSET); break; case 3: - current_position[X_AXIS] = X_MIN_BED + LEVEL_CORNERS_INSET; + current_position.x = X_MIN_BED + LEVEL_CORNERS_INSET; break; #if ENABLED(LEVEL_CENTER_TOO) case 4: - current_position[X_AXIS] = X_CENTER; - current_position[Y_AXIS] = Y_CENTER; + current_position.set(X_CENTER, Y_CENTER); break; #endif } - planner.buffer_line(current_position, MMM_TO_MMS(manual_feedrate_mm_m[X_AXIS]), active_extruder); + line_to_current_position(MMM_TO_MMS(manual_feedrate_mm_m.x)); line_to_z(LEVEL_CORNERS_HEIGHT); if (++bed_corner > 3 #if ENABLED(LEVEL_CENTER_TOO) diff --git a/Marlin/src/lcd/menu/menu_bed_leveling.cpp b/Marlin/src/lcd/menu/menu_bed_leveling.cpp index bb4eaa845690..3155a3418cd3 100644 --- a/Marlin/src/lcd/menu/menu_bed_leveling.cpp +++ b/Marlin/src/lcd/menu/menu_bed_leveling.cpp @@ -121,7 +121,7 @@ // Encoder knob or keypad buttons adjust the Z position // if (ui.encoderPosition) { - const float z = current_position[Z_AXIS] + float(int16_t(ui.encoderPosition)) * (MESH_EDIT_Z_STEP); + const float z = current_position.z + float(int16_t(ui.encoderPosition)) * (MESH_EDIT_Z_STEP); line_to_z(constrain(z, -(LCD_PROBE_Z_RANGE) * 0.5f, (LCD_PROBE_Z_RANGE) * 0.5f)); ui.refresh(LCDVIEW_CALL_REDRAW_NEXT); ui.encoderPosition = 0; @@ -131,7 +131,7 @@ // Draw on first display, then only on Z change // if (ui.should_draw()) { - const float v = current_position[Z_AXIS]; + const float v = current_position.z; draw_edit_screen(PSTR(MSG_MOVE_Z), ftostr43sign(v + (v < 0 ? -0.0001f : 0.0001f), '+')); } } @@ -279,7 +279,7 @@ void menu_bed_leveling() { #if ENABLED(BABYSTEP_ZPROBE_OFFSET) MENU_ITEM(submenu, MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset); #elif HAS_BED_PROBE - MENU_ITEM_EDIT(float52, MSG_ZPROBE_ZOFFSET, &probe_offset[Z_AXIS], Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX); + MENU_ITEM_EDIT(float52, MSG_ZPROBE_ZOFFSET, &probe_offset.z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX); #endif #if ENABLED(LEVEL_BED_CORNERS) diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index 8708c7d96fbb..596ab682dca7 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -145,12 +145,12 @@ static void lcd_factory_settings() { START_MENU(); MENU_BACK(MSG_CONFIGURATION); #if ENABLED(DUAL_X_CARRIAGE) - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float51, MSG_X_OFFSET, &hotend_offset[X_AXIS][1], float(X2_HOME_POS - 25), float(X2_HOME_POS + 25), _recalc_offsets); + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float51, MSG_X_OFFSET, &hotend_offset[1].x, float(X2_HOME_POS - 25), float(X2_HOME_POS + 25), _recalc_offsets); #else - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52sign, MSG_X_OFFSET, &hotend_offset[X_AXIS][1], -99.0, 99.0, _recalc_offsets); + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52sign, MSG_X_OFFSET, &hotend_offset[1].x, -99.0, 99.0, _recalc_offsets); #endif - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52sign, MSG_Y_OFFSET, &hotend_offset[Y_AXIS][1], -99.0, 99.0, _recalc_offsets); - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52sign, MSG_Z_OFFSET, &hotend_offset[Z_AXIS][1], Z_PROBE_LOW_POINT, 10.0, _recalc_offsets); + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52sign, MSG_Y_OFFSET, &hotend_offset[1].y, -99.0, 99.0, _recalc_offsets); + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52sign, MSG_Z_OFFSET, &hotend_offset[1].z, Z_PROBE_LOW_POINT, 10.0, _recalc_offsets); #if ENABLED(EEPROM_SETTINGS) MENU_ITEM(function, MSG_STORE_EEPROM, lcd_store_settings); #endif @@ -347,7 +347,7 @@ void menu_configuration() { #if ENABLED(BABYSTEP_ZPROBE_OFFSET) MENU_ITEM(submenu, MSG_ZPROBE_ZOFFSET, lcd_babystep_zoffset); #elif HAS_BED_PROBE - MENU_ITEM_EDIT(float52, MSG_ZPROBE_ZOFFSET, &probe_offset[Z_AXIS], Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX); + MENU_ITEM_EDIT(float52, MSG_ZPROBE_ZOFFSET, &probe_offset.z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX); #endif const bool busy = printer_busy(); diff --git a/Marlin/src/lcd/menu/menu_delta_calibrate.cpp b/Marlin/src/lcd/menu/menu_delta_calibrate.cpp index b8232ba38880..b42c9a9a76be 100644 --- a/Marlin/src/lcd/menu/menu_delta_calibrate.cpp +++ b/Marlin/src/lcd/menu/menu_delta_calibrate.cpp @@ -40,8 +40,8 @@ #include "../../lcd/extensible_ui/ui_api.h" #endif -void _man_probe_pt(const float &rx, const float &ry) { - do_blocking_move_to(rx, ry, Z_CLEARANCE_BETWEEN_PROBES); +void _man_probe_pt(const xy_pos_t &xy) { + do_blocking_move_to(xy, Z_CLEARANCE_BETWEEN_PROBES); ui.synchronize(); move_menu_scale = _MAX(PROBE_MANUALLY_STEP, MIN_STEPS_PER_SEGMENT / float(DEFAULT_XYZ_STEPS_PER_UNIT)); ui.goto_screen(lcd_move_z); @@ -51,8 +51,8 @@ void _man_probe_pt(const float &rx, const float &ry) { #include "../../gcode/gcode.h" - float lcd_probe_pt(const float &rx, const float &ry) { - _man_probe_pt(rx, ry); + float lcd_probe_pt(const xy_pos_t &xy) { + _man_probe_pt(xy); KEEPALIVE_STATE(PAUSED_FOR_USER); ui.defer_status_screen(); wait_for_user = true; @@ -64,7 +64,7 @@ void _man_probe_pt(const float &rx, const float &ry) { #endif while (wait_for_user) idle(); ui.goto_previous_screen_no_defer(); - return current_position[Z_AXIS]; + return current_position.z; } #endif @@ -83,10 +83,14 @@ void _man_probe_pt(const float &rx, const float &ry) { ui.goto_screen(_lcd_calibrate_homing); } - void _goto_tower_x() { _man_probe_pt(cos(RADIANS(210)) * delta_calibration_radius, sin(RADIANS(210)) * delta_calibration_radius); } - void _goto_tower_y() { _man_probe_pt(cos(RADIANS(330)) * delta_calibration_radius, sin(RADIANS(330)) * delta_calibration_radius); } - void _goto_tower_z() { _man_probe_pt(cos(RADIANS( 90)) * delta_calibration_radius, sin(RADIANS( 90)) * delta_calibration_radius); } - void _goto_center() { _man_probe_pt(0,0); } + void _goto_tower_a(const float &a) { + xy_pos_t tower_vec = { cos(RADIANS(a)), sin(RADIANS(a)) }; + _man_probe_pt(tower_vec * delta_calibration_radius); + } + void _goto_tower_x() { _goto_tower_a(210); } + void _goto_tower_y() { _goto_tower_a(330); } + void _goto_tower_z() { _goto_tower_a( 90); } + void _goto_center() { xy_pos_t ctr{0}; _man_probe_pt(ctr); } #endif @@ -101,15 +105,15 @@ void lcd_delta_settings() { START_MENU(); MENU_BACK(MSG_DELTA_CALIBRATE); MENU_ITEM_EDIT_CALLBACK(float52sign, MSG_DELTA_HEIGHT, &delta_height, delta_height - 10, delta_height + 10, _recalc_delta_settings); - #define EDIT_ENDSTOP_ADJ(LABEL,N) MENU_ITEM_EDIT_CALLBACK(float43, LABEL, &delta_endstop_adj[_AXIS(N)], -5, 5, _recalc_delta_settings) - EDIT_ENDSTOP_ADJ("Ex",A); - EDIT_ENDSTOP_ADJ("Ey",B); - EDIT_ENDSTOP_ADJ("Ez",C); + #define EDIT_ENDSTOP_ADJ(LABEL,N) MENU_ITEM_EDIT_CALLBACK(float43, LABEL, &delta_endstop_adj.N, -5, 5, _recalc_delta_settings) + EDIT_ENDSTOP_ADJ("Ex",a); + EDIT_ENDSTOP_ADJ("Ey",b); + EDIT_ENDSTOP_ADJ("Ez",c); MENU_ITEM_EDIT_CALLBACK(float52sign, MSG_DELTA_RADIUS, &delta_radius, delta_radius - 5, delta_radius + 5, _recalc_delta_settings); - #define EDIT_ANGLE_TRIM(LABEL,N) MENU_ITEM_EDIT_CALLBACK(float43, LABEL, &delta_tower_angle_trim[_AXIS(N)], -5, 5, _recalc_delta_settings) - EDIT_ANGLE_TRIM("Tx",A); - EDIT_ANGLE_TRIM("Ty",B); - EDIT_ANGLE_TRIM("Tz",C); + #define EDIT_ANGLE_TRIM(LABEL,N) MENU_ITEM_EDIT_CALLBACK(float43, LABEL, &delta_tower_angle_trim.N, -5, 5, _recalc_delta_settings) + EDIT_ANGLE_TRIM("Tx",a); + EDIT_ANGLE_TRIM("Ty",b); + EDIT_ANGLE_TRIM("Tz",c); MENU_ITEM_EDIT_CALLBACK(float52sign, MSG_DELTA_DIAG_ROD, &delta_diagonal_rod, delta_diagonal_rod - 5, delta_diagonal_rod + 5, _recalc_delta_settings); END_MENU(); } diff --git a/Marlin/src/lcd/menu/menu_motion.cpp b/Marlin/src/lcd/menu/menu_motion.cpp index 2a75c2693de6..da8c33225ccf 100644 --- a/Marlin/src/lcd/menu/menu_motion.cpp +++ b/Marlin/src/lcd/menu/menu_motion.cpp @@ -92,26 +92,26 @@ static void _lcd_move_xyz(PGM_P name, AxisEnum axis) { if (soft_endstops_enabled) switch (axis) { case X_AXIS: #if ENABLED(MIN_SOFTWARE_ENDSTOP_X) - min = soft_endstop[X_AXIS].min; + min = soft_endstop.min.x; #endif #if ENABLED(MAX_SOFTWARE_ENDSTOP_X) - max = soft_endstop[X_AXIS].max; + max = soft_endstop.max.x; #endif break; case Y_AXIS: #if ENABLED(MIN_SOFTWARE_ENDSTOP_Y) - min = soft_endstop[Y_AXIS].min; + min = soft_endstop.min.y; #endif #if ENABLED(MAX_SOFTWARE_ENDSTOP_Y) - max = soft_endstop[Y_AXIS].max; + max = soft_endstop.max.y; #endif break; case Z_AXIS: #if ENABLED(MIN_SOFTWARE_ENDSTOP_Z) - min = soft_endstop[Z_AXIS].min; + min = soft_endstop.min.z; #endif #if ENABLED(MAX_SOFTWARE_ENDSTOP_Z) - max = soft_endstop[Z_AXIS].max; + max = soft_endstop.max.z; #endif default: break; } @@ -173,7 +173,7 @@ void lcd_move_z() { _lcd_move_xyz(PSTR(MSG_MOVE_Z), Z_AXIS); } #if IS_KINEMATIC manual_move_offset += diff; #else - current_position[E_AXIS] += diff; + current_position.e += diff; #endif manual_move_to_current(E_AXIS #if E_MANUAL > 1 @@ -207,7 +207,7 @@ void lcd_move_z() { _lcd_move_xyz(PSTR(MSG_MOVE_Z), Z_AXIS); } } #endif // E_MANUAL > 1 - draw_edit_screen(pos_label, ftostr41sign(current_position[E_AXIS] + draw_edit_screen(pos_label, ftostr41sign(current_position.e #if IS_KINEMATIC + manual_move_offset #endif @@ -267,7 +267,7 @@ void _menu_move_distance(const AxisEnum axis, const screenFunc_t func, const int case Z_AXIS: STATIC_ITEM(MSG_MOVE_Z, SS_CENTER|SS_INVERT); break; default: #if ENABLED(MANUAL_E_MOVES_RELATIVE) - manual_move_e_origin = current_position[E_AXIS]; + manual_move_e_origin = current_position.e; #endif STATIC_ITEM(MSG_MOVE_E, SS_CENTER|SS_INVERT); break; @@ -345,7 +345,7 @@ void menu_move() { ) { if ( #if ENABLED(DELTA) - current_position[Z_AXIS] <= delta_clip_start_height + current_position.z <= delta_clip_start_height #else true #endif diff --git a/Marlin/src/lcd/menu/menu_ubl.cpp b/Marlin/src/lcd/menu/menu_ubl.cpp index 2364a818aeb1..4065d530943d 100644 --- a/Marlin/src/lcd/menu/menu_ubl.cpp +++ b/Marlin/src/lcd/menu/menu_ubl.cpp @@ -432,18 +432,16 @@ void _lcd_ubl_map_lcd_edit_cmd() { void ubl_map_move_to_xy() { const feedRate_t fr_mm_s = MMM_TO_MMS(XY_PROBE_SPEED); - set_destination_from_current(); // sync destination at the start + destination = current_position; // sync destination at the start #if ENABLED(DELTA) - if (current_position[Z_AXIS] > delta_clip_start_height) { - destination[Z_AXIS] = delta_clip_start_height; + if (current_position.z > delta_clip_start_height) { + destination.z = delta_clip_start_height; prepare_internal_move_to_destination(fr_mm_s); } #endif - destination[X_AXIS] = pgm_read_float(&ubl._mesh_index_to_xpos[x_plot]); - destination[Y_AXIS] = pgm_read_float(&ubl._mesh_index_to_ypos[y_plot]); - + destination.set(ubl.mesh_index_to_xpos(x_plot), ubl.mesh_index_to_ypos(y_plot)); prepare_internal_move_to_destination(fr_mm_s); } @@ -491,9 +489,8 @@ void _lcd_ubl_output_map_lcd() { if (y_plot < 0) y_plot = GRID_MAX_POINTS_Y - 1; #if IS_KINEMATIC - const float x = pgm_read_float(&ubl._mesh_index_to_xpos[x_plot]), - y = pgm_read_float(&ubl._mesh_index_to_ypos[y_plot]); - if (position_is_reachable(x, y)) break; // Found a valid point + const xy_pos_t xy = { ubl.mesh_index_to_xpos(x_plot), ubl.mesh_index_to_ypos(y_plot) }; + if (position_is_reachable(xy)) break; // Found a valid point x_plot += (step_scaler < 0) ? -1 : 1; #endif diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp index 389a58f2dc40..63d1629f8e76 100644 --- a/Marlin/src/lcd/ultralcd.cpp +++ b/Marlin/src/lcd/ultralcd.cpp @@ -671,7 +671,7 @@ void MarlinUI::quick_feedback(const bool clear_buttons/*=true*/) { #endif // Set movement on a single axis - set_destination_from_current(); + destination = current_position; destination[manual_move_axis] += manual_move_offset; // Reset for the next move diff --git a/Marlin/src/lcd/ultralcd.h b/Marlin/src/lcd/ultralcd.h index f3dcb3a381ca..32c51cd24957 100644 --- a/Marlin/src/lcd/ultralcd.h +++ b/Marlin/src/lcd/ultralcd.h @@ -90,7 +90,6 @@ typedef void (*menuAction_t)(); // Manual Movement - constexpr feedRate_t manual_feedrate_mm_m[XYZE] = MANUAL_FEEDRATE; extern float move_menu_scale; #if ENABLED(ADVANCED_PAUSE_FEATURE) diff --git a/Marlin/src/libs/L6470/L6470_Marlin.cpp b/Marlin/src/libs/L6470/L6470_Marlin.cpp index d8b0fb833d23..549ba3c364ed 100644 --- a/Marlin/src/libs/L6470/L6470_Marlin.cpp +++ b/Marlin/src/libs/L6470/L6470_Marlin.cpp @@ -339,19 +339,19 @@ bool L6470_Marlin::get_user_input(uint8_t &driver_count, uint8_t axis_index[3], // Position calcs & checks // - const float center[] = { - LOGICAL_X_POSITION(current_position[X_AXIS]), - LOGICAL_Y_POSITION(current_position[Y_AXIS]), - LOGICAL_Z_POSITION(current_position[Z_AXIS]), - current_position[E_AXIS] + const xyze_pos_t center = { + LOGICAL_X_POSITION(current_position.x), + LOGICAL_Y_POSITION(current_position.y), + LOGICAL_Z_POSITION(current_position.z), + current_position.e }; switch (axis_mon[0][0]) { default: position_max = position_min = 0; break; case 'X': { - position_min = center[X_AXIS] - displacement; - position_max = center[X_AXIS] + displacement; + position_min = center.x - displacement; + position_max = center.x + displacement; echo_min_max('X', position_min, position_max); if (false #ifdef X_MIN_POS @@ -367,8 +367,8 @@ bool L6470_Marlin::get_user_input(uint8_t &driver_count, uint8_t axis_index[3], } break; case 'Y': { - position_min = center[Y_AXIS] - displacement; - position_max = center[Y_AXIS] + displacement; + position_min = center.y - displacement; + position_max = center.y + displacement; echo_min_max('Y', position_min, position_max); if (false #ifdef Y_MIN_POS @@ -384,8 +384,8 @@ bool L6470_Marlin::get_user_input(uint8_t &driver_count, uint8_t axis_index[3], } break; case 'Z': { - position_min = center[Z_AXIS] - displacement; - position_max = center[Z_AXIS] + displacement; + position_min = center.z - displacement; + position_max = center.z + displacement; echo_min_max('Z', position_min, position_max); if (false #ifdef Z_MIN_POS @@ -401,8 +401,8 @@ bool L6470_Marlin::get_user_input(uint8_t &driver_count, uint8_t axis_index[3], } break; case 'E': { - position_min = center[E_AXIS] - displacement; - position_max = center[E_AXIS] + displacement; + position_min = center.e - displacement; + position_max = center.e + displacement; echo_min_max('E', position_min, position_max); } break; } diff --git a/Marlin/src/libs/least_squares_fit.h b/Marlin/src/libs/least_squares_fit.h index bfef8b14ad17..acb29402c5a0 100644 --- a/Marlin/src/libs/least_squares_fit.h +++ b/Marlin/src/libs/least_squares_fit.h @@ -65,6 +65,9 @@ inline void incremental_WLSF(struct linear_fit_data *lsf, const float &x, const lsf->max_absx = _MAX(ABS(wx), lsf->max_absx); lsf->max_absy = _MAX(ABS(wy), lsf->max_absy); } +inline void incremental_WLSF(struct linear_fit_data *lsf, const xy_pos_t &pos, const float &z, const float &w) { + incremental_WLSF(lsf, pos.x, pos.y, z, w); +} inline void incremental_LSF(struct linear_fit_data *lsf, const float &x, const float &y, const float &z) { lsf->xbar += x; @@ -80,5 +83,8 @@ inline void incremental_LSF(struct linear_fit_data *lsf, const float &x, const f lsf->max_absy = _MAX(ABS(y), lsf->max_absy); lsf->N += 1.0; } +inline void incremental_LSF(struct linear_fit_data *lsf, const xy_pos_t &pos, const float &z) { + incremental_LSF(lsf, pos.x, pos.y, z); +} int finish_incremental_LSF(struct linear_fit_data *); diff --git a/Marlin/src/libs/nozzle.cpp b/Marlin/src/libs/nozzle.cpp index 829d46e1da99..b95a7c8afc58 100644 --- a/Marlin/src/libs/nozzle.cpp +++ b/Marlin/src/libs/nozzle.cpp @@ -30,7 +30,6 @@ Nozzle nozzle; #include "../Marlin.h" #include "../module/motion.h" -#include "point_t.h" #if ENABLED(NOZZLE_CLEAN_FEATURE) @@ -38,30 +37,30 @@ Nozzle nozzle; * @brief Stroke clean pattern * @details Wipes the nozzle back and forth in a linear movement * - * @param start point_t defining the starting point - * @param end point_t defining the ending point + * @param start xyz_pos_t defining the starting point + * @param end xyz_pos_t defining the ending point * @param strokes number of strokes to execute */ - void Nozzle::stroke(const point_t &start, const point_t &end, const uint8_t &strokes) { + void Nozzle::stroke(const xyz_pos_t &start, const xyz_pos_t &end, const uint8_t &strokes) { #if ENABLED(NOZZLE_CLEAN_GOBACK) - const float ix = current_position[X_AXIS], iy = current_position[Y_AXIS], iz = current_position[Z_AXIS]; + const xyz_pos_t oldpos = current_position; #endif // Move to the starting point #if ENABLED(NOZZLE_CLEAN_NO_Z) - do_blocking_move_to_xy(start.x, start.y); + do_blocking_move_to_xy(start); #else - do_blocking_move_to(start.x, start.y, start.z); + do_blocking_move_to(start); #endif // Start the stroke pattern for (uint8_t i = 0; i < (strokes >> 1); i++) { - do_blocking_move_to_xy(end.x, end.y); - do_blocking_move_to_xy(start.x, start.y); + do_blocking_move_to_xy(end); + do_blocking_move_to_xy(start); } #if ENABLED(NOZZLE_CLEAN_GOBACK) - do_blocking_move_to(ix, iy, iz); + do_blocking_move_to(oldpos); #endif } @@ -69,29 +68,29 @@ Nozzle nozzle; * @brief Zig-zag clean pattern * @details Apply a zig-zag cleaning pattern * - * @param start point_t defining the starting point - * @param end point_t defining the ending point + * @param start xyz_pos_t defining the starting point + * @param end xyz_pos_t defining the ending point * @param strokes number of strokes to execute * @param objects number of triangles to do */ - void Nozzle::zigzag(const point_t &start, const point_t &end, const uint8_t &strokes, const uint8_t &objects) { - const float diffx = end.x - start.x, diffy = end.y - start.y; - if (!diffx || !diffy) return; + void Nozzle::zigzag(const xyz_pos_t &start, const xyz_pos_t &end, const uint8_t &strokes, const uint8_t &objects) { + const xy_pos_t diff = end - start; + if (!diff.x || !diff.y) return; #if ENABLED(NOZZLE_CLEAN_GOBACK) - const float ix = current_position[X_AXIS], iy = current_position[Y_AXIS], iz = current_position[Z_AXIS]; + const xyz_pos_t back = current_position; #endif #if ENABLED(NOZZLE_CLEAN_NO_Z) - do_blocking_move_to_xy(start.x, start.y); + do_blocking_move_to_xy(start); #else - do_blocking_move_to(start.x, start.y, start.z); + do_blocking_move_to(start); #endif const uint8_t zigs = objects << 1; - const bool horiz = ABS(diffx) >= ABS(diffy); // Do a horizontal wipe? - const float P = (horiz ? diffx : diffy) / zigs; // Period of each zig / zag - const point_t *side; + const bool horiz = ABS(diff.x) >= ABS(diff.y); // Do a horizontal wipe? + const float P = (horiz ? diff.x : diff.y) / zigs; // Period of each zig / zag + const xyz_pos_t *side; for (uint8_t j = 0; j < strokes; j++) { for (int8_t i = 0; i < zigs; i++) { side = (i & 1) ? &end : &start; @@ -110,7 +109,7 @@ Nozzle nozzle; } #if ENABLED(NOZZLE_CLEAN_GOBACK) - do_blocking_move_to(ix, iy, iz); + do_blocking_move_to(back); #endif } @@ -118,21 +117,21 @@ Nozzle nozzle; * @brief Circular clean pattern * @details Apply a circular cleaning pattern * - * @param start point_t defining the middle of circle + * @param start xyz_pos_t defining the middle of circle * @param strokes number of strokes to execute * @param radius radius of circle */ - void Nozzle::circle(const point_t &start, const point_t &middle, const uint8_t &strokes, const float &radius) { + void Nozzle::circle(const xyz_pos_t &start, const xyz_pos_t &middle, const uint8_t &strokes, const float &radius) { if (strokes == 0) return; #if ENABLED(NOZZLE_CLEAN_GOBACK) - const float ix = current_position[X_AXIS], iy = current_position[Y_AXIS], iz = current_position[Z_AXIS]; + const xyz_pos_t back = current_position; #endif #if ENABLED(NOZZLE_CLEAN_NO_Z) - do_blocking_move_to_xy(start.x, start.y); + do_blocking_move_to_xy(start); #else - do_blocking_move_to(start.x, start.y, start.z); + do_blocking_move_to(start); #endif for (uint8_t s = 0; s < strokes; s++) @@ -143,10 +142,10 @@ Nozzle nozzle; ); // Let's be safe - do_blocking_move_to_xy(start.x, start.y); + do_blocking_move_to_xy(start); #if ENABLED(NOZZLE_CLEAN_GOBACK) - do_blocking_move_to(ix, iy, iz); + do_blocking_move_to(back); #endif } @@ -158,21 +157,21 @@ Nozzle nozzle; * @param argument depends on the cleaning pattern */ void Nozzle::clean(const uint8_t &pattern, const uint8_t &strokes, const float &radius, const uint8_t &objects, const uint8_t cleans) { - point_t start = NOZZLE_CLEAN_START_POINT; - point_t end = NOZZLE_CLEAN_END_POINT; + xyz_pos_t start = NOZZLE_CLEAN_START_POINT, end = NOZZLE_CLEAN_END_POINT; if (pattern == 2) { if (!(cleans & (_BV(X_AXIS) | _BV(Y_AXIS)))) { SERIAL_ECHOLNPGM("Warning : Clean Circle requires XY"); return; } - end = NOZZLE_CLEAN_CIRCLE_MIDDLE; + constexpr xyz_pos_t middle NOZZLE_CLEAN_CIRCLE_MIDDLE; + end = middle; } else { - if (!TEST(cleans, X_AXIS)) start.x = end.x = current_position[X_AXIS]; - if (!TEST(cleans, Y_AXIS)) start.y = end.y = current_position[Y_AXIS]; + if (!TEST(cleans, X_AXIS)) start.x = end.x = current_position.x; + if (!TEST(cleans, Y_AXIS)) start.y = end.y = current_position.y; } - if (!TEST(cleans, Z_AXIS)) start.z = end.z = current_position[Z_AXIS]; + if (!TEST(cleans, Z_AXIS)) start.z = end.z = current_position.z; switch (pattern) { case 1: zigzag(start, end, strokes, objects); break; @@ -185,7 +184,7 @@ Nozzle nozzle; #if ENABLED(NOZZLE_PARK_FEATURE) - void Nozzle::park(const uint8_t z_action, const point_t &park/*=NOZZLE_PARK_POINT*/) { + void Nozzle::park(const uint8_t z_action, const xyz_pos_t &park/*=NOZZLE_PARK_POINT*/) { constexpr feedRate_t fr_xy = NOZZLE_PARK_XY_FEEDRATE, fr_z = NOZZLE_PARK_Z_FEEDRATE; switch (z_action) { @@ -194,14 +193,14 @@ Nozzle nozzle; break; case 2: // Raise by Z-park height - do_blocking_move_to_z(_MIN(current_position[Z_AXIS] + park.z, Z_MAX_POS), fr_z); + do_blocking_move_to_z(_MIN(current_position.z + park.z, Z_MAX_POS), fr_z); break; default: // Raise to at least the Z-park height - do_blocking_move_to_z(_MAX(park.z, current_position[Z_AXIS]), fr_z); + do_blocking_move_to_z(_MAX(park.z, current_position.z), fr_z); } - do_blocking_move_to_xy(park.x, park.y, fr_xy); + do_blocking_move_to_xy(park, fr_xy); report_current_position(); } diff --git a/Marlin/src/libs/nozzle.h b/Marlin/src/libs/nozzle.h index d20b41de9357..280f8b1a388a 100644 --- a/Marlin/src/libs/nozzle.h +++ b/Marlin/src/libs/nozzle.h @@ -22,7 +22,6 @@ #pragma once #include "../inc/MarlinConfig.h" -#include "point_t.h" /** * @brief Nozzle class @@ -38,32 +37,32 @@ class Nozzle { * @brief Stroke clean pattern * @details Wipes the nozzle back and forth in a linear movement * - * @param start point_t defining the starting point - * @param end point_t defining the ending point + * @param start xyz_pos_t defining the starting point + * @param end xyz_pos_t defining the ending point * @param strokes number of strokes to execute */ - static void stroke(const point_t &start, const point_t &end, const uint8_t &strokes) _Os; + static void stroke(const xyz_pos_t &start, const xyz_pos_t &end, const uint8_t &strokes) _Os; /** * @brief Zig-zag clean pattern * @details Apply a zig-zag cleaning pattern * - * @param start point_t defining the starting point - * @param end point_t defining the ending point + * @param start xyz_pos_t defining the starting point + * @param end xyz_pos_t defining the ending point * @param strokes number of strokes to execute * @param objects number of objects to create */ - static void zigzag(const point_t &start, const point_t &end, const uint8_t &strokes, const uint8_t &objects) _Os; + static void zigzag(const xyz_pos_t &start, const xyz_pos_t &end, const uint8_t &strokes, const uint8_t &objects) _Os; /** * @brief Circular clean pattern * @details Apply a circular cleaning pattern * - * @param start point_t defining the middle of circle + * @param start xyz_pos_t defining the middle of circle * @param strokes number of strokes to execute * @param radius radius of circle */ - static void circle(const point_t &start, const point_t &middle, const uint8_t &strokes, const float &radius) _Os; + static void circle(const xyz_pos_t &start, const xyz_pos_t &middle, const uint8_t &strokes, const float &radius) _Os; #endif // NOZZLE_CLEAN_FEATURE @@ -84,7 +83,7 @@ class Nozzle { #if ENABLED(NOZZLE_PARK_FEATURE) - static void park(const uint8_t z_action, const point_t &park=NOZZLE_PARK_POINT) _Os; + static void park(const uint8_t z_action, const xyz_pos_t &park=NOZZLE_PARK_POINT) _Os; #endif }; diff --git a/Marlin/src/libs/point_t.h b/Marlin/src/libs/point_t.h deleted file mode 100644 index 5c7d8feac6c7..000000000000 --- a/Marlin/src/libs/point_t.h +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Marlin 3D Printer Firmware - * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] - * - * Based on Sprinter and grbl. - * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ -#pragma once - -#include - -/** - * @brief Cartesian Point - * @details Represents a three dimensional point on Cartesian coordinate system, - * using an additional fourth dimension for the extrusion length. - * - * @param x The x-coordinate of the point. - * @param y The y-coordinate of the point. - * @param z The z-coordinate of the point. - */ -struct point_t { - float x, y, z; - - /** - * @brief Three dimensional point constructor - * - * @param x The x-coordinate of the point. - * @param y The y-coordinate of the point. - * @param z The z-coordinate of the point. - */ - point_t(const float x, const float y, const float z) : x(x), y(y), z(z) {} - - /** - * @brief Two dimensional point constructor - * - * @param x The x-coordinate of the point. - * @param y The y-coordinate of the point. - */ - point_t(const float x, const float y) : point_t(x, y, NAN) {} - -}; diff --git a/Marlin/src/libs/vector_3.cpp b/Marlin/src/libs/vector_3.cpp index e733cce3a537..0363318e534d 100644 --- a/Marlin/src/libs/vector_3.cpp +++ b/Marlin/src/libs/vector_3.cpp @@ -47,81 +47,74 @@ #include -vector_3::vector_3() : x(0), y(0), z(0) { } - -vector_3::vector_3(float x_, float y_, float z_) : x(x_), y(y_), z(z_) { } +/** + * vector_3 + */ vector_3 vector_3::cross(const vector_3 &left, const vector_3 &right) { - return vector_3(left.y * right.z - left.z * right.y, - left.z * right.x - left.x * right.z, - left.x * right.y - left.y * right.x); + const xyz_float_t &lv = left, &rv = right; + return vector_3(lv.y * rv.z - lv.z * rv.y, // YZ cross + lv.z * rv.x - lv.x * rv.z, // ZX cross + lv.x * rv.y - lv.y * rv.x); // XY cross } -vector_3 vector_3::operator+(const vector_3 &v) { return vector_3(x + v.x, y + v.y, z + v.z); } -vector_3 vector_3::operator-(const vector_3 &v) { return vector_3(x - v.x, y - v.y, z - v.z); } - -vector_3 vector_3::operator* (const float &v) { return vector_3(x * v, y * v, z * v); } -vector_3& vector_3::operator*=(const float &v) { x *= v; y *= v; z *= v; return *this; } - vector_3 vector_3::get_normal() const { - vector_3 normalized = vector_3(x, y, z); + vector_3 normalized = *this; normalized.normalize(); return normalized; } -float vector_3::get_length() const { return SQRT(sq(x) + sq(y) + sq(z)); } - void vector_3::normalize() { - const float inv_length = RSQRT(sq(x) + sq(y) + sq(z)); - x *= inv_length; - y *= inv_length; - z *= inv_length; + *this *= RSQRT(sq(x) + sq(y) + sq(z)); } +// Apply a rotation to the matrix void vector_3::apply_rotation(const matrix_3x3 &matrix) { - const float _x = x, _y = y; - x = _x * matrix.matrix[3 * 0 + 0] + _y * matrix.matrix[3 * 1 + 0] + z * matrix.matrix[3 * 2 + 0]; - y = _x * matrix.matrix[3 * 0 + 1] + _y * matrix.matrix[3 * 1 + 1] + z * matrix.matrix[3 * 2 + 1]; - z = _x * matrix.matrix[3 * 0 + 2] + _y * matrix.matrix[3 * 1 + 2] + z * matrix.matrix[3 * 2 + 2]; + const float _x = x, _y = y, _z = z; + *this = matrix.vectors[0] * _x + matrix.vectors[1] * _y + matrix.vectors[2] * _z; } void vector_3::debug(PGM_P const title) { serialprintPGM(title); - SERIAL_ECHOPAIR_F(" x: ", x, 6); - SERIAL_ECHOPAIR_F(" y: ", y, 6); - SERIAL_ECHOLNPAIR_F(" z: ", z, 6); + SERIAL_ECHOPAIR_F(" X", x, 6); + SERIAL_ECHOPAIR_F(" Y", y, 6); + SERIAL_ECHOLNPAIR_F(" Z", z, 6); } -void apply_rotation_xyz(const matrix_3x3 &matrix, float &x, float &y, float &z) { - vector_3 vector = vector_3(x, y, z); - vector.apply_rotation(matrix); - x = vector.x; - y = vector.y; - z = vector.z; +/** + * matrix_3x3 + */ + +void apply_rotation_xyz(const matrix_3x3 &matrix, float &_x, float &_y, float &_z) { + vector_3 vec = vector_3(_x, _y, _z); vec.apply_rotation(matrix); + _x = vec.x; _y = vec.y; _z = vec.z; +} + +// Reset to identity. No rotate or translate. +void matrix_3x3::set_to_identity() { + for (uint8_t i = 0; i < 3; i++) + for (uint8_t j = 0; j < 3; j++) + vectors[i][j] = float(i == j); } +// Create a matrix from 3 vector_3 inputs matrix_3x3 matrix_3x3::create_from_rows(const vector_3 &row_0, const vector_3 &row_1, const vector_3 &row_2) { //row_0.debug(PSTR("row_0")); //row_1.debug(PSTR("row_1")); //row_2.debug(PSTR("row_2")); matrix_3x3 new_matrix; - new_matrix.matrix[0] = row_0.x; new_matrix.matrix[1] = row_0.y; new_matrix.matrix[2] = row_0.z; - new_matrix.matrix[3] = row_1.x; new_matrix.matrix[4] = row_1.y; new_matrix.matrix[5] = row_1.z; - new_matrix.matrix[6] = row_2.x; new_matrix.matrix[7] = row_2.y; new_matrix.matrix[8] = row_2.z; + new_matrix.vectors[0] = row_0; + new_matrix.vectors[1] = row_1; + new_matrix.vectors[2] = row_2; //new_matrix.debug(PSTR("new_matrix")); return new_matrix; } -void matrix_3x3::set_to_identity() { - matrix[0] = 1; matrix[1] = 0; matrix[2] = 0; - matrix[3] = 0; matrix[4] = 1; matrix[5] = 0; - matrix[6] = 0; matrix[7] = 0; matrix[8] = 1; -} - +// Create a matrix rotated to point towards a target matrix_3x3 matrix_3x3::create_look_at(const vector_3 &target) { - vector_3 z_row = target.get_normal(), - x_row = vector_3(1, 0, -target.x / target.z).get_normal(), - y_row = vector_3::cross(z_row, x_row).get_normal(); + const vector_3 z_row = target.get_normal(), + x_row = vector_3(1, 0, -target.x / target.z).get_normal(), + y_row = vector_3::cross(z_row, x_row).get_normal(); // x_row.debug(PSTR("x_row")); // y_row.debug(PSTR("y_row")); @@ -134,11 +127,12 @@ matrix_3x3 matrix_3x3::create_look_at(const vector_3 &target) { return rot; } +// Get a transposed copy of the matrix matrix_3x3 matrix_3x3::transpose(const matrix_3x3 &original) { matrix_3x3 new_matrix; - new_matrix.matrix[0] = original.matrix[0]; new_matrix.matrix[1] = original.matrix[3]; new_matrix.matrix[2] = original.matrix[6]; - new_matrix.matrix[3] = original.matrix[1]; new_matrix.matrix[4] = original.matrix[4]; new_matrix.matrix[5] = original.matrix[7]; - new_matrix.matrix[6] = original.matrix[2]; new_matrix.matrix[7] = original.matrix[5]; new_matrix.matrix[8] = original.matrix[8]; + for (uint8_t i = 0; i < 3; i++) + for (uint8_t j = 0; j < 3; j++) + new_matrix.vectors[i][j] = original.vectors[j][i]; return new_matrix; } @@ -147,13 +141,11 @@ void matrix_3x3::debug(PGM_P const title) { serialprintPGM(title); SERIAL_EOL(); } - uint8_t count = 0; for (uint8_t i = 0; i < 3; i++) { for (uint8_t j = 0; j < 3; j++) { - if (matrix[count] >= 0.0) SERIAL_CHAR('+'); - SERIAL_ECHO_F(matrix[count], 6); + if (vectors[i][j] >= 0.0) SERIAL_CHAR('+'); + SERIAL_ECHO_F(vectors[i][j], 6); SERIAL_CHAR(' '); - count++; } SERIAL_EOL(); } diff --git a/Marlin/src/libs/vector_3.h b/Marlin/src/libs/vector_3.h index 6f9153817aba..fe95cfa85f8e 100644 --- a/Marlin/src/libs/vector_3.h +++ b/Marlin/src/libs/vector_3.h @@ -40,33 +40,40 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "../core/types.h" + class matrix_3x3; -struct vector_3 { - float x, y, z; +struct vector_3 : xyz_float_t { - vector_3(); - vector_3(float x, float y, float z); + vector_3(const float &_x, const float &_y, const float &_z) { set(_x, _y, _z); } + vector_3(const xy_float_t &in) { set(in.x, in.y); } + vector_3(const xyz_float_t &in) { set(in.x, in.y, in.z); } + vector_3(const xyze_float_t &in) { set(in.x, in.y, in.z); } + // Factory method static vector_3 cross(const vector_3 &a, const vector_3 &b); - vector_3 operator+(const vector_3 &v); - vector_3 operator-(const vector_3 &v); - - vector_3 operator* (const float &v); - vector_3& operator*=(const float &v); - + // Modifiers void normalize(); + void apply_rotation(const matrix_3x3 &matrix); + + // Accessors float get_length() const; vector_3 get_normal() const; + // Operators + FORCE_INLINE vector_3 operator+(const vector_3 &v) const { vector_3 o = *this; o += v; return o; } + FORCE_INLINE vector_3 operator-(const vector_3 &v) const { vector_3 o = *this; o -= v; return o; } + FORCE_INLINE vector_3 operator*(const float &v) const { vector_3 o = *this; o *= v; return o; } + void debug(PGM_P const title); - void apply_rotation(const matrix_3x3 &matrix); }; struct matrix_3x3 { - float matrix[9]; + abc_float_t vectors[3]; + // Factory methods static matrix_3x3 create_from_rows(const vector_3 &row_0, const vector_3 &row_1, const vector_3 &row_2); static matrix_3x3 create_look_at(const vector_3 &target); static matrix_3x3 transpose(const matrix_3x3 &original); @@ -76,5 +83,7 @@ struct matrix_3x3 { void debug(PGM_P const title); }; - void apply_rotation_xyz(const matrix_3x3 &rotationMatrix, float &x, float &y, float &z); +FORCE_INLINE void apply_rotation_xyz(const matrix_3x3 &rotationMatrix, xyz_pos_t &pos) { + apply_rotation_xyz(rotationMatrix, pos.x, pos.y, pos.z); +} diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp index 3d723909b083..699b44cdb2b2 100644 --- a/Marlin/src/module/configuration_store.cpp +++ b/Marlin/src/module/configuration_store.cpp @@ -52,7 +52,7 @@ #include "temperature.h" #include "../lcd/ultralcd.h" #include "../core/language.h" -#include "../libs/vector_3.h" +#include "../libs/vector_3.h" // for matrix_3x3 #include "../gcode/gcode.h" #include "../Marlin.h" @@ -146,13 +146,13 @@ typedef struct SettingsDataStruct { planner_settings_t planner_settings; - float planner_max_jerk[XYZE], // M205 XYZE planner.max_jerk[XYZE] - planner_junction_deviation_mm; // M205 J planner.junction_deviation_mm + xyze_float_t planner_max_jerk; // M205 XYZE planner.max_jerk + float planner_junction_deviation_mm; // M205 J planner.junction_deviation_mm - float home_offset[XYZ]; // M206 XYZ / M665 TPZ + xyz_pos_t home_offset; // M206 XYZ / M665 TPZ #if HAS_HOTEND_OFFSET - float hotend_offset[XYZ][HOTENDS - 1]; // M218 XYZ + xyz_pos_t hotend_offset[HOTENDS - 1]; // M218 XYZ #endif // @@ -181,7 +181,7 @@ typedef struct SettingsDataStruct { // HAS_BED_PROBE // - float probe_offset[XYZ]; + xyz_pos_t probe_offset; // // ABL_PLANAR @@ -192,10 +192,9 @@ typedef struct SettingsDataStruct { // AUTO_BED_LEVELING_BILINEAR // uint8_t grid_max_x, grid_max_y; // GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y - int bilinear_grid_spacing[2], - bilinear_start[2]; // G29 L F + xy_int_t bilinear_grid_spacing, bilinear_start; // G29 L F #if ENABLED(AUTO_BED_LEVELING_BILINEAR) - float z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; // G29 + bed_mesh_t z_values; // G29 #else float z_values[3][3]; #endif @@ -220,13 +219,13 @@ typedef struct SettingsDataStruct { // DELTA / [XYZ]_DUAL_ENDSTOPS // #if ENABLED(DELTA) - float delta_height, // M666 H - delta_endstop_adj[ABC], // M666 XYZ - delta_radius, // M665 R + float delta_height; // M666 H + abc_float_t delta_endstop_adj; // M666 XYZ + float delta_radius, // M665 R delta_diagonal_rod, // M665 L delta_segments_per_second, // M665 S - delta_calibration_radius, // M665 B - delta_tower_angle_trim[ABC]; // M665 XYZ + delta_calibration_radius; // M665 B + abc_float_t delta_tower_angle_trim; // M665 XYZ #elif EITHER(X_DUAL_ENDSTOPS, Y_DUAL_ENDSTOPS) || Z_MULTI_ENDSTOPS float x2_endstop_adj, // M666 X y2_endstop_adj, // M666 Y @@ -302,7 +301,7 @@ typedef struct SettingsDataStruct { // // CNC_COORDINATE_SYSTEMS // - float coordinate_system[MAX_COORDINATE_SYSTEMS][XYZ]; // G54-G59.3 + xyz_pos_t coordinate_system[MAX_COORDINATE_SYSTEMS]; // G54-G59.3 // // SKEW_CORRECTION @@ -326,7 +325,7 @@ typedef struct SettingsDataStruct { // // BACKLASH_COMPENSATION // - float backlash_distance_mm[XYZ]; // M425 X Y Z + xyz_float_t backlash_distance_mm; // M425 X Y Z uint8_t backlash_correction; // M425 F float backlash_smoothing_mm; // M425 S @@ -355,7 +354,7 @@ uint16_t MarlinSettings::datasize() { return sizeof(SettingsData); } #endif void MarlinSettings::postprocess() { - const float oldpos[XYZE] = { current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS] }; + xyze_pos_t oldpos = current_position; // steps per s2 needs to be updated to agree with units per s2 planner.reset_acceleration_rates(); @@ -408,7 +407,7 @@ void MarlinSettings::postprocess() { planner.refresh_positioning(); // Various factors can change the current position - if (memcmp(oldpos, current_position, sizeof(oldpos))) + if (oldpos != current_position) report_current_position(); } @@ -522,7 +521,7 @@ void MarlinSettings::postprocess() { EEPROM_WRITE(dummy); #endif #else - const float planner_max_jerk[XYZE] = { float(DEFAULT_EJERK) }; + const xyze_pos_t planner_max_jerk = { 10, 10, 0.4, float(DEFAULT_EJERK) }; EEPROM_WRITE(planner_max_jerk); #endif @@ -544,7 +543,7 @@ void MarlinSettings::postprocess() { EEPROM_WRITE(scara_home_offset); #else #if !HAS_HOME_OFFSET - const float home_offset[XYZ] = { 0 }; + const xyz_pos_t home_offset{0}; #endif EEPROM_WRITE(home_offset); #endif @@ -552,7 +551,7 @@ void MarlinSettings::postprocess() { #if HAS_HOTEND_OFFSET // Skip hotend 0 which must be 0 for (uint8_t e = 1; e < HOTENDS; e++) - LOOP_XYZ(i) EEPROM_WRITE(hotend_offset[i][e]); + EEPROM_WRITE(hotend_offset[e]); #endif } @@ -618,7 +617,7 @@ void MarlinSettings::postprocess() { // Probe Z Offset // { - _FIELD_TEST(probe_offset[Z_AXIS]); + _FIELD_TEST(probe_offset.z); EEPROM_WRITE(probe_offset); } @@ -653,7 +652,7 @@ void MarlinSettings::postprocess() { #else // For disabled Bilinear Grid write an empty 3x3 grid const uint8_t grid_max_x = 3, grid_max_y = 3; - const int bilinear_start[2] = { 0 }, bilinear_grid_spacing[2] = { 0 }; + const xy_int_t bilinear_start{0}, bilinear_grid_spacing{0}; dummy = 0; EEPROM_WRITE(grid_max_x); EEPROM_WRITE(grid_max_y); @@ -1033,7 +1032,7 @@ void MarlinSettings::postprocess() { // TMC StallGuard threshold // { - tmc_sgt_t tmc_sgt = { 0 }; + tmc_sgt_t tmc_sgt{0}; #if USE_SENSORLESS #if X_SENSORLESS tmc_sgt.X = stepperX.homing_threshold(); @@ -1138,8 +1137,8 @@ void MarlinSettings::postprocess() { #if HAS_MOTOR_CURRENT_PWM EEPROM_WRITE(stepper.motor_current_setting); #else - const uint32_t dummyui32[XYZ] = { 0 }; - EEPROM_WRITE(dummyui32); + const xyz_ulong_t no_current{0}; + EEPROM_WRITE(no_current); #endif } @@ -1152,7 +1151,7 @@ void MarlinSettings::postprocess() { #if ENABLED(CNC_COORDINATE_SYSTEMS) EEPROM_WRITE(gcode.coordinate_system); #else - const float coordinate_system[MAX_COORDINATE_SYSTEMS][XYZ] = { { 0 } }; + const xyz_pos_t coordinate_system[MAX_COORDINATE_SYSTEMS] = { { 0 } }; EEPROM_WRITE(coordinate_system); #endif @@ -1189,10 +1188,10 @@ void MarlinSettings::postprocess() { // { #if ENABLED(BACKLASH_GCODE) - const float (&backlash_distance_mm)[XYZ] = backlash.distance_mm; + const xyz_float_t &backlash_distance_mm = backlash.distance_mm; const uint8_t &backlash_correction = backlash.correction; #else - const float backlash_distance_mm[XYZ] = { 0 }; + const xyz_float_t backlash_distance_mm{0}; const uint8_t backlash_correction = 0; #endif #if ENABLED(BACKLASH_GCODE) && defined(BACKLASH_SMOOTHING_MM) @@ -1341,7 +1340,7 @@ void MarlinSettings::postprocess() { EEPROM_READ(scara_home_offset); #else #if !HAS_HOME_OFFSET - float home_offset[XYZ]; + xyz_pos_t home_offset; #endif EEPROM_READ(home_offset); #endif @@ -1354,7 +1353,7 @@ void MarlinSettings::postprocess() { #if HAS_HOTEND_OFFSET // Skip hotend 0 which must be 0 for (uint8_t e = 1; e < HOTENDS; e++) - LOOP_XYZ(i) EEPROM_READ(hotend_offset[i][e]); + EEPROM_READ(hotend_offset[e]); #endif } @@ -1418,12 +1417,11 @@ void MarlinSettings::postprocess() { // Probe Z Offset // { - _FIELD_TEST(probe_offset[Z_AXIS]); - + _FIELD_TEST(probe_offset); #if HAS_BED_PROBE - float (&zpo)[XYZ] = probe_offset; + xyz_pos_t &zpo = probe_offset; #else - float zpo[XYZ]; + xyz_pos_t zpo; #endif EEPROM_READ(zpo); } @@ -1457,7 +1455,7 @@ void MarlinSettings::postprocess() { #endif // AUTO_BED_LEVELING_BILINEAR { // Skip past disabled (or stale) Bilinear Grid data - int bgs[2], bs[2]; + xy_int_t bgs, bs; EEPROM_READ(bgs); EEPROM_READ(bs); for (uint16_t q = grid_max_x * grid_max_y; q--;) EEPROM_READ(dummy); @@ -1940,7 +1938,7 @@ void MarlinSettings::postprocess() { if (!validating) (void)gcode.select_coordinate_system(-1); // Go back to machine space EEPROM_READ(gcode.coordinate_system); #else - float coordinate_system[MAX_COORDINATE_SYSTEMS][XYZ]; + xyz_pos_t coordinate_system[MAX_COORDINATE_SYSTEMS]; EEPROM_READ(coordinate_system); #endif } @@ -1989,7 +1987,7 @@ void MarlinSettings::postprocess() { // { #if ENABLED(BACKLASH_GCODE) - float (&backlash_distance_mm)[XYZ] = backlash.distance_mm; + xyz_float_t &backlash_distance_mm = backlash.distance_mm; uint8_t &backlash_correction = backlash.correction; #else float backlash_distance_mm[XYZ]; @@ -2231,11 +2229,9 @@ void MarlinSettings::reset() { #ifndef DEFAULT_ZJERK #define DEFAULT_ZJERK 0 #endif - planner.max_jerk[X_AXIS] = DEFAULT_XJERK; - planner.max_jerk[Y_AXIS] = DEFAULT_YJERK; - planner.max_jerk[Z_AXIS] = DEFAULT_ZJERK; + planner.max_jerk.set(DEFAULT_XJERK, DEFAULT_YJERK, DEFAULT_ZJERK); #if !BOTH(JUNCTION_DEVIATION, LIN_ADVANCE) - planner.max_jerk[E_AXIS] = DEFAULT_EJERK; + planner.max_jerk.e = DEFAULT_EJERK; #endif #endif @@ -2244,9 +2240,9 @@ void MarlinSettings::reset() { #endif #if HAS_SCARA_OFFSET - ZERO(scara_home_offset); + scara_home_offset.reset(); #elif HAS_HOME_OFFSET - ZERO(home_offset); + home_offset.reset(); #endif #if HAS_HOTEND_OFFSET @@ -2277,17 +2273,16 @@ void MarlinSettings::reset() { toolchange_settings.retract_speed = TOOLCHANGE_FIL_SWAP_RETRACT_SPEED; #endif #if ENABLED(TOOLCHANGE_PARK) - toolchange_settings.change_point = TOOLCHANGE_PARK_XY; + constexpr xyz_pos_t tpxy = TOOLCHANGE_PARK_XY; + toolchange_settings.change_point = tpxy; #endif toolchange_settings.z_raise = TOOLCHANGE_ZRAISE; #endif #if ENABLED(BACKLASH_GCODE) backlash.correction = (BACKLASH_CORRECTION) * 255; - constexpr float tmp[XYZ] = BACKLASH_DISTANCE_MM; - backlash.distance_mm[X_AXIS] = tmp[X_AXIS]; - backlash.distance_mm[Y_AXIS] = tmp[Y_AXIS]; - backlash.distance_mm[Z_AXIS] = tmp[Z_AXIS]; + constexpr xyz_float_t tmp = BACKLASH_DISTANCE_MM; + backlash.distance_mm = tmp; #ifdef BACKLASH_SMOOTHING_MM backlash.smoothing_mm = BACKLASH_SMOOTHING_MM; #endif @@ -2346,14 +2341,14 @@ void MarlinSettings::reset() { // #if ENABLED(DELTA) - const float adj[ABC] = DELTA_ENDSTOP_ADJ, dta[ABC] = DELTA_TOWER_ANGLE_TRIM; + const abc_float_t adj = DELTA_ENDSTOP_ADJ, dta = DELTA_TOWER_ANGLE_TRIM; delta_height = DELTA_HEIGHT; - COPY(delta_endstop_adj, adj); + delta_endstop_adj = adj; delta_radius = DELTA_RADIUS; delta_diagonal_rod = DELTA_DIAGONAL_ROD; delta_segments_per_second = DELTA_SEGMENTS_PER_SECOND; delta_calibration_radius = DELTA_CALIBRATION_RADIUS; - COPY(delta_tower_angle_trim, dta); + delta_tower_angle_trim = dta; #elif EITHER(X_DUAL_ENDSTOPS, Y_DUAL_ENDSTOPS) || Z_MULTI_ENDSTOPS @@ -2769,11 +2764,11 @@ void MarlinSettings::reset() { , " J", LINEAR_UNIT(planner.junction_deviation_mm) #endif #if HAS_CLASSIC_JERK - , " X", LINEAR_UNIT(planner.max_jerk[X_AXIS]) - , " Y", LINEAR_UNIT(planner.max_jerk[Y_AXIS]) - , " Z", LINEAR_UNIT(planner.max_jerk[Z_AXIS]) + , " X", LINEAR_UNIT(planner.max_jerk.x) + , " Y", LINEAR_UNIT(planner.max_jerk.y) + , " Z", LINEAR_UNIT(planner.max_jerk.z) #if !BOTH(JUNCTION_DEVIATION, LIN_ADVANCE) - , " E", LINEAR_UNIT(planner.max_jerk[E_AXIS]) + , " E", LINEAR_UNIT(planner.max_jerk.e) #endif #endif ); @@ -2783,10 +2778,10 @@ void MarlinSettings::reset() { CONFIG_ECHO_START(); SERIAL_ECHOLNPAIR(" M206" #if IS_CARTESIAN - " X", LINEAR_UNIT(home_offset[X_AXIS]), - " Y", LINEAR_UNIT(home_offset[Y_AXIS]), + " X", LINEAR_UNIT(home_offset.x), + " Y", LINEAR_UNIT(home_offset.y), #endif - " Z", LINEAR_UNIT(home_offset[Z_AXIS]) + " Z", LINEAR_UNIT(home_offset.z) ); #endif @@ -2796,9 +2791,9 @@ void MarlinSettings::reset() { for (uint8_t e = 1; e < HOTENDS; e++) { SERIAL_ECHOPAIR( " M218 T", (int)e, - " X", LINEAR_UNIT(hotend_offset[X_AXIS][e]), " Y", LINEAR_UNIT(hotend_offset[Y_AXIS][e]) + " X", LINEAR_UNIT(hotend_offset[e].x), " Y", LINEAR_UNIT(hotend_offset[e].y) ); - SERIAL_ECHOLNPAIR_F(" Z", LINEAR_UNIT(hotend_offset[Z_AXIS][e]), 3); + SERIAL_ECHOLNPAIR_F(" Z", LINEAR_UNIT(hotend_offset[e].z), 3); } #endif @@ -2901,9 +2896,9 @@ void MarlinSettings::reset() { CONFIG_ECHO_START(); SERIAL_ECHOLNPAIR( " M665 S", delta_segments_per_second - , " P", scara_home_offset[A_AXIS] - , " T", scara_home_offset[B_AXIS] - , " Z", LINEAR_UNIT(scara_home_offset[Z_AXIS]) + , " P", scara_home_offset.a + , " T", scara_home_offset.b + , " Z", LINEAR_UNIT(scara_home_offset.z) ); #elif ENABLED(DELTA) @@ -2911,9 +2906,9 @@ void MarlinSettings::reset() { CONFIG_ECHO_HEADING("Endstop adjustment:"); CONFIG_ECHO_START(); SERIAL_ECHOLNPAIR( - " M666 X", LINEAR_UNIT(delta_endstop_adj[A_AXIS]) - , " Y", LINEAR_UNIT(delta_endstop_adj[B_AXIS]) - , " Z", LINEAR_UNIT(delta_endstop_adj[C_AXIS]) + " M666 X", LINEAR_UNIT(delta_endstop_adj.a) + , " Y", LINEAR_UNIT(delta_endstop_adj.b) + , " Z", LINEAR_UNIT(delta_endstop_adj.c) ); CONFIG_ECHO_HEADING("Delta settings: L R H S B XYZ"); @@ -2924,9 +2919,9 @@ void MarlinSettings::reset() { , " H", LINEAR_UNIT(delta_height) , " S", delta_segments_per_second , " B", LINEAR_UNIT(delta_calibration_radius) - , " X", LINEAR_UNIT(delta_tower_angle_trim[A_AXIS]) - , " Y", LINEAR_UNIT(delta_tower_angle_trim[B_AXIS]) - , " Z", LINEAR_UNIT(delta_tower_angle_trim[C_AXIS]) + , " X", LINEAR_UNIT(delta_tower_angle_trim.a) + , " Y", LINEAR_UNIT(delta_tower_angle_trim.b) + , " Z", LINEAR_UNIT(delta_tower_angle_trim.c) ); #elif EITHER(X_DUAL_ENDSTOPS, Y_DUAL_ENDSTOPS) || Z_MULTI_ENDSTOPS @@ -3072,9 +3067,9 @@ void MarlinSettings::reset() { say_units(true); } CONFIG_ECHO_START(); - SERIAL_ECHOLNPAIR(" M851 X", LINEAR_UNIT(probe_offset[X_AXIS]), - " Y", LINEAR_UNIT(probe_offset[Y_AXIS]), - " Z", LINEAR_UNIT(probe_offset[Z_AXIS])); + SERIAL_ECHOLNPAIR(" M851 X", LINEAR_UNIT(probe_offset.x), + " Y", LINEAR_UNIT(probe_offset.y), + " Z", LINEAR_UNIT(probe_offset.z)); #endif /** @@ -3421,9 +3416,9 @@ void MarlinSettings::reset() { CONFIG_ECHO_START(); SERIAL_ECHOLNPAIR( " M425 F", backlash.get_correction(), - " X", LINEAR_UNIT(backlash.distance_mm[X_AXIS]), - " Y", LINEAR_UNIT(backlash.distance_mm[Y_AXIS]), - " Z", LINEAR_UNIT(backlash.distance_mm[Z_AXIS]) + " X", LINEAR_UNIT(backlash.distance_mm.x), + " Y", LINEAR_UNIT(backlash.distance_mm.y), + " Z", LINEAR_UNIT(backlash.distance_mm.z) #ifdef BACKLASH_SMOOTHING_MM , " S", LINEAR_UNIT(backlash.smoothing_mm) #endif diff --git a/Marlin/src/module/delta.cpp b/Marlin/src/module/delta.cpp index b1b943b9448e..8ef64b09aa2e 100644 --- a/Marlin/src/module/delta.cpp +++ b/Marlin/src/module/delta.cpp @@ -50,17 +50,16 @@ #include "../core/debug_out.h" // Initialized by settings.load() -float delta_height, - delta_endstop_adj[ABC] = { 0 }, - delta_radius, +float delta_height; +abc_float_t delta_endstop_adj{0}; +float delta_radius, delta_diagonal_rod, delta_segments_per_second, - delta_calibration_radius, - delta_tower_angle_trim[ABC]; - -float delta_tower[ABC][2], - delta_diagonal_rod_2_tower[ABC], - delta_clip_start_height = Z_MAX_POS; + delta_calibration_radius; +abc_float_t delta_tower_angle_trim; +xy_float_t delta_tower[ABC]; +abc_float_t delta_diagonal_rod_2_tower; +float delta_clip_start_height = Z_MAX_POS; float delta_safe_distance_from_top(); @@ -69,17 +68,17 @@ float delta_safe_distance_from_top(); * settings have been changed (e.g., by M665). */ void recalc_delta_settings() { - const float trt[ABC] = DELTA_RADIUS_TRIM_TOWER, - drt[ABC] = DELTA_DIAGONAL_ROD_TRIM_TOWER; - delta_tower[A_AXIS][X_AXIS] = cos(RADIANS(210 + delta_tower_angle_trim[A_AXIS])) * (delta_radius + trt[A_AXIS]); // front left tower - delta_tower[A_AXIS][Y_AXIS] = sin(RADIANS(210 + delta_tower_angle_trim[A_AXIS])) * (delta_radius + trt[A_AXIS]); - delta_tower[B_AXIS][X_AXIS] = cos(RADIANS(330 + delta_tower_angle_trim[B_AXIS])) * (delta_radius + trt[B_AXIS]); // front right tower - delta_tower[B_AXIS][Y_AXIS] = sin(RADIANS(330 + delta_tower_angle_trim[B_AXIS])) * (delta_radius + trt[B_AXIS]); - delta_tower[C_AXIS][X_AXIS] = cos(RADIANS( 90 + delta_tower_angle_trim[C_AXIS])) * (delta_radius + trt[C_AXIS]); // back middle tower - delta_tower[C_AXIS][Y_AXIS] = sin(RADIANS( 90 + delta_tower_angle_trim[C_AXIS])) * (delta_radius + trt[C_AXIS]); - delta_diagonal_rod_2_tower[A_AXIS] = sq(delta_diagonal_rod + drt[A_AXIS]); - delta_diagonal_rod_2_tower[B_AXIS] = sq(delta_diagonal_rod + drt[B_AXIS]); - delta_diagonal_rod_2_tower[C_AXIS] = sq(delta_diagonal_rod + drt[C_AXIS]); + constexpr abc_float_t trt = DELTA_RADIUS_TRIM_TOWER, + drt = DELTA_DIAGONAL_ROD_TRIM_TOWER; + delta_tower[A_AXIS].set(cos(RADIANS(210 + delta_tower_angle_trim.a)) * (delta_radius + trt.a), // front left tower + sin(RADIANS(210 + delta_tower_angle_trim.a)) * (delta_radius + trt.a)); + delta_tower[B_AXIS].set(cos(RADIANS(330 + delta_tower_angle_trim.b)) * (delta_radius + trt.b), // front right tower + sin(RADIANS(330 + delta_tower_angle_trim.b)) * (delta_radius + trt.b)); + delta_tower[C_AXIS].set(cos(RADIANS( 90 + delta_tower_angle_trim.c)) * (delta_radius + trt.c), // back middle tower + sin(RADIANS( 90 + delta_tower_angle_trim.c)) * (delta_radius + trt.c)); + delta_diagonal_rod_2_tower.set(sq(delta_diagonal_rod + drt.a), + sq(delta_diagonal_rod + drt.b), + sq(delta_diagonal_rod + drt.c)); update_software_endstops(Z_AXIS); set_all_unhomed(); } @@ -101,18 +100,16 @@ void recalc_delta_settings() { */ #define DELTA_DEBUG(VAR) do { \ - SERIAL_ECHOLNPAIR("Cartesian X", VAR[X_AXIS], " Y", VAR[Y_AXIS], " Z", VAR[Z_AXIS]); \ - SERIAL_ECHOLNPAIR("Delta A", delta[A_AXIS], " B", delta[B_AXIS], " C", delta[C_AXIS]); \ + SERIAL_ECHOLNPAIR("Cartesian X", VAR.x, " Y", VAR.y, " Z", VAR.z); \ + SERIAL_ECHOLNPAIR("Delta A", delta.a, " B", delta.b, " C", delta.c); \ }while(0) -void inverse_kinematics(const float (&raw)[XYZ]) { +void inverse_kinematics(const xyz_pos_t &raw) { #if HAS_HOTEND_OFFSET // Delta hotend offsets must be applied in Cartesian space with no "spoofing" - const float pos[XYZ] = { - raw[X_AXIS] - hotend_offset[X_AXIS][active_extruder], - raw[Y_AXIS] - hotend_offset[Y_AXIS][active_extruder], - raw[Z_AXIS] - }; + xyz_pos_t pos = { raw.x - hotend_offset[active_extruder].x, + raw.y - hotend_offset[active_extruder].y, + raw.z }; DELTA_IK(pos); //DELTA_DEBUG(pos); #else @@ -126,12 +123,12 @@ void inverse_kinematics(const float (&raw)[XYZ]) { * effector has the full range of XY motion. */ float delta_safe_distance_from_top() { - float cartesian[XYZ] = { 0, 0, 0 }; + xyz_pos_t cartesian{0}; inverse_kinematics(cartesian); - float centered_extent = delta[A_AXIS]; - cartesian[Y_AXIS] = DELTA_PRINTABLE_RADIUS; + const float centered_extent = delta.a; + cartesian.y = DELTA_PRINTABLE_RADIUS; inverse_kinematics(cartesian); - return ABS(centered_extent - delta[A_AXIS]); + return ABS(centered_extent - delta.a); } /** @@ -161,7 +158,7 @@ float delta_safe_distance_from_top() { */ void forward_kinematics_DELTA(const float &z1, const float &z2, const float &z3) { // Create a vector in old coordinates along x axis of new coordinate - const float p12[3] = { delta_tower[B_AXIS][X_AXIS] - delta_tower[A_AXIS][X_AXIS], delta_tower[B_AXIS][Y_AXIS] - delta_tower[A_AXIS][Y_AXIS], z2 - z1 }, + const float p12[3] = { delta_tower[B_AXIS].x - delta_tower[A_AXIS].x, delta_tower[B_AXIS].y - delta_tower[A_AXIS].y, z2 - z1 }, // Get the reciprocal of Magnitude of vector. d2 = sq(p12[0]) + sq(p12[1]) + sq(p12[2]), inv_d = RSQRT(d2), @@ -170,7 +167,7 @@ void forward_kinematics_DELTA(const float &z1, const float &z2, const float &z3) ex[3] = { p12[0] * inv_d, p12[1] * inv_d, p12[2] * inv_d }, // Get the vector from the origin of the new system to the third point. - p13[3] = { delta_tower[C_AXIS][X_AXIS] - delta_tower[A_AXIS][X_AXIS], delta_tower[C_AXIS][Y_AXIS] - delta_tower[A_AXIS][Y_AXIS], z3 - z1 }, + p13[3] = { delta_tower[C_AXIS].x - delta_tower[A_AXIS].x, delta_tower[C_AXIS].y - delta_tower[A_AXIS].y, z3 - z1 }, // Use the dot product to find the component of this vector on the X axis. i = ex[0] * p13[0] + ex[1] * p13[1] + ex[2] * p13[2], @@ -198,16 +195,16 @@ void forward_kinematics_DELTA(const float &z1, const float &z2, const float &z3) // We now have the d, i and j values defined in Wikipedia. // Plug them into the equations defined in Wikipedia for Xnew, Ynew and Znew - Xnew = (delta_diagonal_rod_2_tower[A_AXIS] - delta_diagonal_rod_2_tower[B_AXIS] + d2) * inv_d * 0.5, - Ynew = ((delta_diagonal_rod_2_tower[A_AXIS] - delta_diagonal_rod_2_tower[C_AXIS] + sq(i) + j2) * 0.5 - i * Xnew) * inv_j, - Znew = SQRT(delta_diagonal_rod_2_tower[A_AXIS] - HYPOT2(Xnew, Ynew)); + Xnew = (delta_diagonal_rod_2_tower.a - delta_diagonal_rod_2_tower.b + d2) * inv_d * 0.5, + Ynew = ((delta_diagonal_rod_2_tower.a - delta_diagonal_rod_2_tower.c + sq(i) + j2) * 0.5 - i * Xnew) * inv_j, + Znew = SQRT(delta_diagonal_rod_2_tower.a - HYPOT2(Xnew, Ynew)); // Start from the origin of the old coordinates and add vectors in the // old coords that represent the Xnew, Ynew and Znew to find the point // in the old system. - cartes[X_AXIS] = delta_tower[A_AXIS][X_AXIS] + ex[0] * Xnew + ey[0] * Ynew - ez[0] * Znew; - cartes[Y_AXIS] = delta_tower[A_AXIS][Y_AXIS] + ex[1] * Xnew + ey[1] * Ynew - ez[1] * Znew; - cartes[Z_AXIS] = z1 + ex[2] * Xnew + ey[2] * Ynew - ez[2] * Znew; + cartes.set(delta_tower[A_AXIS].x + ex[0] * Xnew + ey[0] * Ynew - ez[0] * Znew, + delta_tower[A_AXIS].y + ex[1] * Xnew + ey[1] * Ynew - ez[1] * Znew, + z1 + ex[2] * Xnew + ey[2] * Ynew - ez[2] * Znew); } /** @@ -217,8 +214,8 @@ void forward_kinematics_DELTA(const float &z1, const float &z2, const float &z3) void home_delta() { if (DEBUGGING(LEVELING)) DEBUG_POS(">>> home_delta", current_position); // Init the current position of all carriages to 0,0,0 - ZERO(current_position); - ZERO(destination); + current_position.reset(); + destination.reset(); sync_plan_position(); // Disable stealthChop if used. Enable diag1 pin on driver. @@ -231,9 +228,9 @@ void home_delta() { #endif // Move all carriages together linearly until an endstop is hit. - current_position[Z_AXIS] = (delta_height + 10 + current_position.z = (delta_height + 10 #if HAS_BED_PROBE - - probe_offset[Z_AXIS] + - probe_offset.z #endif ); line_to_current_position(homing_feedrate(X_AXIS)); diff --git a/Marlin/src/module/delta.h b/Marlin/src/module/delta.h index 24af5daa3aca..f2e602fe14ba 100644 --- a/Marlin/src/module/delta.h +++ b/Marlin/src/module/delta.h @@ -25,17 +25,18 @@ * delta.h - Delta-specific functions */ -extern float delta_height, - delta_endstop_adj[ABC], - delta_radius, +#include "../core/types.h" + +extern float delta_height; +extern abc_float_t delta_endstop_adj; +extern float delta_radius, delta_diagonal_rod, delta_segments_per_second, - delta_calibration_radius, - delta_tower_angle_trim[ABC]; - -extern float delta_tower[ABC][2], - delta_diagonal_rod_2_tower[ABC], - delta_clip_start_height; + delta_calibration_radius; +extern abc_float_t delta_tower_angle_trim; +extern xy_float_t delta_tower[ABC]; +extern abc_float_t delta_diagonal_rod_2_tower; +extern float delta_clip_start_height; /** * Recalculate factors used for delta kinematics whenever @@ -63,24 +64,16 @@ void recalc_delta_settings(); */ // Macro to obtain the Z position of an individual tower -#define DELTA_Z(V,T) V[Z_AXIS] + SQRT( \ +#define DELTA_Z(V,T) V.z + SQRT( \ delta_diagonal_rod_2_tower[T] - HYPOT2( \ - delta_tower[T][X_AXIS] - V[X_AXIS], \ - delta_tower[T][Y_AXIS] - V[Y_AXIS] \ + delta_tower[T].x - V.x, \ + delta_tower[T].y - V.y \ ) \ ) -#define DELTA_IK(V) do { \ - delta[A_AXIS] = DELTA_Z(V, A_AXIS); \ - delta[B_AXIS] = DELTA_Z(V, B_AXIS); \ - delta[C_AXIS] = DELTA_Z(V, C_AXIS); \ -}while(0) +#define DELTA_IK(V) delta.set(DELTA_Z(V, A_AXIS), DELTA_Z(V, B_AXIS), DELTA_Z(V, C_AXIS)) -void inverse_kinematics(const float (&raw)[XYZ]); -FORCE_INLINE void inverse_kinematics(const float (&raw)[XYZE]) { - const float raw_xyz[XYZ] = { raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS] }; - inverse_kinematics(raw_xyz); -} +void inverse_kinematics(const xyz_pos_t &raw); /** * Calculate the highest Z position where the @@ -115,8 +108,8 @@ float delta_safe_distance_from_top(); */ void forward_kinematics_DELTA(const float &z1, const float &z2, const float &z3); -FORCE_INLINE void forward_kinematics_DELTA(const float (&point)[ABC]) { - forward_kinematics_DELTA(point[A_AXIS], point[B_AXIS], point[C_AXIS]); +FORCE_INLINE void forward_kinematics_DELTA(const abc_float_t &point) { + forward_kinematics_DELTA(point.a, point.b, point.c); } void home_delta(); diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index e2351150b1b0..e93f4f5281ef 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -70,7 +70,7 @@ #define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE) #include "../core/debug_out.h" -#define XYZ_CONSTS(type, array, CONFIG) const PROGMEM type array##_P[XYZ] = { X_##CONFIG, Y_##CONFIG, Z_##CONFIG } +#define XYZ_CONSTS(T, NAME, OPT) const PROGMEM XYZval NAME##_P = { X_##OPT, Y_##OPT, Z_##OPT } XYZ_CONSTS(float, base_min_pos, MIN_POS); XYZ_CONSTS(float, base_max_pos, MAX_POS); @@ -99,7 +99,7 @@ bool relative_mode; // = false; * Used by 'line_to_current_position' to do a move after changing it. * Used by 'sync_plan_position' to update 'planner.position'. */ -float current_position[XYZE] = { X_HOME_POS, Y_HOME_POS, Z_HOME_POS }; +xyze_pos_t current_position = { X_HOME_POS, Y_HOME_POS, Z_HOME_POS }; /** * Cartesian Destination @@ -107,7 +107,7 @@ float current_position[XYZE] = { X_HOME_POS, Y_HOME_POS, Z_HOME_POS }; * and expected by functions like 'prepare_move_to_destination'. * G-codes can set destination using 'get_destination_from_command' */ -float destination[XYZE]; // = { 0 } +xyze_pos_t destination; // {0} // The active extruder (tool). Set with T command. #if EXTRUDERS > 1 @@ -116,16 +116,17 @@ float destination[XYZE]; // = { 0 } // Extruder offsets #if HAS_HOTEND_OFFSET - float hotend_offset[XYZ][HOTENDS]; // Initialized by settings.load() + xyz_pos_t hotend_offset[HOTENDS]; // Initialized by settings.load() void reset_hotend_offsets() { constexpr float tmp[XYZ][HOTENDS] = { HOTEND_OFFSET_X, HOTEND_OFFSET_Y, HOTEND_OFFSET_Z }; static_assert( - tmp[X_AXIS][0] == 0 && tmp[Y_AXIS][0] == 0 && tmp[Z_AXIS][0] == 0, + !tmp[X_AXIS][0] && !tmp[Y_AXIS][0] && !tmp[Z_AXIS][0], "Offsets for the first hotend must be 0.0." ); - LOOP_XYZ(i) HOTEND_LOOP() hotend_offset[i][e] = tmp[i][e]; + // Transpose from [XYZ][HOTENDS] to [HOTENDS][XYZ] + HOTEND_LOOP() LOOP_XYZ(a) hotend_offset[e][a] = tmp[a][e]; #if ENABLED(DUAL_X_CARRIAGE) - hotend_offset[X_AXIS][1] = _MAX(X2_HOME_POS, X2_MAX_POS); + hotend_offset[1].x = _MAX(X2_HOME_POS, X2_MAX_POS); #endif } #endif @@ -148,14 +149,14 @@ const feedRate_t homing_feedrate_mm_s[XYZ] PROGMEM = { }; // Cartesian conversion result goes here: -float cartes[XYZ]; +xyz_pos_t cartes; #if IS_KINEMATIC - float delta[ABC]; + abc_pos_t delta; #if HAS_SCARA_OFFSET - float scara_home_offset[ABC]; + abc_pos_t scara_home_offset; #endif #if HAS_SOFTWARE_ENDSTOPS @@ -176,16 +177,16 @@ float cartes[XYZ]; */ #if HAS_POSITION_SHIFT // The distance that XYZ has been offset by G92. Reset by G28. - float position_shift[XYZ] = { 0 }; + xyz_pos_t position_shift{0}; #endif #if HAS_HOME_OFFSET // This offset is added to the configured home position. // Set by M206, M428, or menu item. Saved to EEPROM. - float home_offset[XYZ] = { 0 }; + xyz_pos_t home_offset{0}; #endif #if HAS_HOME_OFFSET && HAS_POSITION_SHIFT // The above two are combined to save on computes - float workspace_offset[XYZ] = { 0 }; + xyz_pos_t workspace_offset{0}; #endif #if HAS_ABL_NOT_UBL @@ -196,10 +197,8 @@ float cartes[XYZ]; * Output the current position to serial */ void report_current_position() { - SERIAL_ECHOPAIR("X:", LOGICAL_X_POSITION(current_position[X_AXIS])); - SERIAL_ECHOPAIR(" Y:", LOGICAL_Y_POSITION(current_position[Y_AXIS])); - SERIAL_ECHOPAIR(" Z:", LOGICAL_Z_POSITION(current_position[Z_AXIS])); - SERIAL_ECHOPAIR(" E:", current_position[E_AXIS]); + const xyz_pos_t lpos = current_position.asLogical(); + SERIAL_ECHOPAIR("X:", lpos.x, " Y:", lpos.y, " Z:", lpos.z, " E:", current_position.e); stepper.report_positions(); @@ -216,10 +215,10 @@ void report_current_position() { */ void sync_plan_position() { if (DEBUGGING(LEVELING)) DEBUG_POS("sync_plan_position", current_position); - planner.set_position_mm(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); + planner.set_position_mm(current_position); } -void sync_plan_position_e() { planner.set_e_position_mm(current_position[E_AXIS]); } +void sync_plan_position_e() { planner.set_e_position_mm(current_position.e); } /** * Get the stepper positions in the cartes[] array. @@ -244,10 +243,9 @@ void get_cartesian_from_steppers() { planner.get_axis_position_degrees(B_AXIS) ); #else - cartes[X_AXIS] = planner.get_axis_position_mm(X_AXIS); - cartes[Y_AXIS] = planner.get_axis_position_mm(Y_AXIS); + cartes.set(planner.get_axis_position_mm(X_AXIS), planner.get_axis_position_mm(Y_AXIS)); #endif - cartes[Z_AXIS] = planner.get_axis_position_mm(Z_AXIS); + cartes.z = planner.get_axis_position_mm(Z_AXIS); #endif } @@ -266,16 +264,16 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) { get_cartesian_from_steppers(); #if HAS_POSITION_MODIFIERS - float pos[XYZE] = { cartes[X_AXIS], cartes[Y_AXIS], cartes[Z_AXIS], current_position[E_AXIS] }; + xyze_pos_t pos = { cartes.x, cartes.y, cartes.z, current_position.e }; planner.unapply_modifiers(pos #if HAS_LEVELING , true #endif ); - const float (&cartes)[XYZE] = pos; + xyze_pos_t &cartes = pos; #endif if (axis == ALL_AXES) - COPY(current_position, cartes); + current_position = cartes; else current_position[axis] = cartes[axis]; } @@ -300,16 +298,12 @@ void line_to_current_position(const feedRate_t &fr_mm_s/*=feedrate_mm_s*/) { // UBL segmented line will do Z-only moves in single segment ubl.line_to_destination_segmented(scaled_fr_mm_s); #else - if ( current_position[X_AXIS] == destination[X_AXIS] - && current_position[Y_AXIS] == destination[Y_AXIS] - && current_position[Z_AXIS] == destination[Z_AXIS] - && current_position[E_AXIS] == destination[E_AXIS] - ) return; + if (current_position == destination) return; planner.buffer_line(destination, scaled_fr_mm_s, active_extruder); #endif - set_current_from_destination(); + current_position = destination; } #endif // IS_KINEMATIC @@ -355,39 +349,36 @@ void do_blocking_move_to(const float rx, const float ry, const float rz, const f REMEMBER(fr, feedrate_mm_s, xy_feedrate); - set_destination_from_current(); // sync destination at the start + destination = current_position; // sync destination at the start - if (DEBUGGING(LEVELING)) DEBUG_POS("set_destination_from_current", destination); + if (DEBUGGING(LEVELING)) DEBUG_POS("destination = current_position", destination); // when in the danger zone - if (current_position[Z_AXIS] > delta_clip_start_height) { - if (rz > delta_clip_start_height) { // staying in the danger zone - destination[X_AXIS] = rx; // move directly (uninterpolated) - destination[Y_AXIS] = ry; - destination[Z_AXIS] = rz; - prepare_internal_fast_move_to_destination(); // set_current_from_destination() + if (current_position.z > delta_clip_start_height) { + if (rz > delta_clip_start_height) { // staying in the danger zone + destination.set(rx, ry, rz); // move directly (uninterpolated) + prepare_internal_fast_move_to_destination(); // set current_position from destination if (DEBUGGING(LEVELING)) DEBUG_POS("danger zone move", current_position); return; } - destination[Z_AXIS] = delta_clip_start_height; - prepare_internal_fast_move_to_destination(); // set_current_from_destination() + destination.z = delta_clip_start_height; + prepare_internal_fast_move_to_destination(); // set current_position from destination if (DEBUGGING(LEVELING)) DEBUG_POS("zone border move", current_position); } - if (rz > current_position[Z_AXIS]) { // raising? - destination[Z_AXIS] = rz; - prepare_internal_fast_move_to_destination(z_feedrate); // set_current_from_destination() + if (rz > current_position.z) { // raising? + destination.z = rz; + prepare_internal_fast_move_to_destination(z_feedrate); // set current_position from destination if (DEBUGGING(LEVELING)) DEBUG_POS("z raise move", current_position); } - destination[X_AXIS] = rx; - destination[Y_AXIS] = ry; - prepare_internal_move_to_destination(); // set_current_from_destination() + destination.set(rx, ry); + prepare_internal_move_to_destination(); // set current_position from destination if (DEBUGGING(LEVELING)) DEBUG_POS("xy move", current_position); - if (rz < current_position[Z_AXIS]) { // lowering? - destination[Z_AXIS] = rz; - prepare_fast_move_to_destination(z_feedrate); // set_current_from_destination() + if (rz < current_position.z) { // lowering? + destination.z = rz; + prepare_internal_fast_move_to_destination(z_feedrate); // set current_position from destination if (DEBUGGING(LEVELING)) DEBUG_POS("z lower move", current_position); } @@ -395,39 +386,37 @@ void do_blocking_move_to(const float rx, const float ry, const float rz, const f if (!position_is_reachable(rx, ry)) return; - set_destination_from_current(); + destination = current_position; // If Z needs to raise, do it before moving XY - if (destination[Z_AXIS] < rz) { - destination[Z_AXIS] = rz; + if (destination.z < rz) { + destination.z = rz; prepare_internal_fast_move_to_destination(z_feedrate); } - destination[X_AXIS] = rx; - destination[Y_AXIS] = ry; + destination.set(rx, ry); prepare_internal_fast_move_to_destination(xy_feedrate); // If Z needs to lower, do it after moving XY - if (destination[Z_AXIS] > rz) { - destination[Z_AXIS] = rz; + if (destination.z > rz) { + destination.z = rz; prepare_internal_fast_move_to_destination(z_feedrate); } #else // If Z needs to raise, do it before moving XY - if (current_position[Z_AXIS] < rz) { - current_position[Z_AXIS] = rz; + if (current_position.z < rz) { + current_position.z = rz; line_to_current_position(z_feedrate); } - current_position[X_AXIS] = rx; - current_position[Y_AXIS] = ry; + current_position.set(rx, ry); line_to_current_position(xy_feedrate); // If Z needs to lower, do it after moving XY - if (current_position[Z_AXIS] > rz) { - current_position[Z_AXIS] = rz; + if (current_position.z > rz) { + current_position.z = rz; line_to_current_position(z_feedrate); } @@ -438,16 +427,16 @@ void do_blocking_move_to(const float rx, const float ry, const float rz, const f planner.synchronize(); } void do_blocking_move_to_x(const float &rx, const feedRate_t &fr_mm_s/*=0.0*/) { - do_blocking_move_to(rx, current_position[Y_AXIS], current_position[Z_AXIS], fr_mm_s); + do_blocking_move_to(rx, current_position.y, current_position.z, fr_mm_s); } void do_blocking_move_to_y(const float &ry, const feedRate_t &fr_mm_s/*=0.0*/) { - do_blocking_move_to(current_position[X_AXIS], ry, current_position[Z_AXIS], fr_mm_s); + do_blocking_move_to(current_position.x, ry, current_position.z, fr_mm_s); } void do_blocking_move_to_z(const float &rz, const feedRate_t &fr_mm_s/*=0.0*/) { - do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], rz, fr_mm_s); + do_blocking_move_to(current_position.x, current_position.y, rz, fr_mm_s); } void do_blocking_move_to_xy(const float &rx, const float &ry, const feedRate_t &fr_mm_s/*=0.0*/) { - do_blocking_move_to(rx, ry, current_position[Z_AXIS], fr_mm_s); + do_blocking_move_to(rx, ry, current_position.z, fr_mm_s); } // @@ -474,7 +463,10 @@ void restore_feedrate_and_scaling() { bool soft_endstops_enabled = true; // Software Endstops are based on the configured limits. - axis_limits_t soft_endstop[XYZ] = { { X_MIN_BED, X_MAX_BED }, { Y_MIN_BED, Y_MAX_BED }, { Z_MIN_POS, Z_MAX_POS } }; + axis_limits_t soft_endstop = { + { X_MIN_POS, Y_MIN_POS, Z_MIN_POS }, + { X_MAX_POS, Y_MAX_POS, Z_MAX_POS } + }; /** * Software endstops can be used to monitor the open end of @@ -496,33 +488,33 @@ void restore_feedrate_and_scaling() { if (axis == X_AXIS) { // In Dual X mode hotend_offset[X] is T1's home position - const float dual_max_x = _MAX(hotend_offset[X_AXIS][1], X2_MAX_POS); + const float dual_max_x = _MAX(hotend_offset[1].x, X2_MAX_POS); if (new_tool_index != 0) { // T1 can move from X2_MIN_POS to X2_MAX_POS or X2 home position (whichever is larger) - soft_endstop[X_AXIS].min = X2_MIN_POS; - soft_endstop[X_AXIS].max = dual_max_x; + soft_endstop.min.x = X2_MIN_POS; + soft_endstop.max.x = dual_max_x; } else if (dxc_is_duplicating()) { // In Duplication Mode, T0 can move as far left as X1_MIN_POS // but not so far to the right that T1 would move past the end - soft_endstop[X_AXIS].min = X1_MIN_POS; - soft_endstop[X_AXIS].max = _MIN(X1_MAX_POS, dual_max_x - duplicate_extruder_x_offset); + soft_endstop.min.x = X1_MIN_POS; + soft_endstop.max.x = _MIN(X1_MAX_POS, dual_max_x - duplicate_extruder_x_offset); } else { // In other modes, T0 can move from X1_MIN_POS to X1_MAX_POS - soft_endstop[X_AXIS].min = X1_MIN_POS; - soft_endstop[X_AXIS].max = X1_MAX_POS; + soft_endstop.min.x = X1_MIN_POS; + soft_endstop.max.x = X1_MAX_POS; } } #elif ENABLED(DELTA) - soft_endstop[axis].min = base_min_pos(axis); - soft_endstop[axis].max = (axis == Z_AXIS ? delta_height + soft_endstop.min[axis] = base_min_pos(axis); + soft_endstop.max[axis] = (axis == Z_AXIS ? delta_height #if HAS_BED_PROBE - - probe_offset[Z_AXIS] + - probe_offset.z #endif : base_max_pos(axis)); @@ -530,11 +522,11 @@ void restore_feedrate_and_scaling() { case X_AXIS: case Y_AXIS: // Get a minimum radius for clamping - delta_max_radius = _MIN(ABS(_MAX(soft_endstop[X_AXIS].min, soft_endstop[Y_AXIS].min)), soft_endstop[X_AXIS].max, soft_endstop[Y_AXIS].max); + delta_max_radius = _MIN(ABS(_MAX(soft_endstop.min.x, soft_endstop.min.y)), soft_endstop.max.x, soft_endstop.max.y); delta_max_radius_2 = sq(delta_max_radius); break; case Z_AXIS: - delta_clip_start_height = soft_endstop[axis].max - delta_safe_distance_from_top(); + delta_clip_start_height = soft_endstop.max[axis] - delta_safe_distance_from_top(); default: break; } @@ -544,25 +536,25 @@ void restore_feedrate_and_scaling() { // the movement limits must be shifted by the tool offset to // retain the same physical limit when other tools are selected. if (old_tool_index != new_tool_index) { - const float offs = hotend_offset[axis][new_tool_index] - hotend_offset[axis][old_tool_index]; - soft_endstop[axis].min += offs; - soft_endstop[axis].max += offs; + const float offs = hotend_offset[new_tool_index][axis] - hotend_offset[old_tool_index][axis]; + soft_endstop.min[axis] += offs; + soft_endstop.max[axis] += offs; } else { - const float offs = hotend_offset[axis][active_extruder]; - soft_endstop[axis].min = base_min_pos(axis) + offs; - soft_endstop[axis].max = base_max_pos(axis) + offs; + const float offs = hotend_offset[active_extruder][axis]; + soft_endstop.min[axis] = base_min_pos(axis) + offs; + soft_endstop.max[axis] = base_max_pos(axis) + offs; } #else - soft_endstop[axis].min = base_min_pos(axis); - soft_endstop[axis].max = base_max_pos(axis); + soft_endstop.min[axis] = base_min_pos(axis); + soft_endstop.max[axis] = base_max_pos(axis); #endif if (DEBUGGING(LEVELING)) - SERIAL_ECHOLNPAIR("Axis ", axis_codes[axis], " min:", soft_endstop[axis].min, " max:", soft_endstop[axis].max); + SERIAL_ECHOLNPAIR("Axis ", axis_codes[axis], " min:", soft_endstop.min[axis], " max:", soft_endstop.max[axis]); } /** @@ -571,7 +563,7 @@ void restore_feedrate_and_scaling() { * For DELTA/SCARA the XY constraint is based on the smallest * radius within the set software endstops. */ - void apply_motion_limits(float target[XYZ]) { + void apply_motion_limits(xyz_pos_t &target) { if (!soft_endstops_enabled || !all_axes_homed()) return; @@ -579,41 +571,38 @@ void restore_feedrate_and_scaling() { #if HAS_HOTEND_OFFSET && ENABLED(DELTA) // The effector center position will be the target minus the hotend offset. - const float offx = hotend_offset[X_AXIS][active_extruder], offy = hotend_offset[Y_AXIS][active_extruder]; + const xy_pos_t offs = hotend_offset[active_extruder]; #else // SCARA needs to consider the angle of the arm through the entire move, so for now use no tool offset. - constexpr float offx = 0, offy = 0; + constexpr xy_pos_t offs{0}; #endif - const float dist_2 = HYPOT2(target[X_AXIS] - offx, target[Y_AXIS] - offy); - if (dist_2 > delta_max_radius_2) { - const float ratio = (delta_max_radius) / SQRT(dist_2); // 200 / 300 = 0.66 - target[X_AXIS] *= ratio; - target[Y_AXIS] *= ratio; - } + const float dist_2 = HYPOT2(target.x - offs.x, target.y - offs.y); + if (dist_2 > delta_max_radius_2) + target *= delta_max_radius / SQRT(dist_2); // 200 / 300 = 0.66 #else #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MIN_SOFTWARE_ENDSTOP_X) - NOLESS(target[X_AXIS], soft_endstop[X_AXIS].min); + NOLESS(target.x, soft_endstop.min.x); #endif #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MAX_SOFTWARE_ENDSTOP_X) - NOMORE(target[X_AXIS], soft_endstop[X_AXIS].max); + NOMORE(target.x, soft_endstop.max.x); #endif #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MIN_SOFTWARE_ENDSTOP_Y) - NOLESS(target[Y_AXIS], soft_endstop[Y_AXIS].min); + NOLESS(target.y, soft_endstop.min.y); #endif #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MAX_SOFTWARE_ENDSTOP_Y) - NOMORE(target[Y_AXIS], soft_endstop[Y_AXIS].max); + NOMORE(target.y, soft_endstop.max.y); #endif #endif #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MIN_SOFTWARE_ENDSTOP_Z) - NOLESS(target[Z_AXIS], soft_endstop[Z_AXIS].min); + NOLESS(target.z, soft_endstop.min.z); #endif #if !HAS_SOFTWARE_ENDSTOPS || ENABLED(MAX_SOFTWARE_ENDSTOP_Z) - NOMORE(target[Z_AXIS], soft_endstop[Z_AXIS].max); + NOMORE(target.z, soft_endstop.max.z); #endif } @@ -656,27 +645,22 @@ void restore_feedrate_and_scaling() { // Get the top feedrate of the move in the XY plane const float scaled_fr_mm_s = MMS_SCALED(feedrate_mm_s); - const float xdiff = destination[X_AXIS] - current_position[X_AXIS], - ydiff = destination[Y_AXIS] - current_position[Y_AXIS]; + const xyze_float_t diff = destination - current_position; // If the move is only in Z/E don't split up the move - if (!xdiff && !ydiff) { + if (!diff.x && !diff.y) { planner.buffer_line(destination, scaled_fr_mm_s, active_extruder); return false; // caller will update current_position } // Fail if attempting move outside printable radius - if (!position_is_reachable(destination[X_AXIS], destination[Y_AXIS])) return true; - - // Remaining cartesian distances - const float zdiff = destination[Z_AXIS] - current_position[Z_AXIS], - ediff = destination[E_AXIS] - current_position[E_AXIS]; + if (!position_is_reachable(destination)) return true; // Get the linear distance in XYZ - float cartesian_mm = SQRT(sq(xdiff) + sq(ydiff) + sq(zdiff)); + float cartesian_mm = diff.magnitude(); // If the move is very short, check the E move distance - if (UNEAR_ZERO(cartesian_mm)) cartesian_mm = ABS(ediff); + if (UNEAR_ZERO(cartesian_mm)) cartesian_mm = ABS(diff.e); // No E move either? Game over. if (UNEAR_ZERO(cartesian_mm)) return true; @@ -698,13 +682,8 @@ void restore_feedrate_and_scaling() { // The approximate length of each segment const float inv_segments = 1.0f / float(segments), - segment_distance[XYZE] = { - xdiff * inv_segments, - ydiff * inv_segments, - zdiff * inv_segments, - ediff * inv_segments - }, cartesian_segment_mm = cartesian_mm * inv_segments; + const xyze_float_t segment_distance = diff * inv_segments; #if ENABLED(SCARA_FEEDRATE_SCALING) const float inv_duration = scaled_fr_mm_s / cartesian_segment_mm; @@ -719,8 +698,7 @@ void restore_feedrate_and_scaling() { //*/ // Get the current position as starting point - float raw[XYZE]; - COPY(raw, current_position); + xyze_pos_t raw = current_position; // Calculate and execute the segments while (--segments) { @@ -732,7 +710,7 @@ void restore_feedrate_and_scaling() { idle(); } - LOOP_XYZE(i) raw[i] += segment_distance[i]; + raw += segment_distance; if (!planner.buffer_line(raw, scaled_fr_mm_s, active_extruder, cartesian_segment_mm #if ENABLED(SCARA_FEEDRATE_SCALING) @@ -765,24 +743,19 @@ void restore_feedrate_and_scaling() { */ inline void segmented_line_to_destination(const feedRate_t &fr_mm_s, const float segment_size=LEVELED_SEGMENT_LENGTH) { - const float xdiff = destination[X_AXIS] - current_position[X_AXIS], - ydiff = destination[Y_AXIS] - current_position[Y_AXIS]; + const xyze_float_t diff = destination - current_position; // If the move is only in Z/E don't split up the move - if (!xdiff && !ydiff) { + if (!diff.x && !diff.y) { planner.buffer_line(destination, fr_mm_s, active_extruder); return; } - // Remaining cartesian distances - const float zdiff = destination[Z_AXIS] - current_position[Z_AXIS], - ediff = destination[E_AXIS] - current_position[E_AXIS]; - // Get the linear distance in XYZ // If the move is very short, check the E move distance // No E move either? Game over. - float cartesian_mm = SQRT(sq(xdiff) + sq(ydiff) + sq(zdiff)); - if (UNEAR_ZERO(cartesian_mm)) cartesian_mm = ABS(ediff); + float cartesian_mm = diff.magnitude(); + if (UNEAR_ZERO(cartesian_mm)) cartesian_mm = ABS(diff.e); if (UNEAR_ZERO(cartesian_mm)) return; // The length divided by the segment size @@ -792,13 +765,8 @@ void restore_feedrate_and_scaling() { // The approximate length of each segment const float inv_segments = 1.0f / float(segments), - cartesian_segment_mm = cartesian_mm * inv_segments, - segment_distance[XYZE] = { - xdiff * inv_segments, - ydiff * inv_segments, - zdiff * inv_segments, - ediff * inv_segments - }; + cartesian_segment_mm = cartesian_mm * inv_segments; + const xyze_float_t segment_distance = diff * inv_segments; #if ENABLED(SCARA_FEEDRATE_SCALING) const float inv_duration = scaled_fr_mm_s / cartesian_segment_mm; @@ -809,8 +777,7 @@ void restore_feedrate_and_scaling() { // SERIAL_ECHOLNPAIR(" segment_mm=", cartesian_segment_mm); // Get the raw current position as starting point - float raw[XYZE]; - COPY(raw, current_position); + xyze_pos_t raw = current_position; // Calculate and execute the segments while (--segments) { @@ -820,7 +787,7 @@ void restore_feedrate_and_scaling() { next_idle_ms = millis() + 200UL; idle(); } - LOOP_XYZE(i) raw[i] += segment_distance[i]; + raw += segment_distance; if (!planner.buffer_line(raw, fr_mm_s, active_extruder, cartesian_segment_mm #if ENABLED(SCARA_FEEDRATE_SCALING) , inv_duration @@ -846,12 +813,12 @@ void restore_feedrate_and_scaling() { * When a mesh-based leveling system is active, moves are segmented * according to the configuration of the leveling system. * - * Returns true if current_position[] was set to destination[] + * Return true if 'current_position' was set to 'destination' */ inline bool prepare_move_to_destination_cartesian() { const float scaled_fr_mm_s = MMS_SCALED(feedrate_mm_s); #if HAS_MESH - if (planner.leveling_active && planner.leveling_active_at_z(destination[Z_AXIS])) { + if (planner.leveling_active && planner.leveling_active_at_z(destination.z)) { #if ENABLED(AUTO_BED_LEVELING_UBL) ubl.line_to_destination_cartesian(scaled_fr_mm_s, active_extruder); // UBL's motion routine needs to know about return true; // all moves, including Z-only moves. @@ -863,7 +830,7 @@ void restore_feedrate_and_scaling() { * For MBL and ABL-BILINEAR only segment moves when X or Y are involved. * Otherwise fall through to do a direct single move. */ - if (current_position[X_AXIS] != destination[X_AXIS] || current_position[Y_AXIS] != destination[Y_AXIS]) { + if (xy_pos_t(current_position) != xy_pos_t(destination)) { #if ENABLED(MESH_BED_LEVELING) mbl.line_to_destination(scaled_fr_mm_s); #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) @@ -894,8 +861,8 @@ void restore_feedrate_and_scaling() { DualXMode dual_x_carriage_mode = DEFAULT_DUAL_X_CARRIAGE_MODE; float inactive_extruder_x_pos = X2_MAX_POS, // used in mode 0 & 1 - raised_parked_position[XYZE], // used in mode 1 duplicate_extruder_x_offset = DEFAULT_DUPLICATION_X_OFFSET; // used in mode 2 + xyz_pos_t raised_parked_position; // used in mode 1 bool active_extruder_parked = false; // used in mode 1 & 2 millis_t delayed_move_time = 0; // used in mode 1 int16_t duplicate_extruder_temp_offset = 0; // used in mode 2 @@ -910,7 +877,7 @@ void restore_feedrate_and_scaling() { * This allows soft recalibration of the second extruder home position * without firmware reflash (through the M218 command). */ - return hotend_offset[X_AXIS][1] > 0 ? hotend_offset[X_AXIS][1] : X2_HOME_POS; + return hotend_offset[1].x > 0 ? hotend_offset[1].x : X2_HOME_POS; } /** @@ -924,30 +891,30 @@ void restore_feedrate_and_scaling() { case DXC_FULL_CONTROL_MODE: break; case DXC_AUTO_PARK_MODE: - if (current_position[E_AXIS] == destination[E_AXIS]) { + if (current_position.e == destination.e) { // This is a travel move (with no extrusion) // Skip it, but keep track of the current position // (so it can be used as the start of the next non-travel move) if (delayed_move_time != 0xFFFFFFFFUL) { - set_current_from_destination(); - NOLESS(raised_parked_position[Z_AXIS], destination[Z_AXIS]); + current_position = destination; + NOLESS(raised_parked_position.z, destination.z); delayed_move_time = millis(); return true; } } // unpark extruder: 1) raise, 2) move into starting XY position, 3) lower - #define CUR_X current_position[X_AXIS] - #define CUR_Y current_position[Y_AXIS] - #define CUR_Z current_position[Z_AXIS] - #define CUR_E current_position[E_AXIS] - #define RAISED_X raised_parked_position[X_AXIS] - #define RAISED_Y raised_parked_position[Y_AXIS] - #define RAISED_Z raised_parked_position[Z_AXIS] + #define CUR_X current_position.x + #define CUR_Y current_position.y + #define CUR_Z current_position.z + #define CUR_E current_position.e + #define RAISED_X raised_parked_position.x + #define RAISED_Y raised_parked_position.y + #define RAISED_Z raised_parked_position.z if ( planner.buffer_line(RAISED_X, RAISED_Y, RAISED_Z, CUR_E, planner.settings.max_feedrate_mm_s[Z_AXIS], active_extruder)) if (planner.buffer_line( CUR_X, CUR_Y, RAISED_Z, CUR_E, PLANNER_XY_FEEDRATE(), active_extruder)) - planner.buffer_line( CUR_X, CUR_Y, CUR_Z, CUR_E, planner.settings.max_feedrate_mm_s[Z_AXIS], active_extruder); + line_to_current_position(planner.settings.max_feedrate_mm_s[Z_AXIS]); delayed_move_time = 0; active_extruder_parked = false; if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Clear active_extruder_parked"); @@ -955,16 +922,15 @@ void restore_feedrate_and_scaling() { case DXC_MIRRORED_MODE: case DXC_DUPLICATION_MODE: if (active_extruder == 0) { - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Set planner X", inactive_extruder_x_pos, " ... Line to X", current_position[X_AXIS] + duplicate_extruder_x_offset); + xyze_pos_t new_pos = current_position; + if (dual_x_carriage_mode == DXC_DUPLICATION_MODE) + new_pos.x += duplicate_extruder_x_offset; + else + new_pos.x = inactive_extruder_x_pos; // move duplicate extruder into correct duplication position. - planner.set_position_mm(inactive_extruder_x_pos, current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]); - - if (!planner.buffer_line( - dual_x_carriage_mode == DXC_DUPLICATION_MODE ? duplicate_extruder_x_offset + current_position[X_AXIS] : inactive_extruder_x_pos, - current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], - planner.settings.max_feedrate_mm_s[X_AXIS], 1 - ) - ) break; + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Set planner X", inactive_extruder_x_pos, " ... Line to X", new_pos.x); + planner.set_position_mm(inactive_extruder_x_pos, current_position.y, current_position.z, current_position.e); + if (!planner.buffer_line(new_pos, planner.settings.max_feedrate_mm_s[X_AXIS], 1)) break; planner.synchronize(); sync_plan_position(); extruder_duplication_enabled = true; @@ -987,7 +953,7 @@ void restore_feedrate_and_scaling() { * This may result in several calls to planner.buffer_line to * do smaller moves for DELTA, SCARA, mesh moves, etc. * - * Make sure current_position[E] and destination[E] are good + * Make sure current_position.e and destination.e are good * before calling or cold/lengthy extrusion may get missed. * * Before exit, current_position is set to destination. @@ -998,15 +964,15 @@ void prepare_move_to_destination() { #if EITHER(PREVENT_COLD_EXTRUSION, PREVENT_LENGTHY_EXTRUDE) if (!DEBUGGING(DRYRUN)) { - if (destination[E_AXIS] != current_position[E_AXIS]) { + if (destination.e != current_position.e) { #if ENABLED(PREVENT_COLD_EXTRUSION) if (thermalManager.tooColdToExtrude(active_extruder)) { - current_position[E_AXIS] = destination[E_AXIS]; // Behave as if the move really took place, but ignore E part + current_position.e = destination.e; // Behave as if the move really took place, but ignore E part SERIAL_ECHO_MSG(MSG_ERR_COLD_EXTRUDE_STOP); } #endif // PREVENT_COLD_EXTRUSION #if ENABLED(PREVENT_LENGTHY_EXTRUDE) - const float e_delta = ABS(destination[E_AXIS] - current_position[E_AXIS]) * planner.e_factor[active_extruder]; + const float e_delta = ABS(destination.e - current_position.e) * planner.e_factor[active_extruder]; if (e_delta > (EXTRUDE_MAXLENGTH)) { #if ENABLED(MIXING_EXTRUDER) bool ignore_e = false; @@ -1018,7 +984,7 @@ void prepare_move_to_destination() { constexpr bool ignore_e = true; #endif if (ignore_e) { - current_position[E_AXIS] = destination[E_AXIS]; // Behave as if the move really took place, but ignore E part + current_position.e = destination.e; // Behave as if the move really took place, but ignore E part SERIAL_ECHO_MSG(MSG_ERR_LONG_EXTRUDE_STOP); } } @@ -1046,7 +1012,7 @@ void prepare_move_to_destination() { #endif ) return; - set_current_from_destination(); + current_position = destination; } uint8_t axes_need_homing(uint8_t axis_bits/*=0x07*/) { @@ -1293,13 +1259,13 @@ void do_homing_move(const AxisEnum axis, const float distance, const feedRate_t current_position[axis] = distance; line_to_current_position(real_fr_mm_s); #else - float target[ABCE] = { planner.get_axis_position_mm(A_AXIS), planner.get_axis_position_mm(B_AXIS), planner.get_axis_position_mm(C_AXIS), planner.get_axis_position_mm(E_AXIS) }; + abce_pos_t target = { planner.get_axis_position_mm(A_AXIS), planner.get_axis_position_mm(B_AXIS), planner.get_axis_position_mm(C_AXIS), planner.get_axis_position_mm(E_AXIS) }; target[axis] = 0; planner.set_machine_position_mm(target); target[axis] = distance; #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) - const float delta_mm_cart[XYZE] = {0, 0, 0, 0}; + const xyze_float_t delta_mm_cart{0}; #endif // Set delta/cartesian axes directly @@ -1356,7 +1322,7 @@ void set_axis_is_at_home(const AxisEnum axis) { #if ENABLED(DUAL_X_CARRIAGE) if (axis == X_AXIS && (active_extruder == 1 || dual_x_carriage_mode == DXC_DUPLICATION_MODE)) { - current_position[X_AXIS] = x_home_pos(active_extruder); + current_position.x = x_home_pos(active_extruder); return; } #endif @@ -1366,7 +1332,7 @@ void set_axis_is_at_home(const AxisEnum axis) { #elif ENABLED(DELTA) current_position[axis] = (axis == Z_AXIS ? delta_height #if HAS_BED_PROBE - - probe_offset[Z_AXIS] + - probe_offset.z #endif : base_home_pos(axis)); #else @@ -1380,9 +1346,9 @@ void set_axis_is_at_home(const AxisEnum axis) { if (axis == Z_AXIS) { #if HOMING_Z_WITH_PROBE - current_position[Z_AXIS] -= probe_offset[Z_AXIS]; + current_position.z -= probe_offset.z; - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("*** Z HOMED WITH PROBE (Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) ***\n> probe_offset[Z_AXIS] = ", probe_offset[Z_AXIS]); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("*** Z HOMED WITH PROBE (Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN) ***\n> probe_offset.z = ", probe_offset.z); #else @@ -1677,7 +1643,7 @@ void homeaxis(const AxisEnum axis) { #endif #ifdef HOMING_BACKOFF_MM - constexpr float endstop_backoff[XYZ] = HOMING_BACKOFF_MM; + constexpr xyz_float_t endstop_backoff = HOMING_BACKOFF_MM; const float backoff_mm = endstop_backoff[ #if ENABLED(DELTA) Z_AXIS diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index 9c465a1d5954..9ea2ebe5298a 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -61,15 +61,15 @@ constexpr float slop = 0.0001; extern bool relative_mode; -extern float current_position[XYZE], // High-level current tool position - destination[XYZE]; // Destination for a move +extern xyze_pos_t current_position, // High-level current tool position + destination; // Destination for a move // Scratch space for a cartesian result -extern float cartes[XYZ]; +extern xyz_pos_t cartes; // Until kinematics.cpp is created, declare this here #if IS_KINEMATIC - extern float delta[ABC]; + extern abc_pos_t delta; #endif #if HAS_ABL_NOT_UBL @@ -81,6 +81,10 @@ extern float cartes[XYZ]; #define XY_PROBE_FEEDRATE_MM_S PLANNER_XY_FEEDRATE() #endif +#if ENABLED(Z_SAFE_HOMING) + constexpr xy_float_t safe_homing_xy = { Z_SAFE_HOMING_X_POINT, Z_SAFE_HOMING_Y_POINT }; +#endif + /** * Feed rates are often configured with mm/m * but the planner and stepper like mm/s units. @@ -106,10 +110,10 @@ extern int16_t feedrate_percentage; FORCE_INLINE float pgm_read_any(const float *p) { return pgm_read_float(p); } FORCE_INLINE signed char pgm_read_any(const signed char *p) { return pgm_read_byte(p); } -#define XYZ_DEFS(type, array, CONFIG) \ - extern const type array##_P[XYZ]; \ - FORCE_INLINE type array(AxisEnum axis) { return pgm_read_any(&array##_P[axis]); } \ - typedef void __void_##CONFIG##__ +#define XYZ_DEFS(T, NAME, OPT) \ + extern const XYZval NAME##_P; \ + FORCE_INLINE T NAME(AxisEnum axis) { return pgm_read_any(&NAME##_P[axis]); } \ + typedef void __void_##OPT##__ XYZ_DEFS(float, base_min_pos, MIN_POS); XYZ_DEFS(float, base_max_pos, MAX_POS); @@ -125,19 +129,19 @@ XYZ_DEFS(signed char, home_dir, HOME_DIR); #endif #if HAS_HOTEND_OFFSET - extern float hotend_offset[XYZ][HOTENDS]; + extern xyz_pos_t hotend_offset[HOTENDS]; void reset_hotend_offsets(); -#elif HOTENDS > 0 - constexpr float hotend_offset[XYZ][HOTENDS] = { { 0 }, { 0 }, { 0 } }; +#elif HOTENDS + constexpr xyz_pos_t hotend_offset[HOTENDS] = { { 0 } }; #else - constexpr float hotend_offset[XYZ][1] = { { 0 }, { 0 }, { 0 } }; + constexpr xyz_pos_t hotend_offset[1] = { { 0 } }; #endif -typedef struct { float min, max; } axis_limits_t; +typedef struct { xyz_pos_t min, max; } axis_limits_t; #if HAS_SOFTWARE_ENDSTOPS extern bool soft_endstops_enabled; - extern axis_limits_t soft_endstop[XYZ]; - void apply_motion_limits(float target[XYZ]); + extern axis_limits_t soft_endstop; + void apply_motion_limits(xyz_pos_t &target); void update_software_endstops(const AxisEnum axis #if HAS_HOTEND_OFFSET , const uint8_t old_tool_index=0, const uint8_t new_tool_index=0 @@ -145,16 +149,15 @@ typedef struct { float min, max; } axis_limits_t; ); #else constexpr bool soft_endstops_enabled = false; - //constexpr axis_limits_t soft_endstop[XYZ] = { { X_MIN_POS, X_MAX_POS }, { Y_MIN_POS, Y_MAX_POS }, { Z_MIN_POS, Z_MAX_POS } }; + //constexpr axis_limits_t soft_endstop = { + // { X_MIN_POS, Y_MIN_POS, Z_MIN_POS }, + // { X_MAX_POS, Y_MAX_POS, Z_MAX_POS } }; #define apply_motion_limits(V) NOOP #define update_software_endstops(...) NOOP #endif void report_current_position(); -inline void set_current_from_destination() { COPY(current_position, destination); } -inline void set_destination_from_current() { COPY(destination, current_position); } - void get_cartesian_from_steppers(); void set_current_from_steppers_for_axis(const AxisEnum axis); @@ -202,12 +205,17 @@ void do_blocking_move_to_y(const float &ry, const feedRate_t &fr_mm_s=0.0f); void do_blocking_move_to_z(const float &rz, const feedRate_t &fr_mm_s=0.0f); void do_blocking_move_to_xy(const float &rx, const float &ry, const feedRate_t &fr_mm_s=0.0f); -FORCE_INLINE void do_blocking_move_to(const float (&raw)[XYZ], const feedRate_t &fr_mm_s=0) { - do_blocking_move_to(raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS], fr_mm_s); +FORCE_INLINE void do_blocking_move_to(const xy_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) { + do_blocking_move_to(raw.x, raw.y, current_position.z, fr_mm_s); } - -FORCE_INLINE void do_blocking_move_to(const float (&raw)[XYZE], const feedRate_t &fr_mm_s=0) { - do_blocking_move_to(raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS], fr_mm_s); +FORCE_INLINE void do_blocking_move_to(const xyz_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) { + do_blocking_move_to(raw.x, raw.y, raw.z, fr_mm_s); +} +FORCE_INLINE void do_blocking_move_to(const xyze_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) { + do_blocking_move_to(raw.x, raw.y, raw.z, fr_mm_s); +} +FORCE_INLINE void do_blocking_move_to_xy(const xy_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) { + do_blocking_move_to_xy(raw.x, raw.y, fr_mm_s); } void remember_feedrate_and_scaling(); @@ -238,24 +246,36 @@ void homeaxis(const AxisEnum axis); */ #if HAS_HOME_OFFSET || HAS_POSITION_SHIFT #if HAS_HOME_OFFSET - extern float home_offset[XYZ]; + extern xyz_pos_t home_offset; #endif #if HAS_POSITION_SHIFT - extern float position_shift[XYZ]; + extern xyz_pos_t position_shift; #endif #if HAS_HOME_OFFSET && HAS_POSITION_SHIFT - extern float workspace_offset[XYZ]; - #define WORKSPACE_OFFSET(AXIS) workspace_offset[AXIS] + extern xyz_pos_t workspace_offset; + #define _WS workspace_offset #elif HAS_HOME_OFFSET - #define WORKSPACE_OFFSET(AXIS) home_offset[AXIS] + #define _WS home_offset #else - #define WORKSPACE_OFFSET(AXIS) position_shift[AXIS] + #define _WS position_shift #endif - #define NATIVE_TO_LOGICAL(POS, AXIS) ((POS) + WORKSPACE_OFFSET(AXIS)) - #define LOGICAL_TO_NATIVE(POS, AXIS) ((POS) - WORKSPACE_OFFSET(AXIS)) + #define NATIVE_TO_LOGICAL(POS, AXIS) ((POS) + _WS[AXIS]) + #define LOGICAL_TO_NATIVE(POS, AXIS) ((POS) - _WS[AXIS]) + FORCE_INLINE void toLogical(xy_pos_t &raw) { raw += _WS; } + FORCE_INLINE void toLogical(xyz_pos_t &raw) { raw += _WS; } + FORCE_INLINE void toLogical(xyze_pos_t &raw) { raw += _WS; } + FORCE_INLINE void toNative(xy_pos_t &raw) { raw -= _WS; } + FORCE_INLINE void toNative(xyz_pos_t &raw) { raw -= _WS; } + FORCE_INLINE void toNative(xyze_pos_t &raw) { raw -= _WS; } #else #define NATIVE_TO_LOGICAL(POS, AXIS) (POS) #define LOGICAL_TO_NATIVE(POS, AXIS) (POS) + FORCE_INLINE void toLogical(xy_pos_t &raw) { UNUSED(raw); } + FORCE_INLINE void toLogical(xyz_pos_t &raw) { UNUSED(raw); } + FORCE_INLINE void toLogical(xyze_pos_t &raw) { UNUSED(raw); } + FORCE_INLINE void toNative(xy_pos_t &raw) { UNUSED(raw); } + FORCE_INLINE void toNative(xyz_pos_t &raw) { UNUSED(raw); } + FORCE_INLINE void toNative(xyze_pos_t &raw) { UNUSED(raw); } #endif #define LOGICAL_X_POSITION(POS) NATIVE_TO_LOGICAL(POS, X_AXIS) #define LOGICAL_Y_POSITION(POS) NATIVE_TO_LOGICAL(POS, Y_AXIS) @@ -270,7 +290,7 @@ void homeaxis(const AxisEnum axis); #if IS_KINEMATIC // (DELTA or SCARA) #if HAS_SCARA_OFFSET - extern float scara_home_offset[ABC]; // A and B angular offsets, Z mm offset + extern abc_pos_t scara_home_offset; // A and B angular offsets, Z mm offset #endif // Return true if the given point is within the printable area @@ -288,11 +308,15 @@ void homeaxis(const AxisEnum axis); #endif } + inline bool position_is_reachable(const xy_pos_t &pos, const float inset=0) { + return position_is_reachable(pos.x, pos.y, inset); + } + #if HAS_BED_PROBE // Return true if the both nozzle and the probe can reach the given point. // Note: This won't work on SCARA since the probe offset rotates with the arm. inline bool position_is_reachable_by_probe(const float &rx, const float &ry) { - return position_is_reachable(rx - probe_offset[X_AXIS], ry - probe_offset[Y_AXIS]) + return position_is_reachable(rx - probe_offset.x, ry - probe_offset.y) && position_is_reachable(rx, ry, ABS(MIN_PROBE_EDGE)); } #endif @@ -311,6 +335,7 @@ void homeaxis(const AxisEnum axis); return WITHIN(rx, X_MIN_POS - slop, X_MAX_POS + slop); #endif } + inline bool position_is_reachable(const xy_pos_t &pos) { return position_is_reachable(pos.x, pos.y); } #if HAS_BED_PROBE /** @@ -321,7 +346,7 @@ void homeaxis(const AxisEnum axis); * nozzle must be be able to reach +10,-10. */ inline bool position_is_reachable_by_probe(const float &rx, const float &ry) { - return position_is_reachable(rx - probe_offset[X_AXIS], ry - probe_offset[Y_AXIS]) + return position_is_reachable(rx - probe_offset.x, ry - probe_offset.y) && WITHIN(rx, probe_min_x() - slop, probe_max_x() + slop) && WITHIN(ry, probe_min_y() - slop, probe_max_y() + slop); } @@ -332,6 +357,8 @@ void homeaxis(const AxisEnum axis); #if !HAS_BED_PROBE FORCE_INLINE bool position_is_reachable_by_probe(const float &rx, const float &ry) { return position_is_reachable(rx, ry); } #endif +FORCE_INLINE bool position_is_reachable_by_probe(const xy_int_t &pos) { return position_is_reachable_by_probe(pos.x, pos.y); } +FORCE_INLINE bool position_is_reachable_by_probe(const xy_pos_t &pos) { return position_is_reachable_by_probe(pos.x, pos.y); } /** * Duplication mode @@ -358,8 +385,8 @@ void homeaxis(const AxisEnum axis); extern DualXMode dual_x_carriage_mode; extern float inactive_extruder_x_pos, // Used in mode 0 & 1 - raised_parked_position[XYZE], // Used in mode 1 duplicate_extruder_x_offset; // Used in mode 2 & 3 + extern xyz_pos_t raised_parked_position; // Used in mode 1 extern bool active_extruder_parked; // Used in mode 1, 2 & 3 extern millis_t delayed_move_time; // Used in mode 1 extern int16_t duplicate_extruder_temp_offset; // Used in mode 2 & 3 diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 2715221f329f..8d488e1f9857 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -137,9 +137,9 @@ float Planner::steps_to_mm[XYZE_N]; // (mm) Millimeters per step #endif #if HAS_CLASSIC_JERK #if BOTH(JUNCTION_DEVIATION, LIN_ADVANCE) - float Planner::max_jerk[XYZ]; // (mm/s^2) M205 XYZ - The largest speed change requiring no acceleration. + xyz_pos_t Planner::max_jerk; // (mm/s^2) M205 XYZ - The largest speed change requiring no acceleration. #else - float Planner::max_jerk[XYZE]; // (mm/s^2) M205 XYZE - The largest speed change requiring no acceleration. + xyze_pos_t Planner::max_jerk; // (mm/s^2) M205 XYZE - The largest speed change requiring no acceleration. #endif #endif @@ -187,12 +187,12 @@ skew_factor_t Planner::skew_factor; // Initialized by settings.load() // private: -int32_t Planner::position[NUM_AXIS] = { 0 }; +xyze_long_t Planner::position{0}; uint32_t Planner::cutoff_long; -float Planner::previous_speed[NUM_AXIS], - Planner::previous_nominal_speed_sqr; +xyze_float_t Planner::previous_speed; +float Planner::previous_nominal_speed_sqr; #if ENABLED(DISABLE_INACTIVE_EXTRUDER) uint8_t Planner::g_uc_extruder_last_move[EXTRUDERS] = { 0 }; @@ -202,7 +202,7 @@ float Planner::previous_speed[NUM_AXIS], // Old direction bits. Used for speed calculations unsigned char Planner::old_direction_bits = 0; // Segment times (in µs). Used for speed calculations - uint32_t Planner::axis_segment_time_us[2][3] = { { MAX_FREQ_TIME_US + 1, 0, 0 }, { MAX_FREQ_TIME_US + 1, 0, 0 } }; + xy_ulong_t Planner::axis_segment_time_us[3] = { { MAX_FREQ_TIME_US + 1, MAX_FREQ_TIME_US + 1 } }; #endif #if ENABLED(LIN_ADVANCE) @@ -210,11 +210,11 @@ float Planner::previous_speed[NUM_AXIS], #endif #if HAS_POSITION_FLOAT - float Planner::position_float[XYZE]; // Needed for accurate maths. Steps cannot be used! + xyze_pos_t Planner::position_float; // Needed for accurate maths. Steps cannot be used! #endif #if IS_KINEMATIC - float Planner::position_cart[XYZE]; + xyze_pos_t Planner::position_cart; #endif #if HAS_SPI_LCD @@ -228,14 +228,14 @@ float Planner::previous_speed[NUM_AXIS], Planner::Planner() { init(); } void Planner::init() { - ZERO(position); + position.reset(); #if HAS_POSITION_FLOAT - ZERO(position_float); + position_float.reset(); #endif #if IS_KINEMATIC - ZERO(position_cart); + position_cart.reset(); #endif - ZERO(previous_speed); + previous_speed.reset(); previous_nominal_speed_sqr = 0; #if ABL_PLANAR bed_level_matrix.set_to_identity(); @@ -1155,8 +1155,8 @@ void Planner::recalculate() { float high = 0.0; for (uint8_t b = block_buffer_tail; b != block_buffer_head; b = next_block_index(b)) { block_t* block = &block_buffer[b]; - if (block->steps[X_AXIS] || block->steps[Y_AXIS] || block->steps[Z_AXIS]) { - const float se = (float)block->steps[E_AXIS] / block->step_event_count * SQRT(block->nominal_speed_sqr); // mm/sec; + if (block->steps.x || block->steps.y || block->steps.z) { + const float se = (float)block->steps.e / block->step_event_count * SQRT(block->nominal_speed_sqr); // mm/sec; NOLESS(high, se); } } @@ -1176,7 +1176,7 @@ void Planner::recalculate() { void Planner::check_axes_activity() { #if ANY(DISABLE_X, DISABLE_Y, DISABLE_Z, DISABLE_E) - uint8_t axis_active[NUM_AXIS] = { 0 }; + xyze_bool_t axis_active = { false }; #endif #if FAN_COUNT > 0 @@ -1236,16 +1236,16 @@ void Planner::check_axes_activity() { } #if ENABLED(DISABLE_X) - if (!axis_active[X_AXIS]) disable_X(); + if (!axis_active.x) disable_X(); #endif #if ENABLED(DISABLE_Y) - if (!axis_active[Y_AXIS]) disable_Y(); + if (!axis_active.y) disable_Y(); #endif #if ENABLED(DISABLE_Z) - if (!axis_active[Z_AXIS]) disable_Z(); + if (!axis_active.z) disable_Z(); #endif #if ENABLED(DISABLE_E) - if (!axis_active[E_AXIS]) disable_e_steppers(); + if (!axis_active.e) disable_e_steppers(); #endif #if FAN_COUNT > 0 @@ -1354,40 +1354,32 @@ void Planner::check_axes_activity() { * rx, ry, rz - Cartesian positions in mm * Leveled XYZ on completion */ - void Planner::apply_leveling(float &rx, float &ry, float &rz) { + void Planner::apply_leveling(xyz_pos_t &raw) { if (!leveling_active) return; #if ABL_PLANAR - float dx = rx - (X_TILT_FULCRUM), - dy = ry - (Y_TILT_FULCRUM); - - apply_rotation_xyz(bed_level_matrix, dx, dy, rz); - - rx = dx + X_TILT_FULCRUM; - ry = dy + Y_TILT_FULCRUM; + xy_pos_t d = raw - level_fulcrum; + apply_rotation_xyz(bed_level_matrix, d.x, d.y, raw.z); + raw = d + level_fulcrum; #elif HAS_MESH #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) - const float fade_scaling_factor = fade_scaling_factor_for_z(rz); + const float fade_scaling_factor = fade_scaling_factor_for_z(raw.z); #else constexpr float fade_scaling_factor = 1.0; #endif - #if ENABLED(AUTO_BED_LEVELING_BILINEAR) - const float raw[XYZ] = { rx, ry, 0 }; - #endif - - rz += ( + raw.z += ( #if ENABLED(MESH_BED_LEVELING) - mbl.get_z(rx, ry + mbl.get_z(raw #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) , fade_scaling_factor #endif ) #elif ENABLED(AUTO_BED_LEVELING_UBL) - fade_scaling_factor ? fade_scaling_factor * ubl.get_z_correction(rx, ry) : 0.0 + fade_scaling_factor ? fade_scaling_factor * ubl.get_z_correction(raw) : 0.0 #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) fade_scaling_factor ? fade_scaling_factor * bilinear_z_offset(raw) : 0.0 #endif @@ -1396,7 +1388,7 @@ void Planner::check_axes_activity() { #endif } - void Planner::unapply_leveling(float raw[XYZ]) { + void Planner::unapply_leveling(xyz_pos_t &raw) { if (leveling_active) { @@ -1404,31 +1396,27 @@ void Planner::check_axes_activity() { matrix_3x3 inverse = matrix_3x3::transpose(bed_level_matrix); - float dx = raw[X_AXIS] - (X_TILT_FULCRUM), - dy = raw[Y_AXIS] - (Y_TILT_FULCRUM); - - apply_rotation_xyz(inverse, dx, dy, raw[Z_AXIS]); - - raw[X_AXIS] = dx + X_TILT_FULCRUM; - raw[Y_AXIS] = dy + Y_TILT_FULCRUM; + xy_pos_t d = raw - level_fulcrum; + apply_rotation_xyz(inverse, d.x, d.y, raw.z); + raw = d + level_fulcrum; #elif HAS_MESH #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) - const float fade_scaling_factor = fade_scaling_factor_for_z(raw[Z_AXIS]); + const float fade_scaling_factor = fade_scaling_factor_for_z(raw.z); #else constexpr float fade_scaling_factor = 1.0; #endif - raw[Z_AXIS] -= ( + raw.z -= ( #if ENABLED(MESH_BED_LEVELING) - mbl.get_z(raw[X_AXIS], raw[Y_AXIS] + mbl.get_z(raw #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) , fade_scaling_factor #endif ) #elif ENABLED(AUTO_BED_LEVELING_UBL) - fade_scaling_factor ? fade_scaling_factor * ubl.get_z_correction(raw[X_AXIS], raw[Y_AXIS]) : 0.0 + fade_scaling_factor ? fade_scaling_factor * ubl.get_z_correction(raw) : 0.0 #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) fade_scaling_factor ? fade_scaling_factor * bilinear_z_offset(raw) : 0.0 #endif @@ -1438,7 +1426,7 @@ void Planner::check_axes_activity() { } #if ENABLED(SKEW_CORRECTION) - unskew(raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS]); + unskew(raw); #endif } @@ -1563,12 +1551,12 @@ void Planner::synchronize() { * * Returns true if movement was properly queued, false otherwise */ -bool Planner::_buffer_steps(const int32_t (&target)[XYZE] +bool Planner::_buffer_steps(const xyze_long_t &target #if HAS_POSITION_FLOAT - , const float (&target_float)[ABCE] + , const xyze_pos_t &target_float #endif #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) - , const float (&delta_mm_cart)[XYZE] + , const xyze_float_t &delta_mm_cart #endif , feedRate_t fr_mm_s, const uint8_t extruder, const float &millimeters ) { @@ -1627,33 +1615,33 @@ bool Planner::_buffer_steps(const int32_t (&target)[XYZE] * Returns true is movement is acceptable, false otherwise */ bool Planner::_populate_block(block_t * const block, bool split_move, - const int32_t (&target)[ABCE] + const abce_long_t &target #if HAS_POSITION_FLOAT - , const float (&target_float)[ABCE] + , const xyze_pos_t &target_float #endif #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) - , const float (&delta_mm_cart)[XYZE] + , const xyze_float_t &delta_mm_cart #endif , feedRate_t fr_mm_s, const uint8_t extruder, const float &millimeters/*=0.0*/ ) { - const int32_t da = target[A_AXIS] - position[A_AXIS], - db = target[B_AXIS] - position[B_AXIS], - dc = target[C_AXIS] - position[C_AXIS]; + const int32_t da = target.a - position.a, + db = target.b - position.b, + dc = target.c - position.c; #if EXTRUDERS - int32_t de = target[E_AXIS] - position[E_AXIS]; + int32_t de = target.e - position.e; #else constexpr int32_t de = 0; #endif /* <-- add a slash to enable SERIAL_ECHOLNPAIR(" _populate_block FR:", fr_mm_s, - " A:", target[A_AXIS], " (", da, " steps)" - " B:", target[B_AXIS], " (", db, " steps)" - " C:", target[C_AXIS], " (", dc, " steps)" + " A:", target.a, " (", da, " steps)" + " B:", target.b, " (", db, " steps)" + " C:", target.c, " (", dc, " steps)" #if EXTRUDERS - " E:", target[E_AXIS], " (", de, " steps)" + " E:", target.e, " (", de, " steps)" #endif ); //*/ @@ -1662,9 +1650,9 @@ bool Planner::_populate_block(block_t * const block, bool split_move, if (de) { #if ENABLED(PREVENT_COLD_EXTRUSION) if (thermalManager.tooColdToExtrude(extruder)) { - position[E_AXIS] = target[E_AXIS]; // Behave as if the move really took place, but ignore E part + position.e = target.e; // Behave as if the move really took place, but ignore E part #if HAS_POSITION_FLOAT - position_float[E_AXIS] = target_float[E_AXIS]; + position_float.e = target_float.e; #endif de = 0; // no difference SERIAL_ECHO_MSG(MSG_ERR_COLD_EXTRUDE_STOP); @@ -1684,9 +1672,9 @@ bool Planner::_populate_block(block_t * const block, bool split_move, constexpr bool ignore_e = true; #endif if (ignore_e) { - position[E_AXIS] = target[E_AXIS]; // Behave as if the move really took place, but ignore E part + position.e = target.e; // Behave as if the move really took place, but ignore E part #if HAS_POSITION_FLOAT - position_float[E_AXIS] = target_float[E_AXIS]; + position_float.e = target_float.e; #endif de = 0; // no difference SERIAL_ECHO_MSG(MSG_ERR_LONG_EXTRUDE_STOP); @@ -1739,26 +1727,16 @@ bool Planner::_populate_block(block_t * const block, bool split_move, // Number of steps for each axis // See http://www.corexy.com/theory.html #if CORE_IS_XY - block->steps[A_AXIS] = ABS(da + db); - block->steps[B_AXIS] = ABS(da - db); - block->steps[Z_AXIS] = ABS(dc); + block->steps.set(ABS(da + db), ABS(da - db), ABS(dc)); #elif CORE_IS_XZ - block->steps[A_AXIS] = ABS(da + dc); - block->steps[Y_AXIS] = ABS(db); - block->steps[C_AXIS] = ABS(da - dc); + block->steps.set(ABS(da + dc), ABS(db), ABS(da - dc)); #elif CORE_IS_YZ - block->steps[X_AXIS] = ABS(da); - block->steps[B_AXIS] = ABS(db + dc); - block->steps[C_AXIS] = ABS(db - dc); + block->steps.set(ABS(da), ABS(db + dc), ABS(db - dc)); #elif IS_SCARA - block->steps[A_AXIS] = ABS(da); - block->steps[B_AXIS] = ABS(db); - block->steps[Z_AXIS] = ABS(dc); + block->steps.set(ABS(da), ABS(db), ABS(dc)); #else // default non-h-bot planning - block->steps[A_AXIS] = ABS(da); - block->steps[B_AXIS] = ABS(db); - block->steps[C_AXIS] = ABS(dc); + block->steps.set(ABS(da), ABS(db), ABS(dc)); #endif /** @@ -1769,42 +1747,45 @@ bool Planner::_populate_block(block_t * const block, bool split_move, * So we need to create other 2 "AXIS", named X_HEAD and Y_HEAD, meaning the real displacement of the Head. * Having the real displacement of the head, we can calculate the total movement length and apply the desired speed. */ + struct DeltaMM : abce_float_t { + #if IS_CORE + xyz_pos_t head; + #endif + } delta_mm; #if IS_CORE - float delta_mm[Z_HEAD + 1]; #if CORE_IS_XY - delta_mm[X_HEAD] = da * steps_to_mm[A_AXIS]; - delta_mm[Y_HEAD] = db * steps_to_mm[B_AXIS]; - delta_mm[Z_AXIS] = dc * steps_to_mm[Z_AXIS]; - delta_mm[A_AXIS] = (da + db) * steps_to_mm[A_AXIS]; - delta_mm[B_AXIS] = CORESIGN(da - db) * steps_to_mm[B_AXIS]; + delta_mm.head.x = da * steps_to_mm[A_AXIS]; + delta_mm.head.y = db * steps_to_mm[B_AXIS]; + delta_mm.z = dc * steps_to_mm[Z_AXIS]; + delta_mm.a = (da + db) * steps_to_mm[A_AXIS]; + delta_mm.b = CORESIGN(da - db) * steps_to_mm[B_AXIS]; #elif CORE_IS_XZ - delta_mm[X_HEAD] = da * steps_to_mm[A_AXIS]; - delta_mm[Y_AXIS] = db * steps_to_mm[Y_AXIS]; - delta_mm[Z_HEAD] = dc * steps_to_mm[C_AXIS]; - delta_mm[A_AXIS] = (da + dc) * steps_to_mm[A_AXIS]; - delta_mm[C_AXIS] = CORESIGN(da - dc) * steps_to_mm[C_AXIS]; + delta_mm.head.x = da * steps_to_mm[A_AXIS]; + delta_mm.y = db * steps_to_mm[Y_AXIS]; + delta_mm.head.z = dc * steps_to_mm[C_AXIS]; + delta_mm.a = (da + dc) * steps_to_mm[A_AXIS]; + delta_mm.c = CORESIGN(da - dc) * steps_to_mm[C_AXIS]; #elif CORE_IS_YZ - delta_mm[X_AXIS] = da * steps_to_mm[X_AXIS]; - delta_mm[Y_HEAD] = db * steps_to_mm[B_AXIS]; - delta_mm[Z_HEAD] = dc * steps_to_mm[C_AXIS]; - delta_mm[B_AXIS] = (db + dc) * steps_to_mm[B_AXIS]; - delta_mm[C_AXIS] = CORESIGN(db - dc) * steps_to_mm[C_AXIS]; + delta_mm.x = da * steps_to_mm[X_AXIS]; + delta_mm.head.y = db * steps_to_mm[B_AXIS]; + delta_mm.head.z = dc * steps_to_mm[C_AXIS]; + delta_mm.b = (db + dc) * steps_to_mm[B_AXIS]; + delta_mm.c = CORESIGN(db - dc) * steps_to_mm[C_AXIS]; #endif #else - float delta_mm[ABCE]; - delta_mm[A_AXIS] = da * steps_to_mm[A_AXIS]; - delta_mm[B_AXIS] = db * steps_to_mm[B_AXIS]; - delta_mm[C_AXIS] = dc * steps_to_mm[C_AXIS]; + delta_mm.a = da * steps_to_mm[A_AXIS]; + delta_mm.b = db * steps_to_mm[B_AXIS]; + delta_mm.c = dc * steps_to_mm[C_AXIS]; #endif #if EXTRUDERS - delta_mm[E_AXIS] = esteps_float * steps_to_mm[E_AXIS_N(extruder)]; + delta_mm.e = esteps_float * steps_to_mm[E_AXIS_N(extruder)]; #endif - if (block->steps[A_AXIS] < MIN_STEPS_PER_SEGMENT && block->steps[B_AXIS] < MIN_STEPS_PER_SEGMENT && block->steps[C_AXIS] < MIN_STEPS_PER_SEGMENT) { + if (block->steps.a < MIN_STEPS_PER_SEGMENT && block->steps.b < MIN_STEPS_PER_SEGMENT && block->steps.c < MIN_STEPS_PER_SEGMENT) { block->millimeters = (0 #if EXTRUDERS - + ABS(delta_mm[E_AXIS]) + + ABS(delta_mm.e) #endif ); } @@ -1814,13 +1795,13 @@ bool Planner::_populate_block(block_t * const block, bool split_move, else block->millimeters = SQRT( #if CORE_IS_XY - sq(delta_mm[X_HEAD]) + sq(delta_mm[Y_HEAD]) + sq(delta_mm[Z_AXIS]) + sq(delta_mm.head.x) + sq(delta_mm.head.y) + sq(delta_mm.z) #elif CORE_IS_XZ - sq(delta_mm[X_HEAD]) + sq(delta_mm[Y_AXIS]) + sq(delta_mm[Z_HEAD]) + sq(delta_mm.head.x) + sq(delta_mm.y) + sq(delta_mm.head.z) #elif CORE_IS_YZ - sq(delta_mm[X_AXIS]) + sq(delta_mm[Y_HEAD]) + sq(delta_mm[Z_HEAD]) + sq(delta_mm.x) + sq(delta_mm.head.y) + sq(delta_mm.head.z) #else - sq(delta_mm[X_AXIS]) + sq(delta_mm[Y_AXIS]) + sq(delta_mm[Z_AXIS]) + sq(delta_mm.x) + sq(delta_mm.y) + sq(delta_mm.z) #endif ); @@ -1839,10 +1820,10 @@ bool Planner::_populate_block(block_t * const block, bool split_move, } #if EXTRUDERS - block->steps[E_AXIS] = esteps; + block->steps.e = esteps; #endif - block->step_event_count = _MAX(block->steps[A_AXIS], block->steps[B_AXIS], block->steps[C_AXIS], esteps); + block->step_event_count = _MAX(block->steps.a, block->steps.b, block->steps.c, esteps); // Bail if this is a zero-length block if (block->step_event_count < MIN_STEPS_PER_SEGMENT) return false; @@ -1865,36 +1846,36 @@ bool Planner::_populate_block(block_t * const block, bool split_move, #endif #if ENABLED(AUTO_POWER_CONTROL) - if (block->steps[X_AXIS] || block->steps[Y_AXIS] || block->steps[Z_AXIS]) + if (block->steps.x || block->steps.y || block->steps.z) powerManager.power_on(); #endif // Enable active axes #if CORE_IS_XY - if (block->steps[A_AXIS] || block->steps[B_AXIS]) { + if (block->steps.a || block->steps.b) { enable_X(); enable_Y(); } #if DISABLED(Z_LATE_ENABLE) - if (block->steps[Z_AXIS]) enable_Z(); + if (block->steps.z) enable_Z(); #endif #elif CORE_IS_XZ - if (block->steps[A_AXIS] || block->steps[C_AXIS]) { + if (block->steps.a || block->steps.c) { enable_X(); enable_Z(); } - if (block->steps[Y_AXIS]) enable_Y(); + if (block->steps.y) enable_Y(); #elif CORE_IS_YZ - if (block->steps[B_AXIS] || block->steps[C_AXIS]) { + if (block->steps.b || block->steps.c) { enable_Y(); enable_Z(); } - if (block->steps[X_AXIS]) enable_X(); + if (block->steps.x) enable_X(); #else - if (block->steps[X_AXIS]) enable_X(); - if (block->steps[Y_AXIS]) enable_Y(); + if (block->steps.x) enable_X(); + if (block->steps.y) enable_Y(); #if DISABLED(Z_LATE_ENABLE) - if (block->steps[Z_AXIS]) enable_Z(); + if (block->steps.z) enable_Z(); #endif #endif @@ -2074,20 +2055,21 @@ bool Planner::_populate_block(block_t * const block, bool split_move, #if ENABLED(FILAMENT_WIDTH_SENSOR) if (extruder == FILAMENT_SENSOR_EXTRUDER_NUM) // Only for extruder with filament sensor - filwidth.advance_e(delta_mm[E_AXIS]); + filwidth.advance_e(delta_mm.e); #endif // Calculate and limit speed in mm/sec for each axis - float current_speed[NUM_AXIS], speed_factor = 1.0f; // factor <1 decreases speed + xyze_float_t current_speed; + float speed_factor = 1.0f; // factor <1 decreases speed LOOP_XYZE(i) { #if BOTH(MIXING_EXTRUDER, RETRACT_SYNC_MIXING) // In worst case, only one extruder running, no change is needed. // In best case, all extruders run the same amount, we can divide by MIXING_STEPPERS float delta_mm_i = 0; if (i == E_AXIS && mixer.get_current_vtool() == MIXER_AUTORETRACT_TOOL) - delta_mm_i = delta_mm[i] / MIXING_STEPPERS; + delta_mm_i = delta_mm.e / MIXING_STEPPERS; else - delta_mm_i = delta_mm[i]; + delta_mm_i = delta_mm.e; #else const float delta_mm_i = delta_mm[i]; #endif @@ -2106,26 +2088,26 @@ bool Planner::_populate_block(block_t * const block, bool split_move, old_direction_bits = block->direction_bits; segment_time_us = LROUND((float)segment_time_us / speed_factor); - uint32_t xs0 = axis_segment_time_us[X_AXIS][0], - xs1 = axis_segment_time_us[X_AXIS][1], - xs2 = axis_segment_time_us[X_AXIS][2], - ys0 = axis_segment_time_us[Y_AXIS][0], - ys1 = axis_segment_time_us[Y_AXIS][1], - ys2 = axis_segment_time_us[Y_AXIS][2]; + uint32_t xs0 = axis_segment_time_us[0].x, + xs1 = axis_segment_time_us[1].x, + xs2 = axis_segment_time_us[2].x, + ys0 = axis_segment_time_us[0].y, + ys1 = axis_segment_time_us[1].y, + ys2 = axis_segment_time_us[2].y; if (TEST(direction_change, X_AXIS)) { - xs2 = axis_segment_time_us[X_AXIS][2] = xs1; - xs1 = axis_segment_time_us[X_AXIS][1] = xs0; + xs2 = axis_segment_time_us[2].x = xs1; + xs1 = axis_segment_time_us[1].x = xs0; xs0 = 0; } - xs0 = axis_segment_time_us[X_AXIS][0] = xs0 + segment_time_us; + xs0 = axis_segment_time_us[0].x = xs0 + segment_time_us; if (TEST(direction_change, Y_AXIS)) { - ys2 = axis_segment_time_us[Y_AXIS][2] = axis_segment_time_us[Y_AXIS][1]; - ys1 = axis_segment_time_us[Y_AXIS][1] = axis_segment_time_us[Y_AXIS][0]; + ys2 = axis_segment_time_us[2].y = axis_segment_time_us[1].y; + ys1 = axis_segment_time_us[1].y = axis_segment_time_us[0].y; ys0 = 0; } - ys0 = axis_segment_time_us[Y_AXIS][0] = ys0 + segment_time_us; + ys0 = axis_segment_time_us[0].y = ys0 + segment_time_us; const uint32_t max_x_segment_time = _MAX(xs0, xs1, xs2), max_y_segment_time = _MAX(ys0, ys1, ys2), @@ -2138,7 +2120,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, // Correct the speed if (speed_factor < 1.0f) { - LOOP_XYZE(i) current_speed[i] *= speed_factor; + current_speed *= speed_factor; block->nominal_rate *= speed_factor; block->nominal_speed_sqr = block->nominal_speed_sqr * sq(speed_factor); } @@ -2146,7 +2128,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, // Compute and limit the acceleration rate for the trapezoid generator. const float steps_per_mm = block->step_event_count * inverse_millimeters; uint32_t accel; - if (!block->steps[A_AXIS] && !block->steps[B_AXIS] && !block->steps[C_AXIS]) { + if (!block->steps.a && !block->steps.b && !block->steps.c) { // convert to: acceleration steps/sec^2 accel = CEIL(settings.retract_acceleration * steps_per_mm); #if ENABLED(LIN_ADVANCE) @@ -2180,7 +2162,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, #define MAX_E_JERK max_e_jerk #endif #else - #define MAX_E_JERK max_jerk[E_AXIS] + #define MAX_E_JERK max_jerk.e #endif /** @@ -2198,13 +2180,13 @@ bool Planner::_populate_block(block_t * const block, bool split_move, && de > 0; if (block->use_advance_lead) { - block->e_D_ratio = (target_float[E_AXIS] - position_float[E_AXIS]) / + block->e_D_ratio = (target_float.e - position_float.e) / #if IS_KINEMATIC block->millimeters #else - SQRT(sq(target_float[X_AXIS] - position_float[X_AXIS]) - + sq(target_float[Y_AXIS] - position_float[Y_AXIS]) - + sq(target_float[Z_AXIS] - position_float[Z_AXIS])) + SQRT(sq(target_float.x - position_float.x) + + sq(target_float.y - position_float.y) + + sq(target_float.z - position_float.z)) #endif ; @@ -2297,23 +2279,16 @@ bool Planner::_populate_block(block_t * const block, bool split_move, already calculated in a different place. */ // Unit vector of previous path line segment - static float previous_unit_vec[XYZE]; + static xyze_float_t prev_unit_vec; - #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) - float unit_vec[] = { - delta_mm_cart[X_AXIS] * inverse_millimeters, - delta_mm_cart[Y_AXIS] * inverse_millimeters, - delta_mm_cart[Z_AXIS] * inverse_millimeters, - delta_mm_cart[E_AXIS] * inverse_millimeters - }; - #else - float unit_vec[] = { - delta_mm[X_AXIS] * inverse_millimeters, - delta_mm[Y_AXIS] * inverse_millimeters, - delta_mm[Z_AXIS] * inverse_millimeters, - delta_mm[E_AXIS] * inverse_millimeters - }; - #endif + xyze_float_t unit_vec = + #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) + delta_mm_cart + #else + { delta_mm.x, delta_mm.y, delta_mm.z, delta_mm.e } + #endif + ; + unit_vec *= inverse_millimeters; #if IS_CORE && ENABLED(JUNCTION_DEVIATION) /** @@ -2328,11 +2303,8 @@ bool Planner::_populate_block(block_t * const block, bool split_move, if (moves_queued && !UNEAR_ZERO(previous_nominal_speed_sqr)) { // Compute cosine of angle between previous and current path. (prev_unit_vec is negative) // NOTE: Max junction velocity is computed without sin() or acos() by trig half angle identity. - float junction_cos_theta = -previous_unit_vec[X_AXIS] * unit_vec[X_AXIS] - -previous_unit_vec[Y_AXIS] * unit_vec[Y_AXIS] - -previous_unit_vec[Z_AXIS] * unit_vec[Z_AXIS] - -previous_unit_vec[E_AXIS] * unit_vec[E_AXIS] - ; + float junction_cos_theta = (-prev_unit_vec.x * unit_vec.x) + (-prev_unit_vec.y * unit_vec.y) + + (-prev_unit_vec.z * unit_vec.z) + (-prev_unit_vec.e * unit_vec.e); // NOTE: Computed without any expensive trig, sin() or acos(), by trig half angle identity of cos(theta). if (junction_cos_theta > 0.999999f) { @@ -2343,12 +2315,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, NOLESS(junction_cos_theta, -0.999999f); // Check for numerical round-off to avoid divide by zero. // Convert delta vector to unit vector - float junction_unit_vec[XYZE] = { - unit_vec[X_AXIS] - previous_unit_vec[X_AXIS], - unit_vec[Y_AXIS] - previous_unit_vec[Y_AXIS], - unit_vec[Z_AXIS] - previous_unit_vec[Z_AXIS], - unit_vec[E_AXIS] - previous_unit_vec[E_AXIS] - }; + xyze_float_t junction_unit_vec = unit_vec - prev_unit_vec; normalize_junction_vector(junction_unit_vec); const float junction_acceleration = limit_value_by_axis_maximum(block->acceleration, junction_unit_vec), @@ -2374,7 +2341,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move, else // Init entry speed to zero. Assume it starts from rest. Planner will correct this later. vmax_junction_sqr = 0; - COPY(previous_unit_vec, unit_vec); + prev_unit_vec = unit_vec; #endif @@ -2497,18 +2464,17 @@ bool Planner::_populate_block(block_t * const block, bool split_move, block->flag |= block->nominal_speed_sqr <= v_allowable_sqr ? BLOCK_FLAG_RECALCULATE | BLOCK_FLAG_NOMINAL_LENGTH : BLOCK_FLAG_RECALCULATE; // Update previous path unit_vector and nominal speed - COPY(previous_speed, current_speed); + previous_speed = current_speed; previous_nominal_speed_sqr = block->nominal_speed_sqr; // Update the position - static_assert(COUNT(target) > 1, "Parameter to _buffer_steps must be (&target)[XYZE]!"); - COPY(position, target); + position = target; #if HAS_POSITION_FLOAT - COPY(position_float, target_float); + position_float = target_float; #endif #if ENABLED(GRADIENT_MIX) - mixer.gradient_control(target_float[Z_AXIS]); + mixer.gradient_control(target_float.z); #endif #if ENABLED(POWER_LOSS_RECOVERY) @@ -2533,10 +2499,7 @@ void Planner::buffer_sync_block() { block->flag = BLOCK_FLAG_SYNC_POSITION; - block->position[A_AXIS] = position[A_AXIS]; - block->position[B_AXIS] = position[B_AXIS]; - block->position[C_AXIS] = position[C_AXIS]; - block->position[E_AXIS] = position[E_AXIS]; + block->position = position; // If this is the first added movement, reload the delay, otherwise, cancel it. if (block_buffer_head == block_buffer_tail) { @@ -2567,7 +2530,7 @@ void Planner::buffer_sync_block() { */ bool Planner::buffer_segment(const float &a, const float &b, const float &c, const float &e #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) - , const float (&delta_mm_cart)[XYZE] + , const xyze_float_t &delta_mm_cart #endif , const feedRate_t &fr_mm_s, const uint8_t extruder, const float &millimeters/*=0.0*/ ) { @@ -2578,14 +2541,14 @@ bool Planner::buffer_segment(const float &a, const float &b, const float &c, con // When changing extruders recalculate steps corresponding to the E position #if ENABLED(DISTINCT_E_FACTORS) if (last_extruder != extruder && settings.axis_steps_per_mm[E_AXIS_N(extruder)] != settings.axis_steps_per_mm[E_AXIS_N(last_extruder)]) { - position[E_AXIS] = LROUND(position[E_AXIS] * settings.axis_steps_per_mm[E_AXIS_N(extruder)] * steps_to_mm[E_AXIS_N(last_extruder)]); + position.e = LROUND(position.e * settings.axis_steps_per_mm[E_AXIS_N(extruder)] * steps_to_mm[E_AXIS_N(last_extruder)]); last_extruder = extruder; } #endif // The target position of the tool in absolute steps // Calculate target position in absolute steps - const int32_t target[ABCE] = { + const abce_long_t target = { int32_t(LROUND(a * settings.axis_steps_per_mm[A_AXIS])), int32_t(LROUND(b * settings.axis_steps_per_mm[B_AXIS])), int32_t(LROUND(c * settings.axis_steps_per_mm[C_AXIS])), @@ -2593,14 +2556,14 @@ bool Planner::buffer_segment(const float &a, const float &b, const float &c, con }; #if HAS_POSITION_FLOAT - const float target_float[XYZE] = { a, b, c, e }; + const xyze_pos_t target_float = { a, b, c, e }; #endif // DRYRUN prevents E moves from taking place if (DEBUGGING(DRYRUN)) { - position[E_AXIS] = target[E_AXIS]; + position.e = target.e; #if HAS_POSITION_FLOAT - position_float[E_AXIS] = e; + position_float.e = e; #endif } @@ -2608,27 +2571,27 @@ bool Planner::buffer_segment(const float &a, const float &b, const float &c, con SERIAL_ECHOPAIR(" buffer_segment FR:", fr_mm_s); #if IS_KINEMATIC SERIAL_ECHOPAIR(" A:", a); - SERIAL_ECHOPAIR(" (", position[A_AXIS]); - SERIAL_ECHOPAIR("->", target[A_AXIS]); + SERIAL_ECHOPAIR(" (", position.a); + SERIAL_ECHOPAIR("->", target.a); SERIAL_ECHOPAIR(") B:", b); #else SERIAL_ECHOPAIR(" X:", a); - SERIAL_ECHOPAIR(" (", position[X_AXIS]); - SERIAL_ECHOPAIR("->", target[X_AXIS]); + SERIAL_ECHOPAIR(" (", position.x); + SERIAL_ECHOPAIR("->", target.x); SERIAL_ECHOPAIR(") Y:", b); #endif - SERIAL_ECHOPAIR(" (", position[Y_AXIS]); - SERIAL_ECHOPAIR("->", target[Y_AXIS]); + SERIAL_ECHOPAIR(" (", position.y); + SERIAL_ECHOPAIR("->", target.y); #if ENABLED(DELTA) SERIAL_ECHOPAIR(") C:", c); #else SERIAL_ECHOPAIR(") Z:", c); #endif - SERIAL_ECHOPAIR(" (", position[Z_AXIS]); - SERIAL_ECHOPAIR("->", target[Z_AXIS]); + SERIAL_ECHOPAIR(" (", position.z); + SERIAL_ECHOPAIR("->", target.z); SERIAL_ECHOPAIR(") E:", e); - SERIAL_ECHOPAIR(" (", position[E_AXIS]); - SERIAL_ECHOPAIR("->", target[E_AXIS]); + SERIAL_ECHOPAIR(" (", position.e); + SERIAL_ECHOPAIR("->", target.e); SERIAL_ECHOLNPGM(")"); //*/ @@ -2665,51 +2628,49 @@ bool Planner::buffer_line(const float &rx, const float &ry, const float &rz, con , const float &inv_duration #endif ) { - float raw[XYZE] = { rx, ry, rz, e }; + xyze_pos_t machine = { rx, ry, rz, e }; #if HAS_POSITION_MODIFIERS - apply_modifiers(raw); + apply_modifiers(machine); #endif #if IS_KINEMATIC - const float delta_mm_cart[] = { - rx - position_cart[X_AXIS], - ry - position_cart[Y_AXIS], - rz - position_cart[Z_AXIS] - #if ENABLED(JUNCTION_DEVIATION) - , e - position_cart[E_AXIS] - #endif - }; + + #if ENABLED(JUNCTION_DEVIATION) + const xyze_pos_t delta_mm_cart = { + rx - position_cart.x, ry - position_cart.y, + rz - position_cart.z, e - position_cart.e + }; + #else + const xyz_pos_t delta_mm_cart = { rx - position_cart.x, ry - position_cart.y, rz - position_cart.z }; + #endif float mm = millimeters; if (mm == 0.0) - mm = (delta_mm_cart[X_AXIS] != 0.0 || delta_mm_cart[Y_AXIS] != 0.0) ? SQRT(sq(delta_mm_cart[X_AXIS]) + sq(delta_mm_cart[Y_AXIS]) + sq(delta_mm_cart[Z_AXIS])) : ABS(delta_mm_cart[Z_AXIS]); + mm = (delta_mm_cart.x != 0.0 || delta_mm_cart.y != 0.0) ? delta_mm_cart.magnitude() : ABS(delta_mm_cart.z); - inverse_kinematics(raw); + inverse_kinematics(machine); #if ENABLED(SCARA_FEEDRATE_SCALING) // For SCARA scale the feed rate from mm/s to degrees/s // i.e., Complete the angular vector in the given time. const float duration_recip = inv_duration ? inv_duration : fr_mm_s / mm; - const feedRate_t feedrate = HYPOT(delta[A_AXIS] - position_float[A_AXIS], delta[B_AXIS] - position_float[B_AXIS]) * duration_recip; + const feedRate_t feedrate = HYPOT(delta.a - position_float.a, delta.b - position_float.b) * duration_recip; #else const feedRate_t feedrate = fr_mm_s; #endif - if (buffer_segment(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], raw[E_AXIS] + if (buffer_segment(delta.a, delta.b, delta.c, machine.e #if ENABLED(JUNCTION_DEVIATION) , delta_mm_cart #endif , feedrate, extruder, mm )) { - position_cart[X_AXIS] = rx; - position_cart[Y_AXIS] = ry; - position_cart[Z_AXIS] = rz; - position_cart[E_AXIS] = e; + position_cart.set(rx, ry, rz, e); return true; } else return false; #else - return buffer_segment(raw, fr_mm_s, extruder, millimeters); + return buffer_segment(machine, fr_mm_s, extruder, millimeters); #endif } // buffer_line() @@ -2724,30 +2685,27 @@ void Planner::set_machine_position_mm(const float &a, const float &b, const floa #if ENABLED(DISTINCT_E_FACTORS) last_extruder = active_extruder; #endif - position[A_AXIS] = LROUND(a * settings.axis_steps_per_mm[A_AXIS]); - position[B_AXIS] = LROUND(b * settings.axis_steps_per_mm[B_AXIS]); - position[C_AXIS] = LROUND(c * settings.axis_steps_per_mm[C_AXIS]); - position[E_AXIS] = LROUND(e * settings.axis_steps_per_mm[E_AXIS_N(active_extruder)]); #if HAS_POSITION_FLOAT - position_float[A_AXIS] = a; - position_float[B_AXIS] = b; - position_float[C_AXIS] = c; - position_float[E_AXIS] = e; + position_float.set(a, b, c, e); #endif + position.set(LROUND(a * settings.axis_steps_per_mm[A_AXIS]), + LROUND(b * settings.axis_steps_per_mm[B_AXIS]), + LROUND(c * settings.axis_steps_per_mm[C_AXIS]), + LROUND(e * settings.axis_steps_per_mm[E_AXIS_N(active_extruder)])); if (has_blocks_queued()) { //previous_nominal_speed_sqr = 0.0; // Reset planner junction speeds. Assume start from rest. - //ZERO(previous_speed); + //previous_speed.reset(); buffer_sync_block(); } else - stepper.set_position(position[A_AXIS], position[B_AXIS], position[C_AXIS], position[E_AXIS]); + stepper.set_position(position); } void Planner::set_position_mm(const float &rx, const float &ry, const float &rz, const float &e) { - float raw[XYZE] = { rx, ry, rz, e }; + xyze_pos_t machine = { rx, ry, rz, e }; #if HAS_POSITION_MODIFIERS { - apply_modifiers(raw + apply_modifiers(machine #if HAS_LEVELING , true #endif @@ -2755,15 +2713,11 @@ void Planner::set_position_mm(const float &rx, const float &ry, const float &rz, } #endif #if IS_KINEMATIC - position_cart[X_AXIS] = rx; - position_cart[Y_AXIS] = ry; - position_cart[Z_AXIS] = rz; - position_cart[E_AXIS] = e; - - inverse_kinematics(raw); - set_machine_position_mm(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], raw[E_AXIS]); + position_cart.set(rx, ry, rz, e); + inverse_kinematics(machine); + set_machine_position_mm(delta.a, delta.b, delta.c, machine.e); #else - set_machine_position_mm(raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS], raw[E_AXIS]); + set_machine_position_mm(machine); #endif } @@ -2780,17 +2734,17 @@ void Planner::set_e_position_mm(const float &e) { #else const float e_new = e; #endif - position[E_AXIS] = LROUND(settings.axis_steps_per_mm[axis_index] * e_new); + position.e = LROUND(settings.axis_steps_per_mm[axis_index] * e_new); #if HAS_POSITION_FLOAT - position_float[E_AXIS] = e_new; + position_float.e = e_new; #endif #if IS_KINEMATIC - position_cart[E_AXIS] = e; + position_cart.e = e; #endif if (has_blocks_queued()) buffer_sync_block(); else - stepper.set_position(E_AXIS, position[E_AXIS]); + stepper.set_axis_position(E_AXIS, position.e); } // Recalculate the steps/s^2 acceleration rates, based on the mm/s^2 diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index 2f3ee471d63c..c18b7753e667 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -40,7 +40,7 @@ #endif #if ABL_PLANAR - #include "../libs/vector_3.h" + #include "../libs/vector_3.h" // for matrix_3x3 #endif #if ENABLED(FWRETRACT) @@ -51,6 +51,11 @@ #include "../feature/mixing.h" #endif +// Feedrate for manual moves +#ifdef MANUAL_FEEDRATE + constexpr xyze_feedrate_t manual_feedrate_mm_m = MANUAL_FEEDRATE; +#endif + enum BlockFlagBit : char { // Recalculate trapezoids on entry junction. For optimization. BLOCK_BIT_RECALCULATE, @@ -95,15 +100,8 @@ typedef struct block_t { acceleration; // acceleration mm/sec^2 union { - // Data used by all move blocks - struct { - // Fields used by the Bresenham algorithm for tracing the line - uint32_t steps[NUM_AXIS]; // Step count along each axis - }; - // Data used by all sync blocks - struct { - int32_t position[NUM_AXIS]; // New position to force when this sync block is executed - }; + abce_ulong_t steps; // Step count along each axis + abce_long_t position; // New position to force when this sync block is executed }; uint32_t step_event_count; // The number of step events required to complete this block @@ -259,19 +257,18 @@ class Planner { #endif #if HAS_CLASSIC_JERK - static float max_jerk[ - #if BOTH(JUNCTION_DEVIATION, LIN_ADVANCE) - XYZ // (mm/s^2) M205 XYZ - The largest speed change requiring no acceleration. - #else - XYZE // (mm/s^2) M205 XYZE - The largest speed change requiring no acceleration. - #endif - ]; + #if BOTH(JUNCTION_DEVIATION, LIN_ADVANCE) + static xyz_pos_t max_jerk; // (mm/s^2) M205 XYZ - The largest speed change requiring no acceleration. + #else + static xyze_pos_t max_jerk; // (mm/s^2) M205 XYZE - The largest speed change requiring no acceleration. + #endif #endif #if HAS_LEVELING static bool leveling_active; // Flag that bed leveling is enabled #if ABL_PLANAR static matrix_3x3 bed_level_matrix; // Transform to compensate for bed level + static constexpr xy_pos_t level_fulcrum = { X_TILT_FULCRUM, Y_TILT_FULCRUM }; #endif #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) static float z_fade_height, inverse_z_fade_height; @@ -285,11 +282,11 @@ class Planner { #endif #if HAS_POSITION_FLOAT - static float position_float[XYZE]; + static xyze_pos_t position_float; #endif #if IS_KINEMATIC - static float position_cart[XYZE]; + static xyze_pos_t position_cart; #endif static skew_factor_t skew_factor; @@ -304,12 +301,12 @@ class Planner { * The current position of the tool in absolute steps * Recalculated if any axis_steps_per_mm are changed by gcode */ - static int32_t position[NUM_AXIS]; + static xyze_long_t position; /** * Speed of previous path line segment */ - static float previous_speed[NUM_AXIS]; + static xyze_float_t previous_speed; /** * Nominal speed of previous path line segment (mm/s)^2 @@ -338,7 +335,7 @@ class Planner { // Old direction bits. Used for speed calculations static unsigned char old_direction_bits; // Segment times (in µs). Used for speed calculations - static uint32_t axis_segment_time_us[2][3]; + static xy_ulong_t axis_segment_time_us[3]; #endif #if HAS_SPI_LCD @@ -454,8 +451,7 @@ class Planner { } } } - FORCE_INLINE static void skew(float (&raw)[XYZ]) { skew(raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS]); } - FORCE_INLINE static void skew(float (&raw)[XYZE]) { skew(raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS]); } + FORCE_INLINE static void skew(xyz_pos_t &raw) { skew(raw.x, raw.y, raw.z); } FORCE_INLINE static void unskew(float &cx, float &cy, const float &cz) { if (WITHIN(cx, X_MIN_POS, X_MAX_POS) && WITHIN(cy, Y_MIN_POS, Y_MAX_POS)) { @@ -466,8 +462,7 @@ class Planner { } } } - FORCE_INLINE static void unskew(float (&raw)[XYZ]) { unskew(raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS]); } - FORCE_INLINE static void unskew(float (&raw)[XYZE]) { unskew(raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS]); } + FORCE_INLINE static void unskew(xyz_pos_t &raw) { unskew(raw.x, raw.y, raw.z); } #endif // SKEW_CORRECTION @@ -476,22 +471,24 @@ class Planner { * Apply leveling to transform a cartesian position * as it will be given to the planner and steppers. */ - static void apply_leveling(float &rx, float &ry, float &rz); - FORCE_INLINE static void apply_leveling(float (&raw)[XYZ]) { apply_leveling(raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS]); } - FORCE_INLINE static void apply_leveling(float (&raw)[XYZE]) { apply_leveling(raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS]); } - - static void unapply_leveling(float raw[XYZ]); + static void apply_leveling(xyz_pos_t &raw); + static void unapply_leveling(xyz_pos_t &raw); + FORCE_INLINE static void force_unapply_leveling(xyz_pos_t &raw) { + leveling_active = true; + unapply_leveling(raw); + leveling_active = false; + } #endif #if ENABLED(FWRETRACT) static void apply_retract(float &rz, float &e); - FORCE_INLINE static void apply_retract(float (&raw)[XYZE]) { apply_retract(raw[Z_AXIS], raw[E_AXIS]); } + FORCE_INLINE static void apply_retract(xyze_pos_t &raw) { apply_retract(raw.z, raw.e); } static void unapply_retract(float &rz, float &e); - FORCE_INLINE static void unapply_retract(float (&raw)[XYZE]) { unapply_retract(raw[Z_AXIS], raw[E_AXIS]); } + FORCE_INLINE static void unapply_retract(xyze_pos_t &raw) { unapply_retract(raw.z, raw.e); } #endif #if HAS_POSITION_MODIFIERS - FORCE_INLINE static void apply_modifiers(float (&pos)[XYZE] + FORCE_INLINE static void apply_modifiers(xyze_pos_t &pos #if HAS_LEVELING , bool leveling = #if PLANNER_LEVELING @@ -512,7 +509,7 @@ class Planner { #endif } - FORCE_INLINE static void unapply_modifiers(float (&pos)[XYZE] + FORCE_INLINE static void unapply_modifiers(xyze_pos_t &pos #if HAS_LEVELING , bool leveling = #if PLANNER_LEVELING @@ -578,12 +575,12 @@ class Planner { * * Returns true if movement was buffered, false otherwise */ - static bool _buffer_steps(const int32_t (&target)[XYZE] + static bool _buffer_steps(const xyze_long_t &target #if HAS_POSITION_FLOAT - , const float (&target_float)[ABCE] + , const xyze_pos_t &target_float #endif #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) - , const float (&delta_mm_cart)[XYZE] + , const xyze_float_t &delta_mm_cart #endif , feedRate_t fr_mm_s, const uint8_t extruder, const float &millimeters=0.0 ); @@ -601,12 +598,12 @@ class Planner { * Returns true is movement is acceptable, false otherwise */ static bool _populate_block(block_t * const block, bool split_move, - const int32_t (&target)[XYZE] + const xyze_long_t &target #if HAS_POSITION_FLOAT - , const float (&target_float)[XYZE] + , const xyze_pos_t &target_float #endif #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) - , const float (&delta_mm_cart)[XYZE] + , const xyze_float_t &delta_mm_cart #endif , feedRate_t fr_mm_s, const uint8_t extruder, const float &millimeters=0.0 ); @@ -638,18 +635,18 @@ class Planner { */ static bool buffer_segment(const float &a, const float &b, const float &c, const float &e #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) - , const float (&delta_mm_cart)[XYZE] + , const xyze_float_t &delta_mm_cart #endif , const feedRate_t &fr_mm_s, const uint8_t extruder, const float &millimeters=0.0 ); - FORCE_INLINE static bool buffer_segment(const float (&abce)[ABCE] + FORCE_INLINE static bool buffer_segment(abce_pos_t &abce #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) - , const float (&delta_mm_cart)[XYZE] + , const xyze_float_t &delta_mm_cart #endif , const feedRate_t &fr_mm_s, const uint8_t extruder, const float &millimeters=0.0 ) { - return buffer_segment(abce[A_AXIS], abce[B_AXIS], abce[C_AXIS], abce[E_AXIS] + return buffer_segment(abce.a, abce.b, abce.c, abce.e #if IS_KINEMATIC && ENABLED(JUNCTION_DEVIATION) , delta_mm_cart #endif @@ -675,12 +672,12 @@ class Planner { #endif ); - FORCE_INLINE static bool buffer_line(const float (&cart)[XYZE], const feedRate_t &fr_mm_s, const uint8_t extruder, const float millimeters=0.0 + FORCE_INLINE static bool buffer_line(const xyze_pos_t &cart, const feedRate_t &fr_mm_s, const uint8_t extruder, const float millimeters=0.0 #if ENABLED(SCARA_FEEDRATE_SCALING) , const float &inv_duration=0.0 #endif ) { - return buffer_line(cart[X_AXIS], cart[Y_AXIS], cart[Z_AXIS], cart[E_AXIS], fr_mm_s, extruder, millimeters + return buffer_line(cart.x, cart.y, cart.z, cart.e, fr_mm_s, extruder, millimeters #if ENABLED(SCARA_FEEDRATE_SCALING) , inv_duration #endif @@ -701,7 +698,7 @@ class Planner { * Clears previous speed values. */ static void set_position_mm(const float &rx, const float &ry, const float &rz, const float &e); - FORCE_INLINE static void set_position_mm(const float (&cart)[XYZE]) { set_position_mm(cart[X_AXIS], cart[Y_AXIS], cart[Z_AXIS], cart[E_AXIS]); } + FORCE_INLINE static void set_position_mm(const xyze_pos_t &cart) { set_position_mm(cart.x, cart.y, cart.z, cart.e); } static void set_e_position_mm(const float &e); /** @@ -711,7 +708,7 @@ class Planner { * conversions are applied. */ static void set_machine_position_mm(const float &a, const float &b, const float &c, const float &e); - FORCE_INLINE static void set_machine_position_mm(const float (&abce)[ABCE]) { set_machine_position_mm(abce[A_AXIS], abce[B_AXIS], abce[C_AXIS], abce[E_AXIS]); } + FORCE_INLINE static void set_machine_position_mm(const abce_pos_t &abce) { set_machine_position_mm(abce.a, abce.b, abce.c, abce.e); } /** * Get an axis position according to stepper position(s) @@ -942,14 +939,13 @@ class Planner { #if ENABLED(JUNCTION_DEVIATION) - FORCE_INLINE static void normalize_junction_vector(float (&vector)[XYZE]) { + FORCE_INLINE static void normalize_junction_vector(xyze_float_t &vector) { float magnitude_sq = 0; LOOP_XYZE(idx) if (vector[idx]) magnitude_sq += sq(vector[idx]); - const float inv_magnitude = RSQRT(magnitude_sq); - LOOP_XYZE(idx) vector[idx] *= inv_magnitude; + vector *= RSQRT(magnitude_sq); } - FORCE_INLINE static float limit_value_by_axis_maximum(const float &max_value, float (&unit_vec)[XYZE]) { + FORCE_INLINE static float limit_value_by_axis_maximum(const float &max_value, xyze_float_t &unit_vec) { float limit_value = max_value; LOOP_XYZE(idx) if (unit_vec[idx]) // Avoid divide by zero NOMORE(limit_value, ABS(settings.max_acceleration_mm_per_s2[idx] / unit_vec[idx])); diff --git a/Marlin/src/module/planner_bezier.cpp b/Marlin/src/module/planner_bezier.cpp index 6e6746bce8c6..080f4e41a856 100644 --- a/Marlin/src/module/planner_bezier.cpp +++ b/Marlin/src/module/planner_bezier.cpp @@ -108,21 +108,17 @@ static inline float dist1(const float &x1, const float &y1, const float &x2, con * power available on Arduino, I think it is not wise to implement it. */ void cubic_b_spline( - const float position[NUM_AXIS], // current position - const float target[NUM_AXIS], // target position - const float (&offset)[4], // a pair of offsets + const xyze_pos_t &position, // current position + const xyze_pos_t &target, // target position + const xy_pos_t (&offsets)[2], // a pair of offsets const feedRate_t &scaled_fr_mm_s, // mm/s scaled by feedrate % const uint8_t extruder ) { // Absolute first and second control points are recovered. - const float first0 = position[X_AXIS] + offset[0], - first1 = position[Y_AXIS] + offset[1], - second0 = target[X_AXIS] + offset[2], - second1 = target[Y_AXIS] + offset[3]; - - float bez_target[4]; - bez_target[X_AXIS] = position[X_AXIS]; - bez_target[Y_AXIS] = position[Y_AXIS]; + const xy_pos_t first = position + offsets[0], second = target + offsets[1]; + + xyze_pos_t bez_target; + bez_target.set(position.x, position.y); float step = MAX_STEP; millis_t next_idle_ms = millis() + 200UL; @@ -141,15 +137,15 @@ void cubic_b_spline( bool did_reduce = false; float new_t = t + step; NOMORE(new_t, 1); - float new_pos0 = eval_bezier(position[X_AXIS], first0, second0, target[X_AXIS], new_t), - new_pos1 = eval_bezier(position[Y_AXIS], first1, second1, target[Y_AXIS], new_t); + float new_pos0 = eval_bezier(position.x, first.x, second.x, target.x, new_t), + new_pos1 = eval_bezier(position.y, first.y, second.y, target.y, new_t); for (;;) { if (new_t - t < (MIN_STEP)) break; const float candidate_t = 0.5f * (t + new_t), - candidate_pos0 = eval_bezier(position[X_AXIS], first0, second0, target[X_AXIS], candidate_t), - candidate_pos1 = eval_bezier(position[Y_AXIS], first1, second1, target[Y_AXIS], candidate_t), - interp_pos0 = 0.5f * (bez_target[X_AXIS] + new_pos0), - interp_pos1 = 0.5f * (bez_target[Y_AXIS] + new_pos1); + candidate_pos0 = eval_bezier(position.x, first.x, second.x, target.x, candidate_t), + candidate_pos1 = eval_bezier(position.y, first.y, second.y, target.y, candidate_t), + interp_pos0 = 0.5f * (bez_target.x + new_pos0), + interp_pos1 = 0.5f * (bez_target.y + new_pos1); if (dist1(candidate_pos0, candidate_pos1, interp_pos0, interp_pos1) <= (SIGMA)) break; new_t = candidate_t; new_pos0 = candidate_pos0; @@ -162,10 +158,10 @@ void cubic_b_spline( if (new_t - t > MAX_STEP) break; const float candidate_t = t + 2 * (new_t - t); if (candidate_t >= 1) break; - const float candidate_pos0 = eval_bezier(position[X_AXIS], first0, second0, target[X_AXIS], candidate_t), - candidate_pos1 = eval_bezier(position[Y_AXIS], first1, second1, target[Y_AXIS], candidate_t), - interp_pos0 = 0.5f * (bez_target[X_AXIS] + candidate_pos0), - interp_pos1 = 0.5f * (bez_target[Y_AXIS] + candidate_pos1); + const float candidate_pos0 = eval_bezier(position.x, first.x, second.x, target.x, candidate_t), + candidate_pos1 = eval_bezier(position.y, first.y, second.y, target.y, candidate_t), + interp_pos0 = 0.5f * (bez_target.x + candidate_pos0), + interp_pos1 = 0.5f * (bez_target.y + candidate_pos1); if (dist1(new_pos0, new_pos1, interp_pos0, interp_pos1) > (SIGMA)) break; new_t = candidate_t; new_pos0 = candidate_pos0; @@ -187,19 +183,19 @@ void cubic_b_spline( t = new_t; // Compute and send new position - bez_target[X_AXIS] = new_pos0; - bez_target[Y_AXIS] = new_pos1; - // FIXME. The following two are wrong, since the parameter t is - // not linear in the distance. - bez_target[Z_AXIS] = interp(position[Z_AXIS], target[Z_AXIS], t); - bez_target[E_AXIS] = interp(position[E_AXIS], target[E_AXIS], t); - apply_motion_limits(bez_target); + xyze_pos_t new_bez = { + new_pos0, new_pos1, + interp(position.z, target.z, t), // FIXME. These two are wrong, since the parameter t is + interp(position.e, target.e, t) // not linear in the distance. + }; + apply_motion_limits(new_bez); + bez_target = new_bez; #if HAS_LEVELING && !PLANNER_LEVELING - float pos[XYZE] = { bez_target[X_AXIS], bez_target[Y_AXIS], bez_target[Z_AXIS], bez_target[E_AXIS] }; + xyze_pos_t pos = bez_target; planner.apply_leveling(pos); #else - const float (&pos)[XYZE] = bez_target; + const xyze_pos_t &pos = bez_target; #endif if (!planner.buffer_line(pos, scaled_fr_mm_s, active_extruder, step)) diff --git a/Marlin/src/module/planner_bezier.h b/Marlin/src/module/planner_bezier.h index 5e959dd0f394..d0aa82858cb9 100644 --- a/Marlin/src/module/planner_bezier.h +++ b/Marlin/src/module/planner_bezier.h @@ -28,13 +28,12 @@ * */ -#include -#include "../core/macros.h" +#include "../core/types.h" void cubic_b_spline( - const float position[NUM_AXIS], // current position - const float target[NUM_AXIS], // target position - const float (&offset)[4], // a pair of offsets + const xyze_pos_t &position, // current position + const xyze_pos_t &target, // target position + const xy_pos_t (&offsets)[2], // a pair of offsets const feedRate_t &scaled_fr_mm_s, // mm/s scaled by feedrate % const uint8_t extruder ); diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index ce0d84e41bf2..0217a2fd59f8 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -56,7 +56,7 @@ #include "../feature/backlash.h" #endif -float probe_offset[XYZ]; // Initialized by settings.load() +xyz_pos_t probe_offset; // Initialized by settings.load() #if ENABLED(BLTOUCH) #include "../feature/bltouch.h" @@ -146,10 +146,10 @@ float probe_offset[XYZ]; // Initialized by settings.load() // Move down to the bed to stow the probe void run_stow_moves_script() { - const float old_pos[] = { current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS] }; + const xyz_pos_t oldpos = current_position; endstops.enable_z_probe(false); do_blocking_move_to_z(TOUCH_MI_RETRACT_Z, MMM_TO_MMS(HOMING_FEEDRATE_Z)); - do_blocking_move_to(old_pos, MMM_TO_MMS(HOMING_FEEDRATE_Z)); + do_blocking_move_to(oldpos, MMM_TO_MMS(HOMING_FEEDRATE_Z)); } #elif ENABLED(Z_PROBE_ALLEN_KEY) @@ -159,35 +159,35 @@ float probe_offset[XYZ]; // Initialized by settings.load() #ifndef Z_PROBE_ALLEN_KEY_DEPLOY_1_FEEDRATE #define Z_PROBE_ALLEN_KEY_DEPLOY_1_FEEDRATE 0.0 #endif - constexpr float deploy_1[] = Z_PROBE_ALLEN_KEY_DEPLOY_1; + constexpr xyz_pos_t deploy_1 = Z_PROBE_ALLEN_KEY_DEPLOY_1; do_blocking_move_to(deploy_1, MMM_TO_MMS(Z_PROBE_ALLEN_KEY_DEPLOY_1_FEEDRATE)); #endif #ifdef Z_PROBE_ALLEN_KEY_DEPLOY_2 #ifndef Z_PROBE_ALLEN_KEY_DEPLOY_2_FEEDRATE #define Z_PROBE_ALLEN_KEY_DEPLOY_2_FEEDRATE 0.0 #endif - constexpr float deploy_2[] = Z_PROBE_ALLEN_KEY_DEPLOY_2; + constexpr xyz_pos_t deploy_2 = Z_PROBE_ALLEN_KEY_DEPLOY_2; do_blocking_move_to(deploy_2, MMM_TO_MMS(Z_PROBE_ALLEN_KEY_DEPLOY_2_FEEDRATE)); #endif #ifdef Z_PROBE_ALLEN_KEY_DEPLOY_3 #ifndef Z_PROBE_ALLEN_KEY_DEPLOY_3_FEEDRATE #define Z_PROBE_ALLEN_KEY_DEPLOY_3_FEEDRATE 0.0 #endif - constexpr float deploy_3[] = Z_PROBE_ALLEN_KEY_DEPLOY_3; + constexpr xyz_pos_t deploy_3 = Z_PROBE_ALLEN_KEY_DEPLOY_3; do_blocking_move_to(deploy_3, MMM_TO_MMS(Z_PROBE_ALLEN_KEY_DEPLOY_3_FEEDRATE)); #endif #ifdef Z_PROBE_ALLEN_KEY_DEPLOY_4 #ifndef Z_PROBE_ALLEN_KEY_DEPLOY_4_FEEDRATE #define Z_PROBE_ALLEN_KEY_DEPLOY_4_FEEDRATE 0.0 #endif - constexpr float deploy_4[] = Z_PROBE_ALLEN_KEY_DEPLOY_4; + constexpr xyz_pos_t deploy_4 = Z_PROBE_ALLEN_KEY_DEPLOY_4; do_blocking_move_to(deploy_4, MMM_TO_MMS(Z_PROBE_ALLEN_KEY_DEPLOY_4_FEEDRATE)); #endif #ifdef Z_PROBE_ALLEN_KEY_DEPLOY_5 #ifndef Z_PROBE_ALLEN_KEY_DEPLOY_5_FEEDRATE #define Z_PROBE_ALLEN_KEY_DEPLOY_5_FEEDRATE 0.0 #endif - constexpr float deploy_5[] = Z_PROBE_ALLEN_KEY_DEPLOY_5; + constexpr xyz_pos_t deploy_5 = Z_PROBE_ALLEN_KEY_DEPLOY_5; do_blocking_move_to(deploy_5, MMM_TO_MMS(Z_PROBE_ALLEN_KEY_DEPLOY_5_FEEDRATE)); #endif } @@ -197,35 +197,35 @@ float probe_offset[XYZ]; // Initialized by settings.load() #ifndef Z_PROBE_ALLEN_KEY_STOW_1_FEEDRATE #define Z_PROBE_ALLEN_KEY_STOW_1_FEEDRATE 0.0 #endif - constexpr float stow_1[] = Z_PROBE_ALLEN_KEY_STOW_1; + constexpr xyz_pos_t stow_1 = Z_PROBE_ALLEN_KEY_STOW_1; do_blocking_move_to(stow_1, MMM_TO_MMS(Z_PROBE_ALLEN_KEY_STOW_1_FEEDRATE)); #endif #ifdef Z_PROBE_ALLEN_KEY_STOW_2 #ifndef Z_PROBE_ALLEN_KEY_STOW_2_FEEDRATE #define Z_PROBE_ALLEN_KEY_STOW_2_FEEDRATE 0.0 #endif - constexpr float stow_2[] = Z_PROBE_ALLEN_KEY_STOW_2; + constexpr xyz_pos_t stow_2 = Z_PROBE_ALLEN_KEY_STOW_2; do_blocking_move_to(stow_2, MMM_TO_MMS(Z_PROBE_ALLEN_KEY_STOW_2_FEEDRATE)); #endif #ifdef Z_PROBE_ALLEN_KEY_STOW_3 #ifndef Z_PROBE_ALLEN_KEY_STOW_3_FEEDRATE #define Z_PROBE_ALLEN_KEY_STOW_3_FEEDRATE 0.0 #endif - constexpr float stow_3[] = Z_PROBE_ALLEN_KEY_STOW_3; + constexpr xyz_pos_t stow_3 = Z_PROBE_ALLEN_KEY_STOW_3; do_blocking_move_to(stow_3, MMM_TO_MMS(Z_PROBE_ALLEN_KEY_STOW_3_FEEDRATE)); #endif #ifdef Z_PROBE_ALLEN_KEY_STOW_4 #ifndef Z_PROBE_ALLEN_KEY_STOW_4_FEEDRATE #define Z_PROBE_ALLEN_KEY_STOW_4_FEEDRATE 0.0 #endif - constexpr float stow_4[] = Z_PROBE_ALLEN_KEY_STOW_4; + constexpr xyz_pos_t stow_4 = Z_PROBE_ALLEN_KEY_STOW_4; do_blocking_move_to(stow_4, MMM_TO_MMS(Z_PROBE_ALLEN_KEY_STOW_4_FEEDRATE)); #endif #ifdef Z_PROBE_ALLEN_KEY_STOW_5 #ifndef Z_PROBE_ALLEN_KEY_STOW_5_FEEDRATE #define Z_PROBE_ALLEN_KEY_STOW_5_FEEDRATE 0.0 #endif - constexpr float stow_5[] = Z_PROBE_ALLEN_KEY_STOW_5; + constexpr xyz_pos_t stow_5 = Z_PROBE_ALLEN_KEY_STOW_5; do_blocking_move_to(stow_5, MMM_TO_MMS(Z_PROBE_ALLEN_KEY_STOW_5_FEEDRATE)); #endif } @@ -263,11 +263,11 @@ inline void do_probe_raise(const float z_raise) { if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("do_probe_raise(", z_raise, ")"); float z_dest = z_raise; - if (probe_offset[Z_AXIS] < 0) z_dest -= probe_offset[Z_AXIS]; + if (probe_offset.z < 0) z_dest -= probe_offset.z; NOMORE(z_dest, Z_MAX_POS); - if (z_dest > current_position[Z_AXIS]) + if (z_dest > current_position.z) do_blocking_move_to_z(z_dest); } @@ -384,8 +384,7 @@ bool set_probe_deployed(const bool deploy) { } #endif - const float oldXpos = current_position[X_AXIS], - oldYpos = current_position[Y_AXIS]; + const xy_pos_t old_xy = current_position; #if ENABLED(PROBE_TRIGGERED_WHEN_STOWED_TEST) #if USES_Z_MIN_PROBE_ENDSTOP @@ -419,7 +418,7 @@ bool set_probe_deployed(const bool deploy) { #endif - do_blocking_move_to(oldXpos, oldYpos, current_position[Z_AXIS]); // return to position before deploy + do_blocking_move_to(old_xy); endstops.enable_z_probe(deploy); return false; } @@ -427,9 +426,9 @@ bool set_probe_deployed(const bool deploy) { #ifdef Z_AFTER_PROBING // After probing move to a preferred Z position void move_z_after_probing() { - if (current_position[Z_AXIS] != Z_AFTER_PROBING) { + if (current_position.z != Z_AFTER_PROBING) { do_blocking_move_to_z(Z_AFTER_PROBING); - current_position[Z_AXIS] = Z_AFTER_PROBING; + current_position.z = Z_AFTER_PROBING; } } #endif @@ -532,7 +531,7 @@ static bool do_probe_move(const float z, const feedRate_t fr_mm_s) { * @brief Probe at the current XY (possibly more than once) to find the bed Z. * * @details Used by probe_at_point to get the bed Z height at the current XY. - * Leaves current_position[Z_AXIS] at the height where the probe triggered. + * Leaves current_position.z at the height where the probe triggered. * * @return The Z position of the bed at the current XY or NAN on error. */ @@ -542,7 +541,7 @@ static float run_z_probe() { // Stop the probe before it goes too low to prevent damage. // If Z isn't known then probe to -10mm. - const float z_probe_low_point = TEST(axis_known_position, Z_AXIS) ? -probe_offset[Z_AXIS] + Z_PROBE_LOW_POINT : -10.0; + const float z_probe_low_point = TEST(axis_known_position, Z_AXIS) ? -probe_offset.z + Z_PROBE_LOW_POINT : -10.0; // Double-probing does a fast probe followed by a slow probe #if TOTAL_PROBING == 2 @@ -556,22 +555,22 @@ static float run_z_probe() { return NAN; } - const float first_probe_z = current_position[Z_AXIS]; + const float first_probe_z = current_position.z; if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("1st Probe Z:", first_probe_z); // Raise to give the probe clearance - do_blocking_move_to_z(current_position[Z_AXIS] + Z_CLEARANCE_MULTI_PROBE, MMM_TO_MMS(Z_PROBE_SPEED_FAST)); + do_blocking_move_to_z(current_position.z + Z_CLEARANCE_MULTI_PROBE, MMM_TO_MMS(Z_PROBE_SPEED_FAST)); #elif Z_PROBE_SPEED_FAST != Z_PROBE_SPEED_SLOW // If the nozzle is well over the travel height then // move down quickly before doing the slow probe - const float z = Z_CLEARANCE_DEPLOY_PROBE + 5.0 + (probe_offset[Z_AXIS] < 0 ? -probe_offset[Z_AXIS] : 0); - if (current_position[Z_AXIS] > z) { + const float z = Z_CLEARANCE_DEPLOY_PROBE + 5.0 + (probe_offset.z < 0 ? -probe_offset.z : 0); + if (current_position.z > z) { // Probe down fast. If the probe never triggered, raise for probe clearance if (!do_probe_move(z, MMM_TO_MMS(Z_PROBE_SPEED_FAST))) - do_blocking_move_to_z(current_position[Z_AXIS] + Z_CLEARANCE_BETWEEN_PROBES, MMM_TO_MMS(Z_PROBE_SPEED_FAST)); + do_blocking_move_to_z(current_position.z + Z_CLEARANCE_BETWEEN_PROBES, MMM_TO_MMS(Z_PROBE_SPEED_FAST)); } #endif @@ -603,7 +602,7 @@ static float run_z_probe() { backlash.measure_with_probe(); #endif - const float z = current_position[Z_AXIS]; + const float z = current_position.z; #if EXTRA_PROBING // Insert Z measurement into probes[]. Keep it sorted ascending. @@ -654,7 +653,7 @@ static float run_z_probe() { #elif TOTAL_PROBING == 2 - const float z2 = current_position[Z_AXIS]; + const float z2 = current_position.z; if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("2nd Probe Z:", z2, " Discrepancy:", first_probe_z - z2); @@ -664,7 +663,7 @@ static float run_z_probe() { #else // Return the single probe result - const float measured_z = current_position[Z_AXIS]; + const float measured_z = current_position.z; #endif @@ -694,20 +693,19 @@ float probe_at_point(const float &rx, const float &ry, const ProbePtRaise raise_ } // TODO: Adapt for SCARA, where the offset rotates - float nx = rx, ny = ry; + xyz_pos_t npos = { rx, ry }; if (probe_relative) { - if (!position_is_reachable_by_probe(rx, ry)) return NAN; // The given position is in terms of the probe - nx -= probe_offset[X_AXIS]; // Get the nozzle position - ny -= probe_offset[Y_AXIS]; + if (!position_is_reachable_by_probe(npos)) return NAN; // The given position is in terms of the probe + npos -= probe_offset; // Get the nozzle position } - else if (!position_is_reachable(nx, ny)) return NAN; // The given position is in terms of the nozzle + else if (!position_is_reachable(npos)) return NAN; // The given position is in terms of the nozzle - const float nz = + npos.z = #if ENABLED(DELTA) // Move below clip height or xy move will be aborted by do_blocking_move_to - _MIN(current_position[Z_AXIS], delta_clip_start_height) + _MIN(current_position.z, delta_clip_start_height) #else - current_position[Z_AXIS] + current_position.z #endif ; @@ -715,15 +713,15 @@ float probe_at_point(const float &rx, const float &ry, const ProbePtRaise raise_ feedrate_mm_s = XY_PROBE_FEEDRATE_MM_S; // Move the probe to the starting XYZ - do_blocking_move_to(nx, ny, nz); + do_blocking_move_to(npos); float measured_z = NAN; if (!DEPLOY_PROBE()) { - measured_z = run_z_probe() + probe_offset[Z_AXIS]; + measured_z = run_z_probe() + probe_offset.z; const bool big_raise = raise_after == PROBE_PT_BIG_RAISE; if (big_raise || raise_after == PROBE_PT_RAISE) - do_blocking_move_to_z(current_position[Z_AXIS] + (big_raise ? 25 : Z_CLEARANCE_BETWEEN_PROBES), MMM_TO_MMS(Z_PROBE_SPEED_FAST)); + do_blocking_move_to_z(current_position.z + (big_raise ? 25 : Z_CLEARANCE_BETWEEN_PROBES), MMM_TO_MMS(Z_PROBE_SPEED_FAST)); else if (raise_after == PROBE_PT_STOW) if (STOW_PROBE()) measured_z = NAN; } diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h index dbdb66e14347..ab546b9be853 100644 --- a/Marlin/src/module/probe.h +++ b/Marlin/src/module/probe.h @@ -29,9 +29,9 @@ #if HAS_BED_PROBE - constexpr float nozzle_to_probe_offset[XYZ] = NOZZLE_TO_PROBE_OFFSET; + constexpr xyz_pos_t nozzle_to_probe_offset = NOZZLE_TO_PROBE_OFFSET; - extern float probe_offset[XYZ]; + extern xyz_pos_t probe_offset; bool set_probe_deployed(const bool deploy); #ifdef Z_AFTER_PROBING @@ -44,6 +44,9 @@ PROBE_PT_BIG_RAISE // Raise to big clearance after run_z_probe }; float probe_at_point(const float &rx, const float &ry, const ProbePtRaise raise_after=PROBE_PT_NONE, const uint8_t verbose_level=0, const bool probe_relative=true); + inline float probe_at_point(const xy_pos_t &pos, const ProbePtRaise raise_after=PROBE_PT_NONE, const uint8_t verbose_level=0, const bool probe_relative=true) { + return probe_at_point(pos.x, pos.y, raise_after, verbose_level, probe_relative); + } #define DEPLOY_PROBE() set_probe_deployed(true) #define STOW_PROBE() set_probe_deployed(false) #if HAS_HEATED_BED && ENABLED(WAIT_FOR_BED_HEATER) @@ -52,7 +55,8 @@ #else - constexpr float probe_offset[XYZ] = { 0 }; + constexpr xyz_pos_t probe_offset{0}; + #define DEPLOY_PROBE() #define STOW_PROBE() @@ -64,7 +68,7 @@ #if IS_KINEMATIC PROBE_X_MIN, MESH_MIN_X #else - (X_MIN_BED) + (MIN_PROBE_EDGE_LEFT), (X_MIN_POS) + probe_offset[X_AXIS] + (X_MIN_BED) + (MIN_PROBE_EDGE_LEFT), (X_MIN_POS) + probe_offset.x #endif ); } @@ -73,7 +77,7 @@ #if IS_KINEMATIC PROBE_X_MAX, MESH_MAX_X #else - (X_MAX_BED) - (MIN_PROBE_EDGE_RIGHT), (X_MAX_POS) + probe_offset[X_AXIS] + (X_MAX_BED) - (MIN_PROBE_EDGE_RIGHT), (X_MAX_POS) + probe_offset.x #endif ); } @@ -82,7 +86,7 @@ #if IS_KINEMATIC PROBE_Y_MIN, MESH_MIN_Y #else - (Y_MIN_BED) + (MIN_PROBE_EDGE_FRONT), (Y_MIN_POS) + probe_offset[Y_AXIS] + (Y_MIN_BED) + (MIN_PROBE_EDGE_FRONT), (Y_MIN_POS) + probe_offset.y #endif ); } @@ -91,7 +95,7 @@ #if IS_KINEMATIC PROBE_Y_MAX, MESH_MAX_Y #else - (Y_MAX_BED) - (MIN_PROBE_EDGE_BACK), (Y_MAX_POS) + probe_offset[Y_AXIS] + (Y_MAX_BED) - (MIN_PROBE_EDGE_BACK), (Y_MAX_POS) + probe_offset.y #endif ); } diff --git a/Marlin/src/module/scara.cpp b/Marlin/src/module/scara.cpp index fe98df46bf66..768e311812a2 100644 --- a/Marlin/src/module/scara.cpp +++ b/Marlin/src/module/scara.cpp @@ -36,25 +36,25 @@ float delta_segments_per_second = SCARA_SEGMENTS_PER_SECOND; void scara_set_axis_is_at_home(const AxisEnum axis) { if (axis == Z_AXIS) - current_position[Z_AXIS] = Z_HOME_POS; + current_position.z = Z_HOME_POS; else { /** * SCARA homes XY at the same time */ - float homeposition[XYZ]; + xyz_pos_t homeposition; LOOP_XYZ(i) homeposition[i] = base_home_pos((AxisEnum)i); - // SERIAL_ECHOLNPAIR("homeposition X:", homeposition[X_AXIS], " Y:", homeposition[Y_AXIS]); + // SERIAL_ECHOLNPAIR("homeposition X:", homeposition.x, " Y:", homeposition.y); /** * Get Home position SCARA arm angles using inverse kinematics, * and calculate homing offset using forward kinematics */ inverse_kinematics(homeposition); - forward_kinematics_SCARA(delta[A_AXIS], delta[B_AXIS]); + forward_kinematics_SCARA(delta.a, delta.b); - // SERIAL_ECHOLNPAIR("Cartesian X:", cartes[X_AXIS], " Y:", cartes[Y_AXIS]); + // SERIAL_ECHOLNPAIR("Cartesian X:", cartes.x, " Y:", cartes.y); current_position[axis] = cartes[axis]; @@ -62,8 +62,10 @@ void scara_set_axis_is_at_home(const AxisEnum axis) { } } +static constexpr xy_pos_t scara_offset = { SCARA_OFFSET_X, SCARA_OFFSET_Y }; + /** - * Morgan SCARA Forward Kinematics. Results in cartes[]. + * Morgan SCARA Forward Kinematics. Results in 'cartes'. * Maths and first version by QHARLEY. * Integrated into Marlin and slightly restructured by Joachim Cerny. */ @@ -74,8 +76,8 @@ void forward_kinematics_SCARA(const float &a, const float &b) { b_sin = sin(RADIANS(b)) * L2, b_cos = cos(RADIANS(b)) * L2; - cartes[X_AXIS] = a_cos + b_cos + SCARA_OFFSET_X; //theta - cartes[Y_AXIS] = a_sin + b_sin + SCARA_OFFSET_Y; //theta+phi + cartes.set(a_cos + b_cos + scara_offset.x, // theta + a_sin + b_sin + scara_offset.y); // theta+phi /* SERIAL_ECHOLNPAIR( @@ -86,31 +88,32 @@ void forward_kinematics_SCARA(const float &a, const float &b) { " b_sin=", b_sin, " b_cos=", b_cos ); - SERIAL_ECHOLNPAIR(" cartes (X,Y) = "(cartes[X_AXIS], ", ", cartes[Y_AXIS], ")"); + SERIAL_ECHOLNPAIR(" cartes (X,Y) = "(cartes.x, ", ", cartes.y, ")"); //*/ } /** - * Morgan SCARA Inverse Kinematics. Results in delta[]. + * Morgan SCARA Inverse Kinematics. Results in 'delta'. * * See http://forums.reprap.org/read.php?185,283327 * * Maths and first version by QHARLEY. * Integrated into Marlin and slightly restructured by Joachim Cerny. */ -void inverse_kinematics(const float (&raw)[XYZ]) { +void inverse_kinematics(const xyz_pos_t &raw) { - static float C2, S2, SK1, SK2, THETA, PSI; + float C2, S2, SK1, SK2, THETA, PSI; - float sx = raw[X_AXIS] - SCARA_OFFSET_X, // Translate SCARA to standard X Y - sy = raw[Y_AXIS] - SCARA_OFFSET_Y; // With scaling factor. + // Translate SCARA to standard XY with scaling factor + const xy_pos_t spos = raw - scara_offset; + const float H2 = HYPOT2(spos.x, spos.y); if (L1 == L2) - C2 = HYPOT2(sx, sy) / L1_2_2 - 1; + C2 = H2 / L1_2_2 - 1; else - C2 = (HYPOT2(sx, sy) - (L1_2 + L2_2)) / (2.0 * L1 * L2); + C2 = (H2 - (L1_2 + L2_2)) / (2.0 * L1 * L2); - S2 = SQRT(1 - sq(C2)); + S2 = SQRT(1.0f - sq(C2)); // Unrotated Arm1 plus rotated Arm2 gives the distance from Center to End SK1 = L1 + L2 * C2; @@ -119,14 +122,12 @@ void inverse_kinematics(const float (&raw)[XYZ]) { SK2 = L2 * S2; // Angle of Arm1 is the difference between Center-to-End angle and the Center-to-Elbow - THETA = ATAN2(SK1, SK2) - ATAN2(sx, sy); + THETA = ATAN2(SK1, SK2) - ATAN2(spos.x, spos.y); // Angle of Arm2 PSI = ATAN2(S2, C2); - delta[A_AXIS] = DEGREES(THETA); // theta is support arm angle - delta[B_AXIS] = DEGREES(THETA + PSI); // equal to sub arm angle (inverted motor) - delta[C_AXIS] = raw[Z_AXIS]; + delta.set(DEGREES(THETA), DEGREES(THETA + PSI), raw.z); /* DEBUG_POS("SCARA IK", raw); diff --git a/Marlin/src/module/scara.h b/Marlin/src/module/scara.h index 3a17cddbfd99..cde1d1bcd684 100644 --- a/Marlin/src/module/scara.h +++ b/Marlin/src/module/scara.h @@ -36,11 +36,7 @@ float constexpr L1 = SCARA_LINKAGE_1, L2 = SCARA_LINKAGE_2, void scara_set_axis_is_at_home(const AxisEnum axis); -void inverse_kinematics(const float (&raw)[XYZ]); -FORCE_INLINE void inverse_kinematics(const float (&raw)[XYZE]) { - const float raw_xyz[XYZ] = { raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS] }; - inverse_kinematics(raw_xyz); -} +void inverse_kinematics(const xyz_pos_t &raw); void forward_kinematics_SCARA(const float &a, const float &b); void scara_report_positions(); diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index b806cb1142e8..6bee709b4edc 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -169,10 +169,10 @@ uint8_t Stepper::steps_per_isr; #endif uint8_t Stepper::oversampling_factor; -int32_t Stepper::delta_error[XYZE] = { 0 }; +xyze_long_t Stepper::delta_error{0}; -uint32_t Stepper::advance_dividend[XYZE] = { 0 }, - Stepper::advance_divisor = 0, +xyze_ulong_t Stepper::advance_dividend{0}; +uint32_t Stepper::advance_divisor = 0, Stepper::step_events_completed = 0, // The number of step events executed in the current block Stepper::accelerate_until, // The count at which to stop accelerating Stepper::decelerate_after, // The count at which to start decelerating @@ -218,10 +218,9 @@ int32_t Stepper::ticks_nominal = -1; uint32_t Stepper::acc_step_rate; // needed for deceleration start point #endif -volatile int32_t Stepper::endstops_trigsteps[XYZ]; - -volatile int32_t Stepper::count_position[NUM_AXIS] = { 0 }; -int8_t Stepper::count_direction[NUM_AXIS] = { 0, 0, 0, 0 }; +xyz_long_t Stepper::endstops_trigsteps; +xyze_long_t Stepper::count_position{0}; +xyze_int8_t Stepper::count_direction{0}; #define DUAL_ENDSTOP_APPLY_STEP(A,V) \ if (separate_multi_axis) { \ @@ -390,20 +389,20 @@ void Stepper::set_directions() { // what e-steppers will step. Likely all. Set all. if (motor_direction(E_AXIS)) { MIXER_STEPPER_LOOP(j) REV_E_DIR(j); - count_direction[E_AXIS] = -1; + count_direction.e = -1; } else { MIXER_STEPPER_LOOP(j) NORM_E_DIR(j); - count_direction[E_AXIS] = 1; + count_direction.e = 1; } #else if (motor_direction(E_AXIS)) { REV_E_DIR(stepper_extruder); - count_direction[E_AXIS] = -1; + count_direction.e = -1; } else { NORM_E_DIR(stepper_extruder); - count_direction[E_AXIS] = 1; + count_direction.e = 1; } #endif #endif // !LIN_ADVANCE @@ -1459,15 +1458,15 @@ void Stepper::stepper_pulse_phase_isr() { // Pulse Extruders // Tick the E axis, correct error term and update position #if EITHER(LIN_ADVANCE, MIXING_EXTRUDER) - delta_error[E_AXIS] += advance_dividend[E_AXIS]; - if (delta_error[E_AXIS] >= 0) { - count_position[E_AXIS] += count_direction[E_AXIS]; + delta_error.e += advance_dividend.e; + if (delta_error.e >= 0) { + count_position.e += count_direction.e; #if ENABLED(LIN_ADVANCE) - delta_error[E_AXIS] -= advance_divisor; + delta_error.e -= advance_divisor; // Don't step E here - But remember the number of steps to perform motor_direction(E_AXIS) ? --LA_steps : ++LA_steps; #else // !LIN_ADVANCE && MIXING_EXTRUDER - // Don't adjust delta_error[E_AXIS] here! + // Don't adjust delta_error.e here! // Being positive is the criteria for ending the pulse. E_STEP_WRITE(mixer.get_next_stepper(), !INVERT_E_STEP_PIN); #endif @@ -1504,8 +1503,8 @@ void Stepper::stepper_pulse_phase_isr() { #if DISABLED(LIN_ADVANCE) #if ENABLED(MIXING_EXTRUDER) - if (delta_error[E_AXIS] >= 0) { - delta_error[E_AXIS] -= advance_divisor; + if (delta_error.e >= 0) { + delta_error.e -= advance_divisor; E_STEP_WRITE(mixer.get_stepper(), INVERT_E_STEP_PIN); } #else // !MIXING_EXTRUDER @@ -1660,10 +1659,7 @@ uint32_t Stepper::stepper_block_phase_isr() { // Sync block? Sync the stepper counts and return while (TEST(current_block->flag, BLOCK_BIT_SYNC_POSITION)) { - _set_position( - current_block->position[A_AXIS], current_block->position[B_AXIS], - current_block->position[C_AXIS], current_block->position[E_AXIS] - ); + _set_position(current_block->position); planner.discard_current_block(); // Try to get a new block @@ -1698,7 +1694,7 @@ uint32_t Stepper::stepper_block_phase_isr() { #endif #define X_MOVE_TEST ( S_(1) != S_(2) || (S_(1) > 0 && D_(1) X_CMP D_(2)) ) #else - #define X_MOVE_TEST !!current_block->steps[A_AXIS] + #define X_MOVE_TEST !!current_block->steps.a #endif #if CORE_IS_XY || CORE_IS_YZ @@ -1716,7 +1712,7 @@ uint32_t Stepper::stepper_block_phase_isr() { #endif #define Y_MOVE_TEST ( S_(1) != S_(2) || (S_(1) > 0 && D_(1) Y_CMP D_(2)) ) #else - #define Y_MOVE_TEST !!current_block->steps[B_AXIS] + #define Y_MOVE_TEST !!current_block->steps.b #endif #if CORE_IS_XZ || CORE_IS_YZ @@ -1734,17 +1730,17 @@ uint32_t Stepper::stepper_block_phase_isr() { #endif #define Z_MOVE_TEST ( S_(1) != S_(2) || (S_(1) > 0 && D_(1) Z_CMP D_(2)) ) #else - #define Z_MOVE_TEST !!current_block->steps[C_AXIS] + #define Z_MOVE_TEST !!current_block->steps.c #endif uint8_t axis_bits = 0; if (X_MOVE_TEST) SBI(axis_bits, A_AXIS); if (Y_MOVE_TEST) SBI(axis_bits, B_AXIS); if (Z_MOVE_TEST) SBI(axis_bits, C_AXIS); - //if (!!current_block->steps[E_AXIS]) SBI(axis_bits, E_AXIS); - //if (!!current_block->steps[A_AXIS]) SBI(axis_bits, X_HEAD); - //if (!!current_block->steps[B_AXIS]) SBI(axis_bits, Y_HEAD); - //if (!!current_block->steps[C_AXIS]) SBI(axis_bits, Z_HEAD); + //if (!!current_block->steps.e) SBI(axis_bits, E_AXIS); + //if (!!current_block->steps.a) SBI(axis_bits, X_HEAD); + //if (!!current_block->steps.b) SBI(axis_bits, Y_HEAD); + //if (!!current_block->steps.c) SBI(axis_bits, Z_HEAD); axis_did_move = axis_bits; // No acceleration / deceleration time elapsed so far @@ -1767,15 +1763,10 @@ uint32_t Stepper::stepper_block_phase_isr() { step_event_count = current_block->step_event_count << oversampling; // Initialize Bresenham delta errors to 1/2 - delta_error[X_AXIS] = delta_error[Y_AXIS] = delta_error[Z_AXIS] = delta_error[E_AXIS] = -int32_t(step_event_count); + delta_error = -int32_t(step_event_count); - // Calculate Bresenham dividends - advance_dividend[X_AXIS] = current_block->steps[X_AXIS] << 1; - advance_dividend[Y_AXIS] = current_block->steps[Y_AXIS] << 1; - advance_dividend[Z_AXIS] = current_block->steps[Z_AXIS] << 1; - advance_dividend[E_AXIS] = current_block->steps[E_AXIS] << 1; - - // Calculate Bresenham divisor + // Calculate Bresenham dividends and divisors + advance_dividend = current_block->steps << 1; advance_divisor = step_event_count << 1; // No step events completed so far @@ -1840,7 +1831,7 @@ uint32_t Stepper::stepper_block_phase_isr() { // If delayed Z enable, enable it now. This option will severely interfere with // timing between pulses when chaining motion between blocks, and it could lead // to lost steps in both X and Y axis, so avoid using it unless strictly necessary!! - if (current_block->steps[Z_AXIS]) enable_Z(); + if (current_block->steps.z) enable_Z(); #endif // Mark the time_nominal as not calculated yet @@ -2195,26 +2186,18 @@ void Stepper::_set_position(const int32_t &a, const int32_t &b, const int32_t &c #if CORE_IS_XY // corexy positioning // these equations follow the form of the dA and dB equations on http://www.corexy.com/theory.html - count_position[A_AXIS] = a + b; - count_position[B_AXIS] = CORESIGN(a - b); - count_position[Z_AXIS] = c; + count_position.set(a + b, CORESIGN(a - b), c); #elif CORE_IS_XZ // corexz planning - count_position[A_AXIS] = a + c; - count_position[Y_AXIS] = b; - count_position[C_AXIS] = CORESIGN(a - c); + count_position.set(a + c, b, CORESIGN(a - c)); #elif CORE_IS_YZ // coreyz planning - count_position[X_AXIS] = a; - count_position[B_AXIS] = b + c; - count_position[C_AXIS] = CORESIGN(b - c); + count_position.set(a, b + c, CORESIGN(b - c)); #else // default non-h-bot planning - count_position[X_AXIS] = a; - count_position[Y_AXIS] = b; - count_position[Z_AXIS] = c; + count_position.set(a, b, c); #endif - count_position[E_AXIS] = e; + count_position.e = e; } /** @@ -2290,36 +2273,22 @@ void Stepper::report_positions() { if (was_enabled) DISABLE_STEPPER_DRIVER_INTERRUPT(); #endif - const int32_t xpos = count_position[X_AXIS], - ypos = count_position[Y_AXIS], - zpos = count_position[Z_AXIS]; + const xyz_long_t pos = count_position; #ifdef __AVR__ if (was_enabled) ENABLE_STEPPER_DRIVER_INTERRUPT(); #endif #if CORE_IS_XY || CORE_IS_XZ || ENABLED(DELTA) || IS_SCARA - SERIAL_ECHOPGM(MSG_COUNT_A); - #else - SERIAL_ECHOPGM(MSG_COUNT_X); - #endif - SERIAL_ECHO(xpos); - - #if CORE_IS_XY || CORE_IS_YZ || ENABLED(DELTA) || IS_SCARA - SERIAL_ECHOPGM(" B:"); + SERIAL_ECHOPAIR(MSG_COUNT_A, pos.x, " B:", pos.y); #else - SERIAL_ECHOPGM(" Y:"); + SERIAL_ECHOPAIR(MSG_COUNT_X, pos.x, " Y:", pos.y); #endif - SERIAL_ECHO(ypos); - #if CORE_IS_XZ || CORE_IS_YZ || ENABLED(DELTA) - SERIAL_ECHOPGM(" C:"); + SERIAL_ECHOLNPAIR(" C:", pos.z); #else - SERIAL_ECHOPGM(" Z:"); + SERIAL_ECHOLNPAIR(" Z:", pos.z); #endif - SERIAL_ECHO(zpos); - - SERIAL_EOL(); } #if ENABLED(BABYSTEPPING) diff --git a/Marlin/src/module/stepper.h b/Marlin/src/module/stepper.h index d098dd44845b..839a9a9d5e01 100644 --- a/Marlin/src/module/stepper.h +++ b/Marlin/src/module/stepper.h @@ -278,9 +278,9 @@ class Stepper { #endif // Delta error variables for the Bresenham line tracer - static int32_t delta_error[XYZE]; - static uint32_t advance_dividend[XYZE], - advance_divisor, + static xyze_long_t delta_error; + static xyze_ulong_t advance_dividend; + static uint32_t advance_divisor, step_events_completed, // The number of step events executed in the current block accelerate_until, // The point from where we need to stop acceleration decelerate_after, // The point from where we need to start decelerating @@ -320,17 +320,17 @@ class Stepper { // // Exact steps at which an endstop was triggered // - static volatile int32_t endstops_trigsteps[XYZ]; + static xyz_long_t endstops_trigsteps; // // Positions of stepper motors, in step units // - static volatile int32_t count_position[NUM_AXIS]; + static xyze_long_t count_position; // // Current direction of stepper motors (+1 or -1) // - static int8_t count_direction[NUM_AXIS]; + static xyze_int8_t count_direction; public: @@ -382,13 +382,11 @@ class Stepper { // The extruder associated to the last movement FORCE_INLINE static uint8_t movement_extruder() { - return - #if ENABLED(MIXING_EXTRUDER) || EXTRUDERS < 2 - 0 - #else - last_moved_extruder + return (0 + #if EXTRUDERS > 1 && DISABLED(MIXING_EXTRUDER) + + last_moved_extruder #endif - ; + ); } // Handle a triggered endstop @@ -443,8 +441,9 @@ class Stepper { _set_position(a, b, c, e); if (was_enabled) ENABLE_STEPPER_DRIVER_INTERRUPT(); } + static inline void set_position(const xyze_long_t &abce) { set_position(abce.a, abce.b, abce.c, abce.e); } - static inline void set_position(const AxisEnum a, const int32_t &v) { + static inline void set_axis_position(const AxisEnum a, const int32_t &v) { planner.synchronize(); #ifdef __AVR__ @@ -469,6 +468,7 @@ class Stepper { // Set the current position in steps static void _set_position(const int32_t &a, const int32_t &b, const int32_t &c, const int32_t &e); + FORCE_INLINE static void _set_position(const abce_long_t &spos) { _set_position(spos.a, spos.b, spos.c, spos.e); } FORCE_INLINE static uint32_t calc_timer_interval(uint32_t step_rate, uint8_t scale, uint8_t* loops) { uint32_t timer; diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp index 6178a7ce5d28..cd6d21bae7b5 100644 --- a/Marlin/src/module/tool_change.cpp +++ b/Marlin/src/module/tool_change.cpp @@ -133,8 +133,8 @@ #endif // SWITCHING_NOZZLE -inline void _line_to_current(const AxisEnum fr_axis, const float fscale=1.0f) { - planner.buffer_line(current_position, planner.settings.max_feedrate_mm_s[fr_axis] * fscale, active_extruder); +inline void _line_to_current(const AxisEnum fr_axis, const float fscale=1) { + line_to_current_position(planner.settings.max_feedrate_mm_s[fr_axis] * fscale); } inline void slow_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis, 0.5f); } inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis); } @@ -150,11 +150,11 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a inline void magnetic_parking_extruder_tool_change(const uint8_t new_tool) { - const float oldx = current_position[X_AXIS], + const float oldx = current_position.x, grabpos = mpe_settings.parking_xpos[new_tool] + (new_tool ? mpe_settings.grab_distance : -mpe_settings.grab_distance), offsetcompensation = (0 #if HAS_HOTEND_OFFSET - + hotend_offset[X_AXIS][active_extruder] * mpe_settings.compensation_factor + + hotend_offset[active_extruder].x * mpe_settings.compensation_factor #endif ); @@ -174,7 +174,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a // STEP 1 - current_position[X_AXIS] = mpe_settings.parking_xpos[new_tool] + offsetcompensation; + current_position.x = mpe_settings.parking_xpos[new_tool] + offsetcompensation; if (DEBUGGING(LEVELING)) { DEBUG_ECHOPAIR("(1) Move extruder ", int(new_tool)); @@ -186,7 +186,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a // STEP 2 - current_position[X_AXIS] = grabpos + offsetcompensation; + current_position.x = grabpos + offsetcompensation; if (DEBUGGING(LEVELING)) { DEBUG_ECHOPAIR("(2) Couple extruder ", int(new_tool)); @@ -201,7 +201,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a // STEP 3 - current_position[X_AXIS] = mpe_settings.parking_xpos[new_tool] + offsetcompensation; + current_position.x = mpe_settings.parking_xpos[new_tool] + offsetcompensation; if (DEBUGGING(LEVELING)) { DEBUG_ECHOPAIR("(3) Move extruder ", int(new_tool)); DEBUG_POS(" back to new extruder ParkPos", current_position); @@ -212,7 +212,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a // STEP 4 - current_position[X_AXIS] = mpe_settings.parking_xpos[active_extruder] + (active_extruder == 0 ? MPE_TRAVEL_DISTANCE : -MPE_TRAVEL_DISTANCE) + offsetcompensation; + current_position.x = mpe_settings.parking_xpos[active_extruder] + (active_extruder == 0 ? MPE_TRAVEL_DISTANCE : -MPE_TRAVEL_DISTANCE) + offsetcompensation; if (DEBUGGING(LEVELING)) { DEBUG_ECHOPAIR("(4) Move extruder ", int(new_tool)); DEBUG_POS(" close to old extruder ParkPos", current_position); @@ -223,7 +223,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a // STEP 5 - current_position[X_AXIS] = mpe_settings.parking_xpos[active_extruder] + offsetcompensation; + current_position.x = mpe_settings.parking_xpos[active_extruder] + offsetcompensation; if (DEBUGGING(LEVELING)) { DEBUG_ECHOPAIR("(5) Park extruder ", int(new_tool)); @@ -235,7 +235,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a // STEP 6 - current_position[X_AXIS] = oldx; + current_position.x = oldx; if (DEBUGGING(LEVELING)) { DEBUG_ECHOPAIR("(6) Move extruder ", int(new_tool)); @@ -275,12 +275,12 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a constexpr float parkingposx[] = PARKING_EXTRUDER_PARKING_X; #if HAS_HOTEND_OFFSET - const float x_offset = hotend_offset[X_AXIS][active_extruder]; + const float x_offset = hotend_offset[active_extruder].x; #else constexpr float x_offset = 0; #endif - const float midpos = (parkingposx[0] + parkingposx[1]) * 0.5 + x_offset, + const float midpos = (parkingposx[0] + parkingposx[1]) * 0.5f + x_offset, grabpos = parkingposx[new_tool] + (new_tool ? PARKING_EXTRUDER_GRAB_DISTANCE : -(PARKING_EXTRUDER_GRAB_DISTANCE)) + x_offset; /** @@ -296,7 +296,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a if (DEBUGGING(LEVELING)) DEBUG_POS("Start PE Tool-Change", current_position); - current_position[X_AXIS] = parkingposx[active_extruder] + x_offset; + current_position.x = parkingposx[active_extruder] + x_offset; if (DEBUGGING(LEVELING)) { DEBUG_ECHOLNPAIR("(1) Park extruder ", int(active_extruder)); DEBUG_POS("Moving ParkPos", current_position); @@ -311,7 +311,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a // STEP 3 - current_position[X_AXIS] += active_extruder ? -10 : 10; // move 10mm away from parked extruder + current_position.x += active_extruder ? -10 : 10; // move 10mm away from parked extruder if (DEBUGGING(LEVELING)) { DEBUG_ECHOLNPGM("(3) Move near new extruder"); DEBUG_POS("Move away from parked extruder", current_position); @@ -329,10 +329,10 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a // STEP 5 - current_position[X_AXIS] = grabpos + (new_tool ? -10 : 10); + current_position.x = grabpos + (new_tool ? -10 : 10); fast_line_to_current(X_AXIS); - current_position[X_AXIS] = grabpos; + current_position.x = grabpos; if (DEBUGGING(LEVELING)) { planner.synchronize(); DEBUG_POS("(5) Unpark extruder", current_position); @@ -341,9 +341,9 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a // STEP 6 - current_position[X_AXIS] = midpos + current_position.x = midpos #if HAS_HOTEND_OFFSET - - hotend_offset[X_AXIS][new_tool] + - hotend_offset[new_tool].x #endif ; if (DEBUGGING(LEVELING)) { @@ -388,14 +388,14 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a if (DEBUGGING(LEVELING)) DEBUG_POS("Start ST Tool-Change", current_position); - current_position[X_AXIS] = placexpos; + current_position.x = placexpos; if (DEBUGGING(LEVELING)) { DEBUG_ECHOLNPAIR("(1) Place old tool ", int(active_extruder)); DEBUG_POS("Move X SwitchPos", current_position); } fast_line_to_current(X_AXIS); - current_position[Y_AXIS] = SWITCHING_TOOLHEAD_Y_POS - (SWITCHING_TOOLHEAD_Y_SECURITY); + current_position.y = SWITCHING_TOOLHEAD_Y_POS - (SWITCHING_TOOLHEAD_Y_SECURITY); if (DEBUGGING(LEVELING)) { planner.synchronize(); DEBUG_POS("Move Y SwitchPos + Security", current_position); @@ -409,7 +409,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a MOVE_SERVO(SWITCHING_TOOLHEAD_SERVO_NR, angles[1]); safe_delay(500); - current_position[Y_AXIS] = SWITCHING_TOOLHEAD_Y_POS; + current_position.y = SWITCHING_TOOLHEAD_Y_POS; if (DEBUGGING(LEVELING)) DEBUG_POS("Move Y SwitchPos", current_position); slow_line_to_current(Y_AXIS); @@ -417,13 +417,13 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a planner.synchronize(); safe_delay(200); - current_position[Y_AXIS] -= SWITCHING_TOOLHEAD_Y_CLEAR; + current_position.y -= SWITCHING_TOOLHEAD_Y_CLEAR; if (DEBUGGING(LEVELING)) DEBUG_POS("Move back Y clear", current_position); fast_line_to_current(Y_AXIS); // move away from docked toolhead // 3. Move to the new toolhead - current_position[X_AXIS] = grabxpos; + current_position.x = grabxpos; if (DEBUGGING(LEVELING)) { planner.synchronize(); DEBUG_ECHOLNPGM("(3) Move to new toolhead position"); @@ -431,7 +431,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a } fast_line_to_current(X_AXIS); - current_position[Y_AXIS] = SWITCHING_TOOLHEAD_Y_POS - (SWITCHING_TOOLHEAD_Y_SECURITY); + current_position.y = SWITCHING_TOOLHEAD_Y_POS - (SWITCHING_TOOLHEAD_Y_SECURITY); if (DEBUGGING(LEVELING)) { planner.synchronize(); DEBUG_POS("Move Y SwitchPos + Security", current_position); @@ -440,7 +440,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a // 4. Grab and lock the new toolhead - current_position[Y_AXIS] = SWITCHING_TOOLHEAD_Y_POS; + current_position.y = SWITCHING_TOOLHEAD_Y_POS; if (DEBUGGING(LEVELING)) { planner.synchronize(); DEBUG_ECHOLNPGM("(4) Grab and lock new toolhead"); @@ -454,7 +454,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a MOVE_SERVO(SWITCHING_TOOLHEAD_SERVO_NR, angles[0]); safe_delay(500); - current_position[Y_AXIS] -= SWITCHING_TOOLHEAD_Y_CLEAR; + current_position.y -= SWITCHING_TOOLHEAD_Y_CLEAR; if (DEBUGGING(LEVELING)) DEBUG_POS("Move back Y clear", current_position); fast_line_to_current(Y_AXIS); // Move away from docked toolhead planner.synchronize(); // Always sync the final move @@ -486,33 +486,33 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a // 1. Move to switch position current toolhead - current_position[Y_AXIS] = SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_CLEAR; + current_position.y = SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_CLEAR; if (DEBUGGING(LEVELING)) { SERIAL_ECHOLNPAIR("(1) Place old tool ", int(active_extruder)); DEBUG_POS("Move Y SwitchPos + Security", current_position); } fast_line_to_current(Y_AXIS); - current_position[X_AXIS] = placexclear; + current_position.x = placexclear; if (DEBUGGING(LEVELING)) { planner.synchronize(); DEBUG_POS("Move X SwitchPos + Security", current_position); } fast_line_to_current(X_AXIS); - current_position[Y_AXIS] = SWITCHING_TOOLHEAD_Y_POS; + current_position.y = SWITCHING_TOOLHEAD_Y_POS; if (DEBUGGING(LEVELING)) { planner.synchronize(); DEBUG_POS("Move Y SwitchPos", current_position); } fast_line_to_current(Y_AXIS); - current_position[X_AXIS] = placexpos; + current_position.x = placexpos; if (DEBUGGING(LEVELING)) { planner.synchronize(); DEBUG_POS("Move X SwitchPos", current_position); } - planner.buffer_line(current_position, (planner.settings.max_feedrate_mm_s[X_AXIS] * 0.25), active_extruder); + line_to_current_position(planner.settings.max_feedrate_mm_s[X_AXIS] * 0.25f); // 2. Release and place toolhead in the dock @@ -521,16 +521,16 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a DEBUG_ECHOLNPGM("(2) Release and Place Toolhead"); } - current_position[Y_AXIS] = SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_RELEASE; + current_position.y = SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_RELEASE; if (DEBUGGING(LEVELING)) DEBUG_POS("Move Y SwitchPos + Release", current_position); - planner.buffer_line(current_position, (planner.settings.max_feedrate_mm_s[Y_AXIS] * 0.1), active_extruder); + line_to_current_position(planner.settings.max_feedrate_mm_s[Y_AXIS] * 0.1f); - current_position[Y_AXIS] = SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_SECURITY; + current_position.y = SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_SECURITY; if (DEBUGGING(LEVELING)) { planner.synchronize(); DEBUG_POS("Move Y SwitchPos + Security", current_position); } - planner.buffer_line(current_position, (planner.settings.max_feedrate_mm_s[Y_AXIS]), active_extruder); + line_to_current_position(planner.settings.max_feedrate_mm_s[Y_AXIS]); // 3. Move to new toolhead position @@ -539,7 +539,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a DEBUG_ECHOLNPGM("(3) Move to new toolhead position"); } - current_position[X_AXIS] = grabxpos; + current_position.x = grabxpos; if (DEBUGGING(LEVELING)) DEBUG_POS("Move to new toolhead X", current_position); fast_line_to_current(X_AXIS); @@ -550,11 +550,11 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a DEBUG_ECHOLNPGM("(4) Grab new toolhead, move to security position"); } - current_position[Y_AXIS] = SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_RELEASE; + current_position.y = SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_RELEASE; if (DEBUGGING(LEVELING)) DEBUG_POS("Move Y SwitchPos + Release", current_position); - planner.buffer_line(current_position, (planner.settings.max_feedrate_mm_s[Y_AXIS]), active_extruder); + line_to_current_position(planner.settings.max_feedrate_mm_s[Y_AXIS]); - current_position[Y_AXIS] = SWITCHING_TOOLHEAD_Y_POS; + current_position.y = SWITCHING_TOOLHEAD_Y_POS; if (DEBUGGING(LEVELING)) { planner.synchronize(); DEBUG_POS("Move Y SwitchPos", current_position); @@ -563,11 +563,11 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a #if ENABLED(PRIME_BEFORE_REMOVE) && (SWITCHING_TOOLHEAD_PRIME_MM || SWITCHING_TOOLHEAD_RETRACT_MM) #if SWITCHING_TOOLHEAD_PRIME_MM - current_position[E_AXIS] += SWITCHING_TOOLHEAD_PRIME_MM; + current_position.e += SWITCHING_TOOLHEAD_PRIME_MM; planner.buffer_line(current_position, MMM_TO_MMS(SWITCHING_TOOLHEAD_PRIME_FEEDRATE), new_tool); #endif #if SWITCHING_TOOLHEAD_RETRACT_MM - current_position[E_AXIS] -= SWITCHING_TOOLHEAD_RETRACT_MM; + current_position.e -= SWITCHING_TOOLHEAD_RETRACT_MM; planner.buffer_line(current_position, MMM_TO_MMS(SWITCHING_TOOLHEAD_RETRACT_FEEDRATE), new_tool); #endif #else @@ -575,13 +575,13 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a safe_delay(100); // Give switch time to settle #endif - current_position[X_AXIS] = grabxclear; + current_position.x = grabxclear; if (DEBUGGING(LEVELING)) DEBUG_POS("Move to new toolhead X + Security", current_position); _line_to_current(X_AXIS, 0.1f); planner.synchronize(); safe_delay(100); // Give switch time to settle - current_position[Y_AXIS] += SWITCHING_TOOLHEAD_Y_CLEAR; + current_position.y += SWITCHING_TOOLHEAD_Y_CLEAR; if (DEBUGGING(LEVELING)) DEBUG_POS("Move back Y clear", current_position); fast_line_to_current(Y_AXIS); // move away from docked toolhead planner.synchronize(); // Always sync last tool-change move @@ -601,6 +601,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a constexpr float toolheadposx[] = SWITCHING_TOOLHEAD_X_POS; const float placexpos = toolheadposx[active_extruder], grabxpos = toolheadposx[new_tool]; + const xyz_pos_t &hoffs = hotend_offset[active_extruder]; /** * 1. Raise Z-Axis to give enough clearance @@ -618,7 +619,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a // 1. Raise Z-Axis to give enough clearance - current_position[Z_AXIS] += SWITCHING_TOOLHEAD_Z_HOP; + current_position.z += SWITCHING_TOOLHEAD_Z_HOP; if (DEBUGGING(LEVELING)) DEBUG_POS("(1) Raise Z-Axis ", current_position); fast_line_to_current(Z_AXIS); @@ -629,8 +630,8 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a SERIAL_ECHOLNPAIR("(2) Move near active extruder parking", active_extruder); DEBUG_POS("Moving ParkPos", current_position); } - current_position[X_AXIS] = hotend_offset[X_AXIS][active_extruder] + placexpos; - current_position[Y_AXIS] = hotend_offset[Y_AXIS][active_extruder] + SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_CLEAR; + current_position.set(hoffs.x + placexpos, + hoffs.y + SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_CLEAR); fast_line_to_current(X_AXIS); // 3. Move gently to park position of active extruder @@ -641,7 +642,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a DEBUG_POS("Moving ParkPos", current_position); } - current_position[Y_AXIS] -= SWITCHING_TOOLHEAD_Y_CLEAR; + current_position.y -= SWITCHING_TOOLHEAD_Y_CLEAR; slow_line_to_current(Y_AXIS); // 4. Disengage magnetic field, wait for delay @@ -657,16 +658,15 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a DEBUG_POS("Moving ParkPos", current_position); } - current_position[Y_AXIS] += SWITCHING_TOOLHEAD_Y_CLEAR; + current_position.y += SWITCHING_TOOLHEAD_Y_CLEAR; slow_line_to_current(Y_AXIS); - - current_position[X_AXIS] = hotend_offset[X_AXIS][active_extruder] + grabxpos; - current_position[Y_AXIS] = hotend_offset[Y_AXIS][active_extruder] + SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_CLEAR; + current_position.set(hoffs.x + grabxpos, + hoffs.y + SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_CLEAR); fast_line_to_current(X_AXIS); // 6. Move gently to park position of new extruder - current_position[Y_AXIS] -= SWITCHING_TOOLHEAD_Y_CLEAR; + current_position.y -= SWITCHING_TOOLHEAD_Y_CLEAR; if (DEBUGGING(LEVELING)) { planner.synchronize(); DEBUG_ECHOLNPGM("(6) Move near new extruder"); @@ -681,7 +681,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a // 8. Unpark extruder - current_position[Y_AXIS] += SWITCHING_TOOLHEAD_Y_CLEAR; + current_position.y += SWITCHING_TOOLHEAD_Y_CLEAR; if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("(8) Unpark extruder"); slow_line_to_current(X_AXIS); planner.synchronize(); // Always sync the final move @@ -689,7 +689,7 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a // 9. Apply Z hotend offset to current position if (DEBUGGING(LEVELING)) DEBUG_POS("(9) Applying Z-offset", current_position); - current_position[Z_AXIS] += hotend_offset[Z_AXIS][active_extruder] - hotend_offset[Z_AXIS][new_tool]; + current_position.z += hoffs.z - hotend_offset[new_tool].z; if (DEBUGGING(LEVELING)) DEBUG_POS("EMST Tool-Change done.", current_position); } @@ -719,14 +719,15 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a const float xhome = x_home_pos(active_extruder); if (dual_x_carriage_mode == DXC_AUTO_PARK_MODE - && IsRunning() - && (delayed_move_time || current_position[X_AXIS] != xhome) && ! no_move + && IsRunning() && !no_move + && (delayed_move_time || current_position.x != xhome) ) { if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("MoveX to ", xhome); // Park old head - planner.buffer_line(xhome, current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], planner.settings.max_feedrate_mm_s[X_AXIS], active_extruder); + current_position.x = xhome; + line_to_current_position(planner.settings.max_feedrate_mm_s[X_AXIS]); planner.synchronize(); } @@ -741,13 +742,13 @@ inline void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_a switch (dual_x_carriage_mode) { case DXC_FULL_CONTROL_MODE: // New current position is the position of the activated extruder - current_position[X_AXIS] = inactive_extruder_x_pos; + current_position.x = inactive_extruder_x_pos; // Save the inactive extruder's position (from the old current_position) - inactive_extruder_x_pos = destination[X_AXIS]; + inactive_extruder_x_pos = destination.x; break; case DXC_AUTO_PARK_MODE: // record current raised toolhead position for use by unpark - COPY(raised_parked_position, current_position); + raised_parked_position = current_position; active_extruder_parked = true; delayed_move_time = 0; break; @@ -852,7 +853,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) { #if ENABLED(ADVANCED_PAUSE_FEATURE) do_pause_e_move(-toolchange_settings.swap_length, MMM_TO_MMS(toolchange_settings.retract_speed)); #else - current_position[E_AXIS] -= toolchange_settings.swap_length / planner.e_factor[old_tool]; + current_position.e -= toolchange_settings.swap_length / planner.e_factor[old_tool]; planner.buffer_line(current_position, MMM_TO_MMS(toolchange_settings.retract_speed), old_tool); planner.synchronize(); #endif @@ -886,19 +887,18 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) { #endif #endif - set_destination_from_current(); + destination = current_position; #if DISABLED(SWITCHING_NOZZLE) if (can_move_away) { // Do a small lift to avoid the workpiece in the move back (below) - current_position[Z_AXIS] += toolchange_settings.z_raise; + current_position.z += toolchange_settings.z_raise; #if HAS_SOFTWARE_ENDSTOPS - NOMORE(current_position[Z_AXIS], soft_endstop[Z_AXIS].max); + NOMORE(current_position.z, soft_endstop.max.z); #endif fast_line_to_current(Z_AXIS); #if ENABLED(TOOLCHANGE_PARK) - current_position[X_AXIS] = toolchange_settings.change_point.x; - current_position[Y_AXIS] = toolchange_settings.change_point.y; + current_position = toolchange_settings.change_point; #endif planner.buffer_line(current_position, feedrate_mm_s, old_tool); planner.synchronize(); @@ -906,15 +906,12 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) { #endif #if HAS_HOTEND_OFFSET + xyz_pos_t diff = hotend_offset[new_tool]; #if ENABLED(DUAL_X_CARRIAGE) - constexpr float xdiff = 0; - #else - const float xdiff = hotend_offset[X_AXIS][new_tool] - hotend_offset[X_AXIS][old_tool]; + diff.x = 0; #endif - const float ydiff = hotend_offset[Y_AXIS][new_tool] - hotend_offset[Y_AXIS][old_tool], - zdiff = hotend_offset[Z_AXIS][new_tool] - hotend_offset[Z_AXIS][old_tool]; #else - constexpr float xdiff = 0, ydiff = 0, zdiff = 0; + constexpr xyz_pos_t diff{0}; #endif #if ENABLED(DUAL_X_CARRIAGE) @@ -932,30 +929,28 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) { #elif ENABLED(SWITCHING_NOZZLE) && !SWITCHING_NOZZLE_TWO_SERVOS // Switching Nozzle (single servo) // Raise by a configured distance to avoid workpiece, except with // SWITCHING_NOZZLE_TWO_SERVOS, as both nozzles will lift instead. - current_position[Z_AXIS] += _MAX(-zdiff, 0.0) + toolchange_settings.z_raise; + current_position.z += _MAX(-zdiff, 0.0) + toolchange_settings.z_raise; #if HAS_SOFTWARE_ENDSTOPS - NOMORE(current_position[Z_AXIS], soft_endstop[Z_AXIS].max); + NOMORE(current_position.z, soft_endstop.max.z); #endif if (!no_move) fast_line_to_current(Z_AXIS); move_nozzle_servo(new_tool); #endif - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Offset Tool XY by { ", xdiff, ", ", ydiff, ", ", zdiff, " }"); - - // The newly-selected extruder XY is actually at... - current_position[X_AXIS] += xdiff; - current_position[Y_AXIS] += ydiff; - current_position[Z_AXIS] += zdiff; + #if DISABLED(DUAL_X_CARRIAGE) + active_extruder = new_tool; // Set the new active extruder + #endif - // Set the new active extruder if not already done in tool specific function above - active_extruder = new_tool; + // The newly-selected extruder XYZ is actually at... + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Offset Tool XY by { ", diff.x, ", ", diff.y, ", ", diff.z, " }"); + current_position += diff; // Tell the planner the new "current position" sync_plan_position(); #if ENABLED(DELTA) //LOOP_XYZ(i) update_software_endstops(i); // or modify the constrain function - const bool safe_to_move = current_position[Z_AXIS] < delta_clip_start_height - 1; + const bool safe_to_move = current_position.z < delta_clip_start_height - 1; #else constexpr bool safe_to_move = true; #endif @@ -985,21 +980,21 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) { do_pause_e_move(toolchange_settings.swap_length, MMM_TO_MMS(toolchange_settings.prime_speed)); do_pause_e_move(toolchange_settings.extra_prime, ADVANCED_PAUSE_PURGE_FEEDRATE); #else - current_position[E_AXIS] += toolchange_settings.swap_length / planner.e_factor[new_tool]; + current_position.e += toolchange_settings.swap_length / planner.e_factor[new_tool]; planner.buffer_line(current_position, MMM_TO_MMS(toolchange_settings.prime_speed), new_tool); - current_position[E_AXIS] += toolchange_settings.extra_prime / planner.e_factor[new_tool]; + current_position.e += toolchange_settings.extra_prime / planner.e_factor[new_tool]; planner.buffer_line(current_position, MMM_TO_MMS(toolchange_settings.prime_speed * 0.2f), new_tool); #endif planner.synchronize(); - planner.set_e_position_mm((destination[E_AXIS] = current_position[E_AXIS] = current_position[E_AXIS] - (TOOLCHANGE_FIL_EXTRA_PRIME))); + planner.set_e_position_mm((destination.e = current_position.e = current_position.e - (TOOLCHANGE_FIL_EXTRA_PRIME))); } #endif // Prevent a move outside physical bounds #if ENABLED(MAGNETIC_SWITCHING_TOOLHEAD) // If the original position is within tool store area, go to X origin at once - if (destination[Y_AXIS] < SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_CLEAR) { - current_position[X_AXIS] = 0; + if (destination.y < SWITCHING_TOOLHEAD_Y_POS + SWITCHING_TOOLHEAD_Y_CLEAR) { + current_position.x = 0; planner.buffer_line(current_position, planner.settings.max_feedrate_mm_s[X_AXIS], new_tool); planner.synchronize(); } @@ -1012,7 +1007,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) { #if ENABLED(TOOLCHANGE_NO_RETURN) // Just move back down if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Move back Z only"); - do_blocking_move_to_z(destination[Z_AXIS], planner.settings.max_feedrate_mm_s[Z_AXIS]); + do_blocking_move_to_z(destination.z, planner.settings.max_feedrate_mm_s[Z_AXIS]); #else // Move back to the original (or adjusted) position if (DEBUGGING(LEVELING)) DEBUG_POS("Move back", destination); @@ -1028,7 +1023,7 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) { #if ENABLED(SWITCHING_NOZZLE) else { // Move back down. (Including when the new tool is higher.) - do_blocking_move_to_z(destination[Z_AXIS], planner.settings.max_feedrate_mm_s[Z_AXIS]); + do_blocking_move_to_z(destination.z, planner.settings.max_feedrate_mm_s[Z_AXIS]); } #endif diff --git a/Marlin/src/module/tool_change.h b/Marlin/src/module/tool_change.h index 42b96e2c6ad5..613cb1612cbf 100644 --- a/Marlin/src/module/tool_change.h +++ b/Marlin/src/module/tool_change.h @@ -22,6 +22,7 @@ #pragma once #include "../inc/MarlinConfigPre.h" +#include "../core/types.h" #if EXTRUDERS > 1 @@ -31,7 +32,7 @@ int16_t prime_speed, retract_speed; #endif #if ENABLED(TOOLCHANGE_PARK) - struct { float x, y; } change_point; + xy_pos_t change_point; #endif float z_raise; } toolchange_settings_t; diff --git a/config/default/Configuration_adv.h b/config/default/Configuration_adv.h index 9f0217a802b6..3bedfab70775 100644 --- a/config/default/Configuration_adv.h +++ b/config/default/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h index c93807b61500..47a758e90647 100644 --- a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h +++ b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h index a41fa9e9b7b3..55b6c998de8a 100644 --- a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h index 9d69ca35f96a..3239a343236c 100644 --- a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/AlephObjects/TAZ4/Configuration_adv.h b/config/examples/AlephObjects/TAZ4/Configuration_adv.h index d365fdcd4545..9154af82121e 100644 --- a/config/examples/AlephObjects/TAZ4/Configuration_adv.h +++ b/config/examples/AlephObjects/TAZ4/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h index 8bf2c2beb744..7685ea3ef1c6 100644 --- a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h +++ b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h @@ -603,9 +603,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Alfawise/U20/Configuration_adv.h b/config/examples/Alfawise/U20/Configuration_adv.h index 56ac66671daa..8c1841c0df50 100644 --- a/config/examples/Alfawise/U20/Configuration_adv.h +++ b/config/examples/Alfawise/U20/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/AliExpress/UM2pExt/Configuration_adv.h b/config/examples/AliExpress/UM2pExt/Configuration_adv.h index a488416522a6..02528e51cd5c 100644 --- a/config/examples/AliExpress/UM2pExt/Configuration_adv.h +++ b/config/examples/AliExpress/UM2pExt/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Anet/A2/Configuration_adv.h b/config/examples/Anet/A2/Configuration_adv.h index 3bed49adf5ad..e3b4ccb2a602 100644 --- a/config/examples/Anet/A2/Configuration_adv.h +++ b/config/examples/Anet/A2/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Anet/A2plus/Configuration_adv.h b/config/examples/Anet/A2plus/Configuration_adv.h index 3bed49adf5ad..e3b4ccb2a602 100644 --- a/config/examples/Anet/A2plus/Configuration_adv.h +++ b/config/examples/Anet/A2plus/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Anet/A6/Configuration_adv.h b/config/examples/Anet/A6/Configuration_adv.h index 01d8e89e119e..c0f6d138ee0a 100644 --- a/config/examples/Anet/A6/Configuration_adv.h +++ b/config/examples/Anet/A6/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Anet/A8/Configuration_adv.h b/config/examples/Anet/A8/Configuration_adv.h index 605afc09fb42..194dff4f1887 100644 --- a/config/examples/Anet/A8/Configuration_adv.h +++ b/config/examples/Anet/A8/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Anet/A8plus/Configuration_adv.h b/config/examples/Anet/A8plus/Configuration_adv.h index 3b759d3b3b49..771aadb125dc 100644 --- a/config/examples/Anet/A8plus/Configuration_adv.h +++ b/config/examples/Anet/A8plus/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Anet/E16/Configuration_adv.h b/config/examples/Anet/E16/Configuration_adv.h index c64d24c602c5..c891129c6d3b 100644 --- a/config/examples/Anet/E16/Configuration_adv.h +++ b/config/examples/Anet/E16/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/AnyCubic/i3/Configuration_adv.h b/config/examples/AnyCubic/i3/Configuration_adv.h index 0e0349ebcaee..fb395cf5f231 100644 --- a/config/examples/AnyCubic/i3/Configuration_adv.h +++ b/config/examples/AnyCubic/i3/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/ArmEd/Configuration_adv.h b/config/examples/ArmEd/Configuration_adv.h index 1ad055cb411c..2d700565a78a 100644 --- a/config/examples/ArmEd/Configuration_adv.h +++ b/config/examples/ArmEd/Configuration_adv.h @@ -606,9 +606,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h index 760915c3befc..46009ee5c5d2 100644 --- a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/BIBO/TouchX/default/Configuration_adv.h b/config/examples/BIBO/TouchX/default/Configuration_adv.h index 5ce50d730d26..5bc675294f46 100644 --- a/config/examples/BIBO/TouchX/default/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/default/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/BQ/Hephestos/Configuration_adv.h b/config/examples/BQ/Hephestos/Configuration_adv.h index 5561fd1e2962..4370242cbe5a 100644 --- a/config/examples/BQ/Hephestos/Configuration_adv.h +++ b/config/examples/BQ/Hephestos/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/BQ/Hephestos_2/Configuration_adv.h b/config/examples/BQ/Hephestos_2/Configuration_adv.h index 43ad192cc15e..4a3468ab2be7 100644 --- a/config/examples/BQ/Hephestos_2/Configuration_adv.h +++ b/config/examples/BQ/Hephestos_2/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/BQ/WITBOX/Configuration_adv.h b/config/examples/BQ/WITBOX/Configuration_adv.h index 5561fd1e2962..4370242cbe5a 100644 --- a/config/examples/BQ/WITBOX/Configuration_adv.h +++ b/config/examples/BQ/WITBOX/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Cartesio/Configuration_adv.h b/config/examples/Cartesio/Configuration_adv.h index 53cd20647a5a..b80bdb448971 100644 --- a/config/examples/Cartesio/Configuration_adv.h +++ b/config/examples/Cartesio/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Creality/CR-10/Configuration_adv.h b/config/examples/Creality/CR-10/Configuration_adv.h index 1131506e3da2..85087e95e5c2 100644 --- a/config/examples/Creality/CR-10/Configuration_adv.h +++ b/config/examples/Creality/CR-10/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Creality/CR-10S/Configuration_adv.h b/config/examples/Creality/CR-10S/Configuration_adv.h index 0c968a812f65..96eb8d33e9cd 100644 --- a/config/examples/Creality/CR-10S/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Creality/CR-10_5S/Configuration_adv.h b/config/examples/Creality/CR-10_5S/Configuration_adv.h index ed9957a67875..62c1f45bdce0 100644 --- a/config/examples/Creality/CR-10_5S/Configuration_adv.h +++ b/config/examples/Creality/CR-10_5S/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Creality/CR-10mini/Configuration_adv.h b/config/examples/Creality/CR-10mini/Configuration_adv.h index 11bfdca892cc..8901d9933244 100644 --- a/config/examples/Creality/CR-10mini/Configuration_adv.h +++ b/config/examples/Creality/CR-10mini/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Creality/CR-20 Pro/Configuration_adv.h b/config/examples/Creality/CR-20 Pro/Configuration_adv.h index 8b2e7cc246d6..ca68194df8a7 100644 --- a/config/examples/Creality/CR-20 Pro/Configuration_adv.h +++ b/config/examples/Creality/CR-20 Pro/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Creality/CR-20/Configuration_adv.h b/config/examples/Creality/CR-20/Configuration_adv.h index 6eda8d4498eb..2a7523d2cef7 100644 --- a/config/examples/Creality/CR-20/Configuration_adv.h +++ b/config/examples/Creality/CR-20/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Creality/CR-8/Configuration_adv.h b/config/examples/Creality/CR-8/Configuration_adv.h index 987ffe6ab83b..2e590136e821 100644 --- a/config/examples/Creality/CR-8/Configuration_adv.h +++ b/config/examples/Creality/CR-8/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Creality/Ender-2/Configuration_adv.h b/config/examples/Creality/Ender-2/Configuration_adv.h index 9fc48d4e868a..f6faed858ca1 100644 --- a/config/examples/Creality/Ender-2/Configuration_adv.h +++ b/config/examples/Creality/Ender-2/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Creality/Ender-3/Configuration_adv.h b/config/examples/Creality/Ender-3/Configuration_adv.h index 44d99596ddfc..da3854d10b05 100644 --- a/config/examples/Creality/Ender-3/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Creality/Ender-4/Configuration_adv.h b/config/examples/Creality/Ender-4/Configuration_adv.h index 112b55f85d76..f3e0b0750b19 100644 --- a/config/examples/Creality/Ender-4/Configuration_adv.h +++ b/config/examples/Creality/Ender-4/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Creality/Ender-5/Configuration_adv.h b/config/examples/Creality/Ender-5/Configuration_adv.h index 2ff116c69e68..ccf4773d1542 100644 --- a/config/examples/Creality/Ender-5/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h index 075f5605a97f..f27f7440af70 100644 --- a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h +++ b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h index 525e9963bae1..d89af2d74afd 100755 --- a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h +++ b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Einstart-S/Configuration_adv.h b/config/examples/Einstart-S/Configuration_adv.h index f24f158f3a4c..88c2e4c69d6e 100644 --- a/config/examples/Einstart-S/Configuration_adv.h +++ b/config/examples/Einstart-S/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/FYSETC/AIO_II/Configuration_adv.h b/config/examples/FYSETC/AIO_II/Configuration_adv.h index 6451f40a5079..9a085b4e4526 100644 --- a/config/examples/FYSETC/AIO_II/Configuration_adv.h +++ b/config/examples/FYSETC/AIO_II/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h index 745cd643e5d8..1a43895588ce 100644 --- a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h index 745cd643e5d8..1a43895588ce 100644 --- a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h index 745cd643e5d8..1a43895588ce 100644 --- a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h index 745cd643e5d8..1a43895588ce 100644 --- a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/FYSETC/F6_13/Configuration_adv.h b/config/examples/FYSETC/F6_13/Configuration_adv.h index 7588b43aa2d0..bc0bfc97424b 100644 --- a/config/examples/FYSETC/F6_13/Configuration_adv.h +++ b/config/examples/FYSETC/F6_13/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Felix/Configuration_adv.h b/config/examples/Felix/Configuration_adv.h index 231458b21854..31df1e10dbeb 100644 --- a/config/examples/Felix/Configuration_adv.h +++ b/config/examples/Felix/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/FlashForge/CreatorPro/Configuration_adv.h b/config/examples/FlashForge/CreatorPro/Configuration_adv.h index 80bfc2959ac3..a8ed2b836612 100644 --- a/config/examples/FlashForge/CreatorPro/Configuration_adv.h +++ b/config/examples/FlashForge/CreatorPro/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/FolgerTech/i3-2020/Configuration_adv.h b/config/examples/FolgerTech/i3-2020/Configuration_adv.h index d00a05a8660a..bbadcfa82c10 100644 --- a/config/examples/FolgerTech/i3-2020/Configuration_adv.h +++ b/config/examples/FolgerTech/i3-2020/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Formbot/Raptor/Configuration_adv.h b/config/examples/Formbot/Raptor/Configuration_adv.h index a40d28e4ecad..a8d6934f4963 100644 --- a/config/examples/Formbot/Raptor/Configuration_adv.h +++ b/config/examples/Formbot/Raptor/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h index d3b290730f41..d012382114d1 100644 --- a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h @@ -606,9 +606,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Formbot/T_Rex_3/Configuration_adv.h b/config/examples/Formbot/T_Rex_3/Configuration_adv.h index c919581ec446..3a9d541792c9 100644 --- a/config/examples/Formbot/T_Rex_3/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_3/Configuration_adv.h @@ -606,9 +606,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Geeetech/A10/Configuration_adv.h b/config/examples/Geeetech/A10/Configuration_adv.h index d18140a7092b..0806d2eedd8b 100644 --- a/config/examples/Geeetech/A10/Configuration_adv.h +++ b/config/examples/Geeetech/A10/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Geeetech/A10M/Configuration_adv.h b/config/examples/Geeetech/A10M/Configuration_adv.h index 85e13f4d5f1b..45d50774c4cf 100644 --- a/config/examples/Geeetech/A10M/Configuration_adv.h +++ b/config/examples/Geeetech/A10M/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Geeetech/A20M/Configuration_adv.h b/config/examples/Geeetech/A20M/Configuration_adv.h index 3be72ca3db08..94e47a196c62 100644 --- a/config/examples/Geeetech/A20M/Configuration_adv.h +++ b/config/examples/Geeetech/A20M/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Geeetech/MeCreator2/Configuration_adv.h b/config/examples/Geeetech/MeCreator2/Configuration_adv.h index 048a1e955e1b..9dab3dbbe604 100644 --- a/config/examples/Geeetech/MeCreator2/Configuration_adv.h +++ b/config/examples/Geeetech/MeCreator2/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h index d18140a7092b..0806d2eedd8b 100644 --- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h index d18140a7092b..0806d2eedd8b 100644 --- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/HMS434/Configuration_adv.h b/config/examples/HMS434/Configuration_adv.h index 333a0c85b5bf..4dd9f46bf5c1 100644 --- a/config/examples/HMS434/Configuration_adv.h +++ b/config/examples/HMS434/Configuration_adv.h @@ -594,9 +594,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Infitary/i3-M508/Configuration_adv.h b/config/examples/Infitary/i3-M508/Configuration_adv.h index 6a3b21a04369..788f452ae570 100644 --- a/config/examples/Infitary/i3-M508/Configuration_adv.h +++ b/config/examples/Infitary/i3-M508/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/JGAurora/A1/Configuration_adv.h b/config/examples/JGAurora/A1/Configuration_adv.h index 642cb2bde878..1ed9efeb8533 100644 --- a/config/examples/JGAurora/A1/Configuration_adv.h +++ b/config/examples/JGAurora/A1/Configuration_adv.h @@ -607,9 +607,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/JGAurora/A5/Configuration_adv.h b/config/examples/JGAurora/A5/Configuration_adv.h index c244a2a0a5c9..42bf4ca3ff3d 100644 --- a/config/examples/JGAurora/A5/Configuration_adv.h +++ b/config/examples/JGAurora/A5/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/JGAurora/A5S/Configuration_adv.h b/config/examples/JGAurora/A5S/Configuration_adv.h index 642cb2bde878..1ed9efeb8533 100644 --- a/config/examples/JGAurora/A5S/Configuration_adv.h +++ b/config/examples/JGAurora/A5S/Configuration_adv.h @@ -607,9 +607,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/MakerParts/Configuration_adv.h b/config/examples/MakerParts/Configuration_adv.h index 04527f748e5e..f2995f2841e1 100644 --- a/config/examples/MakerParts/Configuration_adv.h +++ b/config/examples/MakerParts/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Malyan/M150/Configuration_adv.h b/config/examples/Malyan/M150/Configuration_adv.h index 3fff5c7cc4cf..83c67f099c45 100644 --- a/config/examples/Malyan/M150/Configuration_adv.h +++ b/config/examples/Malyan/M150/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Malyan/M200/Configuration_adv.h b/config/examples/Malyan/M200/Configuration_adv.h index 372b708c2ae2..384776a295d1 100644 --- a/config/examples/Malyan/M200/Configuration_adv.h +++ b/config/examples/Malyan/M200/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Micromake/C1/enhanced/Configuration_adv.h b/config/examples/Micromake/C1/enhanced/Configuration_adv.h index 3f3ae4054805..e0f4b1da236f 100644 --- a/config/examples/Micromake/C1/enhanced/Configuration_adv.h +++ b/config/examples/Micromake/C1/enhanced/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Mks/Robin/Configuration_adv.h b/config/examples/Mks/Robin/Configuration_adv.h index 2b43d67e64d6..6a56e4021482 100644 --- a/config/examples/Mks/Robin/Configuration_adv.h +++ b/config/examples/Mks/Robin/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Mks/Sbase/Configuration_adv.h b/config/examples/Mks/Sbase/Configuration_adv.h index 28ec8ab8f3e9..9cc53115295c 100644 --- a/config/examples/Mks/Sbase/Configuration_adv.h +++ b/config/examples/Mks/Sbase/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/RapideLite/RL200/Configuration_adv.h b/config/examples/RapideLite/RL200/Configuration_adv.h index 32436ebc912b..fbd7d429d432 100644 --- a/config/examples/RapideLite/RL200/Configuration_adv.h +++ b/config/examples/RapideLite/RL200/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/RigidBot/Configuration_adv.h b/config/examples/RigidBot/Configuration_adv.h index 9ffc55cc9664..c0142621aca3 100644 --- a/config/examples/RigidBot/Configuration_adv.h +++ b/config/examples/RigidBot/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/SCARA/Configuration_adv.h b/config/examples/SCARA/Configuration_adv.h index 5ce747fb3bca..f7c502789b13 100644 --- a/config/examples/SCARA/Configuration_adv.h +++ b/config/examples/SCARA/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h index 8fad7e1b9d56..c60a2e7e565a 100644 --- a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h +++ b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Sanguinololu/Configuration_adv.h b/config/examples/Sanguinololu/Configuration_adv.h index 77da1c18dff6..179f0de35bd3 100644 --- a/config/examples/Sanguinololu/Configuration_adv.h +++ b/config/examples/Sanguinololu/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Tevo/Michelangelo/Configuration_adv.h b/config/examples/Tevo/Michelangelo/Configuration_adv.h index aa71156d6d37..5709472fcd15 100644 --- a/config/examples/Tevo/Michelangelo/Configuration_adv.h +++ b/config/examples/Tevo/Michelangelo/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h index 1cc140d9d002..a179733e4607 100755 --- a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h +++ b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h index 56c1900e7cd1..4856a3a8db62 100755 --- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h index 56c1900e7cd1..4856a3a8db62 100755 --- a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/TheBorg/Configuration_adv.h b/config/examples/TheBorg/Configuration_adv.h index 60053f18a35e..dea285797c57 100644 --- a/config/examples/TheBorg/Configuration_adv.h +++ b/config/examples/TheBorg/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/TinyBoy2/Configuration_adv.h b/config/examples/TinyBoy2/Configuration_adv.h index 1c7f8e266cfd..34c68cac4102 100644 --- a/config/examples/TinyBoy2/Configuration_adv.h +++ b/config/examples/TinyBoy2/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Tronxy/X3A/Configuration_adv.h b/config/examples/Tronxy/X3A/Configuration_adv.h index b207a08f4bf1..514eac10ce4a 100644 --- a/config/examples/Tronxy/X3A/Configuration_adv.h +++ b/config/examples/Tronxy/X3A/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Tronxy/X5S-2E/Configuration_adv.h b/config/examples/Tronxy/X5S-2E/Configuration_adv.h index 5f8969c6eefc..55e9c6c94c3c 100644 --- a/config/examples/Tronxy/X5S-2E/Configuration_adv.h +++ b/config/examples/Tronxy/X5S-2E/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/UltiMachine/Archim1/Configuration_adv.h b/config/examples/UltiMachine/Archim1/Configuration_adv.h index f72be1c5ed69..e9ec937f68f6 100644 --- a/config/examples/UltiMachine/Archim1/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim1/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/UltiMachine/Archim2/Configuration_adv.h b/config/examples/UltiMachine/Archim2/Configuration_adv.h index 6b399f2d741c..ac956d95838a 100644 --- a/config/examples/UltiMachine/Archim2/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim2/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/VORONDesign/Configuration_adv.h b/config/examples/VORONDesign/Configuration_adv.h index 47e3eeef3771..c7bba80eab98 100644 --- a/config/examples/VORONDesign/Configuration_adv.h +++ b/config/examples/VORONDesign/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Velleman/K8200/Configuration_adv.h b/config/examples/Velleman/K8200/Configuration_adv.h index d7bc110d43b6..04f65763be64 100644 --- a/config/examples/Velleman/K8200/Configuration_adv.h +++ b/config/examples/Velleman/K8200/Configuration_adv.h @@ -615,9 +615,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Velleman/K8400/Configuration_adv.h b/config/examples/Velleman/K8400/Configuration_adv.h index 66938132df55..ba14b40a3b90 100644 --- a/config/examples/Velleman/K8400/Configuration_adv.h +++ b/config/examples/Velleman/K8400/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/WASP/PowerWASP/Configuration_adv.h b/config/examples/WASP/PowerWASP/Configuration_adv.h index c2a3ec8d6ef6..880018e34124 100644 --- a/config/examples/WASP/PowerWASP/Configuration_adv.h +++ b/config/examples/WASP/PowerWASP/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h index 5742f9852675..56bafd602f29 100644 --- a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h index d38da532dd5a..fddac3a1f0e2 100644 --- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h index e6ca073dd253..561862cd8007 100644 --- a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h +++ b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h index 5d7d144a0454..053523576168 100644 --- a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h index 5d7d144a0454..053523576168 100644 --- a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h index 421699caa39f..4396038fcbf2 100644 --- a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h +++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/delta/FLSUN/kossel/Configuration_adv.h b/config/examples/delta/FLSUN/kossel/Configuration_adv.h index 421699caa39f..4396038fcbf2 100644 --- a/config/examples/delta/FLSUN/kossel/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h index 810f4d90ec6a..62ef3984dc54 100644 --- a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h index eb1d0d74f626..de2cf53e99f8 100644 --- a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h +++ b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/delta/MKS/SBASE/Configuration_adv.h b/config/examples/delta/MKS/SBASE/Configuration_adv.h index 74c94824cf67..f9b6af4aa214 100644 --- a/config/examples/delta/MKS/SBASE/Configuration_adv.h +++ b/config/examples/delta/MKS/SBASE/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/delta/Tevo Little Monster/Configuration_adv.h b/config/examples/delta/Tevo Little Monster/Configuration_adv.h index e19512907c06..295b8d08c663 100644 --- a/config/examples/delta/Tevo Little Monster/Configuration_adv.h +++ b/config/examples/delta/Tevo Little Monster/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/delta/generic/Configuration_adv.h b/config/examples/delta/generic/Configuration_adv.h index 810f4d90ec6a..62ef3984dc54 100644 --- a/config/examples/delta/generic/Configuration_adv.h +++ b/config/examples/delta/generic/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/delta/kossel_mini/Configuration_adv.h b/config/examples/delta/kossel_mini/Configuration_adv.h index 810f4d90ec6a..62ef3984dc54 100644 --- a/config/examples/delta/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/kossel_mini/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/delta/kossel_xl/Configuration_adv.h b/config/examples/delta/kossel_xl/Configuration_adv.h index 0b93b37687af..abf7bf74e0d5 100644 --- a/config/examples/delta/kossel_xl/Configuration_adv.h +++ b/config/examples/delta/kossel_xl/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/gCreate/gMax1.5+/Configuration_adv.h b/config/examples/gCreate/gMax1.5+/Configuration_adv.h index 2c1683b18889..68ec30b7776b 100644 --- a/config/examples/gCreate/gMax1.5+/Configuration_adv.h +++ b/config/examples/gCreate/gMax1.5+/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/makibox/Configuration_adv.h b/config/examples/makibox/Configuration_adv.h index 5bfcb3ee28fc..5f116061b0af 100644 --- a/config/examples/makibox/Configuration_adv.h +++ b/config/examples/makibox/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/tvrrug/Round2/Configuration_adv.h b/config/examples/tvrrug/Round2/Configuration_adv.h index cdd57bee19cd..450494ba009d 100644 --- a/config/examples/tvrrug/Round2/Configuration_adv.h +++ b/config/examples/tvrrug/Round2/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 diff --git a/config/examples/wt150/Configuration_adv.h b/config/examples/wt150/Configuration_adv.h index 7228429ea45b..92810b2ce105 100644 --- a/config/examples/wt150/Configuration_adv.h +++ b/config/examples/wt150/Configuration_adv.h @@ -602,9 +602,7 @@ //#define Z_STEPPER_AUTO_ALIGN #if ENABLED(Z_STEPPER_AUTO_ALIGN) // Define probe X and Y positions for Z1, Z2 [, Z3] - #define Z_STEPPER_ALIGN_X { 10, 150, 290 } - #define Z_STEPPER_ALIGN_Y { 290, 10, 290 } - // Set number of iterations to align + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align #define Z_STEPPER_ALIGN_ITERATIONS 3 // Enable to restore leveling setup after operation #define RESTORE_LEVELING_AFTER_G34 From 4564ad292048e3aae530d693304b589dd2905e6e Mon Sep 17 00:00:00 2001 From: Frederik Kemner Date: Sun, 29 Sep 2019 11:32:24 +0200 Subject: [PATCH 095/120] Fix build if EXTRUDERS = 0 (#15417) --- Marlin/src/module/motion.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index e93f4f5281ef..95b99d8d3bdf 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -319,8 +319,10 @@ void _internal_move_to_destination(const feedRate_t &fr_mm_s/*=0.0f*/ const uint16_t old_pct = feedrate_percentage; feedrate_percentage = 100; - const float old_fac = planner.e_factor[active_extruder]; - planner.e_factor[active_extruder] = 1.0f; + #if EXTRUDERS + const float old_fac = planner.e_factor[active_extruder]; + planner.e_factor[active_extruder] = 1.0f; + #endif #if IS_KINEMATIC if (is_fast) @@ -331,7 +333,9 @@ void _internal_move_to_destination(const feedRate_t &fr_mm_s/*=0.0f*/ feedrate_mm_s = old_feedrate; feedrate_percentage = old_pct; - planner.e_factor[active_extruder] = old_fac; + #if EXTRUDERS + planner.e_factor[active_extruder] = old_fac; + #endif } /** From 178dcd6fd8ce1d2eea0cbb79b7f384e48b5ed6e5 Mon Sep 17 00:00:00 2001 From: Bob Kuhn Date: Sun, 29 Sep 2019 05:47:20 -0500 Subject: [PATCH 096/120] SPI chaining with TMCStepper simplified interface (#15179) --- Marlin/Configuration_adv.h | 52 +++++------ Marlin/src/feature/tmc_util.h | 10 +- Marlin/src/inc/Conditionals_adv.h | 3 - Marlin/src/inc/SanityCheck.h | 79 +++++++--------- Marlin/src/module/stepper/trinamic.cpp | 91 +------------------ config/default/Configuration_adv.h | 52 +++++------ .../3DFabXYZ/Migbot/Configuration_adv.h | 52 +++++------ .../ADIMLab/Gantry v1/Configuration_adv.h | 52 +++++------ .../ADIMLab/Gantry v2/Configuration_adv.h | 52 +++++------ .../AlephObjects/TAZ4/Configuration_adv.h | 52 +++++------ .../Alfawise/U20-bltouch/Configuration_adv.h | 52 +++++------ .../examples/Alfawise/U20/Configuration_adv.h | 52 +++++------ .../AliExpress/UM2pExt/Configuration_adv.h | 52 +++++------ config/examples/Anet/A2/Configuration_adv.h | 52 +++++------ .../examples/Anet/A2plus/Configuration_adv.h | 52 +++++------ config/examples/Anet/A6/Configuration_adv.h | 52 +++++------ config/examples/Anet/A8/Configuration_adv.h | 52 +++++------ .../examples/Anet/A8plus/Configuration_adv.h | 52 +++++------ config/examples/Anet/E16/Configuration_adv.h | 52 +++++------ .../examples/AnyCubic/i3/Configuration_adv.h | 52 +++++------ config/examples/ArmEd/Configuration_adv.h | 52 +++++------ .../BIBO/TouchX/cyclops/Configuration_adv.h | 52 +++++------ .../BIBO/TouchX/default/Configuration_adv.h | 52 +++++------ .../examples/BQ/Hephestos/Configuration_adv.h | 52 +++++------ .../BQ/Hephestos_2/Configuration_adv.h | 52 +++++------ config/examples/BQ/WITBOX/Configuration_adv.h | 52 +++++------ config/examples/Cartesio/Configuration_adv.h | 52 +++++------ .../Creality/CR-10/Configuration_adv.h | 52 +++++------ .../Creality/CR-10S/Configuration_adv.h | 52 +++++------ .../Creality/CR-10_5S/Configuration_adv.h | 52 +++++------ .../Creality/CR-10mini/Configuration_adv.h | 52 +++++------ .../Creality/CR-20 Pro/Configuration_adv.h | 52 +++++------ .../Creality/CR-20/Configuration_adv.h | 52 +++++------ .../Creality/CR-8/Configuration_adv.h | 52 +++++------ .../Creality/Ender-2/Configuration_adv.h | 52 +++++------ .../Creality/Ender-3/Configuration_adv.h | 52 +++++------ .../Creality/Ender-4/Configuration_adv.h | 52 +++++------ .../Creality/Ender-5/Configuration_adv.h | 52 +++++------ .../Dagoma/Disco Ultimate/Configuration_adv.h | 52 +++++------ .../Sidewinder X1/Configuration_adv.h | 52 +++++------ .../examples/Einstart-S/Configuration_adv.h | 52 +++++------ .../FYSETC/AIO_II/Configuration_adv.h | 52 +++++------ .../Cheetah 1.2/BLTouch/Configuration_adv.h | 52 +++++------ .../Cheetah 1.2/base/Configuration_adv.h | 52 +++++------ .../Cheetah/BLTouch/Configuration_adv.h | 52 +++++------ .../FYSETC/Cheetah/base/Configuration_adv.h | 52 +++++------ .../examples/FYSETC/F6_13/Configuration_adv.h | 52 +++++------ config/examples/Felix/Configuration_adv.h | 52 +++++------ .../FlashForge/CreatorPro/Configuration_adv.h | 52 +++++------ .../FolgerTech/i3-2020/Configuration_adv.h | 52 +++++------ .../Formbot/Raptor/Configuration_adv.h | 52 +++++------ .../Formbot/T_Rex_2+/Configuration_adv.h | 52 +++++------ .../Formbot/T_Rex_3/Configuration_adv.h | 52 +++++------ .../examples/Geeetech/A10/Configuration_adv.h | 52 +++++------ .../Geeetech/A10M/Configuration_adv.h | 52 +++++------ .../Geeetech/A20M/Configuration_adv.h | 52 +++++------ .../Geeetech/MeCreator2/Configuration_adv.h | 52 +++++------ .../Prusa i3 Pro C/Configuration_adv.h | 52 +++++------ .../Prusa i3 Pro W/Configuration_adv.h | 52 +++++------ config/examples/HMS434/Configuration_adv.h | 52 +++++------ .../Infitary/i3-M508/Configuration_adv.h | 52 +++++------ .../examples/JGAurora/A1/Configuration_adv.h | 52 +++++------ .../examples/JGAurora/A5/Configuration_adv.h | 52 +++++------ .../examples/JGAurora/A5S/Configuration_adv.h | 52 +++++------ .../examples/MakerParts/Configuration_adv.h | 52 +++++------ .../examples/Malyan/M150/Configuration_adv.h | 52 +++++------ .../examples/Malyan/M200/Configuration_adv.h | 52 +++++------ .../Micromake/C1/enhanced/Configuration_adv.h | 52 +++++------ config/examples/Mks/Robin/Configuration_adv.h | 52 +++++------ config/examples/Mks/Sbase/Configuration_adv.h | 52 +++++------ .../RapideLite/RL200/Configuration_adv.h | 52 +++++------ config/examples/RigidBot/Configuration_adv.h | 52 +++++------ config/examples/SCARA/Configuration_adv.h | 52 +++++------ .../Black_STM32F407VET6/Configuration_adv.h | 52 +++++------ .../examples/Sanguinololu/Configuration_adv.h | 52 +++++------ .../Tevo/Michelangelo/Configuration_adv.h | 52 +++++------ .../Tevo/Tarantula Pro/Configuration_adv.h | 52 +++++------ .../Tornado/V1 (MKS Base)/Configuration_adv.h | 52 +++++------ .../V2 (MKS GEN-L)/Configuration_adv.h | 52 +++++------ config/examples/TheBorg/Configuration_adv.h | 52 +++++------ config/examples/TinyBoy2/Configuration_adv.h | 52 +++++------ .../examples/Tronxy/X3A/Configuration_adv.h | 52 +++++------ .../Tronxy/X5S-2E/Configuration_adv.h | 52 +++++------ .../UltiMachine/Archim1/Configuration_adv.h | 52 +++++------ .../UltiMachine/Archim2/Configuration_adv.h | 52 +++++------ .../examples/VORONDesign/Configuration_adv.h | 52 +++++------ .../Velleman/K8200/Configuration_adv.h | 52 +++++------ .../Velleman/K8400/Configuration_adv.h | 52 +++++------ .../WASP/PowerWASP/Configuration_adv.h | 52 +++++------ .../Wanhao/Duplicator 6/Configuration_adv.h | 52 +++++------ .../Duplicator i3 Mini/Configuration_adv.h | 52 +++++------ .../delta/Anycubic/Kossel/Configuration_adv.h | 52 +++++------ .../Dreammaker/Overlord/Configuration_adv.h | 52 +++++------ .../Overlord_Pro/Configuration_adv.h | 52 +++++------ .../FLSUN/auto_calibrate/Configuration_adv.h | 52 +++++------ .../delta/FLSUN/kossel/Configuration_adv.h | 52 +++++------ .../FLSUN/kossel_mini/Configuration_adv.h | 52 +++++------ .../Geeetech/Rostock 301/Configuration_adv.h | 52 +++++------ .../delta/MKS/SBASE/Configuration_adv.h | 52 +++++------ .../Tevo Little Monster/Configuration_adv.h | 52 +++++------ .../delta/generic/Configuration_adv.h | 52 +++++------ .../delta/kossel_mini/Configuration_adv.h | 52 +++++------ .../delta/kossel_xl/Configuration_adv.h | 52 +++++------ .../gCreate/gMax1.5+/Configuration_adv.h | 52 +++++------ config/examples/makibox/Configuration_adv.h | 52 +++++------ .../tvrrug/Round2/Configuration_adv.h | 52 +++++------ config/examples/wt150/Configuration_adv.h | 52 +++++------ 107 files changed, 2722 insertions(+), 2817 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 9a8682ca126f..7830b9339f4c 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/Marlin/src/feature/tmc_util.h b/Marlin/src/feature/tmc_util.h index bea5e14e9ad9..8d0435b4a667 100644 --- a/Marlin/src/feature/tmc_util.h +++ b/Marlin/src/feature/tmc_util.h @@ -103,9 +103,15 @@ class TMCMarlin : public TMC, public TMCStorage { TMCMarlin(const uint16_t cs_pin, const float RS) : TMC(cs_pin, RS) {} + TMCMarlin(const uint16_t cs_pin, const float RS, const uint8_t axis_chain_index) : + TMC(cs_pin, RS, axis_chain_index) + {} TMCMarlin(const uint16_t CS, const float RS, const uint16_t pinMOSI, const uint16_t pinMISO, const uint16_t pinSCK) : TMC(CS, RS, pinMOSI, pinMISO, pinSCK) {} + TMCMarlin(const uint16_t CS, const float RS, const uint16_t pinMOSI, const uint16_t pinMISO, const uint16_t pinSCK, const uint8_t axis_chain_index) : + TMC(CS, RS, pinMOSI, pinMISO, pinSCK, axis_chain_index) + {} inline uint16_t rms_current() { return TMC::rms_current(); } inline void rms_current(uint16_t mA) { this->val_mA = mA; @@ -267,10 +273,10 @@ class TMCMarlin : public TMC220 template class TMCMarlin : public TMC2660Stepper, public TMCStorage { public: - TMCMarlin(const uint16_t cs_pin, const float RS) : + TMCMarlin(const uint16_t cs_pin, const float RS, const uint8_t) : TMC2660Stepper(cs_pin, RS) {} - TMCMarlin(const uint16_t CS, const float RS, const uint16_t pinMOSI, const uint16_t pinMISO, const uint16_t pinSCK) : + TMCMarlin(const uint16_t CS, const float RS, const uint16_t pinMOSI, const uint16_t pinMISO, const uint16_t pinSCK, const uint8_t) : TMC2660Stepper(CS, RS, pinMOSI, pinMISO, pinSCK) {} inline uint16_t rms_current() { return TMC2660Stepper::rms_current(); } diff --git a/Marlin/src/inc/Conditionals_adv.h b/Marlin/src/inc/Conditionals_adv.h index b9b8855428e5..01b27f2c1700 100644 --- a/Marlin/src/inc/Conditionals_adv.h +++ b/Marlin/src/inc/Conditionals_adv.h @@ -131,9 +131,6 @@ // Extensible UI pin mapping for RepRapDiscount #define TOUCH_UI_ULTIPANEL ENABLED(LULZBOT_TOUCH_UI) && ANY(AO_EXP1_PINMAP, AO_EXP2_PINMAP, CR10_TFT_PINMAP) -// TMC SPI Chaining -#define TMC_USE_CHAIN (X_CHAIN_POS||Y_CHAIN_POS||Z_CHAIN_POS||X2_CHAIN_POS||Y2_CHAIN_POS||Z2_CHAIN_POS||Z3_CHAIN_POS||E0_CHAIN_POS||E1_CHAIN_POS||E2_CHAIN_POS||E3_CHAIN_POS||E4_CHAIN_POS||E5_CHAIN_POS) - // Poll-based jogging for joystick and other devices #if ENABLED(JOYSTICK) #define POLL_JOG diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 5b0c630216ad..f4c3b2d12476 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2157,69 +2157,58 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS #error "STEALTHCHOP requires TMC2130, TMC2160, TMC2208, TMC2209, or TMC5160 stepper drivers." #endif -#if TMC_USE_CHAIN - #if (X_CHAIN_POS && !PIN_EXISTS(X_CS) ) \ - || (Y_CHAIN_POS && !PIN_EXISTS(Y_CS) ) \ - || (Z_CHAIN_POS && !PIN_EXISTS(Z_CS) ) \ - || (X2_CHAIN_POS && !PIN_EXISTS(X2_CS)) \ - || (Y2_CHAIN_POS && !PIN_EXISTS(Y2_CS)) \ - || (Z2_CHAIN_POS && !PIN_EXISTS(Z2_CS)) \ - || (Z3_CHAIN_POS && !PIN_EXISTS(Z3_CS)) \ - || (E0_CHAIN_POS && !PIN_EXISTS(E0_CS)) \ - || (E1_CHAIN_POS && !PIN_EXISTS(E1_CS)) \ - || (E2_CHAIN_POS && !PIN_EXISTS(E2_CS)) \ - || (E3_CHAIN_POS && !PIN_EXISTS(E3_CS)) \ - || (E4_CHAIN_POS && !PIN_EXISTS(E4_CS)) \ - || (E5_CHAIN_POS && !PIN_EXISTS(E5_CS)) - #error "With TMC_USE_CHAIN all chained TMC drivers need a CS pin." +#define IN_CHAIN(A) (A##_CHAIN_POS > 0) +// TMC SPI Chaining +#if IN_CHAIN(X) || IN_CHAIN(Y) || IN_CHAIN(Z) || IN_CHAIN(X2) || IN_CHAIN(Y2) || IN_CHAIN(Z2) || IN_CHAIN(Z3) || IN_CHAIN(E0) || IN_CHAIN(E1) || IN_CHAIN(E2) || IN_CHAIN(E3) || IN_CHAIN(E4) || IN_CHAIN(E5) + #if (IN_CHAIN(X) && !PIN_EXISTS(X_CS) ) || (IN_CHAIN(Y) && !PIN_EXISTS(Y_CS) ) \ + || (IN_CHAIN(Z) && !PIN_EXISTS(Z_CS) ) || (IN_CHAIN(X2) && !PIN_EXISTS(X2_CS)) \ + || (IN_CHAIN(Y2) && !PIN_EXISTS(Y2_CS)) || (IN_CHAIN(Z2) && !PIN_EXISTS(Z2_CS)) \ + || (IN_CHAIN(Z3) && !PIN_EXISTS(Z3_CS)) || (IN_CHAIN(E0) && !PIN_EXISTS(E0_CS)) \ + || (IN_CHAIN(E1) && !PIN_EXISTS(E1_CS)) || (IN_CHAIN(E2) && !PIN_EXISTS(E2_CS)) \ + || (IN_CHAIN(E3) && !PIN_EXISTS(E3_CS)) || (IN_CHAIN(E4) && !PIN_EXISTS(E4_CS)) \ + || (IN_CHAIN(E5) && !PIN_EXISTS(E5_CS)) + #error "All chained TMC drivers need a CS pin." #else - #if X_CHAIN_POS + #if IN_CHAIN(X) #define CS_COMPARE X_CS_PIN - #elif Y_CHAIN_POS + #elif IN_CHAIN(Y) #define CS_COMPARE Y_CS_PIN - #elif Z_CHAIN_POS + #elif IN_CHAIN(Z) #define CS_COMPARE Z_CS_PIN - #elif X2_CHAIN_POS + #elif IN_CHAIN(X2) #define CS_COMPARE X2_CS_PIN - #elif Y2_CHAIN_POS + #elif IN_CHAIN(Y2) #define CS_COMPARE Y2_CS_PIN - #elif Z2_CHAIN_POS + #elif IN_CHAIN(Z2) #define CS_COMPARE Z2_CS_PIN - #elif Z3_CHAIN_POS + #elif IN_CHAIN(Z3) #define CS_COMPARE Z3_CS_PIN - #elif E0_CHAIN_POS + #elif IN_CHAIN(E0) #define CS_COMPARE E0_CS_PIN - #elif E1_CHAIN_POS + #elif IN_CHAIN(E1) #define CS_COMPARE E1_CS_PIN - #elif E2_CHAIN_POS + #elif IN_CHAIN(E2) #define CS_COMPARE E2_CS_PIN - #elif E3_CHAIN_POS + #elif IN_CHAIN(E3) #define CS_COMPARE E3_CS_PIN - #elif E4_CHAIN_POS + #elif IN_CHAIN(E4) #define CS_COMPARE E4_CS_PIN - #elif E5_CHAIN_POS + #elif IN_CHAIN(E5) #define CS_COMPARE E5_CS_PIN - #else - #error "With TMC_USE_CHAIN some TMC drivers should be chained." #endif - #if (X_CHAIN_POS && X_CS_PIN != CS_COMPARE) \ - || (Y_CHAIN_POS && Y_CS_PIN != CS_COMPARE) \ - || (Z_CHAIN_POS && Z_CS_PIN != CS_COMPARE) \ - || (X2_CHAIN_POS && X2_CS_PIN != CS_COMPARE) \ - || (Y2_CHAIN_POS && Y2_CS_PIN != CS_COMPARE) \ - || (Z2_CHAIN_POS && Z2_CS_PIN != CS_COMPARE) \ - || (Z3_CHAIN_POS && Z3_CS_PIN != CS_COMPARE) \ - || (E0_CHAIN_POS && E0_CS_PIN != CS_COMPARE) \ - || (E1_CHAIN_POS && E1_CS_PIN != CS_COMPARE) \ - || (E2_CHAIN_POS && E2_CS_PIN != CS_COMPARE) \ - || (E3_CHAIN_POS && E3_CS_PIN != CS_COMPARE) \ - || (E4_CHAIN_POS && E4_CS_PIN != CS_COMPARE) \ - || (E5_CHAIN_POS && E5_CS_PIN != CS_COMPARE) - #error "With TMC_USE_CHAIN all TMC drivers must use the same CS pin." + #if (IN_CHAIN(X) && X_CS_PIN != CS_COMPARE) || (IN_CHAIN(Y) && Y_CS_PIN != CS_COMPARE) \ + || (IN_CHAIN(Z) && Z_CS_PIN != CS_COMPARE) || (IN_CHAIN(X2) && X2_CS_PIN != CS_COMPARE) \ + || (IN_CHAIN(Y2) && Y2_CS_PIN != CS_COMPARE) || (IN_CHAIN(Z2) && Z2_CS_PIN != CS_COMPARE) \ + || (IN_CHAIN(Z3) && Z3_CS_PIN != CS_COMPARE) || (IN_CHAIN(E0) && E0_CS_PIN != CS_COMPARE) \ + || (IN_CHAIN(E1) && E1_CS_PIN != CS_COMPARE) || (IN_CHAIN(E2) && E2_CS_PIN != CS_COMPARE) \ + || (IN_CHAIN(E3) && E3_CS_PIN != CS_COMPARE) || (IN_CHAIN(E4) && E4_CS_PIN != CS_COMPARE) \ + || (IN_CHAIN(E5) && E5_CS_PIN != CS_COMPARE) + #error "All chained TMC drivers must use the same CS pin." #endif #endif #undef CS_COMPARE -#endif // TMC_USE_CHAIN +#endif +#undef IN_CHAIN #if ENABLED(DELTA) && (ENABLED(STEALTHCHOP_XY) != ENABLED(STEALTHCHOP_Z)) #error "STEALTHCHOP_XY and STEALTHCHOP_Z must be the same on DELTA." diff --git a/Marlin/src/module/stepper/trinamic.cpp b/Marlin/src/module/stepper/trinamic.cpp index a0910204e6b1..08a13c17aa5f 100644 --- a/Marlin/src/module/stepper/trinamic.cpp +++ b/Marlin/src/module/stepper/trinamic.cpp @@ -44,9 +44,9 @@ enum StealthIndex : uint8_t { STEALTH_AXIS_XY, STEALTH_AXIS_Z, STEALTH_AXIS_E }; // AI = Axis Enum Index // SWHW = SW/SH UART selection #if ENABLED(TMC_USE_SW_SPI) - #define __TMC_SPI_DEFINE(IC, ST, L, AI) TMCMarlin stepper##ST(ST##_CS_PIN, ST##_RSENSE, TMC_SW_MOSI, TMC_SW_MISO, TMC_SW_SCK) + #define __TMC_SPI_DEFINE(IC, ST, L, AI) TMCMarlin stepper##ST(ST##_CS_PIN, ST##_RSENSE, TMC_SW_MOSI, TMC_SW_MISO, TMC_SW_SCK, ST##_CHAIN_POS) #else - #define __TMC_SPI_DEFINE(IC, ST, L, AI) TMCMarlin stepper##ST(ST##_CS_PIN, ST##_RSENSE) + #define __TMC_SPI_DEFINE(IC, ST, L, AI) TMCMarlin stepper##ST(ST##_CS_PIN, ST##_RSENSE, ST##_CHAIN_POS) #endif #define TMC_UART_HW_DEFINE(IC, ST, L, AI) TMCMarlin stepper##ST(&ST##_HARDWARE_SERIAL, ST##_RSENSE, ST##_SLAVE_ADDRESS) @@ -653,93 +653,6 @@ void reset_trinamic_drivers() { #endif }; - #if TMC_USE_CHAIN - - enum TMC_axis_enum : unsigned char { _, X, Y, Z, X2, Y2, Z2, Z3, E0, E1, E2, E3, E4, E5 }; - #define __TMC_CHAIN(Q,V) do{ stepper##Q.set_chain_info(Q,V); }while(0) - #define _TMC_CHAIN(Q) __TMC_CHAIN(Q, Q##_CHAIN_POS) - - #if AXIS_HAS_SPI(X) // First set chain array to uninitialized - __TMC_CHAIN(X, 0); - #endif - #if AXIS_HAS_SPI(X2) - __TMC_CHAIN(X2, 0); - #endif - #if AXIS_HAS_SPI(Y) - __TMC_CHAIN(Y, 0); - #endif - #if AXIS_HAS_SPI(Y2) - __TMC_CHAIN(Y2, 0); - #endif - #if AXIS_HAS_SPI(Z) - __TMC_CHAIN(Z, 0); - #endif - #if AXIS_HAS_SPI(Z2) - __TMC_CHAIN(Z2, 0); - #endif - #if AXIS_HAS_SPI(Z3) - __TMC_CHAIN(Z3, 0); - #endif - #if AXIS_HAS_SPI(E0) - __TMC_CHAIN(E0, 0); - #endif - #if AXIS_HAS_SPI(E1) - __TMC_CHAIN(E1, 0); - #endif - #if AXIS_HAS_SPI(E2) - __TMC_CHAIN(E2, 0); - #endif - #if AXIS_HAS_SPI(E3) - __TMC_CHAIN(E3, 0); - #endif - #if AXIS_HAS_SPI(E4) - __TMC_CHAIN(E4, 0); - #endif - #if AXIS_HAS_SPI(E5) - __TMC_CHAIN(E5, 0); - #endif - - #if AXIS_HAS_SPI(X) && X_CHAIN_POS // Now set up the SPI chain - _TMC_CHAIN(X); - #endif - #if AXIS_HAS_SPI(X2) && X2_CHAIN_POS - _TMC_CHAIN(X2); - #endif - #if AXIS_HAS_SPI(Y) && Y_CHAIN_POS - _TMC_CHAIN(Y); - #endif - #if AXIS_HAS_SPI(Y2) && Y2_CHAIN_POS - _TMC_CHAIN(Y2); - #endif - #if AXIS_HAS_SPI(Z) && Z_CHAIN_POS - _TMC_CHAIN(Z); - #endif - #if AXIS_HAS_SPI(Z2) && Z2_CHAIN_POS - _TMC_CHAIN(Z2); - #endif - #if AXIS_HAS_SPI(Z3) && Z3_CHAIN_POS - _TMC_CHAIN(Z3); - #endif - #if AXIS_HAS_SPI(E0) && E0_CHAIN_POS - _TMC_CHAIN(E0); - #endif - #if AXIS_HAS_SPI(E1) && E1_CHAIN_POS - _TMC_CHAIN(E1); - #endif - #if AXIS_HAS_SPI(E2) && E2_CHAIN_POS - _TMC_CHAIN(E2); - #endif - #if AXIS_HAS_SPI(E3) && E3_CHAIN_POS - _TMC_CHAIN(E3); - #endif - #if AXIS_HAS_SPI(E4) && E4_CHAIN_POS - _TMC_CHAIN(E4); - #endif - #if AXIS_HAS_SPI(E5) && E5_CHAIN_POS - _TMC_CHAIN(E5); - #endif - #endif // TMC_USE_CHAIN - #if AXIS_IS_TMC(X) _TMC_INIT(X, STEALTH_AXIS_XY); #endif diff --git a/config/default/Configuration_adv.h b/config/default/Configuration_adv.h index 3bedfab70775..256ecaf0df79 100644 --- a/config/default/Configuration_adv.h +++ b/config/default/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h index 47a758e90647..88c265fc5657 100644 --- a/config/examples/3DFabXYZ/Migbot/Configuration_adv.h +++ b/config/examples/3DFabXYZ/Migbot/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h index 55b6c998de8a..7001c47a8bea 100644 --- a/config/examples/ADIMLab/Gantry v1/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v1/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h index 3239a343236c..642dd144515b 100644 --- a/config/examples/ADIMLab/Gantry v2/Configuration_adv.h +++ b/config/examples/ADIMLab/Gantry v2/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/AlephObjects/TAZ4/Configuration_adv.h b/config/examples/AlephObjects/TAZ4/Configuration_adv.h index 9154af82121e..d63859d07b2d 100644 --- a/config/examples/AlephObjects/TAZ4/Configuration_adv.h +++ b/config/examples/AlephObjects/TAZ4/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h index 7685ea3ef1c6..2567e60a47d6 100644 --- a/config/examples/Alfawise/U20-bltouch/Configuration_adv.h +++ b/config/examples/Alfawise/U20-bltouch/Configuration_adv.h @@ -1802,91 +1802,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2112,7 +2112,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2120,7 +2120,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2128,7 +2128,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2136,7 +2136,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2144,7 +2144,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2152,7 +2152,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2160,7 +2160,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2168,7 +2168,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2176,7 +2176,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2184,7 +2184,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2192,7 +2192,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2200,7 +2200,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2208,7 +2208,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Alfawise/U20/Configuration_adv.h b/config/examples/Alfawise/U20/Configuration_adv.h index 8c1841c0df50..863132ceee22 100644 --- a/config/examples/Alfawise/U20/Configuration_adv.h +++ b/config/examples/Alfawise/U20/Configuration_adv.h @@ -1801,91 +1801,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2111,7 +2111,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2119,7 +2119,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2127,7 +2127,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2135,7 +2135,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2143,7 +2143,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2151,7 +2151,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2159,7 +2159,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2167,7 +2167,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2175,7 +2175,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2183,7 +2183,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2191,7 +2191,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2199,7 +2199,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2207,7 +2207,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/AliExpress/UM2pExt/Configuration_adv.h b/config/examples/AliExpress/UM2pExt/Configuration_adv.h index 02528e51cd5c..b2f8a48e6556 100644 --- a/config/examples/AliExpress/UM2pExt/Configuration_adv.h +++ b/config/examples/AliExpress/UM2pExt/Configuration_adv.h @@ -1799,91 +1799,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2109,7 +2109,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2117,7 +2117,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2125,7 +2125,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2133,7 +2133,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2141,7 +2141,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2149,7 +2149,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2157,7 +2157,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2165,7 +2165,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2173,7 +2173,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2181,7 +2181,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2189,7 +2189,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2197,7 +2197,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2205,7 +2205,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Anet/A2/Configuration_adv.h b/config/examples/Anet/A2/Configuration_adv.h index e3b4ccb2a602..06be59794b32 100644 --- a/config/examples/Anet/A2/Configuration_adv.h +++ b/config/examples/Anet/A2/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Anet/A2plus/Configuration_adv.h b/config/examples/Anet/A2plus/Configuration_adv.h index e3b4ccb2a602..06be59794b32 100644 --- a/config/examples/Anet/A2plus/Configuration_adv.h +++ b/config/examples/Anet/A2plus/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Anet/A6/Configuration_adv.h b/config/examples/Anet/A6/Configuration_adv.h index c0f6d138ee0a..99bfa5254c42 100644 --- a/config/examples/Anet/A6/Configuration_adv.h +++ b/config/examples/Anet/A6/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Anet/A8/Configuration_adv.h b/config/examples/Anet/A8/Configuration_adv.h index 194dff4f1887..f9591e3fa7a9 100644 --- a/config/examples/Anet/A8/Configuration_adv.h +++ b/config/examples/Anet/A8/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Anet/A8plus/Configuration_adv.h b/config/examples/Anet/A8plus/Configuration_adv.h index 771aadb125dc..1018517063e3 100644 --- a/config/examples/Anet/A8plus/Configuration_adv.h +++ b/config/examples/Anet/A8plus/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Anet/E16/Configuration_adv.h b/config/examples/Anet/E16/Configuration_adv.h index c891129c6d3b..f19f1b1c77ac 100644 --- a/config/examples/Anet/E16/Configuration_adv.h +++ b/config/examples/Anet/E16/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/AnyCubic/i3/Configuration_adv.h b/config/examples/AnyCubic/i3/Configuration_adv.h index fb395cf5f231..4639ae7e1d8b 100644 --- a/config/examples/AnyCubic/i3/Configuration_adv.h +++ b/config/examples/AnyCubic/i3/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/ArmEd/Configuration_adv.h b/config/examples/ArmEd/Configuration_adv.h index 2d700565a78a..e59e84cc2786 100644 --- a/config/examples/ArmEd/Configuration_adv.h +++ b/config/examples/ArmEd/Configuration_adv.h @@ -1801,91 +1801,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2111,7 +2111,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2119,7 +2119,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2127,7 +2127,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2135,7 +2135,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2143,7 +2143,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2151,7 +2151,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2159,7 +2159,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2167,7 +2167,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2175,7 +2175,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2183,7 +2183,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2191,7 +2191,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2199,7 +2199,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2207,7 +2207,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h index 46009ee5c5d2..ce47a9e9183d 100644 --- a/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/cyclops/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/BIBO/TouchX/default/Configuration_adv.h b/config/examples/BIBO/TouchX/default/Configuration_adv.h index 5bc675294f46..12f3f1381007 100644 --- a/config/examples/BIBO/TouchX/default/Configuration_adv.h +++ b/config/examples/BIBO/TouchX/default/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/BQ/Hephestos/Configuration_adv.h b/config/examples/BQ/Hephestos/Configuration_adv.h index 4370242cbe5a..34aaa13d3678 100644 --- a/config/examples/BQ/Hephestos/Configuration_adv.h +++ b/config/examples/BQ/Hephestos/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/BQ/Hephestos_2/Configuration_adv.h b/config/examples/BQ/Hephestos_2/Configuration_adv.h index 4a3468ab2be7..90d096da78dd 100644 --- a/config/examples/BQ/Hephestos_2/Configuration_adv.h +++ b/config/examples/BQ/Hephestos_2/Configuration_adv.h @@ -1805,91 +1805,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2115,7 +2115,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2123,7 +2123,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2131,7 +2131,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2139,7 +2139,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2147,7 +2147,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2155,7 +2155,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2163,7 +2163,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2171,7 +2171,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2179,7 +2179,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2187,7 +2187,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2195,7 +2195,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2203,7 +2203,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2211,7 +2211,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/BQ/WITBOX/Configuration_adv.h b/config/examples/BQ/WITBOX/Configuration_adv.h index 4370242cbe5a..34aaa13d3678 100644 --- a/config/examples/BQ/WITBOX/Configuration_adv.h +++ b/config/examples/BQ/WITBOX/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Cartesio/Configuration_adv.h b/config/examples/Cartesio/Configuration_adv.h index b80bdb448971..3f0c9bd5531e 100644 --- a/config/examples/Cartesio/Configuration_adv.h +++ b/config/examples/Cartesio/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Creality/CR-10/Configuration_adv.h b/config/examples/Creality/CR-10/Configuration_adv.h index 85087e95e5c2..4d0520a556ed 100644 --- a/config/examples/Creality/CR-10/Configuration_adv.h +++ b/config/examples/Creality/CR-10/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Creality/CR-10S/Configuration_adv.h b/config/examples/Creality/CR-10S/Configuration_adv.h index 96eb8d33e9cd..a0b85603e7f8 100644 --- a/config/examples/Creality/CR-10S/Configuration_adv.h +++ b/config/examples/Creality/CR-10S/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Creality/CR-10_5S/Configuration_adv.h b/config/examples/Creality/CR-10_5S/Configuration_adv.h index 62c1f45bdce0..0835d9078e88 100644 --- a/config/examples/Creality/CR-10_5S/Configuration_adv.h +++ b/config/examples/Creality/CR-10_5S/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Creality/CR-10mini/Configuration_adv.h b/config/examples/Creality/CR-10mini/Configuration_adv.h index 8901d9933244..ca9b0db986dd 100644 --- a/config/examples/Creality/CR-10mini/Configuration_adv.h +++ b/config/examples/Creality/CR-10mini/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Creality/CR-20 Pro/Configuration_adv.h b/config/examples/Creality/CR-20 Pro/Configuration_adv.h index ca68194df8a7..8ccd36c6dbc7 100644 --- a/config/examples/Creality/CR-20 Pro/Configuration_adv.h +++ b/config/examples/Creality/CR-20 Pro/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Creality/CR-20/Configuration_adv.h b/config/examples/Creality/CR-20/Configuration_adv.h index 2a7523d2cef7..1d0b0beae998 100644 --- a/config/examples/Creality/CR-20/Configuration_adv.h +++ b/config/examples/Creality/CR-20/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Creality/CR-8/Configuration_adv.h b/config/examples/Creality/CR-8/Configuration_adv.h index 2e590136e821..542c4ea3a342 100644 --- a/config/examples/Creality/CR-8/Configuration_adv.h +++ b/config/examples/Creality/CR-8/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Creality/Ender-2/Configuration_adv.h b/config/examples/Creality/Ender-2/Configuration_adv.h index f6faed858ca1..32589ce3650e 100644 --- a/config/examples/Creality/Ender-2/Configuration_adv.h +++ b/config/examples/Creality/Ender-2/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Creality/Ender-3/Configuration_adv.h b/config/examples/Creality/Ender-3/Configuration_adv.h index da3854d10b05..e0e32408cc59 100644 --- a/config/examples/Creality/Ender-3/Configuration_adv.h +++ b/config/examples/Creality/Ender-3/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 580 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 580 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 580 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 650 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Creality/Ender-4/Configuration_adv.h b/config/examples/Creality/Ender-4/Configuration_adv.h index f3e0b0750b19..c287db765ed0 100644 --- a/config/examples/Creality/Ender-4/Configuration_adv.h +++ b/config/examples/Creality/Ender-4/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Creality/Ender-5/Configuration_adv.h b/config/examples/Creality/Ender-5/Configuration_adv.h index ccf4773d1542..377c3572e203 100644 --- a/config/examples/Creality/Ender-5/Configuration_adv.h +++ b/config/examples/Creality/Ender-5/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h index f27f7440af70..b4e06b542561 100644 --- a/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h +++ b/config/examples/Dagoma/Disco Ultimate/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h index d89af2d74afd..929e61fcd27f 100755 --- a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h +++ b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Einstart-S/Configuration_adv.h b/config/examples/Einstart-S/Configuration_adv.h index 88c2e4c69d6e..4798a2ecf250 100644 --- a/config/examples/Einstart-S/Configuration_adv.h +++ b/config/examples/Einstart-S/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/FYSETC/AIO_II/Configuration_adv.h b/config/examples/FYSETC/AIO_II/Configuration_adv.h index 9a085b4e4526..1521d93dd51e 100644 --- a/config/examples/FYSETC/AIO_II/Configuration_adv.h +++ b/config/examples/FYSETC/AIO_II/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 700 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 650 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 650 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h index 1a43895588ce..d0542385d4b9 100644 --- a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 700 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 500 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 650 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h index 1a43895588ce..d0542385d4b9 100644 --- a/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah 1.2/base/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 700 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 500 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 650 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h index 1a43895588ce..d0542385d4b9 100644 --- a/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/BLTouch/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 700 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 500 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 650 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h index 1a43895588ce..d0542385d4b9 100644 --- a/config/examples/FYSETC/Cheetah/base/Configuration_adv.h +++ b/config/examples/FYSETC/Cheetah/base/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 700 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 500 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 650 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/FYSETC/F6_13/Configuration_adv.h b/config/examples/FYSETC/F6_13/Configuration_adv.h index bc0bfc97424b..68d76af4a2d7 100644 --- a/config/examples/FYSETC/F6_13/Configuration_adv.h +++ b/config/examples/FYSETC/F6_13/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Felix/Configuration_adv.h b/config/examples/Felix/Configuration_adv.h index 31df1e10dbeb..5ef7cf106f82 100644 --- a/config/examples/Felix/Configuration_adv.h +++ b/config/examples/Felix/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/FlashForge/CreatorPro/Configuration_adv.h b/config/examples/FlashForge/CreatorPro/Configuration_adv.h index a8ed2b836612..d476d2d23407 100644 --- a/config/examples/FlashForge/CreatorPro/Configuration_adv.h +++ b/config/examples/FlashForge/CreatorPro/Configuration_adv.h @@ -1796,91 +1796,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2106,7 +2106,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2114,7 +2114,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2122,7 +2122,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2130,7 +2130,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2138,7 +2138,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2146,7 +2146,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2154,7 +2154,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2162,7 +2162,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2170,7 +2170,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2178,7 +2178,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2186,7 +2186,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2194,7 +2194,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2202,7 +2202,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/FolgerTech/i3-2020/Configuration_adv.h b/config/examples/FolgerTech/i3-2020/Configuration_adv.h index bbadcfa82c10..2d2868422ff9 100644 --- a/config/examples/FolgerTech/i3-2020/Configuration_adv.h +++ b/config/examples/FolgerTech/i3-2020/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Formbot/Raptor/Configuration_adv.h b/config/examples/Formbot/Raptor/Configuration_adv.h index a8d6934f4963..7c863798db25 100644 --- a/config/examples/Formbot/Raptor/Configuration_adv.h +++ b/config/examples/Formbot/Raptor/Configuration_adv.h @@ -1799,91 +1799,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2109,7 +2109,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2117,7 +2117,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2125,7 +2125,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2133,7 +2133,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2141,7 +2141,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2149,7 +2149,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2157,7 +2157,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2165,7 +2165,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2173,7 +2173,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2181,7 +2181,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2189,7 +2189,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2197,7 +2197,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2205,7 +2205,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h index d012382114d1..b8b839b083b2 100644 --- a/config/examples/Formbot/T_Rex_2+/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_2+/Configuration_adv.h @@ -1801,91 +1801,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2111,7 +2111,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2119,7 +2119,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2127,7 +2127,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2135,7 +2135,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2143,7 +2143,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2151,7 +2151,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2159,7 +2159,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2167,7 +2167,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2175,7 +2175,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2183,7 +2183,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2191,7 +2191,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2199,7 +2199,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2207,7 +2207,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Formbot/T_Rex_3/Configuration_adv.h b/config/examples/Formbot/T_Rex_3/Configuration_adv.h index 3a9d541792c9..18a9058bbda9 100644 --- a/config/examples/Formbot/T_Rex_3/Configuration_adv.h +++ b/config/examples/Formbot/T_Rex_3/Configuration_adv.h @@ -1801,91 +1801,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2111,7 +2111,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2119,7 +2119,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2127,7 +2127,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2135,7 +2135,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2143,7 +2143,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2151,7 +2151,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2159,7 +2159,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2167,7 +2167,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2175,7 +2175,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2183,7 +2183,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2191,7 +2191,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2199,7 +2199,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2207,7 +2207,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Geeetech/A10/Configuration_adv.h b/config/examples/Geeetech/A10/Configuration_adv.h index 0806d2eedd8b..dfbcbe1b5137 100644 --- a/config/examples/Geeetech/A10/Configuration_adv.h +++ b/config/examples/Geeetech/A10/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Geeetech/A10M/Configuration_adv.h b/config/examples/Geeetech/A10M/Configuration_adv.h index 45d50774c4cf..abdeb5df1a38 100644 --- a/config/examples/Geeetech/A10M/Configuration_adv.h +++ b/config/examples/Geeetech/A10M/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Geeetech/A20M/Configuration_adv.h b/config/examples/Geeetech/A20M/Configuration_adv.h index 94e47a196c62..51463370c92e 100644 --- a/config/examples/Geeetech/A20M/Configuration_adv.h +++ b/config/examples/Geeetech/A20M/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Geeetech/MeCreator2/Configuration_adv.h b/config/examples/Geeetech/MeCreator2/Configuration_adv.h index 9dab3dbbe604..1536179f8f5c 100644 --- a/config/examples/Geeetech/MeCreator2/Configuration_adv.h +++ b/config/examples/Geeetech/MeCreator2/Configuration_adv.h @@ -1796,91 +1796,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2106,7 +2106,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2114,7 +2114,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2122,7 +2122,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2130,7 +2130,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2138,7 +2138,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2146,7 +2146,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2154,7 +2154,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2162,7 +2162,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2170,7 +2170,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2178,7 +2178,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2186,7 +2186,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2194,7 +2194,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2202,7 +2202,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h index 0806d2eedd8b..dfbcbe1b5137 100644 --- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h index 0806d2eedd8b..dfbcbe1b5137 100644 --- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h +++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/HMS434/Configuration_adv.h b/config/examples/HMS434/Configuration_adv.h index 4dd9f46bf5c1..c59c545e89c1 100644 --- a/config/examples/HMS434/Configuration_adv.h +++ b/config/examples/HMS434/Configuration_adv.h @@ -1776,91 +1776,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2086,7 +2086,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2094,7 +2094,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2102,7 +2102,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2110,7 +2110,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2118,7 +2118,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2126,7 +2126,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2134,7 +2134,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2142,7 +2142,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2150,7 +2150,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2158,7 +2158,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2166,7 +2166,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2174,7 +2174,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2182,7 +2182,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Infitary/i3-M508/Configuration_adv.h b/config/examples/Infitary/i3-M508/Configuration_adv.h index 788f452ae570..fba5a2601df4 100644 --- a/config/examples/Infitary/i3-M508/Configuration_adv.h +++ b/config/examples/Infitary/i3-M508/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/JGAurora/A1/Configuration_adv.h b/config/examples/JGAurora/A1/Configuration_adv.h index 1ed9efeb8533..a8f481ff4822 100644 --- a/config/examples/JGAurora/A1/Configuration_adv.h +++ b/config/examples/JGAurora/A1/Configuration_adv.h @@ -1802,91 +1802,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2112,7 +2112,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2120,7 +2120,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2128,7 +2128,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2136,7 +2136,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2144,7 +2144,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2152,7 +2152,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2160,7 +2160,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2168,7 +2168,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2176,7 +2176,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2184,7 +2184,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2192,7 +2192,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2200,7 +2200,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2208,7 +2208,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/JGAurora/A5/Configuration_adv.h b/config/examples/JGAurora/A5/Configuration_adv.h index 42bf4ca3ff3d..65549a58d026 100644 --- a/config/examples/JGAurora/A5/Configuration_adv.h +++ b/config/examples/JGAurora/A5/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/JGAurora/A5S/Configuration_adv.h b/config/examples/JGAurora/A5S/Configuration_adv.h index 1ed9efeb8533..a8f481ff4822 100644 --- a/config/examples/JGAurora/A5S/Configuration_adv.h +++ b/config/examples/JGAurora/A5S/Configuration_adv.h @@ -1802,91 +1802,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2112,7 +2112,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2120,7 +2120,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2128,7 +2128,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2136,7 +2136,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2144,7 +2144,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2152,7 +2152,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2160,7 +2160,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2168,7 +2168,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2176,7 +2176,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2184,7 +2184,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2192,7 +2192,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2200,7 +2200,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2208,7 +2208,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/MakerParts/Configuration_adv.h b/config/examples/MakerParts/Configuration_adv.h index f2995f2841e1..739e9a4dc318 100644 --- a/config/examples/MakerParts/Configuration_adv.h +++ b/config/examples/MakerParts/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Malyan/M150/Configuration_adv.h b/config/examples/Malyan/M150/Configuration_adv.h index 83c67f099c45..eab63e50ad55 100644 --- a/config/examples/Malyan/M150/Configuration_adv.h +++ b/config/examples/Malyan/M150/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Malyan/M200/Configuration_adv.h b/config/examples/Malyan/M200/Configuration_adv.h index 384776a295d1..39aeb44cb925 100644 --- a/config/examples/Malyan/M200/Configuration_adv.h +++ b/config/examples/Malyan/M200/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Micromake/C1/enhanced/Configuration_adv.h b/config/examples/Micromake/C1/enhanced/Configuration_adv.h index e0f4b1da236f..da10c309ad59 100644 --- a/config/examples/Micromake/C1/enhanced/Configuration_adv.h +++ b/config/examples/Micromake/C1/enhanced/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Mks/Robin/Configuration_adv.h b/config/examples/Mks/Robin/Configuration_adv.h index 6a56e4021482..14b13ef25918 100644 --- a/config/examples/Mks/Robin/Configuration_adv.h +++ b/config/examples/Mks/Robin/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Mks/Sbase/Configuration_adv.h b/config/examples/Mks/Sbase/Configuration_adv.h index 9cc53115295c..8275dcec9489 100644 --- a/config/examples/Mks/Sbase/Configuration_adv.h +++ b/config/examples/Mks/Sbase/Configuration_adv.h @@ -1798,91 +1798,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2108,7 +2108,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2116,7 +2116,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2124,7 +2124,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2132,7 +2132,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2140,7 +2140,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2148,7 +2148,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2156,7 +2156,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2164,7 +2164,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2172,7 +2172,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2180,7 +2180,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2188,7 +2188,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2196,7 +2196,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2204,7 +2204,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/RapideLite/RL200/Configuration_adv.h b/config/examples/RapideLite/RL200/Configuration_adv.h index fbd7d429d432..3e5a9294f66d 100644 --- a/config/examples/RapideLite/RL200/Configuration_adv.h +++ b/config/examples/RapideLite/RL200/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/RigidBot/Configuration_adv.h b/config/examples/RigidBot/Configuration_adv.h index c0142621aca3..61d6b61db7e4 100644 --- a/config/examples/RigidBot/Configuration_adv.h +++ b/config/examples/RigidBot/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/SCARA/Configuration_adv.h b/config/examples/SCARA/Configuration_adv.h index f7c502789b13..2530b83de334 100644 --- a/config/examples/SCARA/Configuration_adv.h +++ b/config/examples/SCARA/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h index c60a2e7e565a..56ac568f45b4 100644 --- a/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h +++ b/config/examples/STM32/Black_STM32F407VET6/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Sanguinololu/Configuration_adv.h b/config/examples/Sanguinololu/Configuration_adv.h index 179f0de35bd3..6fd866513294 100644 --- a/config/examples/Sanguinololu/Configuration_adv.h +++ b/config/examples/Sanguinololu/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Tevo/Michelangelo/Configuration_adv.h b/config/examples/Tevo/Michelangelo/Configuration_adv.h index 5709472fcd15..3950cb0fe51b 100644 --- a/config/examples/Tevo/Michelangelo/Configuration_adv.h +++ b/config/examples/Tevo/Michelangelo/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h index a179733e4607..2d22bd9b7ed0 100755 --- a/config/examples/Tevo/Tarantula Pro/Configuration_adv.h +++ b/config/examples/Tevo/Tarantula Pro/Configuration_adv.h @@ -1793,91 +1793,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2103,7 +2103,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2111,7 +2111,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2119,7 +2119,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2127,7 +2127,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2135,7 +2135,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2143,7 +2143,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2151,7 +2151,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2159,7 +2159,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2167,7 +2167,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2175,7 +2175,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2183,7 +2183,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2191,7 +2191,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2199,7 +2199,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h index 4856a3a8db62..4010b594b67a 100755 --- a/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V1 (MKS Base)/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h index 4856a3a8db62..4010b594b67a 100755 --- a/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h +++ b/config/examples/Tevo/Tornado/V2 (MKS GEN-L)/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/TheBorg/Configuration_adv.h b/config/examples/TheBorg/Configuration_adv.h index dea285797c57..f9cd4730e856 100644 --- a/config/examples/TheBorg/Configuration_adv.h +++ b/config/examples/TheBorg/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/TinyBoy2/Configuration_adv.h b/config/examples/TinyBoy2/Configuration_adv.h index 34c68cac4102..c9ea7ecf0a9d 100644 --- a/config/examples/TinyBoy2/Configuration_adv.h +++ b/config/examples/TinyBoy2/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Tronxy/X3A/Configuration_adv.h b/config/examples/Tronxy/X3A/Configuration_adv.h index 514eac10ce4a..32eabd0d4129 100644 --- a/config/examples/Tronxy/X3A/Configuration_adv.h +++ b/config/examples/Tronxy/X3A/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Tronxy/X5S-2E/Configuration_adv.h b/config/examples/Tronxy/X5S-2E/Configuration_adv.h index 55e9c6c94c3c..a43af1a0a5b1 100644 --- a/config/examples/Tronxy/X5S-2E/Configuration_adv.h +++ b/config/examples/Tronxy/X5S-2E/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/UltiMachine/Archim1/Configuration_adv.h b/config/examples/UltiMachine/Archim1/Configuration_adv.h index e9ec937f68f6..6d3a61415d49 100644 --- a/config/examples/UltiMachine/Archim1/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim1/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/UltiMachine/Archim2/Configuration_adv.h b/config/examples/UltiMachine/Archim2/Configuration_adv.h index ac956d95838a..a830fa3fbc42 100644 --- a/config/examples/UltiMachine/Archim2/Configuration_adv.h +++ b/config/examples/UltiMachine/Archim2/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/VORONDesign/Configuration_adv.h b/config/examples/VORONDesign/Configuration_adv.h index c7bba80eab98..6ccfc1ea2657 100644 --- a/config/examples/VORONDesign/Configuration_adv.h +++ b/config/examples/VORONDesign/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Velleman/K8200/Configuration_adv.h b/config/examples/Velleman/K8200/Configuration_adv.h index 04f65763be64..8dabcb80764d 100644 --- a/config/examples/Velleman/K8200/Configuration_adv.h +++ b/config/examples/Velleman/K8200/Configuration_adv.h @@ -1810,91 +1810,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2120,7 +2120,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2128,7 +2128,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2136,7 +2136,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2144,7 +2144,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2152,7 +2152,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2160,7 +2160,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2168,7 +2168,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2176,7 +2176,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2184,7 +2184,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2192,7 +2192,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2200,7 +2200,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2208,7 +2208,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2216,7 +2216,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Velleman/K8400/Configuration_adv.h b/config/examples/Velleman/K8400/Configuration_adv.h index ba14b40a3b90..6d87bcdae58c 100644 --- a/config/examples/Velleman/K8400/Configuration_adv.h +++ b/config/examples/Velleman/K8400/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/WASP/PowerWASP/Configuration_adv.h b/config/examples/WASP/PowerWASP/Configuration_adv.h index 880018e34124..73df795dab9c 100644 --- a/config/examples/WASP/PowerWASP/Configuration_adv.h +++ b/config/examples/WASP/PowerWASP/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h index 56bafd602f29..55f9ec5bfd2a 100644 --- a/config/examples/Wanhao/Duplicator 6/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator 6/Configuration_adv.h @@ -1799,91 +1799,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2109,7 +2109,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2117,7 +2117,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2125,7 +2125,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2133,7 +2133,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2141,7 +2141,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2149,7 +2149,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2157,7 +2157,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2165,7 +2165,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2173,7 +2173,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2181,7 +2181,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2189,7 +2189,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2197,7 +2197,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2205,7 +2205,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h index fddac3a1f0e2..8f56c1098e7e 100644 --- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h +++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h index 561862cd8007..83529720b129 100644 --- a/config/examples/delta/Anycubic/Kossel/Configuration_adv.h +++ b/config/examples/delta/Anycubic/Kossel/Configuration_adv.h @@ -1799,91 +1799,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2109,7 +2109,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2117,7 +2117,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2125,7 +2125,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2133,7 +2133,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2141,7 +2141,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2149,7 +2149,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2157,7 +2157,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2165,7 +2165,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2173,7 +2173,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2181,7 +2181,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2189,7 +2189,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2197,7 +2197,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2205,7 +2205,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h index 053523576168..f977553196d5 100644 --- a/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord/Configuration_adv.h @@ -1799,91 +1799,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2097,7 +2097,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2105,7 +2105,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2113,7 +2113,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2121,7 +2121,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2129,7 +2129,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2137,7 +2137,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2145,7 +2145,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2153,7 +2153,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2161,7 +2161,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2169,7 +2169,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2177,7 +2177,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2185,7 +2185,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2193,7 +2193,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h index 053523576168..f977553196d5 100644 --- a/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h +++ b/config/examples/delta/Dreammaker/Overlord_Pro/Configuration_adv.h @@ -1799,91 +1799,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2097,7 +2097,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2105,7 +2105,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2113,7 +2113,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2121,7 +2121,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2129,7 +2129,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2137,7 +2137,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2145,7 +2145,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2153,7 +2153,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2161,7 +2161,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2169,7 +2169,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2177,7 +2177,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2185,7 +2185,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2193,7 +2193,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h index 4396038fcbf2..35644b66faa8 100644 --- a/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h +++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration_adv.h @@ -1799,91 +1799,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2109,7 +2109,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2117,7 +2117,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2125,7 +2125,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2133,7 +2133,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2141,7 +2141,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2149,7 +2149,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2157,7 +2157,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2165,7 +2165,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2173,7 +2173,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2181,7 +2181,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2189,7 +2189,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2197,7 +2197,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2205,7 +2205,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/delta/FLSUN/kossel/Configuration_adv.h b/config/examples/delta/FLSUN/kossel/Configuration_adv.h index 4396038fcbf2..35644b66faa8 100644 --- a/config/examples/delta/FLSUN/kossel/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel/Configuration_adv.h @@ -1799,91 +1799,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2109,7 +2109,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2117,7 +2117,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2125,7 +2125,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2133,7 +2133,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2141,7 +2141,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2149,7 +2149,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2157,7 +2157,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2165,7 +2165,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2173,7 +2173,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2181,7 +2181,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2189,7 +2189,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2197,7 +2197,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2205,7 +2205,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h index 62ef3984dc54..8bf14e194ac7 100644 --- a/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/FLSUN/kossel_mini/Configuration_adv.h @@ -1799,91 +1799,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2109,7 +2109,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2117,7 +2117,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2125,7 +2125,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2133,7 +2133,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2141,7 +2141,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2149,7 +2149,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2157,7 +2157,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2165,7 +2165,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2173,7 +2173,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2181,7 +2181,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2189,7 +2189,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2197,7 +2197,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2205,7 +2205,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h index de2cf53e99f8..5bd126a166c6 100644 --- a/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h +++ b/config/examples/delta/Geeetech/Rostock 301/Configuration_adv.h @@ -1799,91 +1799,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2109,7 +2109,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2117,7 +2117,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2125,7 +2125,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2133,7 +2133,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2141,7 +2141,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2149,7 +2149,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2157,7 +2157,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2165,7 +2165,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2173,7 +2173,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2181,7 +2181,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2189,7 +2189,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2197,7 +2197,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2205,7 +2205,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/delta/MKS/SBASE/Configuration_adv.h b/config/examples/delta/MKS/SBASE/Configuration_adv.h index f9b6af4aa214..9dcdee4792c6 100644 --- a/config/examples/delta/MKS/SBASE/Configuration_adv.h +++ b/config/examples/delta/MKS/SBASE/Configuration_adv.h @@ -1799,91 +1799,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2109,7 +2109,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2117,7 +2117,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2125,7 +2125,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2133,7 +2133,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2141,7 +2141,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2149,7 +2149,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2157,7 +2157,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2165,7 +2165,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2173,7 +2173,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2181,7 +2181,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2189,7 +2189,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2197,7 +2197,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2205,7 +2205,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/delta/Tevo Little Monster/Configuration_adv.h b/config/examples/delta/Tevo Little Monster/Configuration_adv.h index 295b8d08c663..71b2790f9155 100644 --- a/config/examples/delta/Tevo Little Monster/Configuration_adv.h +++ b/config/examples/delta/Tevo Little Monster/Configuration_adv.h @@ -1799,91 +1799,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2109,7 +2109,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2117,7 +2117,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2125,7 +2125,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2133,7 +2133,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2141,7 +2141,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2149,7 +2149,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2157,7 +2157,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2165,7 +2165,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2173,7 +2173,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2181,7 +2181,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2189,7 +2189,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2197,7 +2197,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2205,7 +2205,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/delta/generic/Configuration_adv.h b/config/examples/delta/generic/Configuration_adv.h index 62ef3984dc54..8bf14e194ac7 100644 --- a/config/examples/delta/generic/Configuration_adv.h +++ b/config/examples/delta/generic/Configuration_adv.h @@ -1799,91 +1799,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2109,7 +2109,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2117,7 +2117,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2125,7 +2125,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2133,7 +2133,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2141,7 +2141,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2149,7 +2149,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2157,7 +2157,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2165,7 +2165,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2173,7 +2173,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2181,7 +2181,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2189,7 +2189,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2197,7 +2197,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2205,7 +2205,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/delta/kossel_mini/Configuration_adv.h b/config/examples/delta/kossel_mini/Configuration_adv.h index 62ef3984dc54..8bf14e194ac7 100644 --- a/config/examples/delta/kossel_mini/Configuration_adv.h +++ b/config/examples/delta/kossel_mini/Configuration_adv.h @@ -1799,91 +1799,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2109,7 +2109,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2117,7 +2117,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2125,7 +2125,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2133,7 +2133,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2141,7 +2141,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2149,7 +2149,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2157,7 +2157,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2165,7 +2165,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2173,7 +2173,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2181,7 +2181,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2189,7 +2189,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2197,7 +2197,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2205,7 +2205,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/delta/kossel_xl/Configuration_adv.h b/config/examples/delta/kossel_xl/Configuration_adv.h index abf7bf74e0d5..73cce925fbc1 100644 --- a/config/examples/delta/kossel_xl/Configuration_adv.h +++ b/config/examples/delta/kossel_xl/Configuration_adv.h @@ -1799,91 +1799,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2109,7 +2109,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2117,7 +2117,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2125,7 +2125,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2133,7 +2133,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2141,7 +2141,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2149,7 +2149,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2157,7 +2157,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2165,7 +2165,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2173,7 +2173,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2181,7 +2181,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2189,7 +2189,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2197,7 +2197,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2205,7 +2205,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/gCreate/gMax1.5+/Configuration_adv.h b/config/examples/gCreate/gMax1.5+/Configuration_adv.h index 68ec30b7776b..f05d6576b0ff 100644 --- a/config/examples/gCreate/gMax1.5+/Configuration_adv.h +++ b/config/examples/gCreate/gMax1.5+/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/makibox/Configuration_adv.h b/config/examples/makibox/Configuration_adv.h index 5f116061b0af..2602e0aa526d 100644 --- a/config/examples/makibox/Configuration_adv.h +++ b/config/examples/makibox/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/tvrrug/Round2/Configuration_adv.h b/config/examples/tvrrug/Round2/Configuration_adv.h index 450494ba009d..1875773d1160 100644 --- a/config/examples/tvrrug/Round2/Configuration_adv.h +++ b/config/examples/tvrrug/Round2/Configuration_adv.h @@ -1797,91 +1797,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2107,7 +2107,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2115,7 +2115,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2123,7 +2123,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2131,7 +2131,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2139,7 +2139,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2147,7 +2147,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2155,7 +2155,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2163,7 +2163,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2171,7 +2171,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2179,7 +2179,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2187,7 +2187,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2195,7 +2195,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2203,7 +2203,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** diff --git a/config/examples/wt150/Configuration_adv.h b/config/examples/wt150/Configuration_adv.h index 92810b2ce105..1d3c110d52ab 100644 --- a/config/examples/wt150/Configuration_adv.h +++ b/config/examples/wt150/Configuration_adv.h @@ -1798,91 +1798,91 @@ #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. #define X_MICROSTEPS 16 // 0..256 #define X_RSENSE 0.11 - #define X_CHAIN_POS 0 // 0 - Not chained, 1 - MCU MOSI connected, 2 - next in chain, ... + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... #endif #if AXIS_IS_TMC(X2) #define X2_CURRENT 800 #define X2_MICROSTEPS 16 #define X2_RSENSE 0.11 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y) #define Y_CURRENT 800 #define Y_MICROSTEPS 16 #define Y_RSENSE 0.11 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Y2) #define Y2_CURRENT 800 #define Y2_MICROSTEPS 16 #define Y2_RSENSE 0.11 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z) #define Z_CURRENT 800 #define Z_MICROSTEPS 16 #define Z_RSENSE 0.11 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z2) #define Z2_CURRENT 800 #define Z2_MICROSTEPS 16 #define Z2_RSENSE 0.11 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(Z3) #define Z3_CURRENT 800 #define Z3_MICROSTEPS 16 #define Z3_RSENSE 0.11 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E0) #define E0_CURRENT 800 #define E0_MICROSTEPS 16 #define E0_RSENSE 0.11 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E1) #define E1_CURRENT 800 #define E1_MICROSTEPS 16 #define E1_RSENSE 0.11 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E2) #define E2_CURRENT 800 #define E2_MICROSTEPS 16 #define E2_RSENSE 0.11 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E3) #define E3_CURRENT 800 #define E3_MICROSTEPS 16 #define E3_RSENSE 0.11 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E4) #define E4_CURRENT 800 #define E4_MICROSTEPS 16 #define E4_RSENSE 0.11 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_IS_TMC(E5) #define E5_CURRENT 800 #define E5_MICROSTEPS 16 #define E5_RSENSE 0.11 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** @@ -2108,7 +2108,7 @@ #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper - #define X_CHAIN_POS 0 // Position in SPI chain, 0=Not in chain, 1=Nearest MOSI + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) #endif #if AXIS_DRIVER_TYPE_X2(L6470) @@ -2116,7 +2116,7 @@ #define X2_OVERCURRENT 2000 #define X2_STALLCURRENT 1500 #define X2_MAX_VOLTAGE 127 - #define X2_CHAIN_POS 0 + #define X2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y(L6470) @@ -2124,7 +2124,7 @@ #define Y_OVERCURRENT 2000 #define Y_STALLCURRENT 1500 #define Y_MAX_VOLTAGE 127 - #define Y_CHAIN_POS 0 + #define Y_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Y2(L6470) @@ -2132,7 +2132,7 @@ #define Y2_OVERCURRENT 2000 #define Y2_STALLCURRENT 1500 #define Y2_MAX_VOLTAGE 127 - #define Y2_CHAIN_POS 0 + #define Y2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z(L6470) @@ -2140,7 +2140,7 @@ #define Z_OVERCURRENT 2000 #define Z_STALLCURRENT 1500 #define Z_MAX_VOLTAGE 127 - #define Z_CHAIN_POS 0 + #define Z_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z2(L6470) @@ -2148,7 +2148,7 @@ #define Z2_OVERCURRENT 2000 #define Z2_STALLCURRENT 1500 #define Z2_MAX_VOLTAGE 127 - #define Z2_CHAIN_POS 0 + #define Z2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_Z3(L6470) @@ -2156,7 +2156,7 @@ #define Z3_OVERCURRENT 2000 #define Z3_STALLCURRENT 1500 #define Z3_MAX_VOLTAGE 127 - #define Z3_CHAIN_POS 0 + #define Z3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E0(L6470) @@ -2164,7 +2164,7 @@ #define E0_OVERCURRENT 2000 #define E0_STALLCURRENT 1500 #define E0_MAX_VOLTAGE 127 - #define E0_CHAIN_POS 0 + #define E0_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E1(L6470) @@ -2172,7 +2172,7 @@ #define E1_OVERCURRENT 2000 #define E1_STALLCURRENT 1500 #define E1_MAX_VOLTAGE 127 - #define E1_CHAIN_POS 0 + #define E1_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E2(L6470) @@ -2180,7 +2180,7 @@ #define E2_OVERCURRENT 2000 #define E2_STALLCURRENT 1500 #define E2_MAX_VOLTAGE 127 - #define E2_CHAIN_POS 0 + #define E2_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E3(L6470) @@ -2188,7 +2188,7 @@ #define E3_OVERCURRENT 2000 #define E3_STALLCURRENT 1500 #define E3_MAX_VOLTAGE 127 - #define E3_CHAIN_POS 0 + #define E3_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E4(L6470) @@ -2196,7 +2196,7 @@ #define E4_OVERCURRENT 2000 #define E4_STALLCURRENT 1500 #define E4_MAX_VOLTAGE 127 - #define E4_CHAIN_POS 0 + #define E4_CHAIN_POS -1 #endif #if AXIS_DRIVER_TYPE_E5(L6470) @@ -2204,7 +2204,7 @@ #define E5_OVERCURRENT 2000 #define E5_STALLCURRENT 1500 #define E5_MAX_VOLTAGE 127 - #define E5_CHAIN_POS 0 + #define E5_CHAIN_POS -1 #endif /** From 10bbed7f69b2d36081e5d09f7c55492e4b0bcde9 Mon Sep 17 00:00:00 2001 From: Alex Somesan Date: Sun, 29 Sep 2019 23:50:53 +0200 Subject: [PATCH 097/120] Fix comma/semicolon typo (#15420) --- Marlin/src/gcode/calibrate/G28.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp index 6fda4e84d3f0..7f1fb7705e29 100644 --- a/Marlin/src/gcode/calibrate/G28.cpp +++ b/Marlin/src/gcode/calibrate/G28.cpp @@ -231,7 +231,7 @@ void GcodeSuite::G28(const bool always_home_all) { #if ENABLED(IMPROVE_HOMING_RELIABILITY) slow_homing_t slow_homing{0}; - slow_homing.acceleration.set(planner.settings.max_acceleration_mm_per_s2[X_AXIS]; + slow_homing.acceleration.set(planner.settings.max_acceleration_mm_per_s2[X_AXIS], planner.settings.max_acceleration_mm_per_s2[Y_AXIS]); planner.settings.max_acceleration_mm_per_s2[X_AXIS] = 100; planner.settings.max_acceleration_mm_per_s2[Y_AXIS] = 100; From 74746c6573593596301acbb5bb947977eae524d4 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 29 Sep 2019 16:55:34 -0500 Subject: [PATCH 098/120] Fix probe_offset EEPROM field test --- Marlin/src/module/configuration_store.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp index 699b44cdb2b2..88e219db9cd3 100644 --- a/Marlin/src/module/configuration_store.cpp +++ b/Marlin/src/module/configuration_store.cpp @@ -614,10 +614,10 @@ void MarlinSettings::postprocess() { } // - // Probe Z Offset + // Probe XYZ Offsets // { - _FIELD_TEST(probe_offset.z); + _FIELD_TEST(probe_offset); EEPROM_WRITE(probe_offset); } From f307ff68f766ef4e01b55bc4ded16c878f1d3abf Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 29 Sep 2019 17:24:55 -0500 Subject: [PATCH 099/120] Multiply by float, not double --- Marlin/src/gcode/calibrate/M48.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/gcode/calibrate/M48.cpp b/Marlin/src/gcode/calibrate/M48.cpp index d8fe4e410484..8a127672241a 100644 --- a/Marlin/src/gcode/calibrate/M48.cpp +++ b/Marlin/src/gcode/calibrate/M48.cpp @@ -176,7 +176,7 @@ void GcodeSuite::M48() { // If we have gone out too far, we can do a simple fix and scale the numbers // back in closer to the origin. while (!position_is_reachable_by_probe(next_pos)) { - next_pos *= 0.8; + next_pos *= 0.8f; if (verbose_level > 3) SERIAL_ECHOLNPAIR("Moving inward: X", next_pos.x, " Y", next_pos.y); } From d0dd1a387e2d80303a50d686112af25377b15f8d Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 29 Sep 2019 17:30:58 -0500 Subject: [PATCH 100/120] Require a newer Neopixel --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 447a10e81a2f..70a0ae0e5820 100644 --- a/platformio.ini +++ b/platformio.ini @@ -28,7 +28,7 @@ lib_deps = U8glib-HAL=https://github.com/MarlinFirmware/U8glib-HAL/archive/bugfix.zip LiquidCrystal@1.3.4 TMCStepper@>=0.5.0,<1.0.0 - Adafruit NeoPixel@1.1.3 + Adafruit NeoPixel@1.2.5 LiquidTWI2=https://github.com/lincomatic/LiquidTWI2/archive/master.zip Arduino-L6470=https://github.com/ameyer/Arduino-L6470/archive/dev.zip SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip From 24706aedbdf16be41071ed77228d419f5fb9bd4c Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 29 Sep 2019 17:36:21 -0500 Subject: [PATCH 101/120] Fix Neopixel typos --- Marlin/src/feature/leds/neopixel.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Marlin/src/feature/leds/neopixel.h b/Marlin/src/feature/leds/neopixel.h index b8c8b12ad624..e0a3d7c389d7 100644 --- a/Marlin/src/feature/leds/neopixel.h +++ b/Marlin/src/feature/leds/neopixel.h @@ -66,11 +66,9 @@ class Marlin_NeoPixel { static void set_color_startup(const uint32_t c); static void set_color(const uint32_t c); - static void set_color_background(); - //bool set_led_color(const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t w, const uint8_t p); #ifdef NEOPIXEL_BKGD_LED_INDEX - static void set_pixel_color(const uint16_t n, const uint32_t c); + static void set_color_background(); #endif static inline void begin() { @@ -107,6 +105,10 @@ class Marlin_NeoPixel { #endif } + #if 0 + bool set_led_color(const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t w, const uint8_t p); + #endif + // Accessors static inline uint16_t pixels() { return adaneo1.numPixels(); } static inline uint8_t brightness() { return adaneo1.getBrightness(); } From 139b7196a0eb2cf74763c9879ff5e1e14ac935c3 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 29 Sep 2019 17:57:29 -0500 Subject: [PATCH 102/120] Watchdog cleanup (#15283) --- Marlin/src/HAL/HAL.h | 6 ++++++ Marlin/src/HAL/HAL_AVR/watchdog.h | 2 +- Marlin/src/HAL/HAL_DUE/watchdog.h | 2 +- Marlin/src/HAL/HAL_ESP32/watchdog.h | 2 +- Marlin/src/HAL/HAL_LINUX/HAL.h | 4 ++++ Marlin/src/HAL/HAL_LINUX/watchdog.cpp | 14 ++------------ Marlin/src/HAL/HAL_LINUX/watchdog.h | 4 +--- Marlin/src/HAL/HAL_LPC1768/HAL.cpp | 17 +++++++++++++++++ Marlin/src/HAL/HAL_LPC1768/HAL.h | 4 ++++ Marlin/src/HAL/HAL_LPC1768/watchdog.cpp | 20 ++++---------------- Marlin/src/HAL/HAL_LPC1768/watchdog.h | 7 ++++--- Marlin/src/HAL/HAL_SAMD51/watchdog.cpp | 2 +- Marlin/src/HAL/HAL_SAMD51/watchdog.h | 2 +- Marlin/src/HAL/HAL_STM32/watchdog.cpp | 2 +- Marlin/src/HAL/HAL_STM32/watchdog.h | 2 +- Marlin/src/HAL/HAL_STM32F1/watchdog.cpp | 2 +- Marlin/src/HAL/HAL_STM32F1/watchdog.h | 2 +- Marlin/src/HAL/HAL_STM32_F4_F7/watchdog.cpp | 2 +- Marlin/src/HAL/HAL_STM32_F4_F7/watchdog.h | 2 +- Marlin/src/HAL/HAL_TEENSY31_32/watchdog.h | 2 +- Marlin/src/HAL/HAL_TEENSY35_36/watchdog.h | 2 +- Marlin/src/Marlin.cpp | 18 +++--------------- Marlin/src/gcode/config/M43.cpp | 16 +++++----------- Marlin/src/gcode/feature/L6470/M916-918.cpp | 2 +- Marlin/src/module/temperature.cpp | 8 +++----- Marlin/src/sd/Sd2Card.cpp | 21 ++++----------------- buildroot/share/tests/megaatmega2560-tests | 1 + platformio.ini | 2 +- 28 files changed, 73 insertions(+), 97 deletions(-) diff --git a/Marlin/src/HAL/HAL.h b/Marlin/src/HAL/HAL.h index f3946902c8d5..cecdd8b67b12 100644 --- a/Marlin/src/HAL/HAL.h +++ b/Marlin/src/HAL/HAL.h @@ -24,3 +24,9 @@ #include "platforms.h" #include HAL_PATH(.,HAL.h) + +inline void watchdog_refresh() { + #if ENABLED(USE_WATCHDOG) + HAL_watchdog_refresh(); + #endif +} diff --git a/Marlin/src/HAL/HAL_AVR/watchdog.h b/Marlin/src/HAL/HAL_AVR/watchdog.h index 5190d2c55af5..efd725d7d7a3 100644 --- a/Marlin/src/HAL/HAL_AVR/watchdog.h +++ b/Marlin/src/HAL/HAL_AVR/watchdog.h @@ -28,4 +28,4 @@ void watchdog_init(); // Reset watchdog. MUST be called at least every 4 seconds after the // first watchdog_init or AVR will go into emergency procedures. -inline void watchdog_reset() { wdt_reset(); } +inline void HAL_watchdog_refresh() { wdt_reset(); } diff --git a/Marlin/src/HAL/HAL_DUE/watchdog.h b/Marlin/src/HAL/HAL_DUE/watchdog.h index 14832a9c3cdf..6e70adef81a4 100644 --- a/Marlin/src/HAL/HAL_DUE/watchdog.h +++ b/Marlin/src/HAL/HAL_DUE/watchdog.h @@ -30,4 +30,4 @@ void watchdog_init(); // Reset watchdog. MUST be called at least every 4 seconds after the // first watchdog_init or AVR will go into emergency procedures. -inline void watchdog_reset() { watchdogReset(); } +inline void HAL_watchdog_refresh() { watchdogReset(); } diff --git a/Marlin/src/HAL/HAL_ESP32/watchdog.h b/Marlin/src/HAL/HAL_ESP32/watchdog.h index e5dd3b46d33f..e1ec9fbf5408 100644 --- a/Marlin/src/HAL/HAL_ESP32/watchdog.h +++ b/Marlin/src/HAL/HAL_ESP32/watchdog.h @@ -25,4 +25,4 @@ void watchdog_init(); // Reset watchdog. -inline void watchdog_reset() { } +inline void HAL_watchdog_refresh() { } diff --git a/Marlin/src/HAL/HAL_LINUX/HAL.h b/Marlin/src/HAL/HAL_LINUX/HAL.h index 39d68a7a1083..8f368a150789 100644 --- a/Marlin/src/HAL/HAL_LINUX/HAL.h +++ b/Marlin/src/HAL/HAL_LINUX/HAL.h @@ -97,6 +97,10 @@ void HAL_adc_enable_channel(int pin); void HAL_adc_start_conversion(const uint8_t adc_pin); uint16_t HAL_adc_get_result(); +// Reset source +inline void HAL_clear_reset_source(void) {} +inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; } + /* ---------------- Delay in cycles */ FORCE_INLINE static void DELAY_CYCLES(uint64_t x) { Clock::delayCycles(x); diff --git a/Marlin/src/HAL/HAL_LINUX/watchdog.cpp b/Marlin/src/HAL/HAL_LINUX/watchdog.cpp index a1ecac1cb5df..6338ea3b1d7b 100644 --- a/Marlin/src/HAL/HAL_LINUX/watchdog.cpp +++ b/Marlin/src/HAL/HAL_LINUX/watchdog.cpp @@ -29,18 +29,8 @@ #include "watchdog.h" void watchdog_init() {} +void HAL_watchdog_refresh() {} -void HAL_clear_reset_source() {} - -uint8_t HAL_get_reset_source() { - return RST_POWER_ON; -} - -void watchdog_reset() {} - -#else - void HAL_clear_reset_source() {} - uint8_t HAL_get_reset_source() { return RST_POWER_ON; } -#endif // USE_WATCHDOG +#endif #endif // __PLAT_LINUX__ diff --git a/Marlin/src/HAL/HAL_LINUX/watchdog.h b/Marlin/src/HAL/HAL_LINUX/watchdog.h index 5bc06f04f17d..51d30c8437a1 100644 --- a/Marlin/src/HAL/HAL_LINUX/watchdog.h +++ b/Marlin/src/HAL/HAL_LINUX/watchdog.h @@ -24,6 +24,4 @@ #define WDT_TIMEOUT 4000000 // 4 second timeout void watchdog_init(); -void watchdog_reset(); -void HAL_clear_reset_source(); -uint8_t HAL_get_reset_source(); +void HAL_watchdog_refresh(); diff --git a/Marlin/src/HAL/HAL_LPC1768/HAL.cpp b/Marlin/src/HAL/HAL_LPC1768/HAL.cpp index b684145e99de..2607ecfb4634 100644 --- a/Marlin/src/HAL/HAL_LPC1768/HAL.cpp +++ b/Marlin/src/HAL/HAL_LPC1768/HAL.cpp @@ -26,6 +26,10 @@ #include "../shared/Delay.h" #include "../../../gcode/parser.h" +#if ENABLED(USE_WATCHDOG) + #include "watchdog.h" +#endif + // U8glib required functions extern "C" void u8g_xMicroDelay(uint16_t val) { DELAY_US(val); @@ -65,4 +69,17 @@ void flashFirmware(int16_t value) { NVIC_SystemReset(); } +void HAL_clear_reset_source(void) { + #if ENABLED(USE_WATCHDOG) + watchdog_clear_timeout_flag(); + #endif +} + +uint8_t HAL_get_reset_source(void) { + #if ENABLED(USE_WATCHDOG) + if (watchdog_timed_out()) return RST_WATCHDOG; + #endif + return RST_POWER_ON; +} + #endif // TARGET_LPC1768 diff --git a/Marlin/src/HAL/HAL_LPC1768/HAL.h b/Marlin/src/HAL/HAL_LPC1768/HAL.h index cf2576de2504..7ea6d288be92 100644 --- a/Marlin/src/HAL/HAL_LPC1768/HAL.h +++ b/Marlin/src/HAL/HAL_LPC1768/HAL.h @@ -164,3 +164,7 @@ void set_pwm_frequency(const pin_t pin, int f_desired); * Optionally allows changing the maximum size of the provided value to enable finer PWM duty control [default = 255] */ void set_pwm_duty(const pin_t pin, const uint16_t v, const uint16_t v_size=255, const bool invert=false); + +// Reset source +void HAL_clear_reset_source(void); +uint8_t HAL_get_reset_source(void); diff --git a/Marlin/src/HAL/HAL_LPC1768/watchdog.cpp b/Marlin/src/HAL/HAL_LPC1768/watchdog.cpp index 55e3628603ad..f122bf99849f 100644 --- a/Marlin/src/HAL/HAL_LPC1768/watchdog.cpp +++ b/Marlin/src/HAL/HAL_LPC1768/watchdog.cpp @@ -56,28 +56,16 @@ void watchdog_init() { WDT_Start(WDT_TIMEOUT); } -void HAL_clear_reset_source() { - WDT_ClrTimeOutFlag(); -} - -uint8_t HAL_get_reset_source() { - if (TEST(WDT_ReadTimeOutFlag(), 0)) return RST_WATCHDOG; - return RST_POWER_ON; -} - -void watchdog_reset() { +void HAL_watchdog_refresh() { WDT_Feed(); #if DISABLED(PINS_DEBUGGING) && PIN_EXISTS(LED) TOGGLE(LED_PIN); // heartbeat indicator #endif } -#else - -void watchdog_init() {} -void watchdog_reset() {} -void HAL_clear_reset_source() {} -uint8_t HAL_get_reset_source() { return RST_POWER_ON; } +// Timeout state +bool watchdog_timed_out() { return TEST(WDT_ReadTimeOutFlag(), 0); } +void watchdog_clear_timeout_flag() { WDT_ClrTimeOutFlag(); } #endif // USE_WATCHDOG diff --git a/Marlin/src/HAL/HAL_LPC1768/watchdog.h b/Marlin/src/HAL/HAL_LPC1768/watchdog.h index 5bc06f04f17d..dd6617ea315a 100644 --- a/Marlin/src/HAL/HAL_LPC1768/watchdog.h +++ b/Marlin/src/HAL/HAL_LPC1768/watchdog.h @@ -24,6 +24,7 @@ #define WDT_TIMEOUT 4000000 // 4 second timeout void watchdog_init(); -void watchdog_reset(); -void HAL_clear_reset_source(); -uint8_t HAL_get_reset_source(); +void HAL_watchdog_refresh(); + +bool watchdog_timed_out(); +void watchdog_clear_timeout_flag(); diff --git a/Marlin/src/HAL/HAL_SAMD51/watchdog.cpp b/Marlin/src/HAL/HAL_SAMD51/watchdog.cpp index a60bcedd8a32..69a6de4ef759 100644 --- a/Marlin/src/HAL/HAL_SAMD51/watchdog.cpp +++ b/Marlin/src/HAL/HAL_SAMD51/watchdog.cpp @@ -42,7 +42,7 @@ WDT->INTENCLR.reg = WDT_INTENCLR_EW; // Disable early warning interrupt WDT->CONFIG.reg = WDT_CONFIG_PER_CYC4096; // Set at least 4s period for chip reset - watchdog_reset(); + HAL_watchdog_refresh(); WDT->CTRLA.reg = WDT_CTRLA_ENABLE; // Start watchdog now in normal mode SYNC(WDT->SYNCBUSY.bit.ENABLE); diff --git a/Marlin/src/HAL/HAL_SAMD51/watchdog.h b/Marlin/src/HAL/HAL_SAMD51/watchdog.h index 1c4e7542f238..b626b0b06ae1 100644 --- a/Marlin/src/HAL/HAL_SAMD51/watchdog.h +++ b/Marlin/src/HAL/HAL_SAMD51/watchdog.h @@ -25,7 +25,7 @@ void watchdog_init(); // Reset watchdog. MUST be called at least every 4 seconds after the // first watchdog_init or SAMD will go into emergency procedures. -inline void watchdog_reset() { +inline void HAL_watchdog_refresh() { SYNC(WDT->SYNCBUSY.bit.CLEAR); // Test first if previous is 'ongoing' to save time waiting for command execution WDT->CLEAR.reg = WDT_CLEAR_CLEAR_KEY; } diff --git a/Marlin/src/HAL/HAL_STM32/watchdog.cpp b/Marlin/src/HAL/HAL_STM32/watchdog.cpp index 8963d55cfc88..4defadaa77d3 100644 --- a/Marlin/src/HAL/HAL_STM32/watchdog.cpp +++ b/Marlin/src/HAL/HAL_STM32/watchdog.cpp @@ -33,7 +33,7 @@ void watchdog_init() { IWatchdog.begin(4000000); } // 4 sec timeout - void watchdog_reset() { + void HAL_watchdog_refresh() { IWatchdog.reload(); #if DISABLED(PINS_DEBUGGING) && PIN_EXISTS(LED) TOGGLE(LED_PIN); // heartbeat indicator diff --git a/Marlin/src/HAL/HAL_STM32/watchdog.h b/Marlin/src/HAL/HAL_STM32/watchdog.h index f062d8a2e6f8..6855016737d1 100644 --- a/Marlin/src/HAL/HAL_STM32/watchdog.h +++ b/Marlin/src/HAL/HAL_STM32/watchdog.h @@ -22,4 +22,4 @@ #pragma once void watchdog_init(); -void watchdog_reset(); +void HAL_watchdog_refresh(); diff --git a/Marlin/src/HAL/HAL_STM32F1/watchdog.cpp b/Marlin/src/HAL/HAL_STM32F1/watchdog.cpp index 5696939f3065..17f5aa9725b7 100644 --- a/Marlin/src/HAL/HAL_STM32F1/watchdog.cpp +++ b/Marlin/src/HAL/HAL_STM32F1/watchdog.cpp @@ -33,7 +33,7 @@ #include #include "watchdog.h" -void watchdog_reset() { +void HAL_watchdog_refresh() { #if DISABLED(PINS_DEBUGGING) && PIN_EXISTS(LED) TOGGLE(LED_PIN); // heartbeat indicator #endif diff --git a/Marlin/src/HAL/HAL_STM32F1/watchdog.h b/Marlin/src/HAL/HAL_STM32F1/watchdog.h index 4f3a8deb0d3b..21f97dd7a159 100644 --- a/Marlin/src/HAL/HAL_STM32F1/watchdog.h +++ b/Marlin/src/HAL/HAL_STM32F1/watchdog.h @@ -41,4 +41,4 @@ void watchdog_init(); // Reset watchdog. MUST be called at least every 4 seconds after the // first watchdog_init or STM32F1 will reset. -void watchdog_reset(); +void HAL_watchdog_refresh(); diff --git a/Marlin/src/HAL/HAL_STM32_F4_F7/watchdog.cpp b/Marlin/src/HAL/HAL_STM32_F4_F7/watchdog.cpp index e078d7a1048c..e51af618c958 100644 --- a/Marlin/src/HAL/HAL_STM32_F4_F7/watchdog.cpp +++ b/Marlin/src/HAL/HAL_STM32_F4_F7/watchdog.cpp @@ -44,7 +44,7 @@ } } - void watchdog_reset() { + void HAL_watchdog_refresh() { /* Refresh IWDG: reload counter */ if (HAL_IWDG_Refresh(&hiwdg) != HAL_OK) { /* Refresh Error */ diff --git a/Marlin/src/HAL/HAL_STM32_F4_F7/watchdog.h b/Marlin/src/HAL/HAL_STM32_F4_F7/watchdog.h index cc02fda24f41..9e2a2dc21c45 100644 --- a/Marlin/src/HAL/HAL_STM32_F4_F7/watchdog.h +++ b/Marlin/src/HAL/HAL_STM32_F4_F7/watchdog.h @@ -24,4 +24,4 @@ extern IWDG_HandleTypeDef hiwdg; void watchdog_init(); -void watchdog_reset(); +void HAL_watchdog_refresh(); diff --git a/Marlin/src/HAL/HAL_TEENSY31_32/watchdog.h b/Marlin/src/HAL/HAL_TEENSY31_32/watchdog.h index ceb041b45715..861afcbc9148 100644 --- a/Marlin/src/HAL/HAL_TEENSY31_32/watchdog.h +++ b/Marlin/src/HAL/HAL_TEENSY31_32/watchdog.h @@ -27,7 +27,7 @@ void watchdog_init(); -inline void watchdog_reset() { +inline void HAL_watchdog_refresh() { // Watchdog refresh sequence WDOG_REFRESH = 0xA602; WDOG_REFRESH = 0xB480; diff --git a/Marlin/src/HAL/HAL_TEENSY35_36/watchdog.h b/Marlin/src/HAL/HAL_TEENSY35_36/watchdog.h index d2efaab37217..7c27260906c7 100644 --- a/Marlin/src/HAL/HAL_TEENSY35_36/watchdog.h +++ b/Marlin/src/HAL/HAL_TEENSY35_36/watchdog.h @@ -23,7 +23,7 @@ void watchdog_init(); -inline void watchdog_reset() { +inline void HAL_watchdog_refresh() { // Watchdog refresh sequence WDOG_REFRESH = 0xA602; WDOG_REFRESH = 0xB480; diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp index d21570198786..cd8ecb4325c6 100644 --- a/Marlin/src/Marlin.cpp +++ b/Marlin/src/Marlin.cpp @@ -801,29 +801,17 @@ void minkill(const bool steppers_off/*=false*/) { #if HAS_KILL // Wait for kill to be released - while (!READ(KILL_PIN)) { - #if ENABLED(USE_WATCHDOG) - watchdog_reset(); - #endif - } + while (!READ(KILL_PIN)) watchdog_refresh(); // Wait for kill to be pressed - while (READ(KILL_PIN)) { - #if ENABLED(USE_WATCHDOG) - watchdog_reset(); - #endif - } + while (READ(KILL_PIN)) watchdog_refresh(); void (*resetFunc)() = 0; // Declare resetFunc() at address 0 resetFunc(); // Jump to address 0 #else // !HAS_KILL - for (;;) { - #if ENABLED(USE_WATCHDOG) - watchdog_reset(); - #endif - } // Wait for reset + for (;;) watchdog_refresh(); // Wait for reset #endif // !HAS_KILL } diff --git a/Marlin/src/gcode/config/M43.cpp b/Marlin/src/gcode/config/M43.cpp index e26f6d8ee2b5..34d42ed49932 100644 --- a/Marlin/src/gcode/config/M43.cpp +++ b/Marlin/src/gcode/config/M43.cpp @@ -50,12 +50,6 @@ #define GET_PIN_MAP_PIN_M43(Q) GET_PIN_MAP_PIN(Q) #endif -inline void _watchdog_reset() { - #if ENABLED(USE_WATCHDOG) - watchdog_reset(); - #endif -} - inline void toggle_pins() { const bool ignore_protection = parser.boolval('I'); const int repeat = parser.intval('R', 1), @@ -71,7 +65,7 @@ inline void toggle_pins() { SERIAL_EOL(); } else { - _watchdog_reset(); + watchdog_refresh(); report_pin_state_extended(pin, ignore_protection, true, "Pulsing "); #if AVR_AT90USB1286_FAMILY // Teensy IDEs don't know about these pins so must use FASTIO if (pin == TEENSY_E2) { @@ -95,10 +89,10 @@ inline void toggle_pins() { { pinMode(pin, OUTPUT); for (int16_t j = 0; j < repeat; j++) { - _watchdog_reset(); extDigitalWrite(pin, 0); safe_delay(wait); - _watchdog_reset(); extDigitalWrite(pin, 1); safe_delay(wait); - _watchdog_reset(); extDigitalWrite(pin, 0); safe_delay(wait); - _watchdog_reset(); + watchdog_refresh(); extDigitalWrite(pin, 0); safe_delay(wait); + watchdog_refresh(); extDigitalWrite(pin, 1); safe_delay(wait); + watchdog_refresh(); extDigitalWrite(pin, 0); safe_delay(wait); + watchdog_refresh(); } } } diff --git a/Marlin/src/gcode/feature/L6470/M916-918.cpp b/Marlin/src/gcode/feature/L6470/M916-918.cpp index 3b62a0f45efc..2077e937b995 100644 --- a/Marlin/src/gcode/feature/L6470/M916-918.cpp +++ b/Marlin/src/gcode/feature/L6470/M916-918.cpp @@ -258,7 +258,7 @@ void GcodeSuite::M917() { } DEBUG_ECHOLNPGM("."); reset_stepper_timeout(); // reset_stepper_timeout to keep steppers powered - watchdog_reset(); // beat the dog + watchdog_refresh(); safe_delay(5000); status_composite_temp = 0; for (j = 0; j < driver_count; j++) { diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index c0a12c7ffa4b..47942441f614 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -1000,7 +1000,7 @@ void Temperature::manage_heater() { #if EARLY_WATCHDOG // If thermal manager is still not running, make sure to at least reset the watchdog! - if (!inited) return watchdog_reset(); + if (!inited) return watchdog_refresh(); #endif #if BOTH(PROBING_HEATERS_OFF, BED_LIMIT_SWITCHING) @@ -1518,10 +1518,8 @@ void Temperature::updateTemperaturesFromRawValues() { filwidth.update_measured_mm(); #endif - #if ENABLED(USE_WATCHDOG) - // Reset the watchdog after we know we have a temperature measurement. - watchdog_reset(); - #endif + // Reset the watchdog on good temperature measurement + watchdog_refresh(); temp_meas_ready = false; } diff --git a/Marlin/src/sd/Sd2Card.cpp b/Marlin/src/sd/Sd2Card.cpp index a6223858cb93..a09de08fe58a 100644 --- a/Marlin/src/sd/Sd2Card.cpp +++ b/Marlin/src/sd/Sd2Card.cpp @@ -234,11 +234,7 @@ bool Sd2Card::init(const uint8_t sckRateID, const pin_t chipSelectPin) { const millis_t init_timeout = millis() + SD_INIT_TIMEOUT; uint32_t arg; - // If init takes more than 4s it could trigger - // watchdog leading to a reboot loop. - #if ENABLED(USE_WATCHDOG) - watchdog_reset(); - #endif + watchdog_refresh(); // In case init takes too long // Set pin modes extDigitalWrite(chipSelectPin_, HIGH); // For some CPUs pinMode can write the wrong data so init desired data value first @@ -252,10 +248,7 @@ bool Sd2Card::init(const uint8_t sckRateID, const pin_t chipSelectPin) { // Must supply min of 74 clock cycles with CS high. for (uint8_t i = 0; i < 10; i++) spiSend(0xFF); - // Initialization can cause the watchdog to timeout, so reinit it here - #if ENABLED(USE_WATCHDOG) - watchdog_reset(); - #endif + watchdog_refresh(); // In case init takes too long // Command to go idle in SPI mode while ((status_ = cardCommand(CMD0, 0)) != R1_IDLE_STATE) { @@ -269,10 +262,7 @@ bool Sd2Card::init(const uint8_t sckRateID, const pin_t chipSelectPin) { crcSupported = (cardCommand(CMD59, 1) == R1_IDLE_STATE); #endif - // Initialization can cause the watchdog to timeout, so reinit it here - #if ENABLED(USE_WATCHDOG) - watchdog_reset(); - #endif + watchdog_refresh(); // In case init takes too long // check SD version for (;;) { @@ -294,10 +284,7 @@ bool Sd2Card::init(const uint8_t sckRateID, const pin_t chipSelectPin) { } } - // Initialization can cause the watchdog to timeout, so reinit it here - #if ENABLED(USE_WATCHDOG) - watchdog_reset(); - #endif + watchdog_refresh(); // In case init takes too long // Initialize card and send host supports SDHC if SD2 arg = type() == SD_CARD_TYPE_SD2 ? 0x40000000 : 0; diff --git a/buildroot/share/tests/megaatmega2560-tests b/buildroot/share/tests/megaatmega2560-tests index fcab51b349b0..bcd3e497f8d5 100755 --- a/buildroot/share/tests/megaatmega2560-tests +++ b/buildroot/share/tests/megaatmega2560-tests @@ -25,6 +25,7 @@ opt_set TEMP_SENSOR_1 1 opt_set TEMP_SENSOR_BED 2 opt_set GRID_MAX_POINTS_X 16 opt_set FANMUX0_PIN 53 +opt_disable USE_WATCHDOG opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER LCD_PROGRESS_BAR LCD_PROGRESS_BAR_TEST \ PIDTEMPBED FIX_MOUNTED_PROBE Z_SAFE_HOMING CODEPENDENT_XY_HOMING \ EEPROM_SETTINGS SDSUPPORT SD_REPRINT_LAST_SELECTED_FILE BINARY_FILE_TRANSFER \ diff --git a/platformio.ini b/platformio.ini index 70a0ae0e5820..2597b4f7de79 100644 --- a/platformio.ini +++ b/platformio.ini @@ -591,7 +591,7 @@ monitor_speed = 250000 # [env:linux_native] platform = native -build_flags = -D__PLAT_LINUX__ -std=gnu++17 -ggdb -g -lrt -lpthread -D__MARLIN_FIRMWARE__ +build_flags = -D__PLAT_LINUX__ -std=gnu++17 -ggdb -g -lrt -lpthread -D__MARLIN_FIRMWARE__ -Wno-expansion-to-defined src_build_flags = -Wall -IMarlin/src/HAL/HAL_LINUX/include build_unflags = -Wall lib_ldf_mode = off From b7a9481e0117ad37914fa5db48f8302a8e95d1b0 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 30 Sep 2019 00:00:04 -0500 Subject: [PATCH 103/120] [cron] Bump distribution date --- Marlin/src/inc/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index c76a2ae1248b..5ea4c33419cc 100644 --- a/Marlin/src/inc/Version.h +++ b/Marlin/src/inc/Version.h @@ -51,7 +51,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ - #define STRING_DISTRIBUTION_DATE "2019-09-29" + #define STRING_DISTRIBUTION_DATE "2019-09-30" /** * Required minimum Configuration.h and Configuration_adv.h file versions. From 55b8547f04119652ab0cac2a186702abaeaa001f Mon Sep 17 00:00:00 2001 From: DrDitto Date: Mon, 30 Sep 2019 01:11:58 -0600 Subject: [PATCH 104/120] Simplify MKS_MINI_12864 init (move 5ms to u8g seq.) (#15428) --- Marlin/src/inc/Conditionals_LCD.h | 1 + .../lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp | 19 +++---------------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index 0e1e65c87f17..101e085724f9 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -128,6 +128,7 @@ #if EITHER(FYSETC_MINI_12864_1_2, FYSETC_MINI_12864_2_0) #define RGB_LED #elif ENABLED(FYSETC_MINI_12864_2_1) + #define LED_CONTROL_MENU #define NEOPIXEL_LED #undef NEOPIXEL_TYPE #define NEOPIXEL_TYPE NEO_RGB diff --git a/Marlin/src/lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp b/Marlin/src/lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp index 5a1326daf913..1e12ba84d0ee 100644 --- a/Marlin/src/lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp +++ b/Marlin/src/lcd/dogm/u8g_dev_uc1701_mini12864_HAL.cpp @@ -130,10 +130,12 @@ static const uint8_t u8g_dev_uc1701_mini12864_HAL_data_start[] PROGMEM = { UC1701_INDICATOR(0), // indicator disable UC1701_ON(1), // display on UC1701_COLUMN_HI(0), // set upper 4 bit of the col adr to 0 + U8G_ESC_END, // end of sequence + U8G_ESC_DLY(5) // delay 5 ms #else UC1701_COLUMN_ADR(0), // address 0 + U8G_ESC_END // end of sequence #endif - U8G_ESC_END // end of sequence }; uint8_t u8g_dev_uc1701_mini12864_HAL_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) { @@ -170,9 +172,6 @@ uint8_t u8g_dev_uc1701_mini12864_HAL_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t m case U8G_DEV_MSG_INIT: u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS); u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_HAL_init_seq); - #if ENABLED(MKS_MINI_12864) - u8g_Delay(5); - #endif break; case U8G_DEV_MSG_STOP: break; @@ -180,17 +179,11 @@ uint8_t u8g_dev_uc1701_mini12864_HAL_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t m case U8G_DEV_MSG_PAGE_NEXT: { u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem); u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_HAL_data_start); - #if ENABLED(MKS_MINI_12864) - u8g_Delay(5); - #endif u8g_WriteByte(u8g, dev, 0x0B0 | (2 * pb->p.page)); /* select current page */ u8g_SetAddress(u8g, dev, 1); /* data mode */ u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)pb->buf); u8g_SetChipSelect(u8g, dev, 0); u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_HAL_data_start); - #if ENABLED(MKS_MINI_12864) - u8g_Delay(5); - #endif u8g_WriteByte(u8g, dev, 0x0B0 | (2 * pb->p.page + 1)); /* select current page */ u8g_SetAddress(u8g, dev, 1); /* data mode */ u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width); @@ -199,16 +192,10 @@ uint8_t u8g_dev_uc1701_mini12864_HAL_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t m case U8G_DEV_MSG_CONTRAST: u8g_SetChipSelect(u8g, dev, 1); - #if ENABLED(MKS_MINI_12864) - u8g_Delay(5); - #endif u8g_SetAddress(u8g, dev, 0); /* instruction mode */ u8g_WriteByte(u8g, dev, 0x081); u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2); u8g_SetChipSelect(u8g, dev, 0); - #if ENABLED(MKS_MINI_12864) - u8g_Delay(5); - #endif return 1; } return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg); From a9c259c77a539c620ff5e92cd9f050bdfea0c33c Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 30 Sep 2019 02:47:19 -0500 Subject: [PATCH 105/120] Patch PrintrboardG2 build (on spec) --- Marlin/src/module/stepper.cpp | 4 ++-- Marlin/src/pins/sam/pins_PRINTRBOARD_G2.h | 2 +- config/examples/Printrbot/PrintrboardG2/Configuration.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp index 6bee709b4edc..12d5820d0972 100644 --- a/Marlin/src/module/stepper.cpp +++ b/Marlin/src/module/stepper.cpp @@ -2580,9 +2580,9 @@ void Stepper::report_positions() { #endif -#else +#else // PRINTRBOARD_G2 - #include "../HAL/HAL_DUE/G2_PWM.h" + #include HAL_PATH(../HAL, fastio/G2_PWM.h) #endif diff --git a/Marlin/src/pins/sam/pins_PRINTRBOARD_G2.h b/Marlin/src/pins/sam/pins_PRINTRBOARD_G2.h index 4df3bc7f1af1..d5cc3bed6a5f 100644 --- a/Marlin/src/pins/sam/pins_PRINTRBOARD_G2.h +++ b/Marlin/src/pins/sam/pins_PRINTRBOARD_G2.h @@ -126,7 +126,7 @@ #define MOTOR_CURRENT_PWM_Y_PIN 64 // PB19 MOTOR 3 #define MOTOR_CURRENT_PWM_E_PIN 61 // PA2 MOTOR 4 -//#define DEFAULT_PWM_MOTOR_CURRENT { 300, 400, 1000} // XY Z E0, 1000 = 1000mAh +#define DEFAULT_PWM_MOTOR_CURRENT { 300, 400, 1000} // XY Z E0, 1000 = 1000mAh // // Temperature Sensors diff --git a/config/examples/Printrbot/PrintrboardG2/Configuration.h b/config/examples/Printrbot/PrintrboardG2/Configuration.h index 4dfeefb576b8..5e8166724a8f 100644 --- a/config/examples/Printrbot/PrintrboardG2/Configuration.h +++ b/config/examples/Printrbot/PrintrboardG2/Configuration.h @@ -102,7 +102,7 @@ * * :[-1, 0, 1, 2, 3, 4, 5, 6, 7] */ -#define SERIAL_PORT 0 +#define SERIAL_PORT -1 /** * Select a secondary serial port on the board to use for communication with the host. From 1e57c6e6e36ed07cd02df55c9dd34d49c17c2f5c Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 30 Sep 2019 02:55:57 -0500 Subject: [PATCH 106/120] AutoBuild tweaks --- .../share/vscode/AutoBuildMarlin/README.md | 8 +-- .../share/vscode/AutoBuildMarlin/extension.js | 30 ++++---- .../share/vscode/AutoBuildMarlin/package.json | 68 +++++++++++-------- 3 files changed, 57 insertions(+), 49 deletions(-) diff --git a/buildroot/share/vscode/AutoBuildMarlin/README.md b/buildroot/share/vscode/AutoBuildMarlin/README.md index 24123db9db5d..bb2080d564a4 100644 --- a/buildroot/share/vscode/AutoBuildMarlin/README.md +++ b/buildroot/share/vscode/AutoBuildMarlin/README.md @@ -34,7 +34,7 @@ Before you install AutoBuildMarlin you'll first need to [Install PlatformIO in V Icon|Action ----|------ - ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/B_small.png)|Start **PIO Build** to test your Marlin build - ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/C_small.png)|Start **PIO Clean** to delete old build files - ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/U_small.png)|Start **PIO Upload** to install Marlin on your board - ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/T_small.png)|Start **PIO Upload (traceback)** to install Marlin with debugging + ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/B_small.png)|Start **Marlin Build** to test your Marlin build + ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/U_small.png)|Start **Marlin Upload** to install Marlin on your board + ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/T_small.png)|Start **Marlin Upload (traceback)** to install Marlin with debugging + ![](https://github.com/MarlinFirmware/Marlin/raw/bugfix-2.0.x/buildroot/share/vscode/AutoBuildMarlin/img/C_small.png)|Start **Marlin Clean** to delete old build files diff --git a/buildroot/share/vscode/AutoBuildMarlin/extension.js b/buildroot/share/vscode/AutoBuildMarlin/extension.js index 01198a62bbf3..15b0b121e3de 100644 --- a/buildroot/share/vscode/AutoBuildMarlin/extension.js +++ b/buildroot/share/vscode/AutoBuildMarlin/extension.js @@ -7,34 +7,34 @@ function activate(context) { console.log('Extension "AutoBuildMarlin" is now active!'); var NEXT_TERM_ID = 1; - var pio_build = vscode.commands.registerCommand('piobuild', function () { + var mf_build = vscode.commands.registerCommand('mfbuild', function () { vscode.commands.executeCommand('workbench.action.files.saveAll'); - const terminal = vscode.window.createTerminal(`AB Build #${NEXT_TERM_ID++}`); + const terminal = vscode.window.createTerminal(`Marlin Build #${NEXT_TERM_ID++}`); terminal.show(true); terminal.sendText("python buildroot/share/atom/auto_build.py build"); }); - var pio_clean = vscode.commands.registerCommand('pioclean', function () { - const terminal = vscode.window.createTerminal(`AB Clean #${NEXT_TERM_ID++}`); - terminal.show(true); - terminal.sendText("python buildroot/share/atom/auto_build.py clean"); - }); - var pio_upload = vscode.commands.registerCommand('pioupload', function () { + var mf_upload = vscode.commands.registerCommand('mfupload', function () { vscode.commands.executeCommand('workbench.action.files.saveAll'); - const terminal = vscode.window.createTerminal(`AB Upload #${NEXT_TERM_ID++}`); + const terminal = vscode.window.createTerminal(`Marlin Upload #${NEXT_TERM_ID++}`); terminal.show(true); terminal.sendText("python buildroot/share/atom/auto_build.py upload"); }); - var pio_traceback = vscode.commands.registerCommand('piotraceback', function () { + var mf_traceback = vscode.commands.registerCommand('mftraceback', function () { vscode.commands.executeCommand('workbench.action.files.saveAll'); - const terminal = vscode.window.createTerminal(`AB Traceback #${NEXT_TERM_ID++}`); + const terminal = vscode.window.createTerminal(`Marlin Traceback #${NEXT_TERM_ID++}`); terminal.show(true); terminal.sendText("python buildroot/share/atom/auto_build.py traceback"); }); + var mf_clean = vscode.commands.registerCommand('mfclean', function () { + const terminal = vscode.window.createTerminal(`Marlin Clean #${NEXT_TERM_ID++}`); + terminal.show(true); + terminal.sendText("python buildroot/share/atom/auto_build.py clean"); + }); - context.subscriptions.push(pio_build); - context.subscriptions.push(pio_clean); - context.subscriptions.push(pio_upload); - context.subscriptions.push(pio_traceback); + context.subscriptions.push(mf_build); + context.subscriptions.push(mf_upload); + context.subscriptions.push(mf_traceback); + context.subscriptions.push(mf_clean); } exports.activate = activate; diff --git a/buildroot/share/vscode/AutoBuildMarlin/package.json b/buildroot/share/vscode/AutoBuildMarlin/package.json index ac30b225e3ae..9c00085a0679 100644 --- a/buildroot/share/vscode/AutoBuildMarlin/package.json +++ b/buildroot/share/vscode/AutoBuildMarlin/package.json @@ -6,65 +6,69 @@ "publisher": "marlinfirmware", "icon": "logo.svg", "engines": { - "vscode": "^1.23.0" + "vscode": "^1.32.0" }, "enableProposedApi": true, "categories": [ "Other" ], "activationEvents": [ - "onCommand:piobuild", - "onCommand:pioclean", - "onCommand:pioupload", - "onCommand:piotraceback" + "onCommand:mfbuild", + "onCommand:mfclean", + "onCommand:mfupload", + "onCommand:mftraceback" ], "main": "./extension", "contributes": { "viewsContainers": { "activitybar": [ { - "id": "auto-build", - "title": "Auto Build Marlin", + "id": "autoBuildVC", + "title": "Marlin Build", "icon": "resources/AB.svg" } ] }, "views": { - "auto-build": [ + "autoBuildVC": [ { - "id": "autobuild", - "name": " " + "id": "autoBuildView", + "name": "Build…" + }, + { + "id": "marlinView", + "name": "Marlin Info" } ] }, "commands": [ { - "command": "piobuild", - "title": "PIO Build", + "command": "mfbuild", + "title": "Build", "icon": { "light": "resources/B48x48_light.svg", "dark": "resources/B48x48_dark.svg" } }, { - "command": "pioupload", - "title": "PIO Upload", + "command": "mfupload", + "title": "Upload", "icon": { "light": "resources/U48x48_light.svg", "dark": "resources/U48x48_dark.svg" } }, { - "command": "piotraceback", - "title": "PIO Upload (traceback)", + "command": "mftraceback", + "title": "Upload (traceback)", "icon": { "light": "resources/T48x48_light.svg", "dark": "resources/T48x48_dark.svg" } }, { - "command": "pioclean", - "title": "PIO Clean", + "command": "mfclean", + "title": "Clean", "icon": { "light": "resources/C48x48_light.svg", "dark": "resources/C48x48_dark.svg" @@ -74,20 +78,24 @@ "menus": { "view/title": [ { - "command": "piobuild", - "group": "navigation@1" + "command": "mfbuild", + "group": "navigation@1", + "when": "view == autoBuildView || view == marlinView" }, { - "command": "pioupload", - "group": "navigation@2" + "command": "mfupload", + "group": "navigation@2", + "when": "view == autoBuildView || view == marlinView" }, { - "command": "piotraceback", - "group": "navigation@3" + "command": "mftraceback", + "group": "navigation@3", + "when": "view == autoBuildView || view == marlinView" }, { - "command": "pioclean", - "group": "navigation@4" + "command": "mfclean", + "group": "navigation@4", + "when": "view == autoBuildView || view == marlinView" } ] } @@ -100,10 +108,10 @@ "test": "npm run compile && node ./node_modules/vscode/bin/test" }, "devDependencies": { - "vscode": "^1.1.17", - "typescript": "^2.6.1", - "tslint": "^5.8.0", - "@types/node": "^7.0.43", + "@types/vscode": "^1.34.0", + "typescript": "^3.5.1", + "tslint": "^5.16.0", + "@types/node": "^10.14.17", "@types/mocha": "^2.2.42" } } From 15efe8d839784cd7c76f489c05bb5fef482482f3 Mon Sep 17 00:00:00 2001 From: Giuliano Zaro <3684609+GMagician@users.noreply.github.com> Date: Tue, 1 Oct 2019 02:31:06 +0200 Subject: [PATCH 107/120] Update Italian language (#15436) --- Marlin/src/lcd/language/language_it.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h index 976460d2f298..94f5ba0ede44 100644 --- a/Marlin/src/lcd/language/language_it.h +++ b/Marlin/src/lcd/language/language_it.h @@ -418,6 +418,8 @@ #define MSG_INFO_EXTRUDERS _UxGT("Estrusori") #define MSG_INFO_BAUDRATE _UxGT("Baud") #define MSG_INFO_PROTOCOL _UxGT("Protocollo") +#define MSG_INFO_RUNAWAY_OFF _UxGT("Controllo fuga: OFF") +#define MSG_INFO_RUNAWAY_ON _UxGT("Controllo fuga: ON") #define MSG_CASE_LIGHT _UxGT("Luci Case") #define MSG_CASE_LIGHT_BRIGHTNESS _UxGT("Luminosità Luci") #if LCD_WIDTH >= 20 From b198f321c85bd03120fa340036bc915c2cf48236 Mon Sep 17 00:00:00 2001 From: Timm Date: Tue, 1 Oct 2019 02:57:22 +0200 Subject: [PATCH 108/120] Add missing motion inline methods (#15433) --- Marlin/src/feature/pause.cpp | 2 +- Marlin/src/module/motion.h | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp index ccb6f6323df5..60f82e0f0548 100644 --- a/Marlin/src/feature/pause.cpp +++ b/Marlin/src/feature/pause.cpp @@ -655,7 +655,7 @@ void resume_print(const float &slow_load_length/*=0*/, const float &fast_load_le if (resume_position.e < 0) do_pause_e_move(resume_position.e, feedRate_t(PAUSE_PARK_RETRACT_FEEDRATE)); // Move XY to starting position, then Z - do_blocking_move_to_xy(xy_pos_t(resume_position), feedRate_t(NOZZLE_PARK_XY_FEEDRATE)); + do_blocking_move_to_xy(resume_position, feedRate_t(NOZZLE_PARK_XY_FEEDRATE)); // Move Z_AXIS to saved position do_blocking_move_to_z(resume_position.z, feedRate_t(NOZZLE_PARK_Z_FEEDRATE)); diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index 9ea2ebe5298a..0da481e4e517 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -113,7 +113,7 @@ FORCE_INLINE signed char pgm_read_any(const signed char *p) { return pgm_read_by #define XYZ_DEFS(T, NAME, OPT) \ extern const XYZval NAME##_P; \ FORCE_INLINE T NAME(AxisEnum axis) { return pgm_read_any(&NAME##_P[axis]); } \ - typedef void __void_##OPT##__ + typedef void __void_##OPT##__ /* for semicolon */ XYZ_DEFS(float, base_min_pos, MIN_POS); XYZ_DEFS(float, base_max_pos, MAX_POS); @@ -200,10 +200,6 @@ inline void prepare_internal_move_to_destination(const feedRate_t &fr_mm_s=0.0f) * Blocking movement and shorthand functions */ void do_blocking_move_to(const float rx, const float ry, const float rz, const feedRate_t &fr_mm_s=0.0f); -void do_blocking_move_to_x(const float &rx, const feedRate_t &fr_mm_s=0.0f); -void do_blocking_move_to_y(const float &ry, const feedRate_t &fr_mm_s=0.0f); -void do_blocking_move_to_z(const float &rz, const feedRate_t &fr_mm_s=0.0f); -void do_blocking_move_to_xy(const float &rx, const float &ry, const feedRate_t &fr_mm_s=0.0f); FORCE_INLINE void do_blocking_move_to(const xy_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) { do_blocking_move_to(raw.x, raw.y, current_position.z, fr_mm_s); @@ -214,9 +210,22 @@ FORCE_INLINE void do_blocking_move_to(const xyz_pos_t &raw, const feedRate_t &fr FORCE_INLINE void do_blocking_move_to(const xyze_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) { do_blocking_move_to(raw.x, raw.y, raw.z, fr_mm_s); } + +void do_blocking_move_to_xy(const float &rx, const float &ry, const feedRate_t &fr_mm_s=0.0f); + FORCE_INLINE void do_blocking_move_to_xy(const xy_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) { do_blocking_move_to_xy(raw.x, raw.y, fr_mm_s); } +FORCE_INLINE void do_blocking_move_to_xy(const xyz_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) { + do_blocking_move_to_xy(raw.x, raw.y, fr_mm_s); +} +FORCE_INLINE void do_blocking_move_to_xy(const xyze_pos_t &raw, const feedRate_t &fr_mm_s=0.0f) { + do_blocking_move_to_xy(raw.x, raw.y, fr_mm_s); +} + +void do_blocking_move_to_x(const float &rx, const feedRate_t &fr_mm_s=0.0f); +void do_blocking_move_to_y(const float &ry, const feedRate_t &fr_mm_s=0.0f); +void do_blocking_move_to_z(const float &rz, const feedRate_t &fr_mm_s=0.0f); void remember_feedrate_and_scaling(); void remember_feedrate_scaling_off(); From 087fe0e9d6cf7ca7e870b6d343494afd558dbf42 Mon Sep 17 00:00:00 2001 From: Marcio Teixeira Date: Mon, 30 Sep 2019 21:15:48 -0600 Subject: [PATCH 109/120] Improve and fix LULZBOT_TOUCH_UI (#15434) - Add start print confirmation dialog box - Fix incorrect text colors in UI - Adjust bio printer UI --- .../lib/lulzbot/language/language_en.h | 11 +-- .../lib/lulzbot/language/languages.h | 26 ------- .../base_numeric_adjustment_screen.cpp | 47 +++++++------ .../lulzbot/screens/bio_confirm_home_e.cpp | 8 ++- .../lulzbot/screens/bio_confirm_home_xyz.cpp | 7 +- .../lib/lulzbot/screens/bio_main_menu.cpp | 32 +++++---- .../lib/lulzbot/screens/bio_status_screen.cpp | 2 +- .../lib/lulzbot/screens/bio_tune_menu.cpp | 22 +++--- .../confirm_start_print_dialog_box.cpp | 70 +++++++++++++++++++ .../lib/lulzbot/screens/files_screen.cpp | 22 +++--- .../lib/lulzbot/screens/screen_data.h | 1 + .../lib/lulzbot/screens/screens.cpp | 1 + .../lib/lulzbot/screens/screens.h | 23 +++++- .../lib/lulzbot/screens/string_format.cpp | 6 -- 14 files changed, 178 insertions(+), 100 deletions(-) delete mode 100644 Marlin/src/lcd/extensible_ui/lib/lulzbot/language/languages.h create mode 100644 Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_start_print_dialog_box.cpp diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h index 67904ceaef39..d9bd63eb358f 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/language_en.h @@ -184,6 +184,7 @@ namespace Language_en { PROGMEM Language_Str ERASING = u8"Erasing..."; PROGMEM Language_Str ERASED = u8"SPI flash erased"; PROGMEM Language_Str CALIBRATION_WARNING = u8"For best results, unload the filament and clean the hotend prior to starting calibration. Continue?"; + PROGMEM Language_Str START_PRINT_CONFIRMATION = u8"Start printing %s?"; PROGMEM Language_Str ABORT_WARNING = u8"Are you sure you want to cancel the print?"; PROGMEM Language_Str EXTRUDER_SELECTION = u8"Extruder Selection"; PROGMEM Language_Str CURRENT_TEMPERATURE = u8"Current Temp"; @@ -222,10 +223,12 @@ namespace Language_en { #ifdef LULZBOT_USE_BIOPRINTER_UI PROGMEM Language_Str MAIN_MENU = u8"Main Menu"; - PROGMEM Language_Str RELEASE_XY_AXIS = u8"Release XY Axis"; - PROGMEM Language_Str LOAD_SYRINGE = u8"Load Syringe"; + PROGMEM Language_Str MOVE_TO_HOME = u8"Move To Home"; + PROGMEM Language_Str RAISE_PLUNGER = u8"Raise Plunger"; + PROGMEM Language_Str RELEASE_XY_AXIS = u8"Release X and Y Axis"; + PROGMEM Language_Str AUTOLEVEL_X_AXIS = u8"Auto-level X Axis"; PROGMEM Language_Str BED_TEMPERATURE = u8"Bed Temperature"; - PROGMEM Language_Str LOADING_WARNING = u8"About to home to loading position. Ensure the top and the bed of the printer are clear.\n\nContinue?"; - PROGMEM Language_Str HOMING_WARNING = u8"About to re-home plunger and auto-level. Remove syringe prior to proceeding.\n\nContinue?"; + PROGMEM Language_Str HOME_XYZ_WARNING = u8"About to move to home position. Ensure the top and the bed of the printer are clear.\n\nContinue?"; + PROGMEM Language_Str HOME_E_WARNING = u8"About to re-home plunger and auto-level. Remove syringe prior to proceeding.\n\nContinue?"; #endif }; // namespace Language_en diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/languages.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/languages.h deleted file mode 100644 index 03edc5515712..000000000000 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/language/languages.h +++ /dev/null @@ -1,26 +0,0 @@ -/*************** - * languages.h * - ***************/ - -/**************************************************************************** - * Written By Marcio Teixeira 2019 - Aleph Objects, Inc. * - * * - * This program is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * To view a copy of the GNU General Public License, go to the following * - * location: . * - ****************************************************************************/ - -#pragma once - -#include "language_en.h" -#include "language_de.h" -#include "language_fr.h" diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp index 480315620cf3..1d4449097c1e 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/base_numeric_adjustment_screen.cpp @@ -85,12 +85,14 @@ void BaseNumericAdjustmentScreen::widgets_t::_button_style(CommandProcessor &cmd default: break; } - const bool rgb_changed = old_colors->rgb != new_colors->rgb; + const bool rgb_changed = (old_colors->rgb != new_colors->rgb) || + (_style == TEXT_LABEL && style != TEXT_LABEL) || + (_style != TEXT_LABEL && style == TEXT_LABEL); const bool grad_changed = old_colors->grad != new_colors->grad; const bool fg_changed = (old_colors->fg != new_colors->fg) || (_style == TEXT_AREA); const bool bg_changed = old_colors->bg != new_colors->bg; - if (rgb_changed) cmd.cmd(COLOR_RGB(new_colors->rgb)); + if (rgb_changed) cmd.cmd(COLOR_RGB(style == TEXT_LABEL ? bg_text_enabled : new_colors->rgb)); if (grad_changed) cmd.gradcolor(new_colors->grad); if (fg_changed) cmd.fgcolor(new_colors->fg); if (bg_changed) cmd.bgcolor(new_colors->bg); @@ -122,6 +124,7 @@ BaseNumericAdjustmentScreen::widgets_t &BaseNumericAdjustmentScreen::widgets_t:: void BaseNumericAdjustmentScreen::widgets_t::heading(progmem_str label) { if (_what & BACKGROUND) { CommandProcessor cmd; + _button_style(cmd, TEXT_LABEL); cmd.font(font_medium) .text( #ifdef TOUCH_UI_PORTRAIT @@ -208,11 +211,12 @@ void BaseNumericAdjustmentScreen::widgets_t::adjuster_sram_val(uint8_t tag, prog CommandProcessor cmd; if (_what & BACKGROUND) { - _button_style(cmd, TEXT_AREA); + _button_style(cmd, TEXT_LABEL); cmd.tag(0) .font(font_small) - .text( BTN_POS(1,_line), BTN_SIZE(4,1), label) - .fgcolor(_color).button( BTN_POS(5,_line), BTN_SIZE(5,1), F(""), OPT_FLAT); + .text( BTN_POS(1,_line), BTN_SIZE(4,1), label); + _button_style(cmd, TEXT_AREA); + cmd.fgcolor(_color).button( BTN_POS(5,_line), BTN_SIZE(5,1), F(""), OPT_FLAT); } cmd.font(font_medium); @@ -267,12 +271,13 @@ void BaseNumericAdjustmentScreen::widgets_t::text_field(uint8_t tag, progmem_str CommandProcessor cmd; if (_what & BACKGROUND) { - _button_style(cmd, TEXT_AREA); + _button_style(cmd, TEXT_LABEL); cmd.enabled(1) .tag(0) .font(font_small) - .text( BTN_POS(1,_line), BTN_SIZE(4,1), label) - .fgcolor(_color) + .text( BTN_POS(1,_line), BTN_SIZE(4,1), label); + _button_style(cmd, TEXT_AREA); + cmd.fgcolor(_color) .tag(tag) .button( BTN_POS(5,_line), BTN_SIZE(9,1), F(""), OPT_FLAT); } @@ -297,14 +302,15 @@ void BaseNumericAdjustmentScreen::widgets_t::toggle(uint8_t tag, progmem_str lab CommandProcessor cmd; if (_what & BACKGROUND) { + _button_style(cmd, TEXT_LABEL); cmd.font(font_small) .text( - #ifdef TOUCH_UI_PORTRAIT - BTN_POS(1, _line), BTN_SIZE( 8,1), - #else - BTN_POS(1, _line), BTN_SIZE(10,1), - #endif - label + #ifdef TOUCH_UI_PORTRAIT + BTN_POS(1, _line), BTN_SIZE( 8,1), + #else + BTN_POS(1, _line), BTN_SIZE(10,1), + #endif + label ); } @@ -314,12 +320,12 @@ void BaseNumericAdjustmentScreen::widgets_t::toggle(uint8_t tag, progmem_str lab .enabled(is_enabled) .font(font_small) .toggle2( - #ifdef TOUCH_UI_PORTRAIT - BTN_POS( 9,_line), BTN_SIZE(5,1), - #else - BTN_POS(10,_line), BTN_SIZE(4,1), - #endif - GET_TEXTF(NO), GET_TEXTF(YES), value + #ifdef TOUCH_UI_PORTRAIT + BTN_POS( 9,_line), BTN_SIZE(5,1), + #else + BTN_POS(10,_line), BTN_SIZE(4,1), + #endif + GET_TEXTF(NO), GET_TEXTF(YES), value ); } @@ -330,6 +336,7 @@ void BaseNumericAdjustmentScreen::widgets_t::home_buttons(uint8_t tag) { CommandProcessor cmd; if (_what & BACKGROUND) { + _button_style(cmd, TEXT_LABEL); cmd.font(font_small) .text(BTN_POS(1, _line), BTN_SIZE(4,1), GET_TEXTF(HOME)); } diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp index ec6b6045e77d..ab4e9e5780c4 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_e.cpp @@ -29,14 +29,18 @@ using namespace FTDI; void BioConfirmHomeE::onRedraw(draw_mode_t) { - drawMessage(GET_TEXTF(HOMING_WARNING)); + drawMessage(GET_TEXTF(HOME_E_WARNING)); drawYesNoButtons(1); } bool BioConfirmHomeE::onTouchEnd(uint8_t tag) { switch (tag) { case 1: - SpinnerDialogBox::enqueueAndWait_P(F(LULZBOT_HOME_E_COMMANDS)); + SpinnerDialogBox::enqueueAndWait_P(F( + "G112\n" + LULZBOT_AXIS_LEVELING_COMMANDS "\n" + LULZBOT_PARK_AND_RELEASE_COMMANDS + )); current_screen.forget(); break; case 2: diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp index 71fc02bd1491..e1fa9793c006 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_confirm_home_xyz.cpp @@ -29,14 +29,17 @@ using namespace FTDI; void BioConfirmHomeXYZ::onRedraw(draw_mode_t) { - drawMessage(GET_TEXTF(LOADING_WARNING)); + drawMessage(GET_TEXTF(HOME_XYZ_WARNING)); drawYesNoButtons(1); } bool BioConfirmHomeXYZ::onTouchEnd(uint8_t tag) { switch (tag) { case 1: - SpinnerDialogBox::enqueueAndWait_P(F(LULZBOT_HOME_XYZ_COMMANDS)); + SpinnerDialogBox::enqueueAndWait_P(F( + "G28\n" + LULZBOT_PARK_AND_RELEASE_COMMANDS + )); current_screen.forget(); break; case 2: diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp index 403376a18022..3a2c654ccd22 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_main_menu.cpp @@ -30,7 +30,7 @@ using namespace FTDI; using namespace Theme; void MainMenu::onRedraw(draw_mode_t what) { - #define GRID_ROWS 8 + #define GRID_ROWS 10 #define GRID_COLS 2 if (what & BACKGROUND) { @@ -45,14 +45,16 @@ void MainMenu::onRedraw(draw_mode_t what) { .font(font_large).text( BTN_POS(1,1), BTN_SIZE(2,1), GET_TEXTF(MAIN_MENU)) .colors(normal_btn) .font(font_medium) - .tag(2).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(LOAD_SYRINGE)) - .tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(RELEASE_XY_AXIS)) - .tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(BED_TEMPERATURE)) - .tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(INTERFACE_SETTINGS)) - .tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(ADVANCED_SETTINGS)) - .tag(7).button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(ABOUT_PRINTER)) + .tag(2).button( BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXTF(MOVE_TO_HOME)) + .tag(3).button( BTN_POS(1,3), BTN_SIZE(2,1), GET_TEXTF(RAISE_PLUNGER)) + .tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(RELEASE_XY_AXIS)) + .tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(AUTOLEVEL_X_AXIS)) + .tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(BED_TEMPERATURE)) + .tag(7).button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(INTERFACE_SETTINGS)) + .tag(8).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(ADVANCED_SETTINGS)) + .tag(9).button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXTF(ABOUT_PRINTER)) .colors(action_btn) - .tag(1).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(BACK)); + .tag(1).button( BTN_POS(1,10), BTN_SIZE(2,1), GET_TEXTF(BACK)); } #undef GRID_COLS @@ -62,14 +64,18 @@ void MainMenu::onRedraw(draw_mode_t what) { bool MainMenu::onTouchEnd(uint8_t tag) { using namespace ExtUI; + const bool e_homed = isAxisPositionKnown(E0); + switch (tag) { case 1: SaveSettingsDialogBox::promptToSaveSettings(); break; case 2: GOTO_SCREEN(BioConfirmHomeXYZ); break; - case 3: StatusScreen::unlockMotors(); break; - case 4: GOTO_SCREEN(TemperatureScreen); break; - case 5: GOTO_SCREEN(InterfaceSettingsScreen); break; - case 6: GOTO_SCREEN(AdvancedSettingsMenu); break; - case 7: GOTO_SCREEN(AboutScreen); break; + case 3: SpinnerDialogBox::enqueueAndWait_P(e_homed ? F("G0 E0 F120") : F("G112")); break; + case 4: StatusScreen::unlockMotors(); break; + case 5: SpinnerDialogBox::enqueueAndWait_P(F(LULZBOT_AXIS_LEVELING_COMMANDS)); break; + case 6: GOTO_SCREEN(TemperatureScreen); break; + case 7: GOTO_SCREEN(InterfaceSettingsScreen); break; + case 8: GOTO_SCREEN(AdvancedSettingsMenu); break; + case 9: GOTO_SCREEN(AboutScreen); break; default: return false; } diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp index 1efce50a1678..6c8fb384b7c3 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_status_screen.cpp @@ -275,7 +275,7 @@ bool StatusScreen::onTouchEnd(uint8_t tag) { break; case 9: GOTO_SCREEN(FilesScreen); break; case 10: GOTO_SCREEN(MainMenu); break; - case 13: SpinnerDialogBox::enqueueAndWait_P(F("G112")); break; + case 13: GOTO_SCREEN(BioConfirmHomeE); break; case 14: SpinnerDialogBox::enqueueAndWait_P(F("G28 Z")); break; case 15: GOTO_SCREEN(TemperatureScreen); break; case 16: fine_motion = !fine_motion; break; diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp index 2b22876970a3..04c50597f36c 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/bio_tune_menu.cpp @@ -38,7 +38,7 @@ void TuneMenu::onRedraw(draw_mode_t what) { .font(font_medium); } - #define GRID_ROWS 7 + #define GRID_ROWS 8 #define GRID_COLS 2 if (what & FOREGROUND) { @@ -55,9 +55,10 @@ void TuneMenu::onRedraw(draw_mode_t what) { .enabled(false) #endif .tag(4).button( BTN_POS(1,4), BTN_SIZE(2,1), GET_TEXTF(NUDGE_NOZZLE)) - .enabled(!isPrinting()).tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(LOAD_SYRINGE)) - .enabled(!isPrinting()).tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(RELEASE_XY_AXIS)) - .colors(action_btn) .tag(1).button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(BACK)); + .enabled(!isPrinting()).tag(5).button( BTN_POS(1,5), BTN_SIZE(2,1), GET_TEXTF(MOVE_TO_HOME)) + .enabled(!isPrinting()).tag(6).button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXTF(RAISE_PLUNGER)) + .enabled(!isPrinting()).tag(7).button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXTF(RELEASE_XY_AXIS)) + .colors(action_btn) .tag(1).button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXTF(BACK)); } #undef GRID_COLS #undef GRID_ROWS @@ -65,12 +66,13 @@ void TuneMenu::onRedraw(draw_mode_t what) { bool TuneMenu::onTouchEnd(uint8_t tag) { switch (tag) { - case 1: GOTO_PREVIOUS(); break; - case 2: GOTO_SCREEN(FeedratePercentScreen); break; - case 3: GOTO_SCREEN(TemperatureScreen); break; - case 4: GOTO_SCREEN(NudgeNozzleScreen); break; - case 5: GOTO_SCREEN(BioConfirmHomeXYZ); break; - case 6: StatusScreen::unlockMotors(); break; + case 1: GOTO_PREVIOUS(); break; + case 2: GOTO_SCREEN(FeedratePercentScreen); break; + case 3: GOTO_SCREEN(TemperatureScreen); break; + case 4: GOTO_SCREEN(NudgeNozzleScreen); break; + case 5: GOTO_SCREEN(BioConfirmHomeXYZ); break; + case 6: SpinnerDialogBox::enqueueAndWait_P(F("G0 E0 F120")); break; + case 7: StatusScreen::unlockMotors(); break; default: return false; } diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_start_print_dialog_box.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_start_print_dialog_box.cpp new file mode 100644 index 000000000000..653d988b0cc5 --- /dev/null +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/confirm_start_print_dialog_box.cpp @@ -0,0 +1,70 @@ +/************************************** + * confirm_start_print_dialog_box.cpp * + **************************************/ + +/**************************************************************************** + * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * + * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * To view a copy of the GNU General Public License, go to the following * + * location: . * + ****************************************************************************/ + +#include "../config.h" + +#if ENABLED(LULZBOT_TOUCH_UI) + +#include "screens.h" +#include "screen_data.h" + +using namespace FTDI; +using namespace Theme; +using namespace ExtUI; + +void ConfirmStartPrintDialogBox::onEntry() { + BaseScreen::onEntry(); + sound.play(twinkle, PLAY_ASYNCHRONOUS); +} + +void ConfirmStartPrintDialogBox::onRedraw(draw_mode_t) { + const char *filename = getLongFilename(); + char buffer[strlen_P(GET_TEXT(START_PRINT_CONFIRMATION)) + strlen(filename) + 1]; + sprintf_P(buffer, GET_TEXT(START_PRINT_CONFIRMATION), filename); + drawMessage((const char *)buffer); + drawYesNoButtons(1); +} + +bool ConfirmStartPrintDialogBox::onTouchEnd(uint8_t tag) { + switch (tag) { + case 1: + printFile(getShortFilename()); + StatusScreen::setStatusMessage(GET_TEXTF(PRINT_STARTING)); + GOTO_SCREEN(StatusScreen); + return true; + case 2: GOTO_PREVIOUS(); return true; + default: return false; + } +} + +const char *ConfirmStartPrintDialogBox::getFilename(bool longName) { + FileList files; + files.seek(screen_data.ConfirmStartPrintDialogBox.file_index, true); + return longName ? files.longFilename() : files.shortFilename(); +} + +void ConfirmStartPrintDialogBox::show(uint8_t file_index) { + screen_data.ConfirmStartPrintDialogBox.file_index = file_index; + GOTO_SCREEN(ConfirmStartPrintDialogBox); +} + +#endif // LULZBOT_TOUCH_UI diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/files_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/files_screen.cpp index f562573bfdcb..db2067cbe778 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/files_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/files_screen.cpp @@ -41,21 +41,15 @@ void FilesScreen::onEntry() { BaseScreen::onEntry(); } -const char *FilesScreen::getSelectedShortFilename() { +const char *FilesScreen::getSelectedFilename(bool longName) { FileList files; - files.seek(getFileForTag(screen_data.FilesScreen.selected_tag), true); - return files.shortFilename(); -} - -const char *FilesScreen::getSelectedLongFilename() { - FileList files; - files.seek(getFileForTag(screen_data.FilesScreen.selected_tag), true); - return files.longFilename(); + files.seek(getSelectedFileIndex(), true); + return longName ? files.longFilename() : files.shortFilename(); } void FilesScreen::drawSelectedFile() { FileList files; - files.seek(getFileForTag(screen_data.FilesScreen.selected_tag), true); + files.seek(getSelectedFileIndex(), true); screen_data.FilesScreen.flags.is_dir = files.isDir(); drawFileButton( files.filename(), @@ -65,6 +59,10 @@ void FilesScreen::drawSelectedFile() { ); } +uint16_t FilesScreen::getSelectedFileIndex() { + return getFileForTag(screen_data.FilesScreen.selected_tag); +} + uint16_t FilesScreen::getFileForTag(uint8_t tag) { return screen_data.FilesScreen.cur_page * files_per_page + tag - 2; } @@ -213,9 +211,7 @@ bool FilesScreen::onTouchEnd(uint8_t tag) { } break; case 243: - printFile(getSelectedShortFilename()); - StatusScreen::setStatusMessage(GET_TEXTF(PRINT_STARTING)); - GOTO_SCREEN(StatusScreen); + ConfirmStartPrintDialogBox::show(getSelectedFileIndex()); return true; case 244: { diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screen_data.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screen_data.h index adaccc8e5ae2..65d6889a6ada 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screen_data.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screen_data.h @@ -35,6 +35,7 @@ union screen_data_t { struct {char passcode[5];} LockScreen; struct {bool isError;} AlertDialogBox; struct {bool auto_hide;} SpinnerDialogBox; + struct {uint8_t file_index;} ConfirmStartPrintDialogBox; struct { uint8_t e_tag, t_tag, repeat_tag; ExtUI::extruder_t saved_extruder; diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp index 59d4069d6cfc..338ec71827f3 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.cpp @@ -43,6 +43,7 @@ SCREEN_TABLE { DECL_SCREEN(ConfirmUserRequestAlertBox), DECL_SCREEN(RestoreFailsafeDialogBox), DECL_SCREEN(SaveSettingsDialogBox), + DECL_SCREEN(ConfirmStartPrintDialogBox), DECL_SCREEN(ConfirmAbortPrintDialogBox), #if ENABLED(CALIBRATION_GCODE) DECL_SCREEN(ConfirmAutoCalibrationDialogBox), diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h index 20a1809014d2..20bb5eb76ed0 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/screens.h @@ -179,6 +179,20 @@ class SaveSettingsDialogBox : public DialogBoxBaseClass, public UncachedScreen { static void settingsChanged() {needs_save = true;} }; +class ConfirmStartPrintDialogBox : public DialogBoxBaseClass, public UncachedScreen { + private: + inline static const char *getShortFilename() {return getFilename(false);} + inline static const char *getLongFilename() {return getFilename(true);} + + static const char *getFilename(bool longName); + public: + static void onEntry(); + static void onRedraw(draw_mode_t); + static bool onTouchEnd(uint8_t); + + static void show(uint8_t file_index); +}; + class ConfirmAbortPrintDialogBox : public DialogBoxBaseClass, public UncachedScreen { public: static void onRedraw(draw_mode_t); @@ -360,7 +374,8 @@ class BaseNumericAdjustmentScreen : public BaseScreen { BTN_ACTION, BTN_TOGGLE, BTN_DISABLED, - TEXT_AREA + TEXT_AREA, + TEXT_LABEL } _style; protected: @@ -637,9 +652,11 @@ class FilesScreen : public BaseScreen, public CachedScreen Date: Tue, 1 Oct 2019 06:19:12 +0300 Subject: [PATCH 110/120] Use MAX_BED_POWER instead of BANG_MAX to heat outside PID_FUNCTIONAL_RANGE (#15431) --- Marlin/src/module/temperature.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 47942441f614..79825ec5188f 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -943,7 +943,7 @@ void Temperature::min_temp_error(const heater_ind_t heater) { pid_reset = true; } else if (pid_error > PID_FUNCTIONAL_RANGE) { - pid_output = BANG_MAX; + pid_output = MAX_BED_POWER; pid_reset = true; } else { From e3ff27c95a8be758afba5e0f44668f1d1fc1ad0f Mon Sep 17 00:00:00 2001 From: Marcio Teixeira Date: Mon, 30 Sep 2019 21:53:34 -0600 Subject: [PATCH 111/120] Prevent duplication of PSTRs to save memory (#15435) --- Marlin/src/lcd/menu/menu.cpp | 2 +- Marlin/src/lcd/menu/menu.h | 35 +++++++++++++++--------------- Marlin/src/lcd/menu/menu_media.cpp | 6 ++--- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/Marlin/src/lcd/menu/menu.cpp b/Marlin/src/lcd/menu/menu.cpp index ca5dd29a2456..69144fd64c66 100644 --- a/Marlin/src/lcd/menu/menu.cpp +++ b/Marlin/src/lcd/menu/menu.cpp @@ -112,7 +112,7 @@ void MarlinUI::goto_previous_screen( /////////// Common Menu Actions //////////// //////////////////////////////////////////// -void MenuItem_gcode::action(PGM_P const pgcode) { queue.inject_P(pgcode); } +void MenuItem_gcode::action(PGM_P const, PGM_P const pgcode) { queue.inject_P(pgcode); } //////////////////////////////////////////// /////////// Menu Editing Actions /////////// diff --git a/Marlin/src/lcd/menu/menu.h b/Marlin/src/lcd/menu/menu.h index e34b8b18f8ea..8229aec2030c 100644 --- a/Marlin/src/lcd/menu/menu.h +++ b/Marlin/src/lcd/menu/menu.h @@ -111,8 +111,7 @@ FORCE_INLINE void draw_menu_item_edit_P(const bool sel, const uint8_t row, PGM_P //////////////////////////////////////////// #define _DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(TYPE, NAME, STRFUNC) \ - FORCE_INLINE void draw_menu_item_edit_##NAME (const bool sel, const uint8_t row, PGM_P const pstr, PGM_P const pstr2, TYPE * const data, ...) { \ - UNUSED(pstr2); \ + FORCE_INLINE void draw_menu_item_edit_##NAME (const bool sel, const uint8_t row, PGM_P const pstr, TYPE * const data, ...) { \ DRAW_MENU_ITEM_SETTING_EDIT_GENERIC(STRFUNC(*(data))); \ } \ FORCE_INLINE void draw_menu_item_edit_accessor_##NAME (const bool sel, const uint8_t row, PGM_P const pstr, PGM_P const pstr2, TYPE (*pget)(), void (*pset)(TYPE), ...) { \ @@ -141,8 +140,8 @@ DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float52sign); // +123.45 DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(long5); // 12345 right-justified DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(long5_25); // 12345 right-justified (25 increment) -#define draw_menu_item_edit_bool(sel, row, pstr, pstr2, data, ...) DRAW_BOOL_SETTING(sel, row, pstr, data) -#define draw_menu_item_edit_accessor_bool(sel, row, pstr, pstr2, pget, pset) DRAW_BOOL_SETTING(sel, row, pstr, data) +#define draw_menu_item_edit_bool(sel, row, pstr, data, ...) DRAW_BOOL_SETTING(sel, row, pstr, data) +#define draw_menu_item_edit_accessor_bool(sel, row, pstr, pget, pset) DRAW_BOOL_SETTING(sel, row, pstr, data) //////////////////////////////////////////// /////////////// Menu Actions /////////////// @@ -150,28 +149,29 @@ DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(long5_25); // 12345 right-justif class MenuItem_back { public: - static inline void action() { + static inline void action(PGM_P const dummy=nullptr) { ui.goto_previous_screen( #if ENABLED(TURBO_BACK_MENU_ITEM) true #endif ); + UNUSED(dummy); } }; class MenuItem_submenu { public: - static inline void action(const screenFunc_t func) { ui.save_previous_screen(); ui.goto_screen(func); } + static inline void action(PGM_P const, const screenFunc_t func) { ui.save_previous_screen(); ui.goto_screen(func); } }; class MenuItem_gcode { public: - static void action(const char * const pgcode); + static void action(PGM_P const, const char * const pgcode); }; class MenuItem_function { public: - static inline void action(const menuAction_t func) { (*func)(); }; + static inline void action(PGM_P const, const menuAction_t func) { (*func)(); }; }; //////////////////////////////////////////// @@ -306,20 +306,21 @@ class MenuItem_bool { * MenuItem_function::action(lcd_sdcard_pause) * * MENU_ITEM_EDIT(int3, MSG_SPEED, &feedrate_percentage, 10, 999) - * draw_menu_item_edit_int3(sel, row, PSTR(MSG_SPEED), PSTR(MSG_SPEED), &feedrate_percentage, 10, 999) + * draw_menu_item_edit_int3(sel, row, PSTR(MSG_SPEED), &feedrate_percentage, 10, 999) * MenuItem_int3::action_edit(PSTR(MSG_SPEED), &feedrate_percentage, 10, 999) * */ #define _MENU_ITEM_VARIANT_P(TYPE, VARIANT, USE_MULTIPLIER, PLABEL, V...) do { \ _skipStatic = false; \ if (_menuLineNr == _thisItemNr) { \ + PGM_P const plabel = PLABEL; \ if (encoderLine == _thisItemNr && ui.use_click()) { \ _MENU_ITEM_MULTIPLIER_CHECK(USE_MULTIPLIER); \ - MenuItem_##TYPE ::action ## VARIANT(V); \ + MenuItem_##TYPE ::action ## VARIANT(plabel, ##V); \ if (screen_changed) return; \ } \ if (ui.should_draw()) \ - draw_menu_item ## VARIANT ## _ ## TYPE(encoderLine == _thisItemNr, _lcdLineNr, PLABEL, ##V); \ + draw_menu_item ## VARIANT ## _ ## TYPE(encoderLine == _thisItemNr, _lcdLineNr, plabel, ##V); \ } \ ++_thisItemNr; \ }while(0) @@ -348,12 +349,12 @@ class MenuItem_bool { #define MENU_BACK(LABEL) MENU_ITEM(back, LABEL) #define MENU_ITEM_DUMMY() do { _thisItemNr++; }while(0) -#define MENU_ITEM_P(TYPE, PLABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, , false, PLABEL, ##V) -#define MENU_ITEM(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, , false, PSTR(LABEL), ##V) -#define MENU_ITEM_EDIT(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, false, PSTR(LABEL), PSTR(LABEL), ##V) -#define MENU_ITEM_EDIT_CALLBACK(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, false, PSTR(LABEL), PSTR(LABEL), ##V) -#define MENU_MULTIPLIER_ITEM_EDIT(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, true, PSTR(LABEL), PSTR(LABEL), ##V) -#define MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, true, PSTR(LABEL), PSTR(LABEL), ##V) +#define MENU_ITEM_P(TYPE, PLABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, , false, PLABEL, ##V) +#define MENU_ITEM(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, , false, PSTR(LABEL), ##V) +#define MENU_ITEM_EDIT(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, false, PSTR(LABEL), ##V) +#define MENU_ITEM_EDIT_CALLBACK(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, false, PSTR(LABEL), ##V) +#define MENU_MULTIPLIER_ITEM_EDIT(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, true, PSTR(LABEL), ##V) +#define MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(TYPE, LABEL, V...) _MENU_ITEM_VARIANT_P(TYPE, _edit, true, PSTR(LABEL), ##V) //////////////////////////////////////////// /////////////// Menu Screens /////////////// diff --git a/Marlin/src/lcd/menu/menu_media.cpp b/Marlin/src/lcd/menu/menu_media.cpp index 6a922acdc2a0..0b97918edb3f 100644 --- a/Marlin/src/lcd/menu/menu_media.cpp +++ b/Marlin/src/lcd/menu/menu_media.cpp @@ -97,7 +97,7 @@ inline void sdcard_start_selected_file() { class MenuItem_sdfile { public: - static void action(CardReader &) { + static void action(PGM_P const pstr, CardReader &) { #if ENABLED(SD_REPRINT_LAST_SELECTED_FILE) // Save menu state for the selected file sd_encoder_position = ui.encoderPosition; @@ -105,7 +105,7 @@ class MenuItem_sdfile { sd_items = screen_items; #endif #if ENABLED(SD_MENU_CONFIRM_START) - MenuItem_submenu::action(menu_sd_confirm); + MenuItem_submenu::action(pstr, menu_sd_confirm); #else sdcard_start_selected_file(); #endif @@ -114,7 +114,7 @@ class MenuItem_sdfile { class MenuItem_sdfolder { public: - static void action(CardReader &theCard) { + static void action(PGM_P const, CardReader &theCard) { card.cd(theCard.filename); encoderTopLine = 0; ui.encoderPosition = 2 * (ENCODER_STEPS_PER_MENU_ITEM); From e3fd0519b323182a3d096eca8209c4eaf56b6802 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 30 Sep 2019 21:44:07 -0500 Subject: [PATCH 112/120] Reduce need for UNUSED --- Marlin/src/HAL/HAL_AVR/HAL.h | 3 +- Marlin/src/HAL/HAL_AVR/HAL_SPI.cpp | 9 +-- Marlin/src/HAL/HAL_DUE/HAL_SPI.cpp | 3 +- Marlin/src/HAL/HAL_DUE/MarlinSerialUSB.cpp | 7 +- Marlin/src/HAL/HAL_DUE/usb/sd_mmc_spi_mem.cpp | 13 +--- Marlin/src/HAL/HAL_ESP32/watchdog.h | 2 +- Marlin/src/HAL/HAL_LINUX/HAL.h | 2 +- Marlin/src/HAL/HAL_LINUX/include/serial.h | 4 +- Marlin/src/HAL/HAL_LPC1768/MarlinSerial.h | 2 +- Marlin/src/HAL/HAL_STM32/HAL.cpp | 14 +--- Marlin/src/HAL/HAL_STM32_F4_F7/HAL.h | 2 +- Marlin/src/HAL/HAL_TEENSY31_32/HAL.h | 2 +- Marlin/src/HAL/HAL_TEENSY35_36/HAL.h | 2 +- Marlin/src/HAL/shared/Delay.h | 2 +- Marlin/src/feature/Max7219_Debug_LEDs.h | 2 +- Marlin/src/feature/leds/pca9632.cpp | 3 +- Marlin/src/feature/power_loss_recovery.h | 2 +- Marlin/src/feature/runout.h | 6 +- Marlin/src/feature/spindle_laser.h | 2 +- Marlin/src/gcode/parser.h | 6 +- Marlin/src/lcd/menu/menu.h | 6 +- Marlin/src/lcd/menu/menu_media.cpp | 1 + Marlin/src/lcd/ultralcd.h | 10 +-- Marlin/src/module/configuration_store.h | 2 +- Marlin/src/module/motion.h | 12 +-- Marlin/src/module/planner.h | 7 +- Marlin/src/module/stepper.h | 2 +- Marlin/src/module/temperature.cpp | 29 +++---- Marlin/src/module/temperature.h | 76 ++++++++----------- .../sd/usb_flashdrive/Sd2Card_FlashDrive.h | 12 +-- .../sd/usb_flashdrive/lib-uhs2/parsetools.h | 2 +- 31 files changed, 104 insertions(+), 143 deletions(-) diff --git a/Marlin/src/HAL/HAL_AVR/HAL.h b/Marlin/src/HAL/HAL_AVR/HAL.h index 9c34dc1f543b..246353677fff 100644 --- a/Marlin/src/HAL/HAL_AVR/HAL.h +++ b/Marlin/src/HAL/HAL_AVR/HAL.h @@ -146,8 +146,7 @@ extern "C" { #define DISABLE_TEMPERATURE_INTERRUPT() CBI(TIMSK0, OCIE0B) #define TEMPERATURE_ISR_ENABLED() TEST(TIMSK0, OCIE0B) -FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) { - UNUSED(frequency); +FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) { switch (timer_num) { case STEP_TIMER_NUM: // waveform generation = 0100 = CTC diff --git a/Marlin/src/HAL/HAL_AVR/HAL_SPI.cpp b/Marlin/src/HAL/HAL_AVR/HAL_SPI.cpp index 68e21aae537f..7a0f7246ee13 100644 --- a/Marlin/src/HAL/HAL_AVR/HAL_SPI.cpp +++ b/Marlin/src/HAL/HAL_AVR/HAL_SPI.cpp @@ -184,15 +184,10 @@ void spiBegin() { // nop to tune soft SPI timing #define nop asm volatile ("\tnop\n") - // Set SPI rate - void spiInit(uint8_t spiRate) { - UNUSED(spiRate); // nothing to do - } + void spiInit(uint8_t) { /* do nothing */ } // Begin SPI transaction, set clock, bit order, data mode - void spiBeginTransaction(uint32_t spiClock, uint8_t bitOrder, uint8_t dataMode) { - UNUSED(spiBeginTransaction); // nothing to do - } + void spiBeginTransaction(uint32_t spiClock, uint8_t bitOrder, uint8_t dataMode) { /* do nothing */ } // Soft SPI receive byte uint8_t spiRec() { diff --git a/Marlin/src/HAL/HAL_DUE/HAL_SPI.cpp b/Marlin/src/HAL/HAL_DUE/HAL_SPI.cpp index f942ff808287..35763a5ec713 100644 --- a/Marlin/src/HAL/HAL_DUE/HAL_SPI.cpp +++ b/Marlin/src/HAL/HAL_DUE/HAL_SPI.cpp @@ -151,13 +151,12 @@ (((uint32_t)(addr) & 0xF0000000) + 0x02000000 + ((uint32_t)(addr)&0xFFFFF)*32 + (bit)*4) // run at ~8 .. ~10Mhz - Rx version (Tx line not altered) - static uint8_t spiTransferRx0(uint8_t bout) { // using Mode 0 + static uint8_t spiTransferRx0(uint8_t) { // using Mode 0 uint32_t bin = 0; uint32_t work = 0; uint32_t BITBAND_MISO_PORT = BITBAND_ADDRESS( ((uint32_t)PORT(MISO_PIN))+0x3C, PIN_SHIFT(MISO_PIN)); /* PDSR of port in bitband area */ uint32_t SCK_PORT_PLUS30 = ((uint32_t) PORT(SCK_PIN)) + 0x30; /* SODR of port */ uint32_t SCK_MASK = PIN_MASK(SCK_PIN); - UNUSED(bout); /* The software SPI routine */ __asm__ __volatile__( diff --git a/Marlin/src/HAL/HAL_DUE/MarlinSerialUSB.cpp b/Marlin/src/HAL/HAL_DUE/MarlinSerialUSB.cpp index 1bce07e53f04..f7f48d5f4246 100644 --- a/Marlin/src/HAL/HAL_DUE/MarlinSerialUSB.cpp +++ b/Marlin/src/HAL/HAL_DUE/MarlinSerialUSB.cpp @@ -55,12 +55,9 @@ static int pending_char = -1; #endif // Public Methods -void MarlinSerialUSB::begin(const long baud_setting) { - UNUSED(baud_setting); -} +void MarlinSerialUSB::begin(const long) {} -void MarlinSerialUSB::end() { -} +void MarlinSerialUSB::end() {} int MarlinSerialUSB::peek() { if (pending_char >= 0) diff --git a/Marlin/src/HAL/HAL_DUE/usb/sd_mmc_spi_mem.cpp b/Marlin/src/HAL/HAL_DUE/usb/sd_mmc_spi_mem.cpp index 7699f2724f7b..b85a2b09a154 100644 --- a/Marlin/src/HAL/HAL_DUE/usb/sd_mmc_spi_mem.cpp +++ b/Marlin/src/HAL/HAL_DUE/usb/sd_mmc_spi_mem.cpp @@ -33,19 +33,12 @@ Ctrl_status sd_mmc_spi_read_capacity(uint32_t *nb_sector) { return CTRL_GOOD; } -bool sd_mmc_spi_unload(bool unload) { - UNUSED(unload); - return true; -} +bool sd_mmc_spi_unload(bool) { return true; } -bool sd_mmc_spi_wr_protect() { - return false; -} +bool sd_mmc_spi_wr_protect() { return false; } bool sd_mmc_spi_removal() { - if (!IS_SD_INSERTED() || IS_SD_PRINTING() || IS_SD_FILE_OPEN() || !card.isMounted()) - return true; - return false; + return (!IS_SD_INSERTED() || IS_SD_PRINTING() || IS_SD_FILE_OPEN() || !card.isMounted()); } #if ACCESS_USB == true diff --git a/Marlin/src/HAL/HAL_ESP32/watchdog.h b/Marlin/src/HAL/HAL_ESP32/watchdog.h index e1ec9fbf5408..6647ecefe660 100644 --- a/Marlin/src/HAL/HAL_ESP32/watchdog.h +++ b/Marlin/src/HAL/HAL_ESP32/watchdog.h @@ -25,4 +25,4 @@ void watchdog_init(); // Reset watchdog. -inline void HAL_watchdog_refresh() { } +inline void HAL_watchdog_refresh() {} diff --git a/Marlin/src/HAL/HAL_LINUX/HAL.h b/Marlin/src/HAL/HAL_LINUX/HAL.h index 8f368a150789..5bd283e5c1a6 100644 --- a/Marlin/src/HAL/HAL_LINUX/HAL.h +++ b/Marlin/src/HAL/HAL_LINUX/HAL.h @@ -78,7 +78,7 @@ extern HalSerial usb_serial; #define ENABLE_ISRS() #define DISABLE_ISRS() -inline void HAL_init() { } +inline void HAL_init() {} // Utility functions #pragma GCC diagnostic push diff --git a/Marlin/src/HAL/HAL_LINUX/include/serial.h b/Marlin/src/HAL/HAL_LINUX/include/serial.h index 268bdeeeca00..c6da82ad5a3f 100644 --- a/Marlin/src/HAL/HAL_LINUX/include/serial.h +++ b/Marlin/src/HAL/HAL_LINUX/include/serial.h @@ -83,9 +83,9 @@ class HalSerial { HalSerial() { host_connected = true; } - void begin(int32_t baud) { } + void begin(int32_t) {} - void end() { } + void end() {} int peek() { uint8_t value; diff --git a/Marlin/src/HAL/HAL_LPC1768/MarlinSerial.h b/Marlin/src/HAL/HAL_LPC1768/MarlinSerial.h index 1f282f64a3f2..80506855384b 100644 --- a/Marlin/src/HAL/HAL_LPC1768/MarlinSerial.h +++ b/Marlin/src/HAL/HAL_LPC1768/MarlinSerial.h @@ -49,7 +49,7 @@ class MarlinSerial : public HardwareSerial { { } - void end() { } + void end() {} #if ENABLED(EMERGENCY_PARSER) bool recv_callback(const char c) override { diff --git a/Marlin/src/HAL/HAL_STM32/HAL.cpp b/Marlin/src/HAL/HAL_STM32/HAL.cpp index 6ecde3ef35e2..edc161a5d387 100644 --- a/Marlin/src/HAL/HAL_STM32/HAL.cpp +++ b/Marlin/src/HAL/HAL_STM32/HAL.cpp @@ -104,17 +104,11 @@ extern "C" { // ADC // ------------------------ -void HAL_adc_start_conversion(const uint8_t adc_pin) { - HAL_adc_result = analogRead(adc_pin); -} +// TODO: Make sure this doesn't cause any delay +void HAL_adc_start_conversion(const uint8_t adc_pin) { HAL_adc_result = analogRead(adc_pin); } -uint16_t HAL_adc_get_result() { - return HAL_adc_result; -} +uint16_t HAL_adc_get_result() { return HAL_adc_result; } -void flashFirmware(int16_t value) { - UNUSED(value); - NVIC_SystemReset(); -} +void flashFirmware(int16_t) { NVIC_SystemReset(); } #endif // ARDUINO_ARCH_STM32 && !STM32GENERIC diff --git a/Marlin/src/HAL/HAL_STM32_F4_F7/HAL.h b/Marlin/src/HAL/HAL_STM32_F4_F7/HAL.h index 1effe2d7524f..d4ca01e02264 100644 --- a/Marlin/src/HAL/HAL_STM32_F4_F7/HAL.h +++ b/Marlin/src/HAL/HAL_STM32_F4_F7/HAL.h @@ -150,7 +150,7 @@ extern uint16_t HAL_adc_result; // Memory related #define __bss_end __bss_end__ -inline void HAL_init() { } +inline void HAL_init() {} // Clear reset reason void HAL_clear_reset_source(); diff --git a/Marlin/src/HAL/HAL_TEENSY31_32/HAL.h b/Marlin/src/HAL/HAL_TEENSY31_32/HAL.h index 4813d60d6906..e2df8df86b51 100644 --- a/Marlin/src/HAL/HAL_TEENSY31_32/HAL.h +++ b/Marlin/src/HAL/HAL_TEENSY31_32/HAL.h @@ -87,7 +87,7 @@ typedef int8_t pin_t; #undef pgm_read_word #define pgm_read_word(addr) (*((uint16_t*)(addr))) -inline void HAL_init() { } +inline void HAL_init() {} // Clear the reset reason void HAL_clear_reset_source(); diff --git a/Marlin/src/HAL/HAL_TEENSY35_36/HAL.h b/Marlin/src/HAL/HAL_TEENSY35_36/HAL.h index e218174ad3d2..9fc4ff663372 100644 --- a/Marlin/src/HAL/HAL_TEENSY35_36/HAL.h +++ b/Marlin/src/HAL/HAL_TEENSY35_36/HAL.h @@ -93,7 +93,7 @@ typedef int8_t pin_t; #undef pgm_read_word #define pgm_read_word(addr) (*((uint16_t*)(addr))) -inline void HAL_init() { } +inline void HAL_init() {} // Clear reset reason void HAL_clear_reset_source(); diff --git a/Marlin/src/HAL/shared/Delay.h b/Marlin/src/HAL/shared/Delay.h index 1c2ee47c29e7..b3f8f246fbcb 100644 --- a/Marlin/src/HAL/shared/Delay.h +++ b/Marlin/src/HAL/shared/Delay.h @@ -53,7 +53,7 @@ FORCE_INLINE static void DELAY_CYCLES(const uint32_t x) { const uint32_t endCycles = getCycleCount() + x; - while (PENDING(getCycleCount(), endCycles)) { } + while (PENDING(getCycleCount(), endCycles)) {} } #else diff --git a/Marlin/src/feature/Max7219_Debug_LEDs.h b/Marlin/src/feature/Max7219_Debug_LEDs.h index 02f7c1888bb8..9462fb23d9af 100644 --- a/Marlin/src/feature/Max7219_Debug_LEDs.h +++ b/Marlin/src/feature/Max7219_Debug_LEDs.h @@ -75,7 +75,7 @@ class Max7219 { public: static uint8_t led_line[MAX7219_LINES]; - Max7219() { } + Max7219() {} static void init(); static void register_setup(); diff --git a/Marlin/src/feature/leds/pca9632.cpp b/Marlin/src/feature/leds/pca9632.cpp index 87589a9bcd73..fc0da10f708d 100644 --- a/Marlin/src/feature/leds/pca9632.cpp +++ b/Marlin/src/feature/leds/pca9632.cpp @@ -138,8 +138,7 @@ void pca9632_set_led_color(const LEDColor &color) { #if ENABLED(PCA9632_BUZZER) - void pca9632_buzz(const long duration, const uint16_t freq) { - UNUSED(duration); UNUSED(freq); + void pca9632_buzz(const long, const uint16_t) { uint8_t data[] = PCA9632_BUZZER_DATA; Wire.beginTransmission(I2C_ADDRESS(PCA9632_ADDRESS)); Wire.write(data, sizeof(data)); diff --git a/Marlin/src/feature/power_loss_recovery.h b/Marlin/src/feature/power_loss_recovery.h index c02d5d34cca7..9f947701e30e 100644 --- a/Marlin/src/feature/power_loss_recovery.h +++ b/Marlin/src/feature/power_loss_recovery.h @@ -169,7 +169,7 @@ class PrintJobRecovery { #if ENABLED(DEBUG_POWER_LOSS_RECOVERY) static void debug(PGM_P const prefix); #else - static inline void debug(PGM_P const prefix) { UNUSED(prefix); } + static inline void debug(PGM_P const) {} #endif private: diff --git a/Marlin/src/feature/runout.h b/Marlin/src/feature/runout.h index 0ce2c9af7c4f..c181c7cb434b 100644 --- a/Marlin/src/feature/runout.h +++ b/Marlin/src/feature/runout.h @@ -266,7 +266,7 @@ class FilamentSensorBase { } public: - static inline void block_completed(const block_t* const b) { UNUSED(b); } + static inline void block_completed(const block_t* const) {} static inline void run() { const bool out = poll_runout_state(active_extruder); @@ -353,8 +353,8 @@ class FilamentSensorBase { static inline void reset() { runout_count = runout_threshold; } static inline void run() { if (runout_count >= 0) runout_count--; } static inline bool has_run_out() { return runout_count < 0; } - static inline void block_completed(const block_t* const b) { UNUSED(b); } - static inline void filament_present(const uint8_t extruder) { runout_count = runout_threshold; UNUSED(extruder); } + static inline void block_completed(const block_t* const) { } + static inline void filament_present(const uint8_t) { runout_count = runout_threshold; } }; #endif // !FILAMENT_RUNOUT_DISTANCE_MM diff --git a/Marlin/src/feature/spindle_laser.h b/Marlin/src/feature/spindle_laser.h index ddc89b5add1a..133152a911c3 100644 --- a/Marlin/src/feature/spindle_laser.h +++ b/Marlin/src/feature/spindle_laser.h @@ -70,7 +70,7 @@ class SpindleLaser { #if ENABLED(SPINDLE_CHANGE_DIR) static void set_direction(const bool reverse); #else - static inline void set_direction(const bool reverse) { UNUSED(reverse); } + static inline void set_direction(const bool) {} #endif static inline void disable() { set_enabled(false); } diff --git a/Marlin/src/gcode/parser.h b/Marlin/src/gcode/parser.h index a4fd629b1626..2e91216a6402 100644 --- a/Marlin/src/gcode/parser.h +++ b/Marlin/src/gcode/parser.h @@ -290,9 +290,9 @@ class GCodeParser { static inline float mm_to_linear_unit(const float mm) { return mm; } static inline float mm_to_volumetric_unit(const float mm) { return mm; } - static inline float linear_value_to_mm(const float v) { return v; } - static inline float axis_value_to_mm(const AxisEnum axis, const float v) { UNUSED(axis); return v; } - static inline float per_axis_value(const AxisEnum axis, const float v) { UNUSED(axis); return v; } + static inline float linear_value_to_mm(const float v) { return v; } + static inline float axis_value_to_mm(const AxisEnum, const float v) { return v; } + static inline float per_axis_value(const AxisEnum, const float v) { return v; } #endif diff --git a/Marlin/src/lcd/menu/menu.h b/Marlin/src/lcd/menu/menu.h index 8229aec2030c..7f167a7b9c3e 100644 --- a/Marlin/src/lcd/menu/menu.h +++ b/Marlin/src/lcd/menu/menu.h @@ -114,8 +114,7 @@ FORCE_INLINE void draw_menu_item_edit_P(const bool sel, const uint8_t row, PGM_P FORCE_INLINE void draw_menu_item_edit_##NAME (const bool sel, const uint8_t row, PGM_P const pstr, TYPE * const data, ...) { \ DRAW_MENU_ITEM_SETTING_EDIT_GENERIC(STRFUNC(*(data))); \ } \ - FORCE_INLINE void draw_menu_item_edit_accessor_##NAME (const bool sel, const uint8_t row, PGM_P const pstr, PGM_P const pstr2, TYPE (*pget)(), void (*pset)(TYPE), ...) { \ - UNUSED(pstr2); UNUSED(pset); \ + FORCE_INLINE void draw_menu_item_edit_accessor_##NAME (const bool sel, const uint8_t row, PGM_P const pstr, PGM_P const, TYPE (*pget)(), void (*)(TYPE), ...) { \ DRAW_MENU_ITEM_SETTING_EDIT_GENERIC(STRFUNC(pget())); \ } \ typedef void NAME##_void @@ -149,13 +148,12 @@ DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(long5_25); // 12345 right-justif class MenuItem_back { public: - static inline void action(PGM_P const dummy=nullptr) { + static inline void action(PGM_P const=nullptr) { ui.goto_previous_screen( #if ENABLED(TURBO_BACK_MENU_ITEM) true #endif ); - UNUSED(dummy); } }; diff --git a/Marlin/src/lcd/menu/menu_media.cpp b/Marlin/src/lcd/menu/menu_media.cpp index 0b97918edb3f..ac1631660d2c 100644 --- a/Marlin/src/lcd/menu/menu_media.cpp +++ b/Marlin/src/lcd/menu/menu_media.cpp @@ -108,6 +108,7 @@ class MenuItem_sdfile { MenuItem_submenu::action(pstr, menu_sd_confirm); #else sdcard_start_selected_file(); + UNUSED(pstr); #endif } }; diff --git a/Marlin/src/lcd/ultralcd.h b/Marlin/src/lcd/ultralcd.h index 32c51cd24957..c33337df8ce0 100644 --- a/Marlin/src/lcd/ultralcd.h +++ b/Marlin/src/lcd/ultralcd.h @@ -273,7 +273,7 @@ class MarlinUI { static void init(); static void update(); - static void set_alert_status_P(PGM_P message); + static void set_alert_status_P(PGM_P const message); static char status_message[]; static bool has_status(); @@ -393,10 +393,10 @@ class MarlinUI { static inline void update() {} static inline void refresh() {} static inline void return_to_status() {} - static inline void set_alert_status_P(PGM_P message) { UNUSED(message); } - static inline void set_status(const char* const message, const bool persist=false) { UNUSED(message); UNUSED(persist); } - static inline void set_status_P(PGM_P const message, const int8_t level=0) { UNUSED(message); UNUSED(level); } - static inline void status_printf_P(const uint8_t level, PGM_P const fmt, ...) { UNUSED(level); UNUSED(fmt); } + static inline void set_alert_status_P(PGM_P const) {} + static inline void set_status(const char* const, const bool=false) {} + static inline void set_status_P(PGM_P const, const int8_t=0) {} + static inline void status_printf_P(const uint8_t, PGM_P const, ...) {} static inline void reset_status() {} static inline void reset_alert_level() {} static constexpr bool has_status() { return false; } diff --git a/Marlin/src/module/configuration_store.h b/Marlin/src/module/configuration_store.h index 9e95e4752575..b8a64c5c68db 100644 --- a/Marlin/src/module/configuration_store.h +++ b/Marlin/src/module/configuration_store.h @@ -85,7 +85,7 @@ class MarlinSettings { static void report(const bool forReplay=false); #else FORCE_INLINE - static void report(const bool forReplay=false) { UNUSED(forReplay); } + static void report(const bool=false) {} #endif private: diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index 0da481e4e517..ba37bebd4690 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -279,12 +279,12 @@ void homeaxis(const AxisEnum axis); #else #define NATIVE_TO_LOGICAL(POS, AXIS) (POS) #define LOGICAL_TO_NATIVE(POS, AXIS) (POS) - FORCE_INLINE void toLogical(xy_pos_t &raw) { UNUSED(raw); } - FORCE_INLINE void toLogical(xyz_pos_t &raw) { UNUSED(raw); } - FORCE_INLINE void toLogical(xyze_pos_t &raw) { UNUSED(raw); } - FORCE_INLINE void toNative(xy_pos_t &raw) { UNUSED(raw); } - FORCE_INLINE void toNative(xyz_pos_t &raw) { UNUSED(raw); } - FORCE_INLINE void toNative(xyze_pos_t &raw) { UNUSED(raw); } + FORCE_INLINE void toLogical(xy_pos_t&) {} + FORCE_INLINE void toLogical(xyz_pos_t&) {} + FORCE_INLINE void toLogical(xyze_pos_t&) {} + FORCE_INLINE void toNative(xy_pos_t&) {} + FORCE_INLINE void toNative(xyz_pos_t&) {} + FORCE_INLINE void toNative(xyze_pos_t&) {} #endif #define LOGICAL_X_POSITION(POS) NATIVE_TO_LOGICAL(POS, X_AXIS) #define LOGICAL_Y_POSITION(POS) NATIVE_TO_LOGICAL(POS, Y_AXIS) diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index c18b7753e667..55ccae85a3ed 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -431,12 +431,9 @@ class Planner { #else - FORCE_INLINE static float fade_scaling_factor_for_z(const float &rz) { - UNUSED(rz); - return 1; - } + FORCE_INLINE static float fade_scaling_factor_for_z(const float&) { return 1; } - FORCE_INLINE static bool leveling_active_at_z(const float &rz) { UNUSED(rz); return true; } + FORCE_INLINE static bool leveling_active_at_z(const float&) { return true; } #endif diff --git a/Marlin/src/module/stepper.h b/Marlin/src/module/stepper.h index 839a9a9d5e01..1ab455bd06dc 100644 --- a/Marlin/src/module/stepper.h +++ b/Marlin/src/module/stepper.h @@ -337,7 +337,7 @@ class Stepper { // // Constructor / initializer // - Stepper() { }; + Stepper() {}; // Initialize stepper hardware static void init(); diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 79825ec5188f..eb37325da2bb 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -813,13 +813,7 @@ void Temperature::min_temp_error(const heater_ind_t heater) { #if HOTENDS - float Temperature::get_pid_output_hotend(const uint8_t e) { - #if HOTENDS == 1 - #define _HOTEND_TEST true - #else - #define _HOTEND_TEST (e == active_extruder) - #endif - E_UNUSED(); + float Temperature::get_pid_output_hotend(const uint8_t E_NAME) { const uint8_t ee = HOTEND_INDEX; #if ENABLED(PIDTEMP) #if DISABLED(PID_OPENLOOP) @@ -860,8 +854,13 @@ void Temperature::min_temp_error(const heater_ind_t heater) { pid_output = work_pid[ee].Kp + work_pid[ee].Ki + work_pid[ee].Kd + float(MIN_POWER); #if ENABLED(PID_EXTRUSION_SCALING) + #if HOTENDS == 1 + constexpr bool this_hotend = true; + #else + const bool this_hotend = (e == active_extruder); + #endif work_pid[ee].Kc = 0; - if (_HOTEND_TEST) { + if (this_hotend) { const long e_position = stepper.position(E_AXIS); if (e_position > last_e_position) { lpq[lpq_ptr] = e_position - last_e_position; @@ -895,6 +894,7 @@ void Temperature::min_temp_error(const heater_ind_t heater) { MSG_PID_DEBUG_OUTPUT, pid_output ); #if DISABLED(PID_OPENLOOP) + { SERIAL_ECHOPAIR( MSG_PID_DEBUG_PTERM, work_pid[ee].Kp, MSG_PID_DEBUG_ITERM, work_pid[ee].Ki, @@ -903,6 +903,7 @@ void Temperature::min_temp_error(const heater_ind_t heater) { , MSG_PID_DEBUG_CTERM, work_pid[ee].Kc #endif ); + } #endif SERIAL_EOL(); } @@ -911,12 +912,11 @@ void Temperature::min_temp_error(const heater_ind_t heater) { #else // No PID enabled #if HEATER_IDLE_HANDLER - #define _TIMED_OUT_TEST hotend_idle[ee].timed_out + const bool is_idling = hotend_idle[ee].timed_out; #else - #define _TIMED_OUT_TEST false + constexpr bool is_idling = false; #endif - const float pid_output = (!_TIMED_OUT_TEST && temp_hotend[ee].celsius < temp_hotend[ee].target) ? BANG_MAX : 0; - #undef _TIMED_OUT_TEST + const float pid_output = (!is_idling && temp_hotend[ee].celsius < temp_hotend[ee].target) ? BANG_MAX : 0; #endif @@ -971,6 +971,7 @@ void Temperature::min_temp_error(const heater_ind_t heater) { #endif // PID_OPENLOOP #if ENABLED(PID_BED_DEBUG) + { SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR( " PID_BED_DEBUG : Input ", temp_bed.celsius, " Output ", pid_output, @@ -980,6 +981,7 @@ void Temperature::min_temp_error(const heater_ind_t heater) { MSG_PID_DEBUG_DTERM, work_pid.Kd, #endif ); + } #endif return pid_output; @@ -1811,8 +1813,7 @@ void Temperature::init() { * their target temperature by a configurable margin. * This is called when the temperature is set. (M104, M109) */ - void Temperature::start_watching_hotend(const uint8_t e) { - E_UNUSED(); + void Temperature::start_watching_hotend(const uint8_t E_NAME) { const uint8_t ee = HOTEND_INDEX; if (degTargetHotend(ee) && degHotend(ee) < degTargetHotend(ee) - (WATCH_TEMP_INCREASE + TEMP_HYSTERESIS + 1)) { watch_hotend[ee].target = degHotend(ee) + WATCH_TEMP_INCREASE; diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index 63251cd40fac..e75eae4f85d6 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -39,10 +39,10 @@ #if HOTENDS <= 1 #define HOTEND_INDEX 0 - #define E_UNUSED() UNUSED(e) + #define E_NAME #else #define HOTEND_INDEX e - #define E_UNUSED() + #define E_NAME e #endif // Identifiers for other heaters @@ -304,17 +304,15 @@ class Temperature { static bool allow_cold_extrude; static int16_t extrude_min_temp; FORCE_INLINE static bool tooCold(const int16_t temp) { return allow_cold_extrude ? false : temp < extrude_min_temp; } - FORCE_INLINE static bool tooColdToExtrude(const uint8_t e) { - E_UNUSED(); + FORCE_INLINE static bool tooColdToExtrude(const uint8_t E_NAME) { return tooCold(degHotend(HOTEND_INDEX)); } - FORCE_INLINE static bool targetTooColdToExtrude(const uint8_t e) { - E_UNUSED(); + FORCE_INLINE static bool targetTooColdToExtrude(const uint8_t E_NAME) { return tooCold(degTargetHotend(HOTEND_INDEX)); } #else - FORCE_INLINE static bool tooColdToExtrude(const uint8_t e) { UNUSED(e); return false; } - FORCE_INLINE static bool targetTooColdToExtrude(const uint8_t e) { UNUSED(e); return false; } + FORCE_INLINE static bool tooColdToExtrude(const uint8_t) { return false; } + FORCE_INLINE static bool targetTooColdToExtrude(const uint8_t) { return false; } #endif FORCE_INLINE static bool hotEnoughToExtrude(const uint8_t e) { return !tooColdToExtrude(e); } @@ -546,16 +544,13 @@ class Temperature { * Preheating hotends */ #ifdef MILLISECONDS_PREHEAT_TIME - static bool is_preheating(const uint8_t e) { - E_UNUSED(); + static bool is_preheating(const uint8_t E_NAME) { return preheat_end_time[HOTEND_INDEX] && PENDING(millis(), preheat_end_time[HOTEND_INDEX]); } - static void start_preheat_time(const uint8_t e) { - E_UNUSED(); + static void start_preheat_time(const uint8_t E_NAME) { preheat_end_time[HOTEND_INDEX] = millis() + MILLISECONDS_PREHEAT_TIME; } - static void reset_preheat_time(const uint8_t e) { - E_UNUSED(); + static void reset_preheat_time(const uint8_t E_NAME) { preheat_end_time[HOTEND_INDEX] = 0; } #else @@ -566,39 +561,36 @@ class Temperature { //inline so that there is no performance decrease. //deg=degreeCelsius - FORCE_INLINE static float degHotend(const uint8_t e) { - E_UNUSED(); - #if HOTENDS - return temp_hotend[HOTEND_INDEX].celsius; - #else - return 0; - #endif + FORCE_INLINE static float degHotend(const uint8_t E_NAME) { + return (0 + #if HOTENDS + + temp_hotend[HOTEND_INDEX].celsius + #endif + ); } #if ENABLED(SHOW_TEMP_ADC_VALUES) - FORCE_INLINE static int16_t rawHotendTemp(const uint8_t e) { - E_UNUSED(); - #if HOTENDS - return temp_hotend[HOTEND_INDEX].raw; - #else - return 0; - #endif + FORCE_INLINE static int16_t rawHotendTemp(const uint8_t E_NAME) { + return (0 + #if HOTENDS + + temp_hotend[HOTEND_INDEX].raw + #endif + ); } #endif - FORCE_INLINE static int16_t degTargetHotend(const uint8_t e) { - E_UNUSED(); - #if HOTENDS - return temp_hotend[HOTEND_INDEX].target; - #else - return 0; - #endif + FORCE_INLINE static int16_t degTargetHotend(const uint8_t E_NAME) { + return (0 + #if HOTENDS + + temp_hotend[HOTEND_INDEX].target + #endif + ); } #if WATCH_HOTENDS static void start_watching_hotend(const uint8_t e=0); #else - static inline void start_watching_hotend(const uint8_t e=0) { UNUSED(e); } + static inline void start_watching_hotend(const uint8_t=0) {} #endif #if HOTENDS @@ -612,8 +604,7 @@ class Temperature { static inline void start_watching_E5() { start_watching_hotend(5); } #endif - static void setTargetHotend(const int16_t celsius, const uint8_t e) { - E_UNUSED(); + static void setTargetHotend(const int16_t celsius, const uint8_t E_NAME) { const uint8_t ee = HOTEND_INDEX; #ifdef MILLISECONDS_PREHEAT_TIME if (celsius == 0) @@ -628,13 +619,11 @@ class Temperature { start_watching_hotend(ee); } - FORCE_INLINE static bool isHeatingHotend(const uint8_t e) { - E_UNUSED(); + FORCE_INLINE static bool isHeatingHotend(const uint8_t E_NAME) { return temp_hotend[HOTEND_INDEX].target > temp_hotend[HOTEND_INDEX].celsius; } - FORCE_INLINE static bool isCoolingHotend(const uint8_t e) { - E_UNUSED(); + FORCE_INLINE static bool isCoolingHotend(const uint8_t E_NAME) { return temp_hotend[HOTEND_INDEX].target < temp_hotend[HOTEND_INDEX].celsius; } @@ -765,8 +754,7 @@ class Temperature { #if HEATER_IDLE_HANDLER - static void reset_heater_idle_timer(const uint8_t e) { - E_UNUSED(); + static void reset_heater_idle_timer(const uint8_t E_NAME) { hotend_idle[HOTEND_INDEX].reset(); start_watching_hotend(HOTEND_INDEX); } diff --git a/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.h b/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.h index 5ab82d3af723..a429bfd28f7f 100644 --- a/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.h +++ b/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.h @@ -57,13 +57,13 @@ class Sd2Card { static void idle(); - inline bool readStart(const uint32_t block) { pos = block; return ready(); } - inline bool readData(uint8_t* dst) { return readBlock(pos++, dst); } - inline bool readStop() const { return true; } + inline bool readStart(const uint32_t block) { pos = block; return ready(); } + inline bool readData(uint8_t* dst) { return readBlock(pos++, dst); } + inline bool readStop() const { return true; } - inline bool writeStart(const uint32_t block, const uint32_t eraseCount) { UNUSED(eraseCount); pos = block; return ready(); } - inline bool writeData(uint8_t* src) { return writeBlock(pos++, src); } - inline bool writeStop() const { return true; } + inline bool writeStart(const uint32_t block, const uint32_t) { pos = block; return ready(); } + inline bool writeData(uint8_t* src) { return writeBlock(pos++, src); } + inline bool writeStop() const { return true; } bool readBlock(uint32_t block, uint8_t* dst); bool writeBlock(uint32_t blockNumber, const uint8_t* src); diff --git a/Marlin/src/sd/usb_flashdrive/lib-uhs2/parsetools.h b/Marlin/src/sd/usb_flashdrive/lib-uhs2/parsetools.h index 529bafbbc052..28a28414463e 100644 --- a/Marlin/src/sd/usb_flashdrive/lib-uhs2/parsetools.h +++ b/Marlin/src/sd/usb_flashdrive/lib-uhs2/parsetools.h @@ -120,7 +120,7 @@ class PTPListParser { lenSize(0), valSize(0), pBuf(nullptr), - prsMode(modeArray) { } + prsMode(modeArray) {} ; void Initialize(const uint8_t len_size, const uint8_t val_size, MultiValueBuffer * const p, const uint8_t mode = modeArray) { From 806d64e1bf5a838a88e8a473bcb2b0f353b90c30 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 30 Sep 2019 21:45:00 -0500 Subject: [PATCH 113/120] X_SENSORLESS includes AXIS_HAS_STALLGUARD --- Marlin/src/inc/Conditionals_post.h | 3 ++ .../stepper_bump_sensitivity_screen.cpp | 6 ++-- Marlin/src/lcd/extensible_ui/ui_api.cpp | 28 +++++++++---------- Marlin/src/module/configuration_store.cpp | 14 ++++------ 4 files changed, 24 insertions(+), 27 deletions(-) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 8b7e393bd90f..b05614a2c91e 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -977,7 +977,10 @@ #define X_SENSORLESS (AXIS_HAS_STALLGUARD(X) && defined(X_STALL_SENSITIVITY)) #define X2_SENSORLESS (AXIS_HAS_STALLGUARD(X2) && defined(X2_STALL_SENSITIVITY)) #define Y_SENSORLESS (AXIS_HAS_STALLGUARD(Y) && defined(Y_STALL_SENSITIVITY)) + #define Y2_SENSORLESS (AXIS_HAS_STALLGUARD(Y2) && defined(Y2_STALL_SENSITIVITY)) #define Z_SENSORLESS (AXIS_HAS_STALLGUARD(Z) && defined(Z_STALL_SENSITIVITY)) + #define Z2_SENSORLESS (AXIS_HAS_STALLGUARD(Z2) && defined(Z2_STALL_SENSITIVITY)) + #define Z3_SENSORLESS (AXIS_HAS_STALLGUARD(Z3) && defined(Z3_STALL_SENSITIVITY)) #if ENABLED(SPI_ENDSTOPS) #define X_SPI_SENSORLESS X_SENSORLESS #define Y_SPI_SENSORLESS Y_SENSORLESS diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_bump_sensitivity_screen.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_bump_sensitivity_screen.cpp index 2a7a79baece6..b767e58e8834 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_bump_sensitivity_screen.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/screens/stepper_bump_sensitivity_screen.cpp @@ -35,21 +35,21 @@ void StepperBumpSensitivityScreen::onRedraw(draw_mode_t what) { w.precision(0, BaseNumericAdjustmentScreen::DEFAULT_LOWEST); w.heading( GET_TEXTF(HOME_SENSE)); w.color(x_axis) .adjuster( 2, GET_TEXTF(AXIS_X), getTMCBumpSensitivity(X), - #if X_SENSORLESS && AXIS_HAS_STALLGUARD(X) + #if X_SENSORLESS true #else false #endif ); w.color(y_axis) .adjuster( 4, GET_TEXTF(AXIS_Y), getTMCBumpSensitivity(Y), - #if Y_SENSORLESS && AXIS_HAS_STALLGUARD(Y) + #if Y_SENSORLESS true #else false #endif ); w.color(z_axis) .adjuster( 6, GET_TEXTF(AXIS_Z), getTMCBumpSensitivity(Z), - #if Z_SENSORLESS && AXIS_HAS_STALLGUARD(Z) + #if Z_SENSORLESS true #else false diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp index 2cbb0e082241..1c6c1e0618d9 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.cpp +++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp @@ -516,13 +516,13 @@ namespace ExtUI { int getTMCBumpSensitivity(const axis_t axis) { switch (axis) { - #if X_SENSORLESS && AXIS_HAS_STALLGUARD(X) + #if X_SENSORLESS case X: return stepperX.homing_threshold(); #endif - #if Y_SENSORLESS && AXIS_HAS_STALLGUARD(Y) + #if Y_SENSORLESS case Y: return stepperY.homing_threshold(); #endif - #if Z_SENSORLESS && AXIS_HAS_STALLGUARD(Z) + #if Z_SENSORLESS case Z: return stepperZ.homing_threshold(); #endif default: return 0; @@ -531,18 +531,16 @@ namespace ExtUI { void setTMCBumpSensitivity(const float value, const axis_t axis) { switch (axis) { - #if X_SENSORLESS && AXIS_HAS_STALLGUARD(X) - case X: stepperX.homing_threshold(value); break; - #else - UNUSED(value); - #endif - #if Y_SENSORLESS && AXIS_HAS_STALLGUARD(Y) - case Y: stepperY.homing_threshold(value); break; - #else - UNUSED(value); - #endif - #if Z_SENSORLESS && AXIS_HAS_STALLGUARD(Z) - case Z: stepperZ.homing_threshold(value); break; + #if X_SENSORLESS || Y_SENSORLESS || Z_SENSORLESS + #if X_SENSORLESS + case X: stepperX.homing_threshold(value); break; + #endif + #if Y_SENSORLESS + case Y: stepperY.homing_threshold(value); break; + #endif + #if Z_SENSORLESS + case Z: stepperZ.homing_threshold(value); break; + #endif #else UNUSED(value); #endif diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp index 88e219db9cd3..f00eb98e4adb 100644 --- a/Marlin/src/module/configuration_store.cpp +++ b/Marlin/src/module/configuration_store.cpp @@ -3246,27 +3246,23 @@ void MarlinSettings::reset() { SERIAL_EOL(); #endif - #define HAS_X2_SENSORLESS (defined(X_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(X2)) - #define HAS_Y2_SENSORLESS (defined(Y_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(Y2)) - #define HAS_Z2_SENSORLESS (defined(Z_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(Z2)) - #define HAS_Z3_SENSORLESS (defined(Z_STALL_SENSITIVITY) && AXIS_HAS_STALLGUARD(Z3)) - #if HAS_X2_SENSORLESS || HAS_Y2_SENSORLESS || HAS_Z2_SENSORLESS + #if X2_SENSORLESS || Y2_SENSORLESS || Z2_SENSORLESS CONFIG_ECHO_START(); say_M914(); SERIAL_ECHOPGM(" I1"); - #if HAS_X2_SENSORLESS + #if X2_SENSORLESS SERIAL_ECHOPAIR(" X", stepperX2.homing_threshold()); #endif - #if HAS_Y2_SENSORLESS + #if Y2_SENSORLESS SERIAL_ECHOPAIR(" Y", stepperY2.homing_threshold()); #endif - #if HAS_Z2_SENSORLESS + #if Z2_SENSORLESS SERIAL_ECHOPAIR(" Z", stepperZ2.homing_threshold()); #endif SERIAL_EOL(); #endif - #if HAS_Z3_SENSORLESS + #if Z3_SENSORLESS CONFIG_ECHO_START(); say_M914(); SERIAL_ECHOLNPAIR(" I2 Z", stepperZ3.homing_threshold()); From 7cd72de8bcedf77208d28301778104a590598b06 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 30 Sep 2019 22:56:12 -0500 Subject: [PATCH 114/120] General cleanup, style --- Marlin/src/HAL/HAL_AVR/pinsDebug.h | 15 ++------- Marlin/src/HAL/HAL_LINUX/arduino.cpp | 2 +- Marlin/src/lcd/menu/menu.h | 47 ++++++++++++++-------------- 3 files changed, 28 insertions(+), 36 deletions(-) diff --git a/Marlin/src/HAL/HAL_AVR/pinsDebug.h b/Marlin/src/HAL/HAL_AVR/pinsDebug.h index fa7018094764..e4738e0332e9 100644 --- a/Marlin/src/HAL/HAL_AVR/pinsDebug.h +++ b/Marlin/src/HAL/HAL_AVR/pinsDebug.h @@ -227,18 +227,9 @@ static void print_is_also_tied() { SERIAL_ECHOPGM(" is also tied to this pin"); void com_print(uint8_t N, uint8_t Z) { const uint8_t *TCCRA = (uint8_t*)TCCR_A(N); SERIAL_ECHOPGM(" COM"); - SERIAL_CHAR(N + '0'); - switch (Z) { - case 'A': - SERIAL_ECHOPAIR("A: ", ((*TCCRA & (_BV(7) | _BV(6))) >> 6)); - break; - case 'B': - SERIAL_ECHOPAIR("B: ", ((*TCCRA & (_BV(5) | _BV(4))) >> 4)); - break; - case 'C': - SERIAL_ECHOPAIR("C: ", ((*TCCRA & (_BV(3) | _BV(2))) >> 2)); - break; - } + SERIAL_CHAR('0' + N); + SERIAL_CHAR('A' + Z); + SERIAL_ECHOPAIR(": ", int((*TCCRA >> (6 - Z * 2)) & 0x03)); } void timer_prefix(uint8_t T, char L, uint8_t N) { // T - timer L - pwm N - WGM bit layout diff --git a/Marlin/src/HAL/HAL_LINUX/arduino.cpp b/Marlin/src/HAL/HAL_LINUX/arduino.cpp index 7915d685eafa..88128dd91a17 100644 --- a/Marlin/src/HAL/HAL_LINUX/arduino.cpp +++ b/Marlin/src/HAL/HAL_LINUX/arduino.cpp @@ -29,7 +29,7 @@ // Interrupts void cli() { } // Disable -void sei() { } // Enable +void sei() { } // Enable // Time functions void _delay_ms(const int delay_ms) { diff --git a/Marlin/src/lcd/menu/menu.h b/Marlin/src/lcd/menu/menu.h index 7f167a7b9c3e..2d7680e10e15 100644 --- a/Marlin/src/lcd/menu/menu.h +++ b/Marlin/src/lcd/menu/menu.h @@ -308,33 +308,34 @@ class MenuItem_bool { * MenuItem_int3::action_edit(PSTR(MSG_SPEED), &feedrate_percentage, 10, 999) * */ -#define _MENU_ITEM_VARIANT_P(TYPE, VARIANT, USE_MULTIPLIER, PLABEL, V...) do { \ - _skipStatic = false; \ - if (_menuLineNr == _thisItemNr) { \ - PGM_P const plabel = PLABEL; \ - if (encoderLine == _thisItemNr && ui.use_click()) { \ - _MENU_ITEM_MULTIPLIER_CHECK(USE_MULTIPLIER); \ - MenuItem_##TYPE ::action ## VARIANT(plabel, ##V); \ - if (screen_changed) return; \ - } \ - if (ui.should_draw()) \ - draw_menu_item ## VARIANT ## _ ## TYPE(encoderLine == _thisItemNr, _lcdLineNr, plabel, ##V); \ - } \ - ++_thisItemNr; \ +#define _MENU_ITEM_VARIANT_P(TYPE, VARIANT, USE_MULTIPLIER, PLABEL, V...) do { \ + _skipStatic = false; \ + if (_menuLineNr == _thisItemNr) { \ + PGM_P const plabel = PLABEL; \ + if (encoderLine == _thisItemNr && ui.use_click()) { \ + _MENU_ITEM_MULTIPLIER_CHECK(USE_MULTIPLIER); \ + MenuItem_##TYPE ::action ## VARIANT(plabel, ##V); \ + if (screen_changed) return; \ + } \ + if (ui.should_draw()) \ + draw_menu_item ## VARIANT ## _ ## TYPE \ + (encoderLine == _thisItemNr, _lcdLineNr, plabel, ##V); \ + } \ + ++_thisItemNr; \ }while(0) // Used to print static text with no visible cursor. // Parameters: label [, bool center [, bool invert [, char *value] ] ] -#define STATIC_ITEM_P(PLABEL, V...) do{ \ - if (_menuLineNr == _thisItemNr) { \ - if (_skipStatic && encoderLine <= _thisItemNr) { \ - ui.encoderPosition += ENCODER_STEPS_PER_MENU_ITEM; \ - ++encoderLine; \ - } \ - if (ui.should_draw()) \ - draw_menu_item_static(_lcdLineNr, PLABEL, ##V); \ - } \ - ++_thisItemNr; \ +#define STATIC_ITEM_P(PLABEL, V...) do{ \ + if (_menuLineNr == _thisItemNr) { \ + if (_skipStatic && encoderLine <= _thisItemNr) { \ + ui.encoderPosition += ENCODER_STEPS_PER_MENU_ITEM; \ + ++encoderLine; \ + } \ + if (ui.should_draw()) \ + draw_menu_item_static(_lcdLineNr, PLABEL, ##V); \ + } \ + ++_thisItemNr; \ } while(0) #define MENU_ITEM_ADDON_START(X) do{ \ From f9400b6a3c4d09848292f1598df6e4ab4f0278f6 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 1 Oct 2019 00:00:05 -0500 Subject: [PATCH 115/120] [cron] Bump distribution date --- Marlin/src/inc/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index 5ea4c33419cc..0c9b11b9b9f3 100644 --- a/Marlin/src/inc/Version.h +++ b/Marlin/src/inc/Version.h @@ -51,7 +51,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ - #define STRING_DISTRIBUTION_DATE "2019-09-30" + #define STRING_DISTRIBUTION_DATE "2019-10-01" /** * Required minimum Configuration.h and Configuration_adv.h file versions. From 438835f6a52ab23c9b0114a27d35941a34648592 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Tue, 1 Oct 2019 20:59:48 -0400 Subject: [PATCH 116/120] Configurable Max Accel, Max Feedrate, Max Jerk edit limits (#13929) --- Marlin/Configuration.h | 15 +++++ Marlin/src/HAL/HAL_DUE/HAL.cpp | 2 +- Marlin/src/HAL/HAL_SAMD51/HAL.cpp | 2 +- Marlin/src/Marlin.cpp | 2 +- Marlin/src/feature/joystick.cpp | 8 +-- Marlin/src/feature/tmc_util.cpp | 2 +- Marlin/src/gcode/config/M200-M205.cpp | 16 ++--- Marlin/src/gcode/config/M92.cpp | 2 +- Marlin/src/gcode/parser.cpp | 3 +- Marlin/src/inc/SanityCheck.h | 42 +++++++++++- .../ftdi_eve_lib/extended/dl_cache.cpp | 4 +- Marlin/src/lcd/extensible_ui/ui_api.cpp | 14 ++-- Marlin/src/lcd/menu/menu_advanced.cpp | 67 +++++++++++++++---- Marlin/src/module/motion.cpp | 6 +- Marlin/src/module/planner.cpp | 64 +++++++++++++++++- Marlin/src/module/planner.h | 4 ++ config/default/Configuration.h | 15 +++++ .../examples/3DFabXYZ/Migbot/Configuration.h | 15 +++++ .../ADIMLab/Gantry v2/Configuration.h | 15 +++++ .../AlephObjects/TAZ4/Configuration.h | 15 +++++ .../AliExpress/CL-260/Configuration.h | 15 +++++ .../AliExpress/UM2pExt/Configuration.h | 15 +++++ config/examples/Anet/A2/Configuration.h | 15 +++++ config/examples/Anet/A2plus/Configuration.h | 15 +++++ config/examples/Anet/A6/Configuration.h | 15 +++++ config/examples/Anet/A8/Configuration.h | 15 +++++ config/examples/Anet/A8plus/Configuration.h | 15 +++++ config/examples/Anet/E16/Configuration.h | 15 +++++ config/examples/AnyCubic/i3/Configuration.h | 15 +++++ config/examples/ArmEd/Configuration.h | 15 +++++ config/examples/Azteeg/X5GT/Configuration.h | 15 +++++ .../BIBO/TouchX/cyclops/Configuration.h | 15 +++++ .../BIBO/TouchX/default/Configuration.h | 15 +++++ config/examples/BQ/Hephestos/Configuration.h | 15 +++++ .../examples/BQ/Hephestos_2/Configuration.h | 15 +++++ config/examples/BQ/WITBOX/Configuration.h | 15 +++++ config/examples/Cartesio/Configuration.h | 15 +++++ .../examples/Creality/CR-10/Configuration.h | 15 +++++ .../examples/Creality/CR-10S/Configuration.h | 15 +++++ .../Creality/CR-10_5S/Configuration.h | 15 +++++ .../Creality/CR-10mini/Configuration.h | 15 +++++ .../Creality/CR-20 Pro/Configuration.h | 15 +++++ .../examples/Creality/CR-20/Configuration.h | 15 +++++ config/examples/Creality/CR-8/Configuration.h | 15 +++++ .../examples/Creality/Ender-2/Configuration.h | 15 +++++ .../examples/Creality/Ender-3/Configuration.h | 15 +++++ .../examples/Creality/Ender-4/Configuration.h | 15 +++++ .../examples/Creality/Ender-5/Configuration.h | 15 +++++ .../Dagoma/Disco Ultimate/Configuration.h | 15 +++++ .../Sidewinder X1/Configuration.h | 15 +++++ config/examples/Einstart-S/Configuration.h | 15 +++++ config/examples/FYSETC/AIO_II/Configuration.h | 15 +++++ .../Cheetah 1.2/BLTouch/Configuration.h | 15 +++++ .../FYSETC/Cheetah 1.2/base/Configuration.h | 15 +++++ .../FYSETC/Cheetah/BLTouch/Configuration.h | 15 +++++ .../FYSETC/Cheetah/base/Configuration.h | 15 +++++ config/examples/FYSETC/F6_13/Configuration.h | 15 +++++ config/examples/Felix/Configuration.h | 15 +++++ config/examples/Felix/DUAL/Configuration.h | 15 +++++ .../FlashForge/CreatorPro/Configuration.h | 15 +++++ .../FolgerTech/i3-2020/Configuration.h | 15 +++++ .../examples/Formbot/Raptor/Configuration.h | 15 +++++ .../examples/Formbot/T_Rex_2+/Configuration.h | 15 +++++ .../examples/Formbot/T_Rex_3/Configuration.h | 15 +++++ config/examples/Geeetech/A10/Configuration.h | 15 +++++ config/examples/Geeetech/A10M/Configuration.h | 15 +++++ config/examples/Geeetech/A20M/Configuration.h | 15 +++++ .../examples/Geeetech/GT2560/Configuration.h | 15 +++++ .../Geeetech/I3_Pro_X-GT2560/Configuration.h | 15 +++++ .../Geeetech/MeCreator2/Configuration.h | 15 +++++ .../Prusa i3 Pro B/bltouch/Configuration.h | 15 +++++ .../Prusa i3 Pro B/noprobe/Configuration.h | 15 +++++ .../Geeetech/Prusa i3 Pro C/Configuration.h | 15 +++++ .../Geeetech/Prusa i3 Pro W/Configuration.h | 15 +++++ config/examples/HMS434/Configuration.h | 15 +++++ .../examples/Infitary/i3-M508/Configuration.h | 15 +++++ config/examples/JGAurora/A5/Configuration.h | 15 +++++ config/examples/MakerParts/Configuration.h | 15 +++++ config/examples/Malyan/M150/Configuration.h | 15 +++++ config/examples/Malyan/M200/Configuration.h | 15 +++++ .../Micromake/C1/basic/Configuration.h | 15 +++++ .../Micromake/C1/enhanced/Configuration.h | 15 +++++ config/examples/Mks/Robin/Configuration.h | 15 +++++ config/examples/Mks/Sbase/Configuration.h | 15 +++++ .../Printrbot/PrintrboardG2/Configuration.h | 15 +++++ .../examples/RapideLite/RL200/Configuration.h | 15 +++++ .../examples/RepRapPro/Huxley/Configuration.h | 15 +++++ .../RepRapWorld/Megatronics/Configuration.h | 15 +++++ config/examples/RigidBot/Configuration.h | 15 +++++ config/examples/SCARA/Configuration.h | 15 +++++ .../STM32/Black_STM32F407VET6/Configuration.h | 15 +++++ .../STM32/STM32F103RE/Configuration.h | 15 +++++ config/examples/STM32/STM32F4/Configuration.h | 15 +++++ .../STM32/stm32f103ret6/Configuration.h | 15 +++++ config/examples/Sanguinololu/Configuration.h | 15 +++++ .../Tevo/Michelangelo/Configuration.h | 15 +++++ .../Tevo/Tarantula Pro/Configuration.h | 15 +++++ config/examples/TheBorg/Configuration.h | 15 +++++ config/examples/TinyBoy2/Configuration.h | 15 +++++ config/examples/Tronxy/X1/Configuration.h | 15 +++++ config/examples/Tronxy/X3A/Configuration.h | 15 +++++ config/examples/Tronxy/X5S-2E/Configuration.h | 15 +++++ config/examples/Tronxy/X5S/Configuration.h | 15 +++++ config/examples/Tronxy/XY100/Configuration.h | 15 +++++ .../UltiMachine/Archim1/Configuration.h | 15 +++++ .../UltiMachine/Archim2/Configuration.h | 15 +++++ config/examples/VORONDesign/Configuration.h | 15 +++++ .../examples/Velleman/K8200/Configuration.h | 15 +++++ .../examples/Velleman/K8400/Configuration.h | 15 +++++ .../Velleman/K8400/Dual-head/Configuration.h | 15 +++++ .../examples/WASP/PowerWASP/Configuration.h | 15 +++++ .../Wanhao/Duplicator 6/Configuration.h | 15 +++++ .../Wanhao/Duplicator i3 Mini/Configuration.h | 15 +++++ .../examples/adafruit/ST7565/Configuration.h | 15 +++++ .../delta/Anycubic/Kossel/Configuration.h | 15 +++++ .../FLSUN/auto_calibrate/Configuration.h | 15 +++++ .../delta/FLSUN/kossel/Configuration.h | 15 +++++ .../delta/FLSUN/kossel_mini/Configuration.h | 15 +++++ .../Geeetech/Rostock 301/Configuration.h | 15 +++++ .../delta/Hatchbox_Alpha/Configuration.h | 15 +++++ .../examples/delta/MKS/SBASE/Configuration.h | 15 +++++ .../delta/Tevo Little Monster/Configuration.h | 15 +++++ config/examples/delta/generic/Configuration.h | 15 +++++ .../delta/kossel_mini/Configuration.h | 15 +++++ .../examples/delta/kossel_pro/Configuration.h | 15 +++++ .../examples/delta/kossel_xl/Configuration.h | 15 +++++ .../examples/gCreate/gMax1.5+/Configuration.h | 15 +++++ config/examples/makibox/Configuration.h | 15 +++++ config/examples/tvrrug/Round2/Configuration.h | 15 +++++ config/examples/wt150/Configuration.h | 15 +++++ 130 files changed, 1912 insertions(+), 51 deletions(-) diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 16f1ca68005c..812df3c2082c 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/Marlin/src/HAL/HAL_DUE/HAL.cpp b/Marlin/src/HAL/HAL_DUE/HAL.cpp index 735ccc631767..130779896d3c 100644 --- a/Marlin/src/HAL/HAL_DUE/HAL.cpp +++ b/Marlin/src/HAL/HAL_DUE/HAL.cpp @@ -87,7 +87,7 @@ extern "C" { // Return free memory between end of heap (or end bss) and whatever is current int freeMemory() { int free_memory, heap_end = (int)_sbrk(0); - return (int)&free_memory - (heap_end ? heap_end : (int)&_ebss); + return (int)&free_memory - (heap_end ?: (int)&_ebss); } // ------------------------ diff --git a/Marlin/src/HAL/HAL_SAMD51/HAL.cpp b/Marlin/src/HAL/HAL_SAMD51/HAL.cpp index d80dd17aab1c..1d7521270f67 100644 --- a/Marlin/src/HAL/HAL_SAMD51/HAL.cpp +++ b/Marlin/src/HAL/HAL_SAMD51/HAL.cpp @@ -414,7 +414,7 @@ extern "C" { // Return free memory between end of heap (or end bss) and whatever is current int freeMemory() { int free_memory, heap_end = (int)_sbrk(0); - return (int)&free_memory - (heap_end ? heap_end : (int)&__bss_end__); + return (int)&free_memory - (heap_end ?: (int)&__bss_end__); } // ------------------------ diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp index cd8ecb4325c6..59104ecded97 100644 --- a/Marlin/src/Marlin.cpp +++ b/Marlin/src/Marlin.cpp @@ -762,7 +762,7 @@ void kill(PGM_P const lcd_msg/*=nullptr*/, const bool steppers_off/*=false*/) { SERIAL_ERROR_MSG(MSG_ERR_KILLED); #if HAS_DISPLAY - ui.kill_screen(lcd_msg ? lcd_msg : PSTR(MSG_KILLED)); + ui.kill_screen(lcd_msg ?: PSTR(MSG_KILLED)); #else UNUSED(lcd_msg); #endif diff --git a/Marlin/src/feature/joystick.cpp b/Marlin/src/feature/joystick.cpp index baa3142b6f4d..7ae3f1389e01 100644 --- a/Marlin/src/feature/joystick.cpp +++ b/Marlin/src/feature/joystick.cpp @@ -112,10 +112,10 @@ Joystick joystick; static bool injecting_now; // = false; if (injecting_now) return; - static constexpr int QUEUE_DEPTH = 5; // Insert up to this many movements - static constexpr float target_lag = 0.25f, // Aim for 1/4 second lag - seg_time = target_lag / QUEUE_DEPTH; // 0.05 seconds, short segments inserted every 1/20th of a second - static constexpr millis_t timer_limit_ms = millis_t(seg_time * 500); // 25 ms minimum delay between insertions + static constexpr int QUEUE_DEPTH = 5; // Insert up to this many movements + static constexpr float target_lag = 0.25f, // Aim for 1/4 second lag + seg_time = target_lag / QUEUE_DEPTH; // 0.05 seconds, short segments inserted every 1/20th of a second + static constexpr millis_t timer_limit_ms = millis_t(seg_time * 500); // 25 ms minimum delay between insertions // The planner can merge/collapse small moves, so the movement queue is unreliable to control the lag static millis_t next_run = 0; diff --git a/Marlin/src/feature/tmc_util.cpp b/Marlin/src/feature/tmc_util.cpp index 329c511ecde1..6b97168f9806 100644 --- a/Marlin/src/feature/tmc_util.cpp +++ b/Marlin/src/feature/tmc_util.cpp @@ -507,7 +507,7 @@ case TMC_GLOBAL_SCALER: { uint16_t value = st.GLOBAL_SCALER(); - SERIAL_PRINT(value ? value : 256, DEC); + SERIAL_PRINT(value ?: 256, DEC); SERIAL_ECHOPGM("/256"); } break; diff --git a/Marlin/src/gcode/config/M200-M205.cpp b/Marlin/src/gcode/config/M200-M205.cpp index 0edffe5b49af..e3cd42feb0aa 100644 --- a/Marlin/src/gcode/config/M200-M205.cpp +++ b/Marlin/src/gcode/config/M200-M205.cpp @@ -62,11 +62,9 @@ void GcodeSuite::M201() { LOOP_XYZE(i) { if (parser.seen(axis_codes[i])) { const uint8_t a = (i == E_AXIS ? uint8_t(E_AXIS_N(target_extruder)) : i); - planner.settings.max_acceleration_mm_per_s2[a] = parser.value_axis_units((AxisEnum)a); + planner.set_max_acceleration(a, parser.value_axis_units((AxisEnum)a)); } } - - planner.reset_acceleration_rates(); } /** @@ -82,7 +80,7 @@ void GcodeSuite::M203() { LOOP_XYZE(i) if (parser.seen(axis_codes[i])) { const uint8_t a = (i == E_AXIS ? uint8_t(E_AXIS_N(target_extruder)) : i); - planner.settings.max_feedrate_mm_s[a] = parser.value_axis_units((AxisEnum)a); + planner.set_max_feedrate(a, parser.value_axis_units((AxisEnum)a)); } } @@ -152,17 +150,17 @@ void GcodeSuite::M205() { } #endif #if HAS_CLASSIC_JERK - if (parser.seen('X')) planner.max_jerk.x = parser.value_linear_units(); - if (parser.seen('Y')) planner.max_jerk.y = parser.value_linear_units(); + if (parser.seen('X')) planner.set_max_jerk(X_AXIS, parser.value_linear_units()); + if (parser.seen('Y')) planner.set_max_jerk(Y_AXIS, parser.value_linear_units()); if (parser.seen('Z')) { - planner.max_jerk.z = parser.value_linear_units(); - #if HAS_MESH + planner.set_max_jerk(Z_AXIS, parser.value_linear_units()); + #if HAS_MESH && DISABLED(LIMITED_JERK_EDITING) if (planner.max_jerk.z <= 0.1f) SERIAL_ECHOLNPGM("WARNING! Low Z Jerk may lead to unwanted pauses."); #endif } #if !BOTH(JUNCTION_DEVIATION, LIN_ADVANCE) - if (parser.seen('E')) planner.max_jerk.e = parser.value_linear_units(); + if (parser.seen('E')) planner.set_max_jerk(E_AXIS, parser.value_linear_units()); #endif #endif } diff --git a/Marlin/src/gcode/config/M92.cpp b/Marlin/src/gcode/config/M92.cpp index 0fd8dbea166f..8626864b6c01 100644 --- a/Marlin/src/gcode/config/M92.cpp +++ b/Marlin/src/gcode/config/M92.cpp @@ -98,7 +98,7 @@ void GcodeSuite::M92() { const float wanted = parser.floatval('L'); if (parser.seen('H') || wanted) { const uint16_t argH = parser.ushortval('H'), - micro_steps = argH ? argH : Z_MICROSTEPS; + micro_steps = argH ?: Z_MICROSTEPS; const float z_full_step_mm = micro_steps * planner.steps_to_mm[Z_AXIS]; SERIAL_ECHO_START(); SERIAL_ECHOPAIR("{ micro_steps:", micro_steps, ", z_full_step_mm:", z_full_step_mm); diff --git a/Marlin/src/gcode/parser.cpp b/Marlin/src/gcode/parser.cpp index 0840043e5dde..8d70c64cc8a1 100644 --- a/Marlin/src/gcode/parser.cpp +++ b/Marlin/src/gcode/parser.cpp @@ -222,8 +222,7 @@ void GCodeParser::parse(char *p) { // Only use string_arg for these M codes if (letter == 'M') switch (codenum) { #if ENABLED(GCODE_MACROS) - case 810: case 811: case 812: case 813: case 814: - case 815: case 816: case 817: case 818: case 819: + case 810 ... 819: #endif #if ENABLED(EXPECTED_PRINTER_CHECK) case 16: diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index f4c3b2d12476..e37e0b27cd7d 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -2233,27 +2233,63 @@ constexpr float sanity_arr_1[] = DEFAULT_AXIS_STEPS_PER_UNIT, #define _ARR_TEST(N,I) (sanity_arr_##N[_MIN(I,int(COUNT(sanity_arr_##N))-1)] > 0) -static_assert(COUNT(sanity_arr_1) >= XYZE, "DEFAULT_AXIS_STEPS_PER_UNIT requires X, Y, Z and E elements."); +static_assert(COUNT(sanity_arr_1) >= XYZE, "DEFAULT_AXIS_STEPS_PER_UNIT requires X, Y, Z and E elements."); static_assert(COUNT(sanity_arr_1) <= XYZE_N, "DEFAULT_AXIS_STEPS_PER_UNIT has too many elements. (Did you forget to enable DISTINCT_E_FACTORS?)"); static_assert( _ARR_TEST(1,0) && _ARR_TEST(1,1) && _ARR_TEST(1,2) && _ARR_TEST(1,3) && _ARR_TEST(1,4) && _ARR_TEST(1,5) && _ARR_TEST(1,6) && _ARR_TEST(1,7) && _ARR_TEST(1,8), "DEFAULT_AXIS_STEPS_PER_UNIT values must be positive."); -static_assert(COUNT(sanity_arr_2) >= XYZE, "DEFAULT_MAX_FEEDRATE requires X, Y, Z and E elements."); +static_assert(COUNT(sanity_arr_2) >= XYZE, "DEFAULT_MAX_FEEDRATE requires X, Y, Z and E elements."); static_assert(COUNT(sanity_arr_2) <= XYZE_N, "DEFAULT_MAX_FEEDRATE has too many elements. (Did you forget to enable DISTINCT_E_FACTORS?)"); static_assert( _ARR_TEST(2,0) && _ARR_TEST(2,1) && _ARR_TEST(2,2) && _ARR_TEST(2,3) && _ARR_TEST(2,4) && _ARR_TEST(2,5) && _ARR_TEST(2,6) && _ARR_TEST(2,7) && _ARR_TEST(2,8), "DEFAULT_MAX_FEEDRATE values must be positive."); -static_assert(COUNT(sanity_arr_3) >= XYZE, "DEFAULT_MAX_ACCELERATION requires X, Y, Z and E elements."); +static_assert(COUNT(sanity_arr_3) >= XYZE, "DEFAULT_MAX_ACCELERATION requires X, Y, Z and E elements."); static_assert(COUNT(sanity_arr_3) <= XYZE_N, "DEFAULT_MAX_ACCELERATION has too many elements. (Did you forget to enable DISTINCT_E_FACTORS?)"); static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2) && _ARR_TEST(3,3) && _ARR_TEST(3,4) && _ARR_TEST(3,5) && _ARR_TEST(3,6) && _ARR_TEST(3,7) && _ARR_TEST(3,8), "DEFAULT_MAX_ACCELERATION values must be positive."); +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #ifdef MAX_ACCEL_EDIT_VALUES + constexpr float sanity_arr_4[] = MAX_ACCEL_EDIT_VALUES; + static_assert(COUNT(sanity_arr_4) >= XYZE, "MAX_ACCEL_EDIT_VALUES requires X, Y, Z and E elements."); + static_assert(COUNT(sanity_arr_4) <= XYZE, "MAX_ACCEL_EDIT_VALUES has too many elements. X, Y, Z and E elements only."); + static_assert( _ARR_TEST(4,0) && _ARR_TEST(4,1) && _ARR_TEST(4,2) + && _ARR_TEST(4,3) && _ARR_TEST(4,4) && _ARR_TEST(4,5) + && _ARR_TEST(4,6) && _ARR_TEST(4,7) && _ARR_TEST(4,8), + "MAX_ACCEL_EDIT_VALUES values must be positive."); + #endif +#endif + +#if ENABLED(LIMITED_MAX_FR_EDITING) + #ifdef MAX_FEEDRATE_EDIT_VALUES + constexpr float sanity_arr_5[] = MAX_FEEDRATE_EDIT_VALUES; + static_assert(COUNT(sanity_arr_5) >= XYZE, "MAX_FEEDRATE_EDIT_VALUES requires X, Y, Z and E elements."); + static_assert(COUNT(sanity_arr_5) <= XYZE, "MAX_FEEDRATE_EDIT_VALUES has too many elements. X, Y, Z and E elements only."); + static_assert( _ARR_TEST(5,0) && _ARR_TEST(5,1) && _ARR_TEST(5,2) + && _ARR_TEST(5,3) && _ARR_TEST(5,4) && _ARR_TEST(5,5) + && _ARR_TEST(5,6) && _ARR_TEST(5,7) && _ARR_TEST(5,8), + "MAX_FEEDRATE_EDIT_VALUES values must be positive."); + #endif +#endif + +#if ENABLED(LIMITED_JERK_EDITING) + #ifdef MAX_JERK_EDIT_VALUES + constexpr float sanity_arr_6[] = MAX_JERK_EDIT_VALUES; + static_assert(COUNT(sanity_arr_6) >= XYZE, "MAX_JERK_EDIT_VALUES requires X, Y, Z and E elements."); + static_assert(COUNT(sanity_arr_6) <= XYZE, "MAX_JERK_EDIT_VALUES has too many elements. X, Y, Z and E elements only."); + static_assert( _ARR_TEST(6,0) && _ARR_TEST(6,1) && _ARR_TEST(6,2) + && _ARR_TEST(6,3) && _ARR_TEST(6,4) && _ARR_TEST(6,5) + && _ARR_TEST(6,6) && _ARR_TEST(6,7) && _ARR_TEST(6,8), + "MAX_JERK_EDIT_VALUES values must be positive."); + #endif +#endif + #undef _ARR_TEST #if BOTH(CNC_COORDINATE_SYSTEMS, NO_WORKSPACE_OFFSETS) diff --git a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp index bf8ca61f3aa9..5e7377e1a077 100644 --- a/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp +++ b/Marlin/src/lcd/extensible_ui/lib/lulzbot/ftdi_eve_lib/extended/dl_cache.cpp @@ -115,12 +115,12 @@ bool DLCache::store(uint32_t num_bytes /* = 0*/) { // If we are allocating new space... dl_addr = CLCD::mem_read_32(DL_FREE_ADDR); free_space = MAP::RAM_G_SIZE - dl_addr; - dl_alloc = num_bytes ? num_bytes : new_dl_size; + dl_alloc = num_bytes ?: new_dl_size; dl_size = new_dl_size; } else { // Otherwise, we can only store as much space // as was previously allocated. - free_space = num_bytes ? num_bytes : dl_size; + free_space = num_bytes ?: dl_size; dl_alloc = 0; dl_size = new_dl_size; } diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp index 1c6c1e0618d9..b70a90b89d3a 100644 --- a/Marlin/src/lcd/extensible_ui/ui_api.cpp +++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp @@ -577,12 +577,11 @@ namespace ExtUI { } void setAxisMaxFeedrate_mm_s(const feedRate_t value, const axis_t axis) { - planner.settings.max_feedrate_mm_s[axis] = value; + planner.set_max_feedrate(axis, value); } void setAxisMaxFeedrate_mm_s(const feedRate_t value, const extruder_t extruder) { - UNUSED_E(extruder); - planner.settings.max_feedrate_mm_s[E_AXIS_N(axis - E0)] = value; + planner.set_max_feedrate(E_AXIS_N(extruder - E0), value); } float getAxisMaxAcceleration_mm_s2(const axis_t axis) { @@ -595,12 +594,11 @@ namespace ExtUI { } void setAxisMaxAcceleration_mm_s2(const float value, const axis_t axis) { - planner.settings.max_acceleration_mm_per_s2[axis] = value; + planner.set_max_acceleration(axis, value); } void setAxisMaxAcceleration_mm_s2(const float value, const extruder_t extruder) { - UNUSED_E(extruder); - planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(extruder - E0)] = value; + planner.set_max_acceleration(E_AXIS_N(extruder - E0), value); } #if HAS_FILAMENT_SENSOR @@ -648,11 +646,11 @@ namespace ExtUI { } void setAxisMaxJerk_mm_s(const float value, const axis_t axis) { - planner.max_jerk[axis] = value; + planner.set_max_jerk((AxisEnum)axis, value); } void setAxisMaxJerk_mm_s(const float value, const extruder_t) { - planner.max_jerk.e = value; + planner.set_max_jerk(E_AXIS, value); } #endif diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp index 1d5f728c19ff..9be24e2c0a36 100644 --- a/Marlin/src/lcd/menu/menu_advanced.cpp +++ b/Marlin/src/lcd/menu/menu_advanced.cpp @@ -453,14 +453,28 @@ void menu_backlash(); MENU_BACK(MSG_ADVANCED_SETTINGS); // M203 Max Feedrate - #define EDIT_VMAX(N) MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_##N, &planner.settings.max_feedrate_mm_s[_AXIS(N)], 1, 999) + constexpr xyze_feedrate_t max_fr_edit = + #ifdef MAX_FEEDRATE_EDIT_VALUES + MAX_FEEDRATE_EDIT_VALUES + #elif ENABLED(LIMITED_MAX_FR_EDITING) + DEFAULT_MAX_FEEDRATE + #else + { 999, 999, 999, 999 } + #endif + ; + #if ENABLED(LIMITED_MAX_FR_EDITING) && !defined(MAX_FEEDRATE_EDIT_VALUES) + const xyze_feedrate_t max_fr_edit_scaled = max_fr_edit * 2; + #else + const xyze_feedrate_t &max_fr_edit_scaled = max_fr_edit; + #endif + #define EDIT_VMAX(N) MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_##N, &planner.settings.max_feedrate_mm_s[_AXIS(N)], 1, max_fr_edit_scaled[_AXIS(N)]) EDIT_VMAX(A); EDIT_VMAX(B); EDIT_VMAX(C); #if ENABLED(DISTINCT_E_FACTORS) - #define EDIT_VMAX_E(N) MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E##N, &planner.settings.max_feedrate_mm_s[E_AXIS_N(N-1)], 1, 999) - MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E, &planner.settings.max_feedrate_mm_s[E_AXIS_N(active_extruder)], 1, 999); + #define EDIT_VMAX_E(N) MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E##N, &planner.settings.max_feedrate_mm_s[E_AXIS_N(N-1)], 1, max_fr_edit_scaled.e) + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E, &planner.settings.max_feedrate_mm_s[E_AXIS_N(active_extruder)], 1, max_fr_edit_scaled.e); EDIT_VMAX_E(1); EDIT_VMAX_E(2); #if E_STEPPERS > 2 @@ -476,7 +490,7 @@ void menu_backlash(); #endif // E_STEPPERS > 3 #endif // E_STEPPERS > 2 #elif E_STEPPERS - MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E, &planner.settings.max_feedrate_mm_s[E_AXIS], 1, 999); + MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E, &planner.settings.max_feedrate_mm_s[E_AXIS], 1, max_fr_edit_scaled.e); #endif // M205 S Min Feedrate @@ -493,25 +507,41 @@ void menu_backlash(); START_MENU(); MENU_BACK(MSG_ADVANCED_SETTINGS); + static float max_accel = _MAX(planner.settings.max_acceleration_mm_per_s2[A_AXIS], planner.settings.max_acceleration_mm_per_s2[B_AXIS], planner.settings.max_acceleration_mm_per_s2[C_AXIS]); // M204 P Acceleration - MENU_MULTIPLIER_ITEM_EDIT(float5_25, MSG_ACC, &planner.settings.acceleration, 25, 99000); + MENU_MULTIPLIER_ITEM_EDIT(float5_25, MSG_ACC, &planner.settings.acceleration, 25, max_accel); // M204 R Retract Acceleration - MENU_MULTIPLIER_ITEM_EDIT(float5, MSG_A_RETRACT, &planner.settings.retract_acceleration, 100, 99000); + MENU_MULTIPLIER_ITEM_EDIT(float5, MSG_A_RETRACT, &planner.settings.retract_acceleration, 100, max_accel); // M204 T Travel Acceleration - MENU_MULTIPLIER_ITEM_EDIT(float5_25, MSG_A_TRAVEL, &planner.settings.travel_acceleration, 25, 99000); + MENU_MULTIPLIER_ITEM_EDIT(float5_25, MSG_A_TRAVEL, &planner.settings.travel_acceleration, 25, max_accel); // M201 settings - #define EDIT_AMAX(Q,L) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5_25, MSG_AMAX MSG_##Q, &planner.settings.max_acceleration_mm_per_s2[_AXIS(Q)], L, 99000, _reset_acceleration_rates) + constexpr xyze_ulong_t max_accel_edit = + #ifdef MAX_ACCEL_EDIT_VALUES + MAX_ACCEL_EDIT_VALUES + #elif ENABLED(LIMITED_MAX_ACCEL_EDITING) + DEFAULT_MAX_ACCELERATION + #else + { 99000, 99000, 99000, 99000 } + #endif + ; + #if ENABLED(LIMITED_MAX_ACCEL_EDITING) && !defined(MAX_ACCEL_EDIT_VALUES) + const xyze_ulong_t max_accel_edit_scaled = max_accel_edit * 2; + #else + const xyze_ulong_t &max_accel_edit_scaled = max_accel_edit; + #endif + + #define EDIT_AMAX(Q,L) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5_25, MSG_AMAX MSG_##Q, &planner.settings.max_acceleration_mm_per_s2[_AXIS(Q)], L, max_accel_edit_scaled[_AXIS(Q)], _reset_acceleration_rates) EDIT_AMAX(A,100); EDIT_AMAX(B,100); EDIT_AMAX(C, 10); #if ENABLED(DISTINCT_E_FACTORS) - #define EDIT_AMAX_E(N,E) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_E##N, &planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(E)], 100, 99000, _reset_e##E##_acceleration_rate) - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_E, &planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(active_extruder)], 100, 99000, _reset_acceleration_rates); + #define EDIT_AMAX_E(N,E) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5_25, MSG_AMAX MSG_E##N, &planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(E)], 100, max_accel_edit_scaled.e, _reset_e##E##_acceleration_rate) + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5_25, MSG_AMAX MSG_E, &planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(active_extruder)], 100, max_accel_edit_scaled.e, _reset_acceleration_rates); EDIT_AMAX_E(1,0); EDIT_AMAX_E(2,1); #if E_STEPPERS > 2 @@ -527,7 +557,7 @@ void menu_backlash(); #endif // E_STEPPERS > 3 #endif // E_STEPPERS > 2 #elif E_STEPPERS - MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_E, &planner.settings.max_acceleration_mm_per_s2[E_AXIS], 100, 99000, _reset_acceleration_rates); + MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5_25, MSG_AMAX MSG_E, &planner.settings.max_acceleration_mm_per_s2[E_AXIS], 100, max_accel_edit_scaled.e, _reset_acceleration_rates); #endif END_MENU(); @@ -546,16 +576,25 @@ void menu_backlash(); #endif #endif #if HAS_CLASSIC_JERK - #define EDIT_JERK(N) MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_V##N##_JERK, &planner.max_jerk[_AXIS(N)], 1, 990) + constexpr xyze_float_t max_jerk_edit = + #ifdef MAX_ACCEL_EDIT_VALUES + MAX_JERK_EDIT_VALUES + #elif ENABLED(LIMITED_JERK_EDITING) + { (DEFAULT_XJERK) * 2, (DEFAULT_YJERK) * 2, (DEFAULT_ZJERK) * 2, (DEFAULT_EJERK) * 2 } + #else + { 990, 990, 990, 990 } + #endif + ; + #define EDIT_JERK(N) MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_V##N##_JERK, &planner.max_jerk[_AXIS(N)], 1, max_jerk_edit[_AXIS(N)]) EDIT_JERK(A); EDIT_JERK(B); #if ENABLED(DELTA) EDIT_JERK(C); #else - MENU_MULTIPLIER_ITEM_EDIT(float52sign, MSG_VC_JERK, &planner.max_jerk.c, 0.1f, 990); + MENU_MULTIPLIER_ITEM_EDIT(float52sign, MSG_VC_JERK, &planner.max_jerk.c, 0.1f, max_jerk_edit.c); #endif #if !BOTH(JUNCTION_DEVIATION, LIN_ADVANCE) - EDIT_JERK(E); + MENU_MULTIPLIER_ITEM_EDIT(float52sign, MSG_VE_JERK, &planner.max_jerk.e, 0.1f, max_jerk_edit.e); #endif #endif diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index 95b99d8d3bdf..1abc5692c614 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -344,8 +344,8 @@ void _internal_move_to_destination(const feedRate_t &fr_mm_s/*=0.0f*/ void do_blocking_move_to(const float rx, const float ry, const float rz, const feedRate_t &fr_mm_s/*=0.0*/) { if (DEBUGGING(LEVELING)) DEBUG_XYZ(">>> do_blocking_move_to", rx, ry, rz); - const feedRate_t z_feedrate = fr_mm_s ? fr_mm_s : homing_feedrate(Z_AXIS), - xy_feedrate = fr_mm_s ? fr_mm_s : feedRate_t(XY_PROBE_FEEDRATE_MM_S); + const feedRate_t z_feedrate = fr_mm_s ?: homing_feedrate(Z_AXIS), + xy_feedrate = fr_mm_s ?: feedRate_t(XY_PROBE_FEEDRATE_MM_S); #if ENABLED(DELTA) @@ -1255,7 +1255,7 @@ void do_homing_move(const AxisEnum axis, const float distance, const feedRate_t #endif } - const feedRate_t real_fr_mm_s = fr_mm_s ? fr_mm_s : homing_feedrate(axis); + const feedRate_t real_fr_mm_s = fr_mm_s ?: homing_feedrate(axis); #if IS_SCARA // Tell the planner the axis is at 0 current_position[axis] = 0; diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 8d488e1f9857..62747af431d5 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -2653,7 +2653,7 @@ bool Planner::buffer_line(const float &rx, const float &ry, const float &rz, con #if ENABLED(SCARA_FEEDRATE_SCALING) // For SCARA scale the feed rate from mm/s to degrees/s // i.e., Complete the angular vector in the given time. - const float duration_recip = inv_duration ? inv_duration : fr_mm_s / mm; + const float duration_recip = inv_duration ?: fr_mm_s / mm; const feedRate_t feedrate = HYPOT(delta.a - position_float.a, delta.b - position_float.b) * duration_recip; #else const feedRate_t feedrate = fr_mm_s; @@ -2772,6 +2772,68 @@ void Planner::refresh_positioning() { reset_acceleration_rates(); } +inline void limit_and_warn(float &val, const uint8_t axis, PGM_P const setting_name, const xyze_float_t &max_limit) { + const uint8_t lim_axis = axis > E_AXIS ? E_AXIS : axis; + const float before = val; + LIMIT(val, 1, max_limit[lim_axis]); + if (before != val) { + SERIAL_CHAR(axis_codes[lim_axis]); + SERIAL_ECHOPGM(" Max "); + serialprintPGM(setting_name); + SERIAL_ECHOLNPAIR(" limited to ", val); + } +} + +void Planner::set_max_acceleration(const uint8_t axis, float targetValue) { + #if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #ifdef MAX_ACCEL_EDIT_VALUES + constexpr xyze_float_t max_accel_edit = MAX_ACCEL_EDIT_VALUES; + const xyze_float_t &max_acc_edit_scaled = max_accel_edit; + #else + constexpr xyze_float_t max_accel_edit = DEFAULT_MAX_ACCELERATION, + max_acc_edit_scaled = max_accel_edit * 2; + #endif + limit_and_warn(targetValue, axis, PSTR("Acceleration"), max_acc_edit_scaled); + #endif + settings.max_acceleration_mm_per_s2[axis] = targetValue; + + // Update steps per s2 to agree with the units per s2 (since they are used in the planner) + reset_acceleration_rates(); +} + +void Planner::set_max_feedrate(const uint8_t axis, float targetValue) { + #if ENABLED(LIMITED_MAX_FR_EDITING) + #ifdef MAX_FEEDRATE_EDIT_VALUES + constexpr xyze_float_t max_fr_edit = MAX_FEEDRATE_EDIT_VALUES; + const xyze_float_t &max_fr_edit_scaled = max_fr_edit; + #else + constexpr xyze_float_t max_fr_edit = DEFAULT_MAX_FEEDRATE, + max_fr_edit_scaled = max_fr_edit * 2; + #endif + limit_and_warn(targetValue, axis, PSTR("Feedrate"), max_fr_edit_scaled); + #endif + settings.max_feedrate_mm_s[axis] = targetValue; +} + +void Planner::set_max_jerk(const AxisEnum axis, float targetValue) { + #if HAS_CLASSIC_JERK + #if ENABLED(LIMITED_JERK_EDITING) + constexpr xyze_float_t max_jerk_edit = + #ifdef MAX_JERK_EDIT_VALUES + MAX_JERK_EDIT_VALUES + #else + { (DEFAULT_XJERK) * 2, (DEFAULT_YJERK) * 2, + (DEFAULT_ZJERK) * 2, (DEFAULT_EJERK) * 2 } + #endif + ; + limit_and_warn(targetValue, axis, PSTR("Jerk"), max_jerk_edit); + #endif + max_jerk[axis] = targetValue; + #else + UNUSED(axis); UNUSED(targetValue); + #endif +} + #if ENABLED(AUTOTEMP) void Planner::autotemp_M104_M109() { diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h index 55ccae85a3ed..e547ead80f94 100644 --- a/Marlin/src/module/planner.h +++ b/Marlin/src/module/planner.h @@ -358,6 +358,10 @@ class Planner { static void reset_acceleration_rates(); static void refresh_positioning(); + static void set_max_acceleration(const uint8_t axis, float targetValue); + static void set_max_feedrate(const uint8_t axis, float targetValue); + static void set_max_jerk(const AxisEnum axis, float targetValue); + #if EXTRUDERS FORCE_INLINE static void refresh_e_factor(const uint8_t e) { diff --git a/config/default/Configuration.h b/config/default/Configuration.h index 16f1ca68005c..812df3c2082c 100644 --- a/config/default/Configuration.h +++ b/config/default/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/3DFabXYZ/Migbot/Configuration.h b/config/examples/3DFabXYZ/Migbot/Configuration.h index 02e2735ec095..35e3902c5ebd 100644 --- a/config/examples/3DFabXYZ/Migbot/Configuration.h +++ b/config/examples/3DFabXYZ/Migbot/Configuration.h @@ -731,6 +731,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 225, 225, 3, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -739,6 +744,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1590, 1590, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -777,6 +787,11 @@ #define DEFAULT_XJERK 8.0 #define DEFAULT_YJERK 8.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/ADIMLab/Gantry v2/Configuration.h b/config/examples/ADIMLab/Gantry v2/Configuration.h index 9be12ff0cad7..6f2fa2531060 100644 --- a/config/examples/ADIMLab/Gantry v2/Configuration.h +++ b/config/examples/ADIMLab/Gantry v2/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/AlephObjects/TAZ4/Configuration.h b/config/examples/AlephObjects/TAZ4/Configuration.h index 777eb8e5ff48..399a83b9aa71 100644 --- a/config/examples/AlephObjects/TAZ4/Configuration.h +++ b/config/examples/AlephObjects/TAZ4/Configuration.h @@ -745,6 +745,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 800, 800, 8, 50 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -753,6 +758,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -791,6 +801,11 @@ #define DEFAULT_XJERK 8.0 #define DEFAULT_YJERK 8.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 10.0 // May be used by Linear Advance diff --git a/config/examples/AliExpress/CL-260/Configuration.h b/config/examples/AliExpress/CL-260/Configuration.h index 342b6b94ee77..1d866b5364d6 100644 --- a/config/examples/AliExpress/CL-260/Configuration.h +++ b/config/examples/AliExpress/CL-260/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/AliExpress/UM2pExt/Configuration.h b/config/examples/AliExpress/UM2pExt/Configuration.h index d24c75cdc92a..e16820294633 100644 --- a/config/examples/AliExpress/UM2pExt/Configuration.h +++ b/config/examples/AliExpress/UM2pExt/Configuration.h @@ -736,6 +736,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 40, 45} +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -744,6 +749,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -782,6 +792,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Anet/A2/Configuration.h b/config/examples/Anet/A2/Configuration.h index 1a6c4b37f014..4c6d0c311902 100644 --- a/config/examples/Anet/A2/Configuration.h +++ b/config/examples/Anet/A2/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Anet/A2plus/Configuration.h b/config/examples/Anet/A2plus/Configuration.h index 8ef0e7b11b25..8b4eb85b1096 100644 --- a/config/examples/Anet/A2plus/Configuration.h +++ b/config/examples/Anet/A2plus/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Anet/A6/Configuration.h b/config/examples/Anet/A6/Configuration.h index 8122d4cd19c7..e0f1b0e81ecf 100644 --- a/config/examples/Anet/A6/Configuration.h +++ b/config/examples/Anet/A6/Configuration.h @@ -756,6 +756,11 @@ //#define DEFAULT_MAX_FEEDRATE { 400, 400, 20, 50 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -769,6 +774,11 @@ #define DEFAULT_MAX_ACCELERATION { 9000, 5000, 50, 10000 } //#define DEFAULT_MAX_ACCELERATION { 10000, 10000, 200, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -818,6 +828,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Anet/A8/Configuration.h b/config/examples/Anet/A8/Configuration.h index eeae0493e36c..f4aefa1bd6ff 100644 --- a/config/examples/Anet/A8/Configuration.h +++ b/config/examples/Anet/A8/Configuration.h @@ -738,6 +738,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 400, 400, 8, 50 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -746,6 +751,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -784,6 +794,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Anet/A8plus/Configuration.h b/config/examples/Anet/A8plus/Configuration.h index 06aee7111b2a..fc11bbcf54eb 100644 --- a/config/examples/Anet/A8plus/Configuration.h +++ b/config/examples/Anet/A8plus/Configuration.h @@ -736,6 +736,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 400, 400, 50, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -744,6 +749,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -782,6 +792,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Anet/E16/Configuration.h b/config/examples/Anet/E16/Configuration.h index 487ab36a57e8..83e1ffdfeab0 100644 --- a/config/examples/Anet/E16/Configuration.h +++ b/config/examples/Anet/E16/Configuration.h @@ -737,6 +737,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 50, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -745,6 +750,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -783,6 +793,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/AnyCubic/i3/Configuration.h b/config/examples/AnyCubic/i3/Configuration.h index e5f96e0d975b..888404d93c68 100644 --- a/config/examples/AnyCubic/i3/Configuration.h +++ b/config/examples/AnyCubic/i3/Configuration.h @@ -735,6 +735,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 6, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -743,6 +748,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1500, 1500, 50, 8000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -781,6 +791,11 @@ #define DEFAULT_XJERK 5.0 #define DEFAULT_YJERK 2.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 2.0 // May be used by Linear Advance diff --git a/config/examples/ArmEd/Configuration.h b/config/examples/ArmEd/Configuration.h index 05436cb482de..82f704d68e51 100644 --- a/config/examples/ArmEd/Configuration.h +++ b/config/examples/ArmEd/Configuration.h @@ -726,6 +726,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 20, 120 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -734,6 +739,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1000, 1000, 1000, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -772,6 +782,11 @@ #define DEFAULT_XJERK 8.0 #define DEFAULT_YJERK 8.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 1.5 // May be used by Linear Advance diff --git a/config/examples/Azteeg/X5GT/Configuration.h b/config/examples/Azteeg/X5GT/Configuration.h index 12574f07b883..5973aacf0142 100644 --- a/config/examples/Azteeg/X5GT/Configuration.h +++ b/config/examples/Azteeg/X5GT/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/BIBO/TouchX/cyclops/Configuration.h b/config/examples/BIBO/TouchX/cyclops/Configuration.h index e9995f707a68..13653232a40a 100644 --- a/config/examples/BIBO/TouchX/cyclops/Configuration.h +++ b/config/examples/BIBO/TouchX/cyclops/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 350, 350, 10, 50 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1100, 1100, 300, 2500 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 7.0 #define DEFAULT_YJERK 7.0 #define DEFAULT_ZJERK 0.65 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/BIBO/TouchX/default/Configuration.h b/config/examples/BIBO/TouchX/default/Configuration.h index 3cde043a460d..84a0e7339823 100644 --- a/config/examples/BIBO/TouchX/default/Configuration.h +++ b/config/examples/BIBO/TouchX/default/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 350, 350, 10, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1100, 1100, 300, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 7.0 #define DEFAULT_YJERK 7.0 #define DEFAULT_ZJERK 0.65 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/BQ/Hephestos/Configuration.h b/config/examples/BQ/Hephestos/Configuration.h index 045c0698d512..f46c658b39df 100644 --- a/config/examples/BQ/Hephestos/Configuration.h +++ b/config/examples/BQ/Hephestos/Configuration.h @@ -713,6 +713,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 200, 200, 3.3, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -721,6 +726,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1100, 1100, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -759,6 +769,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/BQ/Hephestos_2/Configuration.h b/config/examples/BQ/Hephestos_2/Configuration.h index ae0d1771e0c7..ef279aae1a30 100644 --- a/config/examples/BQ/Hephestos_2/Configuration.h +++ b/config/examples/BQ/Hephestos_2/Configuration.h @@ -726,6 +726,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 3, 120 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -734,6 +739,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 3000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -772,6 +782,11 @@ #define DEFAULT_XJERK 5.0 #define DEFAULT_YJERK 5.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 10.0 // May be used by Linear Advance diff --git a/config/examples/BQ/WITBOX/Configuration.h b/config/examples/BQ/WITBOX/Configuration.h index 520538fb870e..b7f85734c8b4 100644 --- a/config/examples/BQ/WITBOX/Configuration.h +++ b/config/examples/BQ/WITBOX/Configuration.h @@ -713,6 +713,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 350, 350, 7.2, 80 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -721,6 +726,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1000, 1000, 10, 1000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -759,6 +769,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Cartesio/Configuration.h b/config/examples/Cartesio/Configuration.h index 2a059914abb6..ad89d52692ec 100644 --- a/config/examples/Cartesio/Configuration.h +++ b/config/examples/Cartesio/Configuration.h @@ -724,6 +724,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 200, 200, 20, 20 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -732,6 +737,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1000, 1000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -770,6 +780,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Creality/CR-10/Configuration.h b/config/examples/Creality/CR-10/Configuration.h index f107cfcfbb96..b2ca77a64c86 100644 --- a/config/examples/Creality/CR-10/Configuration.h +++ b/config/examples/Creality/CR-10/Configuration.h @@ -735,6 +735,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 15, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -743,6 +748,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -781,6 +791,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 2.7 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Creality/CR-10S/Configuration.h b/config/examples/Creality/CR-10S/Configuration.h index 30904e3d1a45..a67d84f5aedf 100644 --- a/config/examples/Creality/CR-10S/Configuration.h +++ b/config/examples/Creality/CR-10S/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 2500, 2500, 100, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Creality/CR-10_5S/Configuration.h b/config/examples/Creality/CR-10_5S/Configuration.h index 03037f5a8a79..d6e607ec68bf 100644 --- a/config/examples/Creality/CR-10_5S/Configuration.h +++ b/config/examples/Creality/CR-10_5S/Configuration.h @@ -726,6 +726,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -734,6 +739,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 300, 300, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -772,6 +782,11 @@ #define DEFAULT_XJERK 5.0 #define DEFAULT_YJERK 5.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Creality/CR-10mini/Configuration.h b/config/examples/Creality/CR-10mini/Configuration.h index f6124787b00e..fc1c263fd995 100644 --- a/config/examples/Creality/CR-10mini/Configuration.h +++ b/config/examples/Creality/CR-10mini/Configuration.h @@ -744,6 +744,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 15, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -752,6 +757,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -790,6 +800,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Creality/CR-20 Pro/Configuration.h b/config/examples/Creality/CR-20 Pro/Configuration.h index c7962db10095..b35b01ecc1dc 100644 --- a/config/examples/Creality/CR-20 Pro/Configuration.h +++ b/config/examples/Creality/CR-20 Pro/Configuration.h @@ -729,6 +729,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -737,6 +742,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -775,6 +785,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Creality/CR-20/Configuration.h b/config/examples/Creality/CR-20/Configuration.h index d1166cb47553..1dd23bcfaeaa 100644 --- a/config/examples/Creality/CR-20/Configuration.h +++ b/config/examples/Creality/CR-20/Configuration.h @@ -729,6 +729,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -737,6 +742,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -775,6 +785,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Creality/CR-8/Configuration.h b/config/examples/Creality/CR-8/Configuration.h index 571758dbdeba..a45e9ef3e204 100644 --- a/config/examples/Creality/CR-8/Configuration.h +++ b/config/examples/Creality/CR-8/Configuration.h @@ -735,6 +735,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -743,6 +748,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -781,6 +791,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Creality/Ender-2/Configuration.h b/config/examples/Creality/Ender-2/Configuration.h index 4ffdada6b45c..6809a71e1f38 100644 --- a/config/examples/Creality/Ender-2/Configuration.h +++ b/config/examples/Creality/Ender-2/Configuration.h @@ -729,6 +729,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -737,6 +742,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -775,6 +785,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Creality/Ender-3/Configuration.h b/config/examples/Creality/Ender-3/Configuration.h index a0c7888788cf..8d47f2ac19cf 100644 --- a/config/examples/Creality/Ender-3/Configuration.h +++ b/config/examples/Creality/Ender-3/Configuration.h @@ -729,6 +729,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -737,6 +742,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -775,6 +785,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Creality/Ender-4/Configuration.h b/config/examples/Creality/Ender-4/Configuration.h index 3015b746908e..bfa75df800a9 100644 --- a/config/examples/Creality/Ender-4/Configuration.h +++ b/config/examples/Creality/Ender-4/Configuration.h @@ -735,6 +735,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 15, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -743,6 +748,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -781,6 +791,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 2.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Creality/Ender-5/Configuration.h b/config/examples/Creality/Ender-5/Configuration.h index 204be000bfef..30f249d8a429 100644 --- a/config/examples/Creality/Ender-5/Configuration.h +++ b/config/examples/Creality/Ender-5/Configuration.h @@ -729,6 +729,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -737,6 +742,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -775,6 +785,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Dagoma/Disco Ultimate/Configuration.h b/config/examples/Dagoma/Disco Ultimate/Configuration.h index 732cce94c723..45206093b9a7 100644 --- a/config/examples/Dagoma/Disco Ultimate/Configuration.h +++ b/config/examples/Dagoma/Disco Ultimate/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 4, 170 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 1000, 20, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 20 #define DEFAULT_YJERK 20 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h index e9224face559..f6e2a7252d88 100755 --- a/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h +++ b/config/examples/EVNOVO (Artillery)/Sidewinder X1/Configuration.h @@ -730,6 +730,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 50, 40 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -738,6 +743,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -776,6 +786,11 @@ #define DEFAULT_XJERK 8.0 #define DEFAULT_YJERK 8.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Einstart-S/Configuration.h b/config/examples/Einstart-S/Configuration.h index 255b3b620072..21704ba35fea 100644 --- a/config/examples/Einstart-S/Configuration.h +++ b/config/examples/Einstart-S/Configuration.h @@ -735,6 +735,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -743,6 +748,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -781,6 +791,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/FYSETC/AIO_II/Configuration.h b/config/examples/FYSETC/AIO_II/Configuration.h index a9c1d3482919..c78a0112650f 100644 --- a/config/examples/FYSETC/AIO_II/Configuration.h +++ b/config/examples/FYSETC/AIO_II/Configuration.h @@ -730,6 +730,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -738,6 +743,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -776,6 +786,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h index 7bb62ab321f3..0d6c7a484ff2 100644 --- a/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h +++ b/config/examples/FYSETC/Cheetah 1.2/BLTouch/Configuration.h @@ -730,6 +730,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -738,6 +743,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -776,6 +786,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h b/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h index be0410520425..1ba643fe78bc 100644 --- a/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h +++ b/config/examples/FYSETC/Cheetah 1.2/base/Configuration.h @@ -730,6 +730,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -738,6 +743,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -776,6 +786,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h b/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h index 39b146d9da17..cb6f65564989 100644 --- a/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h +++ b/config/examples/FYSETC/Cheetah/BLTouch/Configuration.h @@ -730,6 +730,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -738,6 +743,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -776,6 +786,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/FYSETC/Cheetah/base/Configuration.h b/config/examples/FYSETC/Cheetah/base/Configuration.h index 67fbd1ed3077..2f52760cdeee 100644 --- a/config/examples/FYSETC/Cheetah/base/Configuration.h +++ b/config/examples/FYSETC/Cheetah/base/Configuration.h @@ -730,6 +730,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -738,6 +743,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -776,6 +786,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/FYSETC/F6_13/Configuration.h b/config/examples/FYSETC/F6_13/Configuration.h index 3c0eeaee0ed0..66e52cef8fa5 100644 --- a/config/examples/FYSETC/F6_13/Configuration.h +++ b/config/examples/FYSETC/F6_13/Configuration.h @@ -727,6 +727,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -735,6 +740,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -773,6 +783,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Felix/Configuration.h b/config/examples/Felix/Configuration.h index f379d63cff32..13e0c63d5715 100644 --- a/config/examples/Felix/Configuration.h +++ b/config/examples/Felix/Configuration.h @@ -707,6 +707,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -715,6 +720,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 5000, 5000, 100, 80000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -753,6 +763,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Felix/DUAL/Configuration.h b/config/examples/Felix/DUAL/Configuration.h index 9adfb27ad24b..21de2bf084eb 100644 --- a/config/examples/Felix/DUAL/Configuration.h +++ b/config/examples/Felix/DUAL/Configuration.h @@ -707,6 +707,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -715,6 +720,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 5000, 5000, 100, 80000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -753,6 +763,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/FlashForge/CreatorPro/Configuration.h b/config/examples/FlashForge/CreatorPro/Configuration.h index d8000b4d4adb..60b01cbf7b24 100644 --- a/config/examples/FlashForge/CreatorPro/Configuration.h +++ b/config/examples/FlashForge/CreatorPro/Configuration.h @@ -717,6 +717,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 250, 250, 20, 100 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -725,6 +730,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1000, 1000, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -763,6 +773,11 @@ #define DEFAULT_XJERK 20.0 #define DEFAULT_YJERK 20.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 2.0 // May be used by Linear Advance diff --git a/config/examples/FolgerTech/i3-2020/Configuration.h b/config/examples/FolgerTech/i3-2020/Configuration.h index 4960cd50b856..6276252c1879 100644 --- a/config/examples/FolgerTech/i3-2020/Configuration.h +++ b/config/examples/FolgerTech/i3-2020/Configuration.h @@ -731,6 +731,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 250, 250, 2, 17 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -739,6 +744,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1000, 1000, 4, 750 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -777,6 +787,11 @@ #define DEFAULT_XJERK 8.5 #define DEFAULT_YJERK 8.5 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 4.0 // May be used by Linear Advance diff --git a/config/examples/Formbot/Raptor/Configuration.h b/config/examples/Formbot/Raptor/Configuration.h index fad911678a9e..9397fc3f7136 100644 --- a/config/examples/Formbot/Raptor/Configuration.h +++ b/config/examples/Formbot/Raptor/Configuration.h @@ -781,6 +781,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 250, 150, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -808,6 +813,11 @@ #endif #define DEFAULT_MAX_ACCELERATION { X_ACCEL, Y_ACCEL, 400, 4000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -854,6 +864,11 @@ #define DEFAULT_YJERK 5.0 #endif #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Formbot/T_Rex_2+/Configuration.h b/config/examples/Formbot/T_Rex_2+/Configuration.h index 583f6d0336e9..3d230a6ae7e1 100644 --- a/config/examples/Formbot/T_Rex_2+/Configuration.h +++ b/config/examples/Formbot/T_Rex_2+/Configuration.h @@ -754,6 +754,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 200, 100, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -762,6 +767,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1500, 500, 400, 4000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -800,6 +810,11 @@ #define DEFAULT_XJERK 12.0 // More conservative numbers. #define DEFAULT_YJERK 8.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Formbot/T_Rex_3/Configuration.h b/config/examples/Formbot/T_Rex_3/Configuration.h index df29a67c067c..ca26b691b460 100644 --- a/config/examples/Formbot/T_Rex_3/Configuration.h +++ b/config/examples/Formbot/T_Rex_3/Configuration.h @@ -736,6 +736,11 @@ //#define DEFAULT_MAX_FEEDRATE { 250, 150, 5, 25 } #define DEFAULT_MAX_FEEDRATE { 250, 100, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -744,6 +749,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1500, 500, 400, 4000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -787,6 +797,11 @@ #define DEFAULT_XJERK 12.0 // More conservative numbers. #define DEFAULT_YJERK 8.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Geeetech/A10/Configuration.h b/config/examples/Geeetech/A10/Configuration.h index 51aaa489a873..966f7705840d 100644 --- a/config/examples/Geeetech/A10/Configuration.h +++ b/config/examples/Geeetech/A10/Configuration.h @@ -708,6 +708,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -716,6 +721,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -754,6 +764,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Geeetech/A10M/Configuration.h b/config/examples/Geeetech/A10M/Configuration.h index ab3f25782548..e10226e77d15 100644 --- a/config/examples/Geeetech/A10M/Configuration.h +++ b/config/examples/Geeetech/A10M/Configuration.h @@ -708,6 +708,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -716,6 +721,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -754,6 +764,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Geeetech/A20M/Configuration.h b/config/examples/Geeetech/A20M/Configuration.h index 1bcec7ac72a5..5666c95c4bc4 100644 --- a/config/examples/Geeetech/A20M/Configuration.h +++ b/config/examples/Geeetech/A20M/Configuration.h @@ -708,6 +708,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -716,6 +721,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -754,6 +764,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Geeetech/GT2560/Configuration.h b/config/examples/Geeetech/GT2560/Configuration.h index 44f5939b5e0f..15a4e0da3266 100644 --- a/config/examples/Geeetech/GT2560/Configuration.h +++ b/config/examples/Geeetech/GT2560/Configuration.h @@ -740,6 +740,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 400, 400, 2, 45 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -748,6 +753,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 5000, 5000, 50, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -786,6 +796,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 4.0 // May be used by Linear Advance diff --git a/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h b/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h index 7b26ebec7a65..505fd8d95071 100644 --- a/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h +++ b/config/examples/Geeetech/I3_Pro_X-GT2560/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 400, 400, 2, 45 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 4000, 4000, 40, 4000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 5.0 #define DEFAULT_YJERK 5.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 4.0 // May be used by Linear Advance diff --git a/config/examples/Geeetech/MeCreator2/Configuration.h b/config/examples/Geeetech/MeCreator2/Configuration.h index edfd2c9179a9..009e7767fc18 100644 --- a/config/examples/Geeetech/MeCreator2/Configuration.h +++ b/config/examples/Geeetech/MeCreator2/Configuration.h @@ -732,6 +732,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 250, 250, 400, 45 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -740,6 +745,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 2000, 2000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -778,6 +788,11 @@ #define DEFAULT_XJERK 0 #define DEFAULT_YJERK 0 #define DEFAULT_ZJERK 0.6 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 50.0 // May be used by Linear Advance diff --git a/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h index 02d543fa1bf7..ca340392ccb5 100644 --- a/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro B/bltouch/Configuration.h @@ -745,6 +745,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 400, 400, 2, 45 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -753,6 +758,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 5000, 5000, 75, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -791,6 +801,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h index bae11398aa55..5e8db233442e 100644 --- a/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/Configuration.h @@ -745,6 +745,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 400, 400, 2, 45 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -753,6 +758,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 5000, 5000, 75, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -791,6 +801,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h index 3ad7d31902b4..7aaf2a0de982 100644 --- a/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro C/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h b/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h index c7c00987b038..826a0a71d295 100644 --- a/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h +++ b/config/examples/Geeetech/Prusa i3 Pro W/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/HMS434/Configuration.h b/config/examples/HMS434/Configuration.h index 463585eae22e..c12db6ba26d6 100644 --- a/config/examples/HMS434/Configuration.h +++ b/config/examples/HMS434/Configuration.h @@ -712,6 +712,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 1000, 1000, 40, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -720,6 +725,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 500, 500, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -758,6 +768,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Infitary/i3-M508/Configuration.h b/config/examples/Infitary/i3-M508/Configuration.h index 9f193679103d..26bc486973bb 100644 --- a/config/examples/Infitary/i3-M508/Configuration.h +++ b/config/examples/Infitary/i3-M508/Configuration.h @@ -729,6 +729,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 400, 400, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -737,6 +742,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -775,6 +785,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/JGAurora/A5/Configuration.h b/config/examples/JGAurora/A5/Configuration.h index 8e2c31a08ef9..f8433623eb45 100644 --- a/config/examples/JGAurora/A5/Configuration.h +++ b/config/examples/JGAurora/A5/Configuration.h @@ -737,6 +737,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 15, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -745,6 +750,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1000, 500, 100, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -783,6 +793,11 @@ #define DEFAULT_XJERK 8.0 #define DEFAULT_YJERK 3.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/MakerParts/Configuration.h b/config/examples/MakerParts/Configuration.h index b5ed76af0688..bc14bd070dca 100644 --- a/config/examples/MakerParts/Configuration.h +++ b/config/examples/MakerParts/Configuration.h @@ -745,6 +745,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 2, 30 } // For 300mm/s printing +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -753,6 +758,11 @@ */ #define DEFAULT_MAX_ACCELERATION { MAX_XYAXIS_ACCEL, MAX_XYAXIS_ACCEL, 10, 200 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -791,6 +801,11 @@ #define DEFAULT_XJERK 2.0 #define DEFAULT_YJERK 2.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 8.0 // May be used by Linear Advance diff --git a/config/examples/Malyan/M150/Configuration.h b/config/examples/Malyan/M150/Configuration.h index 25a37e560d3a..3924d0274b65 100644 --- a/config/examples/Malyan/M150/Configuration.h +++ b/config/examples/Malyan/M150/Configuration.h @@ -745,6 +745,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -753,6 +758,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 700, 700, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -791,6 +801,11 @@ #define DEFAULT_XJERK 8.0 #define DEFAULT_YJERK 8.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Malyan/M200/Configuration.h b/config/examples/Malyan/M200/Configuration.h index 179d0cdfa78b..6f0777e19691 100644 --- a/config/examples/Malyan/M200/Configuration.h +++ b/config/examples/Malyan/M200/Configuration.h @@ -724,6 +724,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -732,6 +737,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -770,6 +780,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Micromake/C1/basic/Configuration.h b/config/examples/Micromake/C1/basic/Configuration.h index 93489b0516ef..b6b6c9c4cc90 100644 --- a/config/examples/Micromake/C1/basic/Configuration.h +++ b/config/examples/Micromake/C1/basic/Configuration.h @@ -729,6 +729,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 30 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -737,6 +742,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 3000, 4000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -775,6 +785,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK DEFAULT_XJERK #define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Micromake/C1/enhanced/Configuration.h b/config/examples/Micromake/C1/enhanced/Configuration.h index d4dcbb6698f6..a6009ef36407 100644 --- a/config/examples/Micromake/C1/enhanced/Configuration.h +++ b/config/examples/Micromake/C1/enhanced/Configuration.h @@ -729,6 +729,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 30 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -737,6 +742,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 3000, 4000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -775,6 +785,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK DEFAULT_XJERK #define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Mks/Robin/Configuration.h b/config/examples/Mks/Robin/Configuration.h index 07cb10d35946..5912642e16fd 100644 --- a/config/examples/Mks/Robin/Configuration.h +++ b/config/examples/Mks/Robin/Configuration.h @@ -726,6 +726,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -734,6 +739,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -772,6 +782,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Mks/Sbase/Configuration.h b/config/examples/Mks/Sbase/Configuration.h index f144b1ddb613..39c0230c5032 100644 --- a/config/examples/Mks/Sbase/Configuration.h +++ b/config/examples/Mks/Sbase/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Printrbot/PrintrboardG2/Configuration.h b/config/examples/Printrbot/PrintrboardG2/Configuration.h index 5e8166724a8f..32d99b2d5a90 100644 --- a/config/examples/Printrbot/PrintrboardG2/Configuration.h +++ b/config/examples/Printrbot/PrintrboardG2/Configuration.h @@ -728,6 +728,11 @@ //#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } #define DEFAULT_MAX_FEEDRATE { 30, 30,30,30 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -737,6 +742,11 @@ //#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } #define DEFAULT_MAX_ACCELERATION { 100, 100, 100, 100 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -779,6 +789,11 @@ #define DEFAULT_XJERK 1.0 #define DEFAULT_YJERK 1.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/RapideLite/RL200/Configuration.h b/config/examples/RapideLite/RL200/Configuration.h index 91bddbf06f17..b340f9601c8a 100644 --- a/config/examples/RapideLite/RL200/Configuration.h +++ b/config/examples/RapideLite/RL200/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/RepRapPro/Huxley/Configuration.h b/config/examples/RepRapPro/Huxley/Configuration.h index f250870d2396..8c83ab90fb0c 100644 --- a/config/examples/RepRapPro/Huxley/Configuration.h +++ b/config/examples/RepRapPro/Huxley/Configuration.h @@ -765,6 +765,11 @@ Black rubber belt(MXL), 18 - tooth aluminium pulley : 87.489 step per mm (Huxley #define DEFAULT_MAX_Z_FEEDRATE 3.3 // older Huxley has problem with speeds > 3.3 mm/s on Z axis #define DEFAULT_MAX_FEEDRATE { 200, 200, DEFAULT_MAX_Z_FEEDRATE, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -773,6 +778,11 @@ Black rubber belt(MXL), 18 - tooth aluminium pulley : 87.489 step per mm (Huxley */ #define DEFAULT_MAX_ACCELERATION { 1000, 1000, 50, 1000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -811,6 +821,11 @@ Black rubber belt(MXL), 18 - tooth aluminium pulley : 87.489 step per mm (Huxley #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/RepRapWorld/Megatronics/Configuration.h b/config/examples/RepRapWorld/Megatronics/Configuration.h index 39561c347b46..9527af820969 100644 --- a/config/examples/RepRapWorld/Megatronics/Configuration.h +++ b/config/examples/RepRapWorld/Megatronics/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/RigidBot/Configuration.h b/config/examples/RigidBot/Configuration.h index 3a85d9f86d56..88f02660c3c9 100644 --- a/config/examples/RigidBot/Configuration.h +++ b/config/examples/RigidBot/Configuration.h @@ -723,6 +723,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -731,6 +736,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 800, 800, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -769,6 +779,11 @@ #define DEFAULT_XJERK 8.0 #define DEFAULT_YJERK 8.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/SCARA/Configuration.h b/config/examples/SCARA/Configuration.h index 64b219113464..45eccf3d2c34 100644 --- a/config/examples/SCARA/Configuration.h +++ b/config/examples/SCARA/Configuration.h @@ -734,6 +734,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 30, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -742,6 +747,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 300, 300, 20, 1000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -780,6 +790,11 @@ #define DEFAULT_XJERK 5.0 #define DEFAULT_YJERK 5.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 3.0 // May be used by Linear Advance diff --git a/config/examples/STM32/Black_STM32F407VET6/Configuration.h b/config/examples/STM32/Black_STM32F407VET6/Configuration.h index 2f772633dfc7..268bb8080a1f 100644 --- a/config/examples/STM32/Black_STM32F407VET6/Configuration.h +++ b/config/examples/STM32/Black_STM32F407VET6/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/STM32/STM32F103RE/Configuration.h b/config/examples/STM32/STM32F103RE/Configuration.h index e80ebe989670..327fc5b63024 100644 --- a/config/examples/STM32/STM32F103RE/Configuration.h +++ b/config/examples/STM32/STM32F103RE/Configuration.h @@ -727,6 +727,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 400, 400, 2, 45 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -735,6 +740,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1400, 1400, 100, 80000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -773,6 +783,11 @@ #define DEFAULT_XJERK 13.0 #define DEFAULT_YJERK 13.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/STM32/STM32F4/Configuration.h b/config/examples/STM32/STM32F4/Configuration.h index 2c303616f8de..8c13a54ff3e1 100644 --- a/config/examples/STM32/STM32F4/Configuration.h +++ b/config/examples/STM32/STM32F4/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/STM32/stm32f103ret6/Configuration.h b/config/examples/STM32/stm32f103ret6/Configuration.h index 9f3c034af336..673bf2397ddd 100644 --- a/config/examples/STM32/stm32f103ret6/Configuration.h +++ b/config/examples/STM32/stm32f103ret6/Configuration.h @@ -727,6 +727,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 400, 400, 2, 45 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -735,6 +740,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1400, 1400, 100, 80000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -773,6 +783,11 @@ #define DEFAULT_XJERK 13.0 #define DEFAULT_YJERK 13.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Sanguinololu/Configuration.h b/config/examples/Sanguinololu/Configuration.h index 64b533ad9dbf..4531f6ff3352 100644 --- a/config/examples/Sanguinololu/Configuration.h +++ b/config/examples/Sanguinololu/Configuration.h @@ -756,6 +756,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 8, 45 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -764,6 +769,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -802,6 +812,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Tevo/Michelangelo/Configuration.h b/config/examples/Tevo/Michelangelo/Configuration.h index 4168fbe0fb35..b32fb91fb646 100644 --- a/config/examples/Tevo/Michelangelo/Configuration.h +++ b/config/examples/Tevo/Michelangelo/Configuration.h @@ -730,6 +730,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 60, 55 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -738,6 +743,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 10000, 10000, 400, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -776,6 +786,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Tevo/Tarantula Pro/Configuration.h b/config/examples/Tevo/Tarantula Pro/Configuration.h index c9876e93772f..e2e3cf857045 100644 --- a/config/examples/Tevo/Tarantula Pro/Configuration.h +++ b/config/examples/Tevo/Tarantula Pro/Configuration.h @@ -730,6 +730,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 400, 400, 50, 45 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -738,6 +743,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -776,6 +786,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/TheBorg/Configuration.h b/config/examples/TheBorg/Configuration.h index 4286c6f8a4c8..ccc654b99fce 100644 --- a/config/examples/TheBorg/Configuration.h +++ b/config/examples/TheBorg/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/TinyBoy2/Configuration.h b/config/examples/TinyBoy2/Configuration.h index 78f5b78be613..fea761e681fc 100644 --- a/config/examples/TinyBoy2/Configuration.h +++ b/config/examples/TinyBoy2/Configuration.h @@ -776,6 +776,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 7, 35 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -784,6 +789,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -822,6 +832,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Tronxy/X1/Configuration.h b/config/examples/Tronxy/X1/Configuration.h index 5f3a4ce8238a..d89778e135c5 100644 --- a/config/examples/Tronxy/X1/Configuration.h +++ b/config/examples/Tronxy/X1/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 400, 400, 2, 50 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 400, 400, 40, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 20.0 #define DEFAULT_YJERK 20.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Tronxy/X3A/Configuration.h b/config/examples/Tronxy/X3A/Configuration.h index 75b15511136a..3e9db05c9401 100644 --- a/config/examples/Tronxy/X3A/Configuration.h +++ b/config/examples/Tronxy/X3A/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 400, 400, 4, 50 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1000, 1000, 1500, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 15.0 #define DEFAULT_YJERK 15.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Tronxy/X5S-2E/Configuration.h b/config/examples/Tronxy/X5S-2E/Configuration.h index ce81d16bd176..423025161acd 100644 --- a/config/examples/Tronxy/X5S-2E/Configuration.h +++ b/config/examples/Tronxy/X5S-2E/Configuration.h @@ -746,6 +746,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -754,6 +759,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1000, 1000, 100, 1000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -792,6 +802,11 @@ #define DEFAULT_XJERK 20.0 #define DEFAULT_YJERK 20.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Tronxy/X5S/Configuration.h b/config/examples/Tronxy/X5S/Configuration.h index 0f468a7b4d87..7d9a0a1161fb 100644 --- a/config/examples/Tronxy/X5S/Configuration.h +++ b/config/examples/Tronxy/X5S/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 400, 400, 4, 150 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1000, 1000, 1000, 1000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 18.0 #define DEFAULT_YJERK 18.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Tronxy/XY100/Configuration.h b/config/examples/Tronxy/XY100/Configuration.h index 6152d482845c..d854c2b566f7 100644 --- a/config/examples/Tronxy/XY100/Configuration.h +++ b/config/examples/Tronxy/XY100/Configuration.h @@ -736,6 +736,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 400, 400, 4, 50 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -744,6 +749,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 1000, 5000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -782,6 +792,11 @@ #define DEFAULT_XJERK 20.0 #define DEFAULT_YJERK 20.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/UltiMachine/Archim1/Configuration.h b/config/examples/UltiMachine/Archim1/Configuration.h index 26b09c64bb39..c15ac82ab9ef 100644 --- a/config/examples/UltiMachine/Archim1/Configuration.h +++ b/config/examples/UltiMachine/Archim1/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/UltiMachine/Archim2/Configuration.h b/config/examples/UltiMachine/Archim2/Configuration.h index a6baaec3d613..f1ee9c5667f1 100644 --- a/config/examples/UltiMachine/Archim2/Configuration.h +++ b/config/examples/UltiMachine/Archim2/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/VORONDesign/Configuration.h b/config/examples/VORONDesign/Configuration.h index 96abead88904..289e88c580ef 100644 --- a/config/examples/VORONDesign/Configuration.h +++ b/config/examples/VORONDesign/Configuration.h @@ -734,6 +734,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 75, 75 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -742,6 +747,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 , 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -780,6 +790,11 @@ #define DEFAULT_XJERK 20.0 #define DEFAULT_YJERK 15.0 #define DEFAULT_ZJERK 0.4 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Velleman/K8200/Configuration.h b/config/examples/Velleman/K8200/Configuration.h index 4537da2122d5..31f599b434f8 100644 --- a/config/examples/Velleman/K8200/Configuration.h +++ b/config/examples/Velleman/K8200/Configuration.h @@ -754,6 +754,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -762,6 +767,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -800,6 +810,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/Velleman/K8400/Configuration.h b/config/examples/Velleman/K8400/Configuration.h index 7a16004c5012..c03636d7606f 100644 --- a/config/examples/Velleman/K8400/Configuration.h +++ b/config/examples/Velleman/K8400/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 160, 160, 10, 10000 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.5 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 20.0 // May be used by Linear Advance diff --git a/config/examples/Velleman/K8400/Dual-head/Configuration.h b/config/examples/Velleman/K8400/Dual-head/Configuration.h index 6b0ffb799851..d5648b2b3843 100644 --- a/config/examples/Velleman/K8400/Dual-head/Configuration.h +++ b/config/examples/Velleman/K8400/Dual-head/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 160, 160, 10, 10000 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/WASP/PowerWASP/Configuration.h b/config/examples/WASP/PowerWASP/Configuration.h index 8e1e3ba1fb38..b552f6143ef1 100644 --- a/config/examples/WASP/PowerWASP/Configuration.h +++ b/config/examples/WASP/PowerWASP/Configuration.h @@ -744,6 +744,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 150, 150, 15, 20 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -752,6 +757,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 10000, 10000, 50, 500 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -790,6 +800,11 @@ #define DEFAULT_XJERK 15.0 #define DEFAULT_YJERK 15.0 #define DEFAULT_ZJERK 0.5 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 1.0 // May be used by Linear Advance diff --git a/config/examples/Wanhao/Duplicator 6/Configuration.h b/config/examples/Wanhao/Duplicator 6/Configuration.h index 9bf46181bb01..16eef82b3860 100644 --- a/config/examples/Wanhao/Duplicator 6/Configuration.h +++ b/config/examples/Wanhao/Duplicator 6/Configuration.h @@ -735,6 +735,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -743,6 +748,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 500 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -781,6 +791,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 1.0 // May be used by Linear Advance diff --git a/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h b/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h index 6a256a95fb0d..3628f96be8e5 100755 --- a/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h +++ b/config/examples/Wanhao/Duplicator i3 Mini/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 400, 400, 15, 50 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 3000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/adafruit/ST7565/Configuration.h b/config/examples/adafruit/ST7565/Configuration.h index 8ed568a92dea..a52b82be1ed5 100644 --- a/config/examples/adafruit/ST7565/Configuration.h +++ b/config/examples/adafruit/ST7565/Configuration.h @@ -725,6 +725,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -733,6 +738,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -771,6 +781,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/delta/Anycubic/Kossel/Configuration.h b/config/examples/delta/Anycubic/Kossel/Configuration.h index c18b06541560..95e908b711c0 100644 --- a/config/examples/delta/Anycubic/Kossel/Configuration.h +++ b/config/examples/delta/Anycubic/Kossel/Configuration.h @@ -855,6 +855,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 100, 100, 100, 100} +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -863,6 +868,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 3000, 3000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -901,6 +911,11 @@ #define DEFAULT_XJERK 5.0 #define DEFAULT_YJERK DEFAULT_XJERK #define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/delta/FLSUN/auto_calibrate/Configuration.h b/config/examples/delta/FLSUN/auto_calibrate/Configuration.h index 0fe1da99252c..904f135f71eb 100644 --- a/config/examples/delta/FLSUN/auto_calibrate/Configuration.h +++ b/config/examples/delta/FLSUN/auto_calibrate/Configuration.h @@ -807,6 +807,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -815,6 +820,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 4000, 4000, 4000, 4000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -853,6 +863,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK DEFAULT_XJERK #define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/delta/FLSUN/kossel/Configuration.h b/config/examples/delta/FLSUN/kossel/Configuration.h index 74bd37da761e..ab5c53cad763 100644 --- a/config/examples/delta/FLSUN/kossel/Configuration.h +++ b/config/examples/delta/FLSUN/kossel/Configuration.h @@ -807,6 +807,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -815,6 +820,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 4000, 4000, 4000, 4000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -853,6 +863,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK DEFAULT_XJERK #define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/delta/FLSUN/kossel_mini/Configuration.h b/config/examples/delta/FLSUN/kossel_mini/Configuration.h index 5c81e5f1f86d..435dbbf7879b 100644 --- a/config/examples/delta/FLSUN/kossel_mini/Configuration.h +++ b/config/examples/delta/FLSUN/kossel_mini/Configuration.h @@ -807,6 +807,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 200 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -815,6 +820,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 4000, 4000, 4000, 4000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -853,6 +863,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK DEFAULT_XJERK #define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/delta/Geeetech/Rostock 301/Configuration.h b/config/examples/delta/Geeetech/Rostock 301/Configuration.h index 1eedcf2e06ac..651cfc1d1d3b 100644 --- a/config/examples/delta/Geeetech/Rostock 301/Configuration.h +++ b/config/examples/delta/Geeetech/Rostock 301/Configuration.h @@ -797,6 +797,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 500, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -805,6 +810,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -843,6 +853,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK DEFAULT_XJERK #define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/delta/Hatchbox_Alpha/Configuration.h b/config/examples/delta/Hatchbox_Alpha/Configuration.h index bc3f024b3992..b7d9db9ec4c9 100644 --- a/config/examples/delta/Hatchbox_Alpha/Configuration.h +++ b/config/examples/delta/Hatchbox_Alpha/Configuration.h @@ -812,6 +812,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 500, 200 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -820,6 +825,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -858,6 +868,11 @@ #define DEFAULT_XJERK 20.0 #define DEFAULT_YJERK DEFAULT_XJERK #define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/delta/MKS/SBASE/Configuration.h b/config/examples/delta/MKS/SBASE/Configuration.h index 915c069efbf2..265a09ab1e75 100644 --- a/config/examples/delta/MKS/SBASE/Configuration.h +++ b/config/examples/delta/MKS/SBASE/Configuration.h @@ -797,6 +797,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 500, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -805,6 +810,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -843,6 +853,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK DEFAULT_XJERK #define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/delta/Tevo Little Monster/Configuration.h b/config/examples/delta/Tevo Little Monster/Configuration.h index 1c894ce327a4..5e237d621894 100644 --- a/config/examples/delta/Tevo Little Monster/Configuration.h +++ b/config/examples/delta/Tevo Little Monster/Configuration.h @@ -801,6 +801,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 25000, 25000, 25000, 5000 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -809,6 +814,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -847,6 +857,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK DEFAULT_XJERK #define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/delta/generic/Configuration.h b/config/examples/delta/generic/Configuration.h index 34e68585ba2c..def9e5adccdd 100644 --- a/config/examples/delta/generic/Configuration.h +++ b/config/examples/delta/generic/Configuration.h @@ -797,6 +797,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 500, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -805,6 +810,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -843,6 +853,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK DEFAULT_XJERK #define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/delta/kossel_mini/Configuration.h b/config/examples/delta/kossel_mini/Configuration.h index 6f32e89d80c0..ec45b2589173 100644 --- a/config/examples/delta/kossel_mini/Configuration.h +++ b/config/examples/delta/kossel_mini/Configuration.h @@ -797,6 +797,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 500, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -805,6 +810,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -843,6 +853,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK DEFAULT_XJERK #define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/delta/kossel_pro/Configuration.h b/config/examples/delta/kossel_pro/Configuration.h index 8920710d8415..9993d5c8b938 100644 --- a/config/examples/delta/kossel_pro/Configuration.h +++ b/config/examples/delta/kossel_pro/Configuration.h @@ -790,6 +790,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 200 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -798,6 +803,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 9000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -836,6 +846,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK DEFAULT_XJERK #define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/delta/kossel_xl/Configuration.h b/config/examples/delta/kossel_xl/Configuration.h index 2e11a8c99159..82102a883d73 100644 --- a/config/examples/delta/kossel_xl/Configuration.h +++ b/config/examples/delta/kossel_xl/Configuration.h @@ -800,6 +800,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 200, 200, 200, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -808,6 +813,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 9000, 9000, 9000, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -846,6 +856,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK DEFAULT_XJERK #define DEFAULT_ZJERK DEFAULT_XJERK // Must be same as XY for delta + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 20.0 // May be used by Linear Advance diff --git a/config/examples/gCreate/gMax1.5+/Configuration.h b/config/examples/gCreate/gMax1.5+/Configuration.h index d5278a6db073..f053e320a220 100644 --- a/config/examples/gCreate/gMax1.5+/Configuration.h +++ b/config/examples/gCreate/gMax1.5+/Configuration.h @@ -738,6 +738,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 25, 25 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -746,6 +751,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 800, 800, 700, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -784,6 +794,11 @@ #define DEFAULT_XJERK 8.5 #define DEFAULT_YJERK 8.5 #define DEFAULT_ZJERK 0.7 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 4.0 // May be used by Linear Advance diff --git a/config/examples/makibox/Configuration.h b/config/examples/makibox/Configuration.h index 4db20e066e66..97c34366279e 100644 --- a/config/examples/makibox/Configuration.h +++ b/config/examples/makibox/Configuration.h @@ -728,6 +728,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 60, 60, 20, 45 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -736,6 +741,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 2000, 2000, 30, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -774,6 +784,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/tvrrug/Round2/Configuration.h b/config/examples/tvrrug/Round2/Configuration.h index 7c193cff3cc4..02f3150e5666 100644 --- a/config/examples/tvrrug/Round2/Configuration.h +++ b/config/examples/tvrrug/Round2/Configuration.h @@ -718,6 +718,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 45 } // David TVRR +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -728,6 +733,11 @@ /* MICHEL: This has an impact on the "ripples" in print walls */ +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -766,6 +776,11 @@ #define DEFAULT_XJERK 10.0 #define DEFAULT_YJERK 10.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance diff --git a/config/examples/wt150/Configuration.h b/config/examples/wt150/Configuration.h index ff3a7c38d206..23333a845227 100644 --- a/config/examples/wt150/Configuration.h +++ b/config/examples/wt150/Configuration.h @@ -730,6 +730,11 @@ */ #define DEFAULT_MAX_FEEDRATE { 83.333333, 83.333333, 19.5, 26.666666 } +//#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 +#if ENABLED(LIMITED_MAX_FR_EDITING) + #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits +#endif + /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) @@ -738,6 +743,11 @@ */ #define DEFAULT_MAX_ACCELERATION { 1200, 1200, 100, 10000 } +//#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 +#if ENABLED(LIMITED_MAX_ACCEL_EDITING) + #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits +#endif + /** * Default Acceleration (change/s) change = mm/s * Override with M204 @@ -776,6 +786,11 @@ #define DEFAULT_XJERK 8.0 #define DEFAULT_YJERK 8.0 #define DEFAULT_ZJERK 0.3 + + //#define LIMITED_JERK_EDITING // Limit edit via M205 or LCD to DEFAULT_aJERK * 2 + #if ENABLED(LIMITED_JERK_EDITING) + #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits + #endif #endif #define DEFAULT_EJERK 5.0 // May be used by Linear Advance From d52b9086271e0c18fa028eeac2eae1269f07fe27 Mon Sep 17 00:00:00 2001 From: Oliver Jean Eifler Date: Wed, 2 Oct 2019 03:02:27 +0200 Subject: [PATCH 117/120] Fix coordinate size for G26 w/out arcs (#15443) --- Marlin/src/gcode/bedlevel/G26.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/gcode/bedlevel/G26.cpp b/Marlin/src/gcode/bedlevel/G26.cpp index 2356f0428d57..46001411c8b6 100644 --- a/Marlin/src/gcode/bedlevel/G26.cpp +++ b/Marlin/src/gcode/bedlevel/G26.cpp @@ -800,8 +800,8 @@ void GcodeSuite::G26() { if (user_canceled()) goto LEAVE; // Check if the user wants to stop the Mesh Validation #endif - xy_float_t p = { circle.x + _COS(ind ), circle.y + _SIN(ind ), g26_layer_height }, - q = { circle.x + _COS(ind + 1), circle.y + _SIN(ind + 1), g26_layer_height }; + xyz_float_t p = { circle.x + _COS(ind ), circle.y + _SIN(ind ), g26_layer_height }, + q = { circle.x + _COS(ind + 1), circle.y + _SIN(ind + 1), g26_layer_height }; #if IS_KINEMATIC // Check to make sure this segment is entirely on the bed, skip if not. From 1952982c01f849cbec8819be04af984fa061db48 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 1 Oct 2019 22:20:08 -0500 Subject: [PATCH 118/120] Rearrange configs for export --- .../ADIMLab/{ => Gantry v1}/_Bootscreen.h | 0 .../examples/ADIMLab/Gantry v2/_Bootscreen.h | 86 + .../Felix/{ => DUAL}/Configuration_adv.h | 0 config/examples/Felix/{ => DUAL}/README.md | 0 .../Felix/{ => Single}/Configuration.h | 0 .../examples/Felix/Single/Configuration_adv.h | 2764 +++++++++++++++++ config/examples/Felix/Single/README.md | 60 + .../Prusa i3 Pro B/{ => bltouch}/README.md | 0 .../Geeetech/Prusa i3 Pro B/noprobe/README.md | 54 + .../Micromake/C1/{ => basic}/README.md | 0 .../examples/Micromake/C1/enhanced/README.md | 15 + ...raphic_Smart_Controller.txt => README.txt} | 0 .../K8400/{ => Dual-head}/Configuration_adv.h | 0 .../Velleman/K8400/{ => Dual-head}/README.md | 0 .../K8400/{ => Single-head}/Configuration.h | 0 .../K8400/Single-head/Configuration_adv.h | 2764 +++++++++++++++++ .../Velleman/K8400/Single-head/README.md | 15 + 17 files changed, 5758 insertions(+) rename config/examples/ADIMLab/{ => Gantry v1}/_Bootscreen.h (100%) create mode 100644 config/examples/ADIMLab/Gantry v2/_Bootscreen.h rename config/examples/Felix/{ => DUAL}/Configuration_adv.h (100%) rename config/examples/Felix/{ => DUAL}/README.md (100%) rename config/examples/Felix/{ => Single}/Configuration.h (100%) create mode 100644 config/examples/Felix/Single/Configuration_adv.h create mode 100644 config/examples/Felix/Single/README.md rename config/examples/Geeetech/Prusa i3 Pro B/{ => bltouch}/README.md (100%) create mode 100644 config/examples/Geeetech/Prusa i3 Pro B/noprobe/README.md rename config/examples/Micromake/C1/{ => basic}/README.md (100%) create mode 100644 config/examples/Micromake/C1/enhanced/README.md rename config/examples/Mks/Sbase/{000-README_RepRap_Discount_Full_Graphic_Smart_Controller.txt => README.txt} (100%) rename config/examples/Velleman/K8400/{ => Dual-head}/Configuration_adv.h (100%) rename config/examples/Velleman/K8400/{ => Dual-head}/README.md (100%) rename config/examples/Velleman/K8400/{ => Single-head}/Configuration.h (100%) create mode 100644 config/examples/Velleman/K8400/Single-head/Configuration_adv.h create mode 100644 config/examples/Velleman/K8400/Single-head/README.md diff --git a/config/examples/ADIMLab/_Bootscreen.h b/config/examples/ADIMLab/Gantry v1/_Bootscreen.h similarity index 100% rename from config/examples/ADIMLab/_Bootscreen.h rename to config/examples/ADIMLab/Gantry v1/_Bootscreen.h diff --git a/config/examples/ADIMLab/Gantry v2/_Bootscreen.h b/config/examples/ADIMLab/Gantry v2/_Bootscreen.h new file mode 100644 index 000000000000..ebb0ad9a81f2 --- /dev/null +++ b/config/examples/ADIMLab/Gantry v2/_Bootscreen.h @@ -0,0 +1,86 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +/** + * Made with Marlin Bitmap Converter + * http://marlinfw.org/tools/u8glib/converter.html + */ +#define CUSTOM_BOOTSCREEN_BMPWIDTH 88 + +const unsigned char custom_start_bmp[] PROGMEM = { + B00000000,B00000000,B00000000,B00001111,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00000000,B00111111,B11111000,B00000000,B01000000,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00011110,B01111111,B11111111,B00000000,B10000100,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00111111,B11111111,B11111111,B11111111,B00000100,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00111111,B11111111,B11111111,B11111110,B00001100,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B01111111,B11111111,B11111111,B11110000,B00001000,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00001111,B11111111,B11100000,B00000000,B00011000,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00000000,B11111111,B11100011,B10000000,B00111000,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00010011,B11111111,B11100001,B10000000,B01111000,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00011111,B10001111,B11100011,B10000000,B11110000,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00011110,B00001111,B11111111,B10000001,B11110000,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00000110,B00011111,B11111111,B10000111,B11100000,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00000000,B11111111,B11111110,B00001111,B11100000,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00000111,B11111111,B11110000,B01111111,B11000000,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00001111,B11111100,B00000011,B11111111,B10000000,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00011111,B11000000,B11111111,B11111111,B00000000,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00111110,B00011111,B11111111,B11111110,B00111111,B11000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B01111100,B11111111,B11111111,B11111100,B00001111,B11100000,B00000000,B00000000,B00000000, + B00000000,B00000000,B11111001,B11111111,B11111111,B11110000,B00001111,B11110000,B00000000,B00000000,B00000000, + B00000000,B00000000,B11110011,B11111111,B11111111,B11111000,B00011111,B11111000,B00000000,B00000000,B00000000, + B00000000,B00000000,B11100111,B11111111,B11111111,B11111111,B11111111,B11111100,B00000000,B00000000,B00000000, + B00000000,B00000001,B11101111,B11111111,B11111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000000, + B00000000,B00000001,B11101111,B11111110,B00001111,B11111111,B11111111,B11101111,B10000000,B00000000,B00000000, + B00000000,B00000001,B11001111,B11110000,B00000001,B11111111,B11111111,B11110011,B11111000,B00000000,B00000000, + B00000000,B00000000,B11101111,B11100000,B00000000,B11111111,B11111111,B11111000,B01100000,B00000000,B00000000, + B00000000,B00000000,B11101111,B11100000,B00000000,B00111111,B11111111,B11111000,B00000000,B00000000,B00000000, + B00000000,B00000000,B11101111,B11000000,B00000000,B00011111,B11111111,B11111000,B00000000,B00000000,B00000000, + B00000000,B00000000,B01100111,B11100100,B00000000,B00001111,B11111111,B11111100,B00000000,B00000000,B00000000, + B00000000,B00000000,B00110011,B11111100,B00000000,B00000111,B11111111,B11111100,B00000000,B00000000,B00000000, + B00000000,B00000000,B00011001,B11111100,B00000000,B00000011,B11100000,B11111100,B00000000,B00000000,B00000000, + B00000000,B00000000,B00001100,B01111000,B00000000,B00000001,B11100000,B00111100,B00000000,B00000000,B00000000, + B00000000,B00000000,B00000111,B00000000,B00000000,B00000000,B01110000,B00011100,B00000000,B00000000,B00000000, + B00000000,B00000000,B00000011,B10000000,B00000000,B00000000,B00000000,B00001110,B00000000,B00000000,B00000000, + B00000000,B00000000,B00000001,B11100000,B00000000,B00000000,B00000000,B00001111,B00000000,B00000000,B00000000, + B00000000,B00000000,B00000001,B11110000,B00000000,B00000000,B00000000,B00000111,B00000000,B00000000,B00000000, + B00000000,B00000000,B00000001,B11111000,B00000000,B00000000,B00000000,B00000111,B10000000,B00000000,B00000000, + B00000000,B00000000,B00000001,B11111100,B00000000,B00000000,B00000000,B00000111,B11000000,B00000000,B00000000, + B00000000,B00000000,B00000011,B11111100,B00000000,B00000000,B00000000,B00001111,B11000000,B00000000,B00000000, + B00000000,B00000000,B00000111,B11111100,B00000000,B00000000,B00000000,B00001111,B11100000,B00000000,B00000000, + B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, + B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, + B00000111,B10000001,B11111111,B10000111,B10011111,B00000111,B10011110,B00000000,B00000000,B00111000,B00000000, + B00000111,B10000001,B11111111,B11000011,B10011111,B00000111,B10001110,B00000000,B00000000,B00111000,B00000000, + B00000111,B10000001,B11000011,B11100011,B10011111,B00000111,B10001110,B00000000,B00000000,B00111000,B00000000, + B00001111,B11000001,B11000000,B11100011,B10011111,B10001111,B10001110,B00000000,B00111100,B00111011,B00000000, + B00001111,B11000001,B11000000,B11100011,B10011111,B10001111,B10001110,B00000000,B11111110,B00111111,B10000000, + B00011101,B11000001,B11000000,B01110011,B10011111,B10011111,B10001110,B00000000,B11111111,B00111111,B10000000, + B00011100,B11100001,B11000000,B01110011,B10011101,B11011011,B10001110,B00000000,B01101111,B00111011,B11000000, + B00011100,B11100001,B11000000,B01110011,B10011101,B11111011,B10001110,B00000000,B00111111,B00111011,B11000000, + B00111111,B11110001,B11000000,B11100011,B10011100,B11111011,B10001110,B00000000,B11111111,B00111011,B11000000, + B00111111,B11110001,B11000000,B11100011,B10011100,B11110011,B10001110,B00000000,B11101111,B00111011,B11000000, + B01111000,B01110001,B11000001,B11100011,B10011100,B11110011,B10001110,B00000001,B11101111,B00111011,B11000000, + B01110000,B01111001,B11111111,B11000011,B10011100,B01100011,B10001111,B11111111,B11101111,B00111111,B10000000, + B01110000,B00111001,B11111111,B10000011,B10011100,B01100011,B10001111,B11111110,B11110111,B00111111,B10000000, + B11110000,B01111101,B11111111,B00000111,B10011110,B00000011,B11011111,B11111100,B01100111,B00100111,B00000000 +}; diff --git a/config/examples/Felix/Configuration_adv.h b/config/examples/Felix/DUAL/Configuration_adv.h similarity index 100% rename from config/examples/Felix/Configuration_adv.h rename to config/examples/Felix/DUAL/Configuration_adv.h diff --git a/config/examples/Felix/README.md b/config/examples/Felix/DUAL/README.md similarity index 100% rename from config/examples/Felix/README.md rename to config/examples/Felix/DUAL/README.md diff --git a/config/examples/Felix/Configuration.h b/config/examples/Felix/Single/Configuration.h similarity index 100% rename from config/examples/Felix/Configuration.h rename to config/examples/Felix/Single/Configuration.h diff --git a/config/examples/Felix/Single/Configuration_adv.h b/config/examples/Felix/Single/Configuration_adv.h new file mode 100644 index 000000000000..5ef7cf106f82 --- /dev/null +++ b/config/examples/Felix/Single/Configuration_adv.h @@ -0,0 +1,2764 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +/** + * Configuration_adv.h + * + * Advanced settings. + * Only change these if you know exactly what you're doing. + * Some of these settings can damage your printer if improperly set! + * + * Basic settings can be found in Configuration.h + * + */ +#define CONFIGURATION_ADV_H_VERSION 020000 + +// @section temperature + +//=========================================================================== +//=============================Thermal Settings ============================ +//=========================================================================== + +// +// Custom Thermistor 1000 parameters +// +#if TEMP_SENSOR_0 == 1000 + #define HOTEND0_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define HOTEND0_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define HOTEND0_BETA 3950 // Beta value +#endif + +#if TEMP_SENSOR_1 == 1000 + #define HOTEND1_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define HOTEND1_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define HOTEND1_BETA 3950 // Beta value +#endif + +#if TEMP_SENSOR_2 == 1000 + #define HOTEND2_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define HOTEND2_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define HOTEND2_BETA 3950 // Beta value +#endif + +#if TEMP_SENSOR_3 == 1000 + #define HOTEND3_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define HOTEND3_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define HOTEND3_BETA 3950 // Beta value +#endif + +#if TEMP_SENSOR_4 == 1000 + #define HOTEND4_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define HOTEND4_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define HOTEND4_BETA 3950 // Beta value +#endif + +#if TEMP_SENSOR_5 == 1000 + #define HOTEND5_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define HOTEND5_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define HOTEND5_BETA 3950 // Beta value +#endif + +#if TEMP_SENSOR_BED == 1000 + #define BED_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define BED_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define BED_BETA 3950 // Beta value +#endif + +#if TEMP_SENSOR_CHAMBER == 1000 + #define CHAMBER_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define CHAMBER_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define CHAMBER_BETA 3950 // Beta value +#endif + +// +// Hephestos 2 24V heated bed upgrade kit. +// https://store.bq.com/en/heated-bed-kit-hephestos2 +// +//#define HEPHESTOS2_HEATED_BED_KIT +#if ENABLED(HEPHESTOS2_HEATED_BED_KIT) + #undef TEMP_SENSOR_BED + #define TEMP_SENSOR_BED 70 + #define HEATER_BED_INVERTING true +#endif + +/** + * Heated Chamber settings + */ +#if TEMP_SENSOR_CHAMBER + #define CHAMBER_MINTEMP 5 + #define CHAMBER_MAXTEMP 60 + #define TEMP_CHAMBER_HYSTERESIS 1 // (°C) Temperature proximity considered "close enough" to the target + //#define CHAMBER_LIMIT_SWITCHING + //#define HEATER_CHAMBER_PIN 44 // Chamber heater on/off pin + //#define HEATER_CHAMBER_INVERTING false +#endif + +#if DISABLED(PIDTEMPBED) + #define BED_CHECK_INTERVAL 5000 // ms between checks in bang-bang control + #if ENABLED(BED_LIMIT_SWITCHING) + #define BED_HYSTERESIS 2 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS + #endif +#endif + +/** + * Thermal Protection provides additional protection to your printer from damage + * and fire. Marlin always includes safe min and max temperature ranges which + * protect against a broken or disconnected thermistor wire. + * + * The issue: If a thermistor falls out, it will report the much lower + * temperature of the air in the room, and the the firmware will keep + * the heater on. + * + * The solution: Once the temperature reaches the target, start observing. + * If the temperature stays too far below the target (hysteresis) for too + * long (period), the firmware will halt the machine as a safety precaution. + * + * If you get false positives for "Thermal Runaway", increase + * THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD + */ +#if ENABLED(THERMAL_PROTECTION_HOTENDS) + #define THERMAL_PROTECTION_PERIOD 40 // Seconds + #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius + + //#define ADAPTIVE_FAN_SLOWING // Slow part cooling fan if temperature drops + #if BOTH(ADAPTIVE_FAN_SLOWING, PIDTEMP) + //#define NO_FAN_SLOWING_IN_PID_TUNING // Don't slow fan speed during M303 + #endif + + /** + * Whenever an M104, M109, or M303 increases the target temperature, the + * firmware will wait for the WATCH_TEMP_PERIOD to expire. If the temperature + * hasn't increased by WATCH_TEMP_INCREASE degrees, the machine is halted and + * requires a hard reset. This test restarts with any M104/M109/M303, but only + * if the current temperature is far enough below the target for a reliable + * test. + * + * If you get false positives for "Heating failed", increase WATCH_TEMP_PERIOD + * and/or decrease WATCH_TEMP_INCREASE. WATCH_TEMP_INCREASE should not be set + * below 2. + */ + #define WATCH_TEMP_PERIOD 20 // Seconds + #define WATCH_TEMP_INCREASE 2 // Degrees Celsius +#endif + +/** + * Thermal Protection parameters for the bed are just as above for hotends. + */ +#if ENABLED(THERMAL_PROTECTION_BED) + #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius + + /** + * As described above, except for the bed (M140/M190/M303). + */ + #define WATCH_BED_TEMP_PERIOD 60 // Seconds + #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius +#endif + +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + +#if ENABLED(PIDTEMP) + // Add an experimental additional term to the heater power, proportional to the extrusion speed. + // A well-chosen Kc value should add just enough power to melt the increased material volume. + //#define PID_EXTRUSION_SCALING + #if ENABLED(PID_EXTRUSION_SCALING) + #define DEFAULT_Kc (100) //heating power=Kc*(e_speed) + #define LPQ_MAX_LEN 50 + #endif +#endif + +/** + * Automatic Temperature: + * The hotend target temperature is calculated by all the buffered lines of gcode. + * The maximum buffered steps/sec of the extruder motor is called "se". + * Start autotemp mode with M109 S B F + * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by + * mintemp and maxtemp. Turn this off by executing M109 without F* + * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp. + * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode + */ +#define AUTOTEMP +#if ENABLED(AUTOTEMP) + #define AUTOTEMP_OLDWEIGHT 0.98 +#endif + +// Show extra position information with 'M114 D' +//#define M114_DETAIL + +// Show Temperature ADC value +// Enable for M105 to include ADC values read from temperature sensors. +//#define SHOW_TEMP_ADC_VALUES + +/** + * High Temperature Thermistor Support + * + * Thermistors able to support high temperature tend to have a hard time getting + * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP + * will probably be caught when the heating element first turns on during the + * preheating process, which will trigger a min_temp_error as a safety measure + * and force stop everything. + * To circumvent this limitation, we allow for a preheat time (during which, + * min_temp_error won't be triggered) and add a min_temp buffer to handle + * aberrant readings. + * + * If you want to enable this feature for your hotend thermistor(s) + * uncomment and set values > 0 in the constants below + */ + +// The number of consecutive low temperature errors that can occur +// before a min_temp_error is triggered. (Shouldn't be more than 10.) +//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0 + +// The number of milliseconds a hotend will preheat before starting to check +// the temperature. This value should NOT be set to the time it takes the +// hot end to reach the target temperature, but the time it takes to reach +// the minimum temperature your thermistor can read. The lower the better/safer. +// This shouldn't need to be more than 30 seconds (30000) +//#define MILLISECONDS_PREHEAT_TIME 0 + +// @section extruder + +// Extruder runout prevention. +// If the machine is idle and the temperature over MINTEMP +// then extrude some filament every couple of SECONDS. +//#define EXTRUDER_RUNOUT_PREVENT +#if ENABLED(EXTRUDER_RUNOUT_PREVENT) + #define EXTRUDER_RUNOUT_MINTEMP 190 + #define EXTRUDER_RUNOUT_SECONDS 30 + #define EXTRUDER_RUNOUT_SPEED 1500 // (mm/m) + #define EXTRUDER_RUNOUT_EXTRUDE 5 // (mm) +#endif + +// @section temperature + +// Calibration for AD595 / AD8495 sensor to adjust temperature measurements. +// The final temperature is calculated as (measuredTemp * GAIN) + OFFSET. +#define TEMP_SENSOR_AD595_OFFSET 0.0 +#define TEMP_SENSOR_AD595_GAIN 1.0 +#define TEMP_SENSOR_AD8495_OFFSET 0.0 +#define TEMP_SENSOR_AD8495_GAIN 1.0 + +/** + * Controller Fan + * To cool down the stepper drivers and MOSFETs. + * + * The fan will turn on automatically whenever any stepper is enabled + * and turn off after a set period after all steppers are turned off. + */ +//#define USE_CONTROLLER_FAN +#if ENABLED(USE_CONTROLLER_FAN) + //#define CONTROLLER_FAN_PIN -1 // Set a custom pin for the controller fan + #define CONTROLLERFAN_SECS 60 // Duration in seconds for the fan to run after all motors are disabled + #define CONTROLLERFAN_SPEED 255 // 255 == full speed + //#define CONTROLLERFAN_SPEED_Z_ONLY 127 // Reduce noise on machines that keep Z enabled +#endif + +// When first starting the main fan, run it at full speed for the +// given number of milliseconds. This gets the fan spinning reliably +// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu) +//#define FAN_KICKSTART_TIME 100 + +/** + * PWM Fan Scaling + * + * Define the min/max speeds for PWM fans (as set with M106). + * + * With these options the M106 0-255 value range is scaled to a subset + * to ensure that the fan has enough power to spin, or to run lower + * current fans with higher current. (e.g., 5V/12V fans with 12V/24V) + * Value 0 always turns off the fan. + * + * Define one or both of these to override the default 0-255 range. + */ +//#define FAN_MIN_PWM 50 +//#define FAN_MAX_PWM 128 + +/** + * FAST PWM FAN Settings + * + * Use to change the FAST FAN PWM frequency (if enabled in Configuration.h) + * Combinations of PWM Modes, prescale values and TOP resolutions are used internally to produce a + * frequency as close as possible to the desired frequency. + * + * FAST_PWM_FAN_FREQUENCY [undefined by default] + * Set this to your desired frequency. + * If left undefined this defaults to F = F_CPU/(2*255*1) + * ie F = 31.4 Khz on 16 MHz microcontrollers or F = 39.2 KHz on 20 MHz microcontrollers + * These defaults are the same as with the old FAST_PWM_FAN implementation - no migration is required + * NOTE: Setting very low frequencies (< 10 Hz) may result in unexpected timer behavior. + * + * USE_OCR2A_AS_TOP [undefined by default] + * Boards that use TIMER2 for PWM have limitations resulting in only a few possible frequencies on TIMER2: + * 16MHz MCUs: [62.5KHz, 31.4KHz (default), 7.8KHz, 3.92KHz, 1.95KHz, 977Hz, 488Hz, 244Hz, 60Hz, 122Hz, 30Hz] + * 20MHz MCUs: [78.1KHz, 39.2KHz (default), 9.77KHz, 4.9KHz, 2.44KHz, 1.22KHz, 610Hz, 305Hz, 153Hz, 76Hz, 38Hz] + * A greater range can be achieved by enabling USE_OCR2A_AS_TOP. But note that this option blocks the use of + * PWM on pin OC2A. Only use this option if you don't need PWM on 0C2A. (Check your schematic.) + * USE_OCR2A_AS_TOP sacrifices duty cycle control resolution to achieve this broader range of frequencies. + */ +#if ENABLED(FAST_PWM_FAN) + //#define FAST_PWM_FAN_FREQUENCY 31400 + //#define USE_OCR2A_AS_TOP +#endif + +// @section extruder + +/** + * Extruder cooling fans + * + * Extruder auto fans automatically turn on when their extruders' + * temperatures go above EXTRUDER_AUTO_FAN_TEMPERATURE. + * + * Your board's pins file specifies the recommended pins. Override those here + * or set to -1 to disable completely. + * + * Multiple extruders can be assigned to the same pin in which case + * the fan will turn on when any selected extruder is above the threshold. + */ +#define E0_AUTO_FAN_PIN -1 +#define E1_AUTO_FAN_PIN -1 +#define E2_AUTO_FAN_PIN -1 +#define E3_AUTO_FAN_PIN -1 +#define E4_AUTO_FAN_PIN -1 +#define E5_AUTO_FAN_PIN -1 +#define CHAMBER_AUTO_FAN_PIN -1 + +#define EXTRUDER_AUTO_FAN_TEMPERATURE 50 +#define EXTRUDER_AUTO_FAN_SPEED 255 // 255 == full speed +#define CHAMBER_AUTO_FAN_TEMPERATURE 30 +#define CHAMBER_AUTO_FAN_SPEED 255 + +/** + * Part-Cooling Fan Multiplexer + * + * This feature allows you to digitally multiplex the fan output. + * The multiplexer is automatically switched at tool-change. + * Set FANMUX[012]_PINs below for up to 2, 4, or 8 multiplexed fans. + */ +#define FANMUX0_PIN -1 +#define FANMUX1_PIN -1 +#define FANMUX2_PIN -1 + +/** + * M355 Case Light on-off / brightness + */ +//#define CASE_LIGHT_ENABLE +#if ENABLED(CASE_LIGHT_ENABLE) + //#define CASE_LIGHT_PIN 4 // Override the default pin if needed + #define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW + #define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on + #define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin) + //#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu + //#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting. + //#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED. + #if ENABLED(CASE_LIGHT_USE_NEOPIXEL) + #define CASE_LIGHT_NEOPIXEL_COLOR { 255, 255, 255, 255 } // { Red, Green, Blue, White } + #endif +#endif + +// @section homing + +// If you want endstops to stay on (by default) even when not homing +// enable this option. Override at any time with M120, M121. +//#define ENDSTOPS_ALWAYS_ON_DEFAULT + +// @section extras + +//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats. + +// Employ an external closed loop controller. Override pins here if needed. +//#define EXTERNAL_CLOSED_LOOP_CONTROLLER +#if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER) + //#define CLOSED_LOOP_ENABLE_PIN -1 + //#define CLOSED_LOOP_MOVE_COMPLETE_PIN -1 +#endif + +/** + * Dual Steppers / Dual Endstops + * + * This section will allow you to use extra E drivers to drive a second motor for X, Y, or Z axes. + * + * For example, set X_DUAL_STEPPER_DRIVERS setting to use a second motor. If the motors need to + * spin in opposite directions set INVERT_X2_VS_X_DIR. If the second motor needs its own endstop + * set X_DUAL_ENDSTOPS. This can adjust for "racking." Use X2_USE_ENDSTOP to set the endstop plug + * that should be used for the second endstop. Extra endstops will appear in the output of 'M119'. + * + * Use X_DUAL_ENDSTOP_ADJUSTMENT to adjust for mechanical imperfection. After homing both motors + * this offset is applied to the X2 motor. To find the offset home the X axis, and measure the error + * in X2. Dual endstop offsets can be set at runtime with 'M666 X Y Z'. + */ + +//#define X_DUAL_STEPPER_DRIVERS +#if ENABLED(X_DUAL_STEPPER_DRIVERS) + #define INVERT_X2_VS_X_DIR true // Set 'true' if X motors should rotate in opposite directions + //#define X_DUAL_ENDSTOPS + #if ENABLED(X_DUAL_ENDSTOPS) + #define X2_USE_ENDSTOP _XMAX_ + #define X_DUAL_ENDSTOPS_ADJUSTMENT 0 + #endif +#endif + +//#define Y_DUAL_STEPPER_DRIVERS +#if ENABLED(Y_DUAL_STEPPER_DRIVERS) + #define INVERT_Y2_VS_Y_DIR true // Set 'true' if Y motors should rotate in opposite directions + //#define Y_DUAL_ENDSTOPS + #if ENABLED(Y_DUAL_ENDSTOPS) + #define Y2_USE_ENDSTOP _YMAX_ + #define Y_DUAL_ENDSTOPS_ADJUSTMENT 0 + #endif +#endif + +//#define Z_DUAL_STEPPER_DRIVERS +#if ENABLED(Z_DUAL_STEPPER_DRIVERS) + //#define Z_DUAL_ENDSTOPS + #if ENABLED(Z_DUAL_ENDSTOPS) + #define Z2_USE_ENDSTOP _XMAX_ + #define Z_DUAL_ENDSTOPS_ADJUSTMENT 0 + #endif +#endif + +//#define Z_TRIPLE_STEPPER_DRIVERS +#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS) + //#define Z_TRIPLE_ENDSTOPS + #if ENABLED(Z_TRIPLE_ENDSTOPS) + #define Z2_USE_ENDSTOP _XMAX_ + #define Z3_USE_ENDSTOP _YMAX_ + #define Z_TRIPLE_ENDSTOPS_ADJUSTMENT2 0 + #define Z_TRIPLE_ENDSTOPS_ADJUSTMENT3 0 + #endif +#endif + +/** + * Dual X Carriage + * + * This setup has two X carriages that can move independently, each with its own hotend. + * The carriages can be used to print an object with two colors or materials, or in + * "duplication mode" it can print two identical or X-mirrored objects simultaneously. + * The inactive carriage is parked automatically to prevent oozing. + * X1 is the left carriage, X2 the right. They park and home at opposite ends of the X axis. + * By default the X2 stepper is assigned to the first unused E plug on the board. + * + * The following Dual X Carriage modes can be selected with M605 S: + * + * 0 : (FULL_CONTROL) The slicer has full control over both X-carriages and can achieve optimal travel + * results as long as it supports dual X-carriages. (M605 S0) + * + * 1 : (AUTO_PARK) The firmware automatically parks and unparks the X-carriages on tool-change so + * that additional slicer support is not required. (M605 S1) + * + * 2 : (DUPLICATION) The firmware moves the second X-carriage and extruder in synchronization with + * the first X-carriage and extruder, to print 2 copies of the same object at the same time. + * Set the constant X-offset and temperature differential with M605 S2 X[offs] R[deg] and + * follow with M605 S2 to initiate duplicated movement. + * + * 3 : (MIRRORED) Formbot/Vivedino-inspired mirrored mode in which the second extruder duplicates + * the movement of the first except the second extruder is reversed in the X axis. + * Set the initial X offset and temperature differential with M605 S2 X[offs] R[deg] and + * follow with M605 S3 to initiate mirrored movement. + */ +//#define DUAL_X_CARRIAGE +#if ENABLED(DUAL_X_CARRIAGE) + #define X1_MIN_POS X_MIN_POS // Set to X_MIN_POS + #define X1_MAX_POS X_BED_SIZE // Set a maximum so the first X-carriage can't hit the parked second X-carriage + #define X2_MIN_POS 80 // Set a minimum to ensure the second X-carriage can't hit the parked first X-carriage + #define X2_MAX_POS 353 // Set this to the distance between toolheads when both heads are homed + #define X2_HOME_DIR 1 // Set to 1. The second X-carriage always homes to the maximum endstop position + #define X2_HOME_POS X2_MAX_POS // Default X2 home position. Set to X2_MAX_POS. + // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software + // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops + // without modifying the firmware (through the "M218 T1 X???" command). + // Remember: you should set the second extruder x-offset to 0 in your slicer. + + // This is the default power-up mode which can be later using M605. + #define DEFAULT_DUAL_X_CARRIAGE_MODE DXC_AUTO_PARK_MODE + + // Default x offset in duplication mode (typically set to half print bed width) + #define DEFAULT_DUPLICATION_X_OFFSET 100 + +#endif // DUAL_X_CARRIAGE + +// Activate a solenoid on the active extruder with M380. Disable all with M381. +// Define SOL0_PIN, SOL1_PIN, etc., for each extruder that has a solenoid. +//#define EXT_SOLENOID + +// @section homing + +// Homing hits each endstop, retracts by these distances, then does a slower bump. +#define X_HOME_BUMP_MM 5 +#define Y_HOME_BUMP_MM 5 +#define Z_HOME_BUMP_MM 3 +#define HOMING_BUMP_DIVISOR { 2, 2, 4 } // Re-Bump Speed Divisor (Divides the Homing Feedrate) +//#define QUICK_HOME // If homing includes X and Y, do a diagonal move initially +//#define HOMING_BACKOFF_MM { 2, 2, 2 } // (mm) Move away from the endstops after homing + +// When G28 is called, this option will make Y home before X +//#define HOME_Y_BEFORE_X + +// Enable this if X or Y can't home without homing the other axis first. +//#define CODEPENDENT_XY_HOMING + +#if ENABLED(BLTOUCH) + /** + * Either: Use the defaults (recommended) or: For special purposes, use the following DEFINES + * Do not activate settings that the probe might not understand. Clones might misunderstand + * advanced commands. + * + * Note: If the probe is not deploying, check a "Cmd: Reset" and "Cmd: Self-Test" and then + * check the wiring of the BROWN, RED and ORANGE wires. + * + * Note: If the trigger signal of your probe is not being recognized, it has been very often + * because the BLACK and WHITE wires needed to be swapped. They are not "interchangeable" + * like they would be with a real switch. So please check the wiring first. + * + * Settings for all BLTouch and clone probes: + */ + + // Safety: The probe needs time to recognize the command. + // Minimum command delay (ms). Enable and increase if needed. + //#define BLTOUCH_DELAY 500 + + /** + * Settings for BLTOUCH Classic 1.2, 1.3 or BLTouch Smart 1.0, 2.0, 2.2, 3.0, 3.1, and most clones: + */ + + // Feature: Switch into SW mode after a deploy. It makes the output pulse longer. Can be useful + // in special cases, like noisy or filtered input configurations. + //#define BLTOUCH_FORCE_SW_MODE + + /** + * Settings for BLTouch Smart 3.0 and 3.1 + * Summary: + * - Voltage modes: 5V and OD (open drain - "logic voltage free") output modes + * - High-Speed mode + * - Disable LCD voltage options + */ + + /** + * Danger: Don't activate 5V mode unless attached to a 5V-tolerant controller! + * V3.0 or 3.1: Set default mode to 5V mode at Marlin startup. + * If disabled, OD mode is the hard-coded default on 3.0 + * On startup, Marlin will compare its eeprom to this vale. If the selected mode + * differs, a mode set eeprom write will be completed at initialization. + * Use the option below to force an eeprom write to a V3.1 probe regardless. + */ + //#define BLTOUCH_SET_5V_MODE + + /** + * Safety: Activate if connecting a probe with an unknown voltage mode. + * V3.0: Set a probe into mode selected above at Marlin startup. Required for 5V mode on 3.0 + * V3.1: Force a probe with unknown mode into selected mode at Marlin startup ( = Probe EEPROM write ) + * To preserve the life of the probe, use this once then turn it off and re-flash. + */ + //#define BLTOUCH_FORCE_MODE_SET + + /** + * Use "HIGH SPEED" mode for probing. + * Danger: Disable if your probe sometimes fails. Only suitable for stable well-adjusted systems. + * This feature was designed for Delta's with very fast Z moves however higher speed cartesians may function + * If the machine cannot raise the probe fast enough after a trigger, it may enter a fault state. + */ + //#define BLTOUCH_HS_MODE + + // Safety: Enable voltage mode settings in the LCD menu. + //#define BLTOUCH_LCD_VOLTAGE_MENU + +#endif // BLTOUCH + +/** + * Z Steppers Auto-Alignment + * Add the G34 command to align multiple Z steppers using a bed probe. + */ +//#define Z_STEPPER_AUTO_ALIGN +#if ENABLED(Z_STEPPER_AUTO_ALIGN) + // Define probe X and Y positions for Z1, Z2 [, Z3] + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align + #define Z_STEPPER_ALIGN_ITERATIONS 3 + // Enable to restore leveling setup after operation + #define RESTORE_LEVELING_AFTER_G34 + + // On a 300mm bed a 5% grade would give a misalignment of ~1.5cm + #define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle + + // Use the amplification factor to de-/increase correction step. + // In case the stepper (spindle) position is further out than the test point + // Use a value > 1. NOTE: This may cause instability + #define Z_STEPPER_ALIGN_AMP 1.0 + // Stop criterion. If the accuracy is better than this stop iterating early + #define Z_STEPPER_ALIGN_ACC 0.02 +#endif + +// @section motion + +#define AXIS_RELATIVE_MODES { false, false, false, false } + +// Add a Duplicate option for well-separated conjoined nozzles +//#define MULTI_NOZZLE_DUPLICATION + +// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step. +#define INVERT_X_STEP_PIN false +#define INVERT_Y_STEP_PIN false +#define INVERT_Z_STEP_PIN false +#define INVERT_E_STEP_PIN false + +// Default stepper release if idle. Set to 0 to deactivate. +// Steppers will shut down DEFAULT_STEPPER_DEACTIVE_TIME seconds after the last move when DISABLE_INACTIVE_? is true. +// Time can be set by M18 and M84. +#define DEFAULT_STEPPER_DEACTIVE_TIME 60 +#define DISABLE_INACTIVE_X true +#define DISABLE_INACTIVE_Y true +#define DISABLE_INACTIVE_Z true // Set to false if the nozzle will fall down on your printed part when print has finished. +#define DISABLE_INACTIVE_E true + +#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate +#define DEFAULT_MINTRAVELFEEDRATE 0.0 + +//#define HOME_AFTER_DEACTIVATE // Require rehoming after steppers are deactivated + +// Minimum time that a segment needs to take if the buffer is emptied +#define DEFAULT_MINSEGMENTTIME 20000 // (ms) + +// If defined the movements slow down when the look ahead buffer is only half full +#define SLOWDOWN + +// Frequency limit +// See nophead's blog for more info +// Not working O +//#define XY_FREQUENCY_LIMIT 15 + +// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end +// of the buffer and all stops. This should not be much greater than zero and should only be changed +// if unwanted behavior is observed on a user's machine when running at very slow speeds. +#define MINIMUM_PLANNER_SPEED 0.05 // (mm/s) + +// +// Backlash Compensation +// Adds extra movement to axes on direction-changes to account for backlash. +// +//#define BACKLASH_COMPENSATION +#if ENABLED(BACKLASH_COMPENSATION) + // Define values for backlash distance and correction. + // If BACKLASH_GCODE is enabled these values are the defaults. + #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm) + #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction + + // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments + // to reduce print artifacts. (Enabling this is costly in memory and computation!) + //#define BACKLASH_SMOOTHING_MM 3 // (mm) + + // Add runtime configuration and tuning of backlash values (M425) + //#define BACKLASH_GCODE + + #if ENABLED(BACKLASH_GCODE) + // Measure the Z backlash when probing (G29) and set with "M425 Z" + #define MEASURE_BACKLASH_WHEN_PROBING + + #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING) + // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT + // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION + // increments while checking for the contact to be broken. + #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm) + #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm) + #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m) + #endif + #endif +#endif + +/** + * Automatic backlash, position and hotend offset calibration + * + * Enable G425 to run automatic calibration using an electrically- + * conductive cube, bolt, or washer mounted on the bed. + * + * G425 uses the probe to touch the top and sides of the calibration object + * on the bed and measures and/or correct positional offsets, axis backlash + * and hotend offsets. + * + * Note: HOTEND_OFFSET and CALIBRATION_OBJECT_CENTER must be set to within + * ±5mm of true values for G425 to succeed. + */ +//#define CALIBRATION_GCODE +#if ENABLED(CALIBRATION_GCODE) + + #define CALIBRATION_MEASUREMENT_RESOLUTION 0.01 // mm + + #define CALIBRATION_FEEDRATE_SLOW 60 // mm/m + #define CALIBRATION_FEEDRATE_FAST 1200 // mm/m + #define CALIBRATION_FEEDRATE_TRAVEL 3000 // mm/m + + // The following parameters refer to the conical section of the nozzle tip. + #define CALIBRATION_NOZZLE_TIP_HEIGHT 1.0 // mm + #define CALIBRATION_NOZZLE_OUTER_DIAMETER 2.0 // mm + + // Uncomment to enable reporting (required for "G425 V", but consumes PROGMEM). + //#define CALIBRATION_REPORTING + + // The true location and dimension the cube/bolt/washer on the bed. + #define CALIBRATION_OBJECT_CENTER { 264.0, -22.0, -2.0 } // mm + #define CALIBRATION_OBJECT_DIMENSIONS { 10.0, 10.0, 10.0 } // mm + + // Comment out any sides which are unreachable by the probe. For best + // auto-calibration results, all sides must be reachable. + #define CALIBRATION_MEASURE_RIGHT + #define CALIBRATION_MEASURE_FRONT + #define CALIBRATION_MEASURE_LEFT + #define CALIBRATION_MEASURE_BACK + + // Probing at the exact top center only works if the center is flat. If + // probing on a screwhead or hollow washer, probe near the edges. + //#define CALIBRATION_MEASURE_AT_TOP_EDGES + + // Define pin which is read during calibration + #ifndef CALIBRATION_PIN + #define CALIBRATION_PIN -1 // Override in pins.h or set to -1 to use your Z endstop + #define CALIBRATION_PIN_INVERTING false // Set to true to invert the pin + //#define CALIBRATION_PIN_PULLDOWN + #define CALIBRATION_PIN_PULLUP + #endif +#endif + +/** + * Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies + * below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible + * vibration and surface artifacts. The algorithm adapts to provide the best possible step smoothing at the + * lowest stepping frequencies. + */ +//#define ADAPTIVE_STEP_SMOOTHING + +/** + * Custom Microstepping + * Override as-needed for your setup. Up to 3 MS pins are supported. + */ +//#define MICROSTEP1 LOW,LOW,LOW +//#define MICROSTEP2 HIGH,LOW,LOW +//#define MICROSTEP4 LOW,HIGH,LOW +//#define MICROSTEP8 HIGH,HIGH,LOW +//#define MICROSTEP16 LOW,LOW,HIGH +//#define MICROSTEP32 HIGH,LOW,HIGH + +// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU. +#define MICROSTEP_MODES { 16, 16, 16, 16, 16, 16 } // [1,2,4,8,16] + +/** + * @section stepper motor current + * + * Some boards have a means of setting the stepper motor current via firmware. + * + * The power on motor currents are set by: + * PWM_MOTOR_CURRENT - used by MINIRAMBO & ULTIMAIN_2 + * known compatible chips: A4982 + * DIGIPOT_MOTOR_CURRENT - used by BQ_ZUM_MEGA_3D, RAMBO & SCOOVO_X9H + * known compatible chips: AD5206 + * DAC_MOTOR_CURRENT_DEFAULT - used by PRINTRBOARD_REVF & RIGIDBOARD_V2 + * known compatible chips: MCP4728 + * DIGIPOT_I2C_MOTOR_CURRENTS - used by 5DPRINT, AZTEEG_X3_PRO, AZTEEG_X5_MINI_WIFI, MIGHTYBOARD_REVE + * known compatible chips: MCP4451, MCP4018 + * + * Motor currents can also be set by M907 - M910 and by the LCD. + * M907 - applies to all. + * M908 - BQ_ZUM_MEGA_3D, RAMBO, PRINTRBOARD_REVF, RIGIDBOARD_V2 & SCOOVO_X9H + * M909, M910 & LCD - only PRINTRBOARD_REVF & RIGIDBOARD_V2 + */ +//#define PWM_MOTOR_CURRENT { 1300, 1300, 1250 } // Values in milliamps +//#define DIGIPOT_MOTOR_CURRENT { 135,135,135,135,135 } // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) +//#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis + +// Use an I2C based DIGIPOT (e.g., Azteeg X3 Pro) +//#define DIGIPOT_I2C +#if ENABLED(DIGIPOT_I2C) && !defined(DIGIPOT_I2C_ADDRESS_A) + /** + * Common slave addresses: + * + * A (A shifted) B (B shifted) IC + * Smoothie 0x2C (0x58) 0x2D (0x5A) MCP4451 + * AZTEEG_X3_PRO 0x2C (0x58) 0x2E (0x5C) MCP4451 + * AZTEEG_X5_MINI 0x2C (0x58) 0x2E (0x5C) MCP4451 + * AZTEEG_X5_MINI_WIFI 0x58 0x5C MCP4451 + * MIGHTYBOARD_REVE 0x2F (0x5E) MCP4018 + */ + #define DIGIPOT_I2C_ADDRESS_A 0x2C // unshifted slave address for first DIGIPOT + #define DIGIPOT_I2C_ADDRESS_B 0x2D // unshifted slave address for second DIGIPOT +#endif + +//#define DIGIPOT_MCP4018 // Requires library from https://github.com/stawel/SlowSoftI2CMaster +#define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4 AZTEEG_X3_PRO: 8 MKS SBASE: 5 +// Actual motor currents in Amps. The number of entries must match DIGIPOT_I2C_NUM_CHANNELS. +// These correspond to the physical drivers, so be mindful if the order is changed. +#define DIGIPOT_I2C_MOTOR_CURRENTS { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 } // AZTEEG_X3_PRO + +//=========================================================================== +//=============================Additional Features=========================== +//=========================================================================== + +// @section lcd + +#if EITHER(ULTIPANEL, EXTENSIBLE_UI) + #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 60 } // Feedrates for manual moves along X, Y, Z, E from panel + #define SHORT_MANUAL_Z_MOVE 0.025 // (mm) Smallest manual Z move (< 0.1mm) + #if ENABLED(ULTIPANEL) + #define MANUAL_E_MOVES_RELATIVE // Display extruder move distance rather than "position" + #define ULTIPANEL_FEEDMULTIPLY // Encoder sets the feedrate multiplier on the Status Screen + #endif +#endif + +// Change values more rapidly when the encoder is rotated faster +#define ENCODER_RATE_MULTIPLIER +#if ENABLED(ENCODER_RATE_MULTIPLIER) + #define ENCODER_10X_STEPS_PER_SEC 30 // (steps/s) Encoder rate for 10x speed + #define ENCODER_100X_STEPS_PER_SEC 80 // (steps/s) Encoder rate for 100x speed +#endif + +// Play a beep when the feedrate is changed from the Status Screen +//#define BEEP_ON_FEEDRATE_CHANGE +#if ENABLED(BEEP_ON_FEEDRATE_CHANGE) + #define FEEDRATE_CHANGE_BEEP_DURATION 10 + #define FEEDRATE_CHANGE_BEEP_FREQUENCY 440 +#endif + +#if HAS_LCD_MENU + + // Include a page of printer information in the LCD Main Menu + //#define LCD_INFO_MENU + #if ENABLED(LCD_INFO_MENU) + //#define LCD_PRINTER_INFO_IS_BOOTSCREEN // Show bootscreen(s) instead of Printer Info pages + #endif + + // BACK menu items keep the highlight at the top + //#define TURBO_BACK_MENU_ITEM + + /** + * LED Control Menu + * Add LED Control to the LCD menu + */ + //#define LED_CONTROL_MENU + #if ENABLED(LED_CONTROL_MENU) + #define LED_COLOR_PRESETS // Enable the Preset Color menu option + #if ENABLED(LED_COLOR_PRESETS) + #define LED_USER_PRESET_RED 255 // User defined RED value + #define LED_USER_PRESET_GREEN 128 // User defined GREEN value + #define LED_USER_PRESET_BLUE 0 // User defined BLUE value + #define LED_USER_PRESET_WHITE 255 // User defined WHITE value + #define LED_USER_PRESET_BRIGHTNESS 255 // User defined intensity + //#define LED_USER_PRESET_STARTUP // Have the printer display the user preset color on startup + #endif + #endif + +#endif // HAS_LCD_MENU + +// Scroll a longer status message into view +//#define STATUS_MESSAGE_SCROLLING + +// On the Info Screen, display XY with one decimal place when possible +//#define LCD_DECIMAL_SMALL_XY + +// The timeout (in ms) to return to the status screen from sub-menus +//#define LCD_TIMEOUT_TO_STATUS 15000 + +// Add an 'M73' G-code to set the current percentage +//#define LCD_SET_PROGRESS_MANUALLY + +#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS + //#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing + #if ENABLED(LCD_PROGRESS_BAR) + #define PROGRESS_BAR_BAR_TIME 2000 // (ms) Amount of time to show the bar + #define PROGRESS_BAR_MSG_TIME 3000 // (ms) Amount of time to show the status message + #define PROGRESS_MSG_EXPIRE 0 // (ms) Amount of time to retain the status message (0=forever) + //#define PROGRESS_MSG_ONCE // Show the message for MSG_TIME then clear it + //#define LCD_PROGRESS_BAR_TEST // Add a menu item to test the progress bar + #endif +#endif + +#if ENABLED(SDSUPPORT) + + // Some RAMPS and other boards don't detect when an SD card is inserted. You can work + // around this by connecting a push button or single throw switch to the pin defined + // as SD_DETECT_PIN in your board's pins definitions. + // This setting should be disabled unless you are using a push button, pulling the pin to ground. + // Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER). + #define SD_DETECT_INVERTED + + #define SD_FINISHED_STEPPERRELEASE true // Disable steppers when SD Print is finished + #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the Z enabled so your bed stays in place. + + // Reverse SD sort to show "more recent" files first, according to the card's FAT. + // Since the FAT gets out of order with usage, SDCARD_SORT_ALPHA is recommended. + #define SDCARD_RATHERRECENTFIRST + + #define SD_MENU_CONFIRM_START // Confirm the selected SD file before printing + + //#define MENU_ADDAUTOSTART // Add a menu option to run auto#.g files + + #define EVENT_GCODE_SD_STOP "G28XY" // G-code to run on Stop Print (e.g., "G28XY" or "G27") + + /** + * Continue after Power-Loss (Creality3D) + * + * Store the current state to the SD Card at the start of each layer + * during SD printing. If the recovery file is found at boot time, present + * an option on the LCD screen to continue the print from the last-known + * point in the file. + */ + //#define POWER_LOSS_RECOVERY + #if ENABLED(POWER_LOSS_RECOVERY) + //#define POWER_LOSS_PIN 44 // Pin to detect power loss + //#define POWER_LOSS_STATE HIGH // State of pin indicating power loss + //#define POWER_LOSS_PULL // Set pullup / pulldown as appropriate + //#define POWER_LOSS_PURGE_LEN 20 // (mm) Length of filament to purge on resume + //#define POWER_LOSS_RETRACT_LEN 10 // (mm) Length of filament to retract on fail. Requires backup power. + + // Without a POWER_LOSS_PIN the following option helps reduce wear on the SD card, + // especially with "vase mode" printing. Set too high and vases cannot be continued. + #define POWER_LOSS_MIN_Z_CHANGE 0.05 // (mm) Minimum Z change before saving power-loss data + #endif + + /** + * Sort SD file listings in alphabetical order. + * + * With this option enabled, items on SD cards will be sorted + * by name for easier navigation. + * + * By default... + * + * - Use the slowest -but safest- method for sorting. + * - Folders are sorted to the top. + * - The sort key is statically allocated. + * - No added G-code (M34) support. + * - 40 item sorting limit. (Items after the first 40 are unsorted.) + * + * SD sorting uses static allocation (as set by SDSORT_LIMIT), allowing the + * compiler to calculate the worst-case usage and throw an error if the SRAM + * limit is exceeded. + * + * - SDSORT_USES_RAM provides faster sorting via a static directory buffer. + * - SDSORT_USES_STACK does the same, but uses a local stack-based buffer. + * - SDSORT_CACHE_NAMES will retain the sorted file listing in RAM. (Expensive!) + * - SDSORT_DYNAMIC_RAM only uses RAM when the SD menu is visible. (Use with caution!) + */ + //#define SDCARD_SORT_ALPHA + + // SD Card Sorting options + #if ENABLED(SDCARD_SORT_ALPHA) + #define SDSORT_LIMIT 40 // Maximum number of sorted items (10-256). Costs 27 bytes each. + #define FOLDER_SORTING -1 // -1=above 0=none 1=below + #define SDSORT_GCODE false // Allow turning sorting on/off with LCD and M34 g-code. + #define SDSORT_USES_RAM false // Pre-allocate a static array for faster pre-sorting. + #define SDSORT_USES_STACK false // Prefer the stack for pre-sorting to give back some SRAM. (Negated by next 2 options.) + #define SDSORT_CACHE_NAMES false // Keep sorted items in RAM longer for speedy performance. Most expensive option. + #define SDSORT_DYNAMIC_RAM false // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use! + #define SDSORT_CACHE_VFATS 2 // Maximum number of 13-byte VFAT entries to use for sorting. + // Note: Only affects SCROLL_LONG_FILENAMES with SDSORT_CACHE_NAMES but not SDSORT_DYNAMIC_RAM. + #endif + + // This allows hosts to request long names for files and folders with M33 + //#define LONG_FILENAME_HOST_SUPPORT + + // Enable this option to scroll long filenames in the SD card menu + //#define SCROLL_LONG_FILENAMES + + // Leave the heaters on after Stop Print (not recommended!) + //#define SD_ABORT_NO_COOLDOWN + + /** + * This option allows you to abort SD printing when any endstop is triggered. + * This feature must be enabled with "M540 S1" or from the LCD menu. + * To have any effect, endstops must be enabled during SD printing. + */ + //#define SD_ABORT_ON_ENDSTOP_HIT + + /** + * This option makes it easier to print the same SD Card file again. + * On print completion the LCD Menu will open with the file selected. + * You can just click to start the print, or navigate elsewhere. + */ + //#define SD_REPRINT_LAST_SELECTED_FILE + + /** + * Auto-report SdCard status with M27 S + */ + //#define AUTO_REPORT_SD_STATUS + + /** + * Support for USB thumb drives using an Arduino USB Host Shield or + * equivalent MAX3421E breakout board. The USB thumb drive will appear + * to Marlin as an SD card. + * + * The MAX3421E can be assigned the same pins as the SD card reader, with + * the following pin mapping: + * + * SCLK, MOSI, MISO --> SCLK, MOSI, MISO + * INT --> SD_DETECT_PIN [1] + * SS --> SDSS + * + * [1] On AVR an interrupt-capable pin is best for UHS3 compatibility. + */ + //#define USB_FLASH_DRIVE_SUPPORT + #if ENABLED(USB_FLASH_DRIVE_SUPPORT) + #define USB_CS_PIN SDSS + #define USB_INTR_PIN SD_DETECT_PIN + + /** + * USB Host Shield Library + * + * - UHS2 uses no interrupts and has been production-tested + * on a LulzBot TAZ Pro with a 32-bit Archim board. + * + * - UHS3 is newer code with better USB compatibility. But it + * is less tested and is known to interfere with Servos. + * [1] This requires USB_INTR_PIN to be interrupt-capable. + */ + //#define USE_UHS3_USB + #endif + + /** + * When using a bootloader that supports SD-Firmware-Flashing, + * add a menu item to activate SD-FW-Update on the next reboot. + * + * Requires ATMEGA2560 (Arduino Mega) + * + * Tested with this bootloader: + * https://github.com/FleetProbe/MicroBridge-Arduino-ATMega2560 + */ + //#define SD_FIRMWARE_UPDATE + #if ENABLED(SD_FIRMWARE_UPDATE) + #define SD_FIRMWARE_UPDATE_EEPROM_ADDR 0x1FF + #define SD_FIRMWARE_UPDATE_ACTIVE_VALUE 0xF0 + #define SD_FIRMWARE_UPDATE_INACTIVE_VALUE 0xFF + #endif + + // Add an optimized binary file transfer mode, initiated with 'M28 B1' + //#define BINARY_FILE_TRANSFER + + #if HAS_SDCARD_CONNECTION + /** + * Set this option to one of the following (or the board's defaults apply): + * + * LCD - Use the SD drive in the external LCD controller. + * ONBOARD - Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.) + * CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file). + * + * :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ] + */ + //#define SDCARD_CONNECTION LCD + #endif + +#endif // SDSUPPORT + +/** + * By default an onboard SD card reader may be shared as a USB mass- + * storage device. This option hides the SD card from the host PC. + */ +//#define NO_SD_HOST_DRIVE // Disable SD Card access over USB (for security). + +/** + * Additional options for Graphical Displays + * + * Use the optimizations here to improve printing performance, + * which can be adversely affected by graphical display drawing, + * especially when doing several short moves, and when printing + * on DELTA and SCARA machines. + * + * Some of these options may result in the display lagging behind + * controller events, as there is a trade-off between reliable + * printing performance versus fast display updates. + */ +#if HAS_GRAPHICAL_LCD + // Show SD percentage next to the progress bar + //#define DOGM_SD_PERCENT + + // Enable to save many cycles by drawing a hollow frame on the Info Screen + #define XYZ_HOLLOW_FRAME + + // Enable to save many cycles by drawing a hollow frame on Menu Screens + #define MENU_HOLLOW_FRAME + + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. + //#define USE_BIG_EDIT_FONT + + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. + //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 + + // Swap the CW/CCW indicators in the graphics overlay + //#define OVERLAY_GFX_REVERSE + + /** + * ST7920-based LCDs can emulate a 16 x 4 character display using + * the ST7920 character-generator for very fast screen updates. + * Enable LIGHTWEIGHT_UI to use this special display mode. + * + * Since LIGHTWEIGHT_UI has limited space, the position and status + * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the + * length of time to display the status message before clearing. + * + * Set STATUS_EXPIRE_SECONDS to zero to never clear the status. + * This will prevent position updates from being displayed. + */ + #if ENABLED(U8GLIB_ST7920) + //#define LIGHTWEIGHT_UI + #if ENABLED(LIGHTWEIGHT_UI) + #define STATUS_EXPIRE_SECONDS 20 + #endif + #endif + + /** + * Status (Info) Screen customizations + * These options may affect code size and screen render time. + * Custom status screens can forcibly override these settings. + */ + //#define STATUS_COMBINE_HEATERS // Use combined heater images instead of separate ones + //#define STATUS_HOTEND_NUMBERLESS // Use plain hotend icons instead of numbered ones (with 2+ hotends) + #define STATUS_HOTEND_INVERTED // Show solid nozzle bitmaps when heating (Requires STATUS_HOTEND_ANIM) + #define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating + #define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating + #define STATUS_CHAMBER_ANIM // Use a second bitmap to indicate chamber heating + //#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap + //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap + //#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames + //#define STATUS_HEAT_PERCENT // Show heating in a progress bar + //#define BOOT_MARLIN_LOGO_SMALL // Show a smaller Marlin logo on the Boot Screen (saving 399 bytes of flash) + //#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~‭3260 (or ~940) bytes of PROGMEM. + + // Frivolous Game Options + //#define MARLIN_BRICKOUT + //#define MARLIN_INVADERS + //#define MARLIN_SNAKE + //#define GAMES_EASTER_EGG // Add extra blank lines above the "Games" sub-menu + +#endif // HAS_GRAPHICAL_LCD + +// +// Lulzbot Touch UI +// +#if ENABLED(LULZBOT_TOUCH_UI) + // Display board used + //#define LCD_FTDI_VM800B35A // FTDI 3.5" with FT800 (320x240) + //#define LCD_4DSYSTEMS_4DLCD_FT843 // 4D Systems 4.3" (480x272) + //#define LCD_HAOYU_FT800CB // Haoyu with 4.3" or 5" (480x272) + //#define LCD_HAOYU_FT810CB // Haoyu with 5" (800x480) + //#define LCD_ALEPHOBJECTS_CLCD_UI // Aleph Objects Color LCD UI + + // Correct the resolution if not using the stock TFT panel. + //#define TOUCH_UI_320x240 + //#define TOUCH_UI_480x272 + //#define TOUCH_UI_800x480 + + // Mappings for boards with a standard RepRapDiscount Display connector + //#define AO_EXP1_PINMAP // AlephObjects CLCD UI EXP1 mapping + //#define AO_EXP2_PINMAP // AlephObjects CLCD UI EXP2 mapping + //#define CR10_TFT_PINMAP // Rudolph Riedel's CR10 pin mapping + //#define OTHER_PIN_LAYOUT // Define pins manually below + #if ENABLED(OTHER_PIN_LAYOUT) + // The pins for CS and MOD_RESET (PD) must be chosen. + #define CLCD_MOD_RESET 9 + #define CLCD_SPI_CS 10 + + // If using software SPI, specify pins for SCLK, MOSI, MISO + //#define CLCD_USE_SOFT_SPI + #if ENABLED(CLCD_USE_SOFT_SPI) + #define CLCD_SOFT_SPI_MOSI 11 + #define CLCD_SOFT_SPI_MISO 12 + #define CLCD_SOFT_SPI_SCLK 13 + #endif + #endif + + // Display Orientation. An inverted (i.e. upside-down) display + // is supported on the FT800. The FT810 and beyond also support + // portrait and mirrored orientations. + //#define TOUCH_UI_INVERTED + //#define TOUCH_UI_PORTRAIT + //#define TOUCH_UI_MIRRORED + + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. + //#define TOUCH_UI_USE_UTF8 + #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. + #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif + #endif + + // Use a smaller font when labels don't fit buttons + #define TOUCH_UI_FIT_TEXT + + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it + + // Use a numeric passcode for "Screen lock" keypad. + // (recommended for smaller displays) + //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG +#endif + +// +// FSMC Graphical TFT +// +#if ENABLED(FSMC_GRAPHICAL_TFT) + //#define TFT_MARLINUI_COLOR 0xFFFF // White + //#define TFT_MARLINBG_COLOR 0x0000 // Black + //#define TFT_DISABLED_COLOR 0x0003 // Almost black + //#define TFT_BTCANCEL_COLOR 0xF800 // Red + //#define TFT_BTARROWS_COLOR 0xDEE6 // 11011 110111 00110 Yellow + //#define TFT_BTOKMENU_COLOR 0x145F // 00010 100010 11111 Cyan +#endif + +// @section safety + +/** + * The watchdog hardware timer will do a reset and disable all outputs + * if the firmware gets too overloaded to read the temperature sensors. + * + * If you find that watchdog reboot causes your AVR board to hang forever, + * enable WATCHDOG_RESET_MANUAL to use a custom timer instead of WDTO. + * NOTE: This method is less reliable as it can only catch hangups while + * interrupts are enabled. + */ +#define USE_WATCHDOG +#if ENABLED(USE_WATCHDOG) + //#define WATCHDOG_RESET_MANUAL +#endif + +// @section lcd + +/** + * Babystepping enables movement of the axes by tiny increments without changing + * the current position values. This feature is used primarily to adjust the Z + * axis in the first layer of a print in real-time. + * + * Warning: Does not respect endstops! + */ +//#define BABYSTEPPING +#if ENABLED(BABYSTEPPING) + //#define BABYSTEP_WITHOUT_HOMING + //#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA! + #define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way + #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion. + + //#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping. + #if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING) + #define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds. + // Note: Extra time may be added to mitigate controller latency. + //#define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement). + //#define MOVE_Z_WHEN_IDLE // Jump to the move Z menu on doubleclick when printer is idle. + #if ENABLED(MOVE_Z_WHEN_IDLE) + #define MOVE_Z_IDLE_MULTIPLICATOR 1 // Multiply 1mm by this factor for the move step size. + #endif + #endif + + //#define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28 + + //#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping + #if ENABLED(BABYSTEP_ZPROBE_OFFSET) + //#define BABYSTEP_HOTEND_Z_OFFSET // For multiple hotends, babystep relative Z offsets + //#define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor + #endif +#endif + +// @section extruder + +/** + * Linear Pressure Control v1.5 + * + * Assumption: advance [steps] = k * (delta velocity [steps/s]) + * K=0 means advance disabled. + * + * NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions! + * + * Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak. + * Larger K values will be needed for flexible filament and greater distances. + * If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk) + * print acceleration will be reduced during the affected moves to keep within the limit. + * + * See http://marlinfw.org/docs/features/lin_advance.html for full instructions. + * Mention @Sebastianv650 on GitHub to alert the author of any issues. + */ +//#define LIN_ADVANCE +#if ENABLED(LIN_ADVANCE) + //#define EXTRA_LIN_ADVANCE_K // Enable for second linear advance constants + #define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed + //#define LA_DEBUG // If enabled, this will generate debug information output over USB. +#endif + +// @section leveling + +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + +#if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) + // Override the mesh area if the automatic (max) area is too large + //#define MESH_MIN_X MESH_INSET + //#define MESH_MIN_Y MESH_INSET + //#define MESH_MAX_X X_BED_SIZE - (MESH_INSET) + //#define MESH_MAX_Y Y_BED_SIZE - (MESH_INSET) +#endif + +/** + * Repeatedly attempt G29 leveling until it succeeds. + * Stop after G29_MAX_RETRIES attempts. + */ +//#define G29_RETRY_AND_RECOVER +#if ENABLED(G29_RETRY_AND_RECOVER) + #define G29_MAX_RETRIES 3 + #define G29_HALT_ON_FAILURE + /** + * Specify the GCODE commands that will be executed when leveling succeeds, + * between attempts, and after the maximum number of retries have been tried. + */ + #define G29_SUCCESS_COMMANDS "M117 Bed leveling done." + #define G29_RECOVER_COMMANDS "M117 Probe failed. Rewiping.\nG28\nG12 P0 S12 T0" + #define G29_FAILURE_COMMANDS "M117 Bed leveling failed.\nG0 Z10\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nG4 S1" + +#endif + +// @section extras + +// +// G2/G3 Arc Support +// +#define ARC_SUPPORT // Disable this feature to save ~3226 bytes +#if ENABLED(ARC_SUPPORT) + #define MM_PER_ARC_SEGMENT 1 // Length of each arc segment + #define MIN_ARC_SEGMENTS 24 // Minimum number of segments in a complete circle + #define N_ARC_CORRECTION 25 // Number of interpolated segments between corrections + //#define ARC_P_CIRCLES // Enable the 'P' parameter to specify complete circles + //#define CNC_WORKSPACE_PLANES // Allow G2/G3 to operate in XY, ZX, or YZ planes +#endif + +// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes. +//#define BEZIER_CURVE_SUPPORT + +/** + * G38 Probe Target + * + * This option adds G38.2 and G38.3 (probe towards target) + * and optionally G38.4 and G38.5 (probe away from target). + * Set MULTIPLE_PROBING for G38 to probe more than once. + */ +//#define G38_PROBE_TARGET +#if ENABLED(G38_PROBE_TARGET) + //#define G38_PROBE_AWAY // Include G38.4 and G38.5 to probe away from target + #define G38_MINIMUM_MOVE 0.0275 // (mm) Minimum distance that will produce a move. +#endif + +// Moves (or segments) with fewer steps than this will be joined with the next move +#define MIN_STEPS_PER_SEGMENT 6 + +/** + * Minimum delay before and after setting the stepper DIR (in ns) + * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) + * 20 : Minimum for TMC2xxx drivers + * 200 : Minimum for A4988 drivers + * 400 : Minimum for A5984 drivers + * 500 : Minimum for LV8729 drivers (guess, no info in datasheet) + * 650 : Minimum for DRV8825 drivers + * 1500 : Minimum for TB6600 drivers (guess, no info in datasheet) + * 15000 : Minimum for TB6560 drivers (guess, no info in datasheet) + * + * Override the default value based on the driver type set in Configuration.h. + */ +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 + +/** + * Minimum stepper driver pulse width (in µs) + * 0 : Smallest possible width the MCU can produce, compatible with TMC2xxx drivers + * 0 : Minimum 500ns for LV8729, adjusted in stepper.h + * 1 : Minimum for A4988 and A5984 stepper drivers + * 2 : Minimum for DRV8825 stepper drivers + * 3 : Minimum for TB6600 stepper drivers + * 30 : Minimum for TB6560 stepper drivers + * + * Override the default value based on the driver type set in Configuration.h. + */ +//#define MINIMUM_STEPPER_PULSE 2 + +/** + * Maximum stepping rate (in Hz) the stepper driver allows + * If undefined, defaults to 1MHz / (2 * MINIMUM_STEPPER_PULSE) + * 500000 : Maximum for A4988 stepper driver + * 400000 : Maximum for TMC2xxx stepper drivers + * 250000 : Maximum for DRV8825 stepper driver + * 200000 : Maximum for LV8729 stepper driver + * 150000 : Maximum for TB6600 stepper driver + * 15000 : Maximum for TB6560 stepper driver + * + * Override the default value based on the driver type set in Configuration.h. + */ +//#define MAXIMUM_STEPPER_RATE 250000 + +// @section temperature + +// Control heater 0 and heater 1 in parallel. +//#define HEATERS_PARALLEL + +//=========================================================================== +//================================= Buffers ================================= +//=========================================================================== + +// @section hidden + +// The number of linear motions that can be in the plan at any give time. +// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2 (e.g. 8, 16, 32) because shifts and ors are used to do the ring-buffering. +#if ENABLED(SDSUPPORT) + #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller +#else + #define BLOCK_BUFFER_SIZE 16 // maximize block buffer +#endif + +// @section serial + +// The ASCII buffer for serial input +#define MAX_CMD_SIZE 96 +#define BUFSIZE 4 + +// Transmission to Host Buffer Size +// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0. +// To buffer a simple "ok" you need 4 bytes. +// For ADVANCED_OK (M105) you need 32 bytes. +// For debug-echo: 128 bytes for the optimal speed. +// Other output doesn't need to be that speedy. +// :[0, 2, 4, 8, 16, 32, 64, 128, 256] +#define TX_BUFFER_SIZE 0 + +// Host Receive Buffer Size +// Without XON/XOFF flow control (see SERIAL_XON_XOFF below) 32 bytes should be enough. +// To use flow control, set this buffer size to at least 1024 bytes. +// :[0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048] +//#define RX_BUFFER_SIZE 1024 + +#if RX_BUFFER_SIZE >= 1024 + // Enable to have the controller send XON/XOFF control characters to + // the host to signal the RX buffer is becoming full. + //#define SERIAL_XON_XOFF +#endif + +// Add M575 G-code to change the baud rate +//#define BAUD_RATE_GCODE + +#if ENABLED(SDSUPPORT) + // Enable this option to collect and display the maximum + // RX queue usage after transferring a file to SD. + //#define SERIAL_STATS_MAX_RX_QUEUED + + // Enable this option to collect and display the number + // of dropped bytes after a file transfer to SD. + //#define SERIAL_STATS_DROPPED_RX +#endif + +// Enable an emergency-command parser to intercept certain commands as they +// enter the serial receive buffer, so they cannot be blocked. +// Currently handles M108, M112, M410 +// Does not work on boards using AT90USB (USBCON) processors! +//#define EMERGENCY_PARSER + +// Bad Serial-connections can miss a received command by sending an 'ok' +// Therefore some clients abort after 30 seconds in a timeout. +// Some other clients start sending commands while receiving a 'wait'. +// This "wait" is only sent when the buffer is empty. 1 second is a good value here. +//#define NO_TIMEOUTS 1000 // Milliseconds + +// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary. +//#define ADVANCED_OK + +// Printrun may have trouble receiving long strings all at once. +// This option inserts short delays between lines of serial output. +#define SERIAL_OVERRUN_PROTECTION + +// @section extras + +/** + * Extra Fan Speed + * Adds a secondary fan speed for each print-cooling fan. + * 'M106 P T3-255' : Set a secondary speed for + * 'M106 P T2' : Use the set secondary speed + * 'M106 P T1' : Restore the previous fan speed + */ +//#define EXTRA_FAN_SPEED + +/** + * Firmware-based and LCD-controlled retract + * + * Add G10 / G11 commands for automatic firmware-based retract / recover. + * Use M207 and M208 to define parameters for retract / recover. + * + * Use M209 to enable or disable auto-retract. + * With auto-retract enabled, all G1 E moves within the set range + * will be converted to firmware-based retract/recover moves. + * + * Be sure to turn off auto-retract during filament change. + * + * Note that M207 / M208 / M209 settings are saved to EEPROM. + * + */ +//#define FWRETRACT +#if ENABLED(FWRETRACT) + #define FWRETRACT_AUTORETRACT // Override slicer retractions + #if ENABLED(FWRETRACT_AUTORETRACT) + #define MIN_AUTORETRACT 0.1 // (mm) Don't convert E moves under this length + #define MAX_AUTORETRACT 10.0 // (mm) Don't convert E moves over this length + #endif + #define RETRACT_LENGTH 3 // (mm) Default retract length (positive value) + #define RETRACT_LENGTH_SWAP 13 // (mm) Default swap retract length (positive value) + #define RETRACT_FEEDRATE 45 // (mm/s) Default feedrate for retracting + #define RETRACT_ZRAISE 0 // (mm) Default retract Z-raise + #define RETRACT_RECOVER_LENGTH 0 // (mm) Default additional recover length (added to retract length on recover) + #define RETRACT_RECOVER_LENGTH_SWAP 0 // (mm) Default additional swap recover length (added to retract length on recover from toolchange) + #define RETRACT_RECOVER_FEEDRATE 8 // (mm/s) Default feedrate for recovering from retraction + #define RETRACT_RECOVER_FEEDRATE_SWAP 8 // (mm/s) Default feedrate for recovering from swap retraction + #if ENABLED(MIXING_EXTRUDER) + //#define RETRACT_SYNC_MIXING // Retract and restore all mixing steppers simultaneously + #endif +#endif + +/** + * Universal tool change settings. + * Applies to all types of extruders except where explicitly noted. + */ +#if EXTRUDERS > 1 + // Z raise distance for tool-change, as needed for some extruders + #define TOOLCHANGE_ZRAISE 2 // (mm) + //#define TOOLCHANGE_NO_RETURN // Never return to the previous position on tool-change + + // Retract and prime filament on tool-change + //#define TOOLCHANGE_FILAMENT_SWAP + #if ENABLED(TOOLCHANGE_FILAMENT_SWAP) + #define TOOLCHANGE_FIL_SWAP_LENGTH 12 // (mm) + #define TOOLCHANGE_FIL_EXTRA_PRIME 2 // (mm) + #define TOOLCHANGE_FIL_SWAP_RETRACT_SPEED 3600 // (mm/m) + #define TOOLCHANGE_FIL_SWAP_PRIME_SPEED 3600 // (mm/m) + #endif + + /** + * Position to park head during tool change. + * Doesn't apply to SWITCHING_TOOLHEAD, DUAL_X_CARRIAGE, or PARKING_EXTRUDER + */ + //#define TOOLCHANGE_PARK + #if ENABLED(TOOLCHANGE_PARK) + #define TOOLCHANGE_PARK_XY { X_MIN_POS + 10, Y_MIN_POS + 10 } + #define TOOLCHANGE_PARK_XY_FEEDRATE 6000 // (mm/m) + #endif +#endif + +/** + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. + * Adds the GCode M600 for initiating filament change. + * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle. + * + * Requires an LCD display. + * Requires NOZZLE_PARK_FEATURE. + * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. + */ +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_RETRACT_FEEDRATE 60 // (mm/s) Initial retract feedrate. + #define PAUSE_PARK_RETRACT_LENGTH 2 // (mm) Initial retract. + // This short retract is done immediately, before parking the nozzle. + #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // (mm/s) Unload filament feedrate. This can be pretty fast. + #define FILAMENT_CHANGE_UNLOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate. + #define FILAMENT_CHANGE_UNLOAD_LENGTH 100 // (mm) The length of filament for a complete unload. + // For Bowden, the full length of the tube and nozzle. + // For direct drive, the full length of the nozzle. + // Set to 0 for manual unloading. + #define FILAMENT_CHANGE_SLOW_LOAD_FEEDRATE 6 // (mm/s) Slow move when starting load. + #define FILAMENT_CHANGE_SLOW_LOAD_LENGTH 0 // (mm) Slow length, to allow time to insert material. + // 0 to disable start loading and skip to fast load only + #define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE 6 // (mm/s) Load filament feedrate. This can be pretty fast. + #define FILAMENT_CHANGE_FAST_LOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate. + #define FILAMENT_CHANGE_FAST_LOAD_LENGTH 0 // (mm) Load length of filament, from extruder gear to nozzle. + // For Bowden, the full length of the tube and nozzle. + // For direct drive, the full length of the nozzle. + //#define ADVANCED_PAUSE_CONTINUOUS_PURGE // Purge continuously up to the purge length until interrupted. + #define ADVANCED_PAUSE_PURGE_FEEDRATE 3 // (mm/s) Extrude feedrate (after loading). Should be slower than load feedrate. + #define ADVANCED_PAUSE_PURGE_LENGTH 50 // (mm) Length to extrude after loading. + // Set to 0 for manual extrusion. + // Filament can be extruded repeatedly from the Filament Change menu + // until extrusion is consistent, and to purge old filament. + #define ADVANCED_PAUSE_RESUME_PRIME 0 // (mm) Extra distance to prime nozzle after returning from park. + //#define ADVANCED_PAUSE_FANS_PAUSE // Turn off print-cooling fans while the machine is paused. + + // Filament Unload does a Retract, Delay, and Purge first: + #define FILAMENT_UNLOAD_RETRACT_LENGTH 13 // (mm) Unload initial retract length. + #define FILAMENT_UNLOAD_DELAY 5000 // (ms) Delay for the filament to cool after retract. + #define FILAMENT_UNLOAD_PURGE_LENGTH 8 // (mm) An unretract is done, then this length is purged. + + #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety. + #define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed. + #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change. + + //#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change. + //#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change + + //#define FILAMENT_LOAD_UNLOAD_GCODES // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu. + //#define FILAMENT_UNLOAD_ALL_EXTRUDERS // Allow M702 to unload all extruders above a minimum target temp (as set by M302) +#endif + +// @section tmc + +/** + * TMC26X Stepper Driver options + * + * The TMC26XStepper library is required for this stepper driver. + * https://github.com/trinamic/TMC26XStepper + */ +#if HAS_DRIVER(TMC26X) + + #if AXIS_DRIVER_TYPE_X(TMC26X) + #define X_MAX_CURRENT 1000 // (mA) + #define X_SENSE_RESISTOR 91 // (mOhms) + #define X_MICROSTEPS 16 // Number of microsteps + #endif + + #if AXIS_DRIVER_TYPE_X2(TMC26X) + #define X2_MAX_CURRENT 1000 + #define X2_SENSE_RESISTOR 91 + #define X2_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_Y(TMC26X) + #define Y_MAX_CURRENT 1000 + #define Y_SENSE_RESISTOR 91 + #define Y_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_Y2(TMC26X) + #define Y2_MAX_CURRENT 1000 + #define Y2_SENSE_RESISTOR 91 + #define Y2_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_Z(TMC26X) + #define Z_MAX_CURRENT 1000 + #define Z_SENSE_RESISTOR 91 + #define Z_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_Z2(TMC26X) + #define Z2_MAX_CURRENT 1000 + #define Z2_SENSE_RESISTOR 91 + #define Z2_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_Z3(TMC26X) + #define Z3_MAX_CURRENT 1000 + #define Z3_SENSE_RESISTOR 91 + #define Z3_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_E0(TMC26X) + #define E0_MAX_CURRENT 1000 + #define E0_SENSE_RESISTOR 91 + #define E0_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_E1(TMC26X) + #define E1_MAX_CURRENT 1000 + #define E1_SENSE_RESISTOR 91 + #define E1_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_E2(TMC26X) + #define E2_MAX_CURRENT 1000 + #define E2_SENSE_RESISTOR 91 + #define E2_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_E3(TMC26X) + #define E3_MAX_CURRENT 1000 + #define E3_SENSE_RESISTOR 91 + #define E3_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_E4(TMC26X) + #define E4_MAX_CURRENT 1000 + #define E4_SENSE_RESISTOR 91 + #define E4_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_E5(TMC26X) + #define E5_MAX_CURRENT 1000 + #define E5_SENSE_RESISTOR 91 + #define E5_MICROSTEPS 16 + #endif + +#endif // TMC26X + +// @section tmc_smart + +/** + * To use TMC2130, TMC2160, TMC2660, TMC5130, TMC5160 stepper drivers in SPI mode + * connect your SPI pins to the hardware SPI interface on your board and define + * the required CS pins in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 + * pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.). + * You may also use software SPI if you wish to use general purpose IO pins. + * + * To use TMC2208 stepper UART-configurable stepper drivers connect #_SERIAL_TX_PIN + * to the driver side PDN_UART pin with a 1K resistor. + * To use the reading capabilities, also connect #_SERIAL_RX_PIN to PDN_UART without + * a resistor. + * The drivers can also be used with hardware serial. + * + * TMCStepper library is required to use TMC stepper drivers. + * https://github.com/teemuatlut/TMCStepper + */ +#if HAS_TRINAMIC + + #define HOLD_MULTIPLIER 0.5 // Scales down the holding current from run current + #define INTERPOLATE true // Interpolate X/Y/Z_MICROSTEPS to 256 + + #if AXIS_IS_TMC(X) + #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. + #define X_MICROSTEPS 16 // 0..256 + #define X_RSENSE 0.11 + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... + #endif + + #if AXIS_IS_TMC(X2) + #define X2_CURRENT 800 + #define X2_MICROSTEPS 16 + #define X2_RSENSE 0.11 + #define X2_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(Y) + #define Y_CURRENT 800 + #define Y_MICROSTEPS 16 + #define Y_RSENSE 0.11 + #define Y_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(Y2) + #define Y2_CURRENT 800 + #define Y2_MICROSTEPS 16 + #define Y2_RSENSE 0.11 + #define Y2_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(Z) + #define Z_CURRENT 800 + #define Z_MICROSTEPS 16 + #define Z_RSENSE 0.11 + #define Z_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(Z2) + #define Z2_CURRENT 800 + #define Z2_MICROSTEPS 16 + #define Z2_RSENSE 0.11 + #define Z2_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(Z3) + #define Z3_CURRENT 800 + #define Z3_MICROSTEPS 16 + #define Z3_RSENSE 0.11 + #define Z3_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(E0) + #define E0_CURRENT 800 + #define E0_MICROSTEPS 16 + #define E0_RSENSE 0.11 + #define E0_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(E1) + #define E1_CURRENT 800 + #define E1_MICROSTEPS 16 + #define E1_RSENSE 0.11 + #define E1_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(E2) + #define E2_CURRENT 800 + #define E2_MICROSTEPS 16 + #define E2_RSENSE 0.11 + #define E2_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(E3) + #define E3_CURRENT 800 + #define E3_MICROSTEPS 16 + #define E3_RSENSE 0.11 + #define E3_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(E4) + #define E4_CURRENT 800 + #define E4_MICROSTEPS 16 + #define E4_RSENSE 0.11 + #define E4_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(E5) + #define E5_CURRENT 800 + #define E5_MICROSTEPS 16 + #define E5_RSENSE 0.11 + #define E5_CHAIN_POS -1 + #endif + + /** + * Override default SPI pins for TMC2130, TMC2160, TMC2660, TMC5130 and TMC5160 drivers here. + * The default pins can be found in your board's pins file. + */ + //#define X_CS_PIN -1 + //#define Y_CS_PIN -1 + //#define Z_CS_PIN -1 + //#define X2_CS_PIN -1 + //#define Y2_CS_PIN -1 + //#define Z2_CS_PIN -1 + //#define Z3_CS_PIN -1 + //#define E0_CS_PIN -1 + //#define E1_CS_PIN -1 + //#define E2_CS_PIN -1 + //#define E3_CS_PIN -1 + //#define E4_CS_PIN -1 + //#define E5_CS_PIN -1 + + /** + * Software option for SPI driven drivers (TMC2130, TMC2160, TMC2660, TMC5130 and TMC5160). + * The default SW SPI pins are defined the respective pins files, + * but you can override or define them here. + */ + //#define TMC_USE_SW_SPI + //#define TMC_SW_MOSI -1 + //#define TMC_SW_MISO -1 + //#define TMC_SW_SCK -1 + + /** + * Four TMC2209 drivers can use the same HW/SW serial port with hardware configured addresses. + * Set the address using jumpers on pins MS1 and MS2. + * Address | MS1 | MS2 + * 0 | LOW | LOW + * 1 | HIGH | LOW + * 2 | LOW | HIGH + * 3 | HIGH | HIGH + * + * Set *_SERIAL_TX_PIN and *_SERIAL_RX_PIN to match for all drivers + * on the same serial port, either here or in your board's pins file. + */ + #define X_SLAVE_ADDRESS 0 + #define Y_SLAVE_ADDRESS 0 + #define Z_SLAVE_ADDRESS 0 + #define X2_SLAVE_ADDRESS 0 + #define Y2_SLAVE_ADDRESS 0 + #define Z2_SLAVE_ADDRESS 0 + #define Z3_SLAVE_ADDRESS 0 + #define E0_SLAVE_ADDRESS 0 + #define E1_SLAVE_ADDRESS 0 + #define E2_SLAVE_ADDRESS 0 + #define E3_SLAVE_ADDRESS 0 + #define E4_SLAVE_ADDRESS 0 + #define E5_SLAVE_ADDRESS 0 + + /** + * Software enable + * + * Use for drivers that do not use a dedicated enable pin, but rather handle the same + * function through a communication line such as SPI or UART. + */ + //#define SOFTWARE_DRIVER_ENABLE + + /** + * TMC2130, TMC2160, TMC2208, TMC2209, TMC5130 and TMC5160 only + * Use Trinamic's ultra quiet stepping mode. + * When disabled, Marlin will use spreadCycle stepping mode. + */ + #define STEALTHCHOP_XY + #define STEALTHCHOP_Z + #define STEALTHCHOP_E + + /** + * Optimize spreadCycle chopper parameters by using predefined parameter sets + * or with the help of an example included in the library. + * Provided parameter sets are + * CHOPPER_DEFAULT_12V + * CHOPPER_DEFAULT_19V + * CHOPPER_DEFAULT_24V + * CHOPPER_DEFAULT_36V + * CHOPPER_PRUSAMK3_24V // Imported parameters from the official Prusa firmware for MK3 (24V) + * CHOPPER_MARLIN_119 // Old defaults from Marlin v1.1.9 + * + * Define you own with + * { , , hysteresis_start[1..8] } + */ + #define CHOPPER_TIMING CHOPPER_DEFAULT_12V + + /** + * Monitor Trinamic drivers for error conditions, + * like overtemperature and short to ground. + * In the case of overtemperature Marlin can decrease the driver current until error condition clears. + * Other detected conditions can be used to stop the current print. + * Relevant g-codes: + * M906 - Set or get motor current in milliamps using axis codes X, Y, Z, E. Report values if no axis codes given. + * M911 - Report stepper driver overtemperature pre-warn condition. + * M912 - Clear stepper driver overtemperature pre-warn condition flag. + * M122 - Report driver parameters (Requires TMC_DEBUG) + */ + //#define MONITOR_DRIVER_STATUS + + #if ENABLED(MONITOR_DRIVER_STATUS) + #define CURRENT_STEP_DOWN 50 // [mA] + #define REPORT_CURRENT_CHANGE + #define STOP_ON_ERROR + #endif + + /** + * TMC2130, TMC2160, TMC2208, TMC2209, TMC5130 and TMC5160 only + * The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD. + * This mode allows for faster movements at the expense of higher noise levels. + * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD. + * M913 X/Y/Z/E to live tune the setting + */ + //#define HYBRID_THRESHOLD + + #define X_HYBRID_THRESHOLD 100 // [mm/s] + #define X2_HYBRID_THRESHOLD 100 + #define Y_HYBRID_THRESHOLD 100 + #define Y2_HYBRID_THRESHOLD 100 + #define Z_HYBRID_THRESHOLD 3 + #define Z2_HYBRID_THRESHOLD 3 + #define Z3_HYBRID_THRESHOLD 3 + #define E0_HYBRID_THRESHOLD 30 + #define E1_HYBRID_THRESHOLD 30 + #define E2_HYBRID_THRESHOLD 30 + #define E3_HYBRID_THRESHOLD 30 + #define E4_HYBRID_THRESHOLD 30 + #define E5_HYBRID_THRESHOLD 30 + + /** + * Use StallGuard2 to home / probe X, Y, Z. + * + * TMC2130, TMC2160, TMC2209, TMC2660, TMC5130, and TMC5160 only + * Connect the stepper driver's DIAG1 pin to the X/Y endstop pin. + * X, Y, and Z homing will always be done in spreadCycle mode. + * + * X/Y/Z_STALL_SENSITIVITY is the default stall threshold. + * Use M914 X Y Z to set the stall threshold at runtime: + * + * Sensitivity TMC2209 Others + * HIGHEST 255 -64 (Too sensitive => False positive) + * LOWEST 0 63 (Too insensitive => No trigger) + * + * It is recommended to set [XYZ]_HOME_BUMP_MM to 0. + * + * SPI_ENDSTOPS *** Beta feature! *** TMC2130 Only *** + * Poll the driver through SPI to determine load when homing. + * Removes the need for a wire from DIAG1 to an endstop pin. + * + * IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when + * homing and adds a guard period for endstop triggering. + */ + //#define SENSORLESS_HOMING // StallGuard capable drivers only + + /** + * Use StallGuard2 to probe the bed with the nozzle. + * + * CAUTION: This could cause damage to machines that use a lead screw or threaded rod + * to move the Z axis. Take extreme care when attempting to enable this feature. + */ + //#define SENSORLESS_PROBING // StallGuard capable drivers only + + #if EITHER(SENSORLESS_HOMING, SENSORLESS_PROBING) + // TMC2209: 0...255. TMC2130: -64...63 + #define X_STALL_SENSITIVITY 8 + #define X2_STALL_SENSITIVITY X_STALL_SENSITIVITY + #define Y_STALL_SENSITIVITY 8 + //#define Z_STALL_SENSITIVITY 8 + //#define SPI_ENDSTOPS // TMC2130 only + //#define IMPROVE_HOMING_RELIABILITY + #endif + + /** + * Beta feature! + * Create a 50/50 square wave step pulse optimal for stepper drivers. + */ + //#define SQUARE_WAVE_STEPPING + + /** + * Enable M122 debugging command for TMC stepper drivers. + * M122 S0/1 will enable continous reporting. + */ + //#define TMC_DEBUG + + /** + * You can set your own advanced settings by filling in predefined functions. + * A list of available functions can be found on the library github page + * https://github.com/teemuatlut/TMCStepper + * + * Example: + * #define TMC_ADV() { \ + * stepperX.diag0_temp_prewarn(1); \ + * stepperY.interpolate(0); \ + * } + */ + #define TMC_ADV() { } + +#endif // HAS_TRINAMIC + +// @section L6470 + +/** + * L6470 Stepper Driver options + * + * Arduino-L6470 library (0.7.0 or higher) is required for this stepper driver. + * https://github.com/ameyer/Arduino-L6470 + * + * Requires the following to be defined in your pins_YOUR_BOARD file + * L6470_CHAIN_SCK_PIN + * L6470_CHAIN_MISO_PIN + * L6470_CHAIN_MOSI_PIN + * L6470_CHAIN_SS_PIN + * L6470_RESET_CHAIN_PIN (optional) + */ +#if HAS_DRIVER(L6470) + + //#define L6470_CHITCHAT // Display additional status info + + #if AXIS_DRIVER_TYPE_X(L6470) + #define X_MICROSTEPS 128 // Number of microsteps (VALID: 1, 2, 4, 8, 16, 32, 128) + #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) + #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) + #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) + #endif + + #if AXIS_DRIVER_TYPE_X2(L6470) + #define X2_MICROSTEPS 128 + #define X2_OVERCURRENT 2000 + #define X2_STALLCURRENT 1500 + #define X2_MAX_VOLTAGE 127 + #define X2_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_Y(L6470) + #define Y_MICROSTEPS 128 + #define Y_OVERCURRENT 2000 + #define Y_STALLCURRENT 1500 + #define Y_MAX_VOLTAGE 127 + #define Y_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_Y2(L6470) + #define Y2_MICROSTEPS 128 + #define Y2_OVERCURRENT 2000 + #define Y2_STALLCURRENT 1500 + #define Y2_MAX_VOLTAGE 127 + #define Y2_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_Z(L6470) + #define Z_MICROSTEPS 128 + #define Z_OVERCURRENT 2000 + #define Z_STALLCURRENT 1500 + #define Z_MAX_VOLTAGE 127 + #define Z_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_Z2(L6470) + #define Z2_MICROSTEPS 128 + #define Z2_OVERCURRENT 2000 + #define Z2_STALLCURRENT 1500 + #define Z2_MAX_VOLTAGE 127 + #define Z2_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_Z3(L6470) + #define Z3_MICROSTEPS 128 + #define Z3_OVERCURRENT 2000 + #define Z3_STALLCURRENT 1500 + #define Z3_MAX_VOLTAGE 127 + #define Z3_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_E0(L6470) + #define E0_MICROSTEPS 128 + #define E0_OVERCURRENT 2000 + #define E0_STALLCURRENT 1500 + #define E0_MAX_VOLTAGE 127 + #define E0_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_E1(L6470) + #define E1_MICROSTEPS 128 + #define E1_OVERCURRENT 2000 + #define E1_STALLCURRENT 1500 + #define E1_MAX_VOLTAGE 127 + #define E1_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_E2(L6470) + #define E2_MICROSTEPS 128 + #define E2_OVERCURRENT 2000 + #define E2_STALLCURRENT 1500 + #define E2_MAX_VOLTAGE 127 + #define E2_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_E3(L6470) + #define E3_MICROSTEPS 128 + #define E3_OVERCURRENT 2000 + #define E3_STALLCURRENT 1500 + #define E3_MAX_VOLTAGE 127 + #define E3_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_E4(L6470) + #define E4_MICROSTEPS 128 + #define E4_OVERCURRENT 2000 + #define E4_STALLCURRENT 1500 + #define E4_MAX_VOLTAGE 127 + #define E4_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_E5(L6470) + #define E5_MICROSTEPS 128 + #define E5_OVERCURRENT 2000 + #define E5_STALLCURRENT 1500 + #define E5_MAX_VOLTAGE 127 + #define E5_CHAIN_POS -1 + #endif + + /** + * Monitor L6470 drivers for error conditions like over temperature and over current. + * In the case of over temperature Marlin can decrease the drive until the error condition clears. + * Other detected conditions can be used to stop the current print. + * Relevant g-codes: + * M906 - I1/2/3/4/5 Set or get motor drive level using axis codes X, Y, Z, E. Report values if no axis codes given. + * I not present or I0 or I1 - X, Y, Z or E0 + * I2 - X2, Y2, Z2 or E1 + * I3 - Z3 or E3 + * I4 - E4 + * I5 - E5 + * M916 - Increase drive level until get thermal warning + * M917 - Find minimum current thresholds + * M918 - Increase speed until max or error + * M122 S0/1 - Report driver parameters + */ + //#define MONITOR_L6470_DRIVER_STATUS + + #if ENABLED(MONITOR_L6470_DRIVER_STATUS) + #define KVAL_HOLD_STEP_DOWN 1 + //#define L6470_STOP_ON_ERROR + #endif + +#endif // L6470 + +/** + * TWI/I2C BUS + * + * This feature is an EXPERIMENTAL feature so it shall not be used on production + * machines. Enabling this will allow you to send and receive I2C data from slave + * devices on the bus. + * + * ; Example #1 + * ; This macro send the string "Marlin" to the slave device with address 0x63 (99) + * ; It uses multiple M260 commands with one B arg + * M260 A99 ; Target slave address + * M260 B77 ; M + * M260 B97 ; a + * M260 B114 ; r + * M260 B108 ; l + * M260 B105 ; i + * M260 B110 ; n + * M260 S1 ; Send the current buffer + * + * ; Example #2 + * ; Request 6 bytes from slave device with address 0x63 (99) + * M261 A99 B5 + * + * ; Example #3 + * ; Example serial output of a M261 request + * echo:i2c-reply: from:99 bytes:5 data:hello + */ + +// @section i2cbus + +//#define EXPERIMENTAL_I2CBUS +#define I2C_SLAVE_ADDRESS 0 // Set a value from 8 to 127 to act as a slave + +// @section extras + +/** + * Photo G-code + * Add the M240 G-code to take a photo. + * The photo can be triggered by a digital pin or a physical movement. + */ +//#define PHOTO_GCODE +#if ENABLED(PHOTO_GCODE) + // A position to move to (and raise Z) before taking the photo + //#define PHOTO_POSITION { X_MAX_POS - 5, Y_MAX_POS, 0 } // { xpos, ypos, zraise } (M240 X Y Z) + //#define PHOTO_DELAY_MS 100 // (ms) Duration to pause before moving back (M240 P) + //#define PHOTO_RETRACT_MM 6.5 // (mm) E retract/recover for the photo move (M240 R S) + + // Canon RC-1 or homebrew digital camera trigger + // Data from: http://www.doc-diy.net/photo/rc-1_hacked/ + //#define PHOTOGRAPH_PIN 23 + + // Canon Hack Development Kit + // http://captain-slow.dk/2014/03/09/3d-printing-timelapses/ + //#define CHDK_PIN 4 + + // Optional second move with delay to trigger the camera shutter + //#define PHOTO_SWITCH_POSITION { X_MAX_POS, Y_MAX_POS } // { xpos, ypos } (M240 I J) + + // Duration to hold the switch or keep CHDK_PIN high + //#define PHOTO_SWITCH_MS 50 // (ms) (M240 D) +#endif + +/** + * Spindle & Laser control + * + * Add the M3, M4, and M5 commands to turn the spindle/laser on and off, and + * to set spindle speed, spindle direction, and laser power. + * + * SuperPid is a router/spindle speed controller used in the CNC milling community. + * Marlin can be used to turn the spindle on and off. It can also be used to set + * the spindle speed from 5,000 to 30,000 RPM. + * + * You'll need to select a pin for the ON/OFF function and optionally choose a 0-5V + * hardware PWM pin for the speed control and a pin for the rotation direction. + * + * See http://marlinfw.org/docs/configuration/laser_spindle.html for more config details. + */ +//#define SPINDLE_FEATURE +//#define LASER_FEATURE +#if EITHER(SPINDLE_FEATURE, LASER_FEATURE) + #define SPINDLE_LASER_ACTIVE_HIGH false // Set to "true" if the on/off function is active HIGH + #define SPINDLE_LASER_PWM true // Set to "true" if your controller supports setting the speed/power + #define SPINDLE_LASER_PWM_INVERT true // Set to "true" if the speed/power goes up when you want it to go slower + #define SPINDLE_LASER_POWERUP_DELAY 5000 // (ms) Delay to allow the spindle/laser to come up to speed/power + #define SPINDLE_LASER_POWERDOWN_DELAY 5000 // (ms) Delay to allow the spindle to stop + + #if ENABLED(SPINDLE_FEATURE) + //#define SPINDLE_CHANGE_DIR // Enable if your spindle controller can change spindle direction + #define SPINDLE_CHANGE_DIR_STOP // Enable if the spindle should stop before changing spin direction + #define SPINDLE_INVERT_DIR false // Set to "true" if the spin direction is reversed + + /** + * The M3 & M4 commands use the following equation to convert PWM duty cycle to speed/power + * + * SPEED/POWER = PWM duty cycle * SPEED_POWER_SLOPE + SPEED_POWER_INTERCEPT + * where PWM duty cycle varies from 0 to 255 + * + * set the following for your controller (ALL MUST BE SET) + */ + #define SPEED_POWER_SLOPE 118.4 + #define SPEED_POWER_INTERCEPT 0 + #define SPEED_POWER_MIN 5000 + #define SPEED_POWER_MAX 30000 // SuperPID router controller 0 - 30,000 RPM + #else + #define SPEED_POWER_SLOPE 0.3922 + #define SPEED_POWER_INTERCEPT 0 + #define SPEED_POWER_MIN 10 + #define SPEED_POWER_MAX 100 // 0-100% + #endif +#endif + +/** + * Coolant Control + * + * Add the M7, M8, and M9 commands to turn mist or flood coolant on and off. + * + * Note: COOLANT_MIST_PIN and/or COOLANT_FLOOD_PIN must also be defined. + */ +//#define COOLANT_CONTROL +#if ENABLED(COOLANT_CONTROL) + #define COOLANT_MIST // Enable if mist coolant is present + #define COOLANT_FLOOD // Enable if flood coolant is present + #define COOLANT_MIST_INVERT false // Set "true" if the on/off function is reversed + #define COOLANT_FLOOD_INVERT false // Set "true" if the on/off function is reversed +#endif + +/** + * Filament Width Sensor + * + * Measures the filament width in real-time and adjusts + * flow rate to compensate for any irregularities. + * + * Also allows the measured filament diameter to set the + * extrusion rate, so the slicer only has to specify the + * volume. + * + * Only a single extruder is supported at this time. + * + * 34 RAMPS_14 : Analog input 5 on the AUX2 connector + * 81 PRINTRBOARD : Analog input 2 on the Exp1 connector (version B,C,D,E) + * 301 RAMBO : Analog input 3 + * + * Note: May require analog pins to be defined for other boards. + */ +//#define FILAMENT_WIDTH_SENSOR + +#if ENABLED(FILAMENT_WIDTH_SENSOR) + #define FILAMENT_SENSOR_EXTRUDER_NUM 0 // Index of the extruder that has the filament sensor. :[0,1,2,3,4] + #define MEASUREMENT_DELAY_CM 14 // (cm) The distance from the filament sensor to the melting chamber + + #define FILWIDTH_ERROR_MARGIN 1.0 // (mm) If a measurement differs too much from nominal width ignore it + #define MAX_MEASUREMENT_DELAY 20 // (bytes) Buffer size for stored measurements (1 byte per cm). Must be larger than MEASUREMENT_DELAY_CM. + + #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA // Set measured to nominal initially + + // Display filament width on the LCD status line. Status messages will expire after 5 seconds. + //#define FILAMENT_LCD_DISPLAY +#endif + +/** + * CNC Coordinate Systems + * + * Enables G53 and G54-G59.3 commands to select coordinate systems + * and G92.1 to reset the workspace to native machine space. + */ +//#define CNC_COORDINATE_SYSTEMS + +/** + * Auto-report temperatures with M155 S + */ +#define AUTO_REPORT_TEMPERATURES + +/** + * Include capabilities in M115 output + */ +#define EXTENDED_CAPABILITIES_REPORT + +/** + * Expected Printer Check + * Add the M16 G-code to compare a string to the MACHINE_NAME. + * M16 with a non-matching string causes the printer to halt. + */ +//#define EXPECTED_PRINTER_CHECK + +/** + * Disable all Volumetric extrusion options + */ +//#define NO_VOLUMETRICS + +#if DISABLED(NO_VOLUMETRICS) + /** + * Volumetric extrusion default state + * Activate to make volumetric extrusion the default method, + * with DEFAULT_NOMINAL_FILAMENT_DIA as the default diameter. + * + * M200 D0 to disable, M200 Dn to set a new diameter. + */ + //#define VOLUMETRIC_DEFAULT_ON +#endif + +/** + * Enable this option for a leaner build of Marlin that removes all + * workspace offsets, simplifying coordinate transformations, leveling, etc. + * + * - M206 and M428 are disabled. + * - G92 will revert to its behavior from Marlin 1.0. + */ +//#define NO_WORKSPACE_OFFSETS + +/** + * Set the number of proportional font spaces required to fill up a typical character space. + * This can help to better align the output of commands like `G29 O` Mesh Output. + * + * For clients that use a fixed-width font (like OctoPrint), leave this set to 1.0. + * Otherwise, adjust according to your client and font. + */ +#define PROPORTIONAL_FONT_RATIO 1.0 + +/** + * Spend 28 bytes of SRAM to optimize the GCode parser + */ +#define FASTER_GCODE_PARSER + +/** + * CNC G-code options + * Support CNC-style G-code dialects used by laser cutters, drawing machine cams, etc. + * Note that G0 feedrates should be used with care for 3D printing (if used at all). + * High feedrates may cause ringing and harm print quality. + */ +//#define PAREN_COMMENTS // Support for parentheses-delimited comments +//#define GCODE_MOTION_MODES // Remember the motion mode (G0 G1 G2 G3 G5 G38.X) and apply for X Y Z E F, etc. + +// Enable and set a (default) feedrate for all G0 moves +//#define G0_FEEDRATE 3000 // (mm/m) +#ifdef G0_FEEDRATE + //#define VARIABLE_G0_FEEDRATE // The G0 feedrate is set by F in G0 motion mode +#endif + +/** + * Startup commands + * + * Execute certain G-code commands immediately after power-on. + */ +//#define STARTUP_COMMANDS "M17 Z" + +/** + * G-code Macros + * + * Add G-codes M810-M819 to define and run G-code macros. + * Macros are not saved to EEPROM. + */ +//#define GCODE_MACROS +#if ENABLED(GCODE_MACROS) + #define GCODE_MACROS_SLOTS 5 // Up to 10 may be used + #define GCODE_MACROS_SLOT_SIZE 50 // Maximum length of a single macro +#endif + +/** + * User-defined menu items that execute custom GCode + */ +//#define CUSTOM_USER_MENUS +#if ENABLED(CUSTOM_USER_MENUS) + //#define CUSTOM_USER_MENU_TITLE "Custom Commands" + #define USER_SCRIPT_DONE "M117 User Script Done" + #define USER_SCRIPT_AUDIBLE_FEEDBACK + //#define USER_SCRIPT_RETURN // Return to status screen after a script + + #define USER_DESC_1 "Home & UBL Info" + #define USER_GCODE_1 "G28\nG29 W" + + #define USER_DESC_2 "Preheat for " PREHEAT_1_LABEL + #define USER_GCODE_2 "M140 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND) + + #define USER_DESC_3 "Preheat for " PREHEAT_2_LABEL + #define USER_GCODE_3 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND) + + #define USER_DESC_4 "Heat Bed/Home/Level" + #define USER_GCODE_4 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nG28\nG29" + + //#define USER_DESC_5 "Home & Info" + //#define USER_GCODE_5 "G28\nM503" +#endif + +/** + * Host Action Commands + * + * Define host streamer action commands in compliance with the standard. + * + * See https://reprap.org/wiki/G-code#Action_commands + * Common commands ........ poweroff, pause, paused, resume, resumed, cancel + * G29_RETRY_AND_RECOVER .. probe_rewipe, probe_failed + * + * Some features add reason codes to extend these commands. + * + * Host Prompt Support enables Marlin to use the host for user prompts so + * filament runout and other processes can be managed from the host side. + */ +//#define HOST_ACTION_COMMANDS +#if ENABLED(HOST_ACTION_COMMANDS) + //#define HOST_PROMPT_SUPPORT +#endif + +/** + * I2C position encoders for closed loop control. + * Developed by Chris Barr at Aus3D. + * + * Wiki: http://wiki.aus3d.com.au/Magnetic_Encoder + * Github: https://github.com/Aus3D/MagneticEncoder + * + * Supplier: http://aus3d.com.au/magnetic-encoder-module + * Alternative Supplier: http://reliabuild3d.com/ + * + * Reliabuild encoders have been modified to improve reliability. + */ + +//#define I2C_POSITION_ENCODERS +#if ENABLED(I2C_POSITION_ENCODERS) + + #define I2CPE_ENCODER_CNT 1 // The number of encoders installed; max of 5 + // encoders supported currently. + + #define I2CPE_ENC_1_ADDR I2CPE_PRESET_ADDR_X // I2C address of the encoder. 30-200. + #define I2CPE_ENC_1_AXIS X_AXIS // Axis the encoder module is installed on. _AXIS. + #define I2CPE_ENC_1_TYPE I2CPE_ENC_TYPE_LINEAR // Type of encoder: I2CPE_ENC_TYPE_LINEAR -or- + // I2CPE_ENC_TYPE_ROTARY. + #define I2CPE_ENC_1_TICKS_UNIT 2048 // 1024 for magnetic strips with 2mm poles; 2048 for + // 1mm poles. For linear encoders this is ticks / mm, + // for rotary encoders this is ticks / revolution. + //#define I2CPE_ENC_1_TICKS_REV (16 * 200) // Only needed for rotary encoders; number of stepper + // steps per full revolution (motor steps/rev * microstepping) + //#define I2CPE_ENC_1_INVERT // Invert the direction of axis travel. + #define I2CPE_ENC_1_EC_METHOD I2CPE_ECM_MICROSTEP // Type of error error correction. + #define I2CPE_ENC_1_EC_THRESH 0.10 // Threshold size for error (in mm) above which the + // printer will attempt to correct the error; errors + // smaller than this are ignored to minimize effects of + // measurement noise / latency (filter). + + #define I2CPE_ENC_2_ADDR I2CPE_PRESET_ADDR_Y // Same as above, but for encoder 2. + #define I2CPE_ENC_2_AXIS Y_AXIS + #define I2CPE_ENC_2_TYPE I2CPE_ENC_TYPE_LINEAR + #define I2CPE_ENC_2_TICKS_UNIT 2048 + //#define I2CPE_ENC_2_TICKS_REV (16 * 200) + //#define I2CPE_ENC_2_INVERT + #define I2CPE_ENC_2_EC_METHOD I2CPE_ECM_MICROSTEP + #define I2CPE_ENC_2_EC_THRESH 0.10 + + #define I2CPE_ENC_3_ADDR I2CPE_PRESET_ADDR_Z // Encoder 3. Add additional configuration options + #define I2CPE_ENC_3_AXIS Z_AXIS // as above, or use defaults below. + + #define I2CPE_ENC_4_ADDR I2CPE_PRESET_ADDR_E // Encoder 4. + #define I2CPE_ENC_4_AXIS E_AXIS + + #define I2CPE_ENC_5_ADDR 34 // Encoder 5. + #define I2CPE_ENC_5_AXIS E_AXIS + + // Default settings for encoders which are enabled, but without settings configured above. + #define I2CPE_DEF_TYPE I2CPE_ENC_TYPE_LINEAR + #define I2CPE_DEF_ENC_TICKS_UNIT 2048 + #define I2CPE_DEF_TICKS_REV (16 * 200) + #define I2CPE_DEF_EC_METHOD I2CPE_ECM_NONE + #define I2CPE_DEF_EC_THRESH 0.1 + + //#define I2CPE_ERR_THRESH_ABORT 100.0 // Threshold size for error (in mm) error on any given + // axis after which the printer will abort. Comment out to + // disable abort behavior. + + #define I2CPE_TIME_TRUSTED 10000 // After an encoder fault, there must be no further fault + // for this amount of time (in ms) before the encoder + // is trusted again. + + /** + * Position is checked every time a new command is executed from the buffer but during long moves, + * this setting determines the minimum update time between checks. A value of 100 works well with + * error rolling average when attempting to correct only for skips and not for vibration. + */ + #define I2CPE_MIN_UPD_TIME_MS 4 // (ms) Minimum time between encoder checks. + + // Use a rolling average to identify persistant errors that indicate skips, as opposed to vibration and noise. + #define I2CPE_ERR_ROLLING_AVERAGE + +#endif // I2C_POSITION_ENCODERS + +/** + * Analog Joystick(s) + */ +//#define JOYSTICK +#if ENABLED(JOYSTICK) + #define JOY_X_PIN 5 // RAMPS: Suggested pin A5 on AUX2 + #define JOY_Y_PIN 10 // RAMPS: Suggested pin A10 on AUX2 + #define JOY_Z_PIN 12 // RAMPS: Suggested pin A12 on AUX2 + #define JOY_EN_PIN 44 // RAMPS: Suggested pin D44 on AUX2 + + // Use M119 to find reasonable values after connecting your hardware: + #define JOY_X_LIMITS { 5600, 8190-100, 8190+100, 10800 } // min, deadzone start, deadzone end, max + #define JOY_Y_LIMITS { 5600, 8250-100, 8250+100, 11000 } + #define JOY_Z_LIMITS { 4800, 8080-100, 8080+100, 11550 } +#endif + +/** + * MAX7219 Debug Matrix + * + * Add support for a low-cost 8x8 LED Matrix based on the Max7219 chip as a realtime status display. + * Requires 3 signal wires. Some useful debug options are included to demonstrate its usage. + */ +//#define MAX7219_DEBUG +#if ENABLED(MAX7219_DEBUG) + #define MAX7219_CLK_PIN 64 + #define MAX7219_DIN_PIN 57 + #define MAX7219_LOAD_PIN 44 + + //#define MAX7219_GCODE // Add the M7219 G-code to control the LED matrix + #define MAX7219_INIT_TEST 2 // Do a test pattern at initialization (Set to 2 for spiral) + #define MAX7219_NUMBER_UNITS 1 // Number of Max7219 units in chain. + #define MAX7219_ROTATE 0 // Rotate the display clockwise (in multiples of +/- 90°) + // connector at: right=0 bottom=-90 top=90 left=180 + //#define MAX7219_REVERSE_ORDER // The individual LED matrix units may be in reversed order + //#define MAX7219_SIDE_BY_SIDE // Big chip+matrix boards can be chained side-by-side + + /** + * Sample debug features + * If you add more debug displays, be careful to avoid conflicts! + */ + #define MAX7219_DEBUG_PRINTER_ALIVE // Blink corner LED of 8x8 matrix to show that the firmware is functioning + #define MAX7219_DEBUG_PLANNER_HEAD 3 // Show the planner queue head position on this and the next LED matrix row + #define MAX7219_DEBUG_PLANNER_TAIL 5 // Show the planner queue tail position on this and the next LED matrix row + + #define MAX7219_DEBUG_PLANNER_QUEUE 0 // Show the current planner queue depth on this and the next LED matrix row + // If you experience stuttering, reboots, etc. this option can reveal how + // tweaks made to the configuration are affecting the printer in real-time. +#endif + +/** + * NanoDLP Sync support + * + * Add support for Synchronized Z moves when using with NanoDLP. G0/G1 axis moves will output "Z_move_comp" + * string to enable synchronization with DLP projector exposure. This change will allow to use + * [[WaitForDoneMessage]] instead of populating your gcode with M400 commands + */ +//#define NANODLP_Z_SYNC +#if ENABLED(NANODLP_Z_SYNC) + //#define NANODLP_ALL_AXIS // Enables "Z_move_comp" output on any axis move. + // Default behavior is limited to Z axis only. +#endif + +/** + * WiFi Support (Espressif ESP32 WiFi) + */ +//#define WIFISUPPORT +#if ENABLED(WIFISUPPORT) + #define WIFI_SSID "Wifi SSID" + #define WIFI_PWD "Wifi Password" + //#define WEBSUPPORT // Start a webserver with auto-discovery + //#define OTASUPPORT // Support over-the-air firmware updates +#endif + +/** + * Prusa Multi-Material Unit v2 + * Enable in Configuration.h + */ +#if ENABLED(PRUSA_MMU2) + + // Serial port used for communication with MMU2. + // For AVR enable the UART port used for the MMU. (e.g., internalSerial) + // For 32-bit boards check your HAL for available serial ports. (e.g., Serial2) + #define INTERNAL_SERIAL_PORT 2 + #define MMU2_SERIAL internalSerial + + // Use hardware reset for MMU if a pin is defined for it + //#define MMU2_RST_PIN 23 + + // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) + //#define MMU2_MODE_12V + + // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout + #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600" + + // Add an LCD menu for MMU2 + //#define MMU2_MENUS + #if ENABLED(MMU2_MENUS) + // Settings for filament load / unload from the LCD menu. + // This is for Prusa MK3-style extruders. Customize for your hardware. + #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 7.2, 562 }, \ + { 14.4, 871 }, \ + { 36.0, 1393 }, \ + { 14.4, 871 }, \ + { 50.0, 198 } + + #define MMU2_RAMMING_SEQUENCE \ + { 1.0, 1000 }, \ + { 1.0, 1500 }, \ + { 2.0, 2000 }, \ + { 1.5, 3000 }, \ + { 2.5, 4000 }, \ + { -15.0, 5000 }, \ + { -14.0, 1200 }, \ + { -6.0, 600 }, \ + { 10.0, 700 }, \ + { -10.0, 400 }, \ + { -50.0, 2000 } + + #endif + + //#define MMU2_DEBUG // Write debug info to serial output + +#endif // PRUSA_MMU2 + +/** + * Advanced Print Counter settings + */ +#if ENABLED(PRINTCOUNTER) + #define SERVICE_WARNING_BUZZES 3 + // Activate up to 3 service interval watchdogs + //#define SERVICE_NAME_1 "Service S" + //#define SERVICE_INTERVAL_1 100 // print hours + //#define SERVICE_NAME_2 "Service L" + //#define SERVICE_INTERVAL_2 200 // print hours + //#define SERVICE_NAME_3 "Service 3" + //#define SERVICE_INTERVAL_3 1 // print hours +#endif + +// @section develop + +/** + * M43 - display pin status, watch pins for changes, watch endstops & toggle LED, Z servo probe test, toggle pins + */ +//#define PINS_DEBUGGING + +// Enable Marlin dev mode which adds some special commands +//#define MARLIN_DEV_MODE diff --git a/config/examples/Felix/Single/README.md b/config/examples/Felix/Single/README.md new file mode 100644 index 000000000000..48fe099151bb --- /dev/null +++ b/config/examples/Felix/Single/README.md @@ -0,0 +1,60 @@ +# Felix 2.0/3.0 Configuration for Marlin Firmware + +Bringing silky smooth prints to Felix. + +## Build HOWTO + + - Install the latest non-beta Arduino software IDE/toolset: http://www.arduino.cc/en/Main/Software + - Download the Marlin firmware + - [Latest developement version](https://github.com/MarlinFirmware/Marlin/tree/Development) + - [Stable version](https://github.com/MarlinFirmware/Marlin/tree/Development) + - In both cases use the "Download Zip" button on the right. + +``` +cd Marlin/src +cp config/examples/Felix/Configuration_adv.h . +``` + +The next step depends on your setup: + +### Single Extruder Configuration + + cp config/examples/Felix/Configuration.h . + +### Dual Extruder Configuration + + cp config/examples/Felix/DUAL/Configuration.h Configuration.h + +### Compile Firmware + + - Start the Arduino IDE. + - Select Tools -> Board -> Arduino Mega 2560 + - Select the correct serial port in Tools -> Serial Port (usually /dev/ttyUSB0) + - Open Marlin.pde or .ino + - Click the Verify/Compile button + +### Flash Firmware + +#### Connected directly via USB + + - Click the Upload button. If all goes well the firmware is uploading + +#### Remote update + +Find the latest Arduino build: + + ls -altr /tmp/ + drwxr-xr-x 5 chrono users 12288 Mar 3 21:41 build6072035599686630843.tmp + +Copy the firmware to your printer host: + + scp /tmp/build6072035599686630843.tmp/Marlin.cpp.hex a.b.c.d:/tmp/ + +Connect to your printer host via ssh, stop Octoprint or any other service that may block your USB device and make sure you have avrdude installed, then run: + + avrdude -C/etc/avrdude.conf -v -v -v -patmega2560 -cwiring -P/dev/ttyUSB0 \ + -b115200 -D -Uflash:w:/tmp/Marlin.cpp.hex:i + +## Acknowledgements + +Mashed together and tested on https://apollo.open-resource.org/mission:resources:picoprint based on collaborative teamwork of @andrewsil1 and @thinkyhead. diff --git a/config/examples/Geeetech/Prusa i3 Pro B/README.md b/config/examples/Geeetech/Prusa i3 Pro B/bltouch/README.md similarity index 100% rename from config/examples/Geeetech/Prusa i3 Pro B/README.md rename to config/examples/Geeetech/Prusa i3 Pro B/bltouch/README.md diff --git a/config/examples/Geeetech/Prusa i3 Pro B/noprobe/README.md b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/README.md new file mode 100644 index 000000000000..30fcf2e443ce --- /dev/null +++ b/config/examples/Geeetech/Prusa i3 Pro B/noprobe/README.md @@ -0,0 +1,54 @@ +These are example configurations for the low-cost [Acrylic Prusa I3 pro B 3D Printer DIY kit](http://www.geeetech.com/acrylic-geeetech-prusa-i3-pro-b-3d-printer-diy-kit-p-917.html) and the [3DTouch auto bed leveling sensor](http://www.geeetech.com/geeetech-3dtouch-auto-bed-leveling-sensor-for-3d-printer-p-1010.html) based on: + +- `../GT2560/` +- [Marlin 1.1.4 With 3DTouch / BLTouch for i3 Pro B](https://www.geeetech.com/forum/viewtopic.php?t=19846) + +The main characteristics of these configurations are: + +- The defined motherboard is `BOARD_GT2560_REV_A_PLUS`. +- Travel limits are adjusted to the printer bed size and position. +- An example `SKEW_CORRECTION` for a particular printer is enabled. See comments below about how to adjust it to a particular printer. +- Using the LCD controller for bed leveling is enabled. + - `PROBE_MANUALLY` is enabled, which *provides a means to do "Auto" Bed Leveling without a probe*. + - The `LEVEL_BED_CORNERS` option for manual bed adjustment is enabled. + - Bilinear bed leveling is enabled, the boundaries for probing are adjusted to the glass size, and extrapolation is enabled. +- `PRINTCOUNTER` is enabled, in order to track statistical data. +- `INDIVIDUAL_AXIS_HOMING_MENU` is enabled, which adds individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu. +- The speaker is enabled for the UI feedback. +- `bltouch` variant: + - `USE_ZMAX_PLUG` is enabled. See comments about connections below. + - Heaters and fans are turned off when probing. + - Multiple probing is set to 3. + +# First-time configuration + +## Skew factor + +The skew factor must be adjusted for each printer: + +- First, uncomment `#define XY_SKEW_FACTOR 0.0`, compile and upload the firmware. +- Then, print [YACS (Yet Another Calibration Square)](https://www.thingiverse.com/thing:2563185). Hint, scale it considering a margin for brim (if used). The larger, the better to make error measurements. +- Measure the printed part according to the comments in the example configuration file, and set `XY_DIAG_AC`, `XY_DIAG_BD` and `Y_SIDE_AD`. +- Last, comment `#define XY_SKEW_FACTOR 0.0` again, compile and upload. + +## 3DTouch auto leveling sensor + +- Print a suitable mount to attach the sensor to the printer. The example configuration file is adjusted to http://www.geeetech.com/wiki/images/6/61/3DTouch_auto_leveling_sensor-1.zip +- Unlike suggested in [geeetech.com/wiki/index.php/3DTouch_Auto_Leveling_Sensor](https://www.geeetech.com/wiki/index.php/3DTouch_Auto_Leveling_Sensor), the existing end stop switch is expected to be kept connected to Z_MIN. So, the sensor is to be connected to Z_MAX, according to Marlin's default settings. Furthermore, GT2560-A+ provides a connector for the servo next to thermistor connectors (see [GT2560](https://www.geeetech.com/wiki/images/thumb/4/45/GT2560_wiring.jpg/700px-GT2560_wiring.jpg) and [GT2560-A+](http://i.imgur.com/E0t34VU.png)). +- Be careful to respect the polarity of the sensor when connecting it to the GT2560-A+. Unlike end stops, reversing the connection will prevent the sensor from working properly. +- [Test](http://www.geeetech.com/wiki/index.php/3DTouch_Auto_Leveling_Sensor#Testing) and [calibrate](https://www.geeetech.com/wiki/index.php/3DTouch_Auto_Leveling_Sensor#Calibration) the sensor. +- If using the GT2560-A+ and with the sensor connected to Z_MAX and an endstop connected to Z_MIN use the following calibration routine instead. + +## 3DTouch Calibration with Z_MAX + +- Home the printer with `G28` command. +- Disable the Z axis software endstop with `M211 S0 Z0` +- Reset the probe Z_OFFSET with `M851 Z0` +- Move to the center of the bed with `G1 X100 Y100` +- Move Z incrementally until the nozzle is the correct height from the bed using a shim or piece of paper, record this Z movement, for example -0.2. +- Do a single probe at the current point in the middle of the bed using `G30` and not the returned value, for example 1.9. Invert this value, i.e. -1.9, and add it to the Z offset above, i.e. -0.2 in this example giving -2.1. +- Update the probe Z_OFFSET to this value using `M851` i.e. `M851 Z-2.1`. +- Re-enable software end-stops with `M211 S1 Z0` +- Save this value to the EEPROM with `M500`. +- Update the start G-Code in your slicer software to insert a `G29` after the last `G28`. +- Carefully test that the offset is correct in the first print. diff --git a/config/examples/Micromake/C1/README.md b/config/examples/Micromake/C1/basic/README.md similarity index 100% rename from config/examples/Micromake/C1/README.md rename to config/examples/Micromake/C1/basic/README.md diff --git a/config/examples/Micromake/C1/enhanced/README.md b/config/examples/Micromake/C1/enhanced/README.md new file mode 100644 index 000000000000..0111f6f00a0e --- /dev/null +++ b/config/examples/Micromake/C1/enhanced/README.md @@ -0,0 +1,15 @@ +# Micromake C1 + +### In the folder "basic" +Configuration files for Micromake C1 without mods + - English LCD 2X16 Characters + - Motors 16 STEPS + - No heated bed + - No probe, etc. + - Like a standard C1 as shipped by Micromake. + +### In the folder "enhanced" +Configuration files for Micromake C1 with… + - 128 STEPS configured with jumper on the motherboard (all open for 128 Steps). + - Capacitive Probe (Adjust offsets at your convenience) + - French language with no accents for Japanese LCD. diff --git a/config/examples/Mks/Sbase/000-README_RepRap_Discount_Full_Graphic_Smart_Controller.txt b/config/examples/Mks/Sbase/README.txt similarity index 100% rename from config/examples/Mks/Sbase/000-README_RepRap_Discount_Full_Graphic_Smart_Controller.txt rename to config/examples/Mks/Sbase/README.txt diff --git a/config/examples/Velleman/K8400/Configuration_adv.h b/config/examples/Velleman/K8400/Dual-head/Configuration_adv.h similarity index 100% rename from config/examples/Velleman/K8400/Configuration_adv.h rename to config/examples/Velleman/K8400/Dual-head/Configuration_adv.h diff --git a/config/examples/Velleman/K8400/README.md b/config/examples/Velleman/K8400/Dual-head/README.md similarity index 100% rename from config/examples/Velleman/K8400/README.md rename to config/examples/Velleman/K8400/Dual-head/README.md diff --git a/config/examples/Velleman/K8400/Configuration.h b/config/examples/Velleman/K8400/Single-head/Configuration.h similarity index 100% rename from config/examples/Velleman/K8400/Configuration.h rename to config/examples/Velleman/K8400/Single-head/Configuration.h diff --git a/config/examples/Velleman/K8400/Single-head/Configuration_adv.h b/config/examples/Velleman/K8400/Single-head/Configuration_adv.h new file mode 100644 index 000000000000..6d87bcdae58c --- /dev/null +++ b/config/examples/Velleman/K8400/Single-head/Configuration_adv.h @@ -0,0 +1,2764 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +#pragma once + +/** + * Configuration_adv.h + * + * Advanced settings. + * Only change these if you know exactly what you're doing. + * Some of these settings can damage your printer if improperly set! + * + * Basic settings can be found in Configuration.h + * + */ +#define CONFIGURATION_ADV_H_VERSION 020000 + +// @section temperature + +//=========================================================================== +//=============================Thermal Settings ============================ +//=========================================================================== + +// +// Custom Thermistor 1000 parameters +// +#if TEMP_SENSOR_0 == 1000 + #define HOTEND0_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define HOTEND0_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define HOTEND0_BETA 3950 // Beta value +#endif + +#if TEMP_SENSOR_1 == 1000 + #define HOTEND1_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define HOTEND1_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define HOTEND1_BETA 3950 // Beta value +#endif + +#if TEMP_SENSOR_2 == 1000 + #define HOTEND2_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define HOTEND2_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define HOTEND2_BETA 3950 // Beta value +#endif + +#if TEMP_SENSOR_3 == 1000 + #define HOTEND3_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define HOTEND3_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define HOTEND3_BETA 3950 // Beta value +#endif + +#if TEMP_SENSOR_4 == 1000 + #define HOTEND4_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define HOTEND4_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define HOTEND4_BETA 3950 // Beta value +#endif + +#if TEMP_SENSOR_5 == 1000 + #define HOTEND5_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define HOTEND5_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define HOTEND5_BETA 3950 // Beta value +#endif + +#if TEMP_SENSOR_BED == 1000 + #define BED_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define BED_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define BED_BETA 3950 // Beta value +#endif + +#if TEMP_SENSOR_CHAMBER == 1000 + #define CHAMBER_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor + #define CHAMBER_RESISTANCE_25C_OHMS 100000 // Resistance at 25C + #define CHAMBER_BETA 3950 // Beta value +#endif + +// +// Hephestos 2 24V heated bed upgrade kit. +// https://store.bq.com/en/heated-bed-kit-hephestos2 +// +//#define HEPHESTOS2_HEATED_BED_KIT +#if ENABLED(HEPHESTOS2_HEATED_BED_KIT) + #undef TEMP_SENSOR_BED + #define TEMP_SENSOR_BED 70 + #define HEATER_BED_INVERTING true +#endif + +/** + * Heated Chamber settings + */ +#if TEMP_SENSOR_CHAMBER + #define CHAMBER_MINTEMP 5 + #define CHAMBER_MAXTEMP 60 + #define TEMP_CHAMBER_HYSTERESIS 1 // (°C) Temperature proximity considered "close enough" to the target + //#define CHAMBER_LIMIT_SWITCHING + //#define HEATER_CHAMBER_PIN 44 // Chamber heater on/off pin + //#define HEATER_CHAMBER_INVERTING false +#endif + +#if DISABLED(PIDTEMPBED) + #define BED_CHECK_INTERVAL 1000 // ms between checks in bang-bang control + #if ENABLED(BED_LIMIT_SWITCHING) + #define BED_HYSTERESIS 1 // Only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS + #endif +#endif + +/** + * Thermal Protection provides additional protection to your printer from damage + * and fire. Marlin always includes safe min and max temperature ranges which + * protect against a broken or disconnected thermistor wire. + * + * The issue: If a thermistor falls out, it will report the much lower + * temperature of the air in the room, and the the firmware will keep + * the heater on. + * + * The solution: Once the temperature reaches the target, start observing. + * If the temperature stays too far below the target (hysteresis) for too + * long (period), the firmware will halt the machine as a safety precaution. + * + * If you get false positives for "Thermal Runaway", increase + * THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD + */ +#if ENABLED(THERMAL_PROTECTION_HOTENDS) + #define THERMAL_PROTECTION_PERIOD 40 // Seconds + #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius + + //#define ADAPTIVE_FAN_SLOWING // Slow part cooling fan if temperature drops + #if BOTH(ADAPTIVE_FAN_SLOWING, PIDTEMP) + //#define NO_FAN_SLOWING_IN_PID_TUNING // Don't slow fan speed during M303 + #endif + + /** + * Whenever an M104, M109, or M303 increases the target temperature, the + * firmware will wait for the WATCH_TEMP_PERIOD to expire. If the temperature + * hasn't increased by WATCH_TEMP_INCREASE degrees, the machine is halted and + * requires a hard reset. This test restarts with any M104/M109/M303, but only + * if the current temperature is far enough below the target for a reliable + * test. + * + * If you get false positives for "Heating failed", increase WATCH_TEMP_PERIOD + * and/or decrease WATCH_TEMP_INCREASE. WATCH_TEMP_INCREASE should not be set + * below 2. + */ + #define WATCH_TEMP_PERIOD 20 // Seconds + #define WATCH_TEMP_INCREASE 2 // Degrees Celsius +#endif + +/** + * Thermal Protection parameters for the bed are just as above for hotends. + */ +#if ENABLED(THERMAL_PROTECTION_BED) + #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius + + /** + * As described above, except for the bed (M140/M190/M303). + */ + #define WATCH_BED_TEMP_PERIOD 60 // Seconds + #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius +#endif + +/** + * Thermal Protection parameters for the heated chamber. + */ +#if ENABLED(THERMAL_PROTECTION_CHAMBER) + #define THERMAL_PROTECTION_CHAMBER_PERIOD 20 // Seconds + #define THERMAL_PROTECTION_CHAMBER_HYSTERESIS 2 // Degrees Celsius + + /** + * Heated chamber watch settings (M141/M191). + */ + #define WATCH_CHAMBER_TEMP_PERIOD 60 // Seconds + #define WATCH_CHAMBER_TEMP_INCREASE 2 // Degrees Celsius +#endif + +#if ENABLED(PIDTEMP) + // Add an experimental additional term to the heater power, proportional to the extrusion speed. + // A well-chosen Kc value should add just enough power to melt the increased material volume. + //#define PID_EXTRUSION_SCALING + #if ENABLED(PID_EXTRUSION_SCALING) + #define DEFAULT_Kc (100) //heating power=Kc*(e_speed) + #define LPQ_MAX_LEN 50 + #endif +#endif + +/** + * Automatic Temperature: + * The hotend target temperature is calculated by all the buffered lines of gcode. + * The maximum buffered steps/sec of the extruder motor is called "se". + * Start autotemp mode with M109 S B F + * The target temperature is set to mintemp+factor*se[steps/sec] and is limited by + * mintemp and maxtemp. Turn this off by executing M109 without F* + * Also, if the temperature is set to a value below mintemp, it will not be changed by autotemp. + * On an Ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode + */ +#define AUTOTEMP +#if ENABLED(AUTOTEMP) + #define AUTOTEMP_OLDWEIGHT 0.98 +#endif + +// Show extra position information with 'M114 D' +//#define M114_DETAIL + +// Show Temperature ADC value +// Enable for M105 to include ADC values read from temperature sensors. +//#define SHOW_TEMP_ADC_VALUES + +/** + * High Temperature Thermistor Support + * + * Thermistors able to support high temperature tend to have a hard time getting + * good readings at room and lower temperatures. This means HEATER_X_RAW_LO_TEMP + * will probably be caught when the heating element first turns on during the + * preheating process, which will trigger a min_temp_error as a safety measure + * and force stop everything. + * To circumvent this limitation, we allow for a preheat time (during which, + * min_temp_error won't be triggered) and add a min_temp buffer to handle + * aberrant readings. + * + * If you want to enable this feature for your hotend thermistor(s) + * uncomment and set values > 0 in the constants below + */ + +// The number of consecutive low temperature errors that can occur +// before a min_temp_error is triggered. (Shouldn't be more than 10.) +//#define MAX_CONSECUTIVE_LOW_TEMPERATURE_ERROR_ALLOWED 0 + +// The number of milliseconds a hotend will preheat before starting to check +// the temperature. This value should NOT be set to the time it takes the +// hot end to reach the target temperature, but the time it takes to reach +// the minimum temperature your thermistor can read. The lower the better/safer. +// This shouldn't need to be more than 30 seconds (30000) +//#define MILLISECONDS_PREHEAT_TIME 0 + +// @section extruder + +// Extruder runout prevention. +// If the machine is idle and the temperature over MINTEMP +// then extrude some filament every couple of SECONDS. +//#define EXTRUDER_RUNOUT_PREVENT +#if ENABLED(EXTRUDER_RUNOUT_PREVENT) + #define EXTRUDER_RUNOUT_MINTEMP 190 + #define EXTRUDER_RUNOUT_SECONDS 30 + #define EXTRUDER_RUNOUT_SPEED 1500 // (mm/m) + #define EXTRUDER_RUNOUT_EXTRUDE 5 // (mm) +#endif + +// @section temperature + +// Calibration for AD595 / AD8495 sensor to adjust temperature measurements. +// The final temperature is calculated as (measuredTemp * GAIN) + OFFSET. +#define TEMP_SENSOR_AD595_OFFSET 0.0 +#define TEMP_SENSOR_AD595_GAIN 1.0 +#define TEMP_SENSOR_AD8495_OFFSET 0.0 +#define TEMP_SENSOR_AD8495_GAIN 1.0 + +/** + * Controller Fan + * To cool down the stepper drivers and MOSFETs. + * + * The fan will turn on automatically whenever any stepper is enabled + * and turn off after a set period after all steppers are turned off. + */ +#define USE_CONTROLLER_FAN +#if ENABLED(USE_CONTROLLER_FAN) + #define CONTROLLER_FAN_PIN 2 // Set a custom pin for the controller fan + #define CONTROLLERFAN_SECS 60 // Duration in seconds for the fan to run after all motors are disabled + #define CONTROLLERFAN_SPEED 255 // 255 == full speed + //#define CONTROLLERFAN_SPEED_Z_ONLY 127 // Reduce noise on machines that keep Z enabled +#endif + +// When first starting the main fan, run it at full speed for the +// given number of milliseconds. This gets the fan spinning reliably +// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu) +//#define FAN_KICKSTART_TIME 100 + +/** + * PWM Fan Scaling + * + * Define the min/max speeds for PWM fans (as set with M106). + * + * With these options the M106 0-255 value range is scaled to a subset + * to ensure that the fan has enough power to spin, or to run lower + * current fans with higher current. (e.g., 5V/12V fans with 12V/24V) + * Value 0 always turns off the fan. + * + * Define one or both of these to override the default 0-255 range. + */ +//#define FAN_MIN_PWM 50 +//#define FAN_MAX_PWM 128 + +/** + * FAST PWM FAN Settings + * + * Use to change the FAST FAN PWM frequency (if enabled in Configuration.h) + * Combinations of PWM Modes, prescale values and TOP resolutions are used internally to produce a + * frequency as close as possible to the desired frequency. + * + * FAST_PWM_FAN_FREQUENCY [undefined by default] + * Set this to your desired frequency. + * If left undefined this defaults to F = F_CPU/(2*255*1) + * ie F = 31.4 Khz on 16 MHz microcontrollers or F = 39.2 KHz on 20 MHz microcontrollers + * These defaults are the same as with the old FAST_PWM_FAN implementation - no migration is required + * NOTE: Setting very low frequencies (< 10 Hz) may result in unexpected timer behavior. + * + * USE_OCR2A_AS_TOP [undefined by default] + * Boards that use TIMER2 for PWM have limitations resulting in only a few possible frequencies on TIMER2: + * 16MHz MCUs: [62.5KHz, 31.4KHz (default), 7.8KHz, 3.92KHz, 1.95KHz, 977Hz, 488Hz, 244Hz, 60Hz, 122Hz, 30Hz] + * 20MHz MCUs: [78.1KHz, 39.2KHz (default), 9.77KHz, 4.9KHz, 2.44KHz, 1.22KHz, 610Hz, 305Hz, 153Hz, 76Hz, 38Hz] + * A greater range can be achieved by enabling USE_OCR2A_AS_TOP. But note that this option blocks the use of + * PWM on pin OC2A. Only use this option if you don't need PWM on 0C2A. (Check your schematic.) + * USE_OCR2A_AS_TOP sacrifices duty cycle control resolution to achieve this broader range of frequencies. + */ +#if ENABLED(FAST_PWM_FAN) + //#define FAST_PWM_FAN_FREQUENCY 31400 + //#define USE_OCR2A_AS_TOP +#endif + +// @section extruder + +/** + * Extruder cooling fans + * + * Extruder auto fans automatically turn on when their extruders' + * temperatures go above EXTRUDER_AUTO_FAN_TEMPERATURE. + * + * Your board's pins file specifies the recommended pins. Override those here + * or set to -1 to disable completely. + * + * Multiple extruders can be assigned to the same pin in which case + * the fan will turn on when any selected extruder is above the threshold. + */ +#define E0_AUTO_FAN_PIN -1 +#define E1_AUTO_FAN_PIN -1 +#define E2_AUTO_FAN_PIN -1 +#define E3_AUTO_FAN_PIN -1 +#define E4_AUTO_FAN_PIN -1 +#define E5_AUTO_FAN_PIN -1 +#define CHAMBER_AUTO_FAN_PIN -1 + +#define EXTRUDER_AUTO_FAN_TEMPERATURE 50 +#define EXTRUDER_AUTO_FAN_SPEED 255 // 255 == full speed +#define CHAMBER_AUTO_FAN_TEMPERATURE 30 +#define CHAMBER_AUTO_FAN_SPEED 255 + +/** + * Part-Cooling Fan Multiplexer + * + * This feature allows you to digitally multiplex the fan output. + * The multiplexer is automatically switched at tool-change. + * Set FANMUX[012]_PINs below for up to 2, 4, or 8 multiplexed fans. + */ +#define FANMUX0_PIN -1 +#define FANMUX1_PIN -1 +#define FANMUX2_PIN -1 + +/** + * M355 Case Light on-off / brightness + */ +//#define CASE_LIGHT_ENABLE +#if ENABLED(CASE_LIGHT_ENABLE) + //#define CASE_LIGHT_PIN 4 // Override the default pin if needed + #define INVERT_CASE_LIGHT false // Set true if Case Light is ON when pin is LOW + #define CASE_LIGHT_DEFAULT_ON true // Set default power-up state on + #define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin) + //#define CASE_LIGHT_MENU // Add Case Light options to the LCD menu + //#define CASE_LIGHT_NO_BRIGHTNESS // Disable brightness control. Enable for non-PWM lighting. + //#define CASE_LIGHT_USE_NEOPIXEL // Use Neopixel LED as case light, requires NEOPIXEL_LED. + #if ENABLED(CASE_LIGHT_USE_NEOPIXEL) + #define CASE_LIGHT_NEOPIXEL_COLOR { 255, 255, 255, 255 } // { Red, Green, Blue, White } + #endif +#endif + +// @section homing + +// If you want endstops to stay on (by default) even when not homing +// enable this option. Override at any time with M120, M121. +//#define ENDSTOPS_ALWAYS_ON_DEFAULT + +// @section extras + +//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats. + +// Employ an external closed loop controller. Override pins here if needed. +//#define EXTERNAL_CLOSED_LOOP_CONTROLLER +#if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER) + //#define CLOSED_LOOP_ENABLE_PIN -1 + //#define CLOSED_LOOP_MOVE_COMPLETE_PIN -1 +#endif + +/** + * Dual Steppers / Dual Endstops + * + * This section will allow you to use extra E drivers to drive a second motor for X, Y, or Z axes. + * + * For example, set X_DUAL_STEPPER_DRIVERS setting to use a second motor. If the motors need to + * spin in opposite directions set INVERT_X2_VS_X_DIR. If the second motor needs its own endstop + * set X_DUAL_ENDSTOPS. This can adjust for "racking." Use X2_USE_ENDSTOP to set the endstop plug + * that should be used for the second endstop. Extra endstops will appear in the output of 'M119'. + * + * Use X_DUAL_ENDSTOP_ADJUSTMENT to adjust for mechanical imperfection. After homing both motors + * this offset is applied to the X2 motor. To find the offset home the X axis, and measure the error + * in X2. Dual endstop offsets can be set at runtime with 'M666 X Y Z'. + */ + +//#define X_DUAL_STEPPER_DRIVERS +#if ENABLED(X_DUAL_STEPPER_DRIVERS) + #define INVERT_X2_VS_X_DIR true // Set 'true' if X motors should rotate in opposite directions + //#define X_DUAL_ENDSTOPS + #if ENABLED(X_DUAL_ENDSTOPS) + #define X2_USE_ENDSTOP _XMAX_ + #define X_DUAL_ENDSTOPS_ADJUSTMENT 0 + #endif +#endif + +//#define Y_DUAL_STEPPER_DRIVERS +#if ENABLED(Y_DUAL_STEPPER_DRIVERS) + #define INVERT_Y2_VS_Y_DIR true // Set 'true' if Y motors should rotate in opposite directions + //#define Y_DUAL_ENDSTOPS + #if ENABLED(Y_DUAL_ENDSTOPS) + #define Y2_USE_ENDSTOP _YMAX_ + #define Y_DUAL_ENDSTOPS_ADJUSTMENT 0 + #endif +#endif + +//#define Z_DUAL_STEPPER_DRIVERS +#if ENABLED(Z_DUAL_STEPPER_DRIVERS) + //#define Z_DUAL_ENDSTOPS + #if ENABLED(Z_DUAL_ENDSTOPS) + #define Z2_USE_ENDSTOP _XMAX_ + #define Z_DUAL_ENDSTOPS_ADJUSTMENT 0 + #endif +#endif + +//#define Z_TRIPLE_STEPPER_DRIVERS +#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS) + //#define Z_TRIPLE_ENDSTOPS + #if ENABLED(Z_TRIPLE_ENDSTOPS) + #define Z2_USE_ENDSTOP _XMAX_ + #define Z3_USE_ENDSTOP _YMAX_ + #define Z_TRIPLE_ENDSTOPS_ADJUSTMENT2 0 + #define Z_TRIPLE_ENDSTOPS_ADJUSTMENT3 0 + #endif +#endif + +/** + * Dual X Carriage + * + * This setup has two X carriages that can move independently, each with its own hotend. + * The carriages can be used to print an object with two colors or materials, or in + * "duplication mode" it can print two identical or X-mirrored objects simultaneously. + * The inactive carriage is parked automatically to prevent oozing. + * X1 is the left carriage, X2 the right. They park and home at opposite ends of the X axis. + * By default the X2 stepper is assigned to the first unused E plug on the board. + * + * The following Dual X Carriage modes can be selected with M605 S: + * + * 0 : (FULL_CONTROL) The slicer has full control over both X-carriages and can achieve optimal travel + * results as long as it supports dual X-carriages. (M605 S0) + * + * 1 : (AUTO_PARK) The firmware automatically parks and unparks the X-carriages on tool-change so + * that additional slicer support is not required. (M605 S1) + * + * 2 : (DUPLICATION) The firmware moves the second X-carriage and extruder in synchronization with + * the first X-carriage and extruder, to print 2 copies of the same object at the same time. + * Set the constant X-offset and temperature differential with M605 S2 X[offs] R[deg] and + * follow with M605 S2 to initiate duplicated movement. + * + * 3 : (MIRRORED) Formbot/Vivedino-inspired mirrored mode in which the second extruder duplicates + * the movement of the first except the second extruder is reversed in the X axis. + * Set the initial X offset and temperature differential with M605 S2 X[offs] R[deg] and + * follow with M605 S3 to initiate mirrored movement. + */ +//#define DUAL_X_CARRIAGE +#if ENABLED(DUAL_X_CARRIAGE) + #define X1_MIN_POS X_MIN_POS // Set to X_MIN_POS + #define X1_MAX_POS X_BED_SIZE // Set a maximum so the first X-carriage can't hit the parked second X-carriage + #define X2_MIN_POS 80 // Set a minimum to ensure the second X-carriage can't hit the parked first X-carriage + #define X2_MAX_POS 353 // Set this to the distance between toolheads when both heads are homed + #define X2_HOME_DIR 1 // Set to 1. The second X-carriage always homes to the maximum endstop position + #define X2_HOME_POS X2_MAX_POS // Default X2 home position. Set to X2_MAX_POS. + // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software + // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops + // without modifying the firmware (through the "M218 T1 X???" command). + // Remember: you should set the second extruder x-offset to 0 in your slicer. + + // This is the default power-up mode which can be later using M605. + #define DEFAULT_DUAL_X_CARRIAGE_MODE DXC_AUTO_PARK_MODE + + // Default x offset in duplication mode (typically set to half print bed width) + #define DEFAULT_DUPLICATION_X_OFFSET 100 + +#endif // DUAL_X_CARRIAGE + +// Activate a solenoid on the active extruder with M380. Disable all with M381. +// Define SOL0_PIN, SOL1_PIN, etc., for each extruder that has a solenoid. +//#define EXT_SOLENOID + +// @section homing + +// Homing hits each endstop, retracts by these distances, then does a slower bump. +#define X_HOME_BUMP_MM 10 +#define Y_HOME_BUMP_MM 10 +#define Z_HOME_BUMP_MM 3 +#define HOMING_BUMP_DIVISOR { 2, 2, 4 } // Re-Bump Speed Divisor (Divides the Homing Feedrate) +#define QUICK_HOME // If homing includes X and Y, do a diagonal move initially +//#define HOMING_BACKOFF_MM { 2, 2, 2 } // (mm) Move away from the endstops after homing + +// When G28 is called, this option will make Y home before X +//#define HOME_Y_BEFORE_X + +// Enable this if X or Y can't home without homing the other axis first. +//#define CODEPENDENT_XY_HOMING + +#if ENABLED(BLTOUCH) + /** + * Either: Use the defaults (recommended) or: For special purposes, use the following DEFINES + * Do not activate settings that the probe might not understand. Clones might misunderstand + * advanced commands. + * + * Note: If the probe is not deploying, check a "Cmd: Reset" and "Cmd: Self-Test" and then + * check the wiring of the BROWN, RED and ORANGE wires. + * + * Note: If the trigger signal of your probe is not being recognized, it has been very often + * because the BLACK and WHITE wires needed to be swapped. They are not "interchangeable" + * like they would be with a real switch. So please check the wiring first. + * + * Settings for all BLTouch and clone probes: + */ + + // Safety: The probe needs time to recognize the command. + // Minimum command delay (ms). Enable and increase if needed. + //#define BLTOUCH_DELAY 500 + + /** + * Settings for BLTOUCH Classic 1.2, 1.3 or BLTouch Smart 1.0, 2.0, 2.2, 3.0, 3.1, and most clones: + */ + + // Feature: Switch into SW mode after a deploy. It makes the output pulse longer. Can be useful + // in special cases, like noisy or filtered input configurations. + //#define BLTOUCH_FORCE_SW_MODE + + /** + * Settings for BLTouch Smart 3.0 and 3.1 + * Summary: + * - Voltage modes: 5V and OD (open drain - "logic voltage free") output modes + * - High-Speed mode + * - Disable LCD voltage options + */ + + /** + * Danger: Don't activate 5V mode unless attached to a 5V-tolerant controller! + * V3.0 or 3.1: Set default mode to 5V mode at Marlin startup. + * If disabled, OD mode is the hard-coded default on 3.0 + * On startup, Marlin will compare its eeprom to this vale. If the selected mode + * differs, a mode set eeprom write will be completed at initialization. + * Use the option below to force an eeprom write to a V3.1 probe regardless. + */ + //#define BLTOUCH_SET_5V_MODE + + /** + * Safety: Activate if connecting a probe with an unknown voltage mode. + * V3.0: Set a probe into mode selected above at Marlin startup. Required for 5V mode on 3.0 + * V3.1: Force a probe with unknown mode into selected mode at Marlin startup ( = Probe EEPROM write ) + * To preserve the life of the probe, use this once then turn it off and re-flash. + */ + //#define BLTOUCH_FORCE_MODE_SET + + /** + * Use "HIGH SPEED" mode for probing. + * Danger: Disable if your probe sometimes fails. Only suitable for stable well-adjusted systems. + * This feature was designed for Delta's with very fast Z moves however higher speed cartesians may function + * If the machine cannot raise the probe fast enough after a trigger, it may enter a fault state. + */ + //#define BLTOUCH_HS_MODE + + // Safety: Enable voltage mode settings in the LCD menu. + //#define BLTOUCH_LCD_VOLTAGE_MENU + +#endif // BLTOUCH + +/** + * Z Steppers Auto-Alignment + * Add the G34 command to align multiple Z steppers using a bed probe. + */ +//#define Z_STEPPER_AUTO_ALIGN +#if ENABLED(Z_STEPPER_AUTO_ALIGN) + // Define probe X and Y positions for Z1, Z2 [, Z3] + #define Z_STEPPER_ALIGN_XY { { 10, 290 }, { 150, 10 }, { 290, 290 } } // Set number of iterations to align + #define Z_STEPPER_ALIGN_ITERATIONS 3 + // Enable to restore leveling setup after operation + #define RESTORE_LEVELING_AFTER_G34 + + // On a 300mm bed a 5% grade would give a misalignment of ~1.5cm + #define G34_MAX_GRADE 5 // (%) Maximum incline G34 will handle + + // Use the amplification factor to de-/increase correction step. + // In case the stepper (spindle) position is further out than the test point + // Use a value > 1. NOTE: This may cause instability + #define Z_STEPPER_ALIGN_AMP 1.0 + // Stop criterion. If the accuracy is better than this stop iterating early + #define Z_STEPPER_ALIGN_ACC 0.02 +#endif + +// @section motion + +#define AXIS_RELATIVE_MODES { false, false, false, false } + +// Add a Duplicate option for well-separated conjoined nozzles +//#define MULTI_NOZZLE_DUPLICATION + +// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step. +#define INVERT_X_STEP_PIN false +#define INVERT_Y_STEP_PIN false +#define INVERT_Z_STEP_PIN false +#define INVERT_E_STEP_PIN false + +// Default stepper release if idle. Set to 0 to deactivate. +// Steppers will shut down DEFAULT_STEPPER_DEACTIVE_TIME seconds after the last move when DISABLE_INACTIVE_? is true. +// Time can be set by M18 and M84. +#define DEFAULT_STEPPER_DEACTIVE_TIME 120 +#define DISABLE_INACTIVE_X true +#define DISABLE_INACTIVE_Y true +#define DISABLE_INACTIVE_Z true // Set to false if the nozzle will fall down on your printed part when print has finished. +#define DISABLE_INACTIVE_E true + +#define DEFAULT_MINIMUMFEEDRATE 0.0 // minimum feedrate +#define DEFAULT_MINTRAVELFEEDRATE 0.0 + +//#define HOME_AFTER_DEACTIVATE // Require rehoming after steppers are deactivated + +// Minimum time that a segment needs to take if the buffer is emptied +#define DEFAULT_MINSEGMENTTIME 20000 // (ms) + +// If defined the movements slow down when the look ahead buffer is only half full +#define SLOWDOWN + +// Frequency limit +// See nophead's blog for more info +// Not working O +//#define XY_FREQUENCY_LIMIT 15 + +// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end +// of the buffer and all stops. This should not be much greater than zero and should only be changed +// if unwanted behavior is observed on a user's machine when running at very slow speeds. +#define MINIMUM_PLANNER_SPEED 0.05 // (mm/s) + +// +// Backlash Compensation +// Adds extra movement to axes on direction-changes to account for backlash. +// +//#define BACKLASH_COMPENSATION +#if ENABLED(BACKLASH_COMPENSATION) + // Define values for backlash distance and correction. + // If BACKLASH_GCODE is enabled these values are the defaults. + #define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm) + #define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction + + // Set BACKLASH_SMOOTHING_MM to spread backlash correction over multiple segments + // to reduce print artifacts. (Enabling this is costly in memory and computation!) + //#define BACKLASH_SMOOTHING_MM 3 // (mm) + + // Add runtime configuration and tuning of backlash values (M425) + //#define BACKLASH_GCODE + + #if ENABLED(BACKLASH_GCODE) + // Measure the Z backlash when probing (G29) and set with "M425 Z" + #define MEASURE_BACKLASH_WHEN_PROBING + + #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING) + // When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT + // mm away from point of contact in BACKLASH_MEASUREMENT_RESOLUTION + // increments while checking for the contact to be broken. + #define BACKLASH_MEASUREMENT_LIMIT 0.5 // (mm) + #define BACKLASH_MEASUREMENT_RESOLUTION 0.005 // (mm) + #define BACKLASH_MEASUREMENT_FEEDRATE Z_PROBE_SPEED_SLOW // (mm/m) + #endif + #endif +#endif + +/** + * Automatic backlash, position and hotend offset calibration + * + * Enable G425 to run automatic calibration using an electrically- + * conductive cube, bolt, or washer mounted on the bed. + * + * G425 uses the probe to touch the top and sides of the calibration object + * on the bed and measures and/or correct positional offsets, axis backlash + * and hotend offsets. + * + * Note: HOTEND_OFFSET and CALIBRATION_OBJECT_CENTER must be set to within + * ±5mm of true values for G425 to succeed. + */ +//#define CALIBRATION_GCODE +#if ENABLED(CALIBRATION_GCODE) + + #define CALIBRATION_MEASUREMENT_RESOLUTION 0.01 // mm + + #define CALIBRATION_FEEDRATE_SLOW 60 // mm/m + #define CALIBRATION_FEEDRATE_FAST 1200 // mm/m + #define CALIBRATION_FEEDRATE_TRAVEL 3000 // mm/m + + // The following parameters refer to the conical section of the nozzle tip. + #define CALIBRATION_NOZZLE_TIP_HEIGHT 1.0 // mm + #define CALIBRATION_NOZZLE_OUTER_DIAMETER 2.0 // mm + + // Uncomment to enable reporting (required for "G425 V", but consumes PROGMEM). + //#define CALIBRATION_REPORTING + + // The true location and dimension the cube/bolt/washer on the bed. + #define CALIBRATION_OBJECT_CENTER { 264.0, -22.0, -2.0 } // mm + #define CALIBRATION_OBJECT_DIMENSIONS { 10.0, 10.0, 10.0 } // mm + + // Comment out any sides which are unreachable by the probe. For best + // auto-calibration results, all sides must be reachable. + #define CALIBRATION_MEASURE_RIGHT + #define CALIBRATION_MEASURE_FRONT + #define CALIBRATION_MEASURE_LEFT + #define CALIBRATION_MEASURE_BACK + + // Probing at the exact top center only works if the center is flat. If + // probing on a screwhead or hollow washer, probe near the edges. + //#define CALIBRATION_MEASURE_AT_TOP_EDGES + + // Define pin which is read during calibration + #ifndef CALIBRATION_PIN + #define CALIBRATION_PIN -1 // Override in pins.h or set to -1 to use your Z endstop + #define CALIBRATION_PIN_INVERTING false // Set to true to invert the pin + //#define CALIBRATION_PIN_PULLDOWN + #define CALIBRATION_PIN_PULLUP + #endif +#endif + +/** + * Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies + * below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible + * vibration and surface artifacts. The algorithm adapts to provide the best possible step smoothing at the + * lowest stepping frequencies. + */ +//#define ADAPTIVE_STEP_SMOOTHING + +/** + * Custom Microstepping + * Override as-needed for your setup. Up to 3 MS pins are supported. + */ +//#define MICROSTEP1 LOW,LOW,LOW +//#define MICROSTEP2 HIGH,LOW,LOW +//#define MICROSTEP4 LOW,HIGH,LOW +//#define MICROSTEP8 HIGH,HIGH,LOW +//#define MICROSTEP16 LOW,LOW,HIGH +//#define MICROSTEP32 HIGH,LOW,HIGH + +// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU. +#define MICROSTEP_MODES { 16, 16, 16, 16, 16, 16 } // [1,2,4,8,16] + +/** + * @section stepper motor current + * + * Some boards have a means of setting the stepper motor current via firmware. + * + * The power on motor currents are set by: + * PWM_MOTOR_CURRENT - used by MINIRAMBO & ULTIMAIN_2 + * known compatible chips: A4982 + * DIGIPOT_MOTOR_CURRENT - used by BQ_ZUM_MEGA_3D, RAMBO & SCOOVO_X9H + * known compatible chips: AD5206 + * DAC_MOTOR_CURRENT_DEFAULT - used by PRINTRBOARD_REVF & RIGIDBOARD_V2 + * known compatible chips: MCP4728 + * DIGIPOT_I2C_MOTOR_CURRENTS - used by 5DPRINT, AZTEEG_X3_PRO, AZTEEG_X5_MINI_WIFI, MIGHTYBOARD_REVE + * known compatible chips: MCP4451, MCP4018 + * + * Motor currents can also be set by M907 - M910 and by the LCD. + * M907 - applies to all. + * M908 - BQ_ZUM_MEGA_3D, RAMBO, PRINTRBOARD_REVF, RIGIDBOARD_V2 & SCOOVO_X9H + * M909, M910 & LCD - only PRINTRBOARD_REVF & RIGIDBOARD_V2 + */ +//#define PWM_MOTOR_CURRENT { 1300, 1300, 1250 } // Values in milliamps +//#define DIGIPOT_MOTOR_CURRENT { 135,135,135,135,135 } // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) +//#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis + +// Use an I2C based DIGIPOT (e.g., Azteeg X3 Pro) +//#define DIGIPOT_I2C +#if ENABLED(DIGIPOT_I2C) && !defined(DIGIPOT_I2C_ADDRESS_A) + /** + * Common slave addresses: + * + * A (A shifted) B (B shifted) IC + * Smoothie 0x2C (0x58) 0x2D (0x5A) MCP4451 + * AZTEEG_X3_PRO 0x2C (0x58) 0x2E (0x5C) MCP4451 + * AZTEEG_X5_MINI 0x2C (0x58) 0x2E (0x5C) MCP4451 + * AZTEEG_X5_MINI_WIFI 0x58 0x5C MCP4451 + * MIGHTYBOARD_REVE 0x2F (0x5E) MCP4018 + */ + #define DIGIPOT_I2C_ADDRESS_A 0x2C // unshifted slave address for first DIGIPOT + #define DIGIPOT_I2C_ADDRESS_B 0x2D // unshifted slave address for second DIGIPOT +#endif + +//#define DIGIPOT_MCP4018 // Requires library from https://github.com/stawel/SlowSoftI2CMaster +#define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4 AZTEEG_X3_PRO: 8 MKS SBASE: 5 +// Actual motor currents in Amps. The number of entries must match DIGIPOT_I2C_NUM_CHANNELS. +// These correspond to the physical drivers, so be mindful if the order is changed. +#define DIGIPOT_I2C_MOTOR_CURRENTS { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 } // AZTEEG_X3_PRO + +//=========================================================================== +//=============================Additional Features=========================== +//=========================================================================== + +// @section lcd + +#if EITHER(ULTIPANEL, EXTENSIBLE_UI) + #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 60 } // Feedrates for manual moves along X, Y, Z, E from panel + #define SHORT_MANUAL_Z_MOVE 0.025 // (mm) Smallest manual Z move (< 0.1mm) + #if ENABLED(ULTIPANEL) + #define MANUAL_E_MOVES_RELATIVE // Display extruder move distance rather than "position" + #define ULTIPANEL_FEEDMULTIPLY // Encoder sets the feedrate multiplier on the Status Screen + #endif +#endif + +// Change values more rapidly when the encoder is rotated faster +#define ENCODER_RATE_MULTIPLIER +#if ENABLED(ENCODER_RATE_MULTIPLIER) + #define ENCODER_10X_STEPS_PER_SEC 30 // (steps/s) Encoder rate for 10x speed + #define ENCODER_100X_STEPS_PER_SEC 80 // (steps/s) Encoder rate for 100x speed +#endif + +// Play a beep when the feedrate is changed from the Status Screen +//#define BEEP_ON_FEEDRATE_CHANGE +#if ENABLED(BEEP_ON_FEEDRATE_CHANGE) + #define FEEDRATE_CHANGE_BEEP_DURATION 10 + #define FEEDRATE_CHANGE_BEEP_FREQUENCY 440 +#endif + +#if HAS_LCD_MENU + + // Include a page of printer information in the LCD Main Menu + //#define LCD_INFO_MENU + #if ENABLED(LCD_INFO_MENU) + //#define LCD_PRINTER_INFO_IS_BOOTSCREEN // Show bootscreen(s) instead of Printer Info pages + #endif + + // BACK menu items keep the highlight at the top + //#define TURBO_BACK_MENU_ITEM + + /** + * LED Control Menu + * Add LED Control to the LCD menu + */ + //#define LED_CONTROL_MENU + #if ENABLED(LED_CONTROL_MENU) + #define LED_COLOR_PRESETS // Enable the Preset Color menu option + #if ENABLED(LED_COLOR_PRESETS) + #define LED_USER_PRESET_RED 255 // User defined RED value + #define LED_USER_PRESET_GREEN 128 // User defined GREEN value + #define LED_USER_PRESET_BLUE 0 // User defined BLUE value + #define LED_USER_PRESET_WHITE 255 // User defined WHITE value + #define LED_USER_PRESET_BRIGHTNESS 255 // User defined intensity + //#define LED_USER_PRESET_STARTUP // Have the printer display the user preset color on startup + #endif + #endif + +#endif // HAS_LCD_MENU + +// Scroll a longer status message into view +//#define STATUS_MESSAGE_SCROLLING + +// On the Info Screen, display XY with one decimal place when possible +//#define LCD_DECIMAL_SMALL_XY + +// The timeout (in ms) to return to the status screen from sub-menus +//#define LCD_TIMEOUT_TO_STATUS 15000 + +// Add an 'M73' G-code to set the current percentage +//#define LCD_SET_PROGRESS_MANUALLY + +#if HAS_CHARACTER_LCD && HAS_PRINT_PROGRESS + //#define LCD_PROGRESS_BAR // Show a progress bar on HD44780 LCDs for SD printing + #if ENABLED(LCD_PROGRESS_BAR) + #define PROGRESS_BAR_BAR_TIME 2000 // (ms) Amount of time to show the bar + #define PROGRESS_BAR_MSG_TIME 3000 // (ms) Amount of time to show the status message + #define PROGRESS_MSG_EXPIRE 0 // (ms) Amount of time to retain the status message (0=forever) + //#define PROGRESS_MSG_ONCE // Show the message for MSG_TIME then clear it + //#define LCD_PROGRESS_BAR_TEST // Add a menu item to test the progress bar + #endif +#endif + +#if ENABLED(SDSUPPORT) + + // Some RAMPS and other boards don't detect when an SD card is inserted. You can work + // around this by connecting a push button or single throw switch to the pin defined + // as SD_DETECT_PIN in your board's pins definitions. + // This setting should be disabled unless you are using a push button, pulling the pin to ground. + // Note: This is always disabled for ULTIPANEL (except ELB_FULL_GRAPHIC_CONTROLLER). + #define SD_DETECT_INVERTED + + #define SD_FINISHED_STEPPERRELEASE true // Disable steppers when SD Print is finished + #define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the Z enabled so your bed stays in place. + + // Reverse SD sort to show "more recent" files first, according to the card's FAT. + // Since the FAT gets out of order with usage, SDCARD_SORT_ALPHA is recommended. + #define SDCARD_RATHERRECENTFIRST + + #define SD_MENU_CONFIRM_START // Confirm the selected SD file before printing + + //#define MENU_ADDAUTOSTART // Add a menu option to run auto#.g files + + #define EVENT_GCODE_SD_STOP "G28XY" // G-code to run on Stop Print (e.g., "G28XY" or "G27") + + /** + * Continue after Power-Loss (Creality3D) + * + * Store the current state to the SD Card at the start of each layer + * during SD printing. If the recovery file is found at boot time, present + * an option on the LCD screen to continue the print from the last-known + * point in the file. + */ + //#define POWER_LOSS_RECOVERY + #if ENABLED(POWER_LOSS_RECOVERY) + //#define POWER_LOSS_PIN 44 // Pin to detect power loss + //#define POWER_LOSS_STATE HIGH // State of pin indicating power loss + //#define POWER_LOSS_PULL // Set pullup / pulldown as appropriate + //#define POWER_LOSS_PURGE_LEN 20 // (mm) Length of filament to purge on resume + //#define POWER_LOSS_RETRACT_LEN 10 // (mm) Length of filament to retract on fail. Requires backup power. + + // Without a POWER_LOSS_PIN the following option helps reduce wear on the SD card, + // especially with "vase mode" printing. Set too high and vases cannot be continued. + #define POWER_LOSS_MIN_Z_CHANGE 0.05 // (mm) Minimum Z change before saving power-loss data + #endif + + /** + * Sort SD file listings in alphabetical order. + * + * With this option enabled, items on SD cards will be sorted + * by name for easier navigation. + * + * By default... + * + * - Use the slowest -but safest- method for sorting. + * - Folders are sorted to the top. + * - The sort key is statically allocated. + * - No added G-code (M34) support. + * - 40 item sorting limit. (Items after the first 40 are unsorted.) + * + * SD sorting uses static allocation (as set by SDSORT_LIMIT), allowing the + * compiler to calculate the worst-case usage and throw an error if the SRAM + * limit is exceeded. + * + * - SDSORT_USES_RAM provides faster sorting via a static directory buffer. + * - SDSORT_USES_STACK does the same, but uses a local stack-based buffer. + * - SDSORT_CACHE_NAMES will retain the sorted file listing in RAM. (Expensive!) + * - SDSORT_DYNAMIC_RAM only uses RAM when the SD menu is visible. (Use with caution!) + */ + //#define SDCARD_SORT_ALPHA + + // SD Card Sorting options + #if ENABLED(SDCARD_SORT_ALPHA) + #define SDSORT_LIMIT 40 // Maximum number of sorted items (10-256). Costs 27 bytes each. + #define FOLDER_SORTING -1 // -1=above 0=none 1=below + #define SDSORT_GCODE false // Allow turning sorting on/off with LCD and M34 g-code. + #define SDSORT_USES_RAM false // Pre-allocate a static array for faster pre-sorting. + #define SDSORT_USES_STACK false // Prefer the stack for pre-sorting to give back some SRAM. (Negated by next 2 options.) + #define SDSORT_CACHE_NAMES false // Keep sorted items in RAM longer for speedy performance. Most expensive option. + #define SDSORT_DYNAMIC_RAM false // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use! + #define SDSORT_CACHE_VFATS 2 // Maximum number of 13-byte VFAT entries to use for sorting. + // Note: Only affects SCROLL_LONG_FILENAMES with SDSORT_CACHE_NAMES but not SDSORT_DYNAMIC_RAM. + #endif + + // This allows hosts to request long names for files and folders with M33 + //#define LONG_FILENAME_HOST_SUPPORT + + // Enable this option to scroll long filenames in the SD card menu + //#define SCROLL_LONG_FILENAMES + + // Leave the heaters on after Stop Print (not recommended!) + //#define SD_ABORT_NO_COOLDOWN + + /** + * This option allows you to abort SD printing when any endstop is triggered. + * This feature must be enabled with "M540 S1" or from the LCD menu. + * To have any effect, endstops must be enabled during SD printing. + */ + //#define SD_ABORT_ON_ENDSTOP_HIT + + /** + * This option makes it easier to print the same SD Card file again. + * On print completion the LCD Menu will open with the file selected. + * You can just click to start the print, or navigate elsewhere. + */ + //#define SD_REPRINT_LAST_SELECTED_FILE + + /** + * Auto-report SdCard status with M27 S + */ + //#define AUTO_REPORT_SD_STATUS + + /** + * Support for USB thumb drives using an Arduino USB Host Shield or + * equivalent MAX3421E breakout board. The USB thumb drive will appear + * to Marlin as an SD card. + * + * The MAX3421E can be assigned the same pins as the SD card reader, with + * the following pin mapping: + * + * SCLK, MOSI, MISO --> SCLK, MOSI, MISO + * INT --> SD_DETECT_PIN [1] + * SS --> SDSS + * + * [1] On AVR an interrupt-capable pin is best for UHS3 compatibility. + */ + //#define USB_FLASH_DRIVE_SUPPORT + #if ENABLED(USB_FLASH_DRIVE_SUPPORT) + #define USB_CS_PIN SDSS + #define USB_INTR_PIN SD_DETECT_PIN + + /** + * USB Host Shield Library + * + * - UHS2 uses no interrupts and has been production-tested + * on a LulzBot TAZ Pro with a 32-bit Archim board. + * + * - UHS3 is newer code with better USB compatibility. But it + * is less tested and is known to interfere with Servos. + * [1] This requires USB_INTR_PIN to be interrupt-capable. + */ + //#define USE_UHS3_USB + #endif + + /** + * When using a bootloader that supports SD-Firmware-Flashing, + * add a menu item to activate SD-FW-Update on the next reboot. + * + * Requires ATMEGA2560 (Arduino Mega) + * + * Tested with this bootloader: + * https://github.com/FleetProbe/MicroBridge-Arduino-ATMega2560 + */ + //#define SD_FIRMWARE_UPDATE + #if ENABLED(SD_FIRMWARE_UPDATE) + #define SD_FIRMWARE_UPDATE_EEPROM_ADDR 0x1FF + #define SD_FIRMWARE_UPDATE_ACTIVE_VALUE 0xF0 + #define SD_FIRMWARE_UPDATE_INACTIVE_VALUE 0xFF + #endif + + // Add an optimized binary file transfer mode, initiated with 'M28 B1' + //#define BINARY_FILE_TRANSFER + + #if HAS_SDCARD_CONNECTION + /** + * Set this option to one of the following (or the board's defaults apply): + * + * LCD - Use the SD drive in the external LCD controller. + * ONBOARD - Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.) + * CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file). + * + * :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ] + */ + //#define SDCARD_CONNECTION LCD + #endif + +#endif // SDSUPPORT + +/** + * By default an onboard SD card reader may be shared as a USB mass- + * storage device. This option hides the SD card from the host PC. + */ +//#define NO_SD_HOST_DRIVE // Disable SD Card access over USB (for security). + +/** + * Additional options for Graphical Displays + * + * Use the optimizations here to improve printing performance, + * which can be adversely affected by graphical display drawing, + * especially when doing several short moves, and when printing + * on DELTA and SCARA machines. + * + * Some of these options may result in the display lagging behind + * controller events, as there is a trade-off between reliable + * printing performance versus fast display updates. + */ +#if HAS_GRAPHICAL_LCD + // Show SD percentage next to the progress bar + //#define DOGM_SD_PERCENT + + // Enable to save many cycles by drawing a hollow frame on the Info Screen + #define XYZ_HOLLOW_FRAME + + // Enable to save many cycles by drawing a hollow frame on Menu Screens + #define MENU_HOLLOW_FRAME + + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. + //#define USE_BIG_EDIT_FONT + + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. + //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 + + // Swap the CW/CCW indicators in the graphics overlay + //#define OVERLAY_GFX_REVERSE + + /** + * ST7920-based LCDs can emulate a 16 x 4 character display using + * the ST7920 character-generator for very fast screen updates. + * Enable LIGHTWEIGHT_UI to use this special display mode. + * + * Since LIGHTWEIGHT_UI has limited space, the position and status + * message occupy the same line. Set STATUS_EXPIRE_SECONDS to the + * length of time to display the status message before clearing. + * + * Set STATUS_EXPIRE_SECONDS to zero to never clear the status. + * This will prevent position updates from being displayed. + */ + #if ENABLED(U8GLIB_ST7920) + //#define LIGHTWEIGHT_UI + #if ENABLED(LIGHTWEIGHT_UI) + #define STATUS_EXPIRE_SECONDS 20 + #endif + #endif + + /** + * Status (Info) Screen customizations + * These options may affect code size and screen render time. + * Custom status screens can forcibly override these settings. + */ + //#define STATUS_COMBINE_HEATERS // Use combined heater images instead of separate ones + //#define STATUS_HOTEND_NUMBERLESS // Use plain hotend icons instead of numbered ones (with 2+ hotends) + #define STATUS_HOTEND_INVERTED // Show solid nozzle bitmaps when heating (Requires STATUS_HOTEND_ANIM) + #define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating + #define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating + #define STATUS_CHAMBER_ANIM // Use a second bitmap to indicate chamber heating + //#define STATUS_ALT_BED_BITMAP // Use the alternative bed bitmap + //#define STATUS_ALT_FAN_BITMAP // Use the alternative fan bitmap + //#define STATUS_FAN_FRAMES 3 // :[0,1,2,3,4] Number of fan animation frames + //#define STATUS_HEAT_PERCENT // Show heating in a progress bar + //#define BOOT_MARLIN_LOGO_SMALL // Show a smaller Marlin logo on the Boot Screen (saving 399 bytes of flash) + //#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~‭3260 (or ~940) bytes of PROGMEM. + + // Frivolous Game Options + //#define MARLIN_BRICKOUT + //#define MARLIN_INVADERS + //#define MARLIN_SNAKE + //#define GAMES_EASTER_EGG // Add extra blank lines above the "Games" sub-menu + +#endif // HAS_GRAPHICAL_LCD + +// +// Lulzbot Touch UI +// +#if ENABLED(LULZBOT_TOUCH_UI) + // Display board used + //#define LCD_FTDI_VM800B35A // FTDI 3.5" with FT800 (320x240) + //#define LCD_4DSYSTEMS_4DLCD_FT843 // 4D Systems 4.3" (480x272) + //#define LCD_HAOYU_FT800CB // Haoyu with 4.3" or 5" (480x272) + //#define LCD_HAOYU_FT810CB // Haoyu with 5" (800x480) + //#define LCD_ALEPHOBJECTS_CLCD_UI // Aleph Objects Color LCD UI + + // Correct the resolution if not using the stock TFT panel. + //#define TOUCH_UI_320x240 + //#define TOUCH_UI_480x272 + //#define TOUCH_UI_800x480 + + // Mappings for boards with a standard RepRapDiscount Display connector + //#define AO_EXP1_PINMAP // AlephObjects CLCD UI EXP1 mapping + //#define AO_EXP2_PINMAP // AlephObjects CLCD UI EXP2 mapping + //#define CR10_TFT_PINMAP // Rudolph Riedel's CR10 pin mapping + //#define OTHER_PIN_LAYOUT // Define pins manually below + #if ENABLED(OTHER_PIN_LAYOUT) + // The pins for CS and MOD_RESET (PD) must be chosen. + #define CLCD_MOD_RESET 9 + #define CLCD_SPI_CS 10 + + // If using software SPI, specify pins for SCLK, MOSI, MISO + //#define CLCD_USE_SOFT_SPI + #if ENABLED(CLCD_USE_SOFT_SPI) + #define CLCD_SOFT_SPI_MOSI 11 + #define CLCD_SOFT_SPI_MISO 12 + #define CLCD_SOFT_SPI_SCLK 13 + #endif + #endif + + // Display Orientation. An inverted (i.e. upside-down) display + // is supported on the FT800. The FT810 and beyond also support + // portrait and mirrored orientations. + //#define TOUCH_UI_INVERTED + //#define TOUCH_UI_PORTRAIT + //#define TOUCH_UI_MIRRORED + + // UTF8 processing and rendering. + // Unsupported characters are shown as '?'. + //#define TOUCH_UI_USE_UTF8 + #if ENABLED(TOUCH_UI_USE_UTF8) + // Western accents support. These accented characters use + // combined bitmaps and require relatively little storage. + #define TOUCH_UI_UTF8_WESTERN_CHARSET + #if ENABLED(TOUCH_UI_UTF8_WESTERN_CHARSET) + // Additional character groups. These characters require + // full bitmaps and take up considerable storage: + //#define TOUCH_UI_UTF8_SUPERSCRIPTS // ¹ ² ³ + //#define TOUCH_UI_UTF8_COPYRIGHT // © ® + //#define TOUCH_UI_UTF8_GERMANIC // ß + //#define TOUCH_UI_UTF8_SCANDINAVIAN // Æ Ð Ø Þ æ ð ø þ + //#define TOUCH_UI_UTF8_PUNCTUATION // « » ¿ ¡ + //#define TOUCH_UI_UTF8_CURRENCY // ¢ £ ¤ ¥ + //#define TOUCH_UI_UTF8_ORDINALS // º ª + //#define TOUCH_UI_UTF8_MATHEMATICS // ± × ÷ + //#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾ + //#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬ + #endif + #endif + + // Use a smaller font when labels don't fit buttons + #define TOUCH_UI_FIT_TEXT + + // Allow language selection from menu at run-time (otherwise use LCD_LANGUAGE) + //#define LCD_LANGUAGE_1 en + //#define LCD_LANGUAGE_2 fr + //#define LCD_LANGUAGE_3 de + //#define LCD_LANGUAGE_4 es + //#define LCD_LANGUAGE_5 it + + // Use a numeric passcode for "Screen lock" keypad. + // (recommended for smaller displays) + //#define TOUCH_UI_PASSCODE + + // Output extra debug info for Touch UI events + //#define TOUCH_UI_DEBUG +#endif + +// +// FSMC Graphical TFT +// +#if ENABLED(FSMC_GRAPHICAL_TFT) + //#define TFT_MARLINUI_COLOR 0xFFFF // White + //#define TFT_MARLINBG_COLOR 0x0000 // Black + //#define TFT_DISABLED_COLOR 0x0003 // Almost black + //#define TFT_BTCANCEL_COLOR 0xF800 // Red + //#define TFT_BTARROWS_COLOR 0xDEE6 // 11011 110111 00110 Yellow + //#define TFT_BTOKMENU_COLOR 0x145F // 00010 100010 11111 Cyan +#endif + +// @section safety + +/** + * The watchdog hardware timer will do a reset and disable all outputs + * if the firmware gets too overloaded to read the temperature sensors. + * + * If you find that watchdog reboot causes your AVR board to hang forever, + * enable WATCHDOG_RESET_MANUAL to use a custom timer instead of WDTO. + * NOTE: This method is less reliable as it can only catch hangups while + * interrupts are enabled. + */ +#define USE_WATCHDOG +#if ENABLED(USE_WATCHDOG) + //#define WATCHDOG_RESET_MANUAL +#endif + +// @section lcd + +/** + * Babystepping enables movement of the axes by tiny increments without changing + * the current position values. This feature is used primarily to adjust the Z + * axis in the first layer of a print in real-time. + * + * Warning: Does not respect endstops! + */ +//#define BABYSTEPPING +#if ENABLED(BABYSTEPPING) + //#define BABYSTEP_WITHOUT_HOMING + //#define BABYSTEP_XY // Also enable X/Y Babystepping. Not supported on DELTA! + #define BABYSTEP_INVERT_Z false // Change if Z babysteps should go the other way + #define BABYSTEP_MULTIPLICATOR 1 // Babysteps are very small. Increase for faster motion. + + //#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping. + #if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING) + #define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds. + // Note: Extra time may be added to mitigate controller latency. + //#define BABYSTEP_ALWAYS_AVAILABLE // Allow babystepping at all times (not just during movement). + //#define MOVE_Z_WHEN_IDLE // Jump to the move Z menu on doubleclick when printer is idle. + #if ENABLED(MOVE_Z_WHEN_IDLE) + #define MOVE_Z_IDLE_MULTIPLICATOR 1 // Multiply 1mm by this factor for the move step size. + #endif + #endif + + //#define BABYSTEP_DISPLAY_TOTAL // Display total babysteps since last G28 + + //#define BABYSTEP_ZPROBE_OFFSET // Combine M851 Z and Babystepping + #if ENABLED(BABYSTEP_ZPROBE_OFFSET) + //#define BABYSTEP_HOTEND_Z_OFFSET // For multiple hotends, babystep relative Z offsets + //#define BABYSTEP_ZPROBE_GFX_OVERLAY // Enable graphical overlay on Z-offset editor + #endif +#endif + +// @section extruder + +/** + * Linear Pressure Control v1.5 + * + * Assumption: advance [steps] = k * (delta velocity [steps/s]) + * K=0 means advance disabled. + * + * NOTE: K values for LIN_ADVANCE 1.5 differ from earlier versions! + * + * Set K around 0.22 for 3mm PLA Direct Drive with ~6.5cm between the drive gear and heatbreak. + * Larger K values will be needed for flexible filament and greater distances. + * If this algorithm produces a higher speed offset than the extruder can handle (compared to E jerk) + * print acceleration will be reduced during the affected moves to keep within the limit. + * + * See http://marlinfw.org/docs/features/lin_advance.html for full instructions. + * Mention @Sebastianv650 on GitHub to alert the author of any issues. + */ +//#define LIN_ADVANCE +#if ENABLED(LIN_ADVANCE) + //#define EXTRA_LIN_ADVANCE_K // Enable for second linear advance constants + #define LIN_ADVANCE_K 0.22 // Unit: mm compression per 1mm/s extruder speed + //#define LA_DEBUG // If enabled, this will generate debug information output over USB. +#endif + +// @section leveling + +/** + * Points to probe for all 3-point Leveling procedures. + * Override if the automatically selected points are inadequate. + */ +#if EITHER(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + //#define PROBE_PT_1_X 15 + //#define PROBE_PT_1_Y 180 + //#define PROBE_PT_2_X 15 + //#define PROBE_PT_2_Y 20 + //#define PROBE_PT_3_X 170 + //#define PROBE_PT_3_Y 20 +#endif + +/** + * Override MIN_PROBE_EDGE for each side of the build plate + * Useful to get probe points to exact positions on targets or + * to allow leveling to avoid plate clamps on only specific + * sides of the bed. + * + * If you are replacing the prior *_PROBE_BED_POSITION options, + * LEFT and FRONT values in most cases will map directly over + * RIGHT and REAR would be the inverse such as + * (X/Y_BED_SIZE - RIGHT/BACK_PROBE_BED_POSITION) + * + * This will allow all positions to match at compilation, however + * should the probe position be modified with M851XY then the + * probe points will follow. This prevents any change from causing + * the probe to be unable to reach any points. + */ +#if PROBE_SELECTED && !IS_KINEMATIC + //#define MIN_PROBE_EDGE_LEFT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_RIGHT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_FRONT MIN_PROBE_EDGE + //#define MIN_PROBE_EDGE_BACK MIN_PROBE_EDGE +#endif + +#if EITHER(MESH_BED_LEVELING, AUTO_BED_LEVELING_UBL) + // Override the mesh area if the automatic (max) area is too large + //#define MESH_MIN_X MESH_INSET + //#define MESH_MIN_Y MESH_INSET + //#define MESH_MAX_X X_BED_SIZE - (MESH_INSET) + //#define MESH_MAX_Y Y_BED_SIZE - (MESH_INSET) +#endif + +/** + * Repeatedly attempt G29 leveling until it succeeds. + * Stop after G29_MAX_RETRIES attempts. + */ +//#define G29_RETRY_AND_RECOVER +#if ENABLED(G29_RETRY_AND_RECOVER) + #define G29_MAX_RETRIES 3 + #define G29_HALT_ON_FAILURE + /** + * Specify the GCODE commands that will be executed when leveling succeeds, + * between attempts, and after the maximum number of retries have been tried. + */ + #define G29_SUCCESS_COMMANDS "M117 Bed leveling done." + #define G29_RECOVER_COMMANDS "M117 Probe failed. Rewiping.\nG28\nG12 P0 S12 T0" + #define G29_FAILURE_COMMANDS "M117 Bed leveling failed.\nG0 Z10\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nM300 P25 S880\nM300 P50 S0\nG4 S1" + +#endif + +// @section extras + +// +// G2/G3 Arc Support +// +#define ARC_SUPPORT // Disable this feature to save ~3226 bytes +#if ENABLED(ARC_SUPPORT) + #define MM_PER_ARC_SEGMENT 1 // Length of each arc segment + #define MIN_ARC_SEGMENTS 24 // Minimum number of segments in a complete circle + #define N_ARC_CORRECTION 25 // Number of interpolated segments between corrections + //#define ARC_P_CIRCLES // Enable the 'P' parameter to specify complete circles + //#define CNC_WORKSPACE_PLANES // Allow G2/G3 to operate in XY, ZX, or YZ planes +#endif + +// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes. +//#define BEZIER_CURVE_SUPPORT + +/** + * G38 Probe Target + * + * This option adds G38.2 and G38.3 (probe towards target) + * and optionally G38.4 and G38.5 (probe away from target). + * Set MULTIPLE_PROBING for G38 to probe more than once. + */ +//#define G38_PROBE_TARGET +#if ENABLED(G38_PROBE_TARGET) + //#define G38_PROBE_AWAY // Include G38.4 and G38.5 to probe away from target + #define G38_MINIMUM_MOVE 0.0275 // (mm) Minimum distance that will produce a move. +#endif + +// Moves (or segments) with fewer steps than this will be joined with the next move +#define MIN_STEPS_PER_SEGMENT 6 + +/** + * Minimum delay before and after setting the stepper DIR (in ns) + * 0 : No delay (Expect at least 10µS since one Stepper ISR must transpire) + * 20 : Minimum for TMC2xxx drivers + * 200 : Minimum for A4988 drivers + * 400 : Minimum for A5984 drivers + * 500 : Minimum for LV8729 drivers (guess, no info in datasheet) + * 650 : Minimum for DRV8825 drivers + * 1500 : Minimum for TB6600 drivers (guess, no info in datasheet) + * 15000 : Minimum for TB6560 drivers (guess, no info in datasheet) + * + * Override the default value based on the driver type set in Configuration.h. + */ +//#define MINIMUM_STEPPER_POST_DIR_DELAY 650 +//#define MINIMUM_STEPPER_PRE_DIR_DELAY 650 + +/** + * Minimum stepper driver pulse width (in µs) + * 0 : Smallest possible width the MCU can produce, compatible with TMC2xxx drivers + * 0 : Minimum 500ns for LV8729, adjusted in stepper.h + * 1 : Minimum for A4988 and A5984 stepper drivers + * 2 : Minimum for DRV8825 stepper drivers + * 3 : Minimum for TB6600 stepper drivers + * 30 : Minimum for TB6560 stepper drivers + * + * Override the default value based on the driver type set in Configuration.h. + */ +//#define MINIMUM_STEPPER_PULSE 2 + +/** + * Maximum stepping rate (in Hz) the stepper driver allows + * If undefined, defaults to 1MHz / (2 * MINIMUM_STEPPER_PULSE) + * 500000 : Maximum for A4988 stepper driver + * 400000 : Maximum for TMC2xxx stepper drivers + * 250000 : Maximum for DRV8825 stepper driver + * 200000 : Maximum for LV8729 stepper driver + * 150000 : Maximum for TB6600 stepper driver + * 15000 : Maximum for TB6560 stepper driver + * + * Override the default value based on the driver type set in Configuration.h. + */ +//#define MAXIMUM_STEPPER_RATE 250000 + +// @section temperature + +// Control heater 0 and heater 1 in parallel. +//#define HEATERS_PARALLEL + +//=========================================================================== +//================================= Buffers ================================= +//=========================================================================== + +// @section hidden + +// The number of linear motions that can be in the plan at any give time. +// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2 (e.g. 8, 16, 32) because shifts and ors are used to do the ring-buffering. +#if ENABLED(SDSUPPORT) + #define BLOCK_BUFFER_SIZE 16 // SD,LCD,Buttons take more memory, block buffer needs to be smaller +#else + #define BLOCK_BUFFER_SIZE 16 // maximize block buffer +#endif + +// @section serial + +// The ASCII buffer for serial input +#define MAX_CMD_SIZE 96 +#define BUFSIZE 26 + +// Transmission to Host Buffer Size +// To save 386 bytes of PROGMEM (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0. +// To buffer a simple "ok" you need 4 bytes. +// For ADVANCED_OK (M105) you need 32 bytes. +// For debug-echo: 128 bytes for the optimal speed. +// Other output doesn't need to be that speedy. +// :[0, 2, 4, 8, 16, 32, 64, 128, 256] +#define TX_BUFFER_SIZE 0 + +// Host Receive Buffer Size +// Without XON/XOFF flow control (see SERIAL_XON_XOFF below) 32 bytes should be enough. +// To use flow control, set this buffer size to at least 1024 bytes. +// :[0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048] +//#define RX_BUFFER_SIZE 1024 + +#if RX_BUFFER_SIZE >= 1024 + // Enable to have the controller send XON/XOFF control characters to + // the host to signal the RX buffer is becoming full. + //#define SERIAL_XON_XOFF +#endif + +// Add M575 G-code to change the baud rate +//#define BAUD_RATE_GCODE + +#if ENABLED(SDSUPPORT) + // Enable this option to collect and display the maximum + // RX queue usage after transferring a file to SD. + //#define SERIAL_STATS_MAX_RX_QUEUED + + // Enable this option to collect and display the number + // of dropped bytes after a file transfer to SD. + //#define SERIAL_STATS_DROPPED_RX +#endif + +// Enable an emergency-command parser to intercept certain commands as they +// enter the serial receive buffer, so they cannot be blocked. +// Currently handles M108, M112, M410 +// Does not work on boards using AT90USB (USBCON) processors! +//#define EMERGENCY_PARSER + +// Bad Serial-connections can miss a received command by sending an 'ok' +// Therefore some clients abort after 30 seconds in a timeout. +// Some other clients start sending commands while receiving a 'wait'. +// This "wait" is only sent when the buffer is empty. 1 second is a good value here. +//#define NO_TIMEOUTS 1000 // Milliseconds + +// Some clients will have this feature soon. This could make the NO_TIMEOUTS unnecessary. +//#define ADVANCED_OK + +// Printrun may have trouble receiving long strings all at once. +// This option inserts short delays between lines of serial output. +#define SERIAL_OVERRUN_PROTECTION + +// @section extras + +/** + * Extra Fan Speed + * Adds a secondary fan speed for each print-cooling fan. + * 'M106 P T3-255' : Set a secondary speed for + * 'M106 P T2' : Use the set secondary speed + * 'M106 P T1' : Restore the previous fan speed + */ +//#define EXTRA_FAN_SPEED + +/** + * Firmware-based and LCD-controlled retract + * + * Add G10 / G11 commands for automatic firmware-based retract / recover. + * Use M207 and M208 to define parameters for retract / recover. + * + * Use M209 to enable or disable auto-retract. + * With auto-retract enabled, all G1 E moves within the set range + * will be converted to firmware-based retract/recover moves. + * + * Be sure to turn off auto-retract during filament change. + * + * Note that M207 / M208 / M209 settings are saved to EEPROM. + * + */ +//#define FWRETRACT +#if ENABLED(FWRETRACT) + #define FWRETRACT_AUTORETRACT // Override slicer retractions + #if ENABLED(FWRETRACT_AUTORETRACT) + #define MIN_AUTORETRACT 0.1 // (mm) Don't convert E moves under this length + #define MAX_AUTORETRACT 10.0 // (mm) Don't convert E moves over this length + #endif + #define RETRACT_LENGTH 3 // (mm) Default retract length (positive value) + #define RETRACT_LENGTH_SWAP 13 // (mm) Default swap retract length (positive value) + #define RETRACT_FEEDRATE 45 // (mm/s) Default feedrate for retracting + #define RETRACT_ZRAISE 0 // (mm) Default retract Z-raise + #define RETRACT_RECOVER_LENGTH 0 // (mm) Default additional recover length (added to retract length on recover) + #define RETRACT_RECOVER_LENGTH_SWAP 0 // (mm) Default additional swap recover length (added to retract length on recover from toolchange) + #define RETRACT_RECOVER_FEEDRATE 8 // (mm/s) Default feedrate for recovering from retraction + #define RETRACT_RECOVER_FEEDRATE_SWAP 8 // (mm/s) Default feedrate for recovering from swap retraction + #if ENABLED(MIXING_EXTRUDER) + //#define RETRACT_SYNC_MIXING // Retract and restore all mixing steppers simultaneously + #endif +#endif + +/** + * Universal tool change settings. + * Applies to all types of extruders except where explicitly noted. + */ +#if EXTRUDERS > 1 + // Z raise distance for tool-change, as needed for some extruders + #define TOOLCHANGE_ZRAISE 2 // (mm) + //#define TOOLCHANGE_NO_RETURN // Never return to the previous position on tool-change + + // Retract and prime filament on tool-change + //#define TOOLCHANGE_FILAMENT_SWAP + #if ENABLED(TOOLCHANGE_FILAMENT_SWAP) + #define TOOLCHANGE_FIL_SWAP_LENGTH 12 // (mm) + #define TOOLCHANGE_FIL_EXTRA_PRIME 2 // (mm) + #define TOOLCHANGE_FIL_SWAP_RETRACT_SPEED 3600 // (mm/m) + #define TOOLCHANGE_FIL_SWAP_PRIME_SPEED 3600 // (mm/m) + #endif + + /** + * Position to park head during tool change. + * Doesn't apply to SWITCHING_TOOLHEAD, DUAL_X_CARRIAGE, or PARKING_EXTRUDER + */ + //#define TOOLCHANGE_PARK + #if ENABLED(TOOLCHANGE_PARK) + #define TOOLCHANGE_PARK_XY { X_MIN_POS + 10, Y_MIN_POS + 10 } + #define TOOLCHANGE_PARK_XY_FEEDRATE 6000 // (mm/m) + #endif +#endif + +/** + * Advanced Pause + * Experimental feature for filament change support and for parking the nozzle when paused. + * Adds the GCode M600 for initiating filament change. + * If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle. + * + * Requires an LCD display. + * Requires NOZZLE_PARK_FEATURE. + * This feature is required for the default FILAMENT_RUNOUT_SCRIPT. + */ +//#define ADVANCED_PAUSE_FEATURE +#if ENABLED(ADVANCED_PAUSE_FEATURE) + #define PAUSE_PARK_RETRACT_FEEDRATE 60 // (mm/s) Initial retract feedrate. + #define PAUSE_PARK_RETRACT_LENGTH 5 // (mm) Initial retract. + // This short retract is done immediately, before parking the nozzle. + #define FILAMENT_CHANGE_UNLOAD_FEEDRATE 10 // (mm/s) Unload filament feedrate. This can be pretty fast. + #define FILAMENT_CHANGE_UNLOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate. + #define FILAMENT_CHANGE_UNLOAD_LENGTH 600 // (mm) The length of filament for a complete unload. + // For Bowden, the full length of the tube and nozzle. + // For direct drive, the full length of the nozzle. + // Set to 0 for manual unloading. + #define FILAMENT_CHANGE_SLOW_LOAD_FEEDRATE 6 // (mm/s) Slow move when starting load. + #define FILAMENT_CHANGE_SLOW_LOAD_LENGTH 0 // (mm) Slow length, to allow time to insert material. + // 0 to disable start loading and skip to fast load only + #define FILAMENT_CHANGE_FAST_LOAD_FEEDRATE 6 // (mm/s) Load filament feedrate. This can be pretty fast. + #define FILAMENT_CHANGE_FAST_LOAD_ACCEL 25 // (mm/s^2) Lower acceleration may allow a faster feedrate. + #define FILAMENT_CHANGE_FAST_LOAD_LENGTH 0 // (mm) Load length of filament, from extruder gear to nozzle. + // For Bowden, the full length of the tube and nozzle. + // For direct drive, the full length of the nozzle. + //#define ADVANCED_PAUSE_CONTINUOUS_PURGE // Purge continuously up to the purge length until interrupted. + #define ADVANCED_PAUSE_PURGE_FEEDRATE 3 // (mm/s) Extrude feedrate (after loading). Should be slower than load feedrate. + #define ADVANCED_PAUSE_PURGE_LENGTH 100 // (mm) Length to extrude after loading. + // Set to 0 for manual extrusion. + // Filament can be extruded repeatedly from the Filament Change menu + // until extrusion is consistent, and to purge old filament. + #define ADVANCED_PAUSE_RESUME_PRIME 0 // (mm) Extra distance to prime nozzle after returning from park. + //#define ADVANCED_PAUSE_FANS_PAUSE // Turn off print-cooling fans while the machine is paused. + + // Filament Unload does a Retract, Delay, and Purge first: + #define FILAMENT_UNLOAD_RETRACT_LENGTH 13 // (mm) Unload initial retract length. + #define FILAMENT_UNLOAD_DELAY 5000 // (ms) Delay for the filament to cool after retract. + #define FILAMENT_UNLOAD_PURGE_LENGTH 8 // (mm) An unretract is done, then this length is purged. + + #define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety. + #define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed. + #define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change. + + //#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change. + //#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change + + //#define FILAMENT_LOAD_UNLOAD_GCODES // Add M701/M702 Load/Unload G-codes, plus Load/Unload in the LCD Prepare menu. + //#define FILAMENT_UNLOAD_ALL_EXTRUDERS // Allow M702 to unload all extruders above a minimum target temp (as set by M302) +#endif + +// @section tmc + +/** + * TMC26X Stepper Driver options + * + * The TMC26XStepper library is required for this stepper driver. + * https://github.com/trinamic/TMC26XStepper + */ +#if HAS_DRIVER(TMC26X) + + #if AXIS_DRIVER_TYPE_X(TMC26X) + #define X_MAX_CURRENT 1000 // (mA) + #define X_SENSE_RESISTOR 91 // (mOhms) + #define X_MICROSTEPS 16 // Number of microsteps + #endif + + #if AXIS_DRIVER_TYPE_X2(TMC26X) + #define X2_MAX_CURRENT 1000 + #define X2_SENSE_RESISTOR 91 + #define X2_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_Y(TMC26X) + #define Y_MAX_CURRENT 1000 + #define Y_SENSE_RESISTOR 91 + #define Y_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_Y2(TMC26X) + #define Y2_MAX_CURRENT 1000 + #define Y2_SENSE_RESISTOR 91 + #define Y2_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_Z(TMC26X) + #define Z_MAX_CURRENT 1000 + #define Z_SENSE_RESISTOR 91 + #define Z_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_Z2(TMC26X) + #define Z2_MAX_CURRENT 1000 + #define Z2_SENSE_RESISTOR 91 + #define Z2_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_Z3(TMC26X) + #define Z3_MAX_CURRENT 1000 + #define Z3_SENSE_RESISTOR 91 + #define Z3_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_E0(TMC26X) + #define E0_MAX_CURRENT 1000 + #define E0_SENSE_RESISTOR 91 + #define E0_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_E1(TMC26X) + #define E1_MAX_CURRENT 1000 + #define E1_SENSE_RESISTOR 91 + #define E1_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_E2(TMC26X) + #define E2_MAX_CURRENT 1000 + #define E2_SENSE_RESISTOR 91 + #define E2_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_E3(TMC26X) + #define E3_MAX_CURRENT 1000 + #define E3_SENSE_RESISTOR 91 + #define E3_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_E4(TMC26X) + #define E4_MAX_CURRENT 1000 + #define E4_SENSE_RESISTOR 91 + #define E4_MICROSTEPS 16 + #endif + + #if AXIS_DRIVER_TYPE_E5(TMC26X) + #define E5_MAX_CURRENT 1000 + #define E5_SENSE_RESISTOR 91 + #define E5_MICROSTEPS 16 + #endif + +#endif // TMC26X + +// @section tmc_smart + +/** + * To use TMC2130, TMC2160, TMC2660, TMC5130, TMC5160 stepper drivers in SPI mode + * connect your SPI pins to the hardware SPI interface on your board and define + * the required CS pins in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3 + * pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.). + * You may also use software SPI if you wish to use general purpose IO pins. + * + * To use TMC2208 stepper UART-configurable stepper drivers connect #_SERIAL_TX_PIN + * to the driver side PDN_UART pin with a 1K resistor. + * To use the reading capabilities, also connect #_SERIAL_RX_PIN to PDN_UART without + * a resistor. + * The drivers can also be used with hardware serial. + * + * TMCStepper library is required to use TMC stepper drivers. + * https://github.com/teemuatlut/TMCStepper + */ +#if HAS_TRINAMIC + + #define HOLD_MULTIPLIER 0.5 // Scales down the holding current from run current + #define INTERPOLATE true // Interpolate X/Y/Z_MICROSTEPS to 256 + + #if AXIS_IS_TMC(X) + #define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current. + #define X_MICROSTEPS 16 // 0..256 + #define X_RSENSE 0.11 + #define X_CHAIN_POS -1 // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ... + #endif + + #if AXIS_IS_TMC(X2) + #define X2_CURRENT 800 + #define X2_MICROSTEPS 16 + #define X2_RSENSE 0.11 + #define X2_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(Y) + #define Y_CURRENT 800 + #define Y_MICROSTEPS 16 + #define Y_RSENSE 0.11 + #define Y_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(Y2) + #define Y2_CURRENT 800 + #define Y2_MICROSTEPS 16 + #define Y2_RSENSE 0.11 + #define Y2_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(Z) + #define Z_CURRENT 800 + #define Z_MICROSTEPS 16 + #define Z_RSENSE 0.11 + #define Z_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(Z2) + #define Z2_CURRENT 800 + #define Z2_MICROSTEPS 16 + #define Z2_RSENSE 0.11 + #define Z2_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(Z3) + #define Z3_CURRENT 800 + #define Z3_MICROSTEPS 16 + #define Z3_RSENSE 0.11 + #define Z3_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(E0) + #define E0_CURRENT 800 + #define E0_MICROSTEPS 16 + #define E0_RSENSE 0.11 + #define E0_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(E1) + #define E1_CURRENT 800 + #define E1_MICROSTEPS 16 + #define E1_RSENSE 0.11 + #define E1_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(E2) + #define E2_CURRENT 800 + #define E2_MICROSTEPS 16 + #define E2_RSENSE 0.11 + #define E2_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(E3) + #define E3_CURRENT 800 + #define E3_MICROSTEPS 16 + #define E3_RSENSE 0.11 + #define E3_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(E4) + #define E4_CURRENT 800 + #define E4_MICROSTEPS 16 + #define E4_RSENSE 0.11 + #define E4_CHAIN_POS -1 + #endif + + #if AXIS_IS_TMC(E5) + #define E5_CURRENT 800 + #define E5_MICROSTEPS 16 + #define E5_RSENSE 0.11 + #define E5_CHAIN_POS -1 + #endif + + /** + * Override default SPI pins for TMC2130, TMC2160, TMC2660, TMC5130 and TMC5160 drivers here. + * The default pins can be found in your board's pins file. + */ + //#define X_CS_PIN -1 + //#define Y_CS_PIN -1 + //#define Z_CS_PIN -1 + //#define X2_CS_PIN -1 + //#define Y2_CS_PIN -1 + //#define Z2_CS_PIN -1 + //#define Z3_CS_PIN -1 + //#define E0_CS_PIN -1 + //#define E1_CS_PIN -1 + //#define E2_CS_PIN -1 + //#define E3_CS_PIN -1 + //#define E4_CS_PIN -1 + //#define E5_CS_PIN -1 + + /** + * Software option for SPI driven drivers (TMC2130, TMC2160, TMC2660, TMC5130 and TMC5160). + * The default SW SPI pins are defined the respective pins files, + * but you can override or define them here. + */ + //#define TMC_USE_SW_SPI + //#define TMC_SW_MOSI -1 + //#define TMC_SW_MISO -1 + //#define TMC_SW_SCK -1 + + /** + * Four TMC2209 drivers can use the same HW/SW serial port with hardware configured addresses. + * Set the address using jumpers on pins MS1 and MS2. + * Address | MS1 | MS2 + * 0 | LOW | LOW + * 1 | HIGH | LOW + * 2 | LOW | HIGH + * 3 | HIGH | HIGH + * + * Set *_SERIAL_TX_PIN and *_SERIAL_RX_PIN to match for all drivers + * on the same serial port, either here or in your board's pins file. + */ + #define X_SLAVE_ADDRESS 0 + #define Y_SLAVE_ADDRESS 0 + #define Z_SLAVE_ADDRESS 0 + #define X2_SLAVE_ADDRESS 0 + #define Y2_SLAVE_ADDRESS 0 + #define Z2_SLAVE_ADDRESS 0 + #define Z3_SLAVE_ADDRESS 0 + #define E0_SLAVE_ADDRESS 0 + #define E1_SLAVE_ADDRESS 0 + #define E2_SLAVE_ADDRESS 0 + #define E3_SLAVE_ADDRESS 0 + #define E4_SLAVE_ADDRESS 0 + #define E5_SLAVE_ADDRESS 0 + + /** + * Software enable + * + * Use for drivers that do not use a dedicated enable pin, but rather handle the same + * function through a communication line such as SPI or UART. + */ + //#define SOFTWARE_DRIVER_ENABLE + + /** + * TMC2130, TMC2160, TMC2208, TMC2209, TMC5130 and TMC5160 only + * Use Trinamic's ultra quiet stepping mode. + * When disabled, Marlin will use spreadCycle stepping mode. + */ + #define STEALTHCHOP_XY + #define STEALTHCHOP_Z + #define STEALTHCHOP_E + + /** + * Optimize spreadCycle chopper parameters by using predefined parameter sets + * or with the help of an example included in the library. + * Provided parameter sets are + * CHOPPER_DEFAULT_12V + * CHOPPER_DEFAULT_19V + * CHOPPER_DEFAULT_24V + * CHOPPER_DEFAULT_36V + * CHOPPER_PRUSAMK3_24V // Imported parameters from the official Prusa firmware for MK3 (24V) + * CHOPPER_MARLIN_119 // Old defaults from Marlin v1.1.9 + * + * Define you own with + * { , , hysteresis_start[1..8] } + */ + #define CHOPPER_TIMING CHOPPER_DEFAULT_12V + + /** + * Monitor Trinamic drivers for error conditions, + * like overtemperature and short to ground. + * In the case of overtemperature Marlin can decrease the driver current until error condition clears. + * Other detected conditions can be used to stop the current print. + * Relevant g-codes: + * M906 - Set or get motor current in milliamps using axis codes X, Y, Z, E. Report values if no axis codes given. + * M911 - Report stepper driver overtemperature pre-warn condition. + * M912 - Clear stepper driver overtemperature pre-warn condition flag. + * M122 - Report driver parameters (Requires TMC_DEBUG) + */ + //#define MONITOR_DRIVER_STATUS + + #if ENABLED(MONITOR_DRIVER_STATUS) + #define CURRENT_STEP_DOWN 50 // [mA] + #define REPORT_CURRENT_CHANGE + #define STOP_ON_ERROR + #endif + + /** + * TMC2130, TMC2160, TMC2208, TMC2209, TMC5130 and TMC5160 only + * The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD. + * This mode allows for faster movements at the expense of higher noise levels. + * STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD. + * M913 X/Y/Z/E to live tune the setting + */ + //#define HYBRID_THRESHOLD + + #define X_HYBRID_THRESHOLD 100 // [mm/s] + #define X2_HYBRID_THRESHOLD 100 + #define Y_HYBRID_THRESHOLD 100 + #define Y2_HYBRID_THRESHOLD 100 + #define Z_HYBRID_THRESHOLD 3 + #define Z2_HYBRID_THRESHOLD 3 + #define Z3_HYBRID_THRESHOLD 3 + #define E0_HYBRID_THRESHOLD 30 + #define E1_HYBRID_THRESHOLD 30 + #define E2_HYBRID_THRESHOLD 30 + #define E3_HYBRID_THRESHOLD 30 + #define E4_HYBRID_THRESHOLD 30 + #define E5_HYBRID_THRESHOLD 30 + + /** + * Use StallGuard2 to home / probe X, Y, Z. + * + * TMC2130, TMC2160, TMC2209, TMC2660, TMC5130, and TMC5160 only + * Connect the stepper driver's DIAG1 pin to the X/Y endstop pin. + * X, Y, and Z homing will always be done in spreadCycle mode. + * + * X/Y/Z_STALL_SENSITIVITY is the default stall threshold. + * Use M914 X Y Z to set the stall threshold at runtime: + * + * Sensitivity TMC2209 Others + * HIGHEST 255 -64 (Too sensitive => False positive) + * LOWEST 0 63 (Too insensitive => No trigger) + * + * It is recommended to set [XYZ]_HOME_BUMP_MM to 0. + * + * SPI_ENDSTOPS *** Beta feature! *** TMC2130 Only *** + * Poll the driver through SPI to determine load when homing. + * Removes the need for a wire from DIAG1 to an endstop pin. + * + * IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when + * homing and adds a guard period for endstop triggering. + */ + //#define SENSORLESS_HOMING // StallGuard capable drivers only + + /** + * Use StallGuard2 to probe the bed with the nozzle. + * + * CAUTION: This could cause damage to machines that use a lead screw or threaded rod + * to move the Z axis. Take extreme care when attempting to enable this feature. + */ + //#define SENSORLESS_PROBING // StallGuard capable drivers only + + #if EITHER(SENSORLESS_HOMING, SENSORLESS_PROBING) + // TMC2209: 0...255. TMC2130: -64...63 + #define X_STALL_SENSITIVITY 8 + #define X2_STALL_SENSITIVITY X_STALL_SENSITIVITY + #define Y_STALL_SENSITIVITY 8 + //#define Z_STALL_SENSITIVITY 8 + //#define SPI_ENDSTOPS // TMC2130 only + //#define IMPROVE_HOMING_RELIABILITY + #endif + + /** + * Beta feature! + * Create a 50/50 square wave step pulse optimal for stepper drivers. + */ + //#define SQUARE_WAVE_STEPPING + + /** + * Enable M122 debugging command for TMC stepper drivers. + * M122 S0/1 will enable continous reporting. + */ + //#define TMC_DEBUG + + /** + * You can set your own advanced settings by filling in predefined functions. + * A list of available functions can be found on the library github page + * https://github.com/teemuatlut/TMCStepper + * + * Example: + * #define TMC_ADV() { \ + * stepperX.diag0_temp_prewarn(1); \ + * stepperY.interpolate(0); \ + * } + */ + #define TMC_ADV() { } + +#endif // HAS_TRINAMIC + +// @section L6470 + +/** + * L6470 Stepper Driver options + * + * Arduino-L6470 library (0.7.0 or higher) is required for this stepper driver. + * https://github.com/ameyer/Arduino-L6470 + * + * Requires the following to be defined in your pins_YOUR_BOARD file + * L6470_CHAIN_SCK_PIN + * L6470_CHAIN_MISO_PIN + * L6470_CHAIN_MOSI_PIN + * L6470_CHAIN_SS_PIN + * L6470_RESET_CHAIN_PIN (optional) + */ +#if HAS_DRIVER(L6470) + + //#define L6470_CHITCHAT // Display additional status info + + #if AXIS_DRIVER_TYPE_X(L6470) + #define X_MICROSTEPS 128 // Number of microsteps (VALID: 1, 2, 4, 8, 16, 32, 128) + #define X_OVERCURRENT 2000 // (mA) Current where the driver detects an over current (VALID: 375 x (1 - 16) - 6A max - rounds down) + #define X_STALLCURRENT 1500 // (mA) Current where the driver detects a stall (VALID: 31.25 * (1-128) - 4A max - rounds down) + #define X_MAX_VOLTAGE 127 // 0-255, Maximum effective voltage seen by stepper + #define X_CHAIN_POS -1 // Position in SPI chain. (<=0 : Not in chain. 1 : Nearest MOSI) + #endif + + #if AXIS_DRIVER_TYPE_X2(L6470) + #define X2_MICROSTEPS 128 + #define X2_OVERCURRENT 2000 + #define X2_STALLCURRENT 1500 + #define X2_MAX_VOLTAGE 127 + #define X2_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_Y(L6470) + #define Y_MICROSTEPS 128 + #define Y_OVERCURRENT 2000 + #define Y_STALLCURRENT 1500 + #define Y_MAX_VOLTAGE 127 + #define Y_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_Y2(L6470) + #define Y2_MICROSTEPS 128 + #define Y2_OVERCURRENT 2000 + #define Y2_STALLCURRENT 1500 + #define Y2_MAX_VOLTAGE 127 + #define Y2_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_Z(L6470) + #define Z_MICROSTEPS 128 + #define Z_OVERCURRENT 2000 + #define Z_STALLCURRENT 1500 + #define Z_MAX_VOLTAGE 127 + #define Z_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_Z2(L6470) + #define Z2_MICROSTEPS 128 + #define Z2_OVERCURRENT 2000 + #define Z2_STALLCURRENT 1500 + #define Z2_MAX_VOLTAGE 127 + #define Z2_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_Z3(L6470) + #define Z3_MICROSTEPS 128 + #define Z3_OVERCURRENT 2000 + #define Z3_STALLCURRENT 1500 + #define Z3_MAX_VOLTAGE 127 + #define Z3_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_E0(L6470) + #define E0_MICROSTEPS 128 + #define E0_OVERCURRENT 2000 + #define E0_STALLCURRENT 1500 + #define E0_MAX_VOLTAGE 127 + #define E0_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_E1(L6470) + #define E1_MICROSTEPS 128 + #define E1_OVERCURRENT 2000 + #define E1_STALLCURRENT 1500 + #define E1_MAX_VOLTAGE 127 + #define E1_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_E2(L6470) + #define E2_MICROSTEPS 128 + #define E2_OVERCURRENT 2000 + #define E2_STALLCURRENT 1500 + #define E2_MAX_VOLTAGE 127 + #define E2_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_E3(L6470) + #define E3_MICROSTEPS 128 + #define E3_OVERCURRENT 2000 + #define E3_STALLCURRENT 1500 + #define E3_MAX_VOLTAGE 127 + #define E3_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_E4(L6470) + #define E4_MICROSTEPS 128 + #define E4_OVERCURRENT 2000 + #define E4_STALLCURRENT 1500 + #define E4_MAX_VOLTAGE 127 + #define E4_CHAIN_POS -1 + #endif + + #if AXIS_DRIVER_TYPE_E5(L6470) + #define E5_MICROSTEPS 128 + #define E5_OVERCURRENT 2000 + #define E5_STALLCURRENT 1500 + #define E5_MAX_VOLTAGE 127 + #define E5_CHAIN_POS -1 + #endif + + /** + * Monitor L6470 drivers for error conditions like over temperature and over current. + * In the case of over temperature Marlin can decrease the drive until the error condition clears. + * Other detected conditions can be used to stop the current print. + * Relevant g-codes: + * M906 - I1/2/3/4/5 Set or get motor drive level using axis codes X, Y, Z, E. Report values if no axis codes given. + * I not present or I0 or I1 - X, Y, Z or E0 + * I2 - X2, Y2, Z2 or E1 + * I3 - Z3 or E3 + * I4 - E4 + * I5 - E5 + * M916 - Increase drive level until get thermal warning + * M917 - Find minimum current thresholds + * M918 - Increase speed until max or error + * M122 S0/1 - Report driver parameters + */ + //#define MONITOR_L6470_DRIVER_STATUS + + #if ENABLED(MONITOR_L6470_DRIVER_STATUS) + #define KVAL_HOLD_STEP_DOWN 1 + //#define L6470_STOP_ON_ERROR + #endif + +#endif // L6470 + +/** + * TWI/I2C BUS + * + * This feature is an EXPERIMENTAL feature so it shall not be used on production + * machines. Enabling this will allow you to send and receive I2C data from slave + * devices on the bus. + * + * ; Example #1 + * ; This macro send the string "Marlin" to the slave device with address 0x63 (99) + * ; It uses multiple M260 commands with one B arg + * M260 A99 ; Target slave address + * M260 B77 ; M + * M260 B97 ; a + * M260 B114 ; r + * M260 B108 ; l + * M260 B105 ; i + * M260 B110 ; n + * M260 S1 ; Send the current buffer + * + * ; Example #2 + * ; Request 6 bytes from slave device with address 0x63 (99) + * M261 A99 B5 + * + * ; Example #3 + * ; Example serial output of a M261 request + * echo:i2c-reply: from:99 bytes:5 data:hello + */ + +// @section i2cbus + +//#define EXPERIMENTAL_I2CBUS +#define I2C_SLAVE_ADDRESS 0 // Set a value from 8 to 127 to act as a slave + +// @section extras + +/** + * Photo G-code + * Add the M240 G-code to take a photo. + * The photo can be triggered by a digital pin or a physical movement. + */ +//#define PHOTO_GCODE +#if ENABLED(PHOTO_GCODE) + // A position to move to (and raise Z) before taking the photo + //#define PHOTO_POSITION { X_MAX_POS - 5, Y_MAX_POS, 0 } // { xpos, ypos, zraise } (M240 X Y Z) + //#define PHOTO_DELAY_MS 100 // (ms) Duration to pause before moving back (M240 P) + //#define PHOTO_RETRACT_MM 6.5 // (mm) E retract/recover for the photo move (M240 R S) + + // Canon RC-1 or homebrew digital camera trigger + // Data from: http://www.doc-diy.net/photo/rc-1_hacked/ + //#define PHOTOGRAPH_PIN 23 + + // Canon Hack Development Kit + // http://captain-slow.dk/2014/03/09/3d-printing-timelapses/ + //#define CHDK_PIN 4 + + // Optional second move with delay to trigger the camera shutter + //#define PHOTO_SWITCH_POSITION { X_MAX_POS, Y_MAX_POS } // { xpos, ypos } (M240 I J) + + // Duration to hold the switch or keep CHDK_PIN high + //#define PHOTO_SWITCH_MS 50 // (ms) (M240 D) +#endif + +/** + * Spindle & Laser control + * + * Add the M3, M4, and M5 commands to turn the spindle/laser on and off, and + * to set spindle speed, spindle direction, and laser power. + * + * SuperPid is a router/spindle speed controller used in the CNC milling community. + * Marlin can be used to turn the spindle on and off. It can also be used to set + * the spindle speed from 5,000 to 30,000 RPM. + * + * You'll need to select a pin for the ON/OFF function and optionally choose a 0-5V + * hardware PWM pin for the speed control and a pin for the rotation direction. + * + * See http://marlinfw.org/docs/configuration/laser_spindle.html for more config details. + */ +//#define SPINDLE_FEATURE +//#define LASER_FEATURE +#if EITHER(SPINDLE_FEATURE, LASER_FEATURE) + #define SPINDLE_LASER_ACTIVE_HIGH false // Set to "true" if the on/off function is active HIGH + #define SPINDLE_LASER_PWM true // Set to "true" if your controller supports setting the speed/power + #define SPINDLE_LASER_PWM_INVERT true // Set to "true" if the speed/power goes up when you want it to go slower + #define SPINDLE_LASER_POWERUP_DELAY 5000 // (ms) Delay to allow the spindle/laser to come up to speed/power + #define SPINDLE_LASER_POWERDOWN_DELAY 5000 // (ms) Delay to allow the spindle to stop + + #if ENABLED(SPINDLE_FEATURE) + //#define SPINDLE_CHANGE_DIR // Enable if your spindle controller can change spindle direction + #define SPINDLE_CHANGE_DIR_STOP // Enable if the spindle should stop before changing spin direction + #define SPINDLE_INVERT_DIR false // Set to "true" if the spin direction is reversed + + /** + * The M3 & M4 commands use the following equation to convert PWM duty cycle to speed/power + * + * SPEED/POWER = PWM duty cycle * SPEED_POWER_SLOPE + SPEED_POWER_INTERCEPT + * where PWM duty cycle varies from 0 to 255 + * + * set the following for your controller (ALL MUST BE SET) + */ + #define SPEED_POWER_SLOPE 118.4 + #define SPEED_POWER_INTERCEPT 0 + #define SPEED_POWER_MIN 5000 + #define SPEED_POWER_MAX 30000 // SuperPID router controller 0 - 30,000 RPM + #else + #define SPEED_POWER_SLOPE 0.3922 + #define SPEED_POWER_INTERCEPT 0 + #define SPEED_POWER_MIN 10 + #define SPEED_POWER_MAX 100 // 0-100% + #endif +#endif + +/** + * Coolant Control + * + * Add the M7, M8, and M9 commands to turn mist or flood coolant on and off. + * + * Note: COOLANT_MIST_PIN and/or COOLANT_FLOOD_PIN must also be defined. + */ +//#define COOLANT_CONTROL +#if ENABLED(COOLANT_CONTROL) + #define COOLANT_MIST // Enable if mist coolant is present + #define COOLANT_FLOOD // Enable if flood coolant is present + #define COOLANT_MIST_INVERT false // Set "true" if the on/off function is reversed + #define COOLANT_FLOOD_INVERT false // Set "true" if the on/off function is reversed +#endif + +/** + * Filament Width Sensor + * + * Measures the filament width in real-time and adjusts + * flow rate to compensate for any irregularities. + * + * Also allows the measured filament diameter to set the + * extrusion rate, so the slicer only has to specify the + * volume. + * + * Only a single extruder is supported at this time. + * + * 34 RAMPS_14 : Analog input 5 on the AUX2 connector + * 81 PRINTRBOARD : Analog input 2 on the Exp1 connector (version B,C,D,E) + * 301 RAMBO : Analog input 3 + * + * Note: May require analog pins to be defined for other boards. + */ +//#define FILAMENT_WIDTH_SENSOR + +#if ENABLED(FILAMENT_WIDTH_SENSOR) + #define FILAMENT_SENSOR_EXTRUDER_NUM 0 // Index of the extruder that has the filament sensor. :[0,1,2,3,4] + #define MEASUREMENT_DELAY_CM 14 // (cm) The distance from the filament sensor to the melting chamber + + #define FILWIDTH_ERROR_MARGIN 1.0 // (mm) If a measurement differs too much from nominal width ignore it + #define MAX_MEASUREMENT_DELAY 20 // (bytes) Buffer size for stored measurements (1 byte per cm). Must be larger than MEASUREMENT_DELAY_CM. + + #define DEFAULT_MEASURED_FILAMENT_DIA DEFAULT_NOMINAL_FILAMENT_DIA // Set measured to nominal initially + + // Display filament width on the LCD status line. Status messages will expire after 5 seconds. + //#define FILAMENT_LCD_DISPLAY +#endif + +/** + * CNC Coordinate Systems + * + * Enables G53 and G54-G59.3 commands to select coordinate systems + * and G92.1 to reset the workspace to native machine space. + */ +//#define CNC_COORDINATE_SYSTEMS + +/** + * Auto-report temperatures with M155 S + */ +#define AUTO_REPORT_TEMPERATURES + +/** + * Include capabilities in M115 output + */ +#define EXTENDED_CAPABILITIES_REPORT + +/** + * Expected Printer Check + * Add the M16 G-code to compare a string to the MACHINE_NAME. + * M16 with a non-matching string causes the printer to halt. + */ +//#define EXPECTED_PRINTER_CHECK + +/** + * Disable all Volumetric extrusion options + */ +//#define NO_VOLUMETRICS + +#if DISABLED(NO_VOLUMETRICS) + /** + * Volumetric extrusion default state + * Activate to make volumetric extrusion the default method, + * with DEFAULT_NOMINAL_FILAMENT_DIA as the default diameter. + * + * M200 D0 to disable, M200 Dn to set a new diameter. + */ + //#define VOLUMETRIC_DEFAULT_ON +#endif + +/** + * Enable this option for a leaner build of Marlin that removes all + * workspace offsets, simplifying coordinate transformations, leveling, etc. + * + * - M206 and M428 are disabled. + * - G92 will revert to its behavior from Marlin 1.0. + */ +//#define NO_WORKSPACE_OFFSETS + +/** + * Set the number of proportional font spaces required to fill up a typical character space. + * This can help to better align the output of commands like `G29 O` Mesh Output. + * + * For clients that use a fixed-width font (like OctoPrint), leave this set to 1.0. + * Otherwise, adjust according to your client and font. + */ +#define PROPORTIONAL_FONT_RATIO 1.0 + +/** + * Spend 28 bytes of SRAM to optimize the GCode parser + */ +#define FASTER_GCODE_PARSER + +/** + * CNC G-code options + * Support CNC-style G-code dialects used by laser cutters, drawing machine cams, etc. + * Note that G0 feedrates should be used with care for 3D printing (if used at all). + * High feedrates may cause ringing and harm print quality. + */ +//#define PAREN_COMMENTS // Support for parentheses-delimited comments +//#define GCODE_MOTION_MODES // Remember the motion mode (G0 G1 G2 G3 G5 G38.X) and apply for X Y Z E F, etc. + +// Enable and set a (default) feedrate for all G0 moves +//#define G0_FEEDRATE 3000 // (mm/m) +#ifdef G0_FEEDRATE + //#define VARIABLE_G0_FEEDRATE // The G0 feedrate is set by F in G0 motion mode +#endif + +/** + * Startup commands + * + * Execute certain G-code commands immediately after power-on. + */ +//#define STARTUP_COMMANDS "M17 Z" + +/** + * G-code Macros + * + * Add G-codes M810-M819 to define and run G-code macros. + * Macros are not saved to EEPROM. + */ +//#define GCODE_MACROS +#if ENABLED(GCODE_MACROS) + #define GCODE_MACROS_SLOTS 5 // Up to 10 may be used + #define GCODE_MACROS_SLOT_SIZE 50 // Maximum length of a single macro +#endif + +/** + * User-defined menu items that execute custom GCode + */ +//#define CUSTOM_USER_MENUS +#if ENABLED(CUSTOM_USER_MENUS) + //#define CUSTOM_USER_MENU_TITLE "Custom Commands" + #define USER_SCRIPT_DONE "M117 User Script Done" + #define USER_SCRIPT_AUDIBLE_FEEDBACK + //#define USER_SCRIPT_RETURN // Return to status screen after a script + + #define USER_DESC_1 "Home & UBL Info" + #define USER_GCODE_1 "G28\nG29 W" + + #define USER_DESC_2 "Preheat for " PREHEAT_1_LABEL + #define USER_GCODE_2 "M140 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND) + + #define USER_DESC_3 "Preheat for " PREHEAT_2_LABEL + #define USER_GCODE_3 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND) + + #define USER_DESC_4 "Heat Bed/Home/Level" + #define USER_GCODE_4 "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nG28\nG29" + + //#define USER_DESC_5 "Home & Info" + //#define USER_GCODE_5 "G28\nM503" +#endif + +/** + * Host Action Commands + * + * Define host streamer action commands in compliance with the standard. + * + * See https://reprap.org/wiki/G-code#Action_commands + * Common commands ........ poweroff, pause, paused, resume, resumed, cancel + * G29_RETRY_AND_RECOVER .. probe_rewipe, probe_failed + * + * Some features add reason codes to extend these commands. + * + * Host Prompt Support enables Marlin to use the host for user prompts so + * filament runout and other processes can be managed from the host side. + */ +//#define HOST_ACTION_COMMANDS +#if ENABLED(HOST_ACTION_COMMANDS) + //#define HOST_PROMPT_SUPPORT +#endif + +/** + * I2C position encoders for closed loop control. + * Developed by Chris Barr at Aus3D. + * + * Wiki: http://wiki.aus3d.com.au/Magnetic_Encoder + * Github: https://github.com/Aus3D/MagneticEncoder + * + * Supplier: http://aus3d.com.au/magnetic-encoder-module + * Alternative Supplier: http://reliabuild3d.com/ + * + * Reliabuild encoders have been modified to improve reliability. + */ + +//#define I2C_POSITION_ENCODERS +#if ENABLED(I2C_POSITION_ENCODERS) + + #define I2CPE_ENCODER_CNT 1 // The number of encoders installed; max of 5 + // encoders supported currently. + + #define I2CPE_ENC_1_ADDR I2CPE_PRESET_ADDR_X // I2C address of the encoder. 30-200. + #define I2CPE_ENC_1_AXIS X_AXIS // Axis the encoder module is installed on. _AXIS. + #define I2CPE_ENC_1_TYPE I2CPE_ENC_TYPE_LINEAR // Type of encoder: I2CPE_ENC_TYPE_LINEAR -or- + // I2CPE_ENC_TYPE_ROTARY. + #define I2CPE_ENC_1_TICKS_UNIT 2048 // 1024 for magnetic strips with 2mm poles; 2048 for + // 1mm poles. For linear encoders this is ticks / mm, + // for rotary encoders this is ticks / revolution. + //#define I2CPE_ENC_1_TICKS_REV (16 * 200) // Only needed for rotary encoders; number of stepper + // steps per full revolution (motor steps/rev * microstepping) + //#define I2CPE_ENC_1_INVERT // Invert the direction of axis travel. + #define I2CPE_ENC_1_EC_METHOD I2CPE_ECM_MICROSTEP // Type of error error correction. + #define I2CPE_ENC_1_EC_THRESH 0.10 // Threshold size for error (in mm) above which the + // printer will attempt to correct the error; errors + // smaller than this are ignored to minimize effects of + // measurement noise / latency (filter). + + #define I2CPE_ENC_2_ADDR I2CPE_PRESET_ADDR_Y // Same as above, but for encoder 2. + #define I2CPE_ENC_2_AXIS Y_AXIS + #define I2CPE_ENC_2_TYPE I2CPE_ENC_TYPE_LINEAR + #define I2CPE_ENC_2_TICKS_UNIT 2048 + //#define I2CPE_ENC_2_TICKS_REV (16 * 200) + //#define I2CPE_ENC_2_INVERT + #define I2CPE_ENC_2_EC_METHOD I2CPE_ECM_MICROSTEP + #define I2CPE_ENC_2_EC_THRESH 0.10 + + #define I2CPE_ENC_3_ADDR I2CPE_PRESET_ADDR_Z // Encoder 3. Add additional configuration options + #define I2CPE_ENC_3_AXIS Z_AXIS // as above, or use defaults below. + + #define I2CPE_ENC_4_ADDR I2CPE_PRESET_ADDR_E // Encoder 4. + #define I2CPE_ENC_4_AXIS E_AXIS + + #define I2CPE_ENC_5_ADDR 34 // Encoder 5. + #define I2CPE_ENC_5_AXIS E_AXIS + + // Default settings for encoders which are enabled, but without settings configured above. + #define I2CPE_DEF_TYPE I2CPE_ENC_TYPE_LINEAR + #define I2CPE_DEF_ENC_TICKS_UNIT 2048 + #define I2CPE_DEF_TICKS_REV (16 * 200) + #define I2CPE_DEF_EC_METHOD I2CPE_ECM_NONE + #define I2CPE_DEF_EC_THRESH 0.1 + + //#define I2CPE_ERR_THRESH_ABORT 100.0 // Threshold size for error (in mm) error on any given + // axis after which the printer will abort. Comment out to + // disable abort behavior. + + #define I2CPE_TIME_TRUSTED 10000 // After an encoder fault, there must be no further fault + // for this amount of time (in ms) before the encoder + // is trusted again. + + /** + * Position is checked every time a new command is executed from the buffer but during long moves, + * this setting determines the minimum update time between checks. A value of 100 works well with + * error rolling average when attempting to correct only for skips and not for vibration. + */ + #define I2CPE_MIN_UPD_TIME_MS 4 // (ms) Minimum time between encoder checks. + + // Use a rolling average to identify persistant errors that indicate skips, as opposed to vibration and noise. + #define I2CPE_ERR_ROLLING_AVERAGE + +#endif // I2C_POSITION_ENCODERS + +/** + * Analog Joystick(s) + */ +//#define JOYSTICK +#if ENABLED(JOYSTICK) + #define JOY_X_PIN 5 // RAMPS: Suggested pin A5 on AUX2 + #define JOY_Y_PIN 10 // RAMPS: Suggested pin A10 on AUX2 + #define JOY_Z_PIN 12 // RAMPS: Suggested pin A12 on AUX2 + #define JOY_EN_PIN 44 // RAMPS: Suggested pin D44 on AUX2 + + // Use M119 to find reasonable values after connecting your hardware: + #define JOY_X_LIMITS { 5600, 8190-100, 8190+100, 10800 } // min, deadzone start, deadzone end, max + #define JOY_Y_LIMITS { 5600, 8250-100, 8250+100, 11000 } + #define JOY_Z_LIMITS { 4800, 8080-100, 8080+100, 11550 } +#endif + +/** + * MAX7219 Debug Matrix + * + * Add support for a low-cost 8x8 LED Matrix based on the Max7219 chip as a realtime status display. + * Requires 3 signal wires. Some useful debug options are included to demonstrate its usage. + */ +//#define MAX7219_DEBUG +#if ENABLED(MAX7219_DEBUG) + #define MAX7219_CLK_PIN 64 + #define MAX7219_DIN_PIN 57 + #define MAX7219_LOAD_PIN 44 + + //#define MAX7219_GCODE // Add the M7219 G-code to control the LED matrix + #define MAX7219_INIT_TEST 2 // Do a test pattern at initialization (Set to 2 for spiral) + #define MAX7219_NUMBER_UNITS 1 // Number of Max7219 units in chain. + #define MAX7219_ROTATE 0 // Rotate the display clockwise (in multiples of +/- 90°) + // connector at: right=0 bottom=-90 top=90 left=180 + //#define MAX7219_REVERSE_ORDER // The individual LED matrix units may be in reversed order + //#define MAX7219_SIDE_BY_SIDE // Big chip+matrix boards can be chained side-by-side + + /** + * Sample debug features + * If you add more debug displays, be careful to avoid conflicts! + */ + #define MAX7219_DEBUG_PRINTER_ALIVE // Blink corner LED of 8x8 matrix to show that the firmware is functioning + #define MAX7219_DEBUG_PLANNER_HEAD 3 // Show the planner queue head position on this and the next LED matrix row + #define MAX7219_DEBUG_PLANNER_TAIL 5 // Show the planner queue tail position on this and the next LED matrix row + + #define MAX7219_DEBUG_PLANNER_QUEUE 0 // Show the current planner queue depth on this and the next LED matrix row + // If you experience stuttering, reboots, etc. this option can reveal how + // tweaks made to the configuration are affecting the printer in real-time. +#endif + +/** + * NanoDLP Sync support + * + * Add support for Synchronized Z moves when using with NanoDLP. G0/G1 axis moves will output "Z_move_comp" + * string to enable synchronization with DLP projector exposure. This change will allow to use + * [[WaitForDoneMessage]] instead of populating your gcode with M400 commands + */ +//#define NANODLP_Z_SYNC +#if ENABLED(NANODLP_Z_SYNC) + //#define NANODLP_ALL_AXIS // Enables "Z_move_comp" output on any axis move. + // Default behavior is limited to Z axis only. +#endif + +/** + * WiFi Support (Espressif ESP32 WiFi) + */ +//#define WIFISUPPORT +#if ENABLED(WIFISUPPORT) + #define WIFI_SSID "Wifi SSID" + #define WIFI_PWD "Wifi Password" + //#define WEBSUPPORT // Start a webserver with auto-discovery + //#define OTASUPPORT // Support over-the-air firmware updates +#endif + +/** + * Prusa Multi-Material Unit v2 + * Enable in Configuration.h + */ +#if ENABLED(PRUSA_MMU2) + + // Serial port used for communication with MMU2. + // For AVR enable the UART port used for the MMU. (e.g., internalSerial) + // For 32-bit boards check your HAL for available serial ports. (e.g., Serial2) + #define INTERNAL_SERIAL_PORT 2 + #define MMU2_SERIAL internalSerial + + // Use hardware reset for MMU if a pin is defined for it + //#define MMU2_RST_PIN 23 + + // Enable if the MMU2 has 12V stepper motors (MMU2 Firmware 1.0.2 and up) + //#define MMU2_MODE_12V + + // G-code to execute when MMU2 F.I.N.D.A. probe detects filament runout + #define MMU2_FILAMENT_RUNOUT_SCRIPT "M600" + + // Add an LCD menu for MMU2 + //#define MMU2_MENUS + #if ENABLED(MMU2_MENUS) + // Settings for filament load / unload from the LCD menu. + // This is for Prusa MK3-style extruders. Customize for your hardware. + #define MMU2_FILAMENTCHANGE_EJECT_FEED 80.0 + #define MMU2_LOAD_TO_NOZZLE_SEQUENCE \ + { 7.2, 562 }, \ + { 14.4, 871 }, \ + { 36.0, 1393 }, \ + { 14.4, 871 }, \ + { 50.0, 198 } + + #define MMU2_RAMMING_SEQUENCE \ + { 1.0, 1000 }, \ + { 1.0, 1500 }, \ + { 2.0, 2000 }, \ + { 1.5, 3000 }, \ + { 2.5, 4000 }, \ + { -15.0, 5000 }, \ + { -14.0, 1200 }, \ + { -6.0, 600 }, \ + { 10.0, 700 }, \ + { -10.0, 400 }, \ + { -50.0, 2000 } + + #endif + + //#define MMU2_DEBUG // Write debug info to serial output + +#endif // PRUSA_MMU2 + +/** + * Advanced Print Counter settings + */ +#if ENABLED(PRINTCOUNTER) + #define SERVICE_WARNING_BUZZES 3 + // Activate up to 3 service interval watchdogs + //#define SERVICE_NAME_1 "Service S" + //#define SERVICE_INTERVAL_1 100 // print hours + //#define SERVICE_NAME_2 "Service L" + //#define SERVICE_INTERVAL_2 200 // print hours + //#define SERVICE_NAME_3 "Service 3" + //#define SERVICE_INTERVAL_3 1 // print hours +#endif + +// @section develop + +/** + * M43 - display pin status, watch pins for changes, watch endstops & toggle LED, Z servo probe test, toggle pins + */ +//#define PINS_DEBUGGING + +// Enable Marlin dev mode which adds some special commands +//#define MARLIN_DEV_MODE diff --git a/config/examples/Velleman/K8400/Single-head/README.md b/config/examples/Velleman/K8400/Single-head/README.md new file mode 100644 index 000000000000..1ebdd16ef214 --- /dev/null +++ b/config/examples/Velleman/K8400/Single-head/README.md @@ -0,0 +1,15 @@ +# Configuration for Velleman K8400 Vertex +http://www.k8400.eu/ + +Configuration files for the K8400, ported upstream from the official Velleman firmware. +Like its predecessor, (K8200), the K8400 is a 3Drag clone. There are some minor differences, documented in pins_K8400.h. + +Single and dual head configurations provided. Copy the correct Configuration.h and Configuration_adv.h to the /src/config directory. + +**NOTE: This configuration includes the community sourced feed rate fix. Use 100% feed rate in Repetier!** + +For implementation and updated K8400 firmware, see https://github.com/birkett/Velleman-K8400-Firmware + +### Original Sources +Credit to Velleman for the original 1.0.x based code:
+http://www.vertex3dprinter.eu/downloads/files/vertex/firmware/vertex-m1-v1.4-h2.zip From d0ef7b6588f5e3a65d4d13dc77950cbae9cfc865 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 2 Oct 2019 00:00:04 -0500 Subject: [PATCH 119/120] [cron] Bump distribution date --- Marlin/src/inc/Version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index 0c9b11b9b9f3..a164950d4cf5 100644 --- a/Marlin/src/inc/Version.h +++ b/Marlin/src/inc/Version.h @@ -51,7 +51,7 @@ * here we define this default string as the date where the latest release * version was tagged. */ - #define STRING_DISTRIBUTION_DATE "2019-10-01" + #define STRING_DISTRIBUTION_DATE "2019-10-02" /** * Required minimum Configuration.h and Configuration_adv.h file versions. From b82c0978cc38f429377af25d64a57408b802cd99 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 1 Oct 2019 22:03:59 -0500 Subject: [PATCH 120/120] Patch up OPEN command in git scripts --- buildroot/share/git/firstpush | 8 +++++--- buildroot/share/git/mfdoc | 8 +++++--- buildroot/share/git/mfpr | 8 +++++--- buildroot/share/git/mfpub | 16 ++++++++++------ 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/buildroot/share/git/firstpush b/buildroot/share/git/firstpush index 443166088c5c..132795b617d6 100755 --- a/buildroot/share/git/firstpush +++ b/buildroot/share/git/firstpush @@ -16,13 +16,15 @@ BRANCH=${INFO[5]} git push --set-upstream origin $BRANCH -TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }') +which xdg-open >/dev/null && TOOL=xdg-open +which gnome-open >/dev/null && TOOL=gnome-open +which open >/dev/null && TOOL=open URL="https://github.com/$FORK/$REPO/commits/$BRANCH" -if [ -z "$TOOL" ]; then +if [ -z "$OPEN" ]; then echo "Can't find a tool to open the URL:" echo $URL else echo "Viewing commits on $BRANCH..." - "$TOOL" "$URL" + "$OPEN" "$URL" fi diff --git a/buildroot/share/git/mfdoc b/buildroot/share/git/mfdoc index eba599c612c5..f2a2b08204b6 100755 --- a/buildroot/share/git/mfdoc +++ b/buildroot/share/git/mfdoc @@ -16,14 +16,16 @@ BRANCH=${INFO[5]} [[ $ORG == "MarlinFirmware" && $REPO == "MarlinDocumentation" ]] || { echo "Wrong repository." 1>&2; exit 1; } opensite() { - TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }') + which xdg-open >/dev/null && TOOL=xdg-open + which gnome-open >/dev/null && TOOL=gnome-open + which open >/dev/null && TOOL=open URL="http://127.0.0.1:4000/" - if [ -z "$TOOL" ]; then + if [ -z "$OPEN" ]; then echo "Can't find a tool to open the URL:" echo $URL else echo "Opening preview site in the browser..." - "$TOOL" "$URL" + "$OPEN" "$URL" fi } diff --git a/buildroot/share/git/mfpr b/buildroot/share/git/mfpr index 73af049ab1b3..0220c0aa8e16 100755 --- a/buildroot/share/git/mfpr +++ b/buildroot/share/git/mfpr @@ -23,15 +23,17 @@ OLDBRANCH=${INFO[5]} # See if it's been pushed yet if [ -z "$(git branch -vv | grep ^\* | grep \\[origin)" ]; then firstpush; fi -TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }') +which xdg-open >/dev/null && TOOL=xdg-open +which gnome-open >/dev/null && TOOL=gnome-open +which open >/dev/null && TOOL=open URL="https://github.com/$ORG/$REPO/compare/$TARG...$FORK:$BRANCH?expand=1" -if [ -z "$TOOL" ]; then +if [ -z "$OPEN" ]; then echo "Can't find a tool to open the URL:" echo $URL else echo "Opening a New PR Form..." - "$TOOL" "$URL" + "$OPEN" "$URL" fi [[ $BRANCH != $OLDBRANCH ]] && git checkout $OLDBRANCH diff --git a/buildroot/share/git/mfpub b/buildroot/share/git/mfpub index 29eb0543d7e1..f77b9236566d 100755 --- a/buildroot/share/git/mfpub +++ b/buildroot/share/git/mfpub @@ -77,15 +77,17 @@ else git push -f origin fi - TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }') + which xdg-open >/dev/null && TOOL=xdg-open + which gnome-open >/dev/null && TOOL=gnome-open + which open >/dev/null && TOOL=open URL="https://github.com/$ORG/$REPO/compare/$TARG...$FORK:$BRANCH?expand=1" - if [ -z "$TOOL" ]; then + if [ -z "$OPEN" ]; then echo "Can't find a tool to open the URL:" echo $URL else echo "Opening a New PR Form..." - "$TOOL" "$URL" + "$OPEN" "$URL" fi fi @@ -116,14 +118,16 @@ git checkout gh-pages || { echo "Something went wrong!"; exit 1; } rsync -av ${TMPFOLDER}/ ./ opensite() { - TOOL=$(which gnome-open xdg-open open | awk '{ print $1 }') + which xdg-open >/dev/null && TOOL=xdg-open + which gnome-open >/dev/null && TOOL=gnome-open + which open >/dev/null && TOOL=open URL="http://marlinfw.org/" - if [ -z "$TOOL" ]; then + if [ -z "$OPEN" ]; then echo "Can't find a tool to open the URL:" echo $URL else echo "Opening the site in the browser..." - "$TOOL" "$URL" + "$OPEN" "$URL" fi }