From 1129b71df160592289d5ab993ff89e11549ae422 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Wed, 31 Jan 2024 10:20:44 -0500 Subject: [PATCH 01/47] add Cancel ABL, other abl fixes --- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 19 +++-- Marlin/src/gcode/bedlevel/abl/G29.cpp | 5 +- Marlin/src/lcd/e3v2/proui/dwin.cpp | 81 +++++++++++++-------- Marlin/src/lcd/e3v2/proui/dwin.h | 8 +- Marlin/src/lcd/e3v2/proui/menus.cpp | 2 +- Marlin/src/module/motion.cpp | 2 +- 6 files changed, 75 insertions(+), 42 deletions(-) diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index 2e7ea743273f..9a8852651fef 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -44,6 +44,10 @@ #include "../../../lcd/extui/ui_api.h" #endif +#if ENABLED(DWIN_LCD_PROUI) + #include "../../../lcd/e3v2/proui/meshviewer.h" +#endif + #if ENABLED(UBL_HILBERT_CURVE) #include "../hilbert_curve.h" #endif @@ -799,6 +803,7 @@ void unified_bed_leveling::shift_mesh_height() { ExtUI::onMeshUpdate(best.pos, ExtUI::G29_POINT_FINISH); ExtUI::onMeshUpdate(best.pos, measured_z); #endif + TERN_(DWIN_LCD_PROUI, if (!hmiFlag.cancel_lev) meshViewer.drawMeshPoint(best.pos.x, best.pos.y, measured_z); ) } SERIAL_FLUSH(); // Prevent host M105 buffer overrun. @@ -813,7 +818,7 @@ void unified_bed_leveling::shift_mesh_height() { probe.stow(); TERN_(HAS_MARLINUI_MENU, ui.capture()); - probe.move_z_after_probing(); + TERN_(Z_AFTER_PROBING, probe.move_z_after_probing()); restore_ubl_active_state_and_leave(); @@ -1442,10 +1447,10 @@ typedef struct { uint8_t sx, ex, sy, ey; bool yfirst; } smart_fill_info; void unified_bed_leveling::smart_fill_mesh() { static const smart_fill_info - info0 PROGMEM = { 0, GRID_MAX_POINTS_X, 0, (GRID_MAX_POINTS_Y) - 2, false }, // Bottom of the mesh looking up - info1 PROGMEM = { 0, GRID_MAX_POINTS_X, (GRID_MAX_POINTS_Y) - 1, 0, false }, // Top of the mesh looking down - info2 PROGMEM = { 0, (GRID_MAX_POINTS_X) - 2, 0, GRID_MAX_POINTS_Y, true }, // Left side of the mesh looking right - info3 PROGMEM = { (GRID_MAX_POINTS_X) - 1, 0, 0, GRID_MAX_POINTS_Y, true }; // Right side of the mesh looking left + info0 PROGMEM = { 0, GRID_MAX_POINTS_X, 0, (GRID_MAX_POINTS_Y) - 2, false }, // Bottom of the mesh looking up + info1 PROGMEM = { 0, GRID_MAX_POINTS_X, (GRID_MAX_POINTS_Y) - 1, 0, false }, // Top of the mesh looking down + info2 PROGMEM = { 0, (GRID_MAX_POINTS_X) - 2, 0, GRID_MAX_POINTS_Y, true }, // Left side of the mesh looking right + info3 PROGMEM = { (GRID_MAX_POINTS_X) - 1, 0, 0, GRID_MAX_POINTS_Y, true }; // Right side of the mesh looking left static const smart_fill_info * const info[] PROGMEM = { &info0, &info1, &info2, &info3 }; for (uint8_t i = 0; i < COUNT(info); ++i) { @@ -1513,7 +1518,7 @@ void unified_bed_leveling::smart_fill_mesh() { } probe.stow(); - probe.move_z_after_probing(); + TERN_(Z_AFTER_PROBING, probe.move_z_after_probing()); if (abort_flag) { SERIAL_ECHOLNPGM("?Error probing point. Aborting operation."); @@ -1599,7 +1604,7 @@ void unified_bed_leveling::smart_fill_mesh() { } } probe.stow(); - probe.move_z_after_probing(); + TERN_(Z_AFTER_PROBING, probe.move_z_after_probing()); if (abort_flag || finish_incremental_LSF(&lsf_results)) { SERIAL_ECHOLNPGM("Could not complete LSF!"); diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 1ca3826c816f..cca3b1cc7620 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -663,6 +663,8 @@ G29_TYPE GcodeSuite::G29() { int8_t inStart, inStop, inInc; + TERN_(DWIN_LCD_PROUI, if (HMI_flag.cancel_lev) break); + if (zig) { // Zig away from origin inStart = 0; // Left or front inStop = PR_INNER_SIZE; // Right or back @@ -780,6 +782,7 @@ G29_TYPE GcodeSuite::G29() { abl.reenable = false; // Don't re-enable after modifying the mesh idle_no_sleep(); + TERN_(DWIN_LCD_PROUI, if (HMI_flag.cancel_lev) break); } // inner } // outer @@ -985,7 +988,7 @@ G29_TYPE GcodeSuite::G29() { // Restore state after probing if (!faux) restore_feedrate_and_scaling(); - TERN_(HAS_BED_PROBE, probe.move_z_after_probing()); + TERN_(Z_AFTER_PROBING, probe.move_z_after_probing()); #ifdef EVENT_GCODE_AFTER_G29 if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Z Probe End Script: ", EVENT_GCODE_AFTER_G29); diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 888d1f74928e..d40ed42aa231 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -1236,6 +1236,11 @@ void hmiWaitForUser() { if (!wait_for_user) { switch (checkkey) { case ID_PrintDone: select_page.reset(); gotoMainMenu(); break; + case ID_Leveling: + hmiFlag.cancel_lev = 1; + dwinDrawStatusLine("Canceling auto leveling..."); + case ID_NothingToDo: + break; default: hmiReturnScreen(); break; } } @@ -1480,7 +1485,7 @@ void hmiReturnScreen() { void dwinHomingStart() { hmiFlag.home_flag = true; - hmiSaveProcessID(ID_Homing); + if (checkkey != ID_NothingToDo) { hmiSaveProcessID(ID_Homing); } title.showCaption(GET_TEXT_F(MSG_HOMING)); dwinShowPopup(ICON_BLTouch, GET_TEXT_F(MSG_HOMING), GET_TEXT_F(MSG_PLEASE_WAIT)); } @@ -1489,41 +1494,57 @@ void dwinHomingDone() { hmiFlag.home_flag = false; if (last_checkkey == ID_PrintDone) gotoPrintDone(); - else - hmiReturnScreen(); + else if (checkkey != ID_NothingToDo) { hmiReturnScreen(); } } -void dwinLevelingStart() { - #if HAS_BED_PROBE - hmiSaveProcessID(ID_Leveling); - title.showCaption(GET_TEXT_F(MSG_BED_LEVELING)); - dwinShowPopup(ICON_AutoLeveling, GET_TEXT_F(MSG_BED_LEVELING), GET_TEXT_F(MSG_PLEASE_WAIT)); - #if ALL(AUTO_BED_LEVELING_UBL, PREHEAT_BEFORE_LEVELING) - #if HAS_BED_PROBE - if (!DEBUGGING(DRYRUN)) probe.preheat_for_probing(LEVELING_NOZZLE_TEMP, hmiData.bedLevT); - #else - #if HAS_HOTEND - if (!DEBUGGING(DRYRUN) && thermalManager.degTargetHotend(0) < LEVELING_NOZZLE_TEMP) { - thermalManager.setTargetHotend(LEVELING_NOZZLE_TEMP, 0); - thermalManager.wait_for_hotend(0); - } - #endif - #if HAS_HEATED_BED - if (!DEBUGGING(DRYRUN) && thermalManager.degTargetBed() < hmiData.bedLevT) { - thermalManager.setTargetBed(hmiData.bedLevT); - thermalManager.wait_for_bed_heating(); - } +#if HAS_LEVELING + void dwinLevelingStart() { + #if HAS_BED_PROBE + homeZ(); // Home Z for accurate reading + queue.inject(F("G28XY")); // Go to 0,0 to start + hmiSaveProcessID(ID_Leveling); + title.showCaption(GET_TEXT_F(MSG_BED_LEVELING)); + dwinShowPopup(ICON_AutoLeveling, GET_TEXT_F(MSG_BED_LEVELING), GET_TEXT_F(MSG_PLEASE_WAIT)); + hmiFlag.cancel_lev = 0; + meshViewer.drawMeshGrid(GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y); + DWINUI::drawButton(BTN_Cancel, 86, 305, true); + #if ALL(AUTO_BED_LEVELING_UBL, PREHEAT_BEFORE_LEVELING) + #if HAS_BED_PROBE + if (!DEBUGGING(DRYRUN)) probe.preheat_for_probing(LEVELING_NOZZLE_TEMP, hmiData.bedLevT); + #else + #if HAS_HOTEND + if (!DEBUGGING(DRYRUN) && thermalManager.degTargetHotend(0) < LEVELING_NOZZLE_TEMP) { + thermalManager.setTargetHotend(LEVELING_NOZZLE_TEMP, 0); + thermalManager.wait_for_hotend(0); + } + #endif + #if HAS_HEATED_BED + if (!DEBUGGING(DRYRUN) && thermalManager.degTargetBed() < hmiData.bedLevT) { + thermalManager.setTargetBed(hmiData.bedLevT); + thermalManager.wait_for_bed_heating(); + } + #endif #endif #endif + #elif ENABLED(MESH_BED_LEVELING) + drawManualMeshMenu(); #endif - #elif ENABLED(MESH_BED_LEVELING) - drawManualMeshMenu(); - #endif -} + } -void dwinLevelingDone() { - TERN_(HAS_MESH, gotoMeshViewer(true)); -} + void dwinLevelingDone() { + #if HAS_MESH + if (hmiFlag.cancel_lev) { + probe.stow(); + reset_bed_level(); + hmiReturnScreen(); + ui.set_status(F("Mesh was cancelled")); + } + else { + gotoMeshViewer(true); + } + #endif + } +#endif // HAS_LEVELING #if HAS_MESH void dwinMeshUpdate(const int8_t cpos, const int8_t tpos, const_float_t zval) { diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 94b949b5e780..ae62b735ae7c 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -190,6 +190,7 @@ typedef struct { bool pause_flag:1; // printing is paused bool select_flag:1; // Popup button selected bool home_flag:1; // homing in course + bool cancel_lev:1; // cancel abl } hmi_flag_t; extern hmi_flag_t hmiFlag; @@ -217,6 +218,7 @@ void rebootPrinter(); void disableMotors(); void autoLevel(); void autoHome(); +void homeZ(); #if HAS_PREHEAT #define _DOPREHEAT(N) void DoPreheat##N(); REPEAT_1(PREHEAT_COUNT, _DOPREHEAT) @@ -278,8 +280,10 @@ void dwinHomingDone(); #if HAS_MESH void dwinMeshUpdate(const int8_t cpos, const int8_t tpos, const_float_t zval); #endif -void dwinLevelingStart(); -void dwinLevelingDone(); +#if HAS_LEVELING + void dwinLevelingStart(); + void dwinLevelingDone(); +#endif void dwinPrintStarted(); void dwinPrintPause(); void dwinPrintResume(); diff --git a/Marlin/src/lcd/e3v2/proui/menus.cpp b/Marlin/src/lcd/e3v2/proui/menus.cpp index 88fbf6000125..97eed1d0104c 100644 --- a/Marlin/src/lcd/e3v2/proui/menus.cpp +++ b/Marlin/src/lcd/e3v2/proui/menus.cpp @@ -95,7 +95,7 @@ void showCheckboxLine(const bool checked) { } void toggleCheckboxLine(bool &checked) { - checked = !checked; + checked ^= true; showCheckboxLine(checked); } diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp index c6b093644755..2256c23e3de3 100644 --- a/Marlin/src/module/motion.cpp +++ b/Marlin/src/module/motion.cpp @@ -793,7 +793,7 @@ void do_blocking_move_to(const xyze_pos_t &raw, const_feedRate_t fr_mm_s/*=0.0f* ); } void do_z_clearance(const_float_t zclear, const bool with_probe/*=true*/, const bool lower_allowed/*=false*/) { - UNUSED(with_probe); + IF_DISABLED(HAS_BED_PROBE, UNUSED(with_probe)); float zdest = zclear; TERN_(HAS_BED_PROBE, if (with_probe && probe.offset.z < 0) zdest -= probe.offset.z); NOMORE(zdest, Z_MAX_POS); From 2f1929be5eb52f5118332f2a7b745b3027ff40d3 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Thu, 1 Feb 2024 03:02:34 -0500 Subject: [PATCH 02/47] add EXIT_PROBE_MESH --- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index 9a8852651fef..8d63ea7959c5 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -772,7 +772,7 @@ void unified_bed_leveling::shift_mesh_height() { SERIAL_ECHOLNPGM("Probing mesh point ", point_num, "/", GRID_MAX_POINTS, "."); TERN_(HAS_STATUS_MESSAGE, ui.status_printf(0, F(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), point_num, int(GRID_MAX_POINTS))); TERN_(HAS_BACKLIGHT_TIMEOUT, ui.refresh_backlight_timeout()); - TERN_(DWIN_LCD_PROUI, dwinRedrawScreen()); + TERN_(DWIN_LCD_PROUI, if (!hmiFlag.cancel_lev) { dwinRedrawScreen(); } else { break; }) #if HAS_MARLINUI_MENU if (ui.button_pressed()) { @@ -803,12 +803,14 @@ void unified_bed_leveling::shift_mesh_height() { ExtUI::onMeshUpdate(best.pos, ExtUI::G29_POINT_FINISH); ExtUI::onMeshUpdate(best.pos, measured_z); #endif - TERN_(DWIN_LCD_PROUI, if (!hmiFlag.cancel_lev) meshViewer.drawMeshPoint(best.pos.x, best.pos.y, measured_z); ) + TERN_(DWIN_LCD_PROUI, meshViewer.drawMeshPoint(best.pos.x, best.pos.y, measured_z)); } SERIAL_FLUSH(); // Prevent host M105 buffer overrun. } while (best.pos.x >= 0 && --count); + TERN_(DWIN_LCD_PROUI, if (hmiFlag.cancel_lev) { goto EXIT_PROBE_MESH; }) + GRID_LOOP(x, y) if (z_values[x][y] == HUGE_VALF) z_values[x][y] = NAN; // Restore NAN for HUGE_VALF marks TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(best.pos, ExtUI::G29_FINISH)); @@ -828,7 +830,7 @@ void unified_bed_leveling::shift_mesh_height() { ); TERN_(EXTENSIBLE_UI, ExtUI::onLevelingDone()); - TERN_(DWIN_LCD_PROUI, dwinLevelingDone()); + TERN_(DWIN_LCD_PROUI, EXIT_PROBE_MESH: dwinLevelingDone()); } #endif // HAS_BED_PROBE From 87ed27a3c27e08818adfcac41733ae14f3ccdfb6 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Thu, 1 Feb 2024 05:17:28 -0500 Subject: [PATCH 03/47] fixes for dwin --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 11 +++++------ Marlin/src/lcd/e3v2/proui/dwin.h | 10 +++++----- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index d40ed42aa231..c4b6fd8a75bd 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -1500,8 +1500,6 @@ void dwinHomingDone() { #if HAS_LEVELING void dwinLevelingStart() { #if HAS_BED_PROBE - homeZ(); // Home Z for accurate reading - queue.inject(F("G28XY")); // Go to 0,0 to start hmiSaveProcessID(ID_Leveling); title.showCaption(GET_TEXT_F(MSG_BED_LEVELING)); dwinShowPopup(ICON_AutoLeveling, GET_TEXT_F(MSG_BED_LEVELING), GET_TEXT_F(MSG_PLEASE_WAIT)); @@ -2107,10 +2105,6 @@ void gotoInfoMenu() { void disableMotors() { queue.inject(F("M84")); } -void autoLevel() { // Always reacquire the Z "home" position - queue.inject(F(TERN(AUTO_BED_LEVELING_UBL, "G29P1", "G29"))); -} - void autoHome() { queue.inject_P(G28_STR); } #if ENABLED(INDIVIDUAL_AXIS_HOMING_SUBMENU) @@ -2304,6 +2298,11 @@ void setMoveZ() { hmiValue.axis = Z_AXIS; setPFloatOnClick(Z_MIN_POS, Z_MAX_POS, void setHSMode() { toggleCheckboxLine(bltouch.high_speed_mode); } #endif + void autoLevel() { + homeZ(); // Always reacquire the Z "home" position for an accurate reading + queue.inject(F("G28XY")); // Go to 0,0 to start + queue.inject(F(TERN(AUTO_BED_LEVELING_UBL, "G29P1", "G29"))); + } #endif #if ENABLED(EDITABLE_DISPLAY_TIMEOUT) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index ae62b735ae7c..7bed56f78e06 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -214,11 +214,14 @@ uint32_t getHash(char * str); void saveMesh(); #endif #endif +#if HAS_BED_PROBE + void autoLevel(); +#else + void homeZAndDisable(); +#endif void rebootPrinter(); void disableMotors(); -void autoLevel(); void autoHome(); -void homeZ(); #if HAS_PREHEAT #define _DOPREHEAT(N) void DoPreheat##N(); REPEAT_1(PREHEAT_COUNT, _DOPREHEAT) @@ -249,9 +252,6 @@ void doCoolDown(); void ublMeshSave(); void ublMeshLoad(); #endif -#if DISABLED(HAS_BED_PROBE) - void homeZAndDisable(); -#endif // Other void gotoPrintProcess(); From d0e400e9aa372dbd9c0efd4d5b25bc2f984a4fb6 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Fri, 2 Feb 2024 09:01:24 -0500 Subject: [PATCH 04/47] fixes for dwin, add probe_offset to G29 --- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 8 ++-- Marlin/src/lcd/e3v2/proui/dwin.cpp | 50 +++++++++++---------- Marlin/src/lcd/e3v2/proui/dwin.h | 1 + Marlin/src/module/probe.cpp | 2 +- 4 files changed, 33 insertions(+), 28 deletions(-) diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index 8d63ea7959c5..ae9d78263510 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -1191,9 +1191,9 @@ bool unified_bed_leveling::G29_parse_parameters() { } param.XY_seen.x = parser.seenval('X'); - float sx = param.XY_seen.x ? parser.value_float() : current_position.x; + float sx = param.XY_seen.x ? parser.value_float() : current_position.x - TERN0(HAS_BED_PROBE, probe.offset.x); param.XY_seen.y = parser.seenval('Y'); - float sy = param.XY_seen.y ? parser.value_float() : current_position.y; + float sy = param.XY_seen.y ? parser.value_float() : current_position.y - TERN0(HAS_BED_PROBE, probe.offset.y); if (param.XY_seen.x != param.XY_seen.y) { SERIAL_ECHOLNPGM("Both X & Y locations must be specified.\n"); @@ -1202,8 +1202,8 @@ bool unified_bed_leveling::G29_parse_parameters() { // If X or Y are not valid, use center of the bed values // (for UBL_HILBERT_CURVE default to lower-left corner instead) - if (!COORDINATE_OKAY(sx, X_MIN_BED, X_MAX_BED)) sx = TERN(UBL_HILBERT_CURVE, 0, X_CENTER); - if (!COORDINATE_OKAY(sy, Y_MIN_BED, Y_MAX_BED)) sy = TERN(UBL_HILBERT_CURVE, 0, Y_CENTER); + if (!COORDINATE_OKAY(sx, X_MIN_BED, X_MAX_BED)) sx = TERN(UBL_HILBERT_CURVE, 0, X_CENTER - TERN0(HAS_BED_PROBE, probe.offset.x)); + if (!COORDINATE_OKAY(sy, Y_MIN_BED, Y_MAX_BED)) sy = TERN(UBL_HILBERT_CURVE, 0, Y_CENTER - TERN0(HAS_BED_PROBE, probe.offset.y)); if (err_flag) return UBL_ERR; diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index c4b6fd8a75bd..76fe5a96d44a 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -1500,33 +1500,39 @@ void dwinHomingDone() { #if HAS_LEVELING void dwinLevelingStart() { #if HAS_BED_PROBE + homeZ(); // Always reacquire the Z "home" position for an accurate reading + queue.inject(F("G28XY")); // Go to 0,0 to start + hmiFlag.cancel_lev = 0; hmiSaveProcessID(ID_Leveling); title.showCaption(GET_TEXT_F(MSG_BED_LEVELING)); - dwinShowPopup(ICON_AutoLeveling, GET_TEXT_F(MSG_BED_LEVELING), GET_TEXT_F(MSG_PLEASE_WAIT)); - hmiFlag.cancel_lev = 0; - meshViewer.drawMeshGrid(GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y); - DWINUI::drawButton(BTN_Cancel, 86, 305, true); - #if ALL(AUTO_BED_LEVELING_UBL, PREHEAT_BEFORE_LEVELING) - #if HAS_BED_PROBE - if (!DEBUGGING(DRYRUN)) probe.preheat_for_probing(LEVELING_NOZZLE_TEMP, hmiData.bedLevT); - #else - #if HAS_HOTEND - if (!DEBUGGING(DRYRUN) && thermalManager.degTargetHotend(0) < LEVELING_NOZZLE_TEMP) { - thermalManager.setTargetHotend(LEVELING_NOZZLE_TEMP, 0); - thermalManager.wait_for_hotend(0); - } - #endif - #if HAS_HEATED_BED - if (!DEBUGGING(DRYRUN) && thermalManager.degTargetBed() < hmiData.bedLevT) { - thermalManager.setTargetBed(hmiData.bedLevT); - thermalManager.wait_for_bed_heating(); - } - #endif - #endif + #if ENABLED(AUTO_BED_LEVELING_UBL) + meshViewer.drawMeshGrid(GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y); + DWINUI::drawButton(BTN_Cancel, 86, 305, true); + #else + dwinShowPopup(ICON_AutoLeveling, GET_TEXT_F(MSG_BED_LEVELING), GET_TEXT_F(MSG_PLEASE_WAIT)); #endif #elif ENABLED(MESH_BED_LEVELING) drawManualMeshMenu(); #endif + + #if ENABLED(PREHEAT_BEFORE_LEVELING) + #if HAS_BED_PROBE + if (!DEBUGGING(DRYRUN)) probe.preheat_for_probing(LEVELING_NOZZLE_TEMP, hmiData.bedLevT); + #else + #if HAS_HOTEND + if (!DEBUGGING(DRYRUN) && thermalManager.degTargetHotend(0) < LEVELING_NOZZLE_TEMP) { + thermalManager.setTargetHotend(LEVELING_NOZZLE_TEMP, 0); + thermalManager.wait_for_hotend(0); + } + #endif + #if HAS_HEATED_BED + if (!DEBUGGING(DRYRUN) && thermalManager.degTargetBed() < hmiData.bedLevT) { + thermalManager.setTargetBed(hmiData.bedLevT); + thermalManager.wait_for_bed_heating(); + } + #endif + #endif + #endif } void dwinLevelingDone() { @@ -2299,8 +2305,6 @@ void setMoveZ() { hmiValue.axis = Z_AXIS; setPFloatOnClick(Z_MIN_POS, Z_MAX_POS, #endif void autoLevel() { - homeZ(); // Always reacquire the Z "home" position for an accurate reading - queue.inject(F("G28XY")); // Go to 0,0 to start queue.inject(F(TERN(AUTO_BED_LEVELING_UBL, "G29P1", "G29"))); } #endif diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 7bed56f78e06..b1ac912c5bb1 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -222,6 +222,7 @@ uint32_t getHash(char * str); void rebootPrinter(); void disableMotors(); void autoHome(); +void homeZ(); #if HAS_PREHEAT #define _DOPREHEAT(N) void DoPreheat##N(); REPEAT_1(PREHEAT_COUNT, _DOPREHEAT) diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 2fec098b8aaa..d4d7cc81af6e 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -354,7 +354,7 @@ FORCE_INLINE void probe_specific_action(const bool deploy) { #if ENABLED(PAUSE_BEFORE_DEPLOY_STOW) // Start preheating before waiting for user confirmation that the probe is ready. - TERN_(PREHEAT_BEFORE_PROBING, if (deploy) probe.preheat_for_probing(0, PROBING_BED_TEMP, true)); + TERN_(PREHEAT_BEFORE_PROBING, if (deploy) probe.preheat_for_probing(PROBING_NOZZLE_TEMP, PROBING_BED_TEMP, true)); FSTR_P const ds_fstr = deploy ? GET_TEXT_F(MSG_MANUAL_DEPLOY) : GET_TEXT_F(MSG_MANUAL_STOW); ui.return_to_status(); // To display the new status message From 2266b79dcf53a4fc088f72c305a9ba4968526d72 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Fri, 2 Feb 2024 23:03:47 -0500 Subject: [PATCH 05/47] remove homeZ --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 2 -- Marlin/src/lcd/e3v2/proui/dwin.h | 1 - 2 files changed, 3 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 76fe5a96d44a..47ce97263d1d 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -1500,8 +1500,6 @@ void dwinHomingDone() { #if HAS_LEVELING void dwinLevelingStart() { #if HAS_BED_PROBE - homeZ(); // Always reacquire the Z "home" position for an accurate reading - queue.inject(F("G28XY")); // Go to 0,0 to start hmiFlag.cancel_lev = 0; hmiSaveProcessID(ID_Leveling); title.showCaption(GET_TEXT_F(MSG_BED_LEVELING)); diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index b1ac912c5bb1..7bed56f78e06 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -222,7 +222,6 @@ uint32_t getHash(char * str); void rebootPrinter(); void disableMotors(); void autoHome(); -void homeZ(); #if HAS_PREHEAT #define _DOPREHEAT(N) void DoPreheat##N(); REPEAT_1(PREHEAT_COUNT, _DOPREHEAT) From bb89c670a7a2c0b1b8ad2b85cbf40c47e1b36b4b Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Sat, 3 Feb 2024 10:26:28 -0500 Subject: [PATCH 06/47] add multipleProbing --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 11 +++- Marlin/src/lcd/e3v2/proui/dwin.h | 3 ++ Marlin/src/lcd/language/language_en.h | 1 + Marlin/src/module/probe.cpp | 77 +++++++++++++++++++++++++++ 4 files changed, 91 insertions(+), 1 deletion(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 47ce97263d1d..b6a1ca4d397e 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -1239,6 +1239,7 @@ void hmiWaitForUser() { case ID_Leveling: hmiFlag.cancel_lev = 1; dwinDrawStatusLine("Canceling auto leveling..."); + dwinUpdateLCD(); case ID_NothingToDo: break; default: hmiReturnScreen(); break; @@ -1505,7 +1506,7 @@ void dwinHomingDone() { title.showCaption(GET_TEXT_F(MSG_BED_LEVELING)); #if ENABLED(AUTO_BED_LEVELING_UBL) meshViewer.drawMeshGrid(GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y); - DWINUI::drawButton(BTN_Cancel, 86, 305, true); + DWINUI::drawButton(BTN_Cancel, 86, 305); #else dwinShowPopup(ICON_AutoLeveling, GET_TEXT_F(MSG_BED_LEVELING), GET_TEXT_F(MSG_PLEASE_WAIT)); #endif @@ -1539,6 +1540,7 @@ void dwinHomingDone() { probe.stow(); reset_bed_level(); hmiReturnScreen(); + dwinUpdateLCD(); ui.set_status(F("Mesh was cancelled")); } else { @@ -1860,6 +1862,7 @@ void dwinSetDataDefaults() { #endif TERN_(ADAPTIVE_STEP_SMOOTHING, hmiData.adaptiveStepSmoothing = true); TERN_(HAS_GCODE_PREVIEW, hmiData.enablePreview = true); + IF_DISABLED(BD_SENSOR, hmiData.multipleProbing = MULTIPLE_PROBING); } void dwinCopySettingsTo(char * const buff) { @@ -2302,6 +2305,11 @@ void setMoveZ() { hmiValue.axis = Z_AXIS; setPFloatOnClick(Z_MIN_POS, Z_MAX_POS, void setHSMode() { toggleCheckboxLine(bltouch.high_speed_mode); } #endif + #if DISABLED(BD_SENSOR) + void applyProbeMultiple() { hmiData.multipleProbing = menuData.value; } + void setProbeMultiple() { SetIntOnClick(0, 4, hmiData.multipleProbing, applyProbeMultiple); } + #endif + void autoLevel() { queue.inject(F(TERN(AUTO_BED_LEVELING_UBL, "G29P1", "G29"))); } @@ -3290,6 +3298,7 @@ void drawMoveMenu() { #if HAS_Z_AXIS EDIT_ITEM(ICON_ProbeOffsetZ, MSG_ZPROBE_ZOFFSET, onDrawPFloat2Menu, setProbeOffsetZ, &probe.offset.z); #endif + IF_DISABLED(BD_SENSOR, EDIT_ITEM(ICON_Cancel, MSG_ZPROBE_MULTIPLE, onDrawPInt8Menu, setProbeMultiple, &hmiData.multipleProbing)); #if ENABLED(BLTOUCH) MENU_ITEM(ICON_ProbeStow, MSG_MANUAL_STOW, onDrawMenuItem, probeStow); MENU_ITEM(ICON_ProbeDeploy, MSG_MANUAL_DEPLOY, onDrawMenuItem, probeDeploy); diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 7bed56f78e06..54d9084db449 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -154,6 +154,9 @@ typedef struct { #if HAS_GCODE_PREVIEW bool enablePreview = true; #endif + #if DISABLED(BD_SENSOR) + uint8_t multipleProbing = MULTIPLE_PROBING; + #endif } hmi_data_t; extern hmi_data_t hmiData; diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 553d9013a243..32cd355a05ed 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -597,6 +597,7 @@ namespace LanguageNarrow_en { LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Probe Z Offset"); LSTR MSG_ZPROBE_MARGIN = _UxGT("Probe Margin"); LSTR MSG_Z_FEED_RATE = _UxGT("Z Feed Rate"); + LSTR MSG_ZPROBE_MULTIPLE = _UxGT("Multiple Probing"); LSTR MSG_ENABLE_HS_MODE = _UxGT("Enable HS mode"); LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Move Nozzle to Bed"); LSTR MSG_BABYSTEP_X = _UxGT("Babystep X"); diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index d4d7cc81af6e..a996e76d6147 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -745,6 +745,8 @@ bool Probe::probe_down_to_z(const_float_t z, const_feedRate_t fr_mm_s) { * * @return The Z position of the bed at the current XY or NAN on error. */ +#if DISABLED(DWIN_LCD_PROUI) + float Probe::run_z_probe(const bool sanity_check/*=true*/, const_float_t z_min_point/*=Z_PROBE_LOW_POINT*/, const_float_t z_clearance/*=Z_TWEEN_SAFE_CLEARANCE*/) { DEBUG_SECTION(log_probe, "Probe::run_z_probe", DEBUGGING(LEVELING)); @@ -899,6 +901,81 @@ float Probe::run_z_probe(const bool sanity_check/*=true*/, const_float_t z_min_p return DIFF_TERN(HAS_HOTEND_OFFSET, measured_z, hotend_offset[active_extruder].z); } +#else + +float Probe::run_z_probe(const bool sanity_check/*=true*/, const_float_t z_min_point/*=Z_PROBE_LOW_POINT*/, const_float_t z_clearance/*=Z_TWEEN_SAFE_CLEARANCE*/) { + DEBUG_SECTION(log_probe, "Probe::run_z_probe", DEBUGGING(LEVELING)); + + const float zoffs = SUM_TERN(HAS_HOTEND_OFFSET, -offset.z, hotend_offset[active_extruder].z); + + auto try_to_probe = [&](PGM_P const plbl, const_float_t z_probe_low_point, const feedRate_t fr_mm_s, const bool scheck) -> bool { + constexpr float error_tolerance = Z_PROBE_ERROR_TOLERANCE; + if (DEBUGGING(LEVELING)) { + DEBUG_ECHOPGM_P(plbl); + DEBUG_ECHOLNPGM("> try_to_probe(..., ", z_probe_low_point, ", ", fr_mm_s, ", ...)"); + } + + // Tare the probe, if supported + if (TERN0(PROBE_TARE, tare())) return true; + + // Do a first probe at the fast speed + const bool probe_fail = probe_down_to_z(z_probe_low_point, fr_mm_s), // No probe trigger? + early_fail = (scheck && current_position.z > zoffs + error_tolerance); // Probe triggered too high? + #if ENABLED(DEBUG_LEVELING_FEATURE) + if (DEBUGGING(LEVELING) && (probe_fail || early_fail)) { + DEBUG_ECHOPGM(" Probe fail! - "); + if (probe_fail) DEBUG_ECHOLNPGM("No trigger."); + if (early_fail) DEBUG_ECHOLNPGM("Triggered early (above ", zoffs + error_tolerance, "mm)"); + } + #else + UNUSED(plbl); + #endif + return probe_fail || early_fail; + }; + + // Stop the probe before it goes too low to prevent damage. + // For known Z probe below the expected trigger point, otherwise -10mm lower. + const float z_probe_low_point = zoffs + z_min_point - float((!axis_is_trusted(Z_AXIS)) * 10); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Probe Low Point: ", z_probe_low_point); + + // Double-probing does a fast probe followed by a slow probe + + // Attempt to tare the probe + if (TERN0(PROBE_TARE, tare())) return NAN; + + // Do a first probe at the fast speed + if (try_to_probe(PSTR("FAST"), z_probe_low_point, z_probe_fast_mm_s, sanity_check)) return NAN; + + const float z1 = DIFF_TERN(HAS_DELTA_SENSORLESS_PROBING, current_position.z, largest_sensorless_adj); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("1st Probe Z:", z1); + + // Raise to give the probe clearance + do_z_clearance(z1 + (Z_CLEARANCE_MULTI_PROBE), false); + + float probes_z_sum = 0; + for (uint8_t p = 0; p < hmiData.multipleProbing; p++) { + // If the probe won't tare, return + if (TERN0(PROBE_TARE, tare())) return true; + + // Probe downward slowly to find the bed + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Slow Probe:"); + if (try_to_probe(PSTR("SLOW"), z_probe_low_point, MMM_TO_MMS(Z_PROBE_FEEDRATE_SLOW), sanity_check)) return NAN; + + TERN_(MEASURE_BACKLASH_WHEN_PROBING, backlash.measure_with_probe()); + + const float z = DIFF_TERN(HAS_DELTA_SENSORLESS_PROBING, current_position.z, largest_sensorless_adj); + probes_z_sum += z; + // Small Z raise after all but the last probe + if (p < hmiData.multipleProbing - 1) do_z_clearance(z + (Z_CLEARANCE_MULTI_PROBE), false); + } + + const float measured_z = (z1 + probes_z_sum) * RECIPROCAL(hmiData.multipleProbing); + + return DIFF_TERN(HAS_HOTEND_OFFSET, measured_z, hotend_offset[active_extruder].z); +} + +#endif + #if DO_TOOLCHANGE_FOR_PROBING #include "tool_change.h" From 059b9b442534113bcd45960cda503bc946c7a65b Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Sat, 3 Feb 2024 10:30:07 -0500 Subject: [PATCH 07/47] revert menus.cpp ^= true, save for other PR --- Marlin/src/lcd/e3v2/proui/menus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/lcd/e3v2/proui/menus.cpp b/Marlin/src/lcd/e3v2/proui/menus.cpp index 97eed1d0104c..88fbf6000125 100644 --- a/Marlin/src/lcd/e3v2/proui/menus.cpp +++ b/Marlin/src/lcd/e3v2/proui/menus.cpp @@ -95,7 +95,7 @@ void showCheckboxLine(const bool checked) { } void toggleCheckboxLine(bool &checked) { - checked ^= true; + checked = !checked; showCheckboxLine(checked); } From 6242d1d9f0f209715b03cf4cef8de6b7f788995c Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Sat, 3 Feb 2024 10:52:12 -0500 Subject: [PATCH 08/47] add zprobeFeed(rate) feature --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 2 +- Marlin/src/lcd/e3v2/proui/dwin.h | 3 +++ Marlin/src/lcd/e3v2/proui/dwin_defines.h | 5 +++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index b6a1ca4d397e..a465bc298486 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -2307,7 +2307,7 @@ void setMoveZ() { hmiValue.axis = Z_AXIS; setPFloatOnClick(Z_MIN_POS, Z_MAX_POS, #if DISABLED(BD_SENSOR) void applyProbeMultiple() { hmiData.multipleProbing = menuData.value; } - void setProbeMultiple() { SetIntOnClick(0, 4, hmiData.multipleProbing, applyProbeMultiple); } + void setProbeMultiple() { setIntOnClick(0, 4, hmiData.multipleProbing, applyProbeMultiple); } #endif void autoLevel() { diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 54d9084db449..b3b9f9f131e0 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -157,6 +157,9 @@ typedef struct { #if DISABLED(BD_SENSOR) uint8_t multipleProbing = MULTIPLE_PROBING; #endif + #if HAS_BED_PROBE + uint16_t zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; + #endif } hmi_data_t; extern hmi_data_t hmiData; diff --git a/Marlin/src/lcd/e3v2/proui/dwin_defines.h b/Marlin/src/lcd/e3v2/proui/dwin_defines.h index 87cb50b8183a..5bb958c29332 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin_defines.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_defines.h @@ -87,6 +87,11 @@ #define DEF_HOTENDPIDT TERN(PREHEAT_1_TEMP_BED, PREHEAT_1_TEMP_HOTEND, 195) #define DEF_BEDPIDT TERN(PREHEAT_1_TEMP_BED, PREHEAT_1_TEMP_HOTEND, 60) #define DEF_PIDCYCLES 5 +#if HAS_BED_PROBE + constexpr uint16_t DEF_Z_PROBE_FEEDRATE_SLOW = Z_PROBE_FEEDRATE_SLOW; + #undef Z_PROBE_FEEDRATE_SLOW + #define Z_PROBE_FEEDRATE_SLOW hmiData.zprobeFeed +#endif /** * ProUI internal feature flags From 0ae89c0aa56b71bb5c8005eb5ce76781b8c3c13d Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Sat, 3 Feb 2024 11:01:28 -0500 Subject: [PATCH 09/47] update menu options --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 8 +++++++- Marlin/src/lcd/e3v2/proui/dwin.h | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index a465bc298486..f30b2bfc16d7 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -1862,7 +1862,10 @@ void dwinSetDataDefaults() { #endif TERN_(ADAPTIVE_STEP_SMOOTHING, hmiData.adaptiveStepSmoothing = true); TERN_(HAS_GCODE_PREVIEW, hmiData.enablePreview = true); - IF_DISABLED(BD_SENSOR, hmiData.multipleProbing = MULTIPLE_PROBING); + #if HAS_BED_PROBE + IF_DISABLED(BD_SENSOR, hmiData.multipleProbing = MULTIPLE_PROBING); + uint16_t zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; + #endif } void dwinCopySettingsTo(char * const buff) { @@ -2310,6 +2313,8 @@ void setMoveZ() { hmiValue.axis = Z_AXIS; setPFloatOnClick(Z_MIN_POS, Z_MAX_POS, void setProbeMultiple() { setIntOnClick(0, 4, hmiData.multipleProbing, applyProbeMultiple); } #endif + void setProbeZSpeed() { setPIntOnClick(60, 1000); } + void autoLevel() { queue.inject(F(TERN(AUTO_BED_LEVELING_UBL, "G29P1", "G29"))); } @@ -3299,6 +3304,7 @@ void drawMoveMenu() { EDIT_ITEM(ICON_ProbeOffsetZ, MSG_ZPROBE_ZOFFSET, onDrawPFloat2Menu, setProbeOffsetZ, &probe.offset.z); #endif IF_DISABLED(BD_SENSOR, EDIT_ITEM(ICON_Cancel, MSG_ZPROBE_MULTIPLE, onDrawPInt8Menu, setProbeMultiple, &hmiData.multipleProbing)); + EDIT_ITEM(ICON_ProbeZSpeed, MSG_Z_FEED_RATE, onDrawPIntMenu, setProbeZSpeed, &hmiData.zprobeFeed); #if ENABLED(BLTOUCH) MENU_ITEM(ICON_ProbeStow, MSG_MANUAL_STOW, onDrawMenuItem, probeStow); MENU_ITEM(ICON_ProbeDeploy, MSG_MANUAL_DEPLOY, onDrawMenuItem, probeDeploy); diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index b3b9f9f131e0..2c8f5841126b 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -154,10 +154,10 @@ typedef struct { #if HAS_GCODE_PREVIEW bool enablePreview = true; #endif - #if DISABLED(BD_SENSOR) - uint8_t multipleProbing = MULTIPLE_PROBING; - #endif #if HAS_BED_PROBE + #if DISABLED(BD_SENSOR) + uint8_t multipleProbing = MULTIPLE_PROBING; + #endif uint16_t zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; #endif } hmi_data_t; From c535a9bceb9fd055d04243adb2fd622be240c162 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Sun, 4 Feb 2024 01:39:25 -0500 Subject: [PATCH 10/47] add variable Mesh_Inset --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 32 +++++++++++++++++++++--- Marlin/src/lcd/e3v2/proui/dwin.h | 5 ++++ Marlin/src/lcd/e3v2/proui/dwin_defines.h | 29 ++++++++++++++++++++- Marlin/src/lcd/e3v2/proui/menus.cpp | 18 ++++++------- Marlin/src/lcd/e3v2/proui/menus.h | 4 +-- 5 files changed, 73 insertions(+), 15 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index f30b2bfc16d7..7cee324c4db7 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -269,6 +269,7 @@ Menu *stepsMenu = nullptr; #if ENABLED(PROUI_MESH_EDIT) Menu *editMeshMenu = nullptr; #endif + Menu *meshInsetMenu = nullptr; #endif #if ENABLED(SHAPING_MENU) Menu *inputShapingMenu = nullptr; @@ -1222,7 +1223,7 @@ void drawMainArea() { case ID_SetPInt: case ID_SetIntNoDraw: case ID_SetFloat: - case ID_SetPFloat: ReDrawMenu(true); break; + case ID_SetPFloat: redrawMenu(true); break; default: break; } } @@ -1864,8 +1865,15 @@ void dwinSetDataDefaults() { TERN_(HAS_GCODE_PREVIEW, hmiData.enablePreview = true); #if HAS_BED_PROBE IF_DISABLED(BD_SENSOR, hmiData.multipleProbing = MULTIPLE_PROBING); - uint16_t zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; + hmiData.zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; #endif + #if HAS_MESH + hmiData.mesh_min_x = DEF_MESH_MIN_X; + hmiData.mesh_max_x = DEF_MESH_MAX_X; + hmiData.mesh_min_y = DEF_MESH_MIN_Y; + hmiData.mesh_max_y = DEF_MESH_MAX_Y; + #endif + } void dwinCopySettingsTo(char * const buff) { @@ -4055,6 +4063,8 @@ void drawMaxAccelMenu() { dwinUpdateLCD(); } + void setMeshInset() { setPFloatOnClick(X_MIN_POS, X_MAX_POS, UNITFDIGITS, reset_bed_level, redrawItem); } + #if ENABLED(PREHEAT_BEFORE_LEVELING) void setBedLevT() { setPIntOnClick(MIN_BEDTEMP, MAX_BEDTEMP); } #endif @@ -4115,7 +4125,7 @@ void drawMaxAccelMenu() { void drawMeshSetMenu() { checkkey = ID_Menu; - if (SET_MENU(meshMenu, MSG_MESH_LEVELING, 14)) { + if (SET_MENU(meshMenu, MSG_MESH_LEVELING, 15)) { BACK_ITEM(drawAdvancedSettingsMenu); #if ENABLED(PREHEAT_BEFORE_LEVELING) EDIT_ITEM(ICON_Temperature, MSG_UBL_SET_TEMP_BED, onDrawPIntMenu, setBedLevT, &hmiData.bedLevT); @@ -4138,6 +4148,7 @@ void drawMaxAccelMenu() { MENU_ITEM(ICON_MeshEdit, MSG_EDIT_MESH, onDrawSubMenu, drawEditMeshMenu); #endif MENU_ITEM(ICON_MeshViewer, MSG_MESH_VIEW, onDrawSubMenu, dwinMeshViewer); + MENU_ITEM(ICON_PrintSize, MSG_MESH_LEVELING, onDrawSubMenu, drawMeshInsetMenu); } updateMenu(meshMenu); } @@ -4158,6 +4169,21 @@ void drawMaxAccelMenu() { } #endif + void drawMeshInsetMenu() { + checkkey = ID_Menu; + if (SET_MENU(meshInsetMenu, MSG_MESH_INSET, 7)) { + BACK_ITEM(drawMeshSetMenu); + EDIT_ITEM(200 /*ICON_Box*/, MSG_MESH_MIN_X, onDrawPFloatMenu, setMeshInset, &hmiData.mesh_min_x); + EDIT_ITEM(ICON_ProbeMargin, MSG_MESH_MAX_X, onDrawPFloatMenu, setMeshInset, &hmiData.mesh_max_x); + EDIT_ITEM(200 /*ICON_Box*/, MSG_MESH_MIN_Y, onDrawPFloatMenu, setMeshInset, &hmiData.mesh_min_y); + EDIT_ITEM(ICON_ProbeMargin, MSG_MESH_MAX_Y, onDrawPFloatMenu, setMeshInset, &hmiData.mesh_max_y); + //MENU_ITEM(254 /*ICON_AxisC*/, MSG_MESH_AMAX, onDrawMenuItem, maxMeshArea); + //MENU_ITEM(ICON_SetHome, MSG_MESH_CENTER, onDrawMenuItem, centerMeshArea); + } + updateMenu(meshInsetMenu); + //LCD_MESSAGE_F("..Center Area sets mesh equidistant by greatest inset from edge."); + } + #endif // HAS_MESH #endif // DWIN_LCD_PROUI diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 2c8f5841126b..90a5d5980b19 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -160,6 +160,10 @@ typedef struct { #endif uint16_t zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; #endif + float mesh_min_x = DEF_MESH_MIN_X; + float mesh_max_x = DEF_MESH_MAX_X; + float mesh_min_y = DEF_MESH_MIN_Y; + float mesh_max_y = DEF_MESH_MAX_Y; } hmi_data_t; extern hmi_data_t hmiData; @@ -373,6 +377,7 @@ void drawMaxAccelMenu(); #if ENABLED(PROUI_MESH_EDIT) void drawEditMeshMenu(); #endif + void drawMeshInsetMenu(); #endif #if HAS_TRINAMIC_CONFIG void drawTrinamicConfigMenu(); diff --git a/Marlin/src/lcd/e3v2/proui/dwin_defines.h b/Marlin/src/lcd/e3v2/proui/dwin_defines.h index 5bb958c29332..f6794ead0a3d 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin_defines.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_defines.h @@ -36,6 +36,33 @@ #define Z_OFFSET_MIN -3.0 // (mm) #define Z_OFFSET_MAX 3.0 // (mm) #endif + #ifndef MESH_INSET + #define MESH_INSET 10 + #endif + #ifndef MESH_MIN_X + #define MESH_MIN_X MESH_INSET + #endif + #ifndef MESH_MIN_Y + #define MESH_MIN_Y MESH_INSET + #endif + #ifndef MESH_MAX_X + #define MESH_MAX_X X_BED_SIZE - (MESH_INSET) + #endif + #ifndef MESH_MAX_Y + #define MESH_MAX_Y Y_BED_SIZE - (MESH_INSET) + #endif + constexpr uint16_t DEF_MESH_MIN_X = MESH_MIN_X; + constexpr uint16_t DEF_MESH_MAX_X = MESH_MAX_X; + constexpr uint16_t DEF_MESH_MIN_Y = MESH_MIN_Y; + constexpr uint16_t DEF_MESH_MAX_Y = MESH_MAX_Y; + #undef MESH_MIN_X + #undef MESH_MIN_Y + #undef MESH_MAX_X + #undef MESH_MAX_Y + #define MESH_MIN_X hmiData.mesh_min_x + #define MESH_MIN_Y hmiData.mesh_max_x + #define MESH_MAX_X hmiData.mesh_min_y + #define MESH_MAX_Y hmiData.mesh_max_y #endif #if defined(__STM32F1__) || defined(STM32F1) @@ -89,7 +116,7 @@ #define DEF_PIDCYCLES 5 #if HAS_BED_PROBE constexpr uint16_t DEF_Z_PROBE_FEEDRATE_SLOW = Z_PROBE_FEEDRATE_SLOW; - #undef Z_PROBE_FEEDRATE_SLOW + #undef Z_PROBE_FEEDRATE_SLOW #define Z_PROBE_FEEDRATE_SLOW hmiData.zprobeFeed #endif diff --git a/Marlin/src/lcd/e3v2/proui/menus.cpp b/Marlin/src/lcd/e3v2/proui/menus.cpp index 88fbf6000125..515cc9b00534 100644 --- a/Marlin/src/lcd/e3v2/proui/menus.cpp +++ b/Marlin/src/lcd/e3v2/proui/menus.cpp @@ -157,7 +157,7 @@ void onDrawChkbMenu(MenuItem* menuitem, int8_t line) { onDrawChkbMenu(menuitem, line, val); } -void DrawItemEdit(const bool selected) { +void drawItemEdit(const bool selected) { const uint16_t bcolor = selected ? hmiData.colorSelected : hmiData.colorBackground; const uint8_t iNum = 4 - ((menuData.dp > 0) ? (menuData.dp - 1) : 0); switch (checkkey) { @@ -202,7 +202,7 @@ void setOnClick(uint8_t process, const int32_t lo, const int32_t hi, uint8_t dp, // apply: update function when the encoder is pressed void setValueOnClick(uint8_t process, const int32_t lo, const int32_t hi, const int32_t val, void (*apply)()/*=nullptr*/, void (*liveUpdate)()/*=nullptr*/) { setOnClick(process, lo, hi, 0, val, apply, liveUpdate); - DrawItemEdit(true); + drawItemEdit(true); } // Generic onclick event for float values @@ -215,7 +215,7 @@ void setValueOnClick(uint8_t process, const int32_t lo, const int32_t hi, const void setValueOnClick(uint8_t process, const float lo, const float hi, uint8_t dp, const float val, void (*apply)()/*=nullptr*/, void (*liveUpdate)()/*=nullptr*/) { const int32_t value = round(val * POW(10, dp)); setOnClick(process, lo * POW(10, dp), hi * POW(10, dp), dp, value, apply, liveUpdate); - DrawItemEdit(true); + drawItemEdit(true); } // Generic onclick event for integer values @@ -285,14 +285,14 @@ int8_t hmiGet(bool draw) { if (encoder_diffState != ENCODER_DIFF_NO) { if (applyEncoder(encoder_diffState, menuData.value)) { encoderRate.enabled = false; - if (draw) DrawItemEdit(false); + if (draw) drawItemEdit(false); checkkey = ID_Menu; return 2; } LIMIT(menuData.value, lo, hi); } const bool change = cval != menuData.value; - if (change) DrawItemEdit(true); + if (change) drawItemEdit(true); return int8_t(change); } @@ -547,13 +547,13 @@ void updateMenu(Menu* &menu) { menu->draw(); } -void ReDrawMenu(bool force/*=false*/) { +void redrawMenu(bool force/*=false*/) { if (currentMenu && (force || checkkey == ID_Menu)) currentMenu->draw(); - if (force) DrawItemEdit(true); + if (force) drawItemEdit(true); } -void ReDrawItem() { - static_cast(currentMenu->selectedItem())->redraw(false); +void redrawItem() { + static_cast(currentMenu->selectedItem())-> redraw(false); } #endif // DWIN_LCD_PROUI diff --git a/Marlin/src/lcd/e3v2/proui/menus.h b/Marlin/src/lcd/e3v2/proui/menus.h index d1f5cdb698ba..8ce394f32e89 100644 --- a/Marlin/src/lcd/e3v2/proui/menus.h +++ b/Marlin/src/lcd/e3v2/proui/menus.h @@ -187,10 +187,10 @@ void invalidateMenu(); void updateMenu(Menu* &menu); // Redraw the current Menu if it is valid -void ReDrawMenu(bool force=false); +void redrawMenu(bool force=false); // Redraw selected menu item -void ReDrawItem(); +void redrawItem(); // Clear menuItems array and free menuItems elements void menuItemsClear(); From bed57fe0086a21fbe8b6729ea28b10f235e82265 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Sun, 4 Feb 2024 03:20:59 -0500 Subject: [PATCH 11/47] add another run_z_probe function for testing --- Marlin/src/module/probe.cpp | 296 ++++++++++++++++++++++-------------- 1 file changed, 178 insertions(+), 118 deletions(-) diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index a996e76d6147..59c74ab1f16c 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -747,161 +747,221 @@ bool Probe::probe_down_to_z(const_float_t z, const_feedRate_t fr_mm_s) { */ #if DISABLED(DWIN_LCD_PROUI) -float Probe::run_z_probe(const bool sanity_check/*=true*/, const_float_t z_min_point/*=Z_PROBE_LOW_POINT*/, const_float_t z_clearance/*=Z_TWEEN_SAFE_CLEARANCE*/) { - DEBUG_SECTION(log_probe, "Probe::run_z_probe", DEBUGGING(LEVELING)); - - const float zoffs = SUM_TERN(HAS_HOTEND_OFFSET, -offset.z, hotend_offset[active_extruder].z); - - auto try_to_probe = [&](PGM_P const plbl, const_float_t z_probe_low_point, const feedRate_t fr_mm_s, const bool scheck) -> bool { - constexpr float error_tolerance = Z_PROBE_ERROR_TOLERANCE; - if (DEBUGGING(LEVELING)) { - DEBUG_ECHOPGM_P(plbl); - DEBUG_ECHOLNPGM("> try_to_probe(..., ", z_probe_low_point, ", ", fr_mm_s, ", ...)"); - } + float Probe::run_z_probe(const bool sanity_check/*=true*/, const_float_t z_min_point/*=Z_PROBE_LOW_POINT*/, const_float_t z_clearance/*=Z_TWEEN_SAFE_CLEARANCE*/) { + DEBUG_SECTION(log_probe, "Probe::run_z_probe", DEBUGGING(LEVELING)); - // Tare the probe, if supported - if (TERN0(PROBE_TARE, tare())) return true; + const float zoffs = SUM_TERN(HAS_HOTEND_OFFSET, -offset.z, hotend_offset[active_extruder].z); - // Do a first probe at the fast speed - const bool probe_fail = probe_down_to_z(z_probe_low_point, fr_mm_s), // No probe trigger? - early_fail = (scheck && current_position.z > zoffs + error_tolerance); // Probe triggered too high? - #if ENABLED(DEBUG_LEVELING_FEATURE) - if (DEBUGGING(LEVELING) && (probe_fail || early_fail)) { - DEBUG_ECHOPGM(" Probe fail! - "); - if (probe_fail) DEBUG_ECHOLNPGM("No trigger."); - if (early_fail) DEBUG_ECHOLNPGM("Triggered early (above ", zoffs + error_tolerance, "mm)"); + auto try_to_probe = [&](PGM_P const plbl, const_float_t z_probe_low_point, const feedRate_t fr_mm_s, const bool scheck) -> bool { + constexpr float error_tolerance = Z_PROBE_ERROR_TOLERANCE; + if (DEBUGGING(LEVELING)) { + DEBUG_ECHOPGM_P(plbl); + DEBUG_ECHOLNPGM("> try_to_probe(..., ", z_probe_low_point, ", ", fr_mm_s, ", ...)"); } - #else - UNUSED(plbl); - #endif - return probe_fail || early_fail; - }; - // Stop the probe before it goes too low to prevent damage. - // For known Z probe below the expected trigger point, otherwise -10mm lower. - const float z_probe_low_point = zoffs + z_min_point -float((!axis_is_trusted(Z_AXIS)) * 10); - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Probe Low Point: ", z_probe_low_point); + // Tare the probe, if supported + if (TERN0(PROBE_TARE, tare())) return true; - // Double-probing does a fast probe followed by a slow probe - #if TOTAL_PROBING == 2 + // Do a first probe at the fast speed + const bool probe_fail = probe_down_to_z(z_probe_low_point, fr_mm_s), // No probe trigger? + early_fail = (scheck && current_position.z > zoffs + error_tolerance); // Probe triggered too high? + #if ENABLED(DEBUG_LEVELING_FEATURE) + if (DEBUGGING(LEVELING) && (probe_fail || early_fail)) { + DEBUG_ECHOPGM(" Probe fail! - "); + if (probe_fail) DEBUG_ECHOLNPGM("No trigger."); + if (early_fail) DEBUG_ECHOLNPGM("Triggered early (above ", zoffs + error_tolerance, "mm)"); + } + #else + UNUSED(plbl); + #endif + return probe_fail || early_fail; + }; - // Attempt to tare the probe - if (TERN0(PROBE_TARE, tare())) return NAN; + // Stop the probe before it goes too low to prevent damage. + // For known Z probe below the expected trigger point, otherwise -10mm lower. + const float z_probe_low_point = zoffs + z_min_point -float((!axis_is_trusted(Z_AXIS)) * 10); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Probe Low Point: ", z_probe_low_point); - // Do a first probe at the fast speed - if (try_to_probe(PSTR("FAST"), z_probe_low_point, z_probe_fast_mm_s, sanity_check)) return NAN; + // Double-probing does a fast probe followed by a slow probe + #if TOTAL_PROBING == 2 - const float z1 = DIFF_TERN(HAS_DELTA_SENSORLESS_PROBING, current_position.z, largest_sensorless_adj); - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("1st Probe Z:", z1); + // Attempt to tare the probe + if (TERN0(PROBE_TARE, tare())) return NAN; - // Raise to give the probe clearance - do_z_clearance(z1 + (Z_CLEARANCE_MULTI_PROBE), false); + // Do a first probe at the fast speed + if (try_to_probe(PSTR("FAST"), z_probe_low_point, z_probe_fast_mm_s, sanity_check)) return NAN; - #elif Z_PROBE_FEEDRATE_FAST != Z_PROBE_FEEDRATE_SLOW + const float z1 = DIFF_TERN(HAS_DELTA_SENSORLESS_PROBING, current_position.z, largest_sensorless_adj); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("1st Probe Z:", z1); - // 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.0f + _MAX(zoffs, 0.0f); - if (current_position.z > z) { - // Probe down fast. If the probe never triggered, raise for probe clearance - if (!probe_down_to_z(z, z_probe_fast_mm_s)) - do_z_clearance(z_clearance); - } - #endif + // Raise to give the probe clearance + do_z_clearance(z1 + (Z_CLEARANCE_MULTI_PROBE), false); - #if EXTRA_PROBING > 0 - float probes[TOTAL_PROBING]; - #endif + #elif Z_PROBE_FEEDRATE_FAST != Z_PROBE_FEEDRATE_SLOW - #if TOTAL_PROBING > 2 - float probes_z_sum = 0; - for ( - #if EXTRA_PROBING > 0 - uint8_t p = 0; p < TOTAL_PROBING; p++ - #else - uint8_t p = TOTAL_PROBING; p--; - #endif - ) - #endif - { - // If the probe won't tare, return - if (TERN0(PROBE_TARE, tare())) return true; + // 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.0f + _MAX(zoffs, 0.0f); + if (current_position.z > z) { + // Probe down fast. If the probe never triggered, raise for probe clearance + if (!probe_down_to_z(z, z_probe_fast_mm_s)) + do_z_clearance(z_clearance); + } + #endif - // Probe downward slowly to find the bed - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Slow Probe:"); - if (try_to_probe(PSTR("SLOW"), z_probe_low_point, MMM_TO_MMS(Z_PROBE_FEEDRATE_SLOW), sanity_check)) return NAN; + #if EXTRA_PROBING > 0 + float probes[TOTAL_PROBING]; + #endif + + #if TOTAL_PROBING > 2 + float probes_z_sum = 0; + for ( + #if EXTRA_PROBING > 0 + uint8_t p = 0; p < TOTAL_PROBING; p++ + #else + uint8_t p = TOTAL_PROBING; p--; + #endif + ) + #endif + { + // If the probe won't tare, return + if (TERN0(PROBE_TARE, tare())) return true; + + // Probe downward slowly to find the bed + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Slow Probe:"); + if (try_to_probe(PSTR("SLOW"), z_probe_low_point, MMM_TO_MMS(Z_PROBE_FEEDRATE_SLOW), sanity_check)) return NAN; + + TERN_(MEASURE_BACKLASH_WHEN_PROBING, backlash.measure_with_probe()); + + const float z = DIFF_TERN(HAS_DELTA_SENSORLESS_PROBING, current_position.z, largest_sensorless_adj); + + #if EXTRA_PROBING > 0 + // Insert Z measurement into probes[]. Keep it sorted ascending. + for (uint8_t i = 0; i <= p; ++i) { // Iterate the saved Zs to insert the new Z + if (i == p || probes[i] > z) { // Last index or new Z is smaller than this Z + for (int8_t m = p; --m >= i;) probes[m + 1] = probes[m]; // Shift items down after the insertion point + probes[i] = z; // Insert the new Z measurement + break; // Only one to insert. Done! + } + } + #elif TOTAL_PROBING > 2 + probes_z_sum += z; + #else + UNUSED(z); + #endif - TERN_(MEASURE_BACKLASH_WHEN_PROBING, backlash.measure_with_probe()); + #if TOTAL_PROBING > 2 + // Small Z raise after all but the last probe + if (p + #if EXTRA_PROBING > 0 + < TOTAL_PROBING - 1 + #endif + ) do_z_clearance(z + (Z_CLEARANCE_MULTI_PROBE), false); + #endif + } - const float z = DIFF_TERN(HAS_DELTA_SENSORLESS_PROBING, current_position.z, largest_sensorless_adj); + #if TOTAL_PROBING > 2 #if EXTRA_PROBING > 0 - // Insert Z measurement into probes[]. Keep it sorted ascending. - for (uint8_t i = 0; i <= p; ++i) { // Iterate the saved Zs to insert the new Z - if (i == p || probes[i] > z) { // Last index or new Z is smaller than this Z - for (int8_t m = p; --m >= i;) probes[m + 1] = probes[m]; // Shift items down after the insertion point - probes[i] = z; // Insert the new Z measurement - break; // Only one to insert. Done! - } - } - #elif TOTAL_PROBING > 2 - probes_z_sum += z; - #else - UNUSED(z); - #endif + // Take the center value (or average the two middle values) as the median + static constexpr int PHALF = (TOTAL_PROBING - 1) / 2; + const float middle = probes[PHALF], + median = ((TOTAL_PROBING) & 1) ? middle : (middle + probes[PHALF + 1]) * 0.5f; + + // Remove values farthest from the median + uint8_t min_avg_idx = 0, max_avg_idx = TOTAL_PROBING - 1; + for (uint8_t i = EXTRA_PROBING; i--;) + if (ABS(probes[max_avg_idx] - median) > ABS(probes[min_avg_idx] - median)) + max_avg_idx--; else min_avg_idx++; + + // Return the average value of all remaining probes. + for (uint8_t i = min_avg_idx; i <= max_avg_idx; ++i) + probes_z_sum += probes[i]; - #if TOTAL_PROBING > 2 - // Small Z raise after all but the last probe - if (p - #if EXTRA_PROBING > 0 - < TOTAL_PROBING - 1 - #endif - ) do_z_clearance(z + (Z_CLEARANCE_MULTI_PROBE), false); #endif - } - #if TOTAL_PROBING > 2 + const float measured_z = probes_z_sum * RECIPROCAL(MULTIPLE_PROBING); - #if EXTRA_PROBING > 0 - // Take the center value (or average the two middle values) as the median - static constexpr int PHALF = (TOTAL_PROBING - 1) / 2; - const float middle = probes[PHALF], - median = ((TOTAL_PROBING) & 1) ? middle : (middle + probes[PHALF + 1]) * 0.5f; + #elif TOTAL_PROBING == 2 - // Remove values farthest from the median - uint8_t min_avg_idx = 0, max_avg_idx = TOTAL_PROBING - 1; - for (uint8_t i = EXTRA_PROBING; i--;) - if (ABS(probes[max_avg_idx] - median) > ABS(probes[min_avg_idx] - median)) - max_avg_idx--; else min_avg_idx++; + const float z2 = DIFF_TERN(HAS_DELTA_SENSORLESS_PROBING, current_position.z, largest_sensorless_adj); - // Return the average value of all remaining probes. - for (uint8_t i = min_avg_idx; i <= max_avg_idx; ++i) - probes_z_sum += probes[i]; + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("2nd Probe Z:", z2, " Discrepancy:", z1 - z2); + + // Return a weighted average of the fast and slow probes + const float measured_z = (z2 * 3.0f + z1 * 2.0f) * 0.2f; + + #else + + // Return the single probe result + const float measured_z = current_position.z; #endif - const float measured_z = probes_z_sum * RECIPROCAL(MULTIPLE_PROBING); + return DIFF_TERN(HAS_HOTEND_OFFSET, measured_z, hotend_offset[active_extruder].z); + } - #elif TOTAL_PROBING == 2 +#elif (1) // different types of `run_z_probe()` functions for testing - const float z2 = DIFF_TERN(HAS_DELTA_SENSORLESS_PROBING, current_position.z, largest_sensorless_adj); +float Probe::run_z_probe(const bool sanity_check/*=true*/, const_float_t z_min_point/*=Z_PROBE_LOW_POINT*/, const_float_t z_clearance/*=Z_TWEEN_SAFE_CLEARANCE*/) { + DEBUG_SECTION(log_probe, "Probe::run_z_probe", DEBUGGING(LEVELING)); - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("2nd Probe Z:", z2, " Discrepancy:", z1 - z2); + const float zoffs = SUM_TERN(HAS_HOTEND_OFFSET, -offset.z, hotend_offset[active_extruder].z); - // Return a weighted average of the fast and slow probes - const float measured_z = (z2 * 3.0f + z1 * 2.0f) * 0.2f; + auto try_to_probe = [&](PGM_P const plbl, const_float_t z_probe_low_point, const feedRate_t fr_mm_s, const bool scheck) -> bool { + constexpr float error_tolerance = Z_PROBE_ERROR_TOLERANCE; + if (DEBUGGING(LEVELING)) { + DEBUG_ECHOPGM_P(plbl); + DEBUG_ECHOLNPGM("> try_to_probe(..., ", z_probe_low_point, ", ", fr_mm_s, ", ...)"); + } - #else + // Tare the probe, if supported + if (TERN0(PROBE_TARE, tare())) return true; + + // Do a probe at the specified speed + const bool probe_fail = probe_down_to_z(z_probe_low_point, fr_mm_s); // No probe trigger? + const bool early_fail = (scheck && current_position.z > zoffs + error_tolerance); // Probe triggered too high? + #if ENABLED(DEBUG_LEVELING_FEATURE) + if (DEBUGGING(LEVELING) && (probe_fail || early_fail)) { + DEBUG_ECHOPGM(" Probe fail! - "); + if (probe_fail) DEBUG_ECHOLNPGM("No trigger."); + if (early_fail) DEBUG_ECHOLNPGM("Triggered early (above ", zoffs + error_tolerance, "mm)"); + } + #else + UNUSED(plbl); + #endif + return probe_fail || early_fail; + }; - // Return the single probe result - const float measured_z = current_position.z; + // Stop the probe before it goes too low to prevent damage. + // For known Z probe below the expected trigger point, otherwise -10mm lower. + const float z_probe_low_point = zoffs + z_min_point - float((!axis_is_trusted(Z_AXIS)) * 10); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Probe Low Point: ", z_probe_low_point); - #endif + // Double-probing does a fast probe followed by a slow probe - return DIFF_TERN(HAS_HOTEND_OFFSET, measured_z, hotend_offset[active_extruder].z); + // Attempt to tare the probe + if (TERN0(PROBE_TARE, tare())) return NAN; + // Do a fast probe for multiple_probing - 1 times + //float probes[PRO_data.multiple_probing]; + float probes_z_sum = 0.0f; + if (try_to_probe(PSTR("FAST"), z_probe_low_point, z_probe_fast_mm_s, sanity_check)) return NAN; + const float z1 = current_position.z; + + // Do a slow probe for the last probe + for (uint8_t p = 0; p < hmiData.multipleProbing - 1; p++) { + if (try_to_probe(PSTR("SLOW"), z_probe_low_point, MMM_TO_MMS(Z_PROBE_FEEDRATE_SLOW), sanity_check)) return NAN; + const float z = current_position.z; + probes_z_sum += z; + } + // Calculate the average measured Z value + probes_z_sum += z1; + const float measured_z = probes_z_sum * RECIPROCAL(hmiData.multipleProbing); + + return DIFF_TERN(HAS_HOTEND_OFFSET, measured_z, hotend_offset[active_extruder].z); } -#else +#else // 2nd type for testing float Probe::run_z_probe(const bool sanity_check/*=true*/, const_float_t z_min_point/*=Z_PROBE_LOW_POINT*/, const_float_t z_clearance/*=Z_TWEEN_SAFE_CLEARANCE*/) { DEBUG_SECTION(log_probe, "Probe::run_z_probe", DEBUGGING(LEVELING)); From 8a671eeae8065259afb8ed688deb214564a3bc90 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Sun, 4 Feb 2024 13:04:28 -0500 Subject: [PATCH 12/47] update meshinset --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 3 +- Marlin/src/lcd/e3v2/proui/dwin_defines.h | 69 ++++++++++++------------ Marlin/src/lcd/e3v2/proui/menus.cpp | 2 +- 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 7cee324c4db7..7f5a4f35abdb 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -4063,7 +4063,8 @@ void drawMaxAccelMenu() { dwinUpdateLCD(); } - void setMeshInset() { setPFloatOnClick(X_MIN_POS, X_MAX_POS, UNITFDIGITS, reset_bed_level, redrawItem); } + void applyMeshInset() { reset_bed_level(); redrawItem(); } + void setMeshInset() { setPFloatOnClick(X_MIN_POS, X_MAX_POS, UNITFDIGITS, applyMeshInset); } #if ENABLED(PREHEAT_BEFORE_LEVELING) void setBedLevT() { setPIntOnClick(MIN_BEDTEMP, MAX_BEDTEMP); } diff --git a/Marlin/src/lcd/e3v2/proui/dwin_defines.h b/Marlin/src/lcd/e3v2/proui/dwin_defines.h index f6794ead0a3d..ee53fc23cf6d 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin_defines.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_defines.h @@ -30,41 +30,6 @@ #include "../../../inc/MarlinConfigPre.h" -#if HAS_MESH - #define PROUI_MESH_EDIT // Add a menu to edit mesh points - #if ENABLED(PROUI_MESH_EDIT) - #define Z_OFFSET_MIN -3.0 // (mm) - #define Z_OFFSET_MAX 3.0 // (mm) - #endif - #ifndef MESH_INSET - #define MESH_INSET 10 - #endif - #ifndef MESH_MIN_X - #define MESH_MIN_X MESH_INSET - #endif - #ifndef MESH_MIN_Y - #define MESH_MIN_Y MESH_INSET - #endif - #ifndef MESH_MAX_X - #define MESH_MAX_X X_BED_SIZE - (MESH_INSET) - #endif - #ifndef MESH_MAX_Y - #define MESH_MAX_Y Y_BED_SIZE - (MESH_INSET) - #endif - constexpr uint16_t DEF_MESH_MIN_X = MESH_MIN_X; - constexpr uint16_t DEF_MESH_MAX_X = MESH_MAX_X; - constexpr uint16_t DEF_MESH_MIN_Y = MESH_MIN_Y; - constexpr uint16_t DEF_MESH_MAX_Y = MESH_MAX_Y; - #undef MESH_MIN_X - #undef MESH_MIN_Y - #undef MESH_MAX_X - #undef MESH_MAX_Y - #define MESH_MIN_X hmiData.mesh_min_x - #define MESH_MIN_Y hmiData.mesh_max_x - #define MESH_MAX_X hmiData.mesh_min_y - #define MESH_MAX_Y hmiData.mesh_max_y -#endif - #if defined(__STM32F1__) || defined(STM32F1) #define DASH_REDRAW 1 #endif @@ -119,6 +84,40 @@ #undef Z_PROBE_FEEDRATE_SLOW #define Z_PROBE_FEEDRATE_SLOW hmiData.zprobeFeed #endif +#if HAS_MESH + #define PROUI_MESH_EDIT // Add a menu to edit mesh points + #if ENABLED(PROUI_MESH_EDIT) + #define Z_OFFSET_MIN -3.0 // (mm) + #define Z_OFFSET_MAX 3.0 // (mm) + #endif + #ifndef MESH_INSET + #define MESH_INSET 10 + #endif + #ifndef MESH_MIN_X + #define MESH_MIN_X MESH_INSET + #endif + #ifndef MESH_MIN_Y + #define MESH_MIN_Y MESH_INSET + #endif + #ifndef MESH_MAX_X + #define MESH_MAX_X X_BED_SIZE - (MESH_INSET) + #endif + #ifndef MESH_MAX_Y + #define MESH_MAX_Y Y_BED_SIZE - (MESH_INSET) + #endif + constexpr uint16_t DEF_MESH_MIN_X = MESH_MIN_X; + constexpr uint16_t DEF_MESH_MAX_X = MESH_MAX_X; + constexpr uint16_t DEF_MESH_MIN_Y = MESH_MIN_Y; + constexpr uint16_t DEF_MESH_MAX_Y = MESH_MAX_Y; + #undef MESH_MIN_X + #undef MESH_MIN_Y + #undef MESH_MAX_X + #undef MESH_MAX_Y + #define MESH_MIN_X hmiData.mesh_min_x + #define MESH_MIN_Y hmiData.mesh_max_x + #define MESH_MAX_X hmiData.mesh_min_y + #define MESH_MAX_Y hmiData.mesh_max_y +#endif /** * ProUI internal feature flags diff --git a/Marlin/src/lcd/e3v2/proui/menus.cpp b/Marlin/src/lcd/e3v2/proui/menus.cpp index 515cc9b00534..e6129418981c 100644 --- a/Marlin/src/lcd/e3v2/proui/menus.cpp +++ b/Marlin/src/lcd/e3v2/proui/menus.cpp @@ -553,7 +553,7 @@ void redrawMenu(bool force/*=false*/) { } void redrawItem() { - static_cast(currentMenu->selectedItem())-> redraw(false); + static_cast(currentMenu->selectedItem())->value; } #endif // DWIN_LCD_PROUI From 396bb6c49752a1e178df229efbeea68c426a0ae3 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Mon, 5 Feb 2024 08:35:14 -0500 Subject: [PATCH 13/47] add GRID points --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 25 ++++++++++++++++++++++++ Marlin/src/lcd/e3v2/proui/dwin.h | 1 + Marlin/src/lcd/e3v2/proui/dwin_defines.h | 11 +++++++++-- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 7f5a4f35abdb..0e3b100bba95 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -1872,6 +1872,7 @@ void dwinSetDataDefaults() { hmiData.mesh_max_x = DEF_MESH_MAX_X; hmiData.mesh_min_y = DEF_MESH_MIN_Y; hmiData.mesh_max_y = DEF_MESH_MAX_Y; + hmiData.grid_max_points = DEF_GRID_MAX_POINTS; #endif } @@ -4053,6 +4054,28 @@ void drawMaxAccelMenu() { //============================================================================= #if HAS_MESH + void drawMeshPoints(bool selected, int8_t line, int8_t value) { + char mpmsg[10]; + sprintf(mpmsg, "%ix%i", value, value); + if (selected) { DWINUI::Draw_String(DWINUI::textColor, hmiData.colorSelected, VALX + MENU_CHR_H, MBASE(line), mpmsg); } + else { DWINUI::Draw_String(VALX + MENU_CHR_H, MBASE(line), mpmsg); } + } + void onDrawMeshPoints(MenuItemClass* menuitem, int8_t line) { + onDrawMenuItem(menuitem, line); + drawMeshPoints(false, line, hmiData.grid_max_points); + redrawItem(); + } + + void applyMeshPoints() { hmiData.grid_max_points = menuData.value; } + + void setMeshPoints() { SetPIntOnClick(GRID_MIN, GRID_LIMIT, applyMeshPoints); } + + // void ApplyMeshPoints() { ProEx.ApplyMeshPoints(); redrawMenu(); } + // void LiveMeshPoints() { drawMeshPoints(true, currentMenu->line(), menuData.value); } + // void SetMeshPoints() { + // setOnClick(ID_SetIntNoDraw, GRID_MIN, GRID_LIMIT, 0, hmiData.grid_max_points, ApplyMeshPoints, LiveMeshPoints); + // ProEx.DrawMeshPoints(true, currentMenu->line(), hmiData.grid_max_points); + // } void applyMeshFadeHeight() { set_z_fade_height(planner.z_fade_height); } void setMeshFadeHeight() { setPFloatOnClick(0, 100, 1, applyMeshFadeHeight); } @@ -4131,6 +4154,8 @@ void drawMaxAccelMenu() { #if ENABLED(PREHEAT_BEFORE_LEVELING) EDIT_ITEM(ICON_Temperature, MSG_UBL_SET_TEMP_BED, onDrawPIntMenu, setBedLevT, &hmiData.bedLevT); #endif + EDIT_ITEM(ICON_MeshPoints, MSG_MESH_POINTS, onDrawPInt8Menu, setMeshPoints, &PRO_data.grid_max_points); + MENU_ITEM(ICON_MeshPoints, MSG_MESH_POINTS, onDrawMeshPoints, SetMeshPoints); EDIT_ITEM(ICON_SetZOffset, MSG_Z_FADE_HEIGHT, onDrawPFloatMenu, setMeshFadeHeight, &planner.z_fade_height); EDIT_ITEM(ICON_UBLActive, MSG_ACTIVATE_MESH, onDrawChkbMenu, setMeshActive, &planner.leveling_active); #if HAS_BED_PROBE diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 90a5d5980b19..f7b54b7cabb5 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -164,6 +164,7 @@ typedef struct { float mesh_max_x = DEF_MESH_MAX_X; float mesh_min_y = DEF_MESH_MIN_Y; float mesh_max_y = DEF_MESH_MAX_Y; + uint8_t grid_max_points = DEF_GRID_MAX_POINTS; } hmi_data_t; extern hmi_data_t hmiData; diff --git a/Marlin/src/lcd/e3v2/proui/dwin_defines.h b/Marlin/src/lcd/e3v2/proui/dwin_defines.h index ee53fc23cf6d..32011d2b0dfa 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin_defines.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_defines.h @@ -76,8 +76,8 @@ #else #define DEF_Z_AFTER_HOMING 0 #endif -#define DEF_HOTENDPIDT TERN(PREHEAT_1_TEMP_BED, PREHEAT_1_TEMP_HOTEND, 195) -#define DEF_BEDPIDT TERN(PREHEAT_1_TEMP_BED, PREHEAT_1_TEMP_HOTEND, 60) +#define DEF_HOTENDPIDT PREHEAT_1_TEMP_HOTEND +#define DEF_BEDPIDT PREHEAT_1_TEMP_BED #define DEF_PIDCYCLES 5 #if HAS_BED_PROBE constexpr uint16_t DEF_Z_PROBE_FEEDRATE_SLOW = Z_PROBE_FEEDRATE_SLOW; @@ -105,6 +105,7 @@ #ifndef MESH_MAX_Y #define MESH_MAX_Y Y_BED_SIZE - (MESH_INSET) #endif + constexpr uint16_t DEF_GRID_MAX_POINTS = GRID_MAX_POINTS_X; constexpr uint16_t DEF_MESH_MIN_X = MESH_MIN_X; constexpr uint16_t DEF_MESH_MAX_X = MESH_MAX_X; constexpr uint16_t DEF_MESH_MIN_Y = MESH_MIN_Y; @@ -113,10 +114,16 @@ #undef MESH_MIN_Y #undef MESH_MAX_X #undef MESH_MAX_Y + #undef GRID_MAX_POINTS_X + #undef GRID_MAX_POINTS_Y + #undef GRID_MAX_POINTS #define MESH_MIN_X hmiData.mesh_min_x #define MESH_MIN_Y hmiData.mesh_max_x #define MESH_MAX_X hmiData.mesh_min_y #define MESH_MAX_Y hmiData.mesh_max_y + #define GRID_MAX_POINTS_X hmiData.grid_max_points + #define GRID_MAX_POINTS_Y hmiData.grid_max_points + #define GRID_MAX_POINTS (hmiData.grid_max_points * hmiData.grid_max_points) #endif /** From c47cfe439a1b8c29247f01ccc8692c90afea133d Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Mon, 5 Feb 2024 12:04:22 -0500 Subject: [PATCH 14/47] add grid points (UBL) ABL and MBL come later --- Marlin/src/core/utility.h | 4 +- Marlin/src/feature/bedlevel/bedlevel.h | 2 +- Marlin/src/feature/bedlevel/ubl/ubl.h | 4 +- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 4 +- Marlin/src/inc/SanityCheck.h | 5 +- Marlin/src/lcd/e3v2/proui/bedlevel_tools.cpp | 2 +- Marlin/src/lcd/e3v2/proui/dwin.cpp | 14 +-- Marlin/src/lcd/e3v2/proui/dwin_defines.h | 91 ++++++++++++-------- Marlin/src/lcd/language/language_en.h | 1 + 9 files changed, 74 insertions(+), 53 deletions(-) diff --git a/Marlin/src/core/utility.h b/Marlin/src/core/utility.h index c3324443bab9..9dc872cde0b3 100644 --- a/Marlin/src/core/utility.h +++ b/Marlin/src/core/utility.h @@ -33,7 +33,7 @@ void safe_delay(millis_t ms); // Delay ensuring that temperatures are inline void serial_delay(const millis_t) {} #endif -#if GRID_MAX_POINTS +#if TERN(PROUI_ITEM_GRID, HAS_MESH, GRID_MAX_POINTS) // 16x16 bit arrays template @@ -49,7 +49,7 @@ void safe_delay(millis_t ms); // Delay ensuring that temperatures are inline bool marked(const xy_int8_t &xy) { return marked(xy.x, xy.y); } }; - typedef FlagBits MeshFlags; + typedef FlagBits MeshFlags; #endif diff --git a/Marlin/src/feature/bedlevel/bedlevel.h b/Marlin/src/feature/bedlevel/bedlevel.h index ccb9543e72e5..e8154392cb31 100644 --- a/Marlin/src/feature/bedlevel/bedlevel.h +++ b/Marlin/src/feature/bedlevel/bedlevel.h @@ -59,7 +59,7 @@ class TemporaryBedLevelingState { #if HAS_MESH - typedef float bed_mesh_t[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; + typedef float bed_mesh_t[TERN(PROUI_ITEM_GRID, GRID_LIMIT, GRID_MAX_POINTS_X)][TERN(PROUI_ITEM_GRID, GRID_LIMIT, GRID_MAX_POINTS_Y)]; #if ENABLED(AUTO_BED_LEVELING_BILINEAR) #include "abl/bbl.h" diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.h b/Marlin/src/feature/bedlevel/ubl/ubl.h index 7377f7dfc03a..84362f229fe5 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.h +++ b/Marlin/src/feature/bedlevel/ubl/ubl.h @@ -116,8 +116,8 @@ class unified_bed_leveling { static void set_store_from_mesh(const bed_mesh_t &in_values, mesh_store_t &stored_values); static void set_mesh_from_store(const mesh_store_t &stored_values, bed_mesh_t &out_values); #endif - static const float _mesh_index_to_xpos[GRID_MAX_POINTS_X], - _mesh_index_to_ypos[GRID_MAX_POINTS_Y]; + static const float _mesh_index_to_xpos[TERN(PROUI_ITEM_GRID, GRID_LIMIT, GRID_MAX_POINTS_X)], + _mesh_index_to_ypos[TERN(PROUI_ITEM_GRID, GRID_LIMIT, GRID_MAX_POINTS_Y)]; #if HAS_MARLINUI_MENU static bool lcd_map_control; diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index ae9d78263510..e68ddb37fe72 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -1445,7 +1445,7 @@ bool unified_bed_leveling::smart_fill_one(const uint8_t x, const uint8_t y, cons return false; } -typedef struct { uint8_t sx, ex, sy, ey; bool yfirst; } smart_fill_info; +typedef struct { TERN(PROUI_ITEM_GRID, int, uint8_t) sx, ex, sy, ey; bool yfirst; } smart_fill_info; void unified_bed_leveling::smart_fill_mesh() { static const smart_fill_info @@ -1687,7 +1687,7 @@ void unified_bed_leveling::smart_fill_mesh() { // being extrapolated so that nearby points will have greater influence on // the point being extrapolated. Then extrapolate the mesh point from WLSF. - static_assert((GRID_MAX_POINTS_Y) <= 16, "GRID_MAX_POINTS_Y too big"); + static_assert((TERN(PROUI_ITEM_GRID, GRID_LIMIT, GRID_MAX_POINTS_Y)) <= 16, "GRID_MAX_POINTS_Y too big"); uint16_t bitmap[GRID_MAX_POINTS_X] = { 0 }; struct linear_fit_data lsf_results; diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 27629c5a7da0..ca6642bae702 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1555,7 +1555,7 @@ static_assert(NUM_SERVOS <= NUM_SERVO_PLUGS, "NUM_SERVOS (or some servo index) i /** * Bed Leveling Requirements */ - +#if !PROUI_ITEM_GRID #if IS_SCARA && ANY(AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) #error "SCARA machines can only use AUTO_BED_LEVELING_BILINEAR or MESH_BED_LEVELING." #elif ENABLED(AUTO_BED_LEVELING_LINEAR) && !(WITHIN(GRID_MAX_POINTS_X, 2, 255) && WITHIN(GRID_MAX_POINTS_Y, 2, 255)) @@ -1579,6 +1579,7 @@ static_assert(NUM_SERVOS <= NUM_SERVO_PLUGS, "NUM_SERVOS (or some servo index) i #error "GRID_MAX_POINTS_X and GRID_MAX_POINTS_Y must be less than 10 for MBL." #endif #endif +#endif #define _POINT_COUNT (defined(PROBE_PT_1) + defined(PROBE_PT_2) + defined(PROBE_PT_3)) #if _POINT_COUNT != 0 && _POINT_COUNT != 3 @@ -1593,9 +1594,11 @@ static_assert(NUM_SERVOS <= NUM_SERVO_PLUGS, "NUM_SERVOS (or some servo index) i #if ALL(HAS_MESH, CLASSIC_JERK) static_assert(DEFAULT_ZJERK > 0.1, "Low DEFAULT_ZJERK values are incompatible with mesh-based leveling."); #endif +#if !PROUI_ITEM_GRID #if HAS_MESH && DGUS_LCD_UI_IA_CREALITY && GRID_MAX_POINTS > 25 #error "DGUS_LCD_UI IA_CREALITY requires a mesh with no more than 25 points as defined by GRID_MAX_POINTS_X/Y." #endif +#endif #if ENABLED(G26_MESH_VALIDATION) #if !HAS_EXTRUDERS diff --git a/Marlin/src/lcd/e3v2/proui/bedlevel_tools.cpp b/Marlin/src/lcd/e3v2/proui/bedlevel_tools.cpp index 5cecac1e930e..5af448fd2f2e 100644 --- a/Marlin/src/lcd/e3v2/proui/bedlevel_tools.cpp +++ b/Marlin/src/lcd/e3v2/proui/bedlevel_tools.cpp @@ -255,7 +255,7 @@ bool BedLevelTools::meshValidate() { } else { // has value MString<12> msg; - constexpr bool is_wide = (GRID_MAX_POINTS_X) >= TERN(TJC_DISPLAY, 8, 10); + const bool is_wide = (GRID_MAX_POINTS_X) >= TERN(TJC_DISPLAY, 8, 10); if (is_wide) msg.setf(F("%02i"), uint16_t(z * 100) % 100); else diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 0e3b100bba95..0dbac3903d61 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -4057,10 +4057,10 @@ void drawMaxAccelMenu() { void drawMeshPoints(bool selected, int8_t line, int8_t value) { char mpmsg[10]; sprintf(mpmsg, "%ix%i", value, value); - if (selected) { DWINUI::Draw_String(DWINUI::textColor, hmiData.colorSelected, VALX + MENU_CHR_H, MBASE(line), mpmsg); } - else { DWINUI::Draw_String(VALX + MENU_CHR_H, MBASE(line), mpmsg); } + if (selected) { DWINUI::drawString(DWINUI::textColor, hmiData.colorSelected, VALX + MENU_CHR_H, MBASE(line), mpmsg); } + else { DWINUI::drawString(VALX + MENU_CHR_H, MBASE(line), mpmsg); } } - void onDrawMeshPoints(MenuItemClass* menuitem, int8_t line) { + void onDrawMeshPoints(MenuItem* menuitem, int8_t line) { onDrawMenuItem(menuitem, line); drawMeshPoints(false, line, hmiData.grid_max_points); redrawItem(); @@ -4068,7 +4068,7 @@ void drawMaxAccelMenu() { void applyMeshPoints() { hmiData.grid_max_points = menuData.value; } - void setMeshPoints() { SetPIntOnClick(GRID_MIN, GRID_LIMIT, applyMeshPoints); } + void setMeshPoints() { setPIntOnClick(GRID_MIN, GRID_LIMIT, applyMeshPoints); } // void ApplyMeshPoints() { ProEx.ApplyMeshPoints(); redrawMenu(); } // void LiveMeshPoints() { drawMeshPoints(true, currentMenu->line(), menuData.value); } @@ -4149,13 +4149,13 @@ void drawMaxAccelMenu() { void drawMeshSetMenu() { checkkey = ID_Menu; - if (SET_MENU(meshMenu, MSG_MESH_LEVELING, 15)) { + if (SET_MENU(meshMenu, MSG_MESH_LEVELING, 16)) { BACK_ITEM(drawAdvancedSettingsMenu); #if ENABLED(PREHEAT_BEFORE_LEVELING) EDIT_ITEM(ICON_Temperature, MSG_UBL_SET_TEMP_BED, onDrawPIntMenu, setBedLevT, &hmiData.bedLevT); #endif - EDIT_ITEM(ICON_MeshPoints, MSG_MESH_POINTS, onDrawPInt8Menu, setMeshPoints, &PRO_data.grid_max_points); - MENU_ITEM(ICON_MeshPoints, MSG_MESH_POINTS, onDrawMeshPoints, SetMeshPoints); + EDIT_ITEM(ICON_MeshPoints, MSG_MESH_POINTS, onDrawPInt8Menu, setMeshPoints, &hmiData.grid_max_points); + MENU_ITEM(ICON_MeshPoints, MSG_MESH_POINTS, onDrawMeshPoints, setMeshPoints); EDIT_ITEM(ICON_SetZOffset, MSG_Z_FADE_HEIGHT, onDrawPFloatMenu, setMeshFadeHeight, &planner.z_fade_height); EDIT_ITEM(ICON_UBLActive, MSG_ACTIVATE_MESH, onDrawChkbMenu, setMeshActive, &planner.leveling_active); #if HAS_BED_PROBE diff --git a/Marlin/src/lcd/e3v2/proui/dwin_defines.h b/Marlin/src/lcd/e3v2/proui/dwin_defines.h index 32011d2b0dfa..93f16ba85422 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin_defines.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_defines.h @@ -79,17 +79,56 @@ #define DEF_HOTENDPIDT PREHEAT_1_TEMP_HOTEND #define DEF_BEDPIDT PREHEAT_1_TEMP_BED #define DEF_PIDCYCLES 5 + +/** + * ProUI internal feature flags + */ +#define PROUI_MESH_EDIT // Add a menu to edit mesh points +#if ENABLED(PROUI_MESH_EDIT) + #define Z_OFFSET_MIN -3.0 // (mm) + #define Z_OFFSET_MAX 3.0 // (mm) +#endif +#if ALL(SDCARD_SORT_ALPHA, SDSORT_GCODE) + #define PROUI_MEDIASORT // Enable option to sort G-code files +#endif +#if ENABLED(POWER_LOSS_RECOVERY) + #define PROUI_ITEM_PLR // Tune > Power-loss Recovery +#endif +#if ENABLED(HAS_JUNCTION_DEVIATION) + #define PROUI_ITEM_JD // Tune > Junction Deviation +#endif +#if ENABLED(LIN_ADVANCE) + #define PROUI_ITEM_ADVK // Tune > Linear Advance +#endif +#if ANY(PROUI_PID_TUNE, MPC_AUTOTUNE) && DISABLED(DISABLE_TUNING_GRAPH) + #define PROUI_TUNING_GRAPH 1 +#endif +#if PROUI_TUNING_GRAPH + #define PROUI_ITEM_PLOT // Plot temp graph viewer +#endif +#if HAS_BED_PROBE + #define PROUI_ITEM_ZFRS // Change Z_PROBE_FEEDRATE_SLOW - probe speed +#endif +#if HAS_MESH + #define PROUI_ITEM_GRID 1 // Change GRID_MAX_POINTS - grid array + #define PROUI_ITEM_MESH 1 // Change MESH_INSET - mesh size +#endif +#define HAS_GCODE_PREVIEW 1 // Preview G-code model thumbnail +#define HAS_CUSTOM_COLORS 1 // Change display colors +#define HAS_ESDIAG 1 // View End-stop/Runout switch continuity +#define HAS_LOCKSCREEN 1 // Simple lockscreen +#define HAS_SD_EXTENDER 1 // Enable to support SD card extender cables + +/** + * ProUI extra features + */ #if HAS_BED_PROBE constexpr uint16_t DEF_Z_PROBE_FEEDRATE_SLOW = Z_PROBE_FEEDRATE_SLOW; #undef Z_PROBE_FEEDRATE_SLOW #define Z_PROBE_FEEDRATE_SLOW hmiData.zprobeFeed #endif -#if HAS_MESH - #define PROUI_MESH_EDIT // Add a menu to edit mesh points - #if ENABLED(PROUI_MESH_EDIT) - #define Z_OFFSET_MIN -3.0 // (mm) - #define Z_OFFSET_MAX 3.0 // (mm) - #endif + +#if PROUI_ITEM_MESH #ifndef MESH_INSET #define MESH_INSET 10 #endif @@ -105,7 +144,6 @@ #ifndef MESH_MAX_Y #define MESH_MAX_Y Y_BED_SIZE - (MESH_INSET) #endif - constexpr uint16_t DEF_GRID_MAX_POINTS = GRID_MAX_POINTS_X; constexpr uint16_t DEF_MESH_MIN_X = MESH_MIN_X; constexpr uint16_t DEF_MESH_MAX_X = MESH_MAX_X; constexpr uint16_t DEF_MESH_MIN_Y = MESH_MIN_Y; @@ -114,41 +152,20 @@ #undef MESH_MIN_Y #undef MESH_MAX_X #undef MESH_MAX_Y - #undef GRID_MAX_POINTS_X - #undef GRID_MAX_POINTS_Y - #undef GRID_MAX_POINTS #define MESH_MIN_X hmiData.mesh_min_x #define MESH_MIN_Y hmiData.mesh_max_x #define MESH_MAX_X hmiData.mesh_min_y #define MESH_MAX_Y hmiData.mesh_max_y +#endif + +#if PROUI_ITEM_GRID + constexpr uint16_t DEF_GRID_MAX_POINTS = GRID_MAX_POINTS_X; + #undef GRID_MAX_POINTS_X + #undef GRID_MAX_POINTS_Y + #undef GRID_MAX_POINTS #define GRID_MAX_POINTS_X hmiData.grid_max_points #define GRID_MAX_POINTS_Y hmiData.grid_max_points #define GRID_MAX_POINTS (hmiData.grid_max_points * hmiData.grid_max_points) + #define GRID_MIN 3 + #define GRID_LIMIT 9 #endif - -/** - * ProUI internal feature flags - */ -#if ALL(SDCARD_SORT_ALPHA, SDSORT_GCODE) - #define PROUI_MEDIASORT // Enable option to sort G-code files -#endif -#if ENABLED(POWER_LOSS_RECOVERY) - #define PROUI_ITEM_PLR // Tune > Power-loss Recovery -#endif -#if ENABLED(HAS_JUNCTION_DEVIATION) - #define PROUI_ITEM_JD // Tune > Junction Deviation -#endif -#if ENABLED(LIN_ADVANCE) - #define PROUI_ITEM_ADVK // Tune > Linear Advance -#endif -#if ANY(PROUI_PID_TUNE, MPC_AUTOTUNE) && DISABLED(DISABLE_TUNING_GRAPH) - #define PROUI_TUNING_GRAPH 1 -#endif -#if PROUI_TUNING_GRAPH - #define PROUI_ITEM_PLOT // Plot temp graph viewer -#endif -#define HAS_GCODE_PREVIEW 1 // Preview G-code model thumbnail -#define HAS_CUSTOM_COLORS 1 // Change display colors -#define HAS_ESDIAG 1 // View End-stop/Runout switch continuity -#define HAS_LOCKSCREEN 1 // Simple lockscreen -#define HAS_SD_EXTENDER 1 // Enable to support SD card extender cables diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 32cd355a05ed..0eb99161e5c7 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -646,6 +646,7 @@ namespace LanguageNarrow_en { LSTR MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling"); LSTR MSG_MESH_LEVELING = _UxGT("Mesh Leveling"); LSTR MSG_MESH_DONE = _UxGT("Mesh probing done"); + LSTR MSG_MESH_POINTS = _UxGT("Mesh Points"); LSTR MSG_INFO_STATS_MENU = _UxGT("Printer Stats"); LSTR MSG_RESET_STATS = _UxGT("Reset Print Stats?"); LSTR MSG_INFO_BOARD_MENU = _UxGT("Board Info"); From 9506730d6efe7a8ffdda796aa13a52f6063cd176 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Wed, 7 Feb 2024 09:24:07 -0500 Subject: [PATCH 15/47] update for Bilinear + UBL, kinda for MBL (needs more testing) --- Marlin/src/core/utility.h | 4 +- Marlin/src/feature/bedlevel/abl/bbl.cpp | 12 ++-- Marlin/src/feature/bedlevel/abl/bbl.h | 10 ++- Marlin/src/feature/bedlevel/bedlevel.cpp | 10 ++- Marlin/src/feature/bedlevel/bedlevel.h | 2 +- Marlin/src/feature/bedlevel/hilbert_curve.cpp | 21 ++++-- .../bedlevel/mbl/mesh_bed_leveling.cpp | 8 ++- .../feature/bedlevel/mbl/mesh_bed_leveling.h | 6 ++ Marlin/src/feature/bedlevel/ubl/ubl.cpp | 10 +-- Marlin/src/feature/bedlevel/ubl/ubl.h | 7 +- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 7 +- Marlin/src/gcode/bedlevel/abl/G29.cpp | 22 ++++-- Marlin/src/inc/Conditionals_post.h | 4 +- Marlin/src/inc/MarlinConfigPre.h | 5 ++ Marlin/src/inc/SanityCheck.h | 71 ++++++++++--------- Marlin/src/lcd/e3v2/proui/dwin.cpp | 66 +++++++---------- Marlin/src/lcd/e3v2/proui/dwin.h | 14 ++-- Marlin/src/lcd/e3v2/proui/dwin_defines.h | 61 +++++++++------- Marlin/src/lcd/e3v2/proui/dwin_popup.h | 1 - Marlin/src/lcd/e3v2/proui/meshviewer.cpp | 1 - Marlin/src/lcd/marlinui.cpp | 7 ++ Marlin/src/lcd/marlinui.h | 16 +++++ Marlin/src/module/motion.h | 11 ++- Marlin/src/module/probe.cpp | 10 +-- Marlin/src/module/settings.cpp | 65 ++++++++++++++--- 25 files changed, 279 insertions(+), 172 deletions(-) diff --git a/Marlin/src/core/utility.h b/Marlin/src/core/utility.h index 9dc872cde0b3..b1f002579b4a 100644 --- a/Marlin/src/core/utility.h +++ b/Marlin/src/core/utility.h @@ -33,7 +33,7 @@ void safe_delay(millis_t ms); // Delay ensuring that temperatures are inline void serial_delay(const millis_t) {} #endif -#if TERN(PROUI_ITEM_GRID, HAS_MESH, GRID_MAX_POINTS) +#if TERN(PROUI_GRID_PNTS, HAS_MESH, GRID_MAX_POINTS) // 16x16 bit arrays template @@ -49,7 +49,7 @@ void safe_delay(millis_t ms); // Delay ensuring that temperatures are inline bool marked(const xy_int8_t &xy) { return marked(xy.x, xy.y); } }; - typedef FlagBits MeshFlags; + typedef FlagBits MeshFlags; #endif diff --git a/Marlin/src/feature/bedlevel/abl/bbl.cpp b/Marlin/src/feature/bedlevel/abl/bbl.cpp index 14c4bd24bcf0..49af22fac273 100644 --- a/Marlin/src/feature/bedlevel/abl/bbl.cpp +++ b/Marlin/src/feature/bedlevel/abl/bbl.cpp @@ -118,18 +118,18 @@ void LevelingBilinear::set_grid(const xy_pos_t& _grid_spacing, const xy_pos_t& _ */ void LevelingBilinear::extrapolate_unprobed_bed_level() { #ifdef HALF_IN_X - constexpr uint8_t ctrx2 = 0, xend = GRID_MAX_POINTS_X - 1; + TERN(PROUI_GRID_PNTS, const, constexpr) uint8_t ctrx2 = 0, xend = GRID_MAX_POINTS_X - 1; #else - constexpr uint8_t ctrx1 = (GRID_MAX_CELLS_X) / 2, // left-of-center - ctrx2 = (GRID_MAX_POINTS_X) / 2, // right-of-center + TERN(PROUI_GRID_PNTS, const, constexpr) uint8_t ctrx1 = (GRID_MAX_CELLS_X) / 2, // left-of-center + ctrx2 = (GRID_MAX_POINTS_X) / 2, // right-of-center xend = ctrx1; #endif #ifdef HALF_IN_Y - constexpr uint8_t ctry2 = 0, yend = GRID_MAX_POINTS_Y - 1; + TERN(PROUI_GRID_PNTS, const, constexpr) uint8_t ctry2 = 0, yend = GRID_MAX_POINTS_Y - 1; #else - constexpr uint8_t ctry1 = (GRID_MAX_CELLS_Y) / 2, // top-of-center - ctry2 = (GRID_MAX_POINTS_Y) / 2, // bottom-of-center + TERN(PROUI_GRID_PNTS, const, constexpr) uint8_t ctry1 = (GRID_MAX_CELLS_Y) / 2, // top-of-center + ctry2 = (GRID_MAX_POINTS_Y) / 2, // bottom-of-center yend = ctry1; #endif diff --git a/Marlin/src/feature/bedlevel/abl/bbl.h b/Marlin/src/feature/bedlevel/abl/bbl.h index ca2e96593fde..4abb923333da 100644 --- a/Marlin/src/feature/bedlevel/abl/bbl.h +++ b/Marlin/src/feature/bedlevel/abl/bbl.h @@ -36,8 +36,14 @@ class LevelingBilinear { static void extrapolate_one_point(const uint8_t x, const uint8_t y, const int8_t xdir, const int8_t ydir); #if ENABLED(ABL_BILINEAR_SUBDIVISION) - #define ABL_GRID_POINTS_VIRT_X (GRID_MAX_CELLS_X * (BILINEAR_SUBDIVISIONS) + 1) - #define ABL_GRID_POINTS_VIRT_Y (GRID_MAX_CELLS_Y * (BILINEAR_SUBDIVISIONS) + 1) + #if PROUI_GRID_PNTS + #define ABL_GRID_POINTS_VIRT_N (GRID_LIMIT - 1) * (BILINEAR_SUBDIVISIONS) + 1 + #define ABL_GRID_POINTS_VIRT_X ABL_GRID_POINTS_VIRT_N + #define ABL_GRID_POINTS_VIRT_Y ABL_GRID_POINTS_VIRT_N + #else + #define ABL_GRID_POINTS_VIRT_X (GRID_MAX_CELLS_X * (BILINEAR_SUBDIVISIONS) + 1) + #define ABL_GRID_POINTS_VIRT_Y (GRID_MAX_CELLS_Y * (BILINEAR_SUBDIVISIONS) + 1) + #endif static float z_values_virt[ABL_GRID_POINTS_VIRT_X][ABL_GRID_POINTS_VIRT_Y]; static xy_pos_t grid_spacing_virt; diff --git a/Marlin/src/feature/bedlevel/bedlevel.cpp b/Marlin/src/feature/bedlevel/bedlevel.cpp index a76c6cdd269e..d8546725a3b3 100644 --- a/Marlin/src/feature/bedlevel/bedlevel.cpp +++ b/Marlin/src/feature/bedlevel/bedlevel.cpp @@ -46,8 +46,16 @@ #include "../../lcd/extui/ui_api.h" #endif +#if ALL(MESH_BED_LEVELING, DWIN_LCD_PROUI) + #include "../../lcd/e3v2/proui/bedlevel_tools.h" +#endif + bool leveling_is_valid() { - return TERN1(HAS_MESH, bedlevel.mesh_is_valid()); + #if ALL(MESH_BED_LEVELING, DWIN_LCD_PROUI) + return bedLevelTools.meshValidate(); + #else + return TERN1(HAS_MESH, bedlevel.mesh_is_valid()); + #endif } /** diff --git a/Marlin/src/feature/bedlevel/bedlevel.h b/Marlin/src/feature/bedlevel/bedlevel.h index e8154392cb31..b50592af509b 100644 --- a/Marlin/src/feature/bedlevel/bedlevel.h +++ b/Marlin/src/feature/bedlevel/bedlevel.h @@ -59,7 +59,7 @@ class TemporaryBedLevelingState { #if HAS_MESH - typedef float bed_mesh_t[TERN(PROUI_ITEM_GRID, GRID_LIMIT, GRID_MAX_POINTS_X)][TERN(PROUI_ITEM_GRID, GRID_LIMIT, GRID_MAX_POINTS_Y)]; + typedef float bed_mesh_t[TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)][TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y)]; #if ENABLED(AUTO_BED_LEVELING_BILINEAR) #include "abl/bbl.h" diff --git a/Marlin/src/feature/bedlevel/hilbert_curve.cpp b/Marlin/src/feature/bedlevel/hilbert_curve.cpp index 57cbdfb34ddd..2dda23bac862 100644 --- a/Marlin/src/feature/bedlevel/hilbert_curve.cpp +++ b/Marlin/src/feature/bedlevel/hilbert_curve.cpp @@ -26,12 +26,21 @@ #include "bedlevel.h" #include "hilbert_curve.h" -constexpr int8_t to_fix(int8_t v) { return v * 2; } -constexpr int8_t to_int(int8_t v) { return v / 2; } -constexpr uint8_t log2(uint8_t n) { return (n > 1) ? 1 + log2(uint8_t(n >> 1)) : 0; } -constexpr uint8_t order(uint8_t n) { return uint8_t(log2(uint8_t(n - 1))) + 1; } -constexpr uint8_t ord = order(_MAX(GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y)); -constexpr uint8_t dim = _BV(ord); +#if PROUI_GRID_PNTS + int8_t to_fix(int8_t v) { return v * 2; } + int8_t to_int(int8_t v) { return v / 2; } + uint8_t log2(uint8_t n) { return (n > 1) ? 1 + log2(uint8_t(n >> 1)) : 0; } + uint8_t order(uint8_t n) { return uint8_t(log2(uint8_t(n - 1))) + 1; } + #define ord order(GRID_MAX_POINTS_X) + #define dim _BV(ord) +#else + constexpr int8_t to_fix(int8_t v) { return v * 2; } + constexpr int8_t to_int(int8_t v) { return v / 2; } + constexpr uint8_t log2(uint8_t n) { return (n > 1) ? 1 + log2(uint8_t(n >> 1)) : 0; } + constexpr uint8_t order(uint8_t n) { return uint8_t(log2(uint8_t(n - 1))) + 1; } + constexpr uint8_t ord = order(_MAX(GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y)); + constexpr uint8_t dim = _BV(ord); +#endif static inline bool eval_candidate(int8_t x, int8_t y, hilbert_curve::callback_ptr func, void *data) { // The print bed likely has fewer points than the full Hilbert diff --git a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp index f40cbccadd79..9a22d8049b82 100644 --- a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp +++ b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp @@ -35,9 +35,15 @@ mesh_bed_leveling bedlevel; float mesh_bed_leveling::z_offset, - mesh_bed_leveling::z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y], + #if PROUI_GRID_PNTS + mesh_bed_leveling::index_to_xpos[GRID_LIMIT], + mesh_bed_leveling::index_to_ypos[GRID_LIMIT]; + bed_mesh_t mesh_bed_leveling::z_values; + #else mesh_bed_leveling::index_to_xpos[GRID_MAX_POINTS_X], mesh_bed_leveling::index_to_ypos[GRID_MAX_POINTS_Y]; + bed_mesh_t mesh_bed_leveling::z_values; + #endif mesh_bed_leveling::mesh_bed_leveling() { for (uint8_t i = 0; i < GRID_MAX_POINTS_X; ++i) diff --git a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h index cb4f36cd59f2..b2e417876fbd 100644 --- a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h +++ b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h @@ -38,9 +38,15 @@ enum MeshLevelingState : char { class mesh_bed_leveling { public: static float z_offset, + #if PROUI_GRID_PNTS + z_values[GRID_LIMIT][GRID_LIMIT], + index_to_xpos[GRID_LIMIT], + index_to_ypos[GRID_LIMIT]; + #else z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y], index_to_xpos[GRID_MAX_POINTS_X], index_to_ypos[GRID_MAX_POINTS_Y]; + #endif mesh_bed_leveling(); diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.cpp b/Marlin/src/feature/bedlevel/ubl/ubl.cpp index 0228bd247ebd..0a5b0f1d68bd 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl.cpp @@ -64,18 +64,18 @@ void unified_bed_leveling::report_state() { int8_t unified_bed_leveling::storage_slot; -float unified_bed_leveling::z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; +bed_mesh_t unified_bed_leveling::z_values; #define _GRIDPOS(A,N) (MESH_MIN_##A + N * (MESH_##A##_DIST)) -const float -unified_bed_leveling::_mesh_index_to_xpos[GRID_MAX_POINTS_X] PROGMEM = ARRAY_N(GRID_MAX_POINTS_X, +const bed_mesh_t +unified_bed_leveling::_mesh_index_to_xpos PROGMEM = ARRAY_N(TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X), _GRIDPOS(X, 0), _GRIDPOS(X, 1), _GRIDPOS(X, 2), _GRIDPOS(X, 3), _GRIDPOS(X, 4), _GRIDPOS(X, 5), _GRIDPOS(X, 6), _GRIDPOS(X, 7), _GRIDPOS(X, 8), _GRIDPOS(X, 9), _GRIDPOS(X, 10), _GRIDPOS(X, 11), _GRIDPOS(X, 12), _GRIDPOS(X, 13), _GRIDPOS(X, 14), _GRIDPOS(X, 15) ), -unified_bed_leveling::_mesh_index_to_ypos[GRID_MAX_POINTS_Y] PROGMEM = ARRAY_N(GRID_MAX_POINTS_Y, +unified_bed_leveling::_mesh_index_to_ypos PROGMEM = ARRAY_N(TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y), _GRIDPOS(Y, 0), _GRIDPOS(Y, 1), _GRIDPOS(Y, 2), _GRIDPOS(Y, 3), _GRIDPOS(Y, 4), _GRIDPOS(Y, 5), _GRIDPOS(Y, 6), _GRIDPOS(Y, 7), _GRIDPOS(Y, 8), _GRIDPOS(Y, 9), _GRIDPOS(Y, 10), _GRIDPOS(Y, 11), @@ -166,7 +166,7 @@ static void serial_echo_column_labels(const uint8_t sp) { void unified_bed_leveling::display_map(const uint8_t map_type) { const bool was = gcode.set_autoreport_paused(true); - constexpr uint8_t eachsp = 1 + 6 + 1, // [-3.567] + IF_DISABLED(PROUI_GRID_PNTS, constexpr) uint8_t eachsp = 1 + 6 + 1, // [-3.567] twixt = eachsp * (GRID_MAX_POINTS_X) - 9 * 2; // Leading 4sp, Coordinates 9sp each const bool human = !(map_type & 0x3), csv = map_type == 1, lcd = map_type == 2, comp = map_type & 0x4; diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.h b/Marlin/src/feature/bedlevel/ubl/ubl.h index 84362f229fe5..47234e203170 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.h +++ b/Marlin/src/feature/bedlevel/ubl/ubl.h @@ -42,7 +42,7 @@ struct mesh_index_pair; #define MESH_Y_DIST (float((MESH_MAX_Y) - (MESH_MIN_Y)) / (GRID_MAX_CELLS_Y)) #if ENABLED(OPTIMIZED_MESH_STORAGE) - typedef int16_t mesh_store_t[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; + typedef int16_t mesh_store_t[TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)][TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y)]; #endif typedef struct { @@ -116,8 +116,9 @@ class unified_bed_leveling { static void set_store_from_mesh(const bed_mesh_t &in_values, mesh_store_t &stored_values); static void set_mesh_from_store(const mesh_store_t &stored_values, bed_mesh_t &out_values); #endif - static const float _mesh_index_to_xpos[TERN(PROUI_ITEM_GRID, GRID_LIMIT, GRID_MAX_POINTS_X)], - _mesh_index_to_ypos[TERN(PROUI_ITEM_GRID, GRID_LIMIT, GRID_MAX_POINTS_Y)]; + + static const bed_mesh_t _mesh_index_to_xpos, + _mesh_index_to_ypos; #if HAS_MARLINUI_MENU static bool lcd_map_control; diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index e68ddb37fe72..f2332c1185b0 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -310,9 +310,10 @@ void unified_bed_leveling::G29() { // Check for commands that require the printer to be homed if (may_move) { planner.synchronize(); - #if ALL(DWIN_LCD_PROUI, ZHOME_BEFORE_LEVELING) + #if ENABLED(DWIN_LCD_PROUI) save_ubl_active_state_and_disable(); gcode.process_subcommands_now(F("G28Z")); + gcode.process_subcommands_now(F("G28XY")); restore_ubl_active_state_and_leave(); #else // Send 'N' to force homing before G29 (internal only) @@ -1445,7 +1446,7 @@ bool unified_bed_leveling::smart_fill_one(const uint8_t x, const uint8_t y, cons return false; } -typedef struct { TERN(PROUI_ITEM_GRID, int, uint8_t) sx, ex, sy, ey; bool yfirst; } smart_fill_info; +typedef struct { TERN(PROUI_GRID_PNTS, int, uint8_t) sx, ex, sy, ey; bool yfirst; } smart_fill_info; void unified_bed_leveling::smart_fill_mesh() { static const smart_fill_info @@ -1687,7 +1688,7 @@ void unified_bed_leveling::smart_fill_mesh() { // being extrapolated so that nearby points will have greater influence on // the point being extrapolated. Then extrapolate the mesh point from WLSF. - static_assert((TERN(PROUI_ITEM_GRID, GRID_LIMIT, GRID_MAX_POINTS_Y)) <= 16, "GRID_MAX_POINTS_Y too big"); + static_assert((TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y)) <= 16, "GRID_MAX_POINTS_Y too big"); uint16_t bitmap[GRID_MAX_POINTS_X] = { 0 }; struct linear_fit_data lsf_results; diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index cca3b1cc7620..cfee82e84a9b 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -53,6 +53,7 @@ #include "../../../lcd/e3v2/creality/dwin.h" #elif ENABLED(DWIN_LCD_PROUI) #include "../../../lcd/e3v2/proui/dwin.h" + #include "../../../lcd/e3v2/proui/meshviewer.h" #endif #define DEBUG_OUT ENABLED(DEBUG_LEVELING_FEATURE) @@ -105,7 +106,7 @@ class G29_State { #elif ENABLED(AUTO_BED_LEVELING_3POINT) static constexpr grid_count_t abl_points = 3; #elif ABL_USES_GRID - static constexpr grid_count_t abl_points = GRID_MAX_POINTS; + TERN(PROUI_GRID_PNTS, const, static constexpr) grid_count_t abl_points = GRID_MAX_POINTS; #endif #if ABL_USES_GRID @@ -121,7 +122,7 @@ class G29_State { bool topography_map; xy_uint8_t grid_points; #else // Bilinear - static constexpr xy_uint8_t grid_points = { GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y }; + IF_DISABLED(PROUI_GRID_PNTS, static constexpr) xy_uint8_t grid_points = { GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y }; #endif #if ENABLED(AUTO_BED_LEVELING_BILINEAR) @@ -139,8 +140,10 @@ class G29_State { }; #if ABL_USES_GRID && ANY(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_BILINEAR) - constexpr xy_uint8_t G29_State::grid_points; - constexpr grid_count_t G29_State::abl_points; + #if DISABLED(PROUI_GRID_PNTS) + constexpr xy_uint8_t G29_State::grid_points; + constexpr grid_count_t G29_State::abl_points; + #endif #endif /** @@ -254,6 +257,12 @@ G29_TYPE GcodeSuite::G29() { // Send 'N' to force homing before G29 (internal only) if (parser.seen_test('N')) process_subcommands_now(TERN(CAN_SET_LEVELING_AFTER_G28, F("G28L0"), FPSTR(G28_STR))); + #if ENABLED(DWIN_LCD_PROUI) + else { + process_subcommands_now(F("G28Z")); + process_subcommands_now(F("G28XY")); + } + #endif // Don't allow auto-leveling without homing first if (homing_needed_error()) G29_RETURN(false, false); @@ -663,7 +672,7 @@ G29_TYPE GcodeSuite::G29() { int8_t inStart, inStop, inInc; - TERN_(DWIN_LCD_PROUI, if (HMI_flag.cancel_lev) break); + TERN_(DWIN_LCD_PROUI, if (hmiFlag.cancel_lev) break); if (zig) { // Zig away from origin inStart = 0; // Left or front @@ -777,12 +786,13 @@ G29_TYPE GcodeSuite::G29() { const float z = abl.measured_z + abl.Z_offset; abl.z_values[abl.meshCount.x][abl.meshCount.y] = z; TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(abl.meshCount, z)); + TERN_(DWIN_LCD_PROUI, meshViewer.drawMeshPoint(abl.meshCount.x, abl.meshCount.y, z)); #endif abl.reenable = false; // Don't re-enable after modifying the mesh idle_no_sleep(); - TERN_(DWIN_LCD_PROUI, if (HMI_flag.cancel_lev) break); + TERN_(DWIN_LCD_PROUI, if (hmiFlag.cancel_lev) break); } // inner } // outer diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 6a24268895c0..7e2a2fb68b49 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -528,7 +528,7 @@ #endif // Extender cable doesn't support SD_DETECT_PIN - #if ENABLED(NO_SD_DETECT) + #if ENABLED(NO_SD_DETECT) && DISABLED(DWIN_LCD_PROUI) #undef SD_DETECT_PIN #endif @@ -3163,7 +3163,7 @@ #ifndef MESH_MAX_Y #define MESH_MAX_Y _MESH_MAX_Y #endif -#else +#elif DISABLED(DWIN_LCD_PROUI) #undef MESH_MIN_X #undef MESH_MIN_Y #undef MESH_MAX_X diff --git a/Marlin/src/inc/MarlinConfigPre.h b/Marlin/src/inc/MarlinConfigPre.h index c2191ab1b74f..1bc81b7f5b27 100644 --- a/Marlin/src/inc/MarlinConfigPre.h +++ b/Marlin/src/inc/MarlinConfigPre.h @@ -60,3 +60,8 @@ #ifndef __MARLIN_DEPS__ #include HAL_PATH(.., inc/Conditionals_adv.h) #endif + +// TODO: for testing different bed leveling +#if ENABLED(DWIN_LCD_PROUI) + //#include "../lcd/e3v2/proui/dwin_defines.h" +#endif \ No newline at end of file diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 122ad2782dbe..620a8c5f6c43 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1498,13 +1498,15 @@ static_assert(NUM_SERVOS <= NUM_SERVO_PLUGS, "NUM_SERVOS (or some servo index) i static_assert(Z_AFTER_PROBING >= 0, "Probes require Z_AFTER_PROBING >= 0."); #endif - #if MULTIPLE_PROBING > 0 || EXTRA_PROBING > 0 - #if MULTIPLE_PROBING == 0 - #error "EXTRA_PROBING requires MULTIPLE_PROBING." - #elif MULTIPLE_PROBING < 2 - #error "MULTIPLE_PROBING must be 2 or more." - #elif MULTIPLE_PROBING <= EXTRA_PROBING - #error "EXTRA_PROBING must be less than MULTIPLE_PROBING." + #if DISABLED(DWIN_LCD_PROUI) + #if MULTIPLE_PROBING > 0 || EXTRA_PROBING > 0 + #if MULTIPLE_PROBING == 0 + #error "EXTRA_PROBING requires MULTIPLE_PROBING." + #elif MULTIPLE_PROBING < 2 + #error "MULTIPLE_PROBING must be 2 or more." + #elif MULTIPLE_PROBING <= EXTRA_PROBING + #error "EXTRA_PROBING must be less than MULTIPLE_PROBING." + #endif #endif #endif @@ -1555,31 +1557,32 @@ static_assert(NUM_SERVOS <= NUM_SERVO_PLUGS, "NUM_SERVOS (or some servo index) i /** * Bed Leveling Requirements */ -#if !PROUI_ITEM_GRID -#if IS_SCARA && ANY(AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - #error "SCARA machines can only use AUTO_BED_LEVELING_BILINEAR or MESH_BED_LEVELING." -#elif ENABLED(AUTO_BED_LEVELING_LINEAR) && !(WITHIN(GRID_MAX_POINTS_X, 2, 255) && WITHIN(GRID_MAX_POINTS_Y, 2, 255)) - #error "GRID_MAX_POINTS_[XY] must be between 2 and 255 with AUTO_BED_LEVELING_LINEAR." -#elif ENABLED(AUTO_BED_LEVELING_BILINEAR) && !(WITHIN(GRID_MAX_POINTS_X, 3, 255) && WITHIN(GRID_MAX_POINTS_Y, 3, 255)) - #error "GRID_MAX_POINTS_[XY] must be between 3 and 255 with AUTO_BED_LEVELING_BILINEAR." -#elif ENABLED(AUTO_BED_LEVELING_UBL) - #if ENABLED(POLAR) - #error "AUTO_BED_LEVELING_UBL does not yet support POLAR printers." - #elif DISABLED(EEPROM_SETTINGS) - #error "AUTO_BED_LEVELING_UBL requires EEPROM_SETTINGS." - #elif !WITHIN(GRID_MAX_POINTS_X, 3, 255) || !WITHIN(GRID_MAX_POINTS_Y, 3, 255) - #error "GRID_MAX_POINTS_[XY] must be between 3 and 255." - #elif ALL(UBL_HILBERT_CURVE, DELTA) - #error "UBL_HILBERT_CURVE can only be used with a square / rectangular printable area." - #endif -#elif ENABLED(MESH_BED_LEVELING) - #if ENABLED(DELTA) - #error "MESH_BED_LEVELING is not compatible with DELTA printers." - #elif (GRID_MAX_POINTS_X) > 9 || (GRID_MAX_POINTS_Y) > 9 - #error "GRID_MAX_POINTS_X and GRID_MAX_POINTS_Y must be less than 10 for MBL." + +#if !PROUI_GRID_PNTS + #if IS_SCARA && ANY(AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + #error "SCARA machines can only use AUTO_BED_LEVELING_BILINEAR or MESH_BED_LEVELING." + #elif ENABLED(AUTO_BED_LEVELING_LINEAR) && !(WITHIN(GRID_MAX_POINTS_X, 2, 255) && WITHIN(GRID_MAX_POINTS_Y, 2, 255)) + #error "GRID_MAX_POINTS_[XY] must be between 2 and 255 with AUTO_BED_LEVELING_LINEAR." + #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) && !(WITHIN(GRID_MAX_POINTS_X, 3, 255) && WITHIN(GRID_MAX_POINTS_Y, 3, 255)) + #error "GRID_MAX_POINTS_[XY] must be between 3 and 255 with AUTO_BED_LEVELING_BILINEAR." + #elif ENABLED(AUTO_BED_LEVELING_UBL) + #if ENABLED(POLAR) + #error "AUTO_BED_LEVELING_UBL does not yet support POLAR printers." + #elif DISABLED(EEPROM_SETTINGS) + #error "AUTO_BED_LEVELING_UBL requires EEPROM_SETTINGS." + #elif !WITHIN(GRID_MAX_POINTS_X, 3, 255) || !WITHIN(GRID_MAX_POINTS_Y, 3, 255) + #error "GRID_MAX_POINTS_[XY] must be between 3 and 255." + #elif ALL(UBL_HILBERT_CURVE, DELTA) + #error "UBL_HILBERT_CURVE can only be used with a square / rectangular printable area." + #endif + #elif ENABLED(MESH_BED_LEVELING) + #if ENABLED(DELTA) + #error "MESH_BED_LEVELING is not compatible with DELTA printers." + #elif (GRID_MAX_POINTS_X) > 9 || (GRID_MAX_POINTS_Y) > 9 + #error "GRID_MAX_POINTS_X and GRID_MAX_POINTS_Y must be less than 10 for MBL." + #endif #endif #endif -#endif #define _POINT_COUNT (defined(PROBE_PT_1) + defined(PROBE_PT_2) + defined(PROBE_PT_3)) #if _POINT_COUNT != 0 && _POINT_COUNT != 3 @@ -1594,10 +1597,10 @@ static_assert(NUM_SERVOS <= NUM_SERVO_PLUGS, "NUM_SERVOS (or some servo index) i #if ALL(HAS_MESH, CLASSIC_JERK) static_assert(DEFAULT_ZJERK > 0.1, "Low DEFAULT_ZJERK values are incompatible with mesh-based leveling."); #endif -#if !PROUI_ITEM_GRID -#if HAS_MESH && DGUS_LCD_UI_IA_CREALITY && GRID_MAX_POINTS > 25 - #error "DGUS_LCD_UI IA_CREALITY requires a mesh with no more than 25 points as defined by GRID_MAX_POINTS_X/Y." -#endif +#if !PROUI_GRID_PNTS + #if HAS_MESH && DGUS_LCD_UI_IA_CREALITY && GRID_MAX_POINTS > 25 + #error "DGUS_LCD_UI IA_CREALITY requires a mesh with no more than 25 points as defined by GRID_MAX_POINTS_X/Y." + #endif #endif #if ENABLED(G26_MESH_VALIDATION) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 0dbac3903d61..04063ae8cdf6 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -1535,20 +1535,20 @@ void dwinHomingDone() { #endif } - void dwinLevelingDone() { - #if HAS_MESH - if (hmiFlag.cancel_lev) { - probe.stow(); - reset_bed_level(); - hmiReturnScreen(); - dwinUpdateLCD(); - ui.set_status(F("Mesh was cancelled")); - } - else { - gotoMeshViewer(true); - } - #endif - } + #if ALL(HAS_MESH, HAS_BED_PROBE) + void dwinLevelingDone() { + if (hmiFlag.cancel_lev) { + probe.stow(); + reset_bed_level(); + hmiReturnScreen(); + dwinUpdateLCD(); + ui.set_status(F("Mesh was cancelled")); + } + else { + gotoMeshViewer(true); + } + } + #endif #endif // HAS_LEVELING #if HAS_MESH @@ -1864,14 +1864,10 @@ void dwinSetDataDefaults() { TERN_(ADAPTIVE_STEP_SMOOTHING, hmiData.adaptiveStepSmoothing = true); TERN_(HAS_GCODE_PREVIEW, hmiData.enablePreview = true); #if HAS_BED_PROBE - IF_DISABLED(BD_SENSOR, hmiData.multipleProbing = MULTIPLE_PROBING); + IF_DISABLED(BD_SENSOR, hmiData.multiple_probing = MULTIPLE_PROBING); hmiData.zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; #endif - #if HAS_MESH - hmiData.mesh_min_x = DEF_MESH_MIN_X; - hmiData.mesh_max_x = DEF_MESH_MAX_X; - hmiData.mesh_min_y = DEF_MESH_MIN_Y; - hmiData.mesh_max_y = DEF_MESH_MAX_Y; + #if ENABLED(PROUI_MESH_EDIT) hmiData.grid_max_points = DEF_GRID_MAX_POINTS; #endif @@ -2318,8 +2314,8 @@ void setMoveZ() { hmiValue.axis = Z_AXIS; setPFloatOnClick(Z_MIN_POS, Z_MAX_POS, #endif #if DISABLED(BD_SENSOR) - void applyProbeMultiple() { hmiData.multipleProbing = menuData.value; } - void setProbeMultiple() { setIntOnClick(0, 4, hmiData.multipleProbing, applyProbeMultiple); } + void applyProbeMultiple() { hmiData.multiple_probing = menuData.value; } + void setProbeMultiple() { setIntOnClick(0, 4, hmiData.multiple_probing, applyProbeMultiple); } #endif void setProbeZSpeed() { setPIntOnClick(60, 1000); } @@ -3312,7 +3308,7 @@ void drawMoveMenu() { #if HAS_Z_AXIS EDIT_ITEM(ICON_ProbeOffsetZ, MSG_ZPROBE_ZOFFSET, onDrawPFloat2Menu, setProbeOffsetZ, &probe.offset.z); #endif - IF_DISABLED(BD_SENSOR, EDIT_ITEM(ICON_Cancel, MSG_ZPROBE_MULTIPLE, onDrawPInt8Menu, setProbeMultiple, &hmiData.multipleProbing)); + IF_DISABLED(BD_SENSOR, EDIT_ITEM(ICON_Cancel, MSG_ZPROBE_MULTIPLE, onDrawPInt8Menu, setProbeMultiple, &hmiData.multiple_probing)); EDIT_ITEM(ICON_ProbeZSpeed, MSG_Z_FEED_RATE, onDrawPIntMenu, setProbeZSpeed, &hmiData.zprobeFeed); #if ENABLED(BLTOUCH) MENU_ITEM(ICON_ProbeStow, MSG_MANUAL_STOW, onDrawMenuItem, probeStow); @@ -4174,7 +4170,6 @@ void drawMaxAccelMenu() { MENU_ITEM(ICON_MeshEdit, MSG_EDIT_MESH, onDrawSubMenu, drawEditMeshMenu); #endif MENU_ITEM(ICON_MeshViewer, MSG_MESH_VIEW, onDrawSubMenu, dwinMeshViewer); - MENU_ITEM(ICON_PrintSize, MSG_MESH_LEVELING, onDrawSubMenu, drawMeshInsetMenu); } updateMenu(meshMenu); } @@ -4184,32 +4179,23 @@ void drawMaxAccelMenu() { if (!leveling_is_valid()) { LCD_MESSAGE(MSG_UBL_MESH_INVALID); return; } set_bed_leveling_enabled(false); checkkey = ID_Menu; - if (SET_MENU(editMeshMenu, MSG_EDIT_MESH, 4)) { + if (SET_MENU(editMeshMenu, MSG_EDIT_MESH, 10)) { bedLevelTools.mesh_x = bedLevelTools.mesh_y = 0; BACK_ITEM(drawMeshSetMenu); EDIT_ITEM(ICON_MeshEditX, MSG_MESH_X, onDrawPInt8Menu, setEditMeshX, &bedLevelTools.mesh_x); EDIT_ITEM(ICON_MeshEditY, MSG_MESH_Y, onDrawPInt8Menu, setEditMeshY, &bedLevelTools.mesh_y); editZValueItem = EDIT_ITEM(ICON_MeshEditZ, MSG_MESH_EDIT_Z, onDrawPFloat2Menu, setEditZValue, &bedlevel.z_values[bedLevelTools.mesh_x][bedLevelTools.mesh_y]); + EDIT_ITEM(200 /*ICON_Box*/, MSG_MESH_MIN_X, onDrawPFloatMenu, setMeshInset, &ui.mesh_inset_min_x); + EDIT_ITEM(ICON_ProbeMargin, MSG_MESH_MAX_X, onDrawPFloatMenu, setMeshInset, &ui.mesh_inset_max_x); + EDIT_ITEM(200 /*ICON_Box*/, MSG_MESH_MIN_Y, onDrawPFloatMenu, setMeshInset, &ui.mesh_inset_min_y); + EDIT_ITEM(ICON_ProbeMargin, MSG_MESH_MAX_Y, onDrawPFloatMenu, setMeshInset, &ui.mesh_inset_max_y); + //MENU_ITEM(254 /*ICON_AxisC*/, MSG_MESH_AMAX, onDrawMenuItem, maxMeshArea); + //MENU_ITEM(ICON_SetHome, MSG_MESH_CENTER, onDrawMenuItem, centerMeshArea); } updateMenu(editMeshMenu); } #endif - void drawMeshInsetMenu() { - checkkey = ID_Menu; - if (SET_MENU(meshInsetMenu, MSG_MESH_INSET, 7)) { - BACK_ITEM(drawMeshSetMenu); - EDIT_ITEM(200 /*ICON_Box*/, MSG_MESH_MIN_X, onDrawPFloatMenu, setMeshInset, &hmiData.mesh_min_x); - EDIT_ITEM(ICON_ProbeMargin, MSG_MESH_MAX_X, onDrawPFloatMenu, setMeshInset, &hmiData.mesh_max_x); - EDIT_ITEM(200 /*ICON_Box*/, MSG_MESH_MIN_Y, onDrawPFloatMenu, setMeshInset, &hmiData.mesh_min_y); - EDIT_ITEM(ICON_ProbeMargin, MSG_MESH_MAX_Y, onDrawPFloatMenu, setMeshInset, &hmiData.mesh_max_y); - //MENU_ITEM(254 /*ICON_AxisC*/, MSG_MESH_AMAX, onDrawMenuItem, maxMeshArea); - //MENU_ITEM(ICON_SetHome, MSG_MESH_CENTER, onDrawMenuItem, centerMeshArea); - } - updateMenu(meshInsetMenu); - //LCD_MESSAGE_F("..Center Area sets mesh equidistant by greatest inset from edge."); - } - #endif // HAS_MESH #endif // DWIN_LCD_PROUI diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index f7b54b7cabb5..d7bb17673844 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -155,16 +155,10 @@ typedef struct { bool enablePreview = true; #endif #if HAS_BED_PROBE - #if DISABLED(BD_SENSOR) - uint8_t multipleProbing = MULTIPLE_PROBING; - #endif + IF_DISABLED(BD_SENSOR, uint8_t multiple_probing = MULTIPLE_PROBING); uint16_t zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; #endif - float mesh_min_x = DEF_MESH_MIN_X; - float mesh_max_x = DEF_MESH_MAX_X; - float mesh_min_y = DEF_MESH_MIN_Y; - float mesh_max_y = DEF_MESH_MAX_Y; - uint8_t grid_max_points = DEF_GRID_MAX_POINTS; + TERN_(PROUI_GRID_PNTS, uint8_t grid_max_points = DEF_GRID_MAX_POINTS); } hmi_data_t; extern hmi_data_t hmiData; @@ -426,3 +420,7 @@ void drawMaxAccelMenu(); void dwinMPCTuning(tempcontrol_t result); #endif #endif + +// /** +// * ProUI extra features +// */ diff --git a/Marlin/src/lcd/e3v2/proui/dwin_defines.h b/Marlin/src/lcd/e3v2/proui/dwin_defines.h index 93f16ba85422..991183b5e398 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin_defines.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_defines.h @@ -83,10 +83,16 @@ /** * ProUI internal feature flags */ -#define PROUI_MESH_EDIT // Add a menu to edit mesh points -#if ENABLED(PROUI_MESH_EDIT) - #define Z_OFFSET_MIN -3.0 // (mm) - #define Z_OFFSET_MAX 3.0 // (mm) +#if HAS_MESH + #define PROUI_MESH_EDIT // Add a menu to edit mesh inset + points + #if ENABLED(PROUI_MESH_EDIT) + #define Z_OFFSET_MIN -3.0 // (mm) + #define Z_OFFSET_MAX 3.0 // (mm) + #endif + #define PROUI_GRID_PNTS 1 // Add a menu item to change GRID_MAX_POINTS - grid array +#endif +#if HAS_BED_PROBE + #define PROUI_ITEM_ZFRS // Add a menu item to change Z_PROBE_FEEDRATE_SLOW - probe speed #endif #if ALL(SDCARD_SORT_ALPHA, SDSORT_GCODE) #define PROUI_MEDIASORT // Enable option to sort G-code files @@ -106,13 +112,6 @@ #if PROUI_TUNING_GRAPH #define PROUI_ITEM_PLOT // Plot temp graph viewer #endif -#if HAS_BED_PROBE - #define PROUI_ITEM_ZFRS // Change Z_PROBE_FEEDRATE_SLOW - probe speed -#endif -#if HAS_MESH - #define PROUI_ITEM_GRID 1 // Change GRID_MAX_POINTS - grid array - #define PROUI_ITEM_MESH 1 // Change MESH_INSET - mesh size -#endif #define HAS_GCODE_PREVIEW 1 // Preview G-code model thumbnail #define HAS_CUSTOM_COLORS 1 // Change display colors #define HAS_ESDIAG 1 // View End-stop/Runout switch continuity @@ -122,13 +121,26 @@ /** * ProUI extra features */ +#include "../../../core/types.h" #if HAS_BED_PROBE constexpr uint16_t DEF_Z_PROBE_FEEDRATE_SLOW = Z_PROBE_FEEDRATE_SLOW; #undef Z_PROBE_FEEDRATE_SLOW #define Z_PROBE_FEEDRATE_SLOW hmiData.zprobeFeed #endif -#if PROUI_ITEM_MESH +#if PROUI_GRID_PNTS + constexpr uint8_t DEF_GRID_MAX_POINTS = GRID_MAX_POINTS_X; + #undef GRID_MAX_POINTS_X + #undef GRID_MAX_POINTS_Y + #undef GRID_MAX_POINTS + #define GRID_MAX_POINTS_X hmiData.grid_max_points + #define GRID_MAX_POINTS_Y hmiData.grid_max_points + #define GRID_MAX_POINTS (hmiData.grid_max_points * hmiData.grid_max_points) + #define GRID_MIN 3 + #define GRID_LIMIT 9 +#endif + +#if ENABLED(PROUI_MESH_EDIT) #ifndef MESH_INSET #define MESH_INSET 10 #endif @@ -149,23 +161,18 @@ constexpr uint16_t DEF_MESH_MIN_Y = MESH_MIN_Y; constexpr uint16_t DEF_MESH_MAX_Y = MESH_MAX_Y; #undef MESH_MIN_X - #undef MESH_MIN_Y #undef MESH_MAX_X + #undef MESH_MIN_Y #undef MESH_MAX_Y - #define MESH_MIN_X hmiData.mesh_min_x - #define MESH_MIN_Y hmiData.mesh_max_x - #define MESH_MAX_X hmiData.mesh_min_y - #define MESH_MAX_Y hmiData.mesh_max_y + //#include "../../marlinui.h" + #define MESH_MIN_X ui.mesh_inset_min_x + #define MESH_MAX_X ui.mesh_inset_max_x + #define MESH_MIN_Y ui.mesh_inset_min_y + #define MESH_MAX_Y ui.mesh_inset_max_y + #define MIN_MESH_INSET 0 + #define MAX_MESH_INSET X_BED_SIZE #endif -#if PROUI_ITEM_GRID - constexpr uint16_t DEF_GRID_MAX_POINTS = GRID_MAX_POINTS_X; - #undef GRID_MAX_POINTS_X - #undef GRID_MAX_POINTS_Y - #undef GRID_MAX_POINTS - #define GRID_MAX_POINTS_X hmiData.grid_max_points - #define GRID_MAX_POINTS_Y hmiData.grid_max_points - #define GRID_MAX_POINTS (hmiData.grid_max_points * hmiData.grid_max_points) - #define GRID_MIN 3 - #define GRID_LIMIT 9 +#ifndef MULTIPLE_PROBING + #define MULTIPLE_PROBING 0 #endif diff --git a/Marlin/src/lcd/e3v2/proui/dwin_popup.h b/Marlin/src/lcd/e3v2/proui/dwin_popup.h index fa55b286fb25..ceaf8ebd3999 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin_popup.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_popup.h @@ -28,7 +28,6 @@ * Date: 2022/02/28 */ -#include "dwinui.h" #include "dwin.h" typedef void (*popupDrawFunc_t)(); diff --git a/Marlin/src/lcd/e3v2/proui/meshviewer.cpp b/Marlin/src/lcd/e3v2/proui/meshviewer.cpp index 1c5f08bb4dfa..0f545e60a306 100644 --- a/Marlin/src/lcd/e3v2/proui/meshviewer.cpp +++ b/Marlin/src/lcd/e3v2/proui/meshviewer.cpp @@ -33,7 +33,6 @@ #include "../../../core/types.h" #include "../../marlinui.h" -#include "dwin.h" #include "dwin_popup.h" #include "../../../feature/bedlevel/bedlevel.h" #include "meshviewer.h" diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 313131d87aba..fdea7fa4285b 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -67,6 +67,13 @@ MarlinUI ui; constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; +#if ALL(DWIN_LCD_PROUI, HAS_MESH) + float MarlinUI::mesh_inset_min_x = DEF_MESH_MIN_X; + float MarlinUI::mesh_inset_max_x = DEF_MESH_MAX_X; + float MarlinUI::mesh_inset_min_y = DEF_MESH_MIN_Y; + float MarlinUI::mesh_inset_max_y = DEF_MESH_MAX_Y; +#endif + #if HAS_STATUS_MESSAGE #if ENABLED(STATUS_MESSAGE_SCROLLING) && ANY(HAS_WIRED_LCD, DWIN_LCD_PROUI) uint8_t MarlinUI::status_scroll_offset; // = 0 diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index 04f4aea24ff7..892248051c5a 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -198,6 +198,22 @@ class MarlinUI { TERN_(HAS_MARLINUI_MENU, currentScreen = status_screen); } + #if ALL(DWIN_LCD_PROUI, HAS_MESH) + static float mesh_inset_min_x; + static float mesh_inset_max_x; + static float mesh_inset_min_y; + static float mesh_inset_max_y; + // TODO: workaround for mesh inset not working for MESH_BED_LEVELING + // #undef MESH_MIN_X + // #undef MESH_MAX_X + // #undef MESH_MIN_Y + // #undef MESH_MAX_Y + // #define MESH_MIN_X ui.mesh_inset_min_x + // #define MESH_MAX_X ui.mesh_inset_max_x + // #define MESH_MIN_Y ui.mesh_inset_min_y + // #define MESH_MAX_Y ui.mesh_inset_max_y + #endif + static void init(); #if HAS_DISPLAY || HAS_DWIN_E3V2 diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index c7558db43fc4..0739bb9e833a 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -30,10 +30,6 @@ #include "../inc/MarlinConfig.h" -#if ALL(DWIN_LCD_PROUI, INDIVIDUAL_AXIS_HOMING_SUBMENU, MESH_BED_LEVELING) - #include "../lcd/e3v2/proui/dwin.h" -#endif - #if IS_SCARA #include "scara.h" #elif ENABLED(POLAR) @@ -237,9 +233,7 @@ inline float home_bump_mm(const AxisEnum axis) { extern soft_endstops_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 - #endif + OPTARG(HAS_HOTEND_OFFSET, const uint8_t old_tool_index=0, const uint8_t new_tool_index=0) ); #define SET_SOFT_ENDSTOP_LOOSE(loose) (soft_endstop._loose = loose) @@ -414,7 +408,10 @@ void restore_feedrate_and_scaling(); #if HAS_Z_AXIS #if ALL(DWIN_LCD_PROUI, INDIVIDUAL_AXIS_HOMING_SUBMENU, MESH_BED_LEVELING) + #include "../lcd/e3v2/proui/dwin.h" + #ifndef Z_POST_CLEARANCE #define Z_POST_CLEARANCE hmiData.zAfterHoming + #endif #elif defined(Z_AFTER_HOMING) #define Z_POST_CLEARANCE Z_AFTER_HOMING #else diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 59c74ab1f16c..4b56c8843b0b 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -949,14 +949,14 @@ float Probe::run_z_probe(const bool sanity_check/*=true*/, const_float_t z_min_p const float z1 = current_position.z; // Do a slow probe for the last probe - for (uint8_t p = 0; p < hmiData.multipleProbing - 1; p++) { + for (uint8_t p = 0; p < hmiData.multiple_probing - 1; p++) { if (try_to_probe(PSTR("SLOW"), z_probe_low_point, MMM_TO_MMS(Z_PROBE_FEEDRATE_SLOW), sanity_check)) return NAN; const float z = current_position.z; probes_z_sum += z; } // Calculate the average measured Z value probes_z_sum += z1; - const float measured_z = probes_z_sum * RECIPROCAL(hmiData.multipleProbing); + const float measured_z = probes_z_sum * RECIPROCAL(hmiData.multiple_probing); return DIFF_TERN(HAS_HOTEND_OFFSET, measured_z, hotend_offset[active_extruder].z); } @@ -1013,7 +1013,7 @@ float Probe::run_z_probe(const bool sanity_check/*=true*/, const_float_t z_min_p do_z_clearance(z1 + (Z_CLEARANCE_MULTI_PROBE), false); float probes_z_sum = 0; - for (uint8_t p = 0; p < hmiData.multipleProbing; p++) { + for (uint8_t p = 0; p < hmiData.multiple_probing; p++) { // If the probe won't tare, return if (TERN0(PROBE_TARE, tare())) return true; @@ -1026,10 +1026,10 @@ float Probe::run_z_probe(const bool sanity_check/*=true*/, const_float_t z_min_p const float z = DIFF_TERN(HAS_DELTA_SENSORLESS_PROBING, current_position.z, largest_sensorless_adj); probes_z_sum += z; // Small Z raise after all but the last probe - if (p < hmiData.multipleProbing - 1) do_z_clearance(z + (Z_CLEARANCE_MULTI_PROBE), false); + if (p < hmiData.multiple_probing - 1) do_z_clearance(z + (Z_CLEARANCE_MULTI_PROBE), false); } - const float measured_z = (z1 + probes_z_sum) * RECIPROCAL(hmiData.multipleProbing); + const float measured_z = (z1 + probes_z_sum) * RECIPROCAL(hmiData.multiple_probing); return DIFF_TERN(HAS_HOTEND_OFFSET, measured_z, hotend_offset[active_extruder].z); } diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index b382f80d5149..b42e571bf38a 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -269,8 +269,8 @@ typedef struct SettingsDataStruct { float mbl_z_offset; // bedlevel.z_offset uint8_t mesh_num_x, mesh_num_y; // GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y uint16_t mesh_check; // Hash to check against X/Y - float mbl_z_values[TERN(MESH_BED_LEVELING, GRID_MAX_POINTS_X, 3)] // bedlevel.z_values - [TERN(MESH_BED_LEVELING, GRID_MAX_POINTS_Y, 3)]; + float mbl_z_values[TERN(MESH_BED_LEVELING, TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X), 3)] // bedlevel.z_values + [TERN(MESH_BED_LEVELING, TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y), 3)]; // // HAS_BED_PROBE @@ -581,6 +581,16 @@ typedef struct SettingsDataStruct { bool sound_on; #endif + // + // MESH_INSET workaround + // + #if ALL(DWIN_LCD_PROUI, HAS_MESH) + float ui_mesh_inset_min_x; + float ui_mesh_inset_max_x; + float ui_mesh_inset_min_y; + float ui_mesh_inset_max_y; + #endif + // // Fan tachometer check // @@ -938,15 +948,15 @@ void MarlinSettings::postprocess() { { #if ENABLED(MESH_BED_LEVELING) static_assert( - sizeof(bedlevel.z_values) == GRID_MAX_POINTS * sizeof(bedlevel.z_values[0][0]), + sizeof(bedlevel.z_values) == TERN(PROUI_GRID_PNTS, GRID_LIMIT * GRID_LIMIT, GRID_MAX_POINTS) * sizeof(bedlevel.z_values[0][0]), "MBL Z array is the wrong size." ); #else dummyf = 0; #endif - const uint8_t mesh_num_x = TERN(MESH_BED_LEVELING, GRID_MAX_POINTS_X, 3), - mesh_num_y = TERN(MESH_BED_LEVELING, GRID_MAX_POINTS_Y, 3); + const uint8_t mesh_num_x = TERN(MESH_BED_LEVELING, TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X), 3), + mesh_num_y = TERN(MESH_BED_LEVELING, TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y), 3); EEPROM_WRITE(TERN(MESH_BED_LEVELING, bedlevel.z_offset, dummyf)); EEPROM_WRITE(mesh_num_x); @@ -996,13 +1006,13 @@ void MarlinSettings::postprocess() { { #if ENABLED(AUTO_BED_LEVELING_BILINEAR) static_assert( - sizeof(bedlevel.z_values) == GRID_MAX_POINTS * sizeof(bedlevel.z_values[0][0]), + sizeof(bedlevel.z_values) == TERN(PROUI_GRID_PNTS, GRID_LIMIT * GRID_LIMIT, GRID_MAX_POINTS) * sizeof(bedlevel.z_values[0][0]), "Bilinear Z array is the wrong size." ); #endif - const uint8_t grid_max_x = TERN(AUTO_BED_LEVELING_BILINEAR, GRID_MAX_POINTS_X, 3), - grid_max_y = TERN(AUTO_BED_LEVELING_BILINEAR, GRID_MAX_POINTS_Y, 3); + const uint8_t grid_max_x = TERN(AUTO_BED_LEVELING_BILINEAR, TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X), 3), + grid_max_y = TERN(AUTO_BED_LEVELING_BILINEAR, TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y), 3); EEPROM_WRITE(grid_max_x); EEPROM_WRITE(grid_max_y); @@ -1626,6 +1636,16 @@ void MarlinSettings::postprocess() { } #endif + // + // MESH_INSET workaround + // + #if ALL(DWIN_LCD_PROUI, HAS_MESH) + EEPROM_WRITE(ui.mesh_inset_min_x); + EEPROM_WRITE(ui.mesh_inset_max_x); + EEPROM_WRITE(ui.mesh_inset_min_y); + EEPROM_WRITE(ui.mesh_inset_max_y); + #endif + // // Case Light Brightness // @@ -2699,6 +2719,19 @@ void MarlinSettings::postprocess() { EEPROM_READ(dwin_data); if (!validating) dwinCopySettingsFrom(dwin_data); } + + // MESH_INSET workaround + #if ALL(DWIN_LCD_PROUI, HAS_MESH) + _FIELD_TEST(ui_mesh_inset_min_x); + EEPROM_READ(ui.mesh_inset_min_x); + _FIELD_TEST(ui_mesh_inset_max_x); + EEPROM_READ(ui.mesh_inset_max_x); + _FIELD_TEST(ui_mesh_inset_min_y); + EEPROM_READ(ui.mesh_inset_min_y); + _FIELD_TEST(ui_mesh_inset_max_y); + EEPROM_READ(ui.mesh_inset_max_y); + #endif + #elif ENABLED(DWIN_CREALITY_LCD_JYERSUI) { const char dwin_settings[jyersDWIN.eeprom_data_size] = { 0 }; @@ -2994,7 +3027,7 @@ void MarlinSettings::postprocess() { uint16_t crc = 0; #if ENABLED(OPTIMIZED_MESH_STORAGE) - int16_t z_mesh_store[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; + int16_t z_mesh_store[TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)][TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y)]; bedlevel.set_store_from_mesh(bedlevel.z_values, z_mesh_store); uint8_t * const src = (uint8_t*)&z_mesh_store; #else @@ -3030,7 +3063,7 @@ void MarlinSettings::postprocess() { int pos = mesh_slot_offset(slot); uint16_t crc = 0; #if ENABLED(OPTIMIZED_MESH_STORAGE) - int16_t z_mesh_store[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; + int16_t z_mesh_store[TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)][TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y)]; uint8_t * const dest = (uint8_t*)&z_mesh_store; #else uint8_t * const dest = into ? (uint8_t*)into : (uint8_t*)&bedlevel.z_values; @@ -3042,7 +3075,7 @@ void MarlinSettings::postprocess() { #if ENABLED(OPTIMIZED_MESH_STORAGE) if (into) { - float z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; + float z_values[TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)][TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y)]; bedlevel.set_mesh_from_store(z_mesh_store, z_values); memcpy(into, z_values, sizeof(z_values)); } @@ -3205,6 +3238,16 @@ void MarlinSettings::reset() { TERN_(DWIN_CREALITY_LCD_JYERSUI, jyersDWIN.resetSettings()); + // + // MESH_INSET workaround + // + #if ALL(DWIN_LCD_PROUI, HAS_MESH) + ui.mesh_inset_min_x = MESH_INSET; + ui.mesh_inset_max_x = (X_BED_SIZE - MESH_INSET); + ui.mesh_inset_min_y = MESH_INSET; + ui.mesh_inset_max_y = (Y_BED_SIZE - MESH_INSET); + #endif + // // Case Light Brightness // From 581803b913c039c8a4cb02e5c4021697ad6729c6 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Wed, 7 Feb 2024 12:28:40 -0500 Subject: [PATCH 16/47] couple tweaks --- Marlin/src/feature/bedlevel/abl/bbl.cpp | 8 ++++---- Marlin/src/gcode/bedlevel/abl/G29.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Marlin/src/feature/bedlevel/abl/bbl.cpp b/Marlin/src/feature/bedlevel/abl/bbl.cpp index 49af22fac273..799133c3f319 100644 --- a/Marlin/src/feature/bedlevel/abl/bbl.cpp +++ b/Marlin/src/feature/bedlevel/abl/bbl.cpp @@ -37,12 +37,12 @@ LevelingBilinear bedlevel; -xy_pos_t LevelingBilinear::grid_spacing, - LevelingBilinear::grid_start; xy_float_t LevelingBilinear::grid_factor; -bed_mesh_t LevelingBilinear::z_values; -xy_pos_t LevelingBilinear::cached_rel; +xy_pos_t LevelingBilinear::grid_spacing, + LevelingBilinear::grid_start, + LevelingBilinear::cached_rel; xy_int8_t LevelingBilinear::cached_g; +bed_mesh_t LevelingBilinear::z_values; /** * Extrapolate a single point from its neighbors diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index cfee82e84a9b..6b314a7d9d0c 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -258,10 +258,10 @@ G29_TYPE GcodeSuite::G29() { if (parser.seen_test('N')) process_subcommands_now(TERN(CAN_SET_LEVELING_AFTER_G28, F("G28L0"), FPSTR(G28_STR))); #if ENABLED(DWIN_LCD_PROUI) - else { - process_subcommands_now(F("G28Z")); - process_subcommands_now(F("G28XY")); - } + else { + process_subcommands_now(F("G28Z")); + process_subcommands_now(F("G28XY")); + } #endif // Don't allow auto-leveling without homing first From 70e9ed7efd5e17fc8c7af0c6d847fb019e2a69b6 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Thu, 8 Feb 2024 03:05:05 -0500 Subject: [PATCH 17/47] update drawmeshpoints --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 40 +++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 04063ae8cdf6..ffe482659a0d 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -4050,28 +4050,28 @@ void drawMaxAccelMenu() { //============================================================================= #if HAS_MESH - void drawMeshPoints(bool selected, int8_t line, int8_t value) { - char mpmsg[10]; - sprintf(mpmsg, "%ix%i", value, value); - if (selected) { DWINUI::drawString(DWINUI::textColor, hmiData.colorSelected, VALX + MENU_CHR_H, MBASE(line), mpmsg); } - else { DWINUI::drawString(VALX + MENU_CHR_H, MBASE(line), mpmsg); } - } - void onDrawMeshPoints(MenuItem* menuitem, int8_t line) { - onDrawMenuItem(menuitem, line); - drawMeshPoints(false, line, hmiData.grid_max_points); - redrawItem(); - } + void drawMeshPoints(bool selected, int8_t line, int8_t value) { + char mpmsg[10]; + sprintf(mpmsg, "%ix%i", value, value); + if (selected) { DWINUI::drawString(DWINUI::textColor, hmiData.colorSelected, VALX + MENU_CHR_H, MBASE(line), mpmsg); } + else { DWINUI::drawString(VALX + MENU_CHR_H, MBASE(line), mpmsg); } + } + void onDrawMeshPoints(MenuItem* menuitem, int8_t line) { + onDrawMenuItem(menuitem, line); + drawMeshPoints(false, line, hmiData.grid_max_points); + redrawItem(); + } - void applyMeshPoints() { hmiData.grid_max_points = menuData.value; } + void applyMeshPoints() { hmiData.grid_max_points = menuData.value; redrawItem(); } - void setMeshPoints() { setPIntOnClick(GRID_MIN, GRID_LIMIT, applyMeshPoints); } + void setMeshPoints() { setPIntOnClick(GRID_MIN, GRID_LIMIT, applyMeshPoints); } - // void ApplyMeshPoints() { ProEx.ApplyMeshPoints(); redrawMenu(); } - // void LiveMeshPoints() { drawMeshPoints(true, currentMenu->line(), menuData.value); } - // void SetMeshPoints() { - // setOnClick(ID_SetIntNoDraw, GRID_MIN, GRID_LIMIT, 0, hmiData.grid_max_points, ApplyMeshPoints, LiveMeshPoints); - // ProEx.DrawMeshPoints(true, currentMenu->line(), hmiData.grid_max_points); - // } + // void ApplyMeshPoints() { applyMeshPoints(); redrawMenu(); } + // void LiveMeshPoints() { drawMeshPoints(true, currentMenu->line(), menuData.value); } + void SetMeshPoints() { + setOnClick(ID_SetIntNoDraw, GRID_MIN, GRID_LIMIT, 0, hmiData.grid_max_points, applyMeshPoints); + drawMeshPoints(true, currentMenu->line(), hmiData.grid_max_points); + } void applyMeshFadeHeight() { set_z_fade_height(planner.z_fade_height); } void setMeshFadeHeight() { setPFloatOnClick(0, 100, 1, applyMeshFadeHeight); } @@ -4151,7 +4151,7 @@ void drawMaxAccelMenu() { EDIT_ITEM(ICON_Temperature, MSG_UBL_SET_TEMP_BED, onDrawPIntMenu, setBedLevT, &hmiData.bedLevT); #endif EDIT_ITEM(ICON_MeshPoints, MSG_MESH_POINTS, onDrawPInt8Menu, setMeshPoints, &hmiData.grid_max_points); - MENU_ITEM(ICON_MeshPoints, MSG_MESH_POINTS, onDrawMeshPoints, setMeshPoints); + MENU_ITEM(ICON_MeshPoints, MSG_MESH_POINTS, onDrawMeshPoints, SetMeshPoints); EDIT_ITEM(ICON_SetZOffset, MSG_Z_FADE_HEIGHT, onDrawPFloatMenu, setMeshFadeHeight, &planner.z_fade_height); EDIT_ITEM(ICON_UBLActive, MSG_ACTIVATE_MESH, onDrawChkbMenu, setMeshActive, &planner.leveling_active); #if HAS_BED_PROBE From ef22fecd2f4fc2f498352651af49289dbdf2475b Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Thu, 8 Feb 2024 04:00:42 -0500 Subject: [PATCH 18/47] update fix for Mesh bed leveling + the others --- Marlin/src/inc/MarlinConfigPre.h | 6 +++--- Marlin/src/lcd/e3v2/proui/dwin.h | 24 ++++++++++++++++++++++++ Marlin/src/lcd/e3v2/proui/dwin_defines.h | 18 ------------------ 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/Marlin/src/inc/MarlinConfigPre.h b/Marlin/src/inc/MarlinConfigPre.h index 1bc81b7f5b27..65776336305f 100644 --- a/Marlin/src/inc/MarlinConfigPre.h +++ b/Marlin/src/inc/MarlinConfigPre.h @@ -61,7 +61,7 @@ #include HAL_PATH(.., inc/Conditionals_adv.h) #endif -// TODO: for testing different bed leveling +// ProUI extra featuresW #if ENABLED(DWIN_LCD_PROUI) - //#include "../lcd/e3v2/proui/dwin_defines.h" -#endif \ No newline at end of file + #include "../lcd/e3v2/proui/dwin_defines.h" +#endif diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index d7bb17673844..eb197b1992a1 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -424,3 +424,27 @@ void drawMaxAccelMenu(); // /** // * ProUI extra features // */ +#if PROUI_GRID_PNTS + #undef GRID_MAX_POINTS_X + #undef GRID_MAX_POINTS_Y + #undef GRID_MAX_POINTS + #define GRID_MAX_POINTS_X hmiData.grid_max_points + #define GRID_MAX_POINTS_Y hmiData.grid_max_points + #define GRID_MAX_POINTS (hmiData.grid_max_points * hmiData.grid_max_points) +#endif +#if HAS_BED_PROBE + #undef Z_PROBE_FEEDRATE_SLOW + #define Z_PROBE_FEEDRATE_SLOW hmiData.zprobeFeed +#endif + +#if HAS_MESH + #undef MESH_MIN_X + #undef MESH_MAX_X + #undef MESH_MIN_Y + #undef MESH_MAX_Y + #include "../../marlinui.h" + #define MESH_MIN_X ui.mesh_inset_min_x + #define MESH_MAX_X ui.mesh_inset_max_x + #define MESH_MIN_Y ui.mesh_inset_min_y + #define MESH_MAX_Y ui.mesh_inset_max_y +#endif \ No newline at end of file diff --git a/Marlin/src/lcd/e3v2/proui/dwin_defines.h b/Marlin/src/lcd/e3v2/proui/dwin_defines.h index 991183b5e398..d9fefb656013 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin_defines.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_defines.h @@ -121,21 +121,12 @@ /** * ProUI extra features */ -#include "../../../core/types.h" #if HAS_BED_PROBE constexpr uint16_t DEF_Z_PROBE_FEEDRATE_SLOW = Z_PROBE_FEEDRATE_SLOW; - #undef Z_PROBE_FEEDRATE_SLOW - #define Z_PROBE_FEEDRATE_SLOW hmiData.zprobeFeed #endif #if PROUI_GRID_PNTS constexpr uint8_t DEF_GRID_MAX_POINTS = GRID_MAX_POINTS_X; - #undef GRID_MAX_POINTS_X - #undef GRID_MAX_POINTS_Y - #undef GRID_MAX_POINTS - #define GRID_MAX_POINTS_X hmiData.grid_max_points - #define GRID_MAX_POINTS_Y hmiData.grid_max_points - #define GRID_MAX_POINTS (hmiData.grid_max_points * hmiData.grid_max_points) #define GRID_MIN 3 #define GRID_LIMIT 9 #endif @@ -160,15 +151,6 @@ constexpr uint16_t DEF_MESH_MAX_X = MESH_MAX_X; constexpr uint16_t DEF_MESH_MIN_Y = MESH_MIN_Y; constexpr uint16_t DEF_MESH_MAX_Y = MESH_MAX_Y; - #undef MESH_MIN_X - #undef MESH_MAX_X - #undef MESH_MIN_Y - #undef MESH_MAX_Y - //#include "../../marlinui.h" - #define MESH_MIN_X ui.mesh_inset_min_x - #define MESH_MAX_X ui.mesh_inset_max_x - #define MESH_MIN_Y ui.mesh_inset_min_y - #define MESH_MAX_Y ui.mesh_inset_max_y #define MIN_MESH_INSET 0 #define MAX_MESH_INSET X_BED_SIZE #endif From bca866a072a8c6ffffb998f3a68423cf27d486ae Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Fri, 9 Feb 2024 08:40:37 -0500 Subject: [PATCH 19/47] update run_z_probe --- Marlin/src/module/probe.cpp | 148 +++++++++++------------------------- 1 file changed, 45 insertions(+), 103 deletions(-) diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 4b56c8843b0b..acf5ff904759 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -901,36 +901,36 @@ bool Probe::probe_down_to_z(const_float_t z, const_feedRate_t fr_mm_s) { return DIFF_TERN(HAS_HOTEND_OFFSET, measured_z, hotend_offset[active_extruder].z); } -#elif (1) // different types of `run_z_probe()` functions for testing +#else // if DWIN_LCD_PROUI -float Probe::run_z_probe(const bool sanity_check/*=true*/, const_float_t z_min_point/*=Z_PROBE_LOW_POINT*/, const_float_t z_clearance/*=Z_TWEEN_SAFE_CLEARANCE*/) { + float Probe::run_z_probe(const bool sanity_check/*=true*/, const_float_t z_min_point/*=Z_PROBE_LOW_POINT*/, const_float_t z_clearance/*=Z_TWEEN_SAFE_CLEARANCE*/) { DEBUG_SECTION(log_probe, "Probe::run_z_probe", DEBUGGING(LEVELING)); const float zoffs = SUM_TERN(HAS_HOTEND_OFFSET, -offset.z, hotend_offset[active_extruder].z); auto try_to_probe = [&](PGM_P const plbl, const_float_t z_probe_low_point, const feedRate_t fr_mm_s, const bool scheck) -> bool { - constexpr float error_tolerance = Z_PROBE_ERROR_TOLERANCE; - if (DEBUGGING(LEVELING)) { - DEBUG_ECHOPGM_P(plbl); - DEBUG_ECHOLNPGM("> try_to_probe(..., ", z_probe_low_point, ", ", fr_mm_s, ", ...)"); - } + constexpr float error_tolerance = Z_PROBE_ERROR_TOLERANCE; + if (DEBUGGING(LEVELING)) { + DEBUG_ECHOPGM_P(plbl); + DEBUG_ECHOLNPGM("> try_to_probe(..., ", z_probe_low_point, ", ", fr_mm_s, ", ...)"); + } - // Tare the probe, if supported - if (TERN0(PROBE_TARE, tare())) return true; + // Tare the probe, if supported + if (TERN0(PROBE_TARE, tare())) return true; - // Do a probe at the specified speed - const bool probe_fail = probe_down_to_z(z_probe_low_point, fr_mm_s); // No probe trigger? - const bool early_fail = (scheck && current_position.z > zoffs + error_tolerance); // Probe triggered too high? - #if ENABLED(DEBUG_LEVELING_FEATURE) - if (DEBUGGING(LEVELING) && (probe_fail || early_fail)) { - DEBUG_ECHOPGM(" Probe fail! - "); - if (probe_fail) DEBUG_ECHOLNPGM("No trigger."); - if (early_fail) DEBUG_ECHOLNPGM("Triggered early (above ", zoffs + error_tolerance, "mm)"); - } - #else - UNUSED(plbl); - #endif - return probe_fail || early_fail; + // Do a first probe at the fast speed + const bool probe_fail = probe_down_to_z(z_probe_low_point, fr_mm_s), // No probe trigger? + early_fail = (scheck && current_position.z > zoffs + error_tolerance); // Probe triggered too high? + #if ENABLED(DEBUG_LEVELING_FEATURE) + if (DEBUGGING(LEVELING) && (probe_fail || early_fail)) { + DEBUG_ECHOPGM(" Probe fail! - "); + if (probe_fail) DEBUG_ECHOLNPGM("No trigger."); + if (early_fail) DEBUG_ECHOLNPGM("Triggered early (above ", zoffs + error_tolerance, "mm)"); + } + #else + UNUSED(plbl); + #endif + return probe_fail || early_fail; }; // Stop the probe before it goes too low to prevent damage. @@ -942,99 +942,41 @@ float Probe::run_z_probe(const bool sanity_check/*=true*/, const_float_t z_min_p // Attempt to tare the probe if (TERN0(PROBE_TARE, tare())) return NAN; - // Do a fast probe for multiple_probing - 1 times - //float probes[PRO_data.multiple_probing]; - float probes_z_sum = 0.0f; - if (try_to_probe(PSTR("FAST"), z_probe_low_point, z_probe_fast_mm_s, sanity_check)) return NAN; - const float z1 = current_position.z; - - // Do a slow probe for the last probe - for (uint8_t p = 0; p < hmiData.multiple_probing - 1; p++) { - if (try_to_probe(PSTR("SLOW"), z_probe_low_point, MMM_TO_MMS(Z_PROBE_FEEDRATE_SLOW), sanity_check)) return NAN; - const float z = current_position.z; - probes_z_sum += z; - } - // Calculate the average measured Z value - probes_z_sum += z1; - const float measured_z = probes_z_sum * RECIPROCAL(hmiData.multiple_probing); - - return DIFF_TERN(HAS_HOTEND_OFFSET, measured_z, hotend_offset[active_extruder].z); -} - -#else // 2nd type for testing - -float Probe::run_z_probe(const bool sanity_check/*=true*/, const_float_t z_min_point/*=Z_PROBE_LOW_POINT*/, const_float_t z_clearance/*=Z_TWEEN_SAFE_CLEARANCE*/) { - DEBUG_SECTION(log_probe, "Probe::run_z_probe", DEBUGGING(LEVELING)); - - const float zoffs = SUM_TERN(HAS_HOTEND_OFFSET, -offset.z, hotend_offset[active_extruder].z); - - auto try_to_probe = [&](PGM_P const plbl, const_float_t z_probe_low_point, const feedRate_t fr_mm_s, const bool scheck) -> bool { - constexpr float error_tolerance = Z_PROBE_ERROR_TOLERANCE; - if (DEBUGGING(LEVELING)) { - DEBUG_ECHOPGM_P(plbl); - DEBUG_ECHOLNPGM("> try_to_probe(..., ", z_probe_low_point, ", ", fr_mm_s, ", ...)"); - } - - // Tare the probe, if supported - if (TERN0(PROBE_TARE, tare())) return true; // Do a first probe at the fast speed - const bool probe_fail = probe_down_to_z(z_probe_low_point, fr_mm_s), // No probe trigger? - early_fail = (scheck && current_position.z > zoffs + error_tolerance); // Probe triggered too high? - #if ENABLED(DEBUG_LEVELING_FEATURE) - if (DEBUGGING(LEVELING) && (probe_fail || early_fail)) { - DEBUG_ECHOPGM(" Probe fail! - "); - if (probe_fail) DEBUG_ECHOLNPGM("No trigger."); - if (early_fail) DEBUG_ECHOLNPGM("Triggered early (above ", zoffs + error_tolerance, "mm)"); - } - #else - UNUSED(plbl); - #endif - return probe_fail || early_fail; - }; - - // Stop the probe before it goes too low to prevent damage. - // For known Z probe below the expected trigger point, otherwise -10mm lower. - const float z_probe_low_point = zoffs + z_min_point - float((!axis_is_trusted(Z_AXIS)) * 10); - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Probe Low Point: ", z_probe_low_point); - - // Double-probing does a fast probe followed by a slow probe + if (try_to_probe(PSTR("FAST"), z_probe_low_point, z_probe_fast_mm_s, sanity_check)) return NAN; - // Attempt to tare the probe - if (TERN0(PROBE_TARE, tare())) return NAN; + const float z1 = DIFF_TERN(HAS_DELTA_SENSORLESS_PROBING, current_position.z, largest_sensorless_adj); + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("1st Probe Z:", z1); - // Do a first probe at the fast speed - if (try_to_probe(PSTR("FAST"), z_probe_low_point, z_probe_fast_mm_s, sanity_check)) return NAN; + // Raise to give the probe clearance + do_z_clearance(z1 + (Z_CLEARANCE_MULTI_PROBE), false); - const float z1 = DIFF_TERN(HAS_DELTA_SENSORLESS_PROBING, current_position.z, largest_sensorless_adj); - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("1st Probe Z:", z1); + float probes_z_sum = 0; + for (uint8_t p = 0; p < hmiData.multiple_probing - 1; p++) { + // If the probe won't tare, return + if (TERN0(PROBE_TARE, tare())) return true; - // Raise to give the probe clearance - do_z_clearance(z1 + (Z_CLEARANCE_MULTI_PROBE), false); + // Probe downward slowly to find the bed + if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Slow Probe:"); + if (try_to_probe(PSTR("SLOW"), z_probe_low_point, MMM_TO_MMS(Z_PROBE_FEEDRATE_SLOW), sanity_check)) return NAN; - float probes_z_sum = 0; - for (uint8_t p = 0; p < hmiData.multiple_probing; p++) { - // If the probe won't tare, return - if (TERN0(PROBE_TARE, tare())) return true; + TERN_(MEASURE_BACKLASH_WHEN_PROBING, backlash.measure_with_probe()); - // Probe downward slowly to find the bed - if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Slow Probe:"); - if (try_to_probe(PSTR("SLOW"), z_probe_low_point, MMM_TO_MMS(Z_PROBE_FEEDRATE_SLOW), sanity_check)) return NAN; + const float z = DIFF_TERN(HAS_DELTA_SENSORLESS_PROBING, current_position.z, largest_sensorless_adj); + probes_z_sum += z; + // Small Z raise after probe + do_z_clearance(z + (Z_CLEARANCE_MULTI_PROBE), false); + } - TERN_(MEASURE_BACKLASH_WHEN_PROBING, backlash.measure_with_probe()); + // Return a weighted average of the fast and slow probes + const float measured_z = (hmiData.multiple_probing > 1) ? + (probes_z_sum * 3.0f + z1 * 2.0f) * 0.2f : z1; - const float z = DIFF_TERN(HAS_DELTA_SENSORLESS_PROBING, current_position.z, largest_sensorless_adj); - probes_z_sum += z; - // Small Z raise after all but the last probe - if (p < hmiData.multiple_probing - 1) do_z_clearance(z + (Z_CLEARANCE_MULTI_PROBE), false); + return DIFF_TERN(HAS_HOTEND_OFFSET, measured_z, hotend_offset[active_extruder].z); } - const float measured_z = (z1 + probes_z_sum) * RECIPROCAL(hmiData.multiple_probing); - - return DIFF_TERN(HAS_HOTEND_OFFSET, measured_z, hotend_offset[active_extruder].z); -} - -#endif +#endif // !DWIN_LCD_PROUI #if DO_TOOLCHANGE_FOR_PROBING From c5d7e689fed05dff91a17267a46fe63b87aed7e4 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Sat, 10 Feb 2024 07:31:24 -0500 Subject: [PATCH 20/47] move resetMesh --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index ffe482659a0d..3dd83b02b07b 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -4093,12 +4093,13 @@ void drawMaxAccelMenu() { void liveEditMesh() { ((MenuItemPtr*)editZValueItem)->value = &bedlevel.z_values[hmiValue.select ? bedLevelTools.mesh_x : menuData.value][hmiValue.select ? menuData.value : bedLevelTools.mesh_y]; editZValueItem->redraw(); } void applyEditMeshX() { bedLevelTools.mesh_x = menuData.value; } void applyEditMeshY() { bedLevelTools.mesh_y = menuData.value; } - void resetMesh() { bedLevelTools.meshReset(); LCD_MESSAGE(MSG_MESH_RESET); } void setEditMeshX() { hmiValue.select = 0; setIntOnClick(0, GRID_MAX_POINTS_X - 1, bedLevelTools.mesh_x, applyEditMeshX, liveEditMesh); } void setEditMeshY() { hmiValue.select = 1; setIntOnClick(0, GRID_MAX_POINTS_Y - 1, bedLevelTools.mesh_y, applyEditMeshY, liveEditMesh); } void setEditZValue() { setPFloatOnClick(Z_OFFSET_MIN, Z_OFFSET_MAX, 3); } #endif + void resetMesh() { bedLevelTools.meshReset(); LCD_MESSAGE(MSG_MESH_RESET); } + #endif // HAS_MESH #if ENABLED(AUTO_BED_LEVELING_UBL) @@ -4165,8 +4166,8 @@ void drawMaxAccelMenu() { MENU_ITEM(ICON_UBLTiltGrid, MSG_UBL_TILT_MESH, onDrawMenuItem, ublMeshTilt); MENU_ITEM(ICON_UBLSmartFill, MSG_UBL_SMART_FILLIN, onDrawMenuItem, ublSmartFillMesh); #endif + MENU_ITEM(ICON_MeshReset, MSG_MESH_RESET, onDrawMenuItem, resetMesh); #if ENABLED(PROUI_MESH_EDIT) - MENU_ITEM(ICON_MeshReset, MSG_MESH_RESET, onDrawMenuItem, resetMesh); MENU_ITEM(ICON_MeshEdit, MSG_EDIT_MESH, onDrawSubMenu, drawEditMeshMenu); #endif MENU_ITEM(ICON_MeshViewer, MSG_MESH_VIEW, onDrawSubMenu, dwinMeshViewer); From 79302498c8fd60a2e723599570b4416d03260746 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Sun, 11 Feb 2024 04:00:13 -0500 Subject: [PATCH 21/47] update settings.cpp gridpoints --- Marlin/src/module/settings.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index b42e571bf38a..2852ea41da3c 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -1999,11 +1999,11 @@ void MarlinSettings::postprocess() { #if ENABLED(MESH_BED_LEVELING) if (!validating) bedlevel.z_offset = dummyf; - if (mesh_num_x == (GRID_MAX_POINTS_X) && mesh_num_y == (GRID_MAX_POINTS_Y)) { + if (mesh_num_x == (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)) && mesh_num_y == (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y))) { // EEPROM data fits the current mesh EEPROM_READ(bedlevel.z_values); } - else if (mesh_num_x > (GRID_MAX_POINTS_X) || mesh_num_y > (GRID_MAX_POINTS_Y)) { + else if (mesh_num_x > (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)) || mesh_num_y > (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y))) { eeprom_error = ERR_EEPROM_CORRUPT; break; } @@ -2064,12 +2064,12 @@ void MarlinSettings::postprocess() { EEPROM_READ(spacing); // 2 ints EEPROM_READ(start); // 2 ints #if ENABLED(AUTO_BED_LEVELING_BILINEAR) - if (grid_max_x == (GRID_MAX_POINTS_X) && grid_max_y == (GRID_MAX_POINTS_Y)) { + if (grid_max_x == (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)) && grid_max_y == (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y))) { if (!validating) set_bed_leveling_enabled(false); bedlevel.set_grid(spacing, start); EEPROM_READ(bedlevel.z_values); // 9 to 256 floats } - else if (grid_max_x > (GRID_MAX_POINTS_X) || grid_max_y > (GRID_MAX_POINTS_Y)) { + else if (grid_max_x > (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)) || grid_max_y > (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y))) { eeprom_error = ERR_EEPROM_CORRUPT; break; } @@ -3801,8 +3801,8 @@ void MarlinSettings::reset() { #if ENABLED(MESH_BED_LEVELING) if (leveling_is_valid()) { - for (uint8_t py = 0; py < GRID_MAX_POINTS_Y; ++py) { - for (uint8_t px = 0; px < GRID_MAX_POINTS_X; ++px) { + for (uint8_t py = 0; py < TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X); ++py) { + for (uint8_t px = 0; px < TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X); ++px) { CONFIG_ECHO_START(); SERIAL_ECHOLN(F(" G29 S3 I"), px, F(" J"), py, FPSTR(SP_Z_STR), p_float_t(LINEAR_UNIT(bedlevel.z_values[px][py]), 5)); } @@ -3826,8 +3826,8 @@ void MarlinSettings::reset() { #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) if (leveling_is_valid()) { - for (uint8_t py = 0; py < GRID_MAX_POINTS_Y; ++py) { - for (uint8_t px = 0; px < GRID_MAX_POINTS_X; ++px) { + for (uint8_t py = 0; py < TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X); ++py) { + for (uint8_t px = 0; px < TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X); ++px) { CONFIG_ECHO_START(); SERIAL_ECHOLN(F(" G29 W I"), px, F(" J"), py, FPSTR(SP_Z_STR), p_float_t(LINEAR_UNIT(bedlevel.z_values[px][py]), 5)); } From dc1d4e7ce07da0c31bb0416f506cdb0ec3305882 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Thu, 15 Feb 2024 09:05:12 -0500 Subject: [PATCH 22/47] add tram() exclusion --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 3dd83b02b07b..f476e5b78d3b 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -2449,18 +2449,20 @@ void setFlow() { setPIntOnClick(FLOW_EDIT_MIN, FLOW_EDIT_MAX, []{ planner.refres )); } else { - // AUTO_BED_LEVELING_BILINEAR does not define MESH_INSET - #ifndef MESH_MIN_X - #define MESH_MIN_X (_MAX(X_MIN_BED + PROBING_MARGIN, X_MIN_POS)) - #endif - #ifndef MESH_MIN_Y - #define MESH_MIN_Y (_MAX(Y_MIN_BED + PROBING_MARGIN, Y_MIN_POS)) - #endif - #ifndef MESH_MAX_X - #define MESH_MAX_X (_MIN(X_MAX_BED - (PROBING_MARGIN), X_MAX_POS)) - #endif - #ifndef MESH_MAX_Y - #define MESH_MAX_Y (_MIN(Y_MAX_BED - (PROBING_MARGIN), Y_MAX_POS)) + #if DISBLED(PROUI_MESH_EDIT) + // AUTO_BED_LEVELING_BILINEAR does not define MESH_INSET + #ifndef MESH_MIN_X + #define MESH_MIN_X (_MAX(X_MIN_BED + PROBING_MARGIN, X_MIN_POS)) + #endif + #ifndef MESH_MIN_Y + #define MESH_MIN_Y (_MAX(Y_MIN_BED + PROBING_MARGIN, Y_MIN_POS)) + #endif + #ifndef MESH_MAX_X + #define MESH_MAX_X (_MIN(X_MAX_BED - (PROBING_MARGIN), X_MAX_POS)) + #endif + #ifndef MESH_MAX_Y + #define MESH_MAX_Y (_MIN(Y_MAX_BED - (PROBING_MARGIN), Y_MAX_POS)) + #endif #endif LIMIT(xpos, MESH_MIN_X, MESH_MAX_X); From 6b719b8b1441ce57237dc2828bfd7d185ff511fd Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Mon, 19 Feb 2024 04:05:21 -0500 Subject: [PATCH 23/47] tweak - remove unused --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 1 - Marlin/src/lcd/e3v2/proui/dwin.h | 3 +-- Marlin/src/lcd/marlinui.h | 9 --------- Marlin/src/module/motion.h | 2 -- 4 files changed, 1 insertion(+), 14 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index f476e5b78d3b..d02a56b5d954 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -269,7 +269,6 @@ Menu *stepsMenu = nullptr; #if ENABLED(PROUI_MESH_EDIT) Menu *editMeshMenu = nullptr; #endif - Menu *meshInsetMenu = nullptr; #endif #if ENABLED(SHAPING_MENU) Menu *inputShapingMenu = nullptr; diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index eb197b1992a1..23b801097e62 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -372,7 +372,6 @@ void drawMaxAccelMenu(); #if ENABLED(PROUI_MESH_EDIT) void drawEditMeshMenu(); #endif - void drawMeshInsetMenu(); #endif #if HAS_TRINAMIC_CONFIG void drawTrinamicConfigMenu(); @@ -447,4 +446,4 @@ void drawMaxAccelMenu(); #define MESH_MAX_X ui.mesh_inset_max_x #define MESH_MIN_Y ui.mesh_inset_min_y #define MESH_MAX_Y ui.mesh_inset_max_y -#endif \ No newline at end of file +#endif diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index 346f0f3ae76f..597b4793d14c 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -203,15 +203,6 @@ class MarlinUI { static float mesh_inset_max_x; static float mesh_inset_min_y; static float mesh_inset_max_y; - // TODO: workaround for mesh inset not working for MESH_BED_LEVELING - // #undef MESH_MIN_X - // #undef MESH_MAX_X - // #undef MESH_MIN_Y - // #undef MESH_MAX_Y - // #define MESH_MIN_X ui.mesh_inset_min_x - // #define MESH_MAX_X ui.mesh_inset_max_x - // #define MESH_MIN_Y ui.mesh_inset_min_y - // #define MESH_MAX_Y ui.mesh_inset_max_y #endif static void init(); diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index 0739bb9e833a..bb7ac0dc055a 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -409,9 +409,7 @@ void restore_feedrate_and_scaling(); #if HAS_Z_AXIS #if ALL(DWIN_LCD_PROUI, INDIVIDUAL_AXIS_HOMING_SUBMENU, MESH_BED_LEVELING) #include "../lcd/e3v2/proui/dwin.h" - #ifndef Z_POST_CLEARANCE #define Z_POST_CLEARANCE hmiData.zAfterHoming - #endif #elif defined(Z_AFTER_HOMING) #define Z_POST_CLEARANCE Z_AFTER_HOMING #else From 859746ce74359b6850642cfb4096da946c2a2228 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Tue, 20 Feb 2024 20:40:51 -0500 Subject: [PATCH 24/47] typo --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index d02a56b5d954..5834c03c21a3 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -2448,7 +2448,7 @@ void setFlow() { setPIntOnClick(FLOW_EDIT_MIN, FLOW_EDIT_MAX, []{ planner.refres )); } else { - #if DISBLED(PROUI_MESH_EDIT) + #if DISABLED(PROUI_MESH_EDIT) // AUTO_BED_LEVELING_BILINEAR does not define MESH_INSET #ifndef MESH_MIN_X #define MESH_MIN_X (_MAX(X_MIN_BED + PROBING_MARGIN, X_MIN_POS)) From 038b1db36183a6a5d3fd6c169315e9d07e981961 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Tue, 20 Feb 2024 20:56:23 -0500 Subject: [PATCH 25/47] grid_loop test (warning) --- Marlin/src/inc/Conditionals_LCD.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index af2ea772c3db..c69df78c6b56 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -1565,7 +1565,7 @@ #ifdef GRID_MAX_POINTS_X #define GRID_MAX_POINTS ((GRID_MAX_POINTS_X) * (GRID_MAX_POINTS_Y)) - #define GRID_LOOP(A,B) for (uint8_t A = 0; A < GRID_MAX_POINTS_X; ++A) for (uint8_t B = 0; B < GRID_MAX_POINTS_Y; ++B) + #define GRID_LOOP(A,B) for (uint8_t A = 0; A < GRID_MAX_POINTS_X + 1; ++A) for (uint8_t B = 0; B < GRID_MAX_POINTS_Y + 1; ++B) #endif // Slim menu optimizations From 114fad2f4bb2ecaceb05e80ebf37b01157bf708b Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Tue, 20 Feb 2024 21:56:35 -0500 Subject: [PATCH 26/47] revert back (test), typos --- Marlin/src/inc/Conditionals_LCD.h | 2 +- Marlin/src/inc/MarlinConfigPre.h | 2 +- Marlin/src/lcd/e3v2/proui/dwin.h | 4 +--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h index c69df78c6b56..af2ea772c3db 100644 --- a/Marlin/src/inc/Conditionals_LCD.h +++ b/Marlin/src/inc/Conditionals_LCD.h @@ -1565,7 +1565,7 @@ #ifdef GRID_MAX_POINTS_X #define GRID_MAX_POINTS ((GRID_MAX_POINTS_X) * (GRID_MAX_POINTS_Y)) - #define GRID_LOOP(A,B) for (uint8_t A = 0; A < GRID_MAX_POINTS_X + 1; ++A) for (uint8_t B = 0; B < GRID_MAX_POINTS_Y + 1; ++B) + #define GRID_LOOP(A,B) for (uint8_t A = 0; A < GRID_MAX_POINTS_X; ++A) for (uint8_t B = 0; B < GRID_MAX_POINTS_Y; ++B) #endif // Slim menu optimizations diff --git a/Marlin/src/inc/MarlinConfigPre.h b/Marlin/src/inc/MarlinConfigPre.h index 65776336305f..eee8694c4939 100644 --- a/Marlin/src/inc/MarlinConfigPre.h +++ b/Marlin/src/inc/MarlinConfigPre.h @@ -61,7 +61,7 @@ #include HAL_PATH(.., inc/Conditionals_adv.h) #endif -// ProUI extra featuresW +// ProUI extra features #if ENABLED(DWIN_LCD_PROUI) #include "../lcd/e3v2/proui/dwin_defines.h" #endif diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 23b801097e62..107f41686fd8 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -420,9 +420,7 @@ void drawMaxAccelMenu(); #endif #endif -// /** -// * ProUI extra features -// */ +// ProUI extra features #if PROUI_GRID_PNTS #undef GRID_MAX_POINTS_X #undef GRID_MAX_POINTS_Y From 6e5cfd3e0ad22d4dac5a2889d5c92ea9651af852 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Thu, 29 Feb 2024 14:28:53 -0500 Subject: [PATCH 27/47] adjust ubl_G29 for narrowing conv. --- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index f2332c1185b0..19a0dfb3fb2d 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -1446,14 +1446,14 @@ bool unified_bed_leveling::smart_fill_one(const uint8_t x, const uint8_t y, cons return false; } -typedef struct { TERN(PROUI_GRID_PNTS, int, uint8_t) sx, ex, sy, ey; bool yfirst; } smart_fill_info; +typedef struct { uint8_t sx, ex, sy, ey; bool yfirst; } smart_fill_info; void unified_bed_leveling::smart_fill_mesh() { static const smart_fill_info - info0 PROGMEM = { 0, GRID_MAX_POINTS_X, 0, (GRID_MAX_POINTS_Y) - 2, false }, // Bottom of the mesh looking up - info1 PROGMEM = { 0, GRID_MAX_POINTS_X, (GRID_MAX_POINTS_Y) - 1, 0, false }, // Top of the mesh looking down - info2 PROGMEM = { 0, (GRID_MAX_POINTS_X) - 2, 0, GRID_MAX_POINTS_Y, true }, // Left side of the mesh looking right - info3 PROGMEM = { (GRID_MAX_POINTS_X) - 1, 0, 0, GRID_MAX_POINTS_Y, true }; // Right side of the mesh looking left + info0 PROGMEM = { 0, GRID_MAX_POINTS_X, 0, uint8_t((GRID_MAX_POINTS_Y) - 2), false }, // Bottom of the mesh looking up + info1 PROGMEM = { 0, GRID_MAX_POINTS_X, uint8_t((GRID_MAX_POINTS_Y) - 1), 0, false }, // Top of the mesh looking down + info2 PROGMEM = { 0, uint8_t((GRID_MAX_POINTS_X) - 2), 0, GRID_MAX_POINTS_Y, true }, // Left side of the mesh looking right + info3 PROGMEM = { uint8_t((GRID_MAX_POINTS_X) - 1), 0, 0, GRID_MAX_POINTS_Y, true }; // Right side of the mesh looking left static const smart_fill_info * const info[] PROGMEM = { &info0, &info1, &info2, &info3 }; for (uint8_t i = 0; i < COUNT(info); ++i) { From f05713e3708ca227ed94fa1ca26c09a3f829179e Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Thu, 29 Feb 2024 14:34:37 -0500 Subject: [PATCH 28/47] adjust ubl_G29 spacing --- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index 19a0dfb3fb2d..80f72c4ef6b6 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -1450,10 +1450,10 @@ typedef struct { uint8_t sx, ex, sy, ey; bool yfirst; } smart_fill_info; void unified_bed_leveling::smart_fill_mesh() { static const smart_fill_info - info0 PROGMEM = { 0, GRID_MAX_POINTS_X, 0, uint8_t((GRID_MAX_POINTS_Y) - 2), false }, // Bottom of the mesh looking up - info1 PROGMEM = { 0, GRID_MAX_POINTS_X, uint8_t((GRID_MAX_POINTS_Y) - 1), 0, false }, // Top of the mesh looking down - info2 PROGMEM = { 0, uint8_t((GRID_MAX_POINTS_X) - 2), 0, GRID_MAX_POINTS_Y, true }, // Left side of the mesh looking right - info3 PROGMEM = { uint8_t((GRID_MAX_POINTS_X) - 1), 0, 0, GRID_MAX_POINTS_Y, true }; // Right side of the mesh looking left + info0 PROGMEM = { 0, GRID_MAX_POINTS_X, 0, uint8_t((GRID_MAX_POINTS_Y) - 2), false }, // Bottom of the mesh looking up + info1 PROGMEM = { 0, GRID_MAX_POINTS_X, uint8_t((GRID_MAX_POINTS_Y) - 1), 0, false }, // Top of the mesh looking down + info2 PROGMEM = { 0, uint8_t((GRID_MAX_POINTS_X) - 2), 0, GRID_MAX_POINTS_Y, true }, // Left side of the mesh looking right + info3 PROGMEM = { uint8_t((GRID_MAX_POINTS_X) - 1), 0, 0, GRID_MAX_POINTS_Y, true }; // Right side of the mesh looking left static const smart_fill_info * const info[] PROGMEM = { &info0, &info1, &info2, &info3 }; for (uint8_t i = 0; i < COUNT(info); ++i) { From cc67a8a900c948e5c12286cd5ea049e68eeb5fbb Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Thu, 14 Mar 2024 09:47:59 -0400 Subject: [PATCH 29/47] update dwin.cpp, rearrange menu items - add levelMenu --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 263 +++++++++++++++-------------- Marlin/src/lcd/e3v2/proui/dwin.h | 8 +- Marlin/src/lcd/marlinui.cpp | 2 +- Marlin/src/lcd/marlinui.h | 2 +- Marlin/src/module/settings.cpp | 16 +- 5 files changed, 152 insertions(+), 139 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 5834c03c21a3..3d0148ba8f98 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -178,7 +178,7 @@ enum SelectItem : uint8_t { PAGE_PRINT = 0, PAGE_PREPARE, PAGE_CONTROL, - PAGE_ADVANCE, + PAGE_LEVEL, PAGE_COUNT, PRINT_SETUP = 0, @@ -208,6 +208,7 @@ uint8_t checkkey = 255, last_checkkey = ID_MainMenu; // New menu system pointers Menu *fileMenu = nullptr; Menu *prepareMenu = nullptr; +Menu *levelMenu = nullptr; #if ENABLED(LCD_BED_TRAMMING) Menu *trammingMenu = nullptr; #endif @@ -359,12 +360,12 @@ void ICON_Control() { } // -// Main Menu: "Advanced Settings" +// Main Menu: "Level Settings" // -void ICON_AdvSettings() { +void ICON_LvlSettings() { constexpr frame_rect_t ico = { 145, 226, 110, 100 }; constexpr text_info_t txt = { 91, { 405, 447 }, 27, 15 }; - ICON_Button(select_page.now == PAGE_ADVANCE, ICON_Info_0, ico, txt, GET_TEXT_F(MSG_BUTTON_ADVANCED)); + ICON_Button(select_page.now == PAGE_LEVEL, ICON_Info_0, ico, txt, GET_TEXT_F(MSG_BUTTON_ADVANCED)); } // @@ -670,7 +671,7 @@ void drawMainMenu() { ICON_Print(); ICON_Prepare(); ICON_Control(); - ICON_AdvSettings(); + ICON_LvlSettings(); } void gotoMainMenu() { @@ -1121,7 +1122,7 @@ void hmiMainMenu() { case PAGE_PRINT: ICON_Print(); break; case PAGE_PREPARE: ICON_Print(); ICON_Prepare(); break; case PAGE_CONTROL: ICON_Prepare(); ICON_Control(); break; - case PAGE_ADVANCE: ICON_Control(); ICON_AdvSettings(); break; + case PAGE_LEVEL: ICON_Control(); ICON_LvlSettings(); break; } } } @@ -1130,8 +1131,8 @@ void hmiMainMenu() { switch (select_page.now) { case PAGE_PRINT: ICON_Print(); ICON_Prepare(); break; case PAGE_PREPARE: ICON_Prepare(); ICON_Control(); break; - case PAGE_CONTROL: ICON_Control(); ICON_AdvSettings(); break; - case PAGE_ADVANCE: ICON_AdvSettings(); break; + case PAGE_CONTROL: ICON_Control(); ICON_LvlSettings(); break; + case PAGE_LEVEL: ICON_LvlSettings(); break; } } } @@ -1146,7 +1147,7 @@ void hmiMainMenu() { break; case PAGE_PREPARE: drawPrepareMenu(); break; case PAGE_CONTROL: drawControlMenu(); break; - case PAGE_ADVANCE: drawAdvancedSettingsMenu(); break; + case PAGE_LEVEL: drawLevelMenu(); break; } } dwinUpdateLCD(); @@ -1866,7 +1867,7 @@ void dwinSetDataDefaults() { IF_DISABLED(BD_SENSOR, hmiData.multiple_probing = MULTIPLE_PROBING); hmiData.zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; #endif - #if ENABLED(PROUI_MESH_EDIT) + #if ENABLED(PROUI_GRID_PNTS) hmiData.grid_max_points = DEF_GRID_MAX_POINTS; #endif @@ -3085,23 +3086,18 @@ frame_rect_t selrect(frame_rect_t) { void drawPrepareMenu() { checkkey = ID_Menu; - if (SET_MENU_R(prepareMenu, selrect({133, 1, 28, 13}), MSG_PREPARE, 12 + PREHEAT_COUNT)) { + if (SET_MENU_R(prepareMenu, selrect({133, 1, 28, 13}), MSG_PREPARE, 11 + PREHEAT_COUNT)) { BACK_ITEM(gotoMainMenu); - MENU_ITEM(ICON_FilMan, MSG_FILAMENT_MAN, onDrawSubMenu, drawFilamentManMenu); MENU_ITEM(ICON_Axis, MSG_MOVE_AXIS, onDrawMoveSubMenu, drawMoveMenu); - #if ENABLED(LCD_BED_TRAMMING) - MENU_ITEM(ICON_Tram, MSG_BED_TRAMMING, onDrawSubMenu, drawTrammingMenu); - #endif - MENU_ITEM(ICON_CloseMotor, MSG_DISABLE_STEPPERS, onDrawDisableMotors, disableMotors); #if ENABLED(INDIVIDUAL_AXIS_HOMING_SUBMENU) MENU_ITEM(ICON_Homing, MSG_HOMING, onDrawSubMenu, drawHomingMenu); #else MENU_ITEM(ICON_Homing, MSG_AUTO_HOME, onDrawAutoHome, autoHome); #endif - #if ENABLED(MESH_BED_LEVELING) - MENU_ITEM(ICON_ManualMesh, MSG_MANUAL_MESH, onDrawSubMenu, drawManualMeshMenu); - #elif HAS_BED_PROBE - MENU_ITEM(ICON_Level, MSG_AUTO_MESH, onDrawMenuItem, autoLevel); + MENU_ITEM(ICON_CloseMotor, MSG_DISABLE_STEPPERS, onDrawDisableMotors, disableMotors); + MENU_ITEM(ICON_FilMan, MSG_FILAMENT_MAN, onDrawSubMenu, drawFilamentManMenu); + #if ENABLED(LCD_BED_TRAMMING) + MENU_ITEM(ICON_Tram, MSG_BED_TRAMMING, onDrawSubMenu, drawTrammingMenu); #endif #if HAS_ZOFFSET_ITEM #if HAS_BED_PROBE @@ -3152,21 +3148,19 @@ void drawPrepareMenu() { void drawControlMenu() { checkkey = ID_Menu; - if (SET_MENU_R(controlMenu, selrect({103, 1, 28, 14}), MSG_CONTROL, 11)) { + if (SET_MENU_R(controlMenu, selrect({103, 1, 28, 14}), MSG_CONTROL, 12)) { BACK_ITEM(gotoMainMenu); MENU_ITEM(ICON_Temperature, MSG_TEMPERATURE, onDrawTempSubMenu, drawTemperatureMenu); MENU_ITEM(ICON_Motion, MSG_MOTION, onDrawMotionSubMenu, drawMotionMenu); - #if ENABLED(CASE_LIGHT_MENU) - #if CASELIGHT_USES_BRIGHTNESS - enableLiveCaseLightBrightness = true; // Allow live update of brightness in control menu - MENU_ITEM(ICON_CaseLight, MSG_CASE_LIGHT, onDrawSubMenu, drawCaseLightMenu); - #else - MENU_ITEM(ICON_CaseLight, MSG_CASE_LIGHT, onDrawChkbMenu, setCaseLight, &caselight.on); - #endif + MENU_ITEM(ICON_Language, MSG_ADVANCED_SETTINGS, onDrawSubMenu, drawAdvancedSettingsMenu); + #if HAS_CUSTOM_COLORS + MENU_ITEM(ICON_Scolor, MSG_COLORS_SELECT, onDrawSubMenu, drawSelectColorsMenu); #endif - #if ENABLED(LED_CONTROL_MENU) - enableLiveLedColor = true; // Allow live update of color in control menu - MENU_ITEM(ICON_LedControl, MSG_LED_CONTROL, onDrawSubMenu, drawLedControlMenu); + #if HAS_ESDIAG + MENU_ITEM_F(ICON_esDiag, "End-stops diag.", onDrawSubMenu, drawEndStopDiag); + #endif + #if HAS_LOCKSCREEN + MENU_ITEM(ICON_Lock, MSG_LOCKSCREEN, onDrawMenuItem, dwinLockScreen); #endif #if ENABLED(EEPROM_SETTINGS) MENU_ITEM(ICON_WriteEEPROM, MSG_STORE_EEPROM, onDrawWriteEeprom, writeEEPROM); @@ -3182,43 +3176,18 @@ void drawControlMenu() { void drawAdvancedSettingsMenu() { checkkey = ID_Menu; - if (SET_MENU(advancedSettingsMenu, MSG_ADVANCED_SETTINGS, 24)) { - BACK_ITEM(gotoMainMenu); + if (SET_MENU(advancedSettingsMenu, MSG_ADVANCED_SETTINGS, 16)) { + BACK_ITEM(drawControlMenu); #if ENABLED(EEPROM_SETTINGS) MENU_ITEM(ICON_WriteEEPROM, MSG_STORE_EEPROM, onDrawMenuItem, writeEEPROM); #endif - #if HAS_MESH - MENU_ITEM(ICON_ProbeSet, MSG_MESH_LEVELING, onDrawSubMenu, drawMeshSetMenu); - #endif - #if HAS_BED_PROBE - MENU_ITEM(ICON_ProbeSet, MSG_ZPROBE_SETTINGS, onDrawSubMenu, drawProbeSetMenu); - #endif - #if HAS_HOME_OFFSET - MENU_ITEM(ICON_ProbeSet, MSG_SET_HOME_OFFSETS, onDrawSubMenu, drawHomeOffsetMenu); - #endif - MENU_ITEM(ICON_FilSet, MSG_FILAMENT_SET, onDrawSubMenu, drawFilSetMenu); - #if ENABLED(PIDTEMP) && ANY(PID_AUTOTUNE_MENU, PID_EDIT_MENU) - MENU_ITEM_F(ICON_PIDNozzle, STR_HOTEND_PID " Settings", onDrawSubMenu, drawHotendPIDMenu); - #endif - #if ANY(MPC_EDIT_MENU, MPC_AUTOTUNE_MENU) - MENU_ITEM_F(ICON_MPCNozzle, "MPC Settings", onDrawSubMenu, drawHotendMPCMenu); - #endif - #if ENABLED(PIDTEMPBED) && ANY(PID_AUTOTUNE_MENU, PID_EDIT_MENU) - MENU_ITEM_F(ICON_PIDBed, STR_BED_PID " Settings", onDrawSubMenu, drawBedPIDMenu); - #endif #if HAS_TRINAMIC_CONFIG MENU_ITEM(ICON_TMCSet, MSG_TMC_DRIVERS, onDrawSubMenu, drawTrinamicConfigMenu); #endif - #if HAS_ESDIAG - MENU_ITEM_F(ICON_esDiag, "End-stops diag.", onDrawSubMenu, drawEndStopDiag); - #endif #if ENABLED(PRINTCOUNTER) MENU_ITEM(ICON_PrintStats, MSG_INFO_STATS_MENU, onDrawSubMenu, gotoPrintStats); MENU_ITEM(ICON_PrintStatsReset, MSG_INFO_PRINT_COUNT_RESET, onDrawSubMenu, printStatsReset); #endif - #if HAS_LOCKSCREEN - MENU_ITEM(ICON_Lock, MSG_LOCKSCREEN, onDrawMenuItem, dwinLockScreen); - #endif #if ENABLED(EDITABLE_DISPLAY_TIMEOUT) EDIT_ITEM(ICON_Brightness, MSG_SCREEN_TIMEOUT, onDrawPIntMenu, setTimer, &ui.backlight_timeout_minutes); #endif @@ -3242,8 +3211,17 @@ void drawAdvancedSettingsMenu() { EDIT_ITEM(ICON_Brightness, MSG_BRIGHTNESS, onDrawPInt8Menu, setBrightness, &ui.brightness); MENU_ITEM(ICON_Brightness, MSG_BRIGHTNESS_OFF, onDrawMenuItem, turnOffBacklight); #endif - #if HAS_CUSTOM_COLORS - MENU_ITEM(ICON_Scolor, MSG_COLORS_SELECT, onDrawSubMenu, drawSelectColorsMenu); + #if ENABLED(CASE_LIGHT_MENU) + #if CASELIGHT_USES_BRIGHTNESS + enableLiveCaseLightBrightness = true; // Allow live update of brightness in control menu + MENU_ITEM(ICON_CaseLight, MSG_CASE_LIGHT, onDrawSubMenu, drawCaseLightMenu); + #else + MENU_ITEM(ICON_CaseLight, MSG_CASE_LIGHT, onDrawChkbMenu, setCaseLight, &caselight.on); + #endif + #endif + #if ENABLED(LED_CONTROL_MENU) + enableLiveLedColor = true; // Allow live update of color in control menu + MENU_ITEM(ICON_LedControl, MSG_LED_CONTROL, onDrawSubMenu, drawLedControlMenu); #endif } ui.reset_status(true); @@ -3278,7 +3256,7 @@ void drawMoveMenu() { void drawHomeOffsetMenu() { checkkey = ID_Menu; if (SET_MENU(homeOffsetMenu, MSG_SET_HOME_OFFSETS, 4)) { - BACK_ITEM(drawAdvancedSettingsMenu); + BACK_ITEM(drawLevelMenu); #if HAS_X_AXIS EDIT_ITEM(ICON_HomeOffsetX, MSG_HOME_OFFSET_X, onDrawPFloatMenu, setHomeOffsetX, &home_offset.x); #endif @@ -3299,7 +3277,7 @@ void drawMoveMenu() { void drawProbeSetMenu() { checkkey = ID_Menu; if (SET_MENU(probeSettingsMenu, MSG_ZPROBE_SETTINGS, 9)) { - BACK_ITEM(drawAdvancedSettingsMenu); + BACK_ITEM(drawLevelMenu); #if HAS_X_AXIS EDIT_ITEM(ICON_ProbeOffsetX, MSG_ZPROBE_XOFFSET, onDrawPFloatMenu, setProbeOffsetX, &probe.offset.x); #endif @@ -3328,36 +3306,12 @@ void drawMoveMenu() { #endif // HAS_BED_PROBE -void drawFilSetMenu() { - checkkey = ID_Menu; - if (SET_MENU(filSetMenu, MSG_FILAMENT_SET, 9)) { - BACK_ITEM(drawAdvancedSettingsMenu); - #if HAS_FILAMENT_SENSOR - EDIT_ITEM(ICON_Runout, MSG_RUNOUT_ENABLE, onDrawChkbMenu, setRunoutEnable, &runout.enabled); - #endif - #if HAS_FILAMENT_RUNOUT_DISTANCE - EDIT_ITEM(ICON_Runout, MSG_RUNOUT_DISTANCE_MM, onDrawPFloatMenu, setRunoutDistance, &runout.runout_distance()); - #endif - #if ENABLED(PREVENT_COLD_EXTRUSION) - EDIT_ITEM(ICON_ExtrudeMinT, MSG_EXTRUDER_MIN_TEMP, onDrawPIntMenu, setExtMinT, &hmiData.extMinT); - #endif - #if ENABLED(CONFIGURE_FILAMENT_CHANGE) - EDIT_ITEM(ICON_FilLoad, MSG_FILAMENT_LOAD, onDrawPFloatMenu, setFilLoad, &fc_settings[0].load_length); - EDIT_ITEM(ICON_FilUnload, MSG_FILAMENT_UNLOAD, onDrawPFloatMenu, setFilUnload, &fc_settings[0].unload_length); - #endif - #if ENABLED(FWRETRACT) - MENU_ITEM(ICON_FWRetract, MSG_FWRETRACT, onDrawSubMenu, drawFWRetractMenu); - #endif - } - updateMenu(filSetMenu); -} - #if ALL(CASE_LIGHT_MENU, CASELIGHT_USES_BRIGHTNESS) void drawCaseLightMenu() { checkkey = ID_Menu; if (SET_MENU(caseLightMenu, MSG_CASE_LIGHT, 3)) { - BACK_ITEM(drawControlMenu); + BACK_ITEM(drawAdvancedSettingsMenu); EDIT_ITEM(ICON_CaseLight, MSG_CASE_LIGHT, onDrawChkbMenu, setCaseLight, &caselight.on); EDIT_ITEM(ICON_Brightness, MSG_CASE_LIGHT_BRIGHTNESS, onDrawPInt8Menu, setCaseLightBrightness, &caselight.brightness); } @@ -3371,7 +3325,7 @@ void drawFilSetMenu() { void drawLedControlMenu() { checkkey = ID_Menu; if (SET_MENU(ledControlMenu, MSG_LED_CONTROL, 10)) { - BACK_ITEM((currentMenu == tuneMenu) ? drawTuneMenu : drawControlMenu); + BACK_ITEM((currentMenu == tuneMenu) ? drawTuneMenu : drawAdvancedSettingsMenu); #if !ALL(CASE_LIGHT_MENU, CASE_LIGHT_USE_NEOPIXEL) EDIT_ITEM(ICON_LedControl, MSG_LEDS, onDrawChkbMenu, setLedStatus, &leds.lights_on); #endif @@ -3590,13 +3544,38 @@ void drawMotionMenu() { #endif +void drawFilSetMenu() { + checkkey = ID_Menu; + if (SET_MENU(filSetMenu, MSG_FILAMENT_SET, 7)) { + BACK_ITEM(drawFilamentManMenu); + #if HAS_FILAMENT_SENSOR + EDIT_ITEM(ICON_Runout, MSG_RUNOUT_ENABLE, onDrawChkbMenu, setRunoutEnable, &runout.enabled); + #endif + #if HAS_FILAMENT_RUNOUT_DISTANCE + EDIT_ITEM(ICON_Runout, MSG_RUNOUT_DISTANCE_MM, onDrawPFloatMenu, setRunoutDistance, &runout.runout_distance()); + #endif + #if ENABLED(PREVENT_COLD_EXTRUSION) + EDIT_ITEM(ICON_ExtrudeMinT, MSG_EXTRUDER_MIN_TEMP, onDrawPIntMenu, setExtMinT, &hmiData.extMinT); + #endif + #if ENABLED(CONFIGURE_FILAMENT_CHANGE) + EDIT_ITEM(ICON_FilLoad, MSG_FILAMENT_LOAD, onDrawPFloatMenu, setFilLoad, &fc_settings[0].load_length); + EDIT_ITEM(ICON_FilUnload, MSG_FILAMENT_UNLOAD, onDrawPFloatMenu, setFilUnload, &fc_settings[0].unload_length); + #endif + #if ENABLED(FWRETRACT) + MENU_ITEM(ICON_FWRetract, MSG_FWRETRACT, onDrawSubMenu, drawFWRetractMenu); + #endif + } + updateMenu(filSetMenu); +} + void drawFilamentManMenu() { checkkey = ID_Menu; - if (SET_MENU(filamentMenu, MSG_FILAMENT_MAN, 6)) { + if (SET_MENU(filamentMenu, MSG_FILAMENT_MAN, 7)) { BACK_ITEM(drawPrepareMenu); #if ENABLED(NOZZLE_PARK_FEATURE) MENU_ITEM(ICON_Park, MSG_FILAMENT_PARK_ENABLED, onDrawMenuItem, parkHead); #endif + MENU_ITEM(ICON_FilSet, MSG_FILAMENT_SET, onDrawSubMenu, drawFilSetMenu); #if ENABLED(ADVANCED_PAUSE_FEATURE) #if HAS_PREHEAT MENU_ITEM(ICON_SetEndTemp, MSG_PREHEAT_HOTEND, onDrawSubMenu, drawPreheatHotendMenu); @@ -3661,7 +3640,7 @@ void drawFilamentManMenu() { void drawTemperatureMenu() { checkkey = ID_Menu; - if (SET_MENU_R(temperatureMenu, selrect({236, 2, 28, 12}), MSG_TEMPERATURE, 4 + PREHEAT_COUNT)) { + if (SET_MENU_R(temperatureMenu, selrect({236, 2, 28, 12}), MSG_TEMPERATURE, 6 + PREHEAT_COUNT)) { BACK_ITEM(drawControlMenu); #if HAS_HOTEND hotendTargetItem = EDIT_ITEM(ICON_SetEndTemp, MSG_UBL_SET_TEMP_HOTEND, onDrawHotendTemp, setHotendTemp, &thermalManager.temp_hotend[0].target); @@ -3672,6 +3651,14 @@ void drawTemperatureMenu() { #if HAS_FAN fanSpeedItem = EDIT_ITEM(ICON_FanSpeed, MSG_FAN_SPEED, onDrawFanSpeed, setFanSpeed, &thermalManager.fan_speed[0]); #endif + #if ENABLED(PIDTEMP) && ANY(PID_AUTOTUNE_MENU, PID_EDIT_MENU) + MENU_ITEM_F(ICON_PIDNozzle, STR_HOTEND_PID " Settings", onDrawSubMenu, drawHotendPIDMenu); + #elif ANY(MPC_EDIT_MENU, MPC_AUTOTUNE_MENU) + MENU_ITEM_F(ICON_MPCNozzle, "MPC Settings", onDrawSubMenu, drawHotendMPCMenu); + #endif + #if ENABLED(PIDTEMPBED) && ANY(PID_AUTOTUNE_MENU, PID_EDIT_MENU) + MENU_ITEM_F(ICON_PIDBed, STR_BED_PID " Settings", onDrawSubMenu, drawBedPIDMenu); + #endif #if HAS_PREHEAT #define _ITEM_SETPREHEAT(N) MENU_ITEM(ICON_SetPreheat##N, MSG_PREHEAT_## N ##_SETTINGS, onDrawSubMenu, drawPreheat## N ##Menu); REPEAT_1(PREHEAT_COUNT, _ITEM_SETPREHEAT) @@ -3810,7 +3797,7 @@ void drawMaxAccelMenu() { void drawSelectColorsMenu() { checkkey = ID_Menu; if (SET_MENU(selectColorMenu, MSG_COLORS_SELECT, 20)) { - BACK_ITEM(drawAdvancedSettingsMenu); + BACK_ITEM(drawControlMenu); MENU_ITEM(ICON_StockConfiguration, MSG_RESTORE_DEFAULTS, onDrawMenuItem, restoreDefaultColors); EDIT_ITEM_F(0, "Screen Background", onDrawSelColorItem, selColor, &hmiData.colorBackground); EDIT_ITEM_F(0, "Cursor", onDrawSelColorItem, selColor, &hmiData.colorCursor); @@ -3871,7 +3858,7 @@ void drawMaxAccelMenu() { checkkey = ID_Menu; if (SET_MENU_F(hotendMPCMenu, "MPC Settings", 7)) { MPC_t &mpc = thermalManager.temp_hotend[0].mpc; - BACK_ITEM(drawAdvancedSettingsMenu); + BACK_ITEM(drawTemperatureMenu); #if ENABLED(MPC_AUTOTUNE_MENU) MENU_ITEM(ICON_MPCNozzle, MSG_MPC_AUTOTUNE, onDrawMenuItem, []{ thermalManager.MPC_autotune(active_extruder, Temperature::MPCTuningType::AUTO); }); #endif @@ -3936,7 +3923,7 @@ void drawMaxAccelMenu() { void drawHotendPIDMenu() { checkkey = ID_Menu; if (SET_MENU_F(hotendPIDMenu, STR_HOTEND_PID " Settings", 8)) { - BACK_ITEM(drawAdvancedSettingsMenu); + BACK_ITEM(drawTemperatureMenu); #if ENABLED(PID_AUTOTUNE_MENU) MENU_ITEM_F(ICON_PIDNozzle, STR_HOTEND_PID, onDrawMenuItem, hotendPID); EDIT_ITEM(ICON_Temperature, MSG_TEMPERATURE, onDrawPIntMenu, setHotendPidT, &hmiData.hotendPidT); @@ -3966,7 +3953,7 @@ void drawMaxAccelMenu() { void drawBedPIDMenu() { checkkey = ID_Menu; if (SET_MENU_F(bedPIDMenu, STR_BED_PID " Settings", 8)) { - BACK_ITEM(drawAdvancedSettingsMenu); + BACK_ITEM(drawTemperatureMenu); #if ENABLED(PID_AUTOTUNE_MENU) MENU_ITEM_F(ICON_PIDBed, STR_BED_PID, onDrawMenuItem,bedPID); EDIT_ITEM(ICON_Temperature, MSG_TEMPERATURE, onDrawPIntMenu, setBedPidT, &hmiData.bedPidT); @@ -4051,28 +4038,30 @@ void drawMaxAccelMenu() { //============================================================================= #if HAS_MESH - void drawMeshPoints(bool selected, int8_t line, int8_t value) { - char mpmsg[10]; - sprintf(mpmsg, "%ix%i", value, value); - if (selected) { DWINUI::drawString(DWINUI::textColor, hmiData.colorSelected, VALX + MENU_CHR_H, MBASE(line), mpmsg); } - else { DWINUI::drawString(VALX + MENU_CHR_H, MBASE(line), mpmsg); } - } - void onDrawMeshPoints(MenuItem* menuitem, int8_t line) { - onDrawMenuItem(menuitem, line); - drawMeshPoints(false, line, hmiData.grid_max_points); - redrawItem(); - } + #if PROUI_GRID_PNTS + void drawMeshPoints(bool selected, int8_t line, int8_t value) { + char mpmsg[10]; + sprintf(mpmsg, "%ix%i", value, value); + if (selected) { DWINUI::drawString(DWINUI::textColor, hmiData.colorSelected, VALX + MENU_CHR_H, MBASE(line), mpmsg); } + else { DWINUI::drawString(VALX + MENU_CHR_H, MBASE(line), mpmsg); } + } + void onDrawMeshPoints(MenuItem* menuitem, int8_t line) { + onDrawMenuItem(menuitem, line); + drawMeshPoints(false, line, hmiData.grid_max_points); + redrawItem(); + } - void applyMeshPoints() { hmiData.grid_max_points = menuData.value; redrawItem(); } + void applyMeshPoints() { hmiData.grid_max_points = menuData.value; redrawItem(); } - void setMeshPoints() { setPIntOnClick(GRID_MIN, GRID_LIMIT, applyMeshPoints); } + void setMeshPoints() { setPIntOnClick(GRID_MIN, GRID_LIMIT, applyMeshPoints); } - // void ApplyMeshPoints() { applyMeshPoints(); redrawMenu(); } - // void LiveMeshPoints() { drawMeshPoints(true, currentMenu->line(), menuData.value); } - void SetMeshPoints() { - setOnClick(ID_SetIntNoDraw, GRID_MIN, GRID_LIMIT, 0, hmiData.grid_max_points, applyMeshPoints); - drawMeshPoints(true, currentMenu->line(), hmiData.grid_max_points); - } + // void ApplyMeshPoints() { applyMeshPoints(); redrawMenu(); } + // void LiveMeshPoints() { drawMeshPoints(true, currentMenu->line(), menuData.value); } + void SetMeshPoints() { + setOnClick(ID_SetIntNoDraw, GRID_MIN, GRID_LIMIT, 0, hmiData.grid_max_points, applyMeshPoints); + drawMeshPoints(true, currentMenu->line(), hmiData.grid_max_points); + } + #endif void applyMeshFadeHeight() { set_z_fade_height(planner.z_fade_height); } void setMeshFadeHeight() { setPFloatOnClick(0, 100, 1, applyMeshFadeHeight); } @@ -4083,9 +4072,6 @@ void drawMaxAccelMenu() { dwinUpdateLCD(); } - void applyMeshInset() { reset_bed_level(); redrawItem(); } - void setMeshInset() { setPFloatOnClick(X_MIN_POS, X_MAX_POS, UNITFDIGITS, applyMeshInset); } - #if ENABLED(PREHEAT_BEFORE_LEVELING) void setBedLevT() { setPIntOnClick(MIN_BEDTEMP, MAX_BEDTEMP); } #endif @@ -4097,6 +4083,8 @@ void drawMaxAccelMenu() { void setEditMeshX() { hmiValue.select = 0; setIntOnClick(0, GRID_MAX_POINTS_X - 1, bedLevelTools.mesh_x, applyEditMeshX, liveEditMesh); } void setEditMeshY() { hmiValue.select = 1; setIntOnClick(0, GRID_MAX_POINTS_Y - 1, bedLevelTools.mesh_y, applyEditMeshY, liveEditMesh); } void setEditZValue() { setPFloatOnClick(Z_OFFSET_MIN, Z_OFFSET_MAX, 3); } + void applyMeshInset() { reset_bed_level(); redrawItem(); } + void setMeshInset() { setPFloatOnClick(X_MIN_POS, X_MAX_POS, UNITFDIGITS, applyMeshInset); } #endif void resetMesh() { bedLevelTools.meshReset(); LCD_MESSAGE(MSG_MESH_RESET); } @@ -4147,18 +4135,17 @@ void drawMaxAccelMenu() { void drawMeshSetMenu() { checkkey = ID_Menu; - if (SET_MENU(meshMenu, MSG_MESH_LEVELING, 16)) { - BACK_ITEM(drawAdvancedSettingsMenu); + if (SET_MENU(meshMenu, MSG_MESH_LEVELING, 14)) { + BACK_ITEM(drawLevelMenu); #if ENABLED(PREHEAT_BEFORE_LEVELING) EDIT_ITEM(ICON_Temperature, MSG_UBL_SET_TEMP_BED, onDrawPIntMenu, setBedLevT, &hmiData.bedLevT); #endif - EDIT_ITEM(ICON_MeshPoints, MSG_MESH_POINTS, onDrawPInt8Menu, setMeshPoints, &hmiData.grid_max_points); - MENU_ITEM(ICON_MeshPoints, MSG_MESH_POINTS, onDrawMeshPoints, SetMeshPoints); + #if PROUI_GRID_PNTS + EDIT_ITEM(ICON_MeshPoints, MSG_MESH_POINTS, onDrawPInt8Menu, setMeshPoints, &hmiData.grid_max_points); + MENU_ITEM(ICON_MeshPoints, MSG_MESH_POINTS, onDrawMeshPoints, SetMeshPoints); + #endif EDIT_ITEM(ICON_SetZOffset, MSG_Z_FADE_HEIGHT, onDrawPFloatMenu, setMeshFadeHeight, &planner.z_fade_height); EDIT_ITEM(ICON_UBLActive, MSG_ACTIVATE_MESH, onDrawChkbMenu, setMeshActive, &planner.leveling_active); - #if HAS_BED_PROBE - MENU_ITEM(ICON_Level, MSG_AUTO_MESH, onDrawMenuItem, autoLevel); - #endif #if ENABLED(AUTO_BED_LEVELING_UBL) EDIT_ITEM(ICON_UBLSlot, MSG_UBL_STORAGE_SLOT, onDrawUBLSlot, setUBLSlot, &bedlevel.storage_slot); MENU_ITEM(ICON_UBLMeshSave, MSG_UBL_SAVE_MESH, onDrawMenuItem, ublMeshSave); @@ -4168,9 +4155,6 @@ void drawMaxAccelMenu() { MENU_ITEM(ICON_UBLSmartFill, MSG_UBL_SMART_FILLIN, onDrawMenuItem, ublSmartFillMesh); #endif MENU_ITEM(ICON_MeshReset, MSG_MESH_RESET, onDrawMenuItem, resetMesh); - #if ENABLED(PROUI_MESH_EDIT) - MENU_ITEM(ICON_MeshEdit, MSG_EDIT_MESH, onDrawSubMenu, drawEditMeshMenu); - #endif MENU_ITEM(ICON_MeshViewer, MSG_MESH_VIEW, onDrawSubMenu, dwinMeshViewer); } updateMenu(meshMenu); @@ -4183,7 +4167,7 @@ void drawMaxAccelMenu() { checkkey = ID_Menu; if (SET_MENU(editMeshMenu, MSG_EDIT_MESH, 10)) { bedLevelTools.mesh_x = bedLevelTools.mesh_y = 0; - BACK_ITEM(drawMeshSetMenu); + BACK_ITEM(drawLevelMenu); EDIT_ITEM(ICON_MeshEditX, MSG_MESH_X, onDrawPInt8Menu, setEditMeshX, &bedLevelTools.mesh_x); EDIT_ITEM(ICON_MeshEditY, MSG_MESH_Y, onDrawPInt8Menu, setEditMeshY, &bedLevelTools.mesh_y); editZValueItem = EDIT_ITEM(ICON_MeshEditZ, MSG_MESH_EDIT_Z, onDrawPFloat2Menu, setEditZValue, &bedlevel.z_values[bedLevelTools.mesh_x][bedLevelTools.mesh_y]); @@ -4200,4 +4184,29 @@ void drawMaxAccelMenu() { #endif // HAS_MESH +void drawLevelMenu() { + checkkey = ID_Menu; + if (SET_MENU(levelMenu, MSG_BED_LEVELING, 6)) { + BACK_ITEM(gotoMainMenu); + #if ENABLED(EEPROM_SETTINGS) + MENU_ITEM(ICON_WriteEEPROM, MSG_STORE_EEPROM, onDrawMenuItem, writeEEPROM); + #endif + #if HAS_BED_PROBE + MENU_ITEM(ICON_Level, MSG_AUTO_MESH, onDrawMenuItem, autoLevel); + MENU_ITEM(ICON_ProbeSet, MSG_ZPROBE_SETTINGS, onDrawSubMenu, drawProbeSetMenu); + #endif + #if HAS_MESH + MENU_ITEM(ICON_ProbeSet, MSG_MESH_LEVELING, onDrawSubMenu, drawMeshSetMenu); + #if ENABLED(PROUI_MESH_EDIT) + MENU_ITEM(ICON_MeshEdit, MSG_EDIT_MESH, onDrawSubMenu, drawEditMeshMenu); + #endif + #endif + #if HAS_HOME_OFFSET + MENU_ITEM(ICON_ProbeSet, MSG_SET_HOME_OFFSETS, onDrawSubMenu, drawHomeOffsetMenu); + #endif + } + ui.reset_status(true); + updateMenu(levelMenu); +} + #endif // DWIN_LCD_PROUI diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 107f41686fd8..5077246f1e8a 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -158,7 +158,9 @@ typedef struct { IF_DISABLED(BD_SENSOR, uint8_t multiple_probing = MULTIPLE_PROBING); uint16_t zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; #endif - TERN_(PROUI_GRID_PNTS, uint8_t grid_max_points = DEF_GRID_MAX_POINTS); + #if PROUI_GRID_PNTS + uint8_t grid_max_points = DEF_GRID_MAX_POINTS; + #endif } hmi_data_t; extern hmi_data_t hmiData; @@ -328,6 +330,7 @@ void drawPrintFileMenu(); void drawControlMenu(); void drawAdvancedSettingsMenu(); void drawPrepareMenu(); +void drawLevelMenu(); void drawMoveMenu(); void drawTrammingMenu(); #if HAS_HOME_OFFSET @@ -429,12 +432,13 @@ void drawMaxAccelMenu(); #define GRID_MAX_POINTS_Y hmiData.grid_max_points #define GRID_MAX_POINTS (hmiData.grid_max_points * hmiData.grid_max_points) #endif + #if HAS_BED_PROBE #undef Z_PROBE_FEEDRATE_SLOW #define Z_PROBE_FEEDRATE_SLOW hmiData.zprobeFeed #endif -#if HAS_MESH +#if ENABLED(PROUI_MESH_EDIT) #undef MESH_MIN_X #undef MESH_MAX_X #undef MESH_MIN_Y diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index cfb355f7cc5e..7c77a5d2056e 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -67,7 +67,7 @@ MarlinUI ui; constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; -#if ALL(DWIN_LCD_PROUI, HAS_MESH) +#if ALL(DWIN_LCD_PROUI, PROUI_MESH_EDIT) float MarlinUI::mesh_inset_min_x = DEF_MESH_MIN_X; float MarlinUI::mesh_inset_max_x = DEF_MESH_MAX_X; float MarlinUI::mesh_inset_min_y = DEF_MESH_MIN_Y; diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index 597b4793d14c..673e15fa0bc7 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -198,7 +198,7 @@ class MarlinUI { TERN_(HAS_MARLINUI_MENU, currentScreen = status_screen); } - #if ALL(DWIN_LCD_PROUI, HAS_MESH) + #if ALL(DWIN_LCD_PROUI, PROUI_MESH_EDIT) static float mesh_inset_min_x; static float mesh_inset_max_x; static float mesh_inset_min_y; diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 2852ea41da3c..9fae2aa6f0a6 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -582,9 +582,9 @@ typedef struct SettingsDataStruct { #endif // - // MESH_INSET workaround + // Editable MESH_INSET // - #if ALL(DWIN_LCD_PROUI, HAS_MESH) + #if ALL(DWIN_LCD_PROUI, PROUI_MESH_EDIT) float ui_mesh_inset_min_x; float ui_mesh_inset_max_x; float ui_mesh_inset_min_y; @@ -1637,9 +1637,9 @@ void MarlinSettings::postprocess() { #endif // - // MESH_INSET workaround + // Editable MESH_INSET // - #if ALL(DWIN_LCD_PROUI, HAS_MESH) + #if ALL(DWIN_LCD_PROUI, PROUI_MESH_EDIT) EEPROM_WRITE(ui.mesh_inset_min_x); EEPROM_WRITE(ui.mesh_inset_max_x); EEPROM_WRITE(ui.mesh_inset_min_y); @@ -2720,8 +2720,8 @@ void MarlinSettings::postprocess() { if (!validating) dwinCopySettingsFrom(dwin_data); } - // MESH_INSET workaround - #if ALL(DWIN_LCD_PROUI, HAS_MESH) + // Editable MESH_INSET + #if ENABLED(PROUI_MESH_EDIT) _FIELD_TEST(ui_mesh_inset_min_x); EEPROM_READ(ui.mesh_inset_min_x); _FIELD_TEST(ui_mesh_inset_max_x); @@ -3239,9 +3239,9 @@ void MarlinSettings::reset() { TERN_(DWIN_CREALITY_LCD_JYERSUI, jyersDWIN.resetSettings()); // - // MESH_INSET workaround + // Editable MESH_INSET // - #if ALL(DWIN_LCD_PROUI, HAS_MESH) + #if ALL(DWIN_LCD_PROUI, PROUI_MESH_EDIT) ui.mesh_inset_min_x = MESH_INSET; ui.mesh_inset_max_x = (X_BED_SIZE - MESH_INSET); ui.mesh_inset_min_y = MESH_INSET; From 4cee1c1cf22fe4ca844b09d9cf951836939355a4 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Sat, 6 Apr 2024 08:32:15 -0400 Subject: [PATCH 30/47] move hmiData to dwin_defines.h, tweak --- Marlin/src/lcd/e3v2/proui/dwin.h | 85 --------------- Marlin/src/lcd/e3v2/proui/dwin_defines.h | 125 ++++++++++++++++++++--- 2 files changed, 112 insertions(+), 98 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 5077246f1e8a..1029d37d8d0a 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -95,77 +95,6 @@ enum processID : uint8_t { #define DWIN_CHINESE 123 #define DWIN_ENGLISH 0 -typedef struct { - // Color settings - uint16_t colorBackground; - uint16_t colorCursor; - uint16_t colorTitleBg; - uint16_t colorTitleTxt; - uint16_t colorText; - uint16_t colorSelected; - uint16_t colorSplitLine; - uint16_t colorHighlight; - uint16_t colorStatusBg; - uint16_t colorStatusTxt; - uint16_t colorPopupBg; - uint16_t colorPopupTxt; - uint16_t colorAlertBg; - uint16_t colorAlertTxt; - uint16_t colorPercentTxt; - uint16_t colorBarfill; - uint16_t colorIndicator; - uint16_t colorCoordinate; - - // Temperatures - #if PROUI_PID_TUNE - int16_t pidCycles = DEF_PIDCYCLES; - #if ENABLED(PIDTEMP) - int16_t hotendPidT = DEF_HOTENDPIDT; - #endif - #if ENABLED(PIDTEMPBED) - int16_t bedPidT = DEF_BEDPIDT; - #endif - #endif - #if ENABLED(PREVENT_COLD_EXTRUSION) - int16_t extMinT = EXTRUDE_MINTEMP; - #endif - #if ENABLED(PREHEAT_BEFORE_LEVELING) - int16_t bedLevT = LEVELING_BED_TEMP; - #endif - #if ENABLED(BAUD_RATE_GCODE) - bool baud115K = false; - #endif - #if ALL(LCD_BED_TRAMMING, HAS_BED_PROBE) - bool fullManualTramming = false; - #endif - #if ENABLED(PROUI_MEDIASORT) - bool mediaSort = true; - #endif - bool mediaAutoMount = ENABLED(HAS_SD_EXTENDER); - #if ALL(INDIVIDUAL_AXIS_HOMING_SUBMENU, MESH_BED_LEVELING) - uint8_t zAfterHoming = DEF_Z_AFTER_HOMING; - #endif - #if ALL(LED_CONTROL_MENU, HAS_COLOR_LEDS) - LEDColor ledColor = defColorLeds; - #endif - #if ENABLED(ADAPTIVE_STEP_SMOOTHING) - bool adaptiveStepSmoothing = true; - #endif - #if HAS_GCODE_PREVIEW - bool enablePreview = true; - #endif - #if HAS_BED_PROBE - IF_DISABLED(BD_SENSOR, uint8_t multiple_probing = MULTIPLE_PROBING); - uint16_t zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; - #endif - #if PROUI_GRID_PNTS - uint8_t grid_max_points = DEF_GRID_MAX_POINTS; - #endif -} hmi_data_t; - -extern hmi_data_t hmiData; -static constexpr size_t eeprom_data_size = sizeof(hmi_data_t); - typedef struct { int8_t r, g, b; void set(int8_t _r, int8_t _g, int8_t _b) { r = _r; g = _g; b = _b; } @@ -424,20 +353,6 @@ void drawMaxAccelMenu(); #endif // ProUI extra features -#if PROUI_GRID_PNTS - #undef GRID_MAX_POINTS_X - #undef GRID_MAX_POINTS_Y - #undef GRID_MAX_POINTS - #define GRID_MAX_POINTS_X hmiData.grid_max_points - #define GRID_MAX_POINTS_Y hmiData.grid_max_points - #define GRID_MAX_POINTS (hmiData.grid_max_points * hmiData.grid_max_points) -#endif - -#if HAS_BED_PROBE - #undef Z_PROBE_FEEDRATE_SLOW - #define Z_PROBE_FEEDRATE_SLOW hmiData.zprobeFeed -#endif - #if ENABLED(PROUI_MESH_EDIT) #undef MESH_MIN_X #undef MESH_MAX_X diff --git a/Marlin/src/lcd/e3v2/proui/dwin_defines.h b/Marlin/src/lcd/e3v2/proui/dwin_defines.h index d9fefb656013..4e5927a6662c 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin_defines.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_defines.h @@ -29,6 +29,8 @@ */ #include "../../../inc/MarlinConfigPre.h" +#include +#include "../../../core/types.h" #if defined(__STM32F1__) || defined(STM32F1) #define DASH_REDRAW 1 @@ -118,19 +120,6 @@ #define HAS_LOCKSCREEN 1 // Simple lockscreen #define HAS_SD_EXTENDER 1 // Enable to support SD card extender cables -/** - * ProUI extra features - */ -#if HAS_BED_PROBE - constexpr uint16_t DEF_Z_PROBE_FEEDRATE_SLOW = Z_PROBE_FEEDRATE_SLOW; -#endif - -#if PROUI_GRID_PNTS - constexpr uint8_t DEF_GRID_MAX_POINTS = GRID_MAX_POINTS_X; - #define GRID_MIN 3 - #define GRID_LIMIT 9 -#endif - #if ENABLED(PROUI_MESH_EDIT) #ifndef MESH_INSET #define MESH_INSET 10 @@ -158,3 +147,113 @@ #ifndef MULTIPLE_PROBING #define MULTIPLE_PROBING 0 #endif + +#if HAS_BED_PROBE + constexpr uint16_t DEF_Z_PROBE_FEEDRATE_SLOW = Z_PROBE_FEEDRATE_SLOW; +#endif + +#if PROUI_GRID_PNTS + constexpr uint8_t DEF_GRID_MAX_POINTS = GRID_MAX_POINTS_X; + #define GRID_MIN 3 + #define GRID_LIMIT 9 +#endif + +#if HAS_EXTRUDERS + constexpr bool DEF_INVERT_E0_DIR = INVERT_E0_DIR; +#endif + +typedef struct { + // Color settings + uint16_t colorBackground; + uint16_t colorCursor; + uint16_t colorTitleBg; + uint16_t colorTitleTxt; + uint16_t colorText; + uint16_t colorSelected; + uint16_t colorSplitLine; + uint16_t colorHighlight; + uint16_t colorStatusBg; + uint16_t colorStatusTxt; + uint16_t colorPopupBg; + uint16_t colorPopupTxt; + uint16_t colorAlertBg; + uint16_t colorAlertTxt; + uint16_t colorPercentTxt; + uint16_t colorBarfill; + uint16_t colorIndicator; + uint16_t colorCoordinate; + + // Temperatures + #if ANY(PIDTEMP, PIDTEMPBED, PIDTEMPCHAMBER) + int16_t pidCycles = DEF_PIDCYCLES; + #endif + #if ENABLED(PIDTEMP) + int16_t hotendPidT = DEF_HOTENDPIDT; + #endif + #if ENABLED(PIDTEMPBED) + int16_t bedPidT = DEF_BEDPIDT; + #endif + #if ENABLED(PREVENT_COLD_EXTRUSION) + int16_t extMinT = EXTRUDE_MINTEMP; + #endif + #if ENABLED(PREHEAT_BEFORE_LEVELING) + int16_t bedLevT = LEVELING_BED_TEMP; + #endif + + // Various Options + #if ENABLED(BAUD_RATE_GCODE) + bool baud115K = false; + #endif + #if ALL(LCD_BED_TRAMMING, HAS_BED_PROBE) + bool fullManualTramming = false; + #endif + #if ENABLED(PROUI_MEDIASORT) + bool mediaSort = true; + #endif + bool mediaAutoMount = ENABLED(HAS_SD_EXTENDER); + #if ALL(INDIVIDUAL_AXIS_HOMING_SUBMENU, MESH_BED_LEVELING) + uint8_t zAfterHoming = DEF_Z_AFTER_HOMING; + #endif + #if ALL(LED_CONTROL_MENU, HAS_COLOR_LEDS) + LEDColor ledColor = defColorLeds; + #endif + #if ENABLED(ADAPTIVE_STEP_SMOOTHING) + bool adaptiveStepSmoothing = true; + #endif + #if HAS_GCODE_PREVIEW + bool enablePreview = true; + #endif + #if HAS_BED_PROBE + IF_DISABLED(BD_SENSOR, uint8_t multiple_probing = MULTIPLE_PROBING); + uint16_t zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; + #endif + #if PROUI_GRID_PNTS + uint8_t grid_max_points = DEF_GRID_MAX_POINTS; + #endif + #if HAS_EXTRUDERS + bool Invert_E0 = DEF_INVERT_E0_DIR; + #endif +} hmi_data_t; + +extern hmi_data_t hmiData; +static constexpr size_t eeprom_data_size = sizeof(hmi_data_t); + +// ProUI extra feature redefines +#if PROUI_GRID_PNTS + #undef GRID_MAX_POINTS_X + #undef GRID_MAX_POINTS_Y + #undef GRID_MAX_POINTS + #define GRID_MAX_POINTS_X hmiData.grid_max_points + #define GRID_MAX_POINTS_Y hmiData.grid_max_points + #define GRID_MAX_POINTS (hmiData.grid_max_points * hmiData.grid_max_points) +#endif + +#if HAS_BED_PROBE + #undef Z_PROBE_FEEDRATE_SLOW + #define Z_PROBE_FEEDRATE_SLOW hmiData.zprobeFeed +#endif + +#if HAS_EXTRUDERS + #undef INVERT_E0_DIR + #define INVERT_E0_DIR hmiData.Invert_E0 +#endif From ffa5c64bb9cd1ec3c07b753d990425bc861098b0 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Sun, 14 Apr 2024 16:46:31 -0400 Subject: [PATCH 31/47] update - merge fixes --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 8 +-- Marlin/src/lcd/e3v2/proui/dwin.h | 77 ++---------------------- Marlin/src/lcd/e3v2/proui/dwin_defines.h | 29 +++++---- Marlin/src/lcd/extui/ui_api.h | 6 +- Marlin/src/lcd/marlinui.cpp | 7 --- Marlin/src/lcd/marlinui.h | 7 --- Marlin/src/module/settings.cpp | 10 --- 7 files changed, 33 insertions(+), 111 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 82d3a9c8a1b5..e8ce28849e57 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -4250,10 +4250,10 @@ void drawMaxAccelMenu() { EDIT_ITEM(ICON_MeshEditX, MSG_MESH_X, onDrawPInt8Menu, setEditMeshX, &bedLevelTools.mesh_x); EDIT_ITEM(ICON_MeshEditY, MSG_MESH_Y, onDrawPInt8Menu, setEditMeshY, &bedLevelTools.mesh_y); editZValueItem = EDIT_ITEM(ICON_MeshEditZ, MSG_MESH_EDIT_Z, onDrawPFloat2Menu, setEditZValue, &bedlevel.z_values[bedLevelTools.mesh_x][bedLevelTools.mesh_y]); - EDIT_ITEM(200 /*ICON_Box*/, MSG_MESH_MIN_X, onDrawPFloatMenu, setMeshInset, &ui.mesh_inset_min_x); - EDIT_ITEM(ICON_ProbeMargin, MSG_MESH_MAX_X, onDrawPFloatMenu, setMeshInset, &ui.mesh_inset_max_x); - EDIT_ITEM(200 /*ICON_Box*/, MSG_MESH_MIN_Y, onDrawPFloatMenu, setMeshInset, &ui.mesh_inset_min_y); - EDIT_ITEM(ICON_ProbeMargin, MSG_MESH_MAX_Y, onDrawPFloatMenu, setMeshInset, &ui.mesh_inset_max_y); + EDIT_ITEM(200 /*ICON_Box*/, MSG_MESH_MIN_X, onDrawPFloatMenu, setMeshInset, &hmiData.mesh_min_x); + EDIT_ITEM(ICON_ProbeMargin, MSG_MESH_MAX_X, onDrawPFloatMenu, setMeshInset, &hmiData.mesh_max_x); + EDIT_ITEM(200 /*ICON_Box*/, MSG_MESH_MIN_Y, onDrawPFloatMenu, setMeshInset, &hmiData.mesh_min_y); + EDIT_ITEM(ICON_ProbeMargin, MSG_MESH_MAX_Y, onDrawPFloatMenu, setMeshInset, &hmiData.mesh_max_y); //MENU_ITEM(254 /*ICON_AxisC*/, MSG_MESH_AMAX, onDrawMenuItem, maxMeshArea); //MENU_ITEM(ICON_SetHome, MSG_MESH_CENTER, onDrawMenuItem, centerMeshArea); } diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 4fa9d3dbd54f..98804aaa5933 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -104,72 +104,6 @@ enum processID : uint8_t { #define DWIN_CHINESE 123 #define DWIN_ENGLISH 0 -typedef struct { - // Color settings - uint16_t colorBackground; - uint16_t colorCursor; - uint16_t colorTitleBg; - uint16_t colorTitleTxt; - uint16_t colorText; - uint16_t colorSelected; - uint16_t colorSplitLine; - uint16_t colorHighlight; - uint16_t colorStatusBg; - uint16_t colorStatusTxt; - uint16_t colorPopupBg; - uint16_t colorPopupTxt; - uint16_t colorAlertBg; - uint16_t colorAlertTxt; - uint16_t colorPercentTxt; - uint16_t colorBarfill; - uint16_t colorIndicator; - uint16_t colorCoordinate; - - // Temperatures - #if HAS_PID_HEATING - int16_t pidCycles = DEF_PIDCYCLES; - #if ENABLED(PIDTEMP) - celsius_t hotendPIDT = DEF_HOTENDPIDT; - #endif - #if ENABLED(PIDTEMPBED) - celsius_t bedPIDT = DEF_BEDPIDT; - #endif - #if ENABLED(PIDTEMPCHAMBER) - celsius_t chamberPIDT = DEF_CHAMBERPIDT; - #endif - #endif - #if ENABLED(PREVENT_COLD_EXTRUSION) - celsius_t extMinT = EXTRUDE_MINTEMP; - #endif - #if ENABLED(PREHEAT_BEFORE_LEVELING) - celsius_t bedLevT = LEVELING_BED_TEMP; - #endif - #if ENABLED(BAUD_RATE_GCODE) - bool baud115K = false; - #endif - #if ALL(LCD_BED_TRAMMING, HAS_BED_PROBE) - bool fullManualTramming = false; - #endif - #if ENABLED(PROUI_MEDIASORT) - bool mediaSort = true; - #endif - bool mediaAutoMount = ENABLED(HAS_SD_EXTENDER); - #if ALL(INDIVIDUAL_AXIS_HOMING_SUBMENU, MESH_BED_LEVELING) - uint8_t zAfterHoming = DEF_Z_AFTER_HOMING; - #define Z_POST_CLEARANCE hmiData.zAfterHoming - #endif - #if ALL(LED_CONTROL_MENU, HAS_COLOR_LEDS) - LEDColor ledColor = defColorLeds; - #endif - #if HAS_GCODE_PREVIEW - bool enablePreview = true; - #endif -} hmi_data_t; - -extern hmi_data_t hmiData; - -#define EXTUI_EEPROM_DATA_SIZE sizeof(hmi_data_t) - typedef struct { int8_t r, g, b; void set(int8_t _r, int8_t _g, int8_t _b) { r = _r; g = _g; b = _b; } @@ -439,11 +373,12 @@ void drawMaxAccelMenu(); #undef MESH_MAX_X #undef MESH_MIN_Y #undef MESH_MAX_Y - #include "../../marlinui.h" - #define MESH_MIN_X ui.mesh_inset_min_x - #define MESH_MAX_X ui.mesh_inset_max_x - #define MESH_MIN_Y ui.mesh_inset_min_y - #define MESH_MAX_Y ui.mesh_inset_max_y + #define MESH_MIN_X hmiData.mesh_inset_min_x + #define MESH_MAX_X hmiData.mesh_inset_max_x + #define MESH_MIN_Y hmiData.mesh_inset_min_y + #define MESH_MAX_Y hmiData.mesh_inset_max_y +#endif + #if PROUI_TUNING_GRAPH void dwinDrawPIDMPCPopup(); #endif diff --git a/Marlin/src/lcd/e3v2/proui/dwin_defines.h b/Marlin/src/lcd/e3v2/proui/dwin_defines.h index 3231f6be211d..dca0928d63dc 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin_defines.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_defines.h @@ -135,9 +135,9 @@ #if ENABLED(LIN_ADVANCE) #define PROUI_ITEM_ADVK // Tune > Linear Advance #endif -#if ANY(HAS_PID_HEATING, MPC_AUTOTUNE) && DISABLED(DISABLE_TUNING_GRAPH) +//#if ANY(HAS_PID_HEATING, MPC_AUTOTUNE) && DISABLED(DISABLE_TUNING_GRAPH) #define PROUI_TUNING_GRAPH 1 -#endif +//#endif #if PROUI_TUNING_GRAPH #define PROUI_ITEM_PLOT // Plot temp graph viewer #endif @@ -211,14 +211,15 @@ typedef struct { uint16_t colorCoordinate; // Temperatures - #if ANY(PIDTEMP, PIDTEMPBED, PIDTEMPCHAMBER) - int16_t pidCycles = DEF_PIDCYCLES; - #endif + int16_t pidCycles = DEF_PIDCYCLES; #if ENABLED(PIDTEMP) - int16_t hotendPidT = DEF_HOTENDPIDT; + celsius_t hotendPIDT = DEF_HOTENDPIDT; #endif #if ENABLED(PIDTEMPBED) - int16_t bedPidT = DEF_BEDPIDT; + celsius_t bedPIDT = DEF_BEDPIDT; + #endif + #if ENABLED(PIDTEMPCHAMBER) + celsius_t chamberPIDT = DEF_CHAMBERPIDT; #endif #if ENABLED(PREVENT_COLD_EXTRUSION) int16_t extMinT = EXTRUDE_MINTEMP; @@ -240,13 +241,11 @@ typedef struct { bool mediaAutoMount = ENABLED(HAS_SD_EXTENDER); #if ALL(INDIVIDUAL_AXIS_HOMING_SUBMENU, MESH_BED_LEVELING) uint8_t zAfterHoming = DEF_Z_AFTER_HOMING; + #define Z_POST_CLEARANCE hmiData.zAfterHoming #endif #if ALL(LED_CONTROL_MENU, HAS_COLOR_LEDS) LEDColor ledColor = defColorLeds; #endif - #if ENABLED(ADAPTIVE_STEP_SMOOTHING) - bool adaptiveStepSmoothing = true; - #endif #if HAS_GCODE_PREVIEW bool enablePreview = true; #endif @@ -260,10 +259,18 @@ typedef struct { #if HAS_EXTRUDERS bool Invert_E0 = DEF_INVERT_E0_DIR; #endif + #if ENABLED(PROUI_MESH_EDIT) + float mesh_min_x = DEF_MESH_MIN_X; + float mesh_max_x = DEF_MESH_MAX_X; + float mesh_min_y = DEF_MESH_MIN_Y; + float mesh_max_y = DEF_MESH_MAX_Y; + #endif } hmi_data_t; extern hmi_data_t hmiData; -static constexpr size_t eeprom_data_size = sizeof(hmi_data_t); + +#define EXTUI_EEPROM_DATA_SIZE sizeof(hmi_data_t) + // ProUI extra feature redefines #if PROUI_GRID_PNTS diff --git a/Marlin/src/lcd/extui/ui_api.h b/Marlin/src/lcd/extui/ui_api.h index 8202f7be8d0a..f684138444a5 100644 --- a/Marlin/src/lcd/extui/ui_api.h +++ b/Marlin/src/lcd/extui/ui_api.h @@ -95,7 +95,11 @@ namespace ExtUI { } #if HAS_MESH - typedef float bed_mesh_t[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; + #if PROUI_GRID_PNTS + typedef float bed_mesh_t[GRID_LIMIT][GRID_LIMIT]; + #else + typedef float bed_mesh_t[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; + #endif #endif /** diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 47b6928efec9..dca18f2125ff 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -66,13 +66,6 @@ MarlinUI ui; constexpr uint8_t epps = ENCODER_PULSES_PER_STEP; -#if ALL(DWIN_LCD_PROUI, PROUI_MESH_EDIT) - float MarlinUI::mesh_inset_min_x = DEF_MESH_MIN_X; - float MarlinUI::mesh_inset_max_x = DEF_MESH_MAX_X; - float MarlinUI::mesh_inset_min_y = DEF_MESH_MIN_Y; - float MarlinUI::mesh_inset_max_y = DEF_MESH_MAX_Y; -#endif - #if HAS_STATUS_MESSAGE #if ENABLED(STATUS_MESSAGE_SCROLLING) uint8_t MarlinUI::status_scroll_offset; // = 0 diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index e1f3adb99dbc..f21d2565bef6 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -202,13 +202,6 @@ class MarlinUI { TERN_(HAS_MARLINUI_MENU, currentScreen = status_screen); } - #if ALL(DWIN_LCD_PROUI, PROUI_MESH_EDIT) - static float mesh_inset_min_x; - static float mesh_inset_max_x; - static float mesh_inset_min_y; - static float mesh_inset_max_y; - #endif - static void init(); #if HAS_DISPLAY || HAS_DWIN_E3V2 diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index 20db0ae0ceb4..f6d9daa58db6 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -2707,16 +2707,6 @@ void MarlinSettings::postprocess() { // // JyersUI User Data // - #if ENABLED(DWIN_LCD_PROUI) - // { - // const char dwin_data[eeprom_data_size] = { 0 }; - // _FIELD_TEST(dwin_data); - // EEPROM_READ(dwin_data); - // if (!validating) dwinCopySettingsFrom(dwin_data); - // } - - - // #elif ENABLED(DWIN_CREALITY_LCD_JYERSUI) #if ENABLED(DWIN_CREALITY_LCD_JYERSUI) { const char dwin_settings[jyersDWIN.eeprom_data_size] = { 0 }; From d67a23f7fe86ca721e4ac4d78d07871b5f883ab8 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 14 Apr 2024 17:08:45 -0500 Subject: [PATCH 32/47] fix a compile err --- Marlin/src/lcd/e3v2/proui/dwin.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 98804aaa5933..0bba5a137cdb 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -373,10 +373,10 @@ void drawMaxAccelMenu(); #undef MESH_MAX_X #undef MESH_MIN_Y #undef MESH_MAX_Y - #define MESH_MIN_X hmiData.mesh_inset_min_x - #define MESH_MAX_X hmiData.mesh_inset_max_x - #define MESH_MIN_Y hmiData.mesh_inset_min_y - #define MESH_MAX_Y hmiData.mesh_inset_max_y + #define MESH_MIN_X hmiData.mesh_min_x + #define MESH_MAX_X hmiData.mesh_max_x + #define MESH_MIN_Y hmiData.mesh_min_y + #define MESH_MAX_Y hmiData.mesh_max_y #endif #if PROUI_TUNING_GRAPH From 5a9961ef9981c6f602fae0d71424991b3281e2af Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Sun, 14 Apr 2024 22:04:27 -0400 Subject: [PATCH 33/47] maybe fixes mesh_inset? --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index e8ce28849e57..9cce8132c311 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -4162,7 +4162,7 @@ void drawMaxAccelMenu() { void setEditMeshX() { hmiValue.select = 0; setIntOnClick(0, GRID_MAX_POINTS_X - 1, bedLevelTools.mesh_x, applyEditMeshX, liveEditMesh); } void setEditMeshY() { hmiValue.select = 1; setIntOnClick(0, GRID_MAX_POINTS_Y - 1, bedLevelTools.mesh_y, applyEditMeshY, liveEditMesh); } void setEditZValue() { setPFloatOnClick(Z_OFFSET_MIN, Z_OFFSET_MAX, 3); } - void applyMeshInset() { reset_bed_level(); redrawItem(); } + void applyMeshInset() { set_bed_leveling_enabled(false); reset_bed_level(); redrawItem(); } void setMeshInset() { setPFloatOnClick(X_MIN_POS, X_MAX_POS, UNITFDIGITS, applyMeshInset); } #endif From 1226dae5c0f196a3d25f440e0dabe1c4a84548d0 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Mon, 15 Apr 2024 05:47:58 -0400 Subject: [PATCH 34/47] fix editable mesh_inset to work, update get_mesh_x/y() --- .../feature/bedlevel/mbl/mesh_bed_leveling.h | 2 +- Marlin/src/feature/bedlevel/ubl/ubl.cpp | 32 +++++++------ Marlin/src/feature/bedlevel/ubl/ubl.h | 27 +++++++---- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 17 ++++--- Marlin/src/lcd/e3v2/proui/dwin.h | 12 ----- Marlin/src/lcd/e3v2/proui/dwin_defines.h | 46 +++++++++++-------- 6 files changed, 75 insertions(+), 61 deletions(-) diff --git a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h index b2e417876fbd..1d360c6bc0db 100644 --- a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h +++ b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h @@ -76,7 +76,7 @@ class mesh_bed_leveling { } static float get_mesh_x(const uint8_t i) { return index_to_xpos[i]; } - static float get_mesh_y(const uint8_t i) { return index_to_ypos[i]; } + static float get_mesh_y(const uint8_t j) { return index_to_ypos[j]; } static uint8_t cell_index_x(const_float_t x) { int8_t cx = (x - (MESH_MIN_X)) * RECIPROCAL(MESH_X_DIST); diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.cpp b/Marlin/src/feature/bedlevel/ubl/ubl.cpp index 0a5b0f1d68bd..02f668c2c078 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl.cpp @@ -66,21 +66,23 @@ int8_t unified_bed_leveling::storage_slot; bed_mesh_t unified_bed_leveling::z_values; -#define _GRIDPOS(A,N) (MESH_MIN_##A + N * (MESH_##A##_DIST)) - -const bed_mesh_t -unified_bed_leveling::_mesh_index_to_xpos PROGMEM = ARRAY_N(TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X), - _GRIDPOS(X, 0), _GRIDPOS(X, 1), _GRIDPOS(X, 2), _GRIDPOS(X, 3), - _GRIDPOS(X, 4), _GRIDPOS(X, 5), _GRIDPOS(X, 6), _GRIDPOS(X, 7), - _GRIDPOS(X, 8), _GRIDPOS(X, 9), _GRIDPOS(X, 10), _GRIDPOS(X, 11), - _GRIDPOS(X, 12), _GRIDPOS(X, 13), _GRIDPOS(X, 14), _GRIDPOS(X, 15) -), -unified_bed_leveling::_mesh_index_to_ypos PROGMEM = ARRAY_N(TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y), - _GRIDPOS(Y, 0), _GRIDPOS(Y, 1), _GRIDPOS(Y, 2), _GRIDPOS(Y, 3), - _GRIDPOS(Y, 4), _GRIDPOS(Y, 5), _GRIDPOS(Y, 6), _GRIDPOS(Y, 7), - _GRIDPOS(Y, 8), _GRIDPOS(Y, 9), _GRIDPOS(Y, 10), _GRIDPOS(Y, 11), - _GRIDPOS(Y, 12), _GRIDPOS(Y, 13), _GRIDPOS(Y, 14), _GRIDPOS(Y, 15) -); +#if DISABLED(PROUI_MESH_EDIT) + #define _GRIDPOS(A,N) (MESH_MIN_##A + N * (MESH_##A##_DIST)) + + const bed_mesh_t + unified_bed_leveling::_mesh_index_to_xpos PROGMEM = ARRAY_N(GRID_MAX_POINTS_X, + _GRIDPOS(X, 0), _GRIDPOS(X, 1), _GRIDPOS(X, 2), _GRIDPOS(X, 3), + _GRIDPOS(X, 4), _GRIDPOS(X, 5), _GRIDPOS(X, 6), _GRIDPOS(X, 7), + _GRIDPOS(X, 8), _GRIDPOS(X, 9), _GRIDPOS(X, 10), _GRIDPOS(X, 11), + _GRIDPOS(X, 12), _GRIDPOS(X, 13), _GRIDPOS(X, 14), _GRIDPOS(X, 15) + ), + unified_bed_leveling::_mesh_index_to_ypos PROGMEM = ARRAY_N(GRID_MAX_POINTS_Y, + _GRIDPOS(Y, 0), _GRIDPOS(Y, 1), _GRIDPOS(Y, 2), _GRIDPOS(Y, 3), + _GRIDPOS(Y, 4), _GRIDPOS(Y, 5), _GRIDPOS(Y, 6), _GRIDPOS(Y, 7), + _GRIDPOS(Y, 8), _GRIDPOS(Y, 9), _GRIDPOS(Y, 10), _GRIDPOS(Y, 11), + _GRIDPOS(Y, 12), _GRIDPOS(Y, 13), _GRIDPOS(Y, 14), _GRIDPOS(Y, 15) + ); +#endif volatile int16_t unified_bed_leveling::encoder_diff; diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.h b/Marlin/src/feature/bedlevel/ubl/ubl.h index a2900eab3ab5..9552ef1b467f 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.h +++ b/Marlin/src/feature/bedlevel/ubl/ubl.h @@ -117,8 +117,10 @@ class unified_bed_leveling { static void set_mesh_from_store(const mesh_store_t &stored_values, bed_mesh_t &out_values); #endif - static const bed_mesh_t _mesh_index_to_xpos, - _mesh_index_to_ypos; + #if DISABLED(PROUI_MESH_EDIT) + static const bed_mesh_t _mesh_index_to_xpos, + _mesh_index_to_ypos; + #endif #if HAS_MARLINUI_MENU static bool lcd_map_control; @@ -288,12 +290,21 @@ class unified_bed_leveling { static constexpr float get_z_offset() { return 0.0f; } - static float get_mesh_x(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 float get_mesh_y(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); - } + #if ENABLED(PROUI_MESH_EDIT) + static float get_mesh_x(const uint8_t i) { + return MESH_MIN_X + i * (MESH_X_DIST); + } + static float get_mesh_y(const uint8_t j) { + return MESH_MIN_Y + j * (MESH_Y_DIST); + } + #else + static float get_mesh_x(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 float get_mesh_y(const uint8_t j) { + return j < (GRID_MAX_POINTS_Y) ? pgm_read_float(&_mesh_index_to_ypos[j]) : MESH_MIN_Y + j * (MESH_Y_DIST); + } + #endif #if UBL_SEGMENTED static bool line_to_destination_segmented(const_feedRate_t scaled_fr_mm_s); diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index a52cb09adb64..e472cbf10d45 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -313,7 +313,6 @@ void unified_bed_leveling::G29() { #if ENABLED(DWIN_LCD_PROUI) save_ubl_active_state_and_disable(); gcode.process_subcommands_now(F("G28Z")); - gcode.process_subcommands_now(F("G28XY")); restore_ubl_active_state(false); // ...without telling ExtUI "done" #else // Send 'N' to force homing before G29 (internal only) @@ -821,10 +820,14 @@ void unified_bed_leveling::shift_mesh_height() { TERN_(Z_AFTER_PROBING, probe.move_z_after_probing()); - do_blocking_move_to_xy( - constrain(nearby.x - probe.offset_xy.x, MESH_MIN_X, MESH_MAX_X), - constrain(nearby.y - probe.offset_xy.y, MESH_MIN_Y, MESH_MAX_Y) - ); + #if ENABLED(DWIN_LCD_PROUI) + bedlevel.smart_fill_mesh(); + #else + do_blocking_move_to_xy( + constrain(nearby.x - probe.offset_xy.x, MESH_MIN_X, MESH_MAX_X), + constrain(nearby.y - probe.offset_xy.y, MESH_MIN_Y, MESH_MAX_Y) + ); + #endif TERN_(DWIN_LCD_PROUI, EXIT_PROBE_MESH:); restore_ubl_active_state(); @@ -1772,8 +1775,8 @@ void unified_bed_leveling::smart_fill_mesh() { SERIAL_EOL(); SERIAL_ECHOPGM("Y-Axis Mesh Points at: "); - for (uint8_t i = 0; i < GRID_MAX_POINTS_Y; ++i) { - SERIAL_ECHO(p_float_t(LOGICAL_Y_POSITION(get_mesh_y(i)), 3), F(" ")); + for (uint8_t j = 0; j < GRID_MAX_POINTS_Y; ++j) { + SERIAL_ECHO(p_float_t(LOGICAL_Y_POSITION(get_mesh_y(j)), 3), F(" ")); serial_delay(25); } SERIAL_EOL(); diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 0bba5a137cdb..680d08c8122c 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -367,18 +367,6 @@ void drawMaxAccelMenu(); #endif #endif -// ProUI extra features -#if ENABLED(PROUI_MESH_EDIT) - #undef MESH_MIN_X - #undef MESH_MAX_X - #undef MESH_MIN_Y - #undef MESH_MAX_Y - #define MESH_MIN_X hmiData.mesh_min_x - #define MESH_MAX_X hmiData.mesh_max_x - #define MESH_MIN_Y hmiData.mesh_min_y - #define MESH_MAX_Y hmiData.mesh_max_y -#endif - #if PROUI_TUNING_GRAPH void dwinDrawPIDMPCPopup(); #endif diff --git a/Marlin/src/lcd/e3v2/proui/dwin_defines.h b/Marlin/src/lcd/e3v2/proui/dwin_defines.h index dca0928d63dc..a8610ebd3446 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin_defines.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_defines.h @@ -32,15 +32,15 @@ #include #include "../../../core/types.h" -//#define TJC_DISPLAY // Enable for TJC display -//#define DACAI_DISPLAY // Enable for DACAI display -//#define TITLE_CENTERED // Center Menu Title Text +//#define TJC_DISPLAY // Enable for TJC display +//#define DACAI_DISPLAY // Enable for DACAI display +//#define TITLE_CENTERED // Center Menu Title Text #if HAS_MESH - #define PROUI_MESH_EDIT // Add a menu to edit mesh points + #define PROUI_MESH_EDIT // Add a menu to edit mesh inset + points #if ENABLED(PROUI_MESH_EDIT) - #define Z_OFFSET_MIN -3.0 // (mm) - #define Z_OFFSET_MAX 3.0 // (mm) + #define Z_OFFSET_MIN -3.0 // (mm) + #define Z_OFFSET_MAX 3.0 // (mm) #endif #endif @@ -135,9 +135,9 @@ #if ENABLED(LIN_ADVANCE) #define PROUI_ITEM_ADVK // Tune > Linear Advance #endif -//#if ANY(HAS_PID_HEATING, MPC_AUTOTUNE) && DISABLED(DISABLE_TUNING_GRAPH) +#if DISABLED(DISABLE_TUNING_GRAPH) #define PROUI_TUNING_GRAPH 1 -//#endif +#endif #if PROUI_TUNING_GRAPH #define PROUI_ITEM_PLOT // Plot temp graph viewer #endif @@ -249,30 +249,40 @@ typedef struct { #if HAS_GCODE_PREVIEW bool enablePreview = true; #endif - #if HAS_BED_PROBE - IF_DISABLED(BD_SENSOR, uint8_t multiple_probing = MULTIPLE_PROBING); - uint16_t zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; + #if ENABLED(PROUI_MESH_EDIT) + float mesh_min_x = DEF_MESH_MIN_X; + float mesh_max_x = DEF_MESH_MAX_X; + float mesh_min_y = DEF_MESH_MIN_Y; + float mesh_max_y = DEF_MESH_MAX_Y; #endif #if PROUI_GRID_PNTS uint8_t grid_max_points = DEF_GRID_MAX_POINTS; #endif + #if HAS_BED_PROBE + IF_DISABLED(BD_SENSOR, uint8_t multiple_probing = MULTIPLE_PROBING); + uint16_t zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; + #endif #if HAS_EXTRUDERS bool Invert_E0 = DEF_INVERT_E0_DIR; #endif - #if ENABLED(PROUI_MESH_EDIT) - float mesh_min_x = DEF_MESH_MIN_X; - float mesh_max_x = DEF_MESH_MAX_X; - float mesh_min_y = DEF_MESH_MIN_Y; - float mesh_max_y = DEF_MESH_MAX_Y; - #endif } hmi_data_t; extern hmi_data_t hmiData; #define EXTUI_EEPROM_DATA_SIZE sizeof(hmi_data_t) - // ProUI extra feature redefines +#if ENABLED(PROUI_MESH_EDIT) + #undef MESH_MIN_X + #undef MESH_MAX_X + #undef MESH_MIN_Y + #undef MESH_MAX_Y + #define MESH_MIN_X hmiData.mesh_min_x + #define MESH_MAX_X hmiData.mesh_max_x + #define MESH_MIN_Y hmiData.mesh_min_y + #define MESH_MAX_Y hmiData.mesh_max_y +#endif + #if PROUI_GRID_PNTS #undef GRID_MAX_POINTS_X #undef GRID_MAX_POINTS_Y From 324442771615596f4b478e1c46341ba78380fbfe Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Mon, 15 Apr 2024 05:50:03 -0400 Subject: [PATCH 35/47] update gcode_preview to work better --- Marlin/src/lcd/e3v2/proui/gcode_preview.cpp | 78 ++++++++++----------- Marlin/src/lcd/e3v2/proui/gcode_preview.h | 16 +++++ 2 files changed, 52 insertions(+), 42 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp b/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp index 045615f3c2ae..c14e35f513f4 100644 --- a/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp +++ b/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp @@ -39,51 +39,41 @@ #include "../../marlinui.h" #include "../../../sd/cardreader.h" -#include "../../../MarlinCore.h" // for wait_for_user -#include "dwin.h" #include "dwin_popup.h" #include "base64.h" -#define THUMBWIDTH 230 -#define THUMBHEIGHT 180 +#if ENABLED(TJC_DISPLAY) + #define THUMBWIDTH 180 + #define THUMBHEIGHT 180 +#else + #define THUMBWIDTH 200 + #define THUMBHEIGHT 200 +#endif Preview preview; +fileprop_t fileprop; -typedef struct { - char name[13] = ""; // 8.3 + null - uint32_t thumbstart = 0; - int thumbsize = 0; - int thumbheight = 0, thumbwidth = 0; - float time = 0; - float filament = 0; - float layer = 0; - float width = 0, height = 0, length = 0; - - void setname(const char * const fn) { - const uint8_t len = _MIN(sizeof(name) - 1, strlen(fn)); - memcpy(name, fn, len); - name[len] = '\0'; - } - - void clear() { - name[0] = '\0'; - thumbstart = 0; - thumbsize = 0; - thumbheight = thumbwidth = 0; - time = 0; - filament = 0; - layer = 0; - height = width = length = 0; - } - -} fileprop_t; +void fileprop_t::setname(const char * const fn) { + const uint8_t len = _MIN(sizeof(name) - 1, strlen(fn)); + memcpy(name, fn, len); + name[len] = '\0'; +} -fileprop_t fileprop; +void fileprop_t::clear() { + name[0] = '\0'; + thumbstart = 0; + thumbsize = 0; + thumbheight = thumbwidth = 0; + time = 0; + filament = 0; + layer = 0; + height = width = length = 0; +} void getValue(const char * const buf, PGM_P const key, float &value) { if (value != 0.0f) return; - char *posptr = strstr_P(buf, key); + const char *posptr = strstr_P(buf, key); if (posptr == nullptr) return; char num[10] = ""; @@ -101,7 +91,7 @@ void getValue(const char * const buf, PGM_P const key, float &value) { bool Preview::hasPreview() { const char * const tbstart = PSTR("; thumbnail begin " STRINGIFY(THUMBWIDTH) "x" STRINGIFY(THUMBHEIGHT)); - char *posptr = nullptr; + const char *posptr = nullptr; uint32_t indx = 0; float tmp = 0; @@ -184,11 +174,7 @@ bool Preview::hasPreview() { } void Preview::drawFromSD() { - if (!hasPreview()) { - hmiFlag.select_flag = 1; - wait_for_user = false; - return; - } + hasPreview(); MString<45> buf; dwinDrawRectangle(1, hmiData.colorBackground, 0, 0, DWIN_WIDTH, STATUS_Y - 1); @@ -208,10 +194,18 @@ void Preview::drawFromSD() { buf.set(F("Volume: "), p_float_t(fileprop.width, 1), 'x', p_float_t(fileprop.length, 1), 'x', p_float_t(fileprop.height, 1), F(" mm")); DWINUI::drawString(20, 70, &buf); } + + if (!fileprop.thumbsize) { + const uint8_t xpos = ((DWIN_WIDTH) / 2) - 55, // 55 = iconW/2 + ypos = ((DWIN_HEIGHT) / 2) - 125; + DWINUI::drawIcon(ICON_Info_0, xpos, ypos); + buf.set(PSTR("No " STRINGIFY(THUMBWIDTH) "x" STRINGIFY(THUMBHEIGHT) " Thumbnail")); + DWINUI::drawCenteredString(false, (DWINUI::fontID * 3), DWINUI::textColor, DWINUI::backColor, 0, DWIN_WIDTH, (DWIN_HEIGHT / 2), &buf); + } DWINUI::drawButton(BTN_Print, 26, 290); DWINUI::drawButton(BTN_Cancel, 146, 290); - show(); - drawSelectHighlight(true, 290); + if (fileprop.thumbsize) show(); + drawSelectHighlight(false, 290); dwinUpdateLCD(); } diff --git a/Marlin/src/lcd/e3v2/proui/gcode_preview.h b/Marlin/src/lcd/e3v2/proui/gcode_preview.h index 91466424475d..4d8325678ecb 100644 --- a/Marlin/src/lcd/e3v2/proui/gcode_preview.h +++ b/Marlin/src/lcd/e3v2/proui/gcode_preview.h @@ -39,3 +39,19 @@ class Preview { }; extern Preview preview; + +typedef struct { + char name[13] = ""; // 8.3 + null + uint32_t thumbstart; + int thumbsize, thumbheight, thumbwidth; + float time, + filament, + layer, + width, height, length; + + void setname(const char * const fn); + void clear(); + +} fileprop_t; + +extern fileprop_t fileprop; From b21a8d8e3f7f09017c983016d58928a1b1383f89 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Tue, 16 Apr 2024 12:07:47 -0500 Subject: [PATCH 36/47] call for ubl --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 9cce8132c311..74c50013f957 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -4162,7 +4162,7 @@ void drawMaxAccelMenu() { void setEditMeshX() { hmiValue.select = 0; setIntOnClick(0, GRID_MAX_POINTS_X - 1, bedLevelTools.mesh_x, applyEditMeshX, liveEditMesh); } void setEditMeshY() { hmiValue.select = 1; setIntOnClick(0, GRID_MAX_POINTS_Y - 1, bedLevelTools.mesh_y, applyEditMeshY, liveEditMesh); } void setEditZValue() { setPFloatOnClick(Z_OFFSET_MIN, Z_OFFSET_MAX, 3); } - void applyMeshInset() { set_bed_leveling_enabled(false); reset_bed_level(); redrawItem(); } + void applyMeshInset() { TERN_(AUTO_BED_LEVELING_UBL, set_bed_leveling_enabled(false)); reset_bed_level(); redrawItem(); } void setMeshInset() { setPFloatOnClick(X_MIN_POS, X_MAX_POS, UNITFDIGITS, applyMeshInset); } #endif From 953f6ba89ce07cb983b35dbdc422f1d63a853c53 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Fri, 19 Apr 2024 01:08:06 -0400 Subject: [PATCH 37/47] remove PROUI_GRID_PNTS --- Marlin/src/core/utility.h | 4 +- Marlin/src/feature/bedlevel/abl/bbl.cpp | 8 +-- Marlin/src/feature/bedlevel/abl/bbl.h | 10 +--- Marlin/src/feature/bedlevel/bedlevel.h | 2 +- Marlin/src/feature/bedlevel/hilbert_curve.cpp | 21 +++----- .../bedlevel/mbl/mesh_bed_leveling.cpp | 6 --- .../feature/bedlevel/mbl/mesh_bed_leveling.h | 6 --- Marlin/src/feature/bedlevel/ubl/ubl.cpp | 2 +- Marlin/src/feature/bedlevel/ubl/ubl.h | 2 +- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 2 +- Marlin/src/gcode/bedlevel/abl/G29.cpp | 10 ++-- Marlin/src/inc/SanityCheck.h | 51 +++++++++---------- Marlin/src/lcd/e3v2/proui/dwin.cpp | 34 +------------ Marlin/src/lcd/e3v2/proui/dwin_defines.h | 19 ------- Marlin/src/lcd/extui/ui_api.h | 6 +-- Marlin/src/module/settings.cpp | 38 +++++++------- 16 files changed, 66 insertions(+), 155 deletions(-) diff --git a/Marlin/src/core/utility.h b/Marlin/src/core/utility.h index b1f002579b4a..c3324443bab9 100644 --- a/Marlin/src/core/utility.h +++ b/Marlin/src/core/utility.h @@ -33,7 +33,7 @@ void safe_delay(millis_t ms); // Delay ensuring that temperatures are inline void serial_delay(const millis_t) {} #endif -#if TERN(PROUI_GRID_PNTS, HAS_MESH, GRID_MAX_POINTS) +#if GRID_MAX_POINTS // 16x16 bit arrays template @@ -49,7 +49,7 @@ void safe_delay(millis_t ms); // Delay ensuring that temperatures are inline bool marked(const xy_int8_t &xy) { return marked(xy.x, xy.y); } }; - typedef FlagBits MeshFlags; + typedef FlagBits MeshFlags; #endif diff --git a/Marlin/src/feature/bedlevel/abl/bbl.cpp b/Marlin/src/feature/bedlevel/abl/bbl.cpp index 799133c3f319..5cb4c3afa47a 100644 --- a/Marlin/src/feature/bedlevel/abl/bbl.cpp +++ b/Marlin/src/feature/bedlevel/abl/bbl.cpp @@ -118,17 +118,17 @@ void LevelingBilinear::set_grid(const xy_pos_t& _grid_spacing, const xy_pos_t& _ */ void LevelingBilinear::extrapolate_unprobed_bed_level() { #ifdef HALF_IN_X - TERN(PROUI_GRID_PNTS, const, constexpr) uint8_t ctrx2 = 0, xend = GRID_MAX_POINTS_X - 1; + constexpr uint8_t ctrx2 = 0, xend = GRID_MAX_POINTS_X - 1; #else - TERN(PROUI_GRID_PNTS, const, constexpr) uint8_t ctrx1 = (GRID_MAX_CELLS_X) / 2, // left-of-center + constexpr uint8_t ctrx1 = (GRID_MAX_CELLS_X) / 2, // left-of-center ctrx2 = (GRID_MAX_POINTS_X) / 2, // right-of-center xend = ctrx1; #endif #ifdef HALF_IN_Y - TERN(PROUI_GRID_PNTS, const, constexpr) uint8_t ctry2 = 0, yend = GRID_MAX_POINTS_Y - 1; + constexpr uint8_t ctry2 = 0, yend = GRID_MAX_POINTS_Y - 1; #else - TERN(PROUI_GRID_PNTS, const, constexpr) uint8_t ctry1 = (GRID_MAX_CELLS_Y) / 2, // top-of-center + constexpr uint8_t ctry1 = (GRID_MAX_CELLS_Y) / 2, // top-of-center ctry2 = (GRID_MAX_POINTS_Y) / 2, // bottom-of-center yend = ctry1; #endif diff --git a/Marlin/src/feature/bedlevel/abl/bbl.h b/Marlin/src/feature/bedlevel/abl/bbl.h index 4abb923333da..ca2e96593fde 100644 --- a/Marlin/src/feature/bedlevel/abl/bbl.h +++ b/Marlin/src/feature/bedlevel/abl/bbl.h @@ -36,14 +36,8 @@ class LevelingBilinear { static void extrapolate_one_point(const uint8_t x, const uint8_t y, const int8_t xdir, const int8_t ydir); #if ENABLED(ABL_BILINEAR_SUBDIVISION) - #if PROUI_GRID_PNTS - #define ABL_GRID_POINTS_VIRT_N (GRID_LIMIT - 1) * (BILINEAR_SUBDIVISIONS) + 1 - #define ABL_GRID_POINTS_VIRT_X ABL_GRID_POINTS_VIRT_N - #define ABL_GRID_POINTS_VIRT_Y ABL_GRID_POINTS_VIRT_N - #else - #define ABL_GRID_POINTS_VIRT_X (GRID_MAX_CELLS_X * (BILINEAR_SUBDIVISIONS) + 1) - #define ABL_GRID_POINTS_VIRT_Y (GRID_MAX_CELLS_Y * (BILINEAR_SUBDIVISIONS) + 1) - #endif + #define ABL_GRID_POINTS_VIRT_X (GRID_MAX_CELLS_X * (BILINEAR_SUBDIVISIONS) + 1) + #define ABL_GRID_POINTS_VIRT_Y (GRID_MAX_CELLS_Y * (BILINEAR_SUBDIVISIONS) + 1) static float z_values_virt[ABL_GRID_POINTS_VIRT_X][ABL_GRID_POINTS_VIRT_Y]; static xy_pos_t grid_spacing_virt; diff --git a/Marlin/src/feature/bedlevel/bedlevel.h b/Marlin/src/feature/bedlevel/bedlevel.h index b50592af509b..ccb9543e72e5 100644 --- a/Marlin/src/feature/bedlevel/bedlevel.h +++ b/Marlin/src/feature/bedlevel/bedlevel.h @@ -59,7 +59,7 @@ class TemporaryBedLevelingState { #if HAS_MESH - typedef float bed_mesh_t[TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)][TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y)]; + typedef float bed_mesh_t[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; #if ENABLED(AUTO_BED_LEVELING_BILINEAR) #include "abl/bbl.h" diff --git a/Marlin/src/feature/bedlevel/hilbert_curve.cpp b/Marlin/src/feature/bedlevel/hilbert_curve.cpp index 2dda23bac862..57cbdfb34ddd 100644 --- a/Marlin/src/feature/bedlevel/hilbert_curve.cpp +++ b/Marlin/src/feature/bedlevel/hilbert_curve.cpp @@ -26,21 +26,12 @@ #include "bedlevel.h" #include "hilbert_curve.h" -#if PROUI_GRID_PNTS - int8_t to_fix(int8_t v) { return v * 2; } - int8_t to_int(int8_t v) { return v / 2; } - uint8_t log2(uint8_t n) { return (n > 1) ? 1 + log2(uint8_t(n >> 1)) : 0; } - uint8_t order(uint8_t n) { return uint8_t(log2(uint8_t(n - 1))) + 1; } - #define ord order(GRID_MAX_POINTS_X) - #define dim _BV(ord) -#else - constexpr int8_t to_fix(int8_t v) { return v * 2; } - constexpr int8_t to_int(int8_t v) { return v / 2; } - constexpr uint8_t log2(uint8_t n) { return (n > 1) ? 1 + log2(uint8_t(n >> 1)) : 0; } - constexpr uint8_t order(uint8_t n) { return uint8_t(log2(uint8_t(n - 1))) + 1; } - constexpr uint8_t ord = order(_MAX(GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y)); - constexpr uint8_t dim = _BV(ord); -#endif +constexpr int8_t to_fix(int8_t v) { return v * 2; } +constexpr int8_t to_int(int8_t v) { return v / 2; } +constexpr uint8_t log2(uint8_t n) { return (n > 1) ? 1 + log2(uint8_t(n >> 1)) : 0; } +constexpr uint8_t order(uint8_t n) { return uint8_t(log2(uint8_t(n - 1))) + 1; } +constexpr uint8_t ord = order(_MAX(GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y)); +constexpr uint8_t dim = _BV(ord); static inline bool eval_candidate(int8_t x, int8_t y, hilbert_curve::callback_ptr func, void *data) { // The print bed likely has fewer points than the full Hilbert diff --git a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp index 517468c871b6..2969cf682203 100644 --- a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp +++ b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp @@ -35,15 +35,9 @@ mesh_bed_leveling bedlevel; float mesh_bed_leveling::z_offset, - #if PROUI_GRID_PNTS - mesh_bed_leveling::index_to_xpos[GRID_LIMIT], - mesh_bed_leveling::index_to_ypos[GRID_LIMIT]; - bed_mesh_t mesh_bed_leveling::z_values; - #else mesh_bed_leveling::index_to_xpos[GRID_MAX_POINTS_X], mesh_bed_leveling::index_to_ypos[GRID_MAX_POINTS_Y]; bed_mesh_t mesh_bed_leveling::z_values; - #endif mesh_bed_leveling::mesh_bed_leveling() { for (uint8_t i = 0; i < GRID_MAX_POINTS_X; ++i) diff --git a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h index 1d360c6bc0db..226e680ccd92 100644 --- a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h +++ b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.h @@ -38,15 +38,9 @@ enum MeshLevelingState : char { class mesh_bed_leveling { public: static float z_offset, - #if PROUI_GRID_PNTS - z_values[GRID_LIMIT][GRID_LIMIT], - index_to_xpos[GRID_LIMIT], - index_to_ypos[GRID_LIMIT]; - #else z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y], index_to_xpos[GRID_MAX_POINTS_X], index_to_ypos[GRID_MAX_POINTS_Y]; - #endif mesh_bed_leveling(); diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.cpp b/Marlin/src/feature/bedlevel/ubl/ubl.cpp index 02f668c2c078..3dd31c84bd3f 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl.cpp @@ -168,7 +168,7 @@ static void serial_echo_column_labels(const uint8_t sp) { void unified_bed_leveling::display_map(const uint8_t map_type) { const bool was = gcode.set_autoreport_paused(true); - IF_DISABLED(PROUI_GRID_PNTS, constexpr) uint8_t eachsp = 1 + 6 + 1, // [-3.567] + constexpr uint8_t eachsp = 1 + 6 + 1, // [-3.567] twixt = eachsp * (GRID_MAX_POINTS_X) - 9 * 2; // Leading 4sp, Coordinates 9sp each const bool human = !(map_type & 0x3), csv = map_type == 1, lcd = map_type == 2, comp = map_type & 0x4; diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.h b/Marlin/src/feature/bedlevel/ubl/ubl.h index 9552ef1b467f..3042d417d83e 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.h +++ b/Marlin/src/feature/bedlevel/ubl/ubl.h @@ -42,7 +42,7 @@ struct mesh_index_pair; #define MESH_Y_DIST (float((MESH_MAX_Y) - (MESH_MIN_Y)) / (GRID_MAX_CELLS_Y)) #if ENABLED(OPTIMIZED_MESH_STORAGE) - typedef int16_t mesh_store_t[TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)][TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y)]; + typedef int16_t mesh_store_t[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; #endif typedef struct { diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index e472cbf10d45..8dd94dbdf96f 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -1688,7 +1688,7 @@ void unified_bed_leveling::smart_fill_mesh() { // being extrapolated so that nearby points will have greater influence on // the point being extrapolated. Then extrapolate the mesh point from WLSF. - static_assert((TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y)) <= 16, "GRID_MAX_POINTS_Y too big"); + static_assert(GRID_MAX_POINTS_Y <= 16, "GRID_MAX_POINTS_Y too big"); uint16_t bitmap[GRID_MAX_POINTS_X] = { 0 }; struct linear_fit_data lsf_results; diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 47d86b66ec17..c39ab33f06a7 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -107,7 +107,7 @@ class G29_State { #elif ENABLED(AUTO_BED_LEVELING_3POINT) static constexpr grid_count_t abl_points = 3; #elif ABL_USES_GRID - TERN(PROUI_GRID_PNTS, const, static constexpr) grid_count_t abl_points = GRID_MAX_POINTS; + static constexpr grid_count_t abl_points = GRID_MAX_POINTS; #endif #if ABL_USES_GRID @@ -123,7 +123,7 @@ class G29_State { bool topography_map; xy_uint8_t grid_points; #else // Bilinear - IF_DISABLED(PROUI_GRID_PNTS, static constexpr) xy_uint8_t grid_points = { GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y }; + static constexpr xy_uint8_t grid_points = { GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y }; #endif #if ENABLED(AUTO_BED_LEVELING_BILINEAR) @@ -141,10 +141,8 @@ class G29_State { }; #if ABL_USES_GRID && ANY(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_BILINEAR) - #if DISABLED(PROUI_GRID_PNTS) - constexpr xy_uint8_t G29_State::grid_points; - constexpr grid_count_t G29_State::abl_points; - #endif + constexpr xy_uint8_t G29_State::grid_points; + constexpr grid_count_t G29_State::abl_points; #endif /** diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index ce14fa8b19d9..e40a312b664e 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -1559,30 +1559,27 @@ static_assert(NUM_SERVOS <= NUM_SERVO_PLUGS, "NUM_SERVOS (or some servo index) i /** * Bed Leveling Requirements */ - -#if !PROUI_GRID_PNTS - #if IS_SCARA && ANY(AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) - #error "SCARA machines can only use AUTO_BED_LEVELING_BILINEAR or MESH_BED_LEVELING." - #elif ENABLED(AUTO_BED_LEVELING_LINEAR) && !(WITHIN(GRID_MAX_POINTS_X, 2, 255) && WITHIN(GRID_MAX_POINTS_Y, 2, 255)) - #error "GRID_MAX_POINTS_[XY] must be between 2 and 255 with AUTO_BED_LEVELING_LINEAR." - #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) && !(WITHIN(GRID_MAX_POINTS_X, 3, 255) && WITHIN(GRID_MAX_POINTS_Y, 3, 255)) - #error "GRID_MAX_POINTS_[XY] must be between 3 and 255 with AUTO_BED_LEVELING_BILINEAR." - #elif ENABLED(AUTO_BED_LEVELING_UBL) - #if ENABLED(POLAR) - #error "AUTO_BED_LEVELING_UBL does not yet support POLAR printers." - #elif DISABLED(EEPROM_SETTINGS) - #error "AUTO_BED_LEVELING_UBL requires EEPROM_SETTINGS." - #elif !WITHIN(GRID_MAX_POINTS_X, 3, 255) || !WITHIN(GRID_MAX_POINTS_Y, 3, 255) - #error "GRID_MAX_POINTS_[XY] must be between 3 and 255." - #elif ALL(UBL_HILBERT_CURVE, DELTA) - #error "UBL_HILBERT_CURVE can only be used with a square / rectangular printable area." - #endif - #elif ENABLED(MESH_BED_LEVELING) - #if ENABLED(DELTA) - #error "MESH_BED_LEVELING is not compatible with DELTA printers." - #elif (GRID_MAX_POINTS_X) > 9 || (GRID_MAX_POINTS_Y) > 9 - #error "GRID_MAX_POINTS_X and GRID_MAX_POINTS_Y must be less than 10 for MBL." - #endif +#if IS_SCARA && ANY(AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_UBL) + #error "SCARA machines can only use AUTO_BED_LEVELING_BILINEAR or MESH_BED_LEVELING." +#elif ENABLED(AUTO_BED_LEVELING_LINEAR) && !(WITHIN(GRID_MAX_POINTS_X, 2, 255) && WITHIN(GRID_MAX_POINTS_Y, 2, 255)) + #error "GRID_MAX_POINTS_[XY] must be between 2 and 255 with AUTO_BED_LEVELING_LINEAR." +#elif ENABLED(AUTO_BED_LEVELING_BILINEAR) && !(WITHIN(GRID_MAX_POINTS_X, 3, 255) && WITHIN(GRID_MAX_POINTS_Y, 3, 255)) + #error "GRID_MAX_POINTS_[XY] must be between 3 and 255 with AUTO_BED_LEVELING_BILINEAR." +#elif ENABLED(AUTO_BED_LEVELING_UBL) + #if ENABLED(POLAR) + #error "AUTO_BED_LEVELING_UBL does not yet support POLAR printers." + #elif DISABLED(EEPROM_SETTINGS) + #error "AUTO_BED_LEVELING_UBL requires EEPROM_SETTINGS." + #elif !WITHIN(GRID_MAX_POINTS_X, 3, 255) || !WITHIN(GRID_MAX_POINTS_Y, 3, 255) + #error "GRID_MAX_POINTS_[XY] must be between 3 and 255." + #elif ALL(UBL_HILBERT_CURVE, DELTA) + #error "UBL_HILBERT_CURVE can only be used with a square / rectangular printable area." + #endif +#elif ENABLED(MESH_BED_LEVELING) + #if ENABLED(DELTA) + #error "MESH_BED_LEVELING is not compatible with DELTA printers." + #elif (GRID_MAX_POINTS_X) > 9 || (GRID_MAX_POINTS_Y) > 9 + #error "GRID_MAX_POINTS_X and GRID_MAX_POINTS_Y must be less than 10 for MBL." #endif #endif @@ -1599,10 +1596,8 @@ static_assert(NUM_SERVOS <= NUM_SERVO_PLUGS, "NUM_SERVOS (or some servo index) i #if ALL(HAS_MESH, CLASSIC_JERK) static_assert(DEFAULT_ZJERK > 0.1, "Low DEFAULT_ZJERK values are incompatible with mesh-based leveling."); #endif -#if !PROUI_GRID_PNTS - #if HAS_MESH && DGUS_LCD_UI_IA_CREALITY && GRID_MAX_POINTS > 25 - #error "DGUS_LCD_UI IA_CREALITY requires a mesh with no more than 25 points as defined by GRID_MAX_POINTS_X/Y." - #endif +#if HAS_MESH && DGUS_LCD_UI_IA_CREALITY && GRID_MAX_POINTS > 25 + #error "DGUS_LCD_UI IA_CREALITY requires a mesh with no more than 25 points as defined by GRID_MAX_POINTS_X/Y." #endif #if ENABLED(G26_MESH_VALIDATION) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 74c50013f957..f2f4fe2a3a03 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -1908,10 +1908,6 @@ void dwinSetDataDefaults() { IF_DISABLED(BD_SENSOR, hmiData.multiple_probing = MULTIPLE_PROBING); hmiData.zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; #endif - #if ENABLED(PROUI_GRID_PNTS) - hmiData.grid_max_points = DEF_GRID_MAX_POINTS; - #endif - } void dwinCopySettingsTo(char * const buff) { @@ -4117,30 +4113,6 @@ void drawMaxAccelMenu() { //============================================================================= #if HAS_MESH - #if PROUI_GRID_PNTS - void drawMeshPoints(bool selected, int8_t line, int8_t value) { - char mpmsg[10]; - sprintf(mpmsg, "%ix%i", value, value); - if (selected) { DWINUI::drawString(DWINUI::textColor, hmiData.colorSelected, VALX + MENU_CHR_H, MBASE(line), mpmsg); } - else { DWINUI::drawString(VALX + MENU_CHR_H, MBASE(line), mpmsg); } - } - void onDrawMeshPoints(MenuItem* menuitem, int8_t line) { - onDrawMenuItem(menuitem, line); - drawMeshPoints(false, line, hmiData.grid_max_points); - redrawItem(); - } - - void applyMeshPoints() { hmiData.grid_max_points = menuData.value; redrawItem(); } - - void setMeshPoints() { setPIntOnClick(GRID_MIN, GRID_LIMIT, applyMeshPoints); } - - // void ApplyMeshPoints() { applyMeshPoints(); redrawMenu(); } - // void LiveMeshPoints() { drawMeshPoints(true, currentMenu->line(), menuData.value); } - void SetMeshPoints() { - setOnClick(ID_SetIntNoDraw, GRID_MIN, GRID_LIMIT, 0, hmiData.grid_max_points, applyMeshPoints); - drawMeshPoints(true, currentMenu->line(), hmiData.grid_max_points); - } - #endif void applyMeshFadeHeight() { set_z_fade_height(planner.z_fade_height); } void setMeshFadeHeight() { setPFloatOnClick(0, 100, 1, applyMeshFadeHeight); } @@ -4214,15 +4186,11 @@ void drawMaxAccelMenu() { void drawMeshSetMenu() { checkkey = ID_Menu; - if (SET_MENU(meshMenu, MSG_MESH_LEVELING, 14)) { + if (SET_MENU(meshMenu, MSG_MESH_LEVELING, 12)) { BACK_ITEM(drawLevelMenu); #if ENABLED(PREHEAT_BEFORE_LEVELING) EDIT_ITEM(ICON_Temperature, MSG_UBL_SET_TEMP_BED, onDrawPIntMenu, setBedLevT, &hmiData.bedLevT); #endif - #if PROUI_GRID_PNTS - EDIT_ITEM(ICON_MeshPoints, MSG_MESH_POINTS, onDrawPInt8Menu, setMeshPoints, &hmiData.grid_max_points); - MENU_ITEM(ICON_MeshPoints, MSG_MESH_POINTS, onDrawMeshPoints, SetMeshPoints); - #endif EDIT_ITEM(ICON_SetZOffset, MSG_Z_FADE_HEIGHT, onDrawPFloatMenu, setMeshFadeHeight, &planner.z_fade_height); EDIT_ITEM(ICON_UBLActive, MSG_ACTIVATE_MESH, onDrawChkbMenu, setMeshActive, &planner.leveling_active); #if ENABLED(AUTO_BED_LEVELING_UBL) diff --git a/Marlin/src/lcd/e3v2/proui/dwin_defines.h b/Marlin/src/lcd/e3v2/proui/dwin_defines.h index a8610ebd3446..2b3760e69953 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin_defines.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_defines.h @@ -118,7 +118,6 @@ #define Z_OFFSET_MIN -3.0 // (mm) #define Z_OFFSET_MAX 3.0 // (mm) #endif - #define PROUI_GRID_PNTS 1 // Add a menu item to change GRID_MAX_POINTS - grid array #endif #if HAS_BED_PROBE #define PROUI_ITEM_ZFRS // Add a menu item to change Z_PROBE_FEEDRATE_SLOW - probe speed @@ -179,12 +178,6 @@ constexpr uint16_t DEF_Z_PROBE_FEEDRATE_SLOW = Z_PROBE_FEEDRATE_SLOW; #endif -#if PROUI_GRID_PNTS - constexpr uint8_t DEF_GRID_MAX_POINTS = GRID_MAX_POINTS_X; - #define GRID_MIN 3 - #define GRID_LIMIT 9 -#endif - #if HAS_EXTRUDERS constexpr bool DEF_INVERT_E0_DIR = INVERT_E0_DIR; #endif @@ -255,9 +248,6 @@ typedef struct { float mesh_min_y = DEF_MESH_MIN_Y; float mesh_max_y = DEF_MESH_MAX_Y; #endif - #if PROUI_GRID_PNTS - uint8_t grid_max_points = DEF_GRID_MAX_POINTS; - #endif #if HAS_BED_PROBE IF_DISABLED(BD_SENSOR, uint8_t multiple_probing = MULTIPLE_PROBING); uint16_t zprobeFeed = DEF_Z_PROBE_FEEDRATE_SLOW; @@ -283,15 +273,6 @@ extern hmi_data_t hmiData; #define MESH_MAX_Y hmiData.mesh_max_y #endif -#if PROUI_GRID_PNTS - #undef GRID_MAX_POINTS_X - #undef GRID_MAX_POINTS_Y - #undef GRID_MAX_POINTS - #define GRID_MAX_POINTS_X hmiData.grid_max_points - #define GRID_MAX_POINTS_Y hmiData.grid_max_points - #define GRID_MAX_POINTS (hmiData.grid_max_points * hmiData.grid_max_points) -#endif - #if HAS_BED_PROBE #undef Z_PROBE_FEEDRATE_SLOW #define Z_PROBE_FEEDRATE_SLOW hmiData.zprobeFeed diff --git a/Marlin/src/lcd/extui/ui_api.h b/Marlin/src/lcd/extui/ui_api.h index f684138444a5..8202f7be8d0a 100644 --- a/Marlin/src/lcd/extui/ui_api.h +++ b/Marlin/src/lcd/extui/ui_api.h @@ -95,11 +95,7 @@ namespace ExtUI { } #if HAS_MESH - #if PROUI_GRID_PNTS - typedef float bed_mesh_t[GRID_LIMIT][GRID_LIMIT]; - #else - typedef float bed_mesh_t[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; - #endif + typedef float bed_mesh_t[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; #endif /** diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index f6d9daa58db6..2be91d3d8ec0 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -271,8 +271,8 @@ typedef struct SettingsDataStruct { float mbl_z_offset; // bedlevel.z_offset uint8_t mesh_num_x, mesh_num_y; // GRID_MAX_POINTS_X, GRID_MAX_POINTS_Y uint16_t mesh_check; // Hash to check against X/Y - float mbl_z_values[TERN(MESH_BED_LEVELING, TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X), 3)] // bedlevel.z_values - [TERN(MESH_BED_LEVELING, TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y), 3)]; + float mbl_z_values[TERN(MESH_BED_LEVELING, GRID_MAX_POINTS_X, 3)] // bedlevel.z_values + [TERN(MESH_BED_LEVELING, GRID_MAX_POINTS_Y, 3)]; // // HAS_BED_PROBE @@ -945,15 +945,15 @@ void MarlinSettings::postprocess() { { #if ENABLED(MESH_BED_LEVELING) static_assert( - sizeof(bedlevel.z_values) == TERN(PROUI_GRID_PNTS, GRID_LIMIT * GRID_LIMIT, GRID_MAX_POINTS) * sizeof(bedlevel.z_values[0][0]), + sizeof(bedlevel.z_values) == GRID_MAX_POINTS * sizeof(bedlevel.z_values[0][0]), "MBL Z array is the wrong size." ); #else dummyf = 0; #endif - const uint8_t mesh_num_x = TERN(MESH_BED_LEVELING, TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X), 3), - mesh_num_y = TERN(MESH_BED_LEVELING, TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y), 3); + const uint8_t mesh_num_x = TERN(MESH_BED_LEVELING, GRID_MAX_POINTS_X, 3), + mesh_num_y = TERN(MESH_BED_LEVELING, GRID_MAX_POINTS_Y, 3); EEPROM_WRITE(TERN(MESH_BED_LEVELING, bedlevel.z_offset, dummyf)); EEPROM_WRITE(mesh_num_x); @@ -1003,13 +1003,13 @@ void MarlinSettings::postprocess() { { #if ENABLED(AUTO_BED_LEVELING_BILINEAR) static_assert( - sizeof(bedlevel.z_values) == TERN(PROUI_GRID_PNTS, GRID_LIMIT * GRID_LIMIT, GRID_MAX_POINTS) * sizeof(bedlevel.z_values[0][0]), + sizeof(bedlevel.z_values) == GRID_MAX_POINTS * sizeof(bedlevel.z_values[0][0]), "Bilinear Z array is the wrong size." ); #endif - const uint8_t grid_max_x = TERN(AUTO_BED_LEVELING_BILINEAR, TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X), 3), - grid_max_y = TERN(AUTO_BED_LEVELING_BILINEAR, TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y), 3); + const uint8_t grid_max_x = TERN(AUTO_BED_LEVELING_BILINEAR, GRID_MAX_POINTS_X, 3), + grid_max_y = TERN(AUTO_BED_LEVELING_BILINEAR, GRID_MAX_POINTS_Y, 3); EEPROM_WRITE(grid_max_x); EEPROM_WRITE(grid_max_y); @@ -1985,11 +1985,11 @@ void MarlinSettings::postprocess() { #if ENABLED(MESH_BED_LEVELING) if (!validating) bedlevel.z_offset = dummyf; - if (mesh_num_x == (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)) && mesh_num_y == (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y))) { + if (mesh_num_x == (GRID_MAX_POINTS_X) && mesh_num_y == (GRID_MAX_POINTS_Y)) { // EEPROM data fits the current mesh EEPROM_READ(bedlevel.z_values); } - else if (mesh_num_x > (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)) || mesh_num_y > (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y))) { + else if (mesh_num_x > (GRID_MAX_POINTS_X) || mesh_num_y > (GRID_MAX_POINTS_Y)) { eeprom_error = ERR_EEPROM_CORRUPT; break; } @@ -2050,12 +2050,12 @@ void MarlinSettings::postprocess() { EEPROM_READ(spacing); // 2 ints EEPROM_READ(start); // 2 ints #if ENABLED(AUTO_BED_LEVELING_BILINEAR) - if (grid_max_x == (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)) && grid_max_y == (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y))) { + if (grid_max_x == (GRID_MAX_POINTS_X) && grid_max_y == (GRID_MAX_POINTS_Y)) { if (!validating) set_bed_leveling_enabled(false); bedlevel.set_grid(spacing, start); EEPROM_READ(bedlevel.z_values); // 9 to 256 floats } - else if (grid_max_x > (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)) || grid_max_y > (TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y))) { + else if (grid_max_x > (GRID_MAX_POINTS_X) || grid_max_y > (GRID_MAX_POINTS_Y)) { eeprom_error = ERR_EEPROM_CORRUPT; break; } @@ -3006,7 +3006,7 @@ void MarlinSettings::postprocess() { uint16_t crc = 0; #if ENABLED(OPTIMIZED_MESH_STORAGE) - int16_t z_mesh_store[TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)][TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y)]; + int16_t z_mesh_store[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; bedlevel.set_store_from_mesh(bedlevel.z_values, z_mesh_store); uint8_t * const src = (uint8_t*)&z_mesh_store; #else @@ -3042,7 +3042,7 @@ void MarlinSettings::postprocess() { int pos = mesh_slot_offset(slot); uint16_t crc = 0; #if ENABLED(OPTIMIZED_MESH_STORAGE) - int16_t z_mesh_store[TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)][TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y)]; + int16_t z_mesh_store[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; uint8_t * const dest = (uint8_t*)&z_mesh_store; #else uint8_t * const dest = into ? (uint8_t*)into : (uint8_t*)&bedlevel.z_values; @@ -3054,7 +3054,7 @@ void MarlinSettings::postprocess() { #if ENABLED(OPTIMIZED_MESH_STORAGE) if (into) { - float z_values[TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X)][TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_Y)]; + float z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y]; bedlevel.set_mesh_from_store(z_mesh_store, z_values); memcpy(into, z_values, sizeof(z_values)); } @@ -3772,8 +3772,8 @@ void MarlinSettings::reset() { #if ENABLED(MESH_BED_LEVELING) if (leveling_is_valid()) { - for (uint8_t py = 0; py < TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X); ++py) { - for (uint8_t px = 0; px < TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X); ++px) { + for (uint8_t py = 0; py < GRID_MAX_POINTS_X; ++py) { + for (uint8_t px = 0; px < GRID_MAX_POINTS_X; ++px) { CONFIG_ECHO_START(); SERIAL_ECHOLN(F(" G29 S3 I"), px, F(" J"), py, FPSTR(SP_Z_STR), p_float_t(LINEAR_UNIT(bedlevel.z_values[px][py]), 5)); } @@ -3797,8 +3797,8 @@ void MarlinSettings::reset() { #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) if (leveling_is_valid()) { - for (uint8_t py = 0; py < TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X); ++py) { - for (uint8_t px = 0; px < TERN(PROUI_GRID_PNTS, GRID_LIMIT, GRID_MAX_POINTS_X); ++px) { + for (uint8_t py = 0; py < GRID_MAX_POINTS_X; ++py) { + for (uint8_t px = 0; px < GRID_MAX_POINTS_X; ++px) { CONFIG_ECHO_START(); SERIAL_ECHOLN(F(" G29 W I"), px, F(" J"), py, FPSTR(SP_Z_STR), p_float_t(LINEAR_UNIT(bedlevel.z_values[px][py]), 5)); } From 04da879c9f4eb2476b3ebc2626b55b9796bd6fe2 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Sat, 27 Apr 2024 20:57:43 -0400 Subject: [PATCH 38/47] update for ABL - Bilinear variable mesh_inset --- Marlin/src/feature/bedlevel/abl/bbl.cpp | 14 ++++++++++++-- Marlin/src/feature/bedlevel/abl/bbl.h | 5 +++++ Marlin/src/lcd/e3v2/proui/dwin_defines.h | 2 +- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Marlin/src/feature/bedlevel/abl/bbl.cpp b/Marlin/src/feature/bedlevel/abl/bbl.cpp index 5cb4c3afa47a..87a2863e656e 100644 --- a/Marlin/src/feature/bedlevel/abl/bbl.cpp +++ b/Marlin/src/feature/bedlevel/abl/bbl.cpp @@ -106,9 +106,19 @@ void LevelingBilinear::reset() { } } +/** + * Set grid spacing and start position + */ void LevelingBilinear::set_grid(const xy_pos_t& _grid_spacing, const xy_pos_t& _grid_start) { - grid_spacing = _grid_spacing; - grid_start = _grid_start; + #if ENABLED(PROUI_MESH_EDIT) + grid_start.x = MESH_MIN_X; + grid_start.y = MESH_MIN_Y; + grid_spacing.x = MESH_X_DIST; + grid_spacing.y = MESH_Y_DIST; + #else + grid_spacing = _grid_spacing; + grid_start = _grid_start; + #endif grid_factor = grid_spacing.reciprocal(); } diff --git a/Marlin/src/feature/bedlevel/abl/bbl.h b/Marlin/src/feature/bedlevel/abl/bbl.h index ca2e96593fde..da979fe27e1a 100644 --- a/Marlin/src/feature/bedlevel/abl/bbl.h +++ b/Marlin/src/feature/bedlevel/abl/bbl.h @@ -23,6 +23,11 @@ #include "../../../inc/MarlinConfigPre.h" +#if ENABLED(PROUI_MESH_EDIT) + #define MESH_X_DIST (float((MESH_MAX_X) - (MESH_MIN_X)) / (GRID_MAX_CELLS_X)) + #define MESH_Y_DIST (float((MESH_MAX_Y) - (MESH_MIN_Y)) / (GRID_MAX_CELLS_Y)) +#endif + class LevelingBilinear { public: static bed_mesh_t z_values; diff --git a/Marlin/src/lcd/e3v2/proui/dwin_defines.h b/Marlin/src/lcd/e3v2/proui/dwin_defines.h index 2b3760e69953..14a31e989583 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin_defines.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_defines.h @@ -37,7 +37,7 @@ //#define TITLE_CENTERED // Center Menu Title Text #if HAS_MESH - #define PROUI_MESH_EDIT // Add a menu to edit mesh inset + points + #define PROUI_MESH_EDIT // Add a menu to edit mesh inset #if ENABLED(PROUI_MESH_EDIT) #define Z_OFFSET_MIN -3.0 // (mm) #define Z_OFFSET_MAX 3.0 // (mm) From 5b615f0bb0cfbeeb28e356f80074a4f2bdf7fa35 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Wed, 22 May 2024 13:39:25 -0400 Subject: [PATCH 39/47] add mesh viewer to display_map --- Marlin/src/feature/bedlevel/ubl/ubl.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.cpp b/Marlin/src/feature/bedlevel/ubl/ubl.cpp index 3dd31c84bd3f..e30648f3ce78 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl.cpp @@ -210,6 +210,7 @@ void unified_bed_leveling::display_map(const uint8_t map_type) { const float f = z_values[i][j]; if (lcd) { // TODO: Display on Graphical LCD + TERN_(DWIN_LCD_PROUI, dwinMeshViewer()); } else if (isnan(f)) SERIAL_ECHO(human ? F(" . ") : F("NAN")); From a18ef72b8a7db4e2bbfe08ee6b79f57738ce7ccb Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Tue, 28 May 2024 03:02:50 -0400 Subject: [PATCH 40/47] revert settings.cpp --- Marlin/src/module/settings.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index d4e625b84e8e..a9f2f888bff4 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -3795,7 +3795,7 @@ void MarlinSettings::reset() { #if ENABLED(MESH_BED_LEVELING) if (leveling_is_valid()) { - for (uint8_t py = 0; py < GRID_MAX_POINTS_X; ++py) { + for (uint8_t py = 0; py < GRID_MAX_POINTS_Y; ++py) { for (uint8_t px = 0; px < GRID_MAX_POINTS_X; ++px) { CONFIG_ECHO_START(); SERIAL_ECHOLN(F(" G29 S3 I"), px, F(" J"), py, FPSTR(SP_Z_STR), p_float_t(LINEAR_UNIT(bedlevel.z_values[px][py]), 5)); @@ -3820,7 +3820,7 @@ void MarlinSettings::reset() { #elif ENABLED(AUTO_BED_LEVELING_BILINEAR) if (leveling_is_valid()) { - for (uint8_t py = 0; py < GRID_MAX_POINTS_X; ++py) { + for (uint8_t py = 0; py < GRID_MAX_POINTS_Y; ++py) { for (uint8_t px = 0; px < GRID_MAX_POINTS_X; ++px) { CONFIG_ECHO_START(); SERIAL_ECHOLN(F(" G29 W I"), px, F(" J"), py, FPSTR(SP_Z_STR), p_float_t(LINEAR_UNIT(bedlevel.z_values[px][py]), 5)); From f49ace91803f5c9390e531182e4c124cbd2c7ac9 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Tue, 28 May 2024 03:05:58 -0400 Subject: [PATCH 41/47] remove comments motion.h --- Marlin/src/module/motion.h | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h index e2bb33e72cf5..335757ae61c1 100644 --- a/Marlin/src/module/motion.h +++ b/Marlin/src/module/motion.h @@ -411,14 +411,6 @@ void remember_feedrate_scaling_off(); void restore_feedrate_and_scaling(); #if HAS_Z_AXIS - // #if ALL(DWIN_LCD_PROUI, INDIVIDUAL_AXIS_HOMING_SUBMENU, MESH_BED_LEVELING) - // #include "../lcd/e3v2/proui/dwin.h" - // #define Z_POST_CLEARANCE hmiData.zAfterHoming - // #elif defined(Z_AFTER_HOMING) - // #define Z_POST_CLEARANCE Z_AFTER_HOMING - // #else - // #define Z_POST_CLEARANCE Z_CLEARANCE_FOR_HOMING - // #endif #ifndef Z_POST_CLEARANCE // May be set by proui/dwin.h :-P #ifdef Z_AFTER_HOMING #define Z_POST_CLEARANCE Z_AFTER_HOMING From e319336e873281f23690075fdbc4d4bba309051b Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Tue, 28 May 2024 04:09:54 -0400 Subject: [PATCH 42/47] revert some, change some --- Marlin/src/feature/bedlevel/bedlevel.cpp | 4 ++-- Marlin/src/feature/bedlevel/ubl/ubl.h | 4 ++-- Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp | 10 +++++----- Marlin/src/gcode/bedlevel/abl/G29.cpp | 1 - Marlin/src/lcd/e3v2/proui/bedlevel_tools.cpp | 1 + 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Marlin/src/feature/bedlevel/bedlevel.cpp b/Marlin/src/feature/bedlevel/bedlevel.cpp index d8546725a3b3..8a6e75986204 100644 --- a/Marlin/src/feature/bedlevel/bedlevel.cpp +++ b/Marlin/src/feature/bedlevel/bedlevel.cpp @@ -46,12 +46,12 @@ #include "../../lcd/extui/ui_api.h" #endif -#if ALL(MESH_BED_LEVELING, DWIN_LCD_PROUI) +#if ALL(HAS_MESH, DWIN_LCD_PROUI) #include "../../lcd/e3v2/proui/bedlevel_tools.h" #endif bool leveling_is_valid() { - #if ALL(MESH_BED_LEVELING, DWIN_LCD_PROUI) + #if ALL(HAS_MESH, DWIN_LCD_PROUI) return bedLevelTools.meshValidate(); #else return TERN1(HAS_MESH, bedlevel.mesh_is_valid()); diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.h b/Marlin/src/feature/bedlevel/ubl/ubl.h index 3042d417d83e..e212afcb1313 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.h +++ b/Marlin/src/feature/bedlevel/ubl/ubl.h @@ -118,8 +118,8 @@ class unified_bed_leveling { #endif #if DISABLED(PROUI_MESH_EDIT) - static const bed_mesh_t _mesh_index_to_xpos, - _mesh_index_to_ypos; + static const float _mesh_index_to_xpos[GRID_MAX_POINTS_X], + _mesh_index_to_ypos[GRID_MAX_POINTS_Y]; #endif #if HAS_MARLINUI_MENU diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp index 5c6382cb3d77..48711df4a2db 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp @@ -1450,10 +1450,10 @@ typedef struct { uint8_t sx, ex, sy, ey; bool yfirst; } smart_fill_info; void unified_bed_leveling::smart_fill_mesh() { static const smart_fill_info - info0 PROGMEM = { 0, GRID_MAX_POINTS_X, 0, uint8_t((GRID_MAX_POINTS_Y) - 2), false }, // Bottom of the mesh looking up - info1 PROGMEM = { 0, GRID_MAX_POINTS_X, uint8_t((GRID_MAX_POINTS_Y) - 1), 0, false }, // Top of the mesh looking down - info2 PROGMEM = { 0, uint8_t((GRID_MAX_POINTS_X) - 2), 0, GRID_MAX_POINTS_Y, true }, // Left side of the mesh looking right - info3 PROGMEM = { uint8_t((GRID_MAX_POINTS_X) - 1), 0, 0, GRID_MAX_POINTS_Y, true }; // Right side of the mesh looking left + info0 PROGMEM = { 0, GRID_MAX_POINTS_X, 0, (GRID_MAX_POINTS_Y) - 2, false }, // Bottom of the mesh looking up + info1 PROGMEM = { 0, GRID_MAX_POINTS_X, (GRID_MAX_POINTS_Y) - 1, 0, false }, // Top of the mesh looking down + info2 PROGMEM = { 0, (GRID_MAX_POINTS_X) - 2, 0, GRID_MAX_POINTS_Y, true }, // Left side of the mesh looking right + info3 PROGMEM = { (GRID_MAX_POINTS_X) - 1, 0, 0, GRID_MAX_POINTS_Y, true }; // Right side of the mesh looking left static const smart_fill_info * const info[] PROGMEM = { &info0, &info1, &info2, &info3 }; for (uint8_t i = 0; i < COUNT(info); ++i) { @@ -1688,7 +1688,7 @@ void unified_bed_leveling::smart_fill_mesh() { // being extrapolated so that nearby points will have greater influence on // the point being extrapolated. Then extrapolate the mesh point from WLSF. - static_assert(GRID_MAX_POINTS_Y <= 16, "GRID_MAX_POINTS_Y too big"); + static_assert((GRID_MAX_POINTS_Y) <= 16, "GRID_MAX_POINTS_Y too big"); uint16_t bitmap[GRID_MAX_POINTS_X] = { 0 }; struct linear_fit_data lsf_results; diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp index 976cee0c2227..565a451ed5f0 100644 --- a/Marlin/src/gcode/bedlevel/abl/G29.cpp +++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp @@ -259,7 +259,6 @@ G29_TYPE GcodeSuite::G29() { #if ENABLED(DWIN_LCD_PROUI) else { process_subcommands_now(F("G28Z")); - process_subcommands_now(F("G28XY")); } #endif diff --git a/Marlin/src/lcd/e3v2/proui/bedlevel_tools.cpp b/Marlin/src/lcd/e3v2/proui/bedlevel_tools.cpp index aff83c0317bb..f8d0dfa55798 100644 --- a/Marlin/src/lcd/e3v2/proui/bedlevel_tools.cpp +++ b/Marlin/src/lcd/e3v2/proui/bedlevel_tools.cpp @@ -196,6 +196,7 @@ float BedLevelTools::getMinValue() { // Return 'true' if mesh is good and within LCD limits bool BedLevelTools::meshValidate() { + TERN_(PROUI_MESH_EDIT, if ((MESH_MAX_X <= MESH_MIN_X) || (MESH_MAX_Y <= MESH_MIN_Y)) return false); GRID_LOOP(x, y) { const float z = bedlevel.z_values[x][y]; if (isnan(z) || !WITHIN(z, Z_OFFSET_MIN, Z_OFFSET_MAX)) return false; From 41a7d62ab404fa3e108ff7cd55771f390a87abbc Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Tue, 28 May 2024 04:28:08 -0400 Subject: [PATCH 43/47] revert ubl.cpp --- Marlin/src/feature/bedlevel/ubl/ubl.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.cpp b/Marlin/src/feature/bedlevel/ubl/ubl.cpp index e30648f3ce78..24343a74bf89 100644 --- a/Marlin/src/feature/bedlevel/ubl/ubl.cpp +++ b/Marlin/src/feature/bedlevel/ubl/ubl.cpp @@ -69,14 +69,14 @@ bed_mesh_t unified_bed_leveling::z_values; #if DISABLED(PROUI_MESH_EDIT) #define _GRIDPOS(A,N) (MESH_MIN_##A + N * (MESH_##A##_DIST)) - const bed_mesh_t - unified_bed_leveling::_mesh_index_to_xpos PROGMEM = ARRAY_N(GRID_MAX_POINTS_X, + const float + unified_bed_leveling::_mesh_index_to_xpos[GRID_MAX_POINTS_X] PROGMEM = ARRAY_N(GRID_MAX_POINTS_X, _GRIDPOS(X, 0), _GRIDPOS(X, 1), _GRIDPOS(X, 2), _GRIDPOS(X, 3), _GRIDPOS(X, 4), _GRIDPOS(X, 5), _GRIDPOS(X, 6), _GRIDPOS(X, 7), _GRIDPOS(X, 8), _GRIDPOS(X, 9), _GRIDPOS(X, 10), _GRIDPOS(X, 11), _GRIDPOS(X, 12), _GRIDPOS(X, 13), _GRIDPOS(X, 14), _GRIDPOS(X, 15) ), - unified_bed_leveling::_mesh_index_to_ypos PROGMEM = ARRAY_N(GRID_MAX_POINTS_Y, + unified_bed_leveling::_mesh_index_to_ypos[GRID_MAX_POINTS_Y] PROGMEM = ARRAY_N(GRID_MAX_POINTS_Y, _GRIDPOS(Y, 0), _GRIDPOS(Y, 1), _GRIDPOS(Y, 2), _GRIDPOS(Y, 3), _GRIDPOS(Y, 4), _GRIDPOS(Y, 5), _GRIDPOS(Y, 6), _GRIDPOS(Y, 7), _GRIDPOS(Y, 8), _GRIDPOS(Y, 9), _GRIDPOS(Y, 10), _GRIDPOS(Y, 11), From ef45055d0c34145e4e86e25b6fd7aea892cbfe61 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Wed, 29 May 2024 15:16:00 -0400 Subject: [PATCH 44/47] update from other PR for here --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 540 ++++++++++++++------------ Marlin/src/lcd/e3v2/proui/dwinui.h | 1 - Marlin/src/lcd/language/language_en.h | 2 +- 3 files changed, 289 insertions(+), 254 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 51028c57591d..cc1958d38770 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -212,13 +212,13 @@ uint8_t checkkey = 255, last_checkkey = ID_MainMenu; // New menu system pointers Menu *fileMenu = nullptr; Menu *prepareMenu = nullptr; -Menu *levelMenu = nullptr; #if ENABLED(LCD_BED_TRAMMING) Menu *trammingMenu = nullptr; #endif Menu *moveMenu = nullptr; Menu *controlMenu = nullptr; Menu *advancedSettingsMenu = nullptr; +Menu *levelMenu = nullptr; #if HAS_HOME_OFFSET Menu *homeOffsetMenu = nullptr; #endif @@ -369,12 +369,12 @@ void ICON_Control() { } // -// Main Menu: "Level Settings" +// Main Menu: "Level" // -void ICON_LvlSettings() { +void ICON_Level() { constexpr frame_rect_t ico = { 145, 226, 110, 100 }; constexpr text_info_t txt = { 91, { 405, 447 }, 27, 15 }; - ICON_Button(select_page.now == PAGE_LEVEL, ICON_Info_0, ico, txt, GET_TEXT_F(MSG_BUTTON_ADVANCED)); + ICON_Button(select_page.now == PAGE_LEVEL, ICON_Leveling_0, ico, txt, GET_TEXT_F(MSG_BUTTON_LEVEL)); } // @@ -475,9 +475,7 @@ void popupPauseOrStop() { } #endif -// // Draw status line -// void dwinDrawStatusLine(const char *text) { dwinDrawRectangle(1, hmiData.colorStatusBg, 0, STATUS_Y, DWIN_WIDTH, STATUS_Y + 20); if (text) DWINUI::drawCenteredString(hmiData.colorStatusTxt, STATUS_Y + 2, text); @@ -682,7 +680,7 @@ void drawMainMenu() { ICON_Print(); ICON_Prepare(); ICON_Control(); - ICON_LvlSettings(); + ICON_Level(); } void gotoMainMenu() { @@ -1133,7 +1131,7 @@ void hmiMainMenu() { case PAGE_PRINT: ICON_Print(); break; case PAGE_PREPARE: ICON_Print(); ICON_Prepare(); break; case PAGE_CONTROL: ICON_Prepare(); ICON_Control(); break; - case PAGE_LEVEL: ICON_Control(); ICON_LvlSettings(); break; + case PAGE_LEVEL: ICON_Control(); ICON_Level(); break; } } } @@ -1142,8 +1140,8 @@ void hmiMainMenu() { switch (select_page.now) { case PAGE_PRINT: ICON_Print(); ICON_Prepare(); break; case PAGE_PREPARE: ICON_Prepare(); ICON_Control(); break; - case PAGE_CONTROL: ICON_Control(); ICON_LvlSettings(); break; - case PAGE_LEVEL: ICON_LvlSettings(); break; + case PAGE_CONTROL: ICON_Control(); ICON_Level(); break; + case PAGE_LEVEL: ICON_Level(); break; } } } @@ -1248,7 +1246,7 @@ void drawMainArea() { case ID_SetPInt: case ID_SetIntNoDraw: case ID_SetFloat: - case ID_SetPFloat: redrawMenu(true); break; + case ID_SetPFloat: redrawMenu(true); break; default: break; } } @@ -1582,8 +1580,6 @@ void dwinHomingDone() { #if PROUI_TUNING_GRAPH - #include "plot.h" - celsius_t _maxtemp, _target; void dwinDrawPIDMPCPopup() { constexpr frame_rect_t gfrm = { 30, 150, DWIN_WIDTH - 60, 160 }; @@ -1876,7 +1872,7 @@ void dwinSetColorDefaults() { hmiData.colorCoordinate = defColorCoordinate; } -static_assert(ExtUI::eeprom_data_size >= sizeof(hmi_data_t), "Insufficient space in EEPROM for UI parameters"); +static_assert(ExtUI::eeprom_data_size >= EXTUI_EEPROM_DATA_SIZE, "Insufficient space in EEPROM for UI parameters"); void dwinSetDataDefaults() { dwinSetColorDefaults(); @@ -1995,103 +1991,36 @@ void dwinRedrawScreen() { dwinRedrawDash(); } -#if ENABLED(ADVANCED_PAUSE_FEATURE) - - void dwinPopupPause(FSTR_P const fmsg, uint8_t button/*=0*/) { - hmiSaveProcessID(button ? ID_WaitResponse : ID_NothingToDo); - dwinShowPopup(ICON_Pause_1, GET_TEXT_F(MSG_ADVANCED_PAUSE), fmsg, button); - } - - void drawPopupFilamentPurge() { - dwinDrawPopup(ICON_AutoLeveling, GET_TEXT_F(MSG_ADVANCED_PAUSE), GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE_CONTINUE)); - DWINUI::drawButton(BTN_Purge, 26, 280); - DWINUI::drawButton(BTN_Continue, 146, 280); - drawSelectHighlight(true); - } - - void onClickFilamentPurge() { - if (hmiFlag.select_flag) - pause_menu_response = PAUSE_RESPONSE_EXTRUDE_MORE; // "Purge More" button - else { - hmiSaveProcessID(ID_NothingToDo); - pause_menu_response = PAUSE_RESPONSE_RESUME_PRINT; // "Continue" button - } - } - - void gotoFilamentPurge() { - pause_menu_response = PAUSE_RESPONSE_WAIT_FOR; - gotoPopup(drawPopupFilamentPurge, onClickFilamentPurge); - } +// +// MarlinUI functions +// +void MarlinUI::init_lcd() { + delay(750); // Wait to wakeup screen + const bool hs = dwinHandshake(); UNUSED(hs); + dwinFrameSetDir(1); + dwinJPGCacheTo1(Language_English); +} -#endif // ADVANCED_PAUSE_FEATURE +void MarlinUI::update() { + hmiSDCardUpdate(); // SD card update + eachMomentUpdate(); // Status update + dwinHandleScreen(); // Rotary encoder update +} -#if HAS_MESH - void dwinMeshViewer() { - if (!leveling_is_valid()) - dwinPopupContinue(ICON_Leveling_1, GET_TEXT_F(MSG_MESH_VIEWER), GET_TEXT_F(MSG_NO_VALID_MESH)); - else { - hmiSaveProcessID(ID_WaitResponse); - meshViewer.draw(); - } - } +#if HAS_LCD_BRIGHTNESS + void MarlinUI::_set_brightness() { dwinLCDBrightness(backlight ? brightness : 0); } #endif -#if HAS_LOCKSCREEN - - void dwinLockScreen() { - if (checkkey != ID_Locked) { - lockScreen.rprocess = checkkey; - checkkey = ID_Locked; - lockScreen.init(); - } - } - - void dwinUnLockScreen() { - if (checkkey == ID_Locked) { - checkkey = lockScreen.rprocess; - drawMainArea(); - } - } - - void hmiLockScreen() { - EncoderState encoder_diffState = get_encoder_state(); - if (encoder_diffState == ENCODER_DIFF_NO) return; - lockScreen.onEncoder(encoder_diffState); - if (lockScreen.isUnlocked()) dwinUnLockScreen(); - } - -#endif // HAS_LOCKSCREEN - -#if HAS_GCODE_PREVIEW - - void setPreview() { toggleCheckboxLine(hmiData.enablePreview); } - - void onClickConfirmToPrint() { - dwinResetStatusLine(); - if (hmiFlag.select_flag) { // Confirm - gotoMainMenu(); - return card.openAndPrintFile(card.filename); - } - else - hmiReturnScreen(); - } - -#endif // HAS_GCODE_PREVIEW - -void gotoConfirmToPrint() { - #if HAS_GCODE_PREVIEW - if (hmiData.enablePreview) return gotoPopup(preview.drawFromSD, onClickConfirmToPrint); +void MarlinUI::kill_screen(FSTR_P const lcd_error, FSTR_P const) { + #if ANY(TJC_DISPLAY, DACAI_DISPLAY) + dwinDrawPopup(ICON_BLTouch, GET_TEXT_F(MSG_PRINTER_KILLED), lcd_error); + #else + dwinDrawPopup(ICON_Printer_0, GET_TEXT_F(MSG_PRINTER_KILLED), lcd_error); #endif - card.openAndPrintFile(card.filename); // Direct print SD file + DWINUI::drawCenteredString(hmiData.colorPopupTxt, 270, GET_TEXT_F(MSG_TURN_OFF)); + dwinUpdateLCD(); } -#if HAS_ESDIAG - void drawEndStopDiag() { - hmiSaveProcessID(ID_ESDiagProcess); - esDiag.draw(); - } -#endif - //============================================================================= // MENU SUBSYSTEM //============================================================================= @@ -2190,9 +2119,20 @@ void autoHome() { queue.inject_P(G28_STR); } #endif // HAS_ZOFFSET_ITEM #if HAS_PREHEAT - #define _doPreheat(N) void DoPreheat##N() { ui.preheat_all(N-1); }\ - void DoPreheatHotend##N() { ui.preheat_hotend(N-1); } + + #if HAS_HOTEND + #define _DRAW_PREHEAT(N) void onDrawPreheat##N(MenuItem* menuitem, int8_t line) \ + { if (N == 1) { \ + if (hmiIsChinese()) menuitem->setFrame(1, 100, 89, 151, 101); } \ + else if (N == 2) { \ + if (hmiIsChinese()) menuitem->setFrame(1, 180, 89, 233, 100); } \ + onDrawMenuItem(menuitem, line); } + REPEAT_1(PREHEAT_COUNT, _DRAW_PREHEAT) + #endif + + #define _doPreheat(N) void DoPreheat##N() { ui.preheat_all(N-1); } REPEAT_1(PREHEAT_COUNT, _doPreheat) + #endif void doCoolDown() { thermalManager.cooldown(); } @@ -2200,7 +2140,7 @@ void doCoolDown() { thermalManager.cooldown(); } void setLanguage() { hmiToggleLanguage(); currentMenu = nullptr; // Invalidate menu to full redraw - drawPrepareMenu(); + drawControlMenu(); } bool enableLiveMove = false; @@ -2344,6 +2284,7 @@ void setMoveZ() { hmiValue.axis = Z_AXIS; setPFloatOnClick(Z_MIN_POS, Z_MAX_POS, void autoLevel() { queue.inject(F(TERN(AUTO_BED_LEVELING_UBL, "G29P1", "G29"))); } + #endif #if ENABLED(EDITABLE_DISPLAY_TIMEOUT) @@ -2372,7 +2313,13 @@ void setMoveZ() { hmiValue.axis = Z_AXIS; setPFloatOnClick(Z_MIN_POS, Z_MAX_POS, void setExtMinT() { setPIntOnClick(MIN_ETEMP, MAX_ETEMP, applyExtMinT); } #endif -void setSpeed() { setPIntOnClick(SPEED_EDIT_MIN, SPEED_EDIT_MAX); } +#if HAS_FEEDRATE_EDIT + void setSpeed() { setPIntOnClick(SPEED_EDIT_MIN, SPEED_EDIT_MAX); } +#endif + +#if HAS_FLOW_EDIT + void setFlow() { setPIntOnClick(FLOW_EDIT_MIN, FLOW_EDIT_MAX, []{ planner.refresh_e_factor(0); }); } +#endif #if HAS_HOTEND void applyHotendTemp() { thermalManager.setTargetHotend(menuData.value, 0); } @@ -2398,6 +2345,32 @@ void setSpeed() { setPIntOnClick(SPEED_EDIT_MIN, SPEED_EDIT_MAX); } #if ENABLED(ADVANCED_PAUSE_FEATURE) + void dwinPopupPause(FSTR_P const fmsg, uint8_t button/*=0*/) { + hmiSaveProcessID(button ? ID_WaitResponse : ID_NothingToDo); + dwinShowPopup(ICON_Pause_1, GET_TEXT_F(MSG_ADVANCED_PAUSE), fmsg, button); + } + + void drawPopupFilamentPurge() { + dwinDrawPopup(ICON_AutoLeveling, GET_TEXT_F(MSG_ADVANCED_PAUSE), GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE_CONTINUE)); + DWINUI::drawButton(BTN_Purge, 26, 280); + DWINUI::drawButton(BTN_Continue, 146, 280); + drawSelectHighlight(true); + } + + void onClickFilamentPurge() { + if (hmiFlag.select_flag) + pause_menu_response = PAUSE_RESPONSE_EXTRUDE_MORE; // "Purge More" button + else { + hmiSaveProcessID(ID_NothingToDo); + pause_menu_response = PAUSE_RESPONSE_RESUME_PRINT; // "Continue" button + } + } + + void gotoFilamentPurge() { + pause_menu_response = PAUSE_RESPONSE_WAIT_FOR; + gotoPopup(drawPopupFilamentPurge, onClickFilamentPurge); + } + void changeFilament() { hmiSaveProcessID(ID_NothingToDo); queue.inject(F("M600 B2")); @@ -2417,7 +2390,139 @@ void setSpeed() { setPIntOnClick(SPEED_EDIT_MIN, SPEED_EDIT_MAX); } #endif // ADVANCED_PAUSE_FEATURE -void setFlow() { setPIntOnClick(FLOW_EDIT_MIN, FLOW_EDIT_MAX, []{ planner.refresh_e_factor(0); }); } +#if HAS_MESH + + void dwinMeshViewer() { + if (!leveling_is_valid()) + dwinPopupContinue(ICON_Leveling_1, GET_TEXT_F(MSG_MESH_VIEWER), GET_TEXT_F(MSG_NO_VALID_MESH)); + else { + hmiSaveProcessID(ID_WaitResponse); + meshViewer.draw(); + } + } + + void applyMeshFadeHeight() { set_z_fade_height(planner.z_fade_height); } + void setMeshFadeHeight() { setPFloatOnClick(0, 100, 1, applyMeshFadeHeight); } + + void setMeshActive() { + set_bed_leveling_enabled(!planner.leveling_active); + drawCheckboxLine(currentMenu->line(), planner.leveling_active); + dwinUpdateLCD(); + } + + #if ENABLED(PREHEAT_BEFORE_LEVELING) + void setBedLevT() { setPIntOnClick(MIN_BEDTEMP, MAX_BEDTEMP); } + #endif + + #if ENABLED(PROUI_MESH_EDIT) + void liveEditMesh() { ((MenuItemPtr*)editZValueItem)->value = &bedlevel.z_values[hmiValue.select ? bedLevelTools.mesh_x : menuData.value][hmiValue.select ? menuData.value : bedLevelTools.mesh_y]; editZValueItem->redraw(); } + void applyEditMeshX() { bedLevelTools.mesh_x = menuData.value; } + void applyEditMeshY() { bedLevelTools.mesh_y = menuData.value; } + void resetMesh() { bedLevelTools.meshReset(); LCD_MESSAGE(MSG_MESH_RESET); } + void setEditMeshX() { hmiValue.select = 0; setIntOnClick(0, GRID_MAX_POINTS_X - 1, bedLevelTools.mesh_x, applyEditMeshX, liveEditMesh); } + void setEditMeshY() { hmiValue.select = 1; setIntOnClick(0, GRID_MAX_POINTS_Y - 1, bedLevelTools.mesh_y, applyEditMeshY, liveEditMesh); } + void setEditZValue() { setPFloatOnClick(Z_OFFSET_MIN, Z_OFFSET_MAX, 3); } + void applyMeshInset() { TERN_(AUTO_BED_LEVELING_UBL, set_bed_leveling_enabled(false)); reset_bed_level(); redrawItem(); } + void setMeshInset() { setPFloatOnClick(X_MIN_POS, X_MAX_POS, UNITFDIGITS, applyMeshInset); } + #endif + +#endif // HAS_MESH + +#if HAS_LOCKSCREEN + + void dwinLockScreen() { + if (checkkey != ID_Locked) { + lockScreen.rprocess = checkkey; + checkkey = ID_Locked; + lockScreen.init(); + } + } + + void dwinUnLockScreen() { + if (checkkey == ID_Locked) { + checkkey = lockScreen.rprocess; + drawMainArea(); + } + } + + void hmiLockScreen() { + EncoderState encoder_diffState = get_encoder_state(); + if (encoder_diffState == ENCODER_DIFF_NO) return; + lockScreen.onEncoder(encoder_diffState); + if (lockScreen.isUnlocked()) dwinUnLockScreen(); + } + +#endif // HAS_LOCKSCREEN + +#if HAS_GCODE_PREVIEW + + void setPreview() { toggleCheckboxLine(hmiData.enablePreview); } + + void onClickConfirmToPrint() { + dwinResetStatusLine(); + if (hmiFlag.select_flag) { // Confirm + gotoMainMenu(); + return card.openAndPrintFile(card.filename); + } + else + hmiReturnScreen(); + } + +#endif // HAS_GCODE_PREVIEW + +void gotoConfirmToPrint() { + #if HAS_GCODE_PREVIEW + if (hmiData.enablePreview) return gotoPopup(preview.drawFromSD, onClickConfirmToPrint); + #endif + card.openAndPrintFile(card.filename); // Direct print SD file +} + +#if HAS_ESDIAG + void drawEndStopDiag() { + hmiSaveProcessID(ID_ESDiagProcess); + esDiag.draw(); + } +#endif + +#if ENABLED(AUTO_BED_LEVELING_UBL) + + void applyUBLSlot() { bedlevel.storage_slot = menuData.value; } + void setUBLSlot() { setIntOnClick(0, settings.calc_num_meshes() - 1, bedlevel.storage_slot, applyUBLSlot); } + void onDrawUBLSlot(MenuItem* menuitem, int8_t line) { + NOLESS(bedlevel.storage_slot, 0); + onDrawIntMenu(menuitem, line, bedlevel.storage_slot); + } + + void applyUBLTiltGrid() { bedLevelTools.tilt_grid = menuData.value; } + void setUBLTiltGrid() { setIntOnClick(1, 3, bedLevelTools.tilt_grid, applyUBLTiltGrid); } + + void ublMeshTilt() { + NOLESS(bedlevel.storage_slot, 0); + if (bedLevelTools.tilt_grid > 1) + gcode.process_subcommands_now(TS(F("G29J"), bedLevelTools.tilt_grid)); + else + gcode.process_subcommands_now(F("G29J")); + LCD_MESSAGE(MSG_UBL_MESH_TILTED); + } + + void ublSmartFillMesh() { + for (uint8_t x = 0; x < GRID_MAX_POINTS_Y; ++x) bedlevel.smart_fill_mesh(); + LCD_MESSAGE(MSG_UBL_MESH_FILLED); + } + + void ublMeshSave() { + NOLESS(bedlevel.storage_slot, 0); + settings.store_mesh(bedlevel.storage_slot); + ui.status_printf(0, GET_TEXT_F(MSG_MESH_SAVED), bedlevel.storage_slot); + DONE_BUZZ(true); + } + + void ublMeshLoad() { + NOLESS(bedlevel.storage_slot, 0); + settings.load_mesh(bedlevel.storage_slot); + } + +#endif // AUTO_BED_LEVELING_UBL // Bed Tramming @@ -2695,7 +2800,7 @@ void applyMaxAccel() { planner.set_max_acceleration(hmiValue.axis, menuData.valu void setStepsE() { hmiValue.axis = E_AXIS; setPFloatOnClick( min_steps_edit_values.e, max_steps_edit_values.e, UNITFDIGITS); } #endif #if ENABLED(FWRETRACT) - void returnFWRetractMenu() { (previousMenu == filSetMenu) ? drawFilSetMenu() : drawTuneMenu(); } + void returnFWRetractMenu() { (previousMenu == filamentMenu) ? drawFilamentManMenu() : drawTuneMenu(); } void setRetractLength() { setPFloatOnClick( 0, 10, UNITFDIGITS); } void setRetractSpeed() { setPFloatOnClick( 1, 90, UNITFDIGITS); } void setZRaise() { setPFloatOnClick( 0, 2, 2); } @@ -2788,19 +2893,6 @@ void onDrawAutoHome(MenuItem* menuitem, int8_t line) { #endif #endif -#if HAS_HOTEND - void onDrawPreheat1(MenuItem* menuitem, int8_t line) { - if (hmiIsChinese()) menuitem->setFrame(1, 100, 89, 151, 101); - onDrawMenuItem(menuitem, line); - } - #if PREHEAT_COUNT > 1 - void onDrawPreheat2(MenuItem* menuitem, int8_t line) { - if (hmiIsChinese()) menuitem->setFrame(1, 180, 89, 233, 100); - onDrawMenuItem(menuitem, line); - } - #endif -#endif - #if HAS_PREHEAT void onDrawCooldown(MenuItem* menuitem, int8_t line) { if (hmiIsChinese()) menuitem->setFrame(1, 1, 104, 56, 117); @@ -3107,19 +3199,16 @@ frame_rect_t selrect(frame_rect_t) { void drawPrepareMenu() { checkkey = ID_Menu; - if (SET_MENU_R(prepareMenu, selrect({133, 1, 28, 13}), MSG_PREPARE, 11 + PREHEAT_COUNT)) { + if (SET_MENU_R(prepareMenu, selrect({133, 1, 28, 13}), MSG_PREPARE, 11)) { BACK_ITEM(gotoMainMenu); - MENU_ITEM(ICON_Axis, MSG_MOVE_AXIS, onDrawMoveSubMenu, drawMoveMenu); #if ENABLED(INDIVIDUAL_AXIS_HOMING_SUBMENU) MENU_ITEM(ICON_Homing, MSG_HOMING, onDrawSubMenu, drawHomingMenu); #else MENU_ITEM(ICON_Homing, MSG_AUTO_HOME, onDrawAutoHome, autoHome); #endif + MENU_ITEM(ICON_Axis, MSG_MOVE_AXIS, onDrawMoveSubMenu, drawMoveMenu); MENU_ITEM(ICON_CloseMotor, MSG_DISABLE_STEPPERS, onDrawDisableMotors, disableMotors); MENU_ITEM(ICON_FilMan, MSG_FILAMENT_MAN, onDrawSubMenu, drawFilamentManMenu); - #if ENABLED(LCD_BED_TRAMMING) - MENU_ITEM(ICON_Tram, MSG_BED_TRAMMING, onDrawSubMenu, drawTrammingMenu); - #endif #if HAS_ZOFFSET_ITEM #if HAS_BED_PROBE MENU_ITEM(ICON_SetZOffset, MSG_PROBE_WIZARD, onDrawSubMenu, drawZOffsetWizMenu); @@ -3127,16 +3216,21 @@ void drawPrepareMenu() { EDIT_ITEM(ICON_Zoffset, MSG_HOME_OFFSET_Z, onDrawPFloat2Menu, setZOffset, &BABY_Z_VAR); #endif #endif + #if ENABLED(LCD_BED_TRAMMING) + MENU_ITEM(ICON_Tram, MSG_BED_TRAMMING, onDrawSubMenu, drawTrammingMenu); + #endif #if HAS_PREHEAT - #define _ITEM_PREHEAT(N) MENU_ITEM(ICON_Preheat##N, MSG_PREHEAT_##N, onDrawMenuItem, DoPreheat##N); - REPEAT_1(PREHEAT_COUNT, _ITEM_PREHEAT) + #if PREHEAT_COUNT > 1 + MENU_ITEM(ICON_SetEndTemp, MSG_PREHEAT_HOTEND, onDrawSubMenu, drawPreheatHotendMenu); + #else + MENU_ITEM(ICON_Preheat1, MSG_PREHEAT_1, onDrawPreheat1, DoPreheat1); + #endif #endif MENU_ITEM(ICON_Cool, MSG_COOLDOWN, onDrawCooldown, doCoolDown); #if ALL(PROUI_TUNING_GRAPH, PROUI_ITEM_PLOT) MENU_ITEM(ICON_PIDNozzle, MSG_HOTEND_TEMP_GRAPH, onDrawMenuItem, drawHPlot); MENU_ITEM(ICON_PIDBed, MSG_BED_TEMP_GRAPH, onDrawMenuItem, drawBPlot); #endif - MENU_ITEM(ICON_Language, MSG_UI_LANGUAGE, onDrawLanguage, setLanguage); } ui.reset_status(true); updateMenu(prepareMenu); @@ -3173,7 +3267,6 @@ void drawControlMenu() { BACK_ITEM(gotoMainMenu); MENU_ITEM(ICON_Temperature, MSG_TEMPERATURE, onDrawTempSubMenu, drawTemperatureMenu); MENU_ITEM(ICON_Motion, MSG_MOTION, onDrawMotionSubMenu, drawMotionMenu); - MENU_ITEM(ICON_Language, MSG_ADVANCED_SETTINGS, onDrawSubMenu, drawAdvancedSettingsMenu); #if HAS_CUSTOM_COLORS MENU_ITEM(ICON_Scolor, MSG_COLORS_SELECT, onDrawSubMenu, drawSelectColorsMenu); #endif @@ -3189,7 +3282,9 @@ void drawControlMenu() { MENU_ITEM(ICON_ResetEEPROM, MSG_RESTORE_DEFAULTS, onDrawResetEeprom, resetEEPROM); #endif MENU_ITEM(ICON_Reboot, MSG_RESET_PRINTER, onDrawMenuItem, rebootPrinter); + MENU_ITEM(ICON_AdvSet, MSG_ADVANCED_SETTINGS, onDrawSubMenu, drawAdvancedSettingsMenu); MENU_ITEM(ICON_Info, MSG_INFO_SCREEN, onDrawInfoSubMenu, gotoInfoMenu); + MENU_ITEM(ICON_Language, MSG_UI_LANGUAGE, onDrawLanguage, setLanguage); } ui.reset_status(true); updateMenu(controlMenu); @@ -3197,7 +3292,7 @@ void drawControlMenu() { void drawAdvancedSettingsMenu() { checkkey = ID_Menu; - if (SET_MENU(advancedSettingsMenu, MSG_ADVANCED_SETTINGS, 16)) { + if (SET_MENU(advancedSettingsMenu, MSG_ADVANCED_SETTINGS, 22)) { BACK_ITEM(drawControlMenu); #if ENABLED(EEPROM_SETTINGS) MENU_ITEM(ICON_WriteEEPROM, MSG_STORE_EEPROM, onDrawMenuItem, writeEEPROM); @@ -3211,7 +3306,6 @@ void drawAdvancedSettingsMenu() { #if HAS_HOME_OFFSET MENU_ITEM(ICON_HomeOffset, MSG_SET_HOME_OFFSETS, onDrawSubMenu, drawHomeOffsetMenu); #endif - MENU_ITEM(ICON_FilSet, MSG_FILAMENT_SET, onDrawSubMenu, drawFilSetMenu); #if ENABLED(PIDTEMP) && ANY(PID_AUTOTUNE_MENU, PID_EDIT_MENU) MENU_ITEM_F(ICON_PIDNozzle, STR_HOTEND_PID " Settings", onDrawSubMenu, drawHotendPIDMenu); #endif @@ -3253,14 +3347,14 @@ void drawAdvancedSettingsMenu() { #endif #if ENABLED(CASE_LIGHT_MENU) #if CASELIGHT_USES_BRIGHTNESS - enableLiveCaseLightBrightness = true; // Allow live update of brightness in control menu + enableLiveCaseLightBrightness = true; // Allow live update of brightness in control menu MENU_ITEM(ICON_CaseLight, MSG_CASE_LIGHT, onDrawSubMenu, drawCaseLightMenu); #else EDIT_ITEM(ICON_CaseLight, MSG_CASE_LIGHT, onDrawChkbMenu, setCaseLight, &caselight.on); #endif #endif #if ENABLED(LED_CONTROL_MENU) - enableLiveLedColor = true; // Allow live update of color in control menu + enableLiveLedColor = true; // Allow live update of color in control menu MENU_ITEM(ICON_LedControl, MSG_LED_CONTROL, onDrawSubMenu, drawLedControlMenu); #endif } @@ -3398,7 +3492,12 @@ void drawTuneMenu() { checkkey = ID_Menu; if (SET_MENU_R(tuneMenu, selrect({73, 2, 28, 12}), MSG_TUNE, 20)) { BACK_ITEM(gotoPrintProcess); - EDIT_ITEM(ICON_Speed, MSG_SPEED, onDrawSpeedItem, setSpeed, &feedrate_percentage); + #if HAS_FEEDRATE_EDIT + EDIT_ITEM(ICON_Speed, MSG_SPEED, onDrawSpeedItem, setSpeed, &feedrate_percentage); + #endif + #if HAS_FLOW_EDIT + EDIT_ITEM(ICON_Flow, MSG_FLOW, onDrawPIntMenu, setFlow, &planner.flow_percentage[0]); + #endif #if HAS_HOTEND hotendTargetItem = EDIT_ITEM(ICON_HotendTemp, MSG_UBL_SET_TEMP_HOTEND, onDrawHotendTemp, setHotendTemp, &thermalManager.temp_hotend[0].target); #endif @@ -3413,7 +3512,6 @@ void drawTuneMenu() { #elif ALL(HAS_ZOFFSET_ITEM, MESH_BED_LEVELING, BABYSTEPPING) EDIT_ITEM(ICON_Zoffset, MSG_HOME_OFFSET_Z, onDrawPFloat2Menu, setZOffset, &BABY_Z_VAR); #endif - EDIT_ITEM(ICON_Flow, MSG_FLOW, onDrawPIntMenu, setFlow, &planner.flow_percentage[0]); #if ENABLED(ADVANCED_PAUSE_FEATURE) MENU_ITEM(ICON_FilMan, MSG_FILAMENTCHANGE, onDrawMenuItem, changeFilament); #endif @@ -3534,7 +3632,7 @@ void drawTuneMenu() { void drawTrinamicConfigMenu() { checkkey = ID_Menu; if (SET_MENU(trinamicConfigMenu, MSG_TMC_DRIVERS, 5)) { - BACK_ITEM(drawAdvancedSettingsMenu); + BACK_ITEM(drawMotionMenu); #if AXIS_IS_TMC(X) EDIT_ITEM(ICON_TMCXSet, MSG_TMC_ACURRENT, onDrawPIntMenu, setXTMCCurrent, &stepperX.val_mA); #endif @@ -3554,10 +3652,19 @@ void drawTuneMenu() { void drawMotionMenu() { checkkey = ID_Menu; - if (SET_MENU_R(motionMenu, selrect({1, 16, 28, 13}), MSG_MOTION, 10)) { + if (SET_MENU_R(motionMenu, selrect({1, 16, 28, 13}), MSG_MOTION, 11)) { BACK_ITEM(drawControlMenu); + #if HAS_FLOW_EDIT + EDIT_ITEM(ICON_Flow, MSG_FLOW, onDrawPIntMenu, setFlow, &planner.flow_percentage[0]); + #endif + #if HAS_FEEDRATE_EDIT + EDIT_ITEM(ICON_Speed, MSG_SPEED, onDrawPIntMenu, setSpeed, &feedrate_percentage); + #endif MENU_ITEM(ICON_MaxSpeed, MSG_SPEED, onDrawSpeed, drawMaxSpeedMenu); MENU_ITEM(ICON_MaxAccelerated, MSG_ACCELERATION, onDrawAcc, drawMaxAccelMenu); + #if ENABLED(EDITABLE_STEPS_PER_UNIT) + MENU_ITEM(ICON_Step, MSG_STEPS_PER_MM, onDrawSteps, drawStepsMenu); + #endif #if ENABLED(CLASSIC_JERK) MENU_ITEM(ICON_MaxJerk, MSG_JERK, onDrawJerk, drawMaxJerkMenu); #elif HAS_JUNCTION_DEVIATION @@ -3572,27 +3679,23 @@ void drawMotionMenu() { #if ENABLED(ADAPTIVE_STEP_SMOOTHING_TOGGLE) EDIT_ITEM(ICON_UBLActive, MSG_STEP_SMOOTHING, onDrawChkbMenu, setAdaptiveStepSmoothing, &stepper.adaptive_step_smoothing_enabled); #endif - #if ENABLED(EDITABLE_STEPS_PER_UNIT) - MENU_ITEM(ICON_Step, MSG_STEPS_PER_MM, onDrawSteps, drawStepsMenu); + #if HAS_TRINAMIC_CONFIG + MENU_ITEM(ICON_TMCSet, MSG_TMC_DRIVERS, onDrawSubMenu, drawTrinamicConfigMenu); #endif - EDIT_ITEM(ICON_Flow, MSG_FLOW, onDrawPIntMenu, setFlow, &planner.flow_percentage[0]); - EDIT_ITEM(ICON_Speed, MSG_SPEED, onDrawPIntMenu, setSpeed, &feedrate_percentage); } updateMenu(motionMenu); } -#if ALL(ADVANCED_PAUSE_FEATURE, HAS_PREHEAT) - +#if HAS_PREHEAT void drawPreheatHotendMenu() { checkkey = ID_Menu; if (SET_MENU(preheatHotendMenu, MSG_PREHEAT_HOTEND, 1 + PREHEAT_COUNT)) { - BACK_ITEM(drawFilamentManMenu); - #define _ITEM_PREHEAT_HE(N) MENU_ITEM(ICON_Preheat##N, MSG_PREHEAT_##N, onDrawMenuItem, DoPreheatHotend##N); - REPEAT_1(PREHEAT_COUNT, _ITEM_PREHEAT_HE) + BACK_ITEM(drawPrepareMenu); + #define _ITEM_PREHEAT(N) MENU_ITEM(ICON_Preheat##N, MSG_PREHEAT_##N, onDrawPreheat##N, DoPreheat##N); + REPEAT_1(PREHEAT_COUNT, _ITEM_PREHEAT) } updateMenu(preheatHotendMenu); } - #endif void drawFilSetMenu() { @@ -3612,9 +3715,6 @@ void drawFilSetMenu() { EDIT_ITEM(ICON_FilLoad, MSG_FILAMENT_LOAD, onDrawPFloatMenu, setFilLoad, &fc_settings[0].load_length); EDIT_ITEM(ICON_FilUnload, MSG_FILAMENT_UNLOAD, onDrawPFloatMenu, setFilUnload, &fc_settings[0].unload_length); #endif - #if ENABLED(FWRETRACT) - MENU_ITEM(ICON_FWRetract, MSG_FWRETRACT, onDrawSubMenu, drawFWRetractMenu); - #endif } updateMenu(filSetMenu); } @@ -3628,14 +3728,14 @@ void drawFilamentManMenu() { #endif MENU_ITEM(ICON_FilSet, MSG_FILAMENT_SET, onDrawSubMenu, drawFilSetMenu); #if ENABLED(ADVANCED_PAUSE_FEATURE) - #if HAS_PREHEAT - MENU_ITEM(ICON_SetEndTemp, MSG_PREHEAT_HOTEND, onDrawSubMenu, drawPreheatHotendMenu); - #endif MENU_ITEM(ICON_FilMan, MSG_FILAMENTCHANGE, onDrawMenuItem, changeFilament); #endif #if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES) - MENU_ITEM(ICON_FilUnload, MSG_FILAMENTUNLOAD, onDrawMenuItem, unloadFilament); MENU_ITEM(ICON_FilLoad, MSG_FILAMENTLOAD, onDrawMenuItem, loadFilament); + MENU_ITEM(ICON_FilUnload, MSG_FILAMENTUNLOAD, onDrawMenuItem, unloadFilament); + #endif + #if ENABLED(FWRETRACT) + MENU_ITEM(ICON_FWRetract, MSG_FWRETRACT, onDrawSubMenu, drawFWRetractMenu); #endif } updateMenu(filamentMenu); @@ -3645,12 +3745,11 @@ void drawFilamentManMenu() { void drawManualMeshMenu() { checkkey = ID_Menu; - if (SET_MENU(manualMeshMenu, MSG_UBL_MANUAL_MESH, 6)) { - BACK_ITEM(drawPrepareMenu); - MENU_ITEM(ICON_ManualMesh, MSG_LEVEL_BED, onDrawMenuItem, manualMeshStart); + if (SET_MENU(manualMeshMenu, MSG_MANUAL_LEVELING, 5)) { + BACK_ITEM(drawLevelMenu); + MENU_ITEM(ICON_ManualMesh, MSG_UBL_MANUAL_MESH, onDrawMenuItem, manualMeshStart); mMeshMoveZItem = EDIT_ITEM(ICON_Zoffset, MSG_MOVE_Z, onDrawMMeshMoveZ, setMMeshMoveZ, ¤t_position.z); MENU_ITEM(ICON_Axis, MSG_UBL_CONTINUE_MESH, onDrawMenuItem, manualMeshContinue); - MENU_ITEM(ICON_MeshViewer, MSG_MESH_VIEW, onDrawSubMenu, dwinMeshViewer); MENU_ITEM(ICON_MeshSave, MSG_UBL_SAVE_MESH, onDrawMenuItem, manualMeshSave); } updateMenu(manualMeshMenu); @@ -3691,7 +3790,7 @@ void drawFilamentManMenu() { void drawTemperatureMenu() { checkkey = ID_Menu; - if (SET_MENU_R(temperatureMenu, selrect({236, 2, 28, 12}), MSG_TEMPERATURE, 6 + PREHEAT_COUNT)) { + if (SET_MENU_R(temperatureMenu, selrect({236, 2, 28, 12}), MSG_TEMPERATURE, 7 + PREHEAT_COUNT)) { BACK_ITEM(drawControlMenu); #if HAS_HOTEND hotendTargetItem = EDIT_ITEM(ICON_HotendTemp, MSG_UBL_SET_TEMP_HOTEND, onDrawHotendTemp, setHotendTemp, &thermalManager.temp_hotend[0].target); @@ -3704,12 +3803,15 @@ void drawTemperatureMenu() { #endif #if ENABLED(PIDTEMP) && ANY(PID_AUTOTUNE_MENU, PID_EDIT_MENU) MENU_ITEM_F(ICON_PIDNozzle, STR_HOTEND_PID " Settings", onDrawSubMenu, drawHotendPIDMenu); - #elif ANY(MPC_EDIT_MENU, MPC_AUTOTUNE_MENU) + #elif ENABLED(MPCTEMP) && ANY(MPC_EDIT_MENU, MPC_AUTOTUNE_MENU) MENU_ITEM_F(ICON_MPCNozzle, "MPC Settings", onDrawSubMenu, drawHotendMPCMenu); #endif #if ENABLED(PIDTEMPBED) && ANY(PID_AUTOTUNE_MENU, PID_EDIT_MENU) MENU_ITEM_F(ICON_PIDBed, STR_BED_PID " Settings", onDrawSubMenu, drawBedPIDMenu); #endif + #if ENABLED(PIDTEMPCHAMBER) && ANY(PID_AUTOTUNE_MENU, PID_EDIT_MENU) + MENU_ITEM_F(ICON_PIDBed, STR_CHAMBER_PID " Settings", onDrawSubMenu, drawChamberPIDMenu); + #endif #if HAS_PREHEAT #define _ITEM_SETPREHEAT(N) MENU_ITEM(ICON_SetPreheat##N, MSG_PREHEAT_## N ##_SETTINGS, onDrawSubMenu, drawPreheat## N ##Menu); REPEAT_1(PREHEAT_COUNT, _ITEM_SETPREHEAT) @@ -3891,7 +3993,7 @@ void drawMaxAccelMenu() { // Nozzle and Bed PID/MPC //============================================================================= -#if ANY(MPC_EDIT_MENU, MPC_AUTOTUNE_MENU) +#if ENABLED(MPCTEMP) && ANY(MPC_EDIT_MENU, MPC_AUTOTUNE_MENU) #if ENABLED(MPC_EDIT_MENU) void setHeaterPower() { setPFloatOnClick(1, 200, 1); } @@ -3978,7 +4080,7 @@ void drawMaxAccelMenu() { void drawHotendPIDMenu() { checkkey = ID_Menu; if (SET_MENU_F(hotendPIDMenu, STR_HOTEND_PID " Settings", 8)) { - BACK_ITEM(drawAdvancedSettingsMenu); + BACK_ITEM(drawTemperatureMenu); #if ENABLED(PID_AUTOTUNE_MENU) MENU_ITEM_F(ICON_PIDNozzle, STR_HOTEND_PID, onDrawMenuItem, hotendPID); EDIT_ITEM(ICON_Temperature, MSG_TEMPERATURE, onDrawPIntMenu, setHotendPIDT, &hmiData.hotendPIDT); @@ -4008,7 +4110,7 @@ void drawMaxAccelMenu() { void drawBedPIDMenu() { checkkey = ID_Menu; if (SET_MENU_F(bedPIDMenu, STR_BED_PID " Settings", 8)) { - BACK_ITEM(drawAdvancedSettingsMenu); + BACK_ITEM(drawTemperatureMenu); #if ENABLED(PID_AUTOTUNE_MENU) MENU_ITEM_F(ICON_PIDBed, STR_BED_PID, onDrawMenuItem,bedPID); EDIT_ITEM(ICON_Temperature, MSG_TEMPERATURE, onDrawPIntMenu, setBedPIDT, &hmiData.bedPIDT); @@ -4038,7 +4140,7 @@ void drawMaxAccelMenu() { void drawChamberPIDMenu() { checkkey = ID_Menu; if (SET_MENU_F(chamberPIDMenu, STR_CHAMBER_PID " Settings", 8)) { - BACK_ITEM(drawAdvancedSettingsMenu); + BACK_ITEM(drawTemperatureMenu); #if ENABLED(PID_AUTOTUNE_MENU) MENU_ITEM_F(ICON_PIDChamber, STR_CHAMBER_PID, onDrawMenuItem,chamberPID); EDIT_ITEM(ICON_Temperature, MSG_TEMPERATURE, onDrawPIntMenu, setChamberPIDT, &hmiData.chamberPIDT); @@ -4124,81 +4226,11 @@ void drawMaxAccelMenu() { // Mesh Bed Leveling //============================================================================= -#if HAS_MESH - - void applyMeshFadeHeight() { set_z_fade_height(planner.z_fade_height); } - void setMeshFadeHeight() { setPFloatOnClick(0, 100, 1, applyMeshFadeHeight); } - - void setMeshActive() { - set_bed_leveling_enabled(!planner.leveling_active); - drawCheckboxLine(currentMenu->line(), planner.leveling_active); - dwinUpdateLCD(); - } - - #if ENABLED(PREHEAT_BEFORE_LEVELING) - void setBedLevT() { setPIntOnClick(MIN_BEDTEMP, MAX_BEDTEMP); } - #endif - - #if ENABLED(PROUI_MESH_EDIT) - void liveEditMesh() { ((MenuItemPtr*)editZValueItem)->value = &bedlevel.z_values[hmiValue.select ? bedLevelTools.mesh_x : menuData.value][hmiValue.select ? menuData.value : bedLevelTools.mesh_y]; editZValueItem->redraw(); } - void applyEditMeshX() { bedLevelTools.mesh_x = menuData.value; } - void applyEditMeshY() { bedLevelTools.mesh_y = menuData.value; } - void setEditMeshX() { hmiValue.select = 0; setIntOnClick(0, GRID_MAX_POINTS_X - 1, bedLevelTools.mesh_x, applyEditMeshX, liveEditMesh); } - void setEditMeshY() { hmiValue.select = 1; setIntOnClick(0, GRID_MAX_POINTS_Y - 1, bedLevelTools.mesh_y, applyEditMeshY, liveEditMesh); } - void setEditZValue() { setPFloatOnClick(Z_OFFSET_MIN, Z_OFFSET_MAX, 3); } - void applyMeshInset() { TERN_(AUTO_BED_LEVELING_UBL, set_bed_leveling_enabled(false)); reset_bed_level(); redrawItem(); } - void setMeshInset() { setPFloatOnClick(X_MIN_POS, X_MAX_POS, UNITFDIGITS, applyMeshInset); } - #endif - - void resetMesh() { bedLevelTools.meshReset(); LCD_MESSAGE(MSG_MESH_RESET); } - -#endif // HAS_MESH - -#if ENABLED(AUTO_BED_LEVELING_UBL) - - void applyUBLSlot() { bedlevel.storage_slot = menuData.value; } - void setUBLSlot() { setIntOnClick(0, settings.calc_num_meshes() - 1, bedlevel.storage_slot, applyUBLSlot); } - void onDrawUBLSlot(MenuItem* menuitem, int8_t line) { - NOLESS(bedlevel.storage_slot, 0); - onDrawIntMenu(menuitem, line, bedlevel.storage_slot); - } - - void applyUBLTiltGrid() { bedLevelTools.tilt_grid = menuData.value; } - void setUBLTiltGrid() { setIntOnClick(1, 3, bedLevelTools.tilt_grid, applyUBLTiltGrid); } - - void ublMeshTilt() { - NOLESS(bedlevel.storage_slot, 0); - if (bedLevelTools.tilt_grid > 1) - gcode.process_subcommands_now(TS(F("G29J"), bedLevelTools.tilt_grid)); - else - gcode.process_subcommands_now(F("G29J")); - LCD_MESSAGE(MSG_UBL_MESH_TILTED); - } - - void ublSmartFillMesh() { - for (uint8_t x = 0; x < GRID_MAX_POINTS_Y; ++x) bedlevel.smart_fill_mesh(); - LCD_MESSAGE(MSG_UBL_MESH_FILLED); - } - - void ublMeshSave() { - NOLESS(bedlevel.storage_slot, 0); - settings.store_mesh(bedlevel.storage_slot); - ui.status_printf(0, GET_TEXT_F(MSG_MESH_SAVED), bedlevel.storage_slot); - DONE_BUZZ(true); - } - - void ublMeshLoad() { - NOLESS(bedlevel.storage_slot, 0); - settings.load_mesh(bedlevel.storage_slot); - } - -#endif // AUTO_BED_LEVELING_UBL - #if HAS_MESH void drawMeshSetMenu() { checkkey = ID_Menu; - if (SET_MENU(meshMenu, MSG_MESH_LEVELING, 12)) { + if (SET_MENU(meshMenu, MSG_MESH_SETTINGS, 5)) { BACK_ITEM(drawLevelMenu); #if ENABLED(PREHEAT_BEFORE_LEVELING) EDIT_ITEM(ICON_Temperature, MSG_UBL_SET_TEMP_BED, onDrawPIntMenu, setBedLevT, &hmiData.bedLevT); @@ -4206,15 +4238,8 @@ void drawMaxAccelMenu() { EDIT_ITEM(ICON_SetZOffset, MSG_Z_FADE_HEIGHT, onDrawPFloatMenu, setMeshFadeHeight, &planner.z_fade_height); EDIT_ITEM(ICON_UBLActive, MSG_ACTIVATE_MESH, onDrawChkbMenu, setMeshActive, &planner.leveling_active); #if ENABLED(AUTO_BED_LEVELING_UBL) - EDIT_ITEM(ICON_UBLSlot, MSG_UBL_STORAGE_SLOT, onDrawUBLSlot, setUBLSlot, &bedlevel.storage_slot); - MENU_ITEM(ICON_UBLMeshSave, MSG_UBL_SAVE_MESH, onDrawMenuItem, ublMeshSave); - MENU_ITEM(ICON_UBLMeshLoad, MSG_UBL_LOAD_MESH, onDrawMenuItem, ublMeshLoad); EDIT_ITEM(ICON_UBLTiltGrid, MSG_UBL_TILTING_GRID, onDrawPInt8Menu, setUBLTiltGrid, &bedLevelTools.tilt_grid); - MENU_ITEM(ICON_UBLTiltGrid, MSG_UBL_TILT_MESH, onDrawMenuItem, ublMeshTilt); - MENU_ITEM(ICON_UBLSmartFill, MSG_UBL_SMART_FILLIN, onDrawMenuItem, ublSmartFillMesh); #endif - MENU_ITEM(ICON_MeshReset, MSG_MESH_RESET, onDrawMenuItem, resetMesh); - MENU_ITEM(ICON_MeshViewer, MSG_MESH_VIEW, onDrawSubMenu, dwinMeshViewer); } updateMenu(meshMenu); } @@ -4245,23 +4270,34 @@ void drawMaxAccelMenu() { void drawLevelMenu() { checkkey = ID_Menu; - if (SET_MENU(levelMenu, MSG_BED_LEVELING, 6)) { + if (SET_MENU(levelMenu, MSG_BED_LEVELING, 14)) { BACK_ITEM(gotoMainMenu); #if ENABLED(EEPROM_SETTINGS) MENU_ITEM(ICON_WriteEEPROM, MSG_STORE_EEPROM, onDrawMenuItem, writeEEPROM); #endif - #if HAS_BED_PROBE - MENU_ITEM(ICON_Level, MSG_AUTO_MESH, onDrawMenuItem, autoLevel); - MENU_ITEM(ICON_ProbeSet, MSG_ZPROBE_SETTINGS, onDrawSubMenu, drawProbeSetMenu); + #if ENABLED(MESH_BED_LEVELING) + MENU_ITEM(ICON_ManualMesh, MSG_MANUAL_MESH, onDrawSubMenu, drawManualMeshMenu); + #elif HAS_BED_PROBE + MENU_ITEM(ICON_Mesh, MSG_AUTO_MESH, onDrawMenuItem, autoLevel); + MENU_ITEM(ICON_Probe, MSG_ZPROBE_SETTINGS, onDrawSubMenu, drawProbeSetMenu); + #endif + #if HAS_HOME_OFFSET + MENU_ITEM(ICON_HomeOffset, MSG_SET_HOME_OFFSETS, onDrawSubMenu, drawHomeOffsetMenu); #endif #if HAS_MESH - MENU_ITEM(ICON_ProbeSet, MSG_MESH_LEVELING, onDrawSubMenu, drawMeshSetMenu); + MENU_ITEM(ICON_Mesh, MSG_MESH_SETTINGS, onDrawSubMenu, drawMeshSetMenu); + MENU_ITEM(ICON_MeshViewer, MSG_MESH_VIEW, onDrawSubMenu, dwinMeshViewer); #if ENABLED(PROUI_MESH_EDIT) MENU_ITEM(ICON_MeshEdit, MSG_EDIT_MESH, onDrawSubMenu, drawEditMeshMenu); + MENU_ITEM(ICON_MeshReset, MSG_MESH_RESET, onDrawMenuItem, resetMesh); #endif #endif - #if HAS_HOME_OFFSET - MENU_ITEM(ICON_ProbeSet, MSG_SET_HOME_OFFSETS, onDrawSubMenu, drawHomeOffsetMenu); + #if ENABLED(AUTO_BED_LEVELING_UBL) + EDIT_ITEM(ICON_UBLSlot, MSG_UBL_STORAGE_SLOT, onDrawUBLSlot, setUBLSlot, &bedlevel.storage_slot); + MENU_ITEM(ICON_UBLMeshSave, MSG_UBL_SAVE_MESH, onDrawMenuItem, ublMeshSave); + MENU_ITEM(ICON_UBLMeshLoad, MSG_UBL_LOAD_MESH, onDrawMenuItem, ublMeshLoad); + MENU_ITEM(ICON_UBLTiltGrid, MSG_UBL_TILT_MESH, onDrawMenuItem, ublMeshTilt); + MENU_ITEM(ICON_UBLSmartFill, MSG_UBL_SMART_FILLIN, onDrawMenuItem, ublSmartFillMesh); #endif } ui.reset_status(true); diff --git a/Marlin/src/lcd/e3v2/proui/dwinui.h b/Marlin/src/lcd/e3v2/proui/dwinui.h index f606c2440010..be121b43b895 100644 --- a/Marlin/src/lcd/e3v2/proui/dwinui.h +++ b/Marlin/src/lcd/e3v2/proui/dwinui.h @@ -73,7 +73,6 @@ #define ICON_HSMode ICON_MaxAccZ #define ICON_InputShaping ICON_MaxAccelerated #define ICON_JDmm ICON_MaxJerk -#define ICON_Level ICON_Mesh #define ICON_Lock ICON_Checkbox #define ICON_ManualMesh ICON_Mesh #define ICON_MaxPosX ICON_MoveX diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index bd2b506ecc1e..8d88157cd414 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -661,7 +661,7 @@ namespace LanguageNarrow_en { LSTR MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling"); LSTR MSG_MESH_LEVELING = _UxGT("Mesh Leveling"); LSTR MSG_MESH_DONE = _UxGT("Mesh probing done"); - LSTR MSG_MESH_POINTS = _UxGT("Mesh Points"); + LSTR MSG_MESH_SETTINGS = _UxGT("Mesh Settings"); LSTR MSG_INFO_STATS_MENU = _UxGT("Printer Stats"); LSTR MSG_RESET_STATS = _UxGT("Reset Print Stats?"); LSTR MSG_INFO_BOARD_MENU = _UxGT("Board Info"); From c42dbd72730e9cd6c593d8d8ddb7d6756ade7334 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Wed, 29 May 2024 22:20:54 -0400 Subject: [PATCH 45/47] update dwin.cpp - remove duplicate --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index cc1958d38770..0cece547bb2c 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -1931,13 +1931,6 @@ void dwinCopySettingsFrom(const char * const buff) { } // Initialize or re-initialize the LCD -void MarlinUI::init_lcd() { - delay(750); // Wait to wakeup screen - const bool hs = dwinHandshake(); UNUSED(hs); - dwinFrameSetDir(1); - dwinJPGCacheTo1(Language_English); -} - void dwinInitScreen() { dwinSetColorDefaults(); hmiInit(); // Draws boot screen @@ -1952,26 +1945,6 @@ void dwinInitScreen() { gotoMainMenu(); } -void MarlinUI::update() { - hmiSDCardUpdate(); // SD card update - eachMomentUpdate(); // Status update - dwinHandleScreen(); // Rotary encoder update -} - -#if HAS_LCD_BRIGHTNESS - void MarlinUI::_set_brightness() { dwinLCDBrightness(backlight ? brightness : 0); } -#endif - -void MarlinUI::kill_screen(FSTR_P const lcd_error, FSTR_P const) { - #if ANY(TJC_DISPLAY, DACAI_DISPLAY) - dwinDrawPopup(ICON_BLTouch, GET_TEXT_F(MSG_PRINTER_KILLED), lcd_error); - #else - dwinDrawPopup(ICON_Printer_0, GET_TEXT_F(MSG_PRINTER_KILLED), lcd_error); - #endif - DWINUI::drawCenteredString(hmiData.colorPopupTxt, 270, GET_TEXT_F(MSG_TURN_OFF)); - dwinUpdateLCD(); -} - void dwinRebootScreen() { dwinFrameClear(COLOR_BG_BLACK); dwinJPGShowAndCache(0); From b3dcfcc3d7c880945b3a7e0510a8d07f814ac67b Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Wed, 29 May 2024 23:13:00 -0400 Subject: [PATCH 46/47] add missing declaration --- Marlin/src/lcd/e3v2/proui/dwin.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 13fcadd81857..5c39f25e7193 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -169,6 +169,7 @@ void rebootPrinter(); void disableMotors(); void autoHome(); #if HAS_PREHEAT + void drawPreheatHotendMenu(); #define _DOPREHEAT(N) void DoPreheat##N(); REPEAT_1(PREHEAT_COUNT, _DOPREHEAT) #endif From fb61d5c96b45a3589332c67b908971304d6843a1 Mon Sep 17 00:00:00 2001 From: classicrocker883 Date: Sat, 1 Jun 2024 06:39:40 -0400 Subject: [PATCH 47/47] adjust spacing, rearrange MESH_##_DIST --- Marlin/src/feature/bedlevel/abl/bbl.cpp | 11 +++++++---- Marlin/src/feature/bedlevel/abl/bbl.h | 5 ----- Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/Marlin/src/feature/bedlevel/abl/bbl.cpp b/Marlin/src/feature/bedlevel/abl/bbl.cpp index 87a2863e656e..fec0add59db3 100644 --- a/Marlin/src/feature/bedlevel/abl/bbl.cpp +++ b/Marlin/src/feature/bedlevel/abl/bbl.cpp @@ -38,10 +38,10 @@ LevelingBilinear bedlevel; xy_float_t LevelingBilinear::grid_factor; -xy_pos_t LevelingBilinear::grid_spacing, - LevelingBilinear::grid_start, - LevelingBilinear::cached_rel; -xy_int8_t LevelingBilinear::cached_g; +xy_pos_t LevelingBilinear::grid_spacing, + LevelingBilinear::grid_start, + LevelingBilinear::cached_rel; +xy_int8_t LevelingBilinear::cached_g; bed_mesh_t LevelingBilinear::z_values; /** @@ -111,6 +111,9 @@ void LevelingBilinear::reset() { */ void LevelingBilinear::set_grid(const xy_pos_t& _grid_spacing, const xy_pos_t& _grid_start) { #if ENABLED(PROUI_MESH_EDIT) + #define MESH_X_DIST (float((MESH_MAX_X) - (MESH_MIN_X)) / (GRID_MAX_CELLS_X)) + #define MESH_Y_DIST (float((MESH_MAX_Y) - (MESH_MIN_Y)) / (GRID_MAX_CELLS_Y)) + grid_start.x = MESH_MIN_X; grid_start.y = MESH_MIN_Y; grid_spacing.x = MESH_X_DIST; diff --git a/Marlin/src/feature/bedlevel/abl/bbl.h b/Marlin/src/feature/bedlevel/abl/bbl.h index da979fe27e1a..ca2e96593fde 100644 --- a/Marlin/src/feature/bedlevel/abl/bbl.h +++ b/Marlin/src/feature/bedlevel/abl/bbl.h @@ -23,11 +23,6 @@ #include "../../../inc/MarlinConfigPre.h" -#if ENABLED(PROUI_MESH_EDIT) - #define MESH_X_DIST (float((MESH_MAX_X) - (MESH_MIN_X)) / (GRID_MAX_CELLS_X)) - #define MESH_Y_DIST (float((MESH_MAX_Y) - (MESH_MIN_Y)) / (GRID_MAX_CELLS_Y)) -#endif - class LevelingBilinear { public: static bed_mesh_t z_values; diff --git a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp index 2969cf682203..def5bf999540 100644 --- a/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp +++ b/Marlin/src/feature/bedlevel/mbl/mesh_bed_leveling.cpp @@ -37,7 +37,7 @@ float mesh_bed_leveling::z_offset, mesh_bed_leveling::index_to_xpos[GRID_MAX_POINTS_X], mesh_bed_leveling::index_to_ypos[GRID_MAX_POINTS_Y]; - bed_mesh_t mesh_bed_leveling::z_values; + bed_mesh_t mesh_bed_leveling::z_values; mesh_bed_leveling::mesh_bed_leveling() { for (uint8_t i = 0; i < GRID_MAX_POINTS_X; ++i)