From 4a0769ec1b68263b6241ecd4d4c9514d28005a69 Mon Sep 17 00:00:00 2001 From: InsanityAutomation <38436470+InsanityAutomation@users.noreply.github.com> Date: Sun, 6 Mar 2022 15:46:28 -0500 Subject: [PATCH] allows z offset to work for babystep total on machines without probe --- .../src/lcd/extui/dgus_creality/DGUSDisplay.cpp | 3 +++ .../lcd/extui/dgus_creality/DGUSScreenHandler.h | 7 +++++-- .../creality_touch/DGUSDisplayDef.cpp | 15 +++++++++++---- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Marlin/src/lcd/extui/dgus_creality/DGUSDisplay.cpp b/Marlin/src/lcd/extui/dgus_creality/DGUSDisplay.cpp index 57a9f84a37..0ac294109d 100644 --- a/Marlin/src/lcd/extui/dgus_creality/DGUSDisplay.cpp +++ b/Marlin/src/lcd/extui/dgus_creality/DGUSDisplay.cpp @@ -294,6 +294,9 @@ void DGUSDisplay::loop() { if (!no_reentrance) { no_reentrance = true; ProcessRx(); + //Because crappy VPHELPER macros cant take calcs or functions, process updated value here. If we handle only in button handler code, we will miss changes over M290 + dgusdisplay.WriteVariable(VP_Z_OFFSET, (int16_t)(100*ExtUI::getZOffset_mm())); + no_reentrance = false; } } diff --git a/Marlin/src/lcd/extui/dgus_creality/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus_creality/DGUSScreenHandler.h index 08c9f4fb97..2aff821b7b 100644 --- a/Marlin/src/lcd/extui/dgus_creality/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus_creality/DGUSScreenHandler.h @@ -139,9 +139,12 @@ public: // Hook for PID autotune static void HandlePIDAutotune(DGUS_VP_Variable &var, void *val_ptr); #endif - #if HAS_BED_PROBE + + + static void HandleZoffsetChange(DGUS_VP_Variable &var, void *val_ptr); + + #if HAS_MESH // Hook for "Change probe offset z" - static void HandleZoffsetChange(DGUS_VP_Variable &var, void *val_ptr); static void OnMeshLevelingStart(); diff --git a/Marlin/src/lcd/extui/dgus_creality/creality_touch/DGUSDisplayDef.cpp b/Marlin/src/lcd/extui/dgus_creality/creality_touch/DGUSDisplayDef.cpp index d92f69bcd1..c83041b927 100644 --- a/Marlin/src/lcd/extui/dgus_creality/creality_touch/DGUSDisplayDef.cpp +++ b/Marlin/src/lcd/extui/dgus_creality/creality_touch/DGUSDisplayDef.cpp @@ -40,6 +40,9 @@ #include "../../../../module/planner.h" #include "../../../../feature/caselight.h" +#if ENABLED(BABYSTEPPING) + #include "../../../../feature/babystep.h" +#endif #if ENABLED(FWRETRACT) #include "../../../../feature/fwretract.h" @@ -83,9 +86,9 @@ const char MarlinVersion[] PROGMEM = SHORT_BUILD_VERSION; #define VPList_HeatBed #endif -#define VPList_Common VP_BACK_BUTTON_STATE +#define VPList_Common VP_BACK_BUTTON_STATE, VP_Z_OFFSET #define VPList_CommonWithStatus VPList_HeatHotend VPList_HeatBed VP_Z_OFFSET, VP_Feedrate_Percentage, VP_BACK_BUTTON_STATE -#define VPList_CommonWithHeatOnly VPList_HeatHotend VPList_HeatBed VP_BACK_BUTTON_STATE +#define VPList_CommonWithHeatOnly VPList_HeatHotend VPList_HeatBed VP_BACK_BUTTON_STATE, VP_Z_OFFSET // ----- Which variables to auto-update on which screens const uint16_t VPList_None[] PROGMEM = { @@ -483,7 +486,6 @@ const struct VPMapping VPMap[] PROGMEM = { #define VPHELPER_STR(VPADR, VPADRVAR, STRLEN, RXFPTR, TXFPTR ) { .VP=VPADR, .memadr=VPADRVAR, .size=STRLEN, \ .set_by_display_handler = RXFPTR, .send_to_display_handler = TXFPTR } -float tmp_z_offset = getZOffset_mm(); const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { // Back button state @@ -621,7 +623,12 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { VPHELPER(SP_Y_POSITION, nullptr, nullptr, ScreenHandler.SendAxisTrustValue), VPHELPER(SP_Z_POSITION, nullptr, nullptr, ScreenHandler.SendAxisTrustValue), - VPHELPER(VP_Z_OFFSET, &tmp_z_offset, ScreenHandler.HandleZoffsetChange, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<2>), + #if HAS_BED_PROBE + VPHELPER(VP_Z_OFFSET, &probe.offset.z, ScreenHandler.HandleZoffsetChange, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<2>), + #elif ENABLED(BABYSTEP_DISPLAY_TOTAL) + VPHELPER(VP_Z_OFFSET, nullptr, ScreenHandler.HandleZoffsetChange, nullptr), + #endif + VPHELPER(VP_FAN_TOGGLE, &thermalManager.fan_speed[0], nullptr, ScreenHandler.DGUSLCD_SendFanStatusToDisplay), VPHELPER(VP_Fan0_Percentage, &thermalManager.fan_speed[0], ScreenHandler.HandleFanSpeedChanged, ScreenHandler.DGUSLCD_SendFanSpeedToDisplay),