More customizable DGUSDisplay (#18700)
This commit is contained in:
		
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -90,223 +90,6 @@ extern DGUSDisplay dgusdisplay; | ||||
| // compile-time x^y | ||||
| constexpr float cpow(const float x, const int y) { return y == 0 ? 1.0 : x * cpow(x, y - 1); } | ||||
|  | ||||
| class DGUSScreenVariableHandler { | ||||
| public: | ||||
|   DGUSScreenVariableHandler() = default; | ||||
|  | ||||
|   static bool loop(); | ||||
|  | ||||
|   /// Send all 4 strings that are displayed on the infoscreen, confirmation screen and kill screen | ||||
|   /// The bools specifing whether the strings are in RAM or FLASH. | ||||
|   static void sendinfoscreen(const char* line1, const char* line2, const char* line3, const char* line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); | ||||
|  | ||||
|   static void HandleUserConfirmationPopUp(uint16_t ConfirmVP, const char* line1, const char* line2, const char* line3, const char* line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); | ||||
|  | ||||
|   /// "M117" Message -- msg is a RAM ptr. | ||||
|   static void setstatusmessage(const char* msg); | ||||
|   /// The same for messages from Flash | ||||
|   static void setstatusmessagePGM(PGM_P const msg); | ||||
|   // Callback for VP "Display wants to change screen on idle printer" | ||||
|   static void ScreenChangeHookIfIdle(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   // Callback for VP "Screen has been changed" | ||||
|   static void ScreenChangeHook(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   // Callback for VP "All Heaters Off" | ||||
|   static void HandleAllHeatersOff(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   // Hook for "Change this temperature" | ||||
|   static void HandleTemperatureChanged(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   // Hook for "Change Flowrate" | ||||
|   static void HandleFlowRateChanged(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #if ENABLED(DGUS_UI_MOVE_DIS_OPTION) | ||||
|     // Hook for manual move option | ||||
|     static void HandleManualMoveOption(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #endif | ||||
|   // Hook for manual move. | ||||
|   static void HandleManualMove(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   // Hook for manual extrude. | ||||
|   static void HandleManualExtrude(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   // Hook for motor lock and unlook | ||||
|   static void HandleMotorLockUnlock(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #if ENABLED(POWER_LOSS_RECOVERY) | ||||
|     // Hook for power loss recovery. | ||||
|     static void HandlePowerLossRecovery(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #endif | ||||
|   // Hook for settings | ||||
|   static void HandleSettings(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   static void HandleStepPerMMChanged(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   static void HandleStepPerMMExtruderChanged(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #if HAS_PID_HEATING | ||||
|     // Hook for "Change this temperature PID para" | ||||
|     static void HandleTemperaturePIDChanged(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     // Hook for PID autotune | ||||
|     static void HandlePIDAutotune(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #endif | ||||
|   #if HAS_BED_PROBE | ||||
|     // Hook for "Change probe offset z" | ||||
|     static void HandleProbeOffsetZChanged(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #endif | ||||
|   #if ENABLED(BABYSTEPPING) | ||||
|     // Hook for live z adjust action | ||||
|     static void HandleLiveAdjustZ(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #endif | ||||
|   #if HAS_FAN | ||||
|     // Hook for fan control | ||||
|     static void HandleFanControl(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #endif | ||||
|   // Hook for heater control | ||||
|   static void HandleHeaterControl(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #if ENABLED(DGUS_PREHEAT_UI) | ||||
|     // Hook for preheat | ||||
|     static void HandlePreheat(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #endif | ||||
|   #if ENABLED(DGUS_FILAMENT_LOADUNLOAD) | ||||
|     // Hook for filament load and unload filament option | ||||
|     static void HandleFilamentOption(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     // Hook for filament load and unload | ||||
|     static void HandleFilamentLoadUnload(DGUS_VP_Variable &var); | ||||
|   #endif | ||||
|  | ||||
|   #if ENABLED(SDSUPPORT) | ||||
|     // Callback for VP "Display wants to change screen when there is a SD card" | ||||
|     static void ScreenChangeHookIfSD(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     /// Scroll buttons on the file listing screen. | ||||
|     static void DGUSLCD_SD_ScrollFilelist(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     /// File touched. | ||||
|     static void DGUSLCD_SD_FileSelected(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     /// start print after confirmation received. | ||||
|     static void DGUSLCD_SD_StartPrint(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     /// User hit the pause, resume or abort button. | ||||
|     static void DGUSLCD_SD_ResumePauseAbort(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     /// User confirmed the abort action | ||||
|     static void DGUSLCD_SD_ReallyAbort(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     /// User hit the tune button | ||||
|     static void DGUSLCD_SD_PrintTune(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     /// Send a single filename to the display. | ||||
|     static void DGUSLCD_SD_SendFilename(DGUS_VP_Variable &var); | ||||
|     /// Marlin informed us that a new SD has been inserted. | ||||
|     static void SDCardInserted(); | ||||
|     /// Marlin informed us that the SD Card has been removed(). | ||||
|     static void SDCardRemoved(); | ||||
|     /// Marlin informed us about a bad SD Card. | ||||
|     static void SDCardError(); | ||||
|   #endif | ||||
|  | ||||
|   // OK Button the Confirm screen. | ||||
|   static void ScreenConfirmedOK(DGUS_VP_Variable &var, void *val_ptr); | ||||
|  | ||||
|   // Update data after went to new screen (by display or by GotoScreen) | ||||
|   // remember: store the last-displayed screen, so it can get returned to. | ||||
|   // (e.g for pop up messages) | ||||
|   static void UpdateNewScreen(DGUSLCD_Screens newscreen, bool popup=false); | ||||
|  | ||||
|   // Recall the remembered screen. | ||||
|   static void PopToOldScreen(); | ||||
|  | ||||
|   // Make the display show the screen and update all VPs in it. | ||||
|   static void GotoScreen(DGUSLCD_Screens screen, bool ispopup = false); | ||||
|  | ||||
|   static void UpdateScreenVPData(); | ||||
|  | ||||
|   // Helpers to convert and transfer data to the display. | ||||
|   static void DGUSLCD_SendWordValueToDisplay(DGUS_VP_Variable &var); | ||||
|   static void DGUSLCD_SendStringToDisplay(DGUS_VP_Variable &var); | ||||
|   static void DGUSLCD_SendStringToDisplayPGM(DGUS_VP_Variable &var); | ||||
|   static void DGUSLCD_SendTemperaturePID(DGUS_VP_Variable &var); | ||||
|   static void DGUSLCD_SendPercentageToDisplay(DGUS_VP_Variable &var); | ||||
|   static void DGUSLCD_SendPrintProgressToDisplay(DGUS_VP_Variable &var); | ||||
|   static void DGUSLCD_SendPrintTimeToDisplay(DGUS_VP_Variable &var); | ||||
|   #if ENABLED(PRINTCOUNTER) | ||||
|     static void DGUSLCD_SendPrintAccTimeToDisplay(DGUS_VP_Variable &var); | ||||
|     static void DGUSLCD_SendPrintsTotalToDisplay(DGUS_VP_Variable &var); | ||||
|   #endif | ||||
|   #if HAS_FAN | ||||
|     static void DGUSLCD_SendFanStatusToDisplay(DGUS_VP_Variable &var); | ||||
|   #endif | ||||
|   static void DGUSLCD_SendHeaterStatusToDisplay(DGUS_VP_Variable &var); | ||||
|   #if ENABLED(DGUS_UI_WAITING) | ||||
|     static void DGUSLCD_SendWaitingStatusToDisplay(DGUS_VP_Variable &var); | ||||
|   #endif | ||||
|  | ||||
|   /// Send a value from 0..100 to a variable with a range from 0..255 | ||||
|   static void DGUSLCD_PercentageToUint8(DGUS_VP_Variable &var, void *val_ptr); | ||||
|  | ||||
|   template<typename T> | ||||
|   static void DGUSLCD_SetValueDirectly(DGUS_VP_Variable &var, void *val_ptr) { | ||||
|     if (!var.memadr) return; | ||||
|     union { unsigned char tmp[sizeof(T)]; T t; } x; | ||||
|     unsigned char *ptr = (unsigned char*)val_ptr; | ||||
|     LOOP_L_N(i, sizeof(T)) x.tmp[i] = ptr[sizeof(T) - i - 1]; | ||||
|     *(T*)var.memadr = x.t; | ||||
|   } | ||||
|  | ||||
|   /// Send a float value to the display. | ||||
|   /// Display will get a 4-byte integer scaled to the number of digits: | ||||
|   /// Tell the display the number of digits and it cheats by displaying a dot between... | ||||
|   template<unsigned int decimals> | ||||
|   static void DGUSLCD_SendFloatAsLongValueToDisplay(DGUS_VP_Variable &var) { | ||||
|     if (var.memadr) { | ||||
|       float f = *(float *)var.memadr; | ||||
|       f *= cpow(10, decimals); | ||||
|       union { long l; char lb[4]; } endian; | ||||
|  | ||||
|       char tmp[4]; | ||||
|       endian.l = f; | ||||
|       tmp[0] = endian.lb[3]; | ||||
|       tmp[1] = endian.lb[2]; | ||||
|       tmp[2] = endian.lb[1]; | ||||
|       tmp[3] = endian.lb[0]; | ||||
|       dgusdisplay.WriteVariable(var.VP, tmp, 4); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   /// Send a float value to the display. | ||||
|   /// Display will get a 2-byte integer scaled to the number of digits: | ||||
|   /// Tell the display the number of digits and it cheats by displaying a dot between... | ||||
|   template<unsigned int decimals> | ||||
|   static void DGUSLCD_SendFloatAsIntValueToDisplay(DGUS_VP_Variable &var) { | ||||
|     if (var.memadr) { | ||||
|       float f = *(float *)var.memadr; | ||||
|       DEBUG_ECHOLNPAIR_F(" >> ", f, 6); | ||||
|       f *= cpow(10, decimals); | ||||
|       union { int16_t i; char lb[2]; } endian; | ||||
|  | ||||
|       char tmp[2]; | ||||
|       endian.i = f; | ||||
|       tmp[0] = endian.lb[1]; | ||||
|       tmp[1] = endian.lb[0]; | ||||
|       dgusdisplay.WriteVariable(var.VP, tmp, 2); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   /// Force an update of all VP on the current screen. | ||||
|   static inline void ForceCompleteUpdate() { update_ptr = 0; ScreenComplete = false; } | ||||
|   /// Has all VPs sent to the screen | ||||
|   static inline bool IsScreenComplete() { return ScreenComplete; } | ||||
|  | ||||
|   static inline DGUSLCD_Screens getCurrentScreen() { return current_screen; } | ||||
|  | ||||
|   static inline void SetupConfirmAction( void (*f)()) { confirm_action_cb = f; } | ||||
|  | ||||
| private: | ||||
|   static DGUSLCD_Screens current_screen;  ///< currently on screen | ||||
|   static constexpr uint8_t NUM_PAST_SCREENS = 4; | ||||
|   static DGUSLCD_Screens past_screens[NUM_PAST_SCREENS]; ///< LIFO with past screens for the "back" button. | ||||
|  | ||||
|   static uint8_t update_ptr;    ///< Last sent entry in the VPList for the actual screen. | ||||
|   static uint16_t skipVP;       ///< When updating the screen data, skip this one, because the user is interacting with it. | ||||
|   static bool ScreenComplete;   ///< All VPs sent to screen? | ||||
|  | ||||
|   static uint16_t ConfirmVP;    ///< context for confirm screen (VP that will be emulated-sent on "OK"). | ||||
|  | ||||
|   #if ENABLED(SDSUPPORT) | ||||
|     static int16_t top_file;    ///< file on top of file chooser | ||||
|     static int16_t file_to_print; ///< touched file to be confirmed | ||||
|   #endif | ||||
|  | ||||
|   static void (*confirm_action_cb)(); | ||||
| }; | ||||
|  | ||||
| extern DGUSScreenVariableHandler ScreenHandler; | ||||
|  | ||||
| /// Find the flash address of a DGUS_VP_Variable for the VP. | ||||
| extern const DGUS_VP_Variable* DGUSLCD_FindVPVar(const uint16_t vp); | ||||
|  | ||||
|   | ||||
| @@ -25,6 +25,8 @@ | ||||
|  | ||||
| #include "DGUSVPVariable.h" | ||||
|  | ||||
| #include <stdint.h> | ||||
|  | ||||
| // This file defines the interaction between Marlin and the display firmware. | ||||
|  | ||||
| // information on which screen which VP is displayed | ||||
| @@ -41,6 +43,8 @@ extern const struct VPMapping VPMap[]; | ||||
| // List of VPs handled by Marlin / The Display. | ||||
| extern const struct DGUS_VP_Variable ListOfVP[]; | ||||
|  | ||||
| #include "../../../../inc/MarlinConfig.h" | ||||
|  | ||||
| #if ENABLED(DGUS_LCD_UI_ORIGIN) | ||||
|   #include "origin/DGUSDisplayDef.h" | ||||
| #elif ENABLED(DGUS_LCD_UI_FYSETC) | ||||
|   | ||||
							
								
								
									
										1144
									
								
								Marlin/src/lcd/extui/lib/dgus/DGUSScreenHandler.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1144
									
								
								Marlin/src/lcd/extui/lib/dgus/DGUSScreenHandler.cpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										246
									
								
								Marlin/src/lcd/extui/lib/dgus/DGUSScreenHandler.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										246
									
								
								Marlin/src/lcd/extui/lib/dgus/DGUSScreenHandler.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,246 @@ | ||||
| /** | ||||
|  * Marlin 3D Printer Firmware | ||||
|  * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] | ||||
|  * | ||||
|  * Based on Sprinter and grbl. | ||||
|  * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm | ||||
|  * | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  * | ||||
|  */ | ||||
| #pragma once | ||||
|  | ||||
| #include "DGUSDisplay.h" | ||||
| #include "DGUSVPVariable.h" | ||||
|  | ||||
| #include "../../../../inc/MarlinConfig.h" | ||||
|  | ||||
| enum DGUSLCD_Screens : uint8_t; | ||||
|  | ||||
| class DGUSScreenHandler { | ||||
| public: | ||||
|   DGUSScreenHandler() = default; | ||||
|  | ||||
|   static bool loop(); | ||||
|  | ||||
|   /// Send all 4 strings that are displayed on the infoscreen, confirmation screen and kill screen | ||||
|   /// The bools specifing whether the strings are in RAM or FLASH. | ||||
|   static void sendinfoscreen(const char* line1, const char* line2, const char* line3, const char* line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); | ||||
|  | ||||
|   static void HandleUserConfirmationPopUp(uint16_t ConfirmVP, const char* line1, const char* line2, const char* line3, const char* line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash); | ||||
|  | ||||
|   /// "M117" Message -- msg is a RAM ptr. | ||||
|   static void setstatusmessage(const char* msg); | ||||
|   /// The same for messages from Flash | ||||
|   static void setstatusmessagePGM(PGM_P const msg); | ||||
|   // Callback for VP "Display wants to change screen on idle printer" | ||||
|   static void ScreenChangeHookIfIdle(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   // Callback for VP "Screen has been changed" | ||||
|   static void ScreenChangeHook(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   // Callback for VP "All Heaters Off" | ||||
|   static void HandleAllHeatersOff(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   // Hook for "Change this temperature" | ||||
|   static void HandleTemperatureChanged(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   // Hook for "Change Flowrate" | ||||
|   static void HandleFlowRateChanged(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #if ENABLED(DGUS_UI_MOVE_DIS_OPTION) | ||||
|     // Hook for manual move option | ||||
|     static void HandleManualMoveOption(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #endif | ||||
|   // Hook for manual move. | ||||
|   static void HandleManualMove(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   // Hook for manual extrude. | ||||
|   static void HandleManualExtrude(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   // Hook for motor lock and unlook | ||||
|   static void HandleMotorLockUnlock(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #if ENABLED(POWER_LOSS_RECOVERY) | ||||
|     // Hook for power loss recovery. | ||||
|     static void HandlePowerLossRecovery(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #endif | ||||
|   // Hook for settings | ||||
|   static void HandleSettings(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   static void HandleStepPerMMChanged(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   static void HandleStepPerMMExtruderChanged(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #if HAS_PID_HEATING | ||||
|     // Hook for "Change this temperature PID para" | ||||
|     static void HandleTemperaturePIDChanged(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     // Hook for PID autotune | ||||
|     static void HandlePIDAutotune(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #endif | ||||
|   #if HAS_BED_PROBE | ||||
|     // Hook for "Change probe offset z" | ||||
|     static void HandleProbeOffsetZChanged(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #endif | ||||
|   #if ENABLED(BABYSTEPPING) | ||||
|     // Hook for live z adjust action | ||||
|     static void HandleLiveAdjustZ(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #endif | ||||
|   #if HAS_FAN | ||||
|     // Hook for fan control | ||||
|     static void HandleFanControl(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #endif | ||||
|   // Hook for heater control | ||||
|   static void HandleHeaterControl(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #if ENABLED(DGUS_PREHEAT_UI) | ||||
|     // Hook for preheat | ||||
|     static void HandlePreheat(DGUS_VP_Variable &var, void *val_ptr); | ||||
|   #endif | ||||
|   #if ENABLED(DGUS_FILAMENT_LOADUNLOAD) | ||||
|     // Hook for filament load and unload filament option | ||||
|     static void HandleFilamentOption(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     // Hook for filament load and unload | ||||
|     static void HandleFilamentLoadUnload(DGUS_VP_Variable &var); | ||||
|   #endif | ||||
|  | ||||
|   #if ENABLED(SDSUPPORT) | ||||
|     // Callback for VP "Display wants to change screen when there is a SD card" | ||||
|     static void ScreenChangeHookIfSD(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     /// Scroll buttons on the file listing screen. | ||||
|     static void DGUSLCD_SD_ScrollFilelist(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     /// File touched. | ||||
|     static void DGUSLCD_SD_FileSelected(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     /// start print after confirmation received. | ||||
|     static void DGUSLCD_SD_StartPrint(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     /// User hit the pause, resume or abort button. | ||||
|     static void DGUSLCD_SD_ResumePauseAbort(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     /// User confirmed the abort action | ||||
|     static void DGUSLCD_SD_ReallyAbort(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     /// User hit the tune button | ||||
|     static void DGUSLCD_SD_PrintTune(DGUS_VP_Variable &var, void *val_ptr); | ||||
|     /// Send a single filename to the display. | ||||
|     static void DGUSLCD_SD_SendFilename(DGUS_VP_Variable &var); | ||||
|     /// Marlin informed us that a new SD has been inserted. | ||||
|     static void SDCardInserted(); | ||||
|     /// Marlin informed us that the SD Card has been removed(). | ||||
|     static void SDCardRemoved(); | ||||
|     /// Marlin informed us about a bad SD Card. | ||||
|     static void SDCardError(); | ||||
|   #endif | ||||
|  | ||||
|   // OK Button the Confirm screen. | ||||
|   static void ScreenConfirmedOK(DGUS_VP_Variable &var, void *val_ptr); | ||||
|  | ||||
|   // Update data after went to new screen (by display or by GotoScreen) | ||||
|   // remember: store the last-displayed screen, so it can get returned to. | ||||
|   // (e.g for pop up messages) | ||||
|   static void UpdateNewScreen(DGUSLCD_Screens newscreen, bool popup=false); | ||||
|  | ||||
|   // Recall the remembered screen. | ||||
|   static void PopToOldScreen(); | ||||
|  | ||||
|   // Make the display show the screen and update all VPs in it. | ||||
|   static void GotoScreen(DGUSLCD_Screens screen, bool ispopup = false); | ||||
|  | ||||
|   static void UpdateScreenVPData(); | ||||
|  | ||||
|   // Helpers to convert and transfer data to the display. | ||||
|   static void DGUSLCD_SendWordValueToDisplay(DGUS_VP_Variable &var); | ||||
|   static void DGUSLCD_SendStringToDisplay(DGUS_VP_Variable &var); | ||||
|   static void DGUSLCD_SendStringToDisplayPGM(DGUS_VP_Variable &var); | ||||
|   static void DGUSLCD_SendTemperaturePID(DGUS_VP_Variable &var); | ||||
|   static void DGUSLCD_SendPercentageToDisplay(DGUS_VP_Variable &var); | ||||
|   static void DGUSLCD_SendPrintProgressToDisplay(DGUS_VP_Variable &var); | ||||
|   static void DGUSLCD_SendPrintTimeToDisplay(DGUS_VP_Variable &var); | ||||
|   #if ENABLED(PRINTCOUNTER) | ||||
|     static void DGUSLCD_SendPrintAccTimeToDisplay(DGUS_VP_Variable &var); | ||||
|     static void DGUSLCD_SendPrintsTotalToDisplay(DGUS_VP_Variable &var); | ||||
|   #endif | ||||
|   #if HAS_FAN | ||||
|     static void DGUSLCD_SendFanStatusToDisplay(DGUS_VP_Variable &var); | ||||
|   #endif | ||||
|   static void DGUSLCD_SendHeaterStatusToDisplay(DGUS_VP_Variable &var); | ||||
|   #if ENABLED(DGUS_UI_WAITING) | ||||
|     static void DGUSLCD_SendWaitingStatusToDisplay(DGUS_VP_Variable &var); | ||||
|   #endif | ||||
|  | ||||
|   /// Send a value from 0..100 to a variable with a range from 0..255 | ||||
|   static void DGUSLCD_PercentageToUint8(DGUS_VP_Variable &var, void *val_ptr); | ||||
|  | ||||
|   template<typename T> | ||||
|   static void DGUSLCD_SetValueDirectly(DGUS_VP_Variable &var, void *val_ptr) { | ||||
|     if (!var.memadr) return; | ||||
|     union { unsigned char tmp[sizeof(T)]; T t; } x; | ||||
|     unsigned char *ptr = (unsigned char*)val_ptr; | ||||
|     LOOP_L_N(i, sizeof(T)) x.tmp[i] = ptr[sizeof(T) - i - 1]; | ||||
|     *(T*)var.memadr = x.t; | ||||
|   } | ||||
|  | ||||
|   /// Send a float value to the display. | ||||
|   /// Display will get a 4-byte integer scaled to the number of digits: | ||||
|   /// Tell the display the number of digits and it cheats by displaying a dot between... | ||||
|   template<unsigned int decimals> | ||||
|   static void DGUSLCD_SendFloatAsLongValueToDisplay(DGUS_VP_Variable &var) { | ||||
|     if (var.memadr) { | ||||
|       float f = *(float *)var.memadr; | ||||
|       f *= cpow(10, decimals); | ||||
|       union { long l; char lb[4]; } endian; | ||||
|  | ||||
|       char tmp[4]; | ||||
|       endian.l = f; | ||||
|       tmp[0] = endian.lb[3]; | ||||
|       tmp[1] = endian.lb[2]; | ||||
|       tmp[2] = endian.lb[1]; | ||||
|       tmp[3] = endian.lb[0]; | ||||
|       dgusdisplay.WriteVariable(var.VP, tmp, 4); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   /// Send a float value to the display. | ||||
|   /// Display will get a 2-byte integer scaled to the number of digits: | ||||
|   /// Tell the display the number of digits and it cheats by displaying a dot between... | ||||
|   template<unsigned int decimals> | ||||
|   static void DGUSLCD_SendFloatAsIntValueToDisplay(DGUS_VP_Variable &var) { | ||||
|     if (var.memadr) { | ||||
|       float f = *(float *)var.memadr; | ||||
|       DEBUG_ECHOLNPAIR_F(" >> ", f, 6); | ||||
|       f *= cpow(10, decimals); | ||||
|       union { int16_t i; char lb[2]; } endian; | ||||
|  | ||||
|       char tmp[2]; | ||||
|       endian.i = f; | ||||
|       tmp[0] = endian.lb[1]; | ||||
|       tmp[1] = endian.lb[0]; | ||||
|       dgusdisplay.WriteVariable(var.VP, tmp, 2); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   /// Force an update of all VP on the current screen. | ||||
|   static inline void ForceCompleteUpdate() { update_ptr = 0; ScreenComplete = false; } | ||||
|   /// Has all VPs sent to the screen | ||||
|   static inline bool IsScreenComplete() { return ScreenComplete; } | ||||
|  | ||||
|   static inline DGUSLCD_Screens getCurrentScreen() { return current_screen; } | ||||
|  | ||||
|   static inline void SetupConfirmAction( void (*f)()) { confirm_action_cb = f; } | ||||
|  | ||||
| private: | ||||
|   static DGUSLCD_Screens current_screen;  ///< currently on screen | ||||
|   static constexpr uint8_t NUM_PAST_SCREENS = 4; | ||||
|   static DGUSLCD_Screens past_screens[NUM_PAST_SCREENS]; ///< LIFO with past screens for the "back" button. | ||||
|  | ||||
|   static uint8_t update_ptr;    ///< Last sent entry in the VPList for the actual screen. | ||||
|   static uint16_t skipVP;       ///< When updating the screen data, skip this one, because the user is interacting with it. | ||||
|   static bool ScreenComplete;   ///< All VPs sent to screen? | ||||
|  | ||||
|   static uint16_t ConfirmVP;    ///< context for confirm screen (VP that will be emulated-sent on "OK"). | ||||
|  | ||||
|   #if ENABLED(SDSUPPORT) | ||||
|     static int16_t top_file;    ///< file on top of file chooser | ||||
|     static int16_t file_to_print; ///< touched file to be confirmed | ||||
|   #endif | ||||
|  | ||||
|   static void (*confirm_action_cb)(); | ||||
| }; | ||||
|  | ||||
| extern DGUSScreenHandler ScreenHandler; | ||||
| @@ -21,6 +21,8 @@ | ||||
|  */ | ||||
| #pragma once | ||||
|  | ||||
| #include <stdint.h> | ||||
|  | ||||
| /** | ||||
|  * DGUSVPVariable.h | ||||
|  * | ||||
|   | ||||
| @@ -28,6 +28,7 @@ | ||||
|  | ||||
| #include "../DGUSDisplayDef.h" | ||||
| #include "../DGUSDisplay.h" | ||||
| #include "../DGUSScreenHandler.h" | ||||
|  | ||||
| #include "../../../../../module/temperature.h" | ||||
| #include "../../../../../module/motion.h" | ||||
| @@ -325,159 +326,159 @@ const char MarlinVersion[] PROGMEM = SHORT_BUILD_VERSION; | ||||
|  | ||||
| const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { | ||||
|   // Helper to detect touch events | ||||
|   VPHELPER(VP_SCREENCHANGE, nullptr, DGUSScreenVariableHandler::ScreenChangeHook, nullptr), | ||||
|   VPHELPER(VP_SCREENCHANGE_ASK, nullptr, DGUSScreenVariableHandler::ScreenChangeHookIfIdle, nullptr), | ||||
|   VPHELPER(VP_SCREENCHANGE, nullptr, ScreenHandler.ScreenChangeHook, nullptr), | ||||
|   VPHELPER(VP_SCREENCHANGE_ASK, nullptr, ScreenHandler.ScreenChangeHookIfIdle, nullptr), | ||||
|   #if ENABLED(SDSUPPORT) | ||||
|     VPHELPER(VP_SCREENCHANGE_WHENSD, nullptr, DGUSScreenVariableHandler::ScreenChangeHookIfSD, nullptr), | ||||
|     VPHELPER(VP_SCREENCHANGE_WHENSD, nullptr, ScreenHandler.ScreenChangeHookIfSD, nullptr), | ||||
|   #endif | ||||
|   VPHELPER(VP_CONFIRMED, nullptr, DGUSScreenVariableHandler::ScreenConfirmedOK, nullptr), | ||||
|   VPHELPER(VP_CONFIRMED, nullptr, ScreenHandler.ScreenConfirmedOK, nullptr), | ||||
|  | ||||
|   VPHELPER(VP_TEMP_ALL_OFF, nullptr, &DGUSScreenVariableHandler::HandleAllHeatersOff, nullptr), | ||||
|   VPHELPER(VP_TEMP_ALL_OFF, nullptr, &ScreenHandler.HandleAllHeatersOff, nullptr), | ||||
|   #if ENABLED(DGUS_UI_MOVE_DIS_OPTION) | ||||
|     VPHELPER(VP_MOVE_OPTION, &distanceToMove, &DGUSScreenVariableHandler::HandleManualMoveOption, nullptr), | ||||
|     VPHELPER(VP_MOVE_OPTION, &distanceToMove, &ScreenHandler.HandleManualMoveOption, nullptr), | ||||
|   #endif | ||||
|   #if ENABLED(DGUS_UI_MOVE_DIS_OPTION) | ||||
|     VPHELPER(VP_MOVE_X, &distanceToMove, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Y, &distanceToMove, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Z, &distanceToMove, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_HOME_ALL, &distanceToMove, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_X, &distanceToMove, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Y, &distanceToMove, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Z, &distanceToMove, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_HOME_ALL, &distanceToMove, &ScreenHandler.HandleManualMove, nullptr), | ||||
|   #else | ||||
|     VPHELPER(VP_MOVE_X, nullptr, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Y, nullptr, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Z, nullptr, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_HOME_ALL, nullptr, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_X, nullptr, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Y, nullptr, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Z, nullptr, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_HOME_ALL, nullptr, &ScreenHandler.HandleManualMove, nullptr), | ||||
|   #endif | ||||
|   VPHELPER(VP_MOTOR_LOCK_UNLOK, nullptr, &DGUSScreenVariableHandler::HandleMotorLockUnlock, nullptr), | ||||
|   VPHELPER(VP_MOTOR_LOCK_UNLOK, nullptr, &ScreenHandler.HandleMotorLockUnlock, nullptr), | ||||
|   #if ENABLED(POWER_LOSS_RECOVERY) | ||||
|     VPHELPER(VP_POWER_LOSS_RECOVERY, nullptr, &DGUSScreenVariableHandler::HandlePowerLossRecovery, nullptr), | ||||
|     VPHELPER(VP_POWER_LOSS_RECOVERY, nullptr, &ScreenHandler.HandlePowerLossRecovery, nullptr), | ||||
|   #endif | ||||
|   VPHELPER(VP_SETTINGS, nullptr, &DGUSScreenVariableHandler::HandleSettings, nullptr), | ||||
|   VPHELPER(VP_SETTINGS, nullptr, &ScreenHandler.HandleSettings, nullptr), | ||||
|   #if ENABLED(SINGLE_Z_CALIBRATION) | ||||
|     VPHELPER(VP_Z_CALIBRATE, nullptr, &DGUSScreenVariableHandler::HandleZCalibration, nullptr), | ||||
|     VPHELPER(VP_Z_CALIBRATE, nullptr, &ScreenHandler.HandleZCalibration, nullptr), | ||||
|   #endif | ||||
|  | ||||
|   #if ENABLED(FIRST_LAYER_CAL) | ||||
|     VPHELPER(VP_Z_FIRST_LAYER_CAL, nullptr, &DGUSScreenVariableHandler::HandleFirstLayerCal, nullptr), | ||||
|     VPHELPER(VP_Z_FIRST_LAYER_CAL, nullptr, &ScreenHandler.HandleFirstLayerCal, nullptr), | ||||
|   #endif | ||||
|  | ||||
|   { .VP = VP_MARLIN_VERSION, .memadr = (void*)MarlinVersion, .size = VP_MARLIN_VERSION_LEN, .set_by_display_handler = nullptr, .send_to_display_handler =&DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MARLIN_VERSION, .memadr = (void*)MarlinVersion, .size = VP_MARLIN_VERSION_LEN, .set_by_display_handler = nullptr, .send_to_display_handler =&ScreenHandler.DGUSLCD_SendStringToDisplayPGM }, | ||||
|   // M117 LCD String (We don't need the string in memory but "just" push it to the display on demand, hence the nullptr | ||||
|   { .VP = VP_M117, .memadr = nullptr, .size = VP_M117_LEN, .set_by_display_handler = nullptr, .send_to_display_handler =&DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplay }, | ||||
|   { .VP = VP_M117, .memadr = nullptr, .size = VP_M117_LEN, .set_by_display_handler = nullptr, .send_to_display_handler =&ScreenHandler.DGUSLCD_SendStringToDisplay }, | ||||
|  | ||||
|   // Temperature Data | ||||
|   #if HOTENDS >= 1 | ||||
|     VPHELPER(VP_T_E0_Is, &thermalManager.temp_hotend[0].celsius, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_E0_Set, &thermalManager.temp_hotend[0].target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_Flowrate_E0, &planner.flow_percentage[ExtUI::extruder_t::E0], DGUSScreenVariableHandler::HandleFlowRateChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_EPos, &destination.e, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|     VPHELPER(VP_MOVE_E0, nullptr, &DGUSScreenVariableHandler::HandleManualExtrude, nullptr), | ||||
|     VPHELPER(VP_E0_CONTROL, &thermalManager.temp_hotend[0].target, &DGUSScreenVariableHandler::HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_E0_STATUS, &thermalManager.temp_hotend[0].target, nullptr, &DGUSScreenVariableHandler::DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     VPHELPER(VP_T_E0_Is, &thermalManager.temp_hotend[0].celsius, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_E0_Set, &thermalManager.temp_hotend[0].target, ScreenHandler.HandleTemperatureChanged, &ScreenHandler.DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_Flowrate_E0, &planner.flow_percentage[ExtUI::extruder_t::E0], ScreenHandler.HandleFlowRateChanged, &ScreenHandler.DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_EPos, &destination.e, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|     VPHELPER(VP_MOVE_E0, nullptr, &ScreenHandler.HandleManualExtrude, nullptr), | ||||
|     VPHELPER(VP_E0_CONTROL, &thermalManager.temp_hotend[0].target, &ScreenHandler.HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_E0_STATUS, &thermalManager.temp_hotend[0].target, nullptr, &ScreenHandler.DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     #if ENABLED(DGUS_PREHEAT_UI) | ||||
|       VPHELPER(VP_E0_BED_PREHEAT, nullptr, &DGUSScreenVariableHandler::HandlePreheat, nullptr), | ||||
|       VPHELPER(VP_E0_BED_PREHEAT, nullptr, &ScreenHandler.HandlePreheat, nullptr), | ||||
|     #endif | ||||
|     #if ENABLED(PIDTEMP) | ||||
|       VPHELPER(VP_E0_PID_P, &thermalManager.temp_hotend[0].pid.Kp, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_E0_PID_I, &thermalManager.temp_hotend[0].pid.Ki, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_E0_PID_D, &thermalManager.temp_hotend[0].pid.Kd, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_PID_AUTOTUNE_E0, nullptr, &DGUSScreenVariableHandler::HandlePIDAutotune, nullptr), | ||||
|       VPHELPER(VP_E0_PID_P, &thermalManager.temp_hotend[0].pid.Kp, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_E0_PID_I, &thermalManager.temp_hotend[0].pid.Ki, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_E0_PID_D, &thermalManager.temp_hotend[0].pid.Kd, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_PID_AUTOTUNE_E0, nullptr, &ScreenHandler.HandlePIDAutotune, nullptr), | ||||
|     #endif | ||||
|     #if ENABLED(DGUS_FILAMENT_LOADUNLOAD) | ||||
|       VPHELPER(VP_E0_FILAMENT_LOAD_UNLOAD, nullptr, &DGUSScreenVariableHandler::HandleFilamentOption, &DGUSScreenVariableHandler::HandleFilamentLoadUnload), | ||||
|       VPHELPER(VP_E0_FILAMENT_LOAD_UNLOAD, nullptr, &ScreenHandler.HandleFilamentOption, &ScreenHandler.HandleFilamentLoadUnload), | ||||
|     #endif | ||||
|   #endif | ||||
|   #if HOTENDS >= 2 | ||||
|     VPHELPER(VP_T_E1_Is, &thermalManager.temp_hotend[1].celsius, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_E1_Set, &thermalManager.temp_hotend[1].target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_Flowrate_E1, &planner.flow_percentage[ExtUI::extruder_t::E1], DGUSScreenVariableHandler::HandleFlowRateChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_MOVE_E1, nullptr, &DGUSScreenVariableHandler::HandleManualExtrude, nullptr), | ||||
|     VPHELPER(VP_E1_CONTROL, &thermalManager.temp_hotend[1].target, &DGUSScreenVariableHandler::HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_E1_STATUS, &thermalManager.temp_hotend[1].target, nullptr, &DGUSScreenVariableHandler::DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     VPHELPER(VP_T_E1_Is, &thermalManager.temp_hotend[1].celsius, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_E1_Set, &thermalManager.temp_hotend[1].target, ScreenHandler.HandleTemperatureChanged, &ScreenHandler.DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_Flowrate_E1, &planner.flow_percentage[ExtUI::extruder_t::E1], ScreenHandler.HandleFlowRateChanged, &ScreenHandler.DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_MOVE_E1, nullptr, &ScreenHandler.HandleManualExtrude, nullptr), | ||||
|     VPHELPER(VP_E1_CONTROL, &thermalManager.temp_hotend[1].target, &ScreenHandler.HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_E1_STATUS, &thermalManager.temp_hotend[1].target, nullptr, &ScreenHandler.DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     #if ENABLED(PIDTEMP) | ||||
|       VPHELPER(VP_PID_AUTOTUNE_E1, nullptr, &DGUSScreenVariableHandler::HandlePIDAutotune, nullptr), | ||||
|       VPHELPER(VP_PID_AUTOTUNE_E1, nullptr, &ScreenHandler.HandlePIDAutotune, nullptr), | ||||
|     #endif | ||||
|     VPHELPER(VP_E1_FILAMENT_LOAD_UNLOAD, nullptr, &DGUSScreenVariableHandler::HandleFilamentOption, &DGUSScreenVariableHandler::HandleFilamentLoadUnload), | ||||
|     VPHELPER(VP_E1_FILAMENT_LOAD_UNLOAD, nullptr, &ScreenHandler.HandleFilamentOption, &ScreenHandler.HandleFilamentLoadUnload), | ||||
|   #endif | ||||
|   #if HAS_HEATED_BED | ||||
|     VPHELPER(VP_T_Bed_Is, &thermalManager.temp_bed.celsius, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_Bed_Set, &thermalManager.temp_bed.target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_BED_CONTROL, &thermalManager.temp_bed.target, &DGUSScreenVariableHandler::HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_BED_STATUS, &thermalManager.temp_bed.target, nullptr, &DGUSScreenVariableHandler::DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     VPHELPER(VP_T_Bed_Is, &thermalManager.temp_bed.celsius, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_Bed_Set, &thermalManager.temp_bed.target, ScreenHandler.HandleTemperatureChanged, &ScreenHandler.DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_BED_CONTROL, &thermalManager.temp_bed.target, &ScreenHandler.HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_BED_STATUS, &thermalManager.temp_bed.target, nullptr, &ScreenHandler.DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     #if ENABLED(PIDTEMPBED) | ||||
|       VPHELPER(VP_BED_PID_P, &thermalManager.temp_bed.pid.Kp, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_BED_PID_I, &thermalManager.temp_bed.pid.Ki, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_BED_PID_D, &thermalManager.temp_bed.pid.Kd, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_PID_AUTOTUNE_BED, nullptr, &DGUSScreenVariableHandler::HandlePIDAutotune, nullptr), | ||||
|       VPHELPER(VP_BED_PID_P, &thermalManager.temp_bed.pid.Kp, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_BED_PID_I, &thermalManager.temp_bed.pid.Ki, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_BED_PID_D, &thermalManager.temp_bed.pid.Kd, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_PID_AUTOTUNE_BED, nullptr, &ScreenHandler.HandlePIDAutotune, nullptr), | ||||
|     #endif | ||||
|   #endif | ||||
|  | ||||
|   // Fan Data | ||||
|   #if HAS_FAN | ||||
|     #define FAN_VPHELPER(N) \ | ||||
|       VPHELPER(VP_Fan##N##_Percentage, &thermalManager.fan_speed[N], DGUSScreenVariableHandler::DGUSLCD_PercentageToUint8, &DGUSScreenVariableHandler::DGUSLCD_SendPercentageToDisplay), \ | ||||
|       VPHELPER(VP_FAN##N##_CONTROL, &thermalManager.fan_speed[N], &DGUSScreenVariableHandler::HandleFanControl, nullptr), \ | ||||
|       VPHELPER(VP_FAN##N##_STATUS, &thermalManager.fan_speed[N], nullptr, &DGUSScreenVariableHandler::DGUSLCD_SendFanStatusToDisplay), | ||||
|       VPHELPER(VP_Fan##N##_Percentage, &thermalManager.fan_speed[N], ScreenHandler.DGUSLCD_PercentageToUint8, &ScreenHandler.DGUSLCD_SendPercentageToDisplay), \ | ||||
|       VPHELPER(VP_FAN##N##_CONTROL, &thermalManager.fan_speed[N], &ScreenHandler.HandleFanControl, nullptr), \ | ||||
|       VPHELPER(VP_FAN##N##_STATUS, &thermalManager.fan_speed[N], nullptr, &ScreenHandler.DGUSLCD_SendFanStatusToDisplay), | ||||
|     REPEAT(FAN_COUNT, FAN_VPHELPER) | ||||
|   #endif | ||||
|  | ||||
|   // Feedrate | ||||
|   VPHELPER(VP_Feedrate_Percentage, &feedrate_percentage, DGUSScreenVariableHandler::DGUSLCD_SetValueDirectly<int16_t>, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay ), | ||||
|   VPHELPER(VP_Feedrate_Percentage, &feedrate_percentage, ScreenHandler.DGUSLCD_SetValueDirectly<int16_t>, &ScreenHandler.DGUSLCD_SendWordValueToDisplay ), | ||||
|  | ||||
|   // Position Data | ||||
|   VPHELPER(VP_XPos, ¤t_position.x, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|   VPHELPER(VP_YPos, ¤t_position.y, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|   VPHELPER(VP_ZPos, ¤t_position.z, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|   VPHELPER(VP_XPos, ¤t_position.x, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|   VPHELPER(VP_YPos, ¤t_position.y, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|   VPHELPER(VP_ZPos, ¤t_position.z, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|  | ||||
|   // Print Progress | ||||
|   VPHELPER(VP_PrintProgress_Percentage, nullptr, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintProgressToDisplay ), | ||||
|   VPHELPER(VP_PrintProgress_Percentage, nullptr, nullptr, ScreenHandler.DGUSLCD_SendPrintProgressToDisplay ), | ||||
|  | ||||
|   // Print Time | ||||
|   VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay), | ||||
|   VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, ScreenHandler.DGUSLCD_SendPrintTimeToDisplay), | ||||
|   #if ENABLED(PRINTCOUNTER) | ||||
|     VPHELPER_STR(VP_PrintAccTime, nullptr, VP_PrintAccTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintAccTimeToDisplay), | ||||
|     VPHELPER_STR(VP_PrintsTotal, nullptr, VP_PrintsTotal_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintsTotalToDisplay), | ||||
|     VPHELPER_STR(VP_PrintAccTime, nullptr, VP_PrintAccTime_LEN, nullptr, ScreenHandler.DGUSLCD_SendPrintAccTimeToDisplay), | ||||
|     VPHELPER_STR(VP_PrintsTotal, nullptr, VP_PrintsTotal_LEN, nullptr, ScreenHandler.DGUSLCD_SendPrintsTotalToDisplay), | ||||
|   #endif | ||||
|  | ||||
|   VPHELPER(VP_X_STEP_PER_MM, &planner.settings.axis_steps_per_mm[X_AXIS], DGUSScreenVariableHandler::HandleStepPerMMChanged, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   VPHELPER(VP_Y_STEP_PER_MM, &planner.settings.axis_steps_per_mm[Y_AXIS], DGUSScreenVariableHandler::HandleStepPerMMChanged, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   VPHELPER(VP_Z_STEP_PER_MM, &planner.settings.axis_steps_per_mm[Z_AXIS], DGUSScreenVariableHandler::HandleStepPerMMChanged, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   VPHELPER(VP_X_STEP_PER_MM, &planner.settings.axis_steps_per_mm[X_AXIS], ScreenHandler.HandleStepPerMMChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   VPHELPER(VP_Y_STEP_PER_MM, &planner.settings.axis_steps_per_mm[Y_AXIS], ScreenHandler.HandleStepPerMMChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   VPHELPER(VP_Z_STEP_PER_MM, &planner.settings.axis_steps_per_mm[Z_AXIS], ScreenHandler.HandleStepPerMMChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   #if HOTENDS >= 1 | ||||
|     VPHELPER(VP_E0_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(0)], DGUSScreenVariableHandler::HandleStepPerMMExtruderChanged, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|     VPHELPER(VP_E0_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(0)], ScreenHandler.HandleStepPerMMExtruderChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   #endif | ||||
|   #if HOTENDS >= 2 | ||||
|     VPHELPER(VP_E1_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(1)], DGUSScreenVariableHandler::HandleStepPerMMExtruderChanged, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|     VPHELPER(VP_E1_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(1)], ScreenHandler.HandleStepPerMMExtruderChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   #endif | ||||
|  | ||||
|   // SDCard File listing. | ||||
|   #if ENABLED(SDSUPPORT) | ||||
|     VPHELPER(VP_SD_ScrollEvent, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_ScrollFilelist, nullptr), | ||||
|     VPHELPER(VP_SD_FileSelected, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_FileSelected, nullptr), | ||||
|     VPHELPER(VP_SD_FileSelectConfirm, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_StartPrint, nullptr), | ||||
|     VPHELPER_STR(VP_SD_FileName0, nullptr, VP_SD_FileName_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_SendFilename), | ||||
|     VPHELPER_STR(VP_SD_FileName1, nullptr, VP_SD_FileName_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_SendFilename), | ||||
|     VPHELPER_STR(VP_SD_FileName2, nullptr, VP_SD_FileName_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_SendFilename), | ||||
|     VPHELPER_STR(VP_SD_FileName3, nullptr, VP_SD_FileName_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_SendFilename), | ||||
|     VPHELPER_STR(VP_SD_FileName4, nullptr, VP_SD_FileName_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_SendFilename), | ||||
|     VPHELPER(VP_SD_ResumePauseAbort, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_ResumePauseAbort, nullptr), | ||||
|     VPHELPER(VP_SD_AbortPrintConfirmed, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_ReallyAbort, nullptr), | ||||
|     VPHELPER(VP_SD_Print_Setting, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_PrintTune, nullptr), | ||||
|     VPHELPER(VP_SD_ScrollEvent, nullptr, ScreenHandler.DGUSLCD_SD_ScrollFilelist, nullptr), | ||||
|     VPHELPER(VP_SD_FileSelected, nullptr, ScreenHandler.DGUSLCD_SD_FileSelected, nullptr), | ||||
|     VPHELPER(VP_SD_FileSelectConfirm, nullptr, ScreenHandler.DGUSLCD_SD_StartPrint, nullptr), | ||||
|     VPHELPER_STR(VP_SD_FileName0, nullptr, VP_SD_FileName_LEN, nullptr, ScreenHandler.DGUSLCD_SD_SendFilename), | ||||
|     VPHELPER_STR(VP_SD_FileName1, nullptr, VP_SD_FileName_LEN, nullptr, ScreenHandler.DGUSLCD_SD_SendFilename), | ||||
|     VPHELPER_STR(VP_SD_FileName2, nullptr, VP_SD_FileName_LEN, nullptr, ScreenHandler.DGUSLCD_SD_SendFilename), | ||||
|     VPHELPER_STR(VP_SD_FileName3, nullptr, VP_SD_FileName_LEN, nullptr, ScreenHandler.DGUSLCD_SD_SendFilename), | ||||
|     VPHELPER_STR(VP_SD_FileName4, nullptr, VP_SD_FileName_LEN, nullptr, ScreenHandler.DGUSLCD_SD_SendFilename), | ||||
|     VPHELPER(VP_SD_ResumePauseAbort, nullptr, ScreenHandler.DGUSLCD_SD_ResumePauseAbort, nullptr), | ||||
|     VPHELPER(VP_SD_AbortPrintConfirmed, nullptr, ScreenHandler.DGUSLCD_SD_ReallyAbort, nullptr), | ||||
|     VPHELPER(VP_SD_Print_Setting, nullptr, ScreenHandler.DGUSLCD_SD_PrintTune, nullptr), | ||||
|     #if HAS_BED_PROBE | ||||
|       VPHELPER(VP_SD_Print_ProbeOffsetZ, &probe.offset.z, DGUSScreenVariableHandler::HandleProbeOffsetZChanged, &DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<2>), | ||||
|       VPHELPER(VP_SD_Print_ProbeOffsetZ, &probe.offset.z, ScreenHandler.HandleProbeOffsetZChanged, &ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<2>), | ||||
|       #if ENABLED(BABYSTEPPING) | ||||
|         VPHELPER(VP_SD_Print_LiveAdjustZ, nullptr, DGUSScreenVariableHandler::HandleLiveAdjustZ, nullptr), | ||||
|         VPHELPER(VP_SD_Print_LiveAdjustZ, nullptr, ScreenHandler.HandleLiveAdjustZ, nullptr), | ||||
|       #endif | ||||
|     #endif | ||||
|   #endif | ||||
|  | ||||
|   #if ENABLED(DGUS_UI_WAITING) | ||||
|     VPHELPER(VP_WAITING_STATUS, nullptr, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendWaitingStatusToDisplay), | ||||
|     VPHELPER(VP_WAITING_STATUS, nullptr, nullptr, ScreenHandler.DGUSLCD_SendWaitingStatusToDisplay), | ||||
|   #endif | ||||
|  | ||||
|   // Messages for the User, shared by the popup and the kill screen. They cant be autouploaded as we do not buffer content. | ||||
|   { .VP = VP_MSGSTR1, .memadr = nullptr, .size = VP_MSGSTR1_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR2, .memadr = nullptr, .size = VP_MSGSTR2_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR3, .memadr = nullptr, .size = VP_MSGSTR3_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR4, .memadr = nullptr, .size = VP_MSGSTR4_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR1, .memadr = nullptr, .size = VP_MSGSTR1_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &ScreenHandler.DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR2, .memadr = nullptr, .size = VP_MSGSTR2_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &ScreenHandler.DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR3, .memadr = nullptr, .size = VP_MSGSTR3_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &ScreenHandler.DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR4, .memadr = nullptr, .size = VP_MSGSTR4_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &ScreenHandler.DGUSLCD_SendStringToDisplayPGM }, | ||||
|  | ||||
|   VPHELPER(0, 0, 0, 0)  // must be last entry. | ||||
| }; | ||||
|   | ||||
| @@ -28,6 +28,7 @@ | ||||
|  | ||||
| #include "../DGUSDisplayDef.h" | ||||
| #include "../DGUSDisplay.h" | ||||
| #include "../DGUSScreenHandler.h" | ||||
|  | ||||
| #include "../../../../../module/temperature.h" | ||||
| #include "../../../../../module/motion.h" | ||||
| @@ -328,155 +329,155 @@ const char MarlinVersion[] PROGMEM = SHORT_BUILD_VERSION; | ||||
|  | ||||
| const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { | ||||
|   // Helper to detect touch events | ||||
|   VPHELPER(VP_SCREENCHANGE, nullptr, DGUSScreenVariableHandler::ScreenChangeHook, nullptr), | ||||
|   VPHELPER(VP_SCREENCHANGE_ASK, nullptr, DGUSScreenVariableHandler::ScreenChangeHookIfIdle, nullptr), | ||||
|   VPHELPER(VP_SCREENCHANGE, nullptr, ScreenHandler.ScreenChangeHook, nullptr), | ||||
|   VPHELPER(VP_SCREENCHANGE_ASK, nullptr, ScreenHandler.ScreenChangeHookIfIdle, nullptr), | ||||
|   #if ENABLED(SDSUPPORT) | ||||
|     VPHELPER(VP_SCREENCHANGE_WHENSD, nullptr, DGUSScreenVariableHandler::ScreenChangeHookIfSD, nullptr), | ||||
|     VPHELPER(VP_SCREENCHANGE_WHENSD, nullptr, ScreenHandler.ScreenChangeHookIfSD, nullptr), | ||||
|   #endif | ||||
|   VPHELPER(VP_CONFIRMED, nullptr, DGUSScreenVariableHandler::ScreenConfirmedOK, nullptr), | ||||
|   VPHELPER(VP_CONFIRMED, nullptr, ScreenHandler.ScreenConfirmedOK, nullptr), | ||||
|  | ||||
|   VPHELPER(VP_TEMP_ALL_OFF, nullptr, &DGUSScreenVariableHandler::HandleAllHeatersOff, nullptr), | ||||
|   VPHELPER(VP_TEMP_ALL_OFF, nullptr, &ScreenHandler.HandleAllHeatersOff, nullptr), | ||||
|  | ||||
|   #if ENABLED(DGUS_UI_MOVE_DIS_OPTION) | ||||
|     VPHELPER(VP_MOVE_OPTION, &distanceToMove, &DGUSScreenVariableHandler::HandleManualMoveOption, nullptr), | ||||
|     VPHELPER(VP_MOVE_OPTION, &distanceToMove, &ScreenHandler.HandleManualMoveOption, nullptr), | ||||
|   #endif | ||||
|   #if ENABLED(DGUS_UI_MOVE_DIS_OPTION) | ||||
|     VPHELPER(VP_MOVE_X, &distanceToMove, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Y, &distanceToMove, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Z, &distanceToMove, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_HOME_ALL, &distanceToMove, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_X, &distanceToMove, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Y, &distanceToMove, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Z, &distanceToMove, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_HOME_ALL, &distanceToMove, &ScreenHandler.HandleManualMove, nullptr), | ||||
|   #else | ||||
|     VPHELPER(VP_MOVE_X, nullptr, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Y, nullptr, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Z, nullptr, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_HOME_ALL, nullptr, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_X, nullptr, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Y, nullptr, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Z, nullptr, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_HOME_ALL, nullptr, &ScreenHandler.HandleManualMove, nullptr), | ||||
|   #endif | ||||
|   VPHELPER(VP_MOTOR_LOCK_UNLOK, nullptr, &DGUSScreenVariableHandler::HandleMotorLockUnlock, nullptr), | ||||
|   VPHELPER(VP_MOTOR_LOCK_UNLOK, nullptr, &ScreenHandler.HandleMotorLockUnlock, nullptr), | ||||
|   #if ENABLED(POWER_LOSS_RECOVERY) | ||||
|     VPHELPER(VP_POWER_LOSS_RECOVERY, nullptr, &DGUSScreenVariableHandler::HandlePowerLossRecovery, nullptr), | ||||
|     VPHELPER(VP_POWER_LOSS_RECOVERY, nullptr, &ScreenHandler.HandlePowerLossRecovery, nullptr), | ||||
|   #endif | ||||
|   VPHELPER(VP_SETTINGS, nullptr, &DGUSScreenVariableHandler::HandleSettings, nullptr), | ||||
|   VPHELPER(VP_SETTINGS, nullptr, &ScreenHandler.HandleSettings, nullptr), | ||||
|   #if ENABLED(SINGLE_Z_CALIBRATION) | ||||
|     VPHELPER(VP_Z_CALIBRATE, nullptr, &DGUSScreenVariableHandler::HandleZCalibration, nullptr), | ||||
|     VPHELPER(VP_Z_CALIBRATE, nullptr, &ScreenHandler.HandleZCalibration, nullptr), | ||||
|   #endif | ||||
|   #if ENABLED(FIRST_LAYER_CAL) | ||||
|     VPHELPER(VP_Z_FIRST_LAYER_CAL, nullptr, &DGUSScreenVariableHandler::HandleFirstLayerCal, nullptr), | ||||
|     VPHELPER(VP_Z_FIRST_LAYER_CAL, nullptr, &ScreenHandler.HandleFirstLayerCal, nullptr), | ||||
|   #endif | ||||
|  | ||||
|   { .VP = VP_MARLIN_VERSION, .memadr = (void*)MarlinVersion, .size = VP_MARLIN_VERSION_LEN, .set_by_display_handler = nullptr, .send_to_display_handler =&DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MARLIN_VERSION, .memadr = (void*)MarlinVersion, .size = VP_MARLIN_VERSION_LEN, .set_by_display_handler = nullptr, .send_to_display_handler =&ScreenHandler.DGUSLCD_SendStringToDisplayPGM }, | ||||
|   // M117 LCD String (We don't need the string in memory but "just" push it to the display on demand, hence the nullptr | ||||
|   { .VP = VP_M117, .memadr = nullptr, .size = VP_M117_LEN, .set_by_display_handler = nullptr, .send_to_display_handler =&DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplay }, | ||||
|   { .VP = VP_M117, .memadr = nullptr, .size = VP_M117_LEN, .set_by_display_handler = nullptr, .send_to_display_handler =&ScreenHandler.DGUSLCD_SendStringToDisplay }, | ||||
|  | ||||
|   // Temperature Data | ||||
|   #if HOTENDS >= 1 | ||||
|     VPHELPER(VP_T_E0_Is, &thermalManager.temp_hotend[0].celsius, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_E0_Set, &thermalManager.temp_hotend[0].target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_Flowrate_E0, &planner.flow_percentage[ExtUI::extruder_t::E0], DGUSScreenVariableHandler::HandleFlowRateChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_EPos, &destination.e, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|     VPHELPER(VP_MOVE_E0, nullptr, &DGUSScreenVariableHandler::HandleManualExtrude, nullptr), | ||||
|     VPHELPER(VP_E0_CONTROL, &thermalManager.temp_hotend[0].target, &DGUSScreenVariableHandler::HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_E0_STATUS, &thermalManager.temp_hotend[0].target, nullptr, &DGUSScreenVariableHandler::DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     VPHELPER(VP_T_E0_Is, &thermalManager.temp_hotend[0].celsius, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_E0_Set, &thermalManager.temp_hotend[0].target, ScreenHandler.HandleTemperatureChanged, &ScreenHandler.DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_Flowrate_E0, &planner.flow_percentage[ExtUI::extruder_t::E0], ScreenHandler.HandleFlowRateChanged, &ScreenHandler.DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_EPos, &destination.e, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|     VPHELPER(VP_MOVE_E0, nullptr, &ScreenHandler.HandleManualExtrude, nullptr), | ||||
|     VPHELPER(VP_E0_CONTROL, &thermalManager.temp_hotend[0].target, &ScreenHandler.HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_E0_STATUS, &thermalManager.temp_hotend[0].target, nullptr, &ScreenHandler.DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     #if ENABLED(DGUS_PREHEAT_UI) | ||||
|       VPHELPER(VP_E0_BED_PREHEAT, nullptr, &DGUSScreenVariableHandler::HandlePreheat, nullptr), | ||||
|       VPHELPER(VP_E0_BED_PREHEAT, nullptr, &ScreenHandler.HandlePreheat, nullptr), | ||||
|     #endif | ||||
|     #if ENABLED(DGUS_FILAMENT_LOADUNLOAD) | ||||
|       VPHELPER(VP_E0_FILAMENT_LOAD_UNLOAD, nullptr, &DGUSScreenVariableHandler::HandleFilamentOption, &DGUSScreenVariableHandler::HandleFilamentLoadUnload), | ||||
|       VPHELPER(VP_E0_FILAMENT_LOAD_UNLOAD, nullptr, &ScreenHandler.HandleFilamentOption, &ScreenHandler.HandleFilamentLoadUnload), | ||||
|     #endif | ||||
|     #if ENABLED(PIDTEMP) | ||||
|       VPHELPER(VP_E0_PID_P, &thermalManager.temp_hotend[0].pid.Kp, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_E0_PID_I, &thermalManager.temp_hotend[0].pid.Ki, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_E0_PID_D, &thermalManager.temp_hotend[0].pid.Kd, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_PID_AUTOTUNE_E0, nullptr, &DGUSScreenVariableHandler::HandlePIDAutotune, nullptr), | ||||
|       VPHELPER(VP_E0_PID_P, &thermalManager.temp_hotend[0].pid.Kp, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_E0_PID_I, &thermalManager.temp_hotend[0].pid.Ki, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_E0_PID_D, &thermalManager.temp_hotend[0].pid.Kd, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_PID_AUTOTUNE_E0, nullptr, &ScreenHandler.HandlePIDAutotune, nullptr), | ||||
|     #endif | ||||
|   #endif | ||||
|   #if HOTENDS >= 2 | ||||
|     VPHELPER(VP_T_E1_Is, &thermalManager.temp_hotend[1].celsius, nullptr, DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_E1_Set, &thermalManager.temp_hotend[1].target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_Flowrate_E1, nullptr, DGUSScreenVariableHandler::HandleFlowRateChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_MOVE_E1, nullptr, &DGUSScreenVariableHandler::HandleManualExtrude, nullptr), | ||||
|     VPHELPER(VP_E1_CONTROL, &thermalManager.temp_hotend[1].target, &DGUSScreenVariableHandler::HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_E1_STATUS, &thermalManager.temp_hotend[1].target, nullptr, &DGUSScreenVariableHandler::DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     VPHELPER(VP_T_E1_Set, &thermalManager.temp_hotend[1].target, ScreenHandler.HandleTemperatureChanged, &ScreenHandler.DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_Flowrate_E1, nullptr, ScreenHandler.HandleFlowRateChanged, &ScreenHandler.DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_MOVE_E1, nullptr, &ScreenHandler.HandleManualExtrude, nullptr), | ||||
|     VPHELPER(VP_E1_CONTROL, &thermalManager.temp_hotend[1].target, &ScreenHandler.HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_E1_STATUS, &thermalManager.temp_hotend[1].target, nullptr, &ScreenHandler.DGUSLCD_SendHeaterStatusToDisplay), | ||||
|   #endif | ||||
|   #if HAS_HEATED_BED | ||||
|     VPHELPER(VP_T_Bed_Is, &thermalManager.temp_bed.celsius, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_Bed_Set, &thermalManager.temp_bed.target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_BED_CONTROL, &thermalManager.temp_bed.target, &DGUSScreenVariableHandler::HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_BED_STATUS, &thermalManager.temp_bed.target, nullptr, &DGUSScreenVariableHandler::DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     VPHELPER(VP_T_Bed_Is, &thermalManager.temp_bed.celsius, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_Bed_Set, &thermalManager.temp_bed.target, ScreenHandler.HandleTemperatureChanged, &ScreenHandler.DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_BED_CONTROL, &thermalManager.temp_bed.target, &ScreenHandler.HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_BED_STATUS, &thermalManager.temp_bed.target, nullptr, &ScreenHandler.DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     #if ENABLED(PIDTEMP) | ||||
|       VPHELPER(VP_BED_PID_P, &thermalManager.temp_bed.pid.Kp, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_BED_PID_I, &thermalManager.temp_bed.pid.Ki, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_BED_PID_D, &thermalManager.temp_bed.pid.Kd, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_PID_AUTOTUNE_BED, nullptr, &DGUSScreenVariableHandler::HandlePIDAutotune, nullptr), | ||||
|       VPHELPER(VP_BED_PID_P, &thermalManager.temp_bed.pid.Kp, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_BED_PID_I, &thermalManager.temp_bed.pid.Ki, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_BED_PID_D, &thermalManager.temp_bed.pid.Kd, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_PID_AUTOTUNE_BED, nullptr, &ScreenHandler.HandlePIDAutotune, nullptr), | ||||
|     #endif | ||||
|   #endif | ||||
|  | ||||
|   // Fan Data | ||||
|   #if HAS_FAN | ||||
|     #define FAN_VPHELPER(N) \ | ||||
|       VPHELPER(VP_Fan##N##_Percentage, &thermalManager.fan_speed[N], DGUSScreenVariableHandler::DGUSLCD_PercentageToUint8, &DGUSScreenVariableHandler::DGUSLCD_SendPercentageToDisplay), \ | ||||
|       VPHELPER(VP_FAN##N##_CONTROL, &thermalManager.fan_speed[N], &DGUSScreenVariableHandler::HandleFanControl, nullptr), \ | ||||
|       VPHELPER(VP_FAN##N##_STATUS, &thermalManager.fan_speed[N], nullptr, &DGUSScreenVariableHandler::DGUSLCD_SendFanStatusToDisplay), | ||||
|       VPHELPER(VP_Fan##N##_Percentage, &thermalManager.fan_speed[N], ScreenHandler.DGUSLCD_PercentageToUint8, &ScreenHandler.DGUSLCD_SendPercentageToDisplay), \ | ||||
|       VPHELPER(VP_FAN##N##_CONTROL, &thermalManager.fan_speed[N], &ScreenHandler.HandleFanControl, nullptr), \ | ||||
|       VPHELPER(VP_FAN##N##_STATUS, &thermalManager.fan_speed[N], nullptr, &ScreenHandler.DGUSLCD_SendFanStatusToDisplay), | ||||
|     REPEAT(FAN_COUNT, FAN_VPHELPER) | ||||
|   #endif | ||||
|  | ||||
|   // Feedrate | ||||
|   VPHELPER(VP_Feedrate_Percentage, &feedrate_percentage, DGUSScreenVariableHandler::DGUSLCD_SetValueDirectly<int16_t>, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay ), | ||||
|   VPHELPER(VP_Feedrate_Percentage, &feedrate_percentage, ScreenHandler.DGUSLCD_SetValueDirectly<int16_t>, &ScreenHandler.DGUSLCD_SendWordValueToDisplay ), | ||||
|  | ||||
|   // Position Data | ||||
|   VPHELPER(VP_XPos, ¤t_position.x, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|   VPHELPER(VP_YPos, ¤t_position.y, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|   VPHELPER(VP_ZPos, ¤t_position.z, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|   VPHELPER(VP_XPos, ¤t_position.x, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|   VPHELPER(VP_YPos, ¤t_position.y, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|   VPHELPER(VP_ZPos, ¤t_position.z, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|  | ||||
|   // Print Progress | ||||
|   VPHELPER(VP_PrintProgress_Percentage, nullptr, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintProgressToDisplay ), | ||||
|   VPHELPER(VP_PrintProgress_Percentage, nullptr, nullptr, ScreenHandler.DGUSLCD_SendPrintProgressToDisplay ), | ||||
|  | ||||
|   // Print Time | ||||
|   VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay ), | ||||
|   VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, ScreenHandler.DGUSLCD_SendPrintTimeToDisplay ), | ||||
|   #if ENABLED(PRINTCOUNTER) | ||||
|     VPHELPER_STR(VP_PrintAccTime, nullptr, VP_PrintAccTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintAccTimeToDisplay ), | ||||
|     VPHELPER_STR(VP_PrintsTotal, nullptr, VP_PrintsTotal_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintsTotalToDisplay ), | ||||
|     VPHELPER_STR(VP_PrintAccTime, nullptr, VP_PrintAccTime_LEN, nullptr, ScreenHandler.DGUSLCD_SendPrintAccTimeToDisplay ), | ||||
|     VPHELPER_STR(VP_PrintsTotal, nullptr, VP_PrintsTotal_LEN, nullptr, ScreenHandler.DGUSLCD_SendPrintsTotalToDisplay ), | ||||
|   #endif | ||||
|  | ||||
|   VPHELPER(VP_X_STEP_PER_MM, &planner.settings.axis_steps_per_mm[X_AXIS], DGUSScreenVariableHandler::HandleStepPerMMChanged, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   VPHELPER(VP_Y_STEP_PER_MM, &planner.settings.axis_steps_per_mm[Y_AXIS], DGUSScreenVariableHandler::HandleStepPerMMChanged, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   VPHELPER(VP_Z_STEP_PER_MM, &planner.settings.axis_steps_per_mm[Z_AXIS], DGUSScreenVariableHandler::HandleStepPerMMChanged, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   VPHELPER(VP_X_STEP_PER_MM, &planner.settings.axis_steps_per_mm[X_AXIS], ScreenHandler.HandleStepPerMMChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   VPHELPER(VP_Y_STEP_PER_MM, &planner.settings.axis_steps_per_mm[Y_AXIS], ScreenHandler.HandleStepPerMMChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   VPHELPER(VP_Z_STEP_PER_MM, &planner.settings.axis_steps_per_mm[Z_AXIS], ScreenHandler.HandleStepPerMMChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   #if HOTENDS >= 1 | ||||
|     VPHELPER(VP_E0_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(0)], DGUSScreenVariableHandler::HandleStepPerMMExtruderChanged, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|     VPHELPER(VP_E0_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(0)], ScreenHandler.HandleStepPerMMExtruderChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   #endif | ||||
|   #if HOTENDS >= 2 | ||||
|     VPHELPER(VP_E1_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(1)], DGUSScreenVariableHandler::HandleStepPerMMExtruderChanged, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|     VPHELPER(VP_E1_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(1)], ScreenHandler.HandleStepPerMMExtruderChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   #endif | ||||
|  | ||||
|   // SDCard File listing. | ||||
|   #if ENABLED(SDSUPPORT) | ||||
|     VPHELPER(VP_SD_ScrollEvent, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_ScrollFilelist, nullptr), | ||||
|     VPHELPER(VP_SD_FileSelected, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_FileSelected, nullptr), | ||||
|     VPHELPER(VP_SD_FileSelectConfirm, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_StartPrint, nullptr), | ||||
|     VPHELPER_STR(VP_SD_FileName0,  nullptr, VP_SD_FileName_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName1,  nullptr, VP_SD_FileName_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName2,  nullptr, VP_SD_FileName_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName3,  nullptr, VP_SD_FileName_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName4,  nullptr, VP_SD_FileName_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER(VP_SD_ResumePauseAbort, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_ResumePauseAbort, nullptr), | ||||
|     VPHELPER(VP_SD_AbortPrintConfirmed, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_ReallyAbort, nullptr), | ||||
|     VPHELPER(VP_SD_Print_Setting, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_PrintTune, nullptr), | ||||
|     VPHELPER(VP_SD_ScrollEvent, nullptr, ScreenHandler.DGUSLCD_SD_ScrollFilelist, nullptr), | ||||
|     VPHELPER(VP_SD_FileSelected, nullptr, ScreenHandler.DGUSLCD_SD_FileSelected, nullptr), | ||||
|     VPHELPER(VP_SD_FileSelectConfirm, nullptr, ScreenHandler.DGUSLCD_SD_StartPrint, nullptr), | ||||
|     VPHELPER_STR(VP_SD_FileName0,  nullptr, VP_SD_FileName_LEN, nullptr, ScreenHandler.DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName1,  nullptr, VP_SD_FileName_LEN, nullptr, ScreenHandler.DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName2,  nullptr, VP_SD_FileName_LEN, nullptr, ScreenHandler.DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName3,  nullptr, VP_SD_FileName_LEN, nullptr, ScreenHandler.DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName4,  nullptr, VP_SD_FileName_LEN, nullptr, ScreenHandler.DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER(VP_SD_ResumePauseAbort, nullptr, ScreenHandler.DGUSLCD_SD_ResumePauseAbort, nullptr), | ||||
|     VPHELPER(VP_SD_AbortPrintConfirmed, nullptr, ScreenHandler.DGUSLCD_SD_ReallyAbort, nullptr), | ||||
|     VPHELPER(VP_SD_Print_Setting, nullptr, ScreenHandler.DGUSLCD_SD_PrintTune, nullptr), | ||||
|     #if HAS_BED_PROBE | ||||
|       VPHELPER(VP_SD_Print_ProbeOffsetZ, &probe.offset.z, DGUSScreenVariableHandler::HandleProbeOffsetZChanged, &DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<2>), | ||||
|       VPHELPER(VP_SD_Print_ProbeOffsetZ, &probe.offset.z, ScreenHandler.HandleProbeOffsetZChanged, &ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<2>), | ||||
|       #if ENABLED(BABYSTEPPING) | ||||
|         VPHELPER(VP_SD_Print_LiveAdjustZ, nullptr, DGUSScreenVariableHandler::HandleLiveAdjustZ, nullptr), | ||||
|         VPHELPER(VP_SD_Print_LiveAdjustZ, nullptr, ScreenHandler.HandleLiveAdjustZ, nullptr), | ||||
|       #endif | ||||
|     #endif | ||||
|   #endif | ||||
|  | ||||
|   #if ENABLED(DGUS_UI_WAITING) | ||||
|     VPHELPER(VP_WAITING_STATUS, nullptr, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendWaitingStatusToDisplay), | ||||
|     VPHELPER(VP_WAITING_STATUS, nullptr, nullptr, ScreenHandler.DGUSLCD_SendWaitingStatusToDisplay), | ||||
|   #endif | ||||
|  | ||||
|   // Messages for the User, shared by the popup and the kill screen. They cant be autouploaded as we do not buffer content. | ||||
|   { .VP = VP_MSGSTR1, .memadr = nullptr, .size = VP_MSGSTR1_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR2, .memadr = nullptr, .size = VP_MSGSTR2_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR3, .memadr = nullptr, .size = VP_MSGSTR3_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR4, .memadr = nullptr, .size = VP_MSGSTR4_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR1, .memadr = nullptr, .size = VP_MSGSTR1_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &ScreenHandler.DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR2, .memadr = nullptr, .size = VP_MSGSTR2_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &ScreenHandler.DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR3, .memadr = nullptr, .size = VP_MSGSTR3_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &ScreenHandler.DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR4, .memadr = nullptr, .size = VP_MSGSTR4_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &ScreenHandler.DGUSLCD_SendStringToDisplayPGM }, | ||||
|  | ||||
|   VPHELPER(0, 0, 0, 0)  // must be last entry. | ||||
| }; | ||||
|   | ||||
| @@ -28,6 +28,7 @@ | ||||
|  | ||||
| #include "../DGUSDisplayDef.h" | ||||
| #include "../DGUSDisplay.h" | ||||
| #include "../DGUSScreenHandler.h" | ||||
|  | ||||
| #include "../../../../../module/temperature.h" | ||||
| #include "../../../../../module/motion.h" | ||||
| @@ -153,152 +154,152 @@ const char MarlinVersion[] PROGMEM = SHORT_BUILD_VERSION; | ||||
|  | ||||
| const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { | ||||
|   // Helper to detect touch events | ||||
|   VPHELPER(VP_SCREENCHANGE, nullptr, DGUSScreenVariableHandler::ScreenChangeHook, nullptr), | ||||
|   VPHELPER(VP_SCREENCHANGE_ASK, nullptr, DGUSScreenVariableHandler::ScreenChangeHookIfIdle, nullptr), | ||||
|   VPHELPER(VP_SCREENCHANGE, nullptr, ScreenHandler.ScreenChangeHook, nullptr), | ||||
|   VPHELPER(VP_SCREENCHANGE_ASK, nullptr, ScreenHandler.ScreenChangeHookIfIdle, nullptr), | ||||
|   #if ENABLED(SDSUPPORT) | ||||
|     VPHELPER(VP_SCREENCHANGE_WHENSD, nullptr, DGUSScreenVariableHandler::ScreenChangeHookIfSD, nullptr), | ||||
|     VPHELPER(VP_SCREENCHANGE_WHENSD, nullptr, ScreenHandler.ScreenChangeHookIfSD, nullptr), | ||||
|   #endif | ||||
|   VPHELPER(VP_CONFIRMED, nullptr, DGUSScreenVariableHandler::ScreenConfirmedOK, nullptr), | ||||
|   VPHELPER(VP_CONFIRMED, nullptr, ScreenHandler.ScreenConfirmedOK, nullptr), | ||||
|  | ||||
|   VPHELPER(VP_TEMP_ALL_OFF, nullptr, &DGUSScreenVariableHandler::HandleAllHeatersOff, nullptr), | ||||
|   VPHELPER(VP_TEMP_ALL_OFF, nullptr, &ScreenHandler.HandleAllHeatersOff, nullptr), | ||||
|  | ||||
|   #if ENABLED(DGUS_UI_MOVE_DIS_OPTION) | ||||
|     VPHELPER(VP_MOVE_OPTION, &distanceToMove, &DGUSScreenVariableHandler::HandleManualMoveOption, nullptr), | ||||
|     VPHELPER(VP_MOVE_OPTION, &distanceToMove, &ScreenHandler.HandleManualMoveOption, nullptr), | ||||
|   #endif | ||||
|   #if ENABLED(DGUS_UI_MOVE_DIS_OPTION) | ||||
|     VPHELPER(VP_MOVE_X, &distanceToMove, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Y, &distanceToMove, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Z, &distanceToMove, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_HOME_ALL, &distanceToMove, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_X, &distanceToMove, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Y, &distanceToMove, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Z, &distanceToMove, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_HOME_ALL, &distanceToMove, &ScreenHandler.HandleManualMove, nullptr), | ||||
|   #else | ||||
|     VPHELPER(VP_MOVE_X, nullptr, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Y, nullptr, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Z, nullptr, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_HOME_ALL, nullptr, &DGUSScreenVariableHandler::HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_X, nullptr, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Y, nullptr, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_MOVE_Z, nullptr, &ScreenHandler.HandleManualMove, nullptr), | ||||
|     VPHELPER(VP_HOME_ALL, nullptr, &ScreenHandler.HandleManualMove, nullptr), | ||||
|   #endif | ||||
|  | ||||
|   VPHELPER(VP_MOTOR_LOCK_UNLOK, nullptr, &DGUSScreenVariableHandler::HandleMotorLockUnlock, nullptr), | ||||
|   VPHELPER(VP_MOTOR_LOCK_UNLOK, nullptr, &ScreenHandler.HandleMotorLockUnlock, nullptr), | ||||
|   #if ENABLED(POWER_LOSS_RECOVERY) | ||||
|     VPHELPER(VP_POWER_LOSS_RECOVERY, nullptr, &DGUSScreenVariableHandler::HandlePowerLossRecovery, nullptr), | ||||
|     VPHELPER(VP_POWER_LOSS_RECOVERY, nullptr, &ScreenHandler.HandlePowerLossRecovery, nullptr), | ||||
|   #endif | ||||
|   VPHELPER(VP_SETTINGS, nullptr, &DGUSScreenVariableHandler::HandleSettings, nullptr), | ||||
|   VPHELPER(VP_SETTINGS, nullptr, &ScreenHandler.HandleSettings, nullptr), | ||||
|  | ||||
|   { .VP = VP_MARLIN_VERSION, .memadr = (void*)MarlinVersion, .size = VP_MARLIN_VERSION_LEN, .set_by_display_handler = nullptr, .send_to_display_handler =&DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MARLIN_VERSION, .memadr = (void*)MarlinVersion, .size = VP_MARLIN_VERSION_LEN, .set_by_display_handler = nullptr, .send_to_display_handler =&ScreenHandler.DGUSLCD_SendStringToDisplayPGM }, | ||||
|   // M117 LCD String (We don't need the string in memory but "just" push it to the display on demand, hence the nullptr | ||||
|   { .VP = VP_M117, .memadr = nullptr, .size = VP_M117_LEN, .set_by_display_handler = nullptr, .send_to_display_handler =&DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplay }, | ||||
|   { .VP = VP_M117, .memadr = nullptr, .size = VP_M117_LEN, .set_by_display_handler = nullptr, .send_to_display_handler =&ScreenHandler.DGUSLCD_SendStringToDisplay }, | ||||
|  | ||||
|   // Temperature Data | ||||
|   #if HOTENDS >= 1 | ||||
|     VPHELPER(VP_T_E0_Is, &thermalManager.temp_hotend[0].celsius, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_E0_Set, &thermalManager.temp_hotend[0].target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_Flowrate_E0, nullptr, DGUSScreenVariableHandler::HandleFlowRateChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_EPos, &destination.e, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|     VPHELPER(VP_MOVE_E0, nullptr, &DGUSScreenVariableHandler::HandleManualExtrude, nullptr), | ||||
|     VPHELPER(VP_E0_CONTROL, &thermalManager.temp_hotend[0].target, &DGUSScreenVariableHandler::HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_E0_STATUS, &thermalManager.temp_hotend[0].target, nullptr, &DGUSScreenVariableHandler::DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     VPHELPER(VP_T_E0_Is, &thermalManager.temp_hotend[0].celsius, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_E0_Set, &thermalManager.temp_hotend[0].target, ScreenHandler.HandleTemperatureChanged, &ScreenHandler.DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_Flowrate_E0, nullptr, ScreenHandler.HandleFlowRateChanged, &ScreenHandler.DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_EPos, &destination.e, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|     VPHELPER(VP_MOVE_E0, nullptr, &ScreenHandler.HandleManualExtrude, nullptr), | ||||
|     VPHELPER(VP_E0_CONTROL, &thermalManager.temp_hotend[0].target, &ScreenHandler.HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_E0_STATUS, &thermalManager.temp_hotend[0].target, nullptr, &ScreenHandler.DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     #if ENABLED(DGUS_PREHEAT_UI) | ||||
|       VPHELPER(VP_E0_BED_PREHEAT, nullptr, &DGUSScreenVariableHandler::HandlePreheat, nullptr), | ||||
|       VPHELPER(VP_E0_BED_PREHEAT, nullptr, &ScreenHandler.HandlePreheat, nullptr), | ||||
|     #endif | ||||
|     #if ENABLED(PIDTEMP) | ||||
|       VPHELPER(VP_E0_PID_P, &thermalManager.temp_hotend[0].pid.Kp, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_E0_PID_I, &thermalManager.temp_hotend[0].pid.Ki, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_E0_PID_D, &thermalManager.temp_hotend[0].pid.Kd, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_PID_AUTOTUNE_E0, nullptr, &DGUSScreenVariableHandler::HandlePIDAutotune, nullptr), | ||||
|       VPHELPER(VP_E0_PID_P, &thermalManager.temp_hotend[0].pid.Kp, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_E0_PID_I, &thermalManager.temp_hotend[0].pid.Ki, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_E0_PID_D, &thermalManager.temp_hotend[0].pid.Kd, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_PID_AUTOTUNE_E0, nullptr, &ScreenHandler.HandlePIDAutotune, nullptr), | ||||
|     #endif | ||||
|     #if ENABLED(DGUS_FILAMENT_LOADUNLOAD) | ||||
|       VPHELPER(VP_E0_FILAMENT_LOAD_UNLOAD, nullptr, &DGUSScreenVariableHandler::HandleFilamentOption, &DGUSScreenVariableHandler::HandleFilamentLoadUnload), | ||||
|       VPHELPER(VP_E0_FILAMENT_LOAD_UNLOAD, nullptr, &ScreenHandler.HandleFilamentOption, &ScreenHandler.HandleFilamentLoadUnload), | ||||
|     #endif | ||||
|   #endif | ||||
|   #if HOTENDS >= 2 | ||||
|     VPHELPER(VP_T_E1_Is, &thermalManager.temp_hotend[1].celsius, nullptr, DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_E1_Set, &thermalManager.temp_hotend[1].target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_Flowrate_E1, nullptr, DGUSScreenVariableHandler::HandleFlowRateChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_MOVE_E1, nullptr, &DGUSScreenVariableHandler::HandleManualExtrude, nullptr), | ||||
|     VPHELPER(VP_E1_CONTROL, &thermalManager.temp_hotend[1].target, &DGUSScreenVariableHandler::HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_E1_STATUS, &thermalManager.temp_hotend[1].target, nullptr, &DGUSScreenVariableHandler::DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     VPHELPER(VP_T_E1_Set, &thermalManager.temp_hotend[1].target, ScreenHandler.HandleTemperatureChanged, &ScreenHandler.DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_Flowrate_E1, nullptr, ScreenHandler.HandleFlowRateChanged, &ScreenHandler.DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_MOVE_E1, nullptr, &ScreenHandler.HandleManualExtrude, nullptr), | ||||
|     VPHELPER(VP_E1_CONTROL, &thermalManager.temp_hotend[1].target, &ScreenHandler.HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_E1_STATUS, &thermalManager.temp_hotend[1].target, nullptr, &ScreenHandler.DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     #if ENABLED(PIDTEMP) | ||||
|       VPHELPER(VP_PID_AUTOTUNE_E1, nullptr, &DGUSScreenVariableHandler::HandlePIDAutotune, nullptr), | ||||
|       VPHELPER(VP_PID_AUTOTUNE_E1, nullptr, &ScreenHandler.HandlePIDAutotune, nullptr), | ||||
|     #endif | ||||
|   #endif | ||||
|   #if HAS_HEATED_BED | ||||
|     VPHELPER(VP_T_Bed_Is, &thermalManager.temp_bed.celsius, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_Bed_Set, &thermalManager.temp_bed.target, DGUSScreenVariableHandler::HandleTemperatureChanged, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_BED_CONTROL, &thermalManager.temp_bed.target, &DGUSScreenVariableHandler::HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_BED_STATUS, &thermalManager.temp_bed.target, nullptr, &DGUSScreenVariableHandler::DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     VPHELPER(VP_T_Bed_Is, &thermalManager.temp_bed.celsius, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<0>), | ||||
|     VPHELPER(VP_T_Bed_Set, &thermalManager.temp_bed.target, ScreenHandler.HandleTemperatureChanged, &ScreenHandler.DGUSLCD_SendWordValueToDisplay), | ||||
|     VPHELPER(VP_BED_CONTROL, &thermalManager.temp_bed.target, &ScreenHandler.HandleHeaterControl, nullptr), | ||||
|     VPHELPER(VP_BED_STATUS, &thermalManager.temp_bed.target, nullptr, &ScreenHandler.DGUSLCD_SendHeaterStatusToDisplay), | ||||
|     #if ENABLED(PIDTEMPBED) | ||||
|       VPHELPER(VP_BED_PID_P, &thermalManager.temp_bed.pid.Kp, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_BED_PID_I, &thermalManager.temp_bed.pid.Ki, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_BED_PID_D, &thermalManager.temp_bed.pid.Kd, DGUSScreenVariableHandler::HandleTemperaturePIDChanged, DGUSScreenVariableHandler::DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_BED_PID_P, &thermalManager.temp_bed.pid.Kp, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_BED_PID_I, &thermalManager.temp_bed.pid.Ki, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|       VPHELPER(VP_BED_PID_D, &thermalManager.temp_bed.pid.Kd, ScreenHandler.HandleTemperaturePIDChanged, ScreenHandler.DGUSLCD_SendTemperaturePID), | ||||
|     #endif | ||||
|   #endif | ||||
|  | ||||
|   // Fan Data | ||||
|   #if HAS_FAN | ||||
|     #define FAN_VPHELPER(N) \ | ||||
|       VPHELPER(VP_Fan##N##_Percentage, &thermalManager.fan_speed[N], DGUSScreenVariableHandler::DGUSLCD_PercentageToUint8, &DGUSScreenVariableHandler::DGUSLCD_SendPercentageToDisplay), \ | ||||
|       VPHELPER(VP_FAN##N##_CONTROL, &thermalManager.fan_speed[N], &DGUSScreenVariableHandler::HandleFanControl, nullptr), \ | ||||
|       VPHELPER(VP_FAN##N##_STATUS, &thermalManager.fan_speed[N], nullptr, &DGUSScreenVariableHandler::DGUSLCD_SendFanStatusToDisplay), | ||||
|       VPHELPER(VP_Fan##N##_Percentage, &thermalManager.fan_speed[N], ScreenHandler.DGUSLCD_PercentageToUint8, &ScreenHandler.DGUSLCD_SendPercentageToDisplay), \ | ||||
|       VPHELPER(VP_FAN##N##_CONTROL, &thermalManager.fan_speed[N], &ScreenHandler.HandleFanControl, nullptr), \ | ||||
|       VPHELPER(VP_FAN##N##_STATUS, &thermalManager.fan_speed[N], nullptr, &ScreenHandler.DGUSLCD_SendFanStatusToDisplay), | ||||
|     REPEAT(FAN_COUNT, FAN_VPHELPER) | ||||
|   #endif | ||||
|  | ||||
|   // Feedrate | ||||
|   VPHELPER(VP_Feedrate_Percentage, &feedrate_percentage, DGUSScreenVariableHandler::DGUSLCD_SetValueDirectly<int16_t>, &DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay ), | ||||
|   VPHELPER(VP_Feedrate_Percentage, &feedrate_percentage, ScreenHandler.DGUSLCD_SetValueDirectly<int16_t>, &ScreenHandler.DGUSLCD_SendWordValueToDisplay ), | ||||
|  | ||||
|   // Position Data | ||||
|   VPHELPER(VP_XPos, ¤t_position.x, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|   VPHELPER(VP_YPos, ¤t_position.y, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|   VPHELPER(VP_ZPos, ¤t_position.z, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|   VPHELPER(VP_XPos, ¤t_position.x, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|   VPHELPER(VP_YPos, ¤t_position.y, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|   VPHELPER(VP_ZPos, ¤t_position.z, nullptr, ScreenHandler.DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||
|  | ||||
|   // Print Progress | ||||
|   VPHELPER(VP_PrintProgress_Percentage, nullptr, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintProgressToDisplay ), | ||||
|   VPHELPER(VP_PrintProgress_Percentage, nullptr, nullptr, ScreenHandler.DGUSLCD_SendPrintProgressToDisplay ), | ||||
|  | ||||
|   // Print Time | ||||
|   VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay ), | ||||
|   VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, ScreenHandler.DGUSLCD_SendPrintTimeToDisplay ), | ||||
|   #if ENABLED(PRINTCOUNTER) | ||||
|     VPHELPER_STR(VP_PrintAccTime, nullptr, VP_PrintAccTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintAccTimeToDisplay ), | ||||
|     VPHELPER_STR(VP_PrintsTotal, nullptr, VP_PrintsTotal_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintsTotalToDisplay ), | ||||
|     VPHELPER_STR(VP_PrintAccTime, nullptr, VP_PrintAccTime_LEN, nullptr, ScreenHandler.DGUSLCD_SendPrintAccTimeToDisplay ), | ||||
|     VPHELPER_STR(VP_PrintsTotal, nullptr, VP_PrintsTotal_LEN, nullptr, ScreenHandler.DGUSLCD_SendPrintsTotalToDisplay ), | ||||
|   #endif | ||||
|  | ||||
|   VPHELPER(VP_X_STEP_PER_MM, &planner.settings.axis_steps_per_mm[X_AXIS], DGUSScreenVariableHandler::HandleStepPerMMChanged, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   VPHELPER(VP_Y_STEP_PER_MM, &planner.settings.axis_steps_per_mm[Y_AXIS], DGUSScreenVariableHandler::HandleStepPerMMChanged, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   VPHELPER(VP_Z_STEP_PER_MM, &planner.settings.axis_steps_per_mm[Z_AXIS], DGUSScreenVariableHandler::HandleStepPerMMChanged, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   VPHELPER(VP_X_STEP_PER_MM, &planner.settings.axis_steps_per_mm[X_AXIS], ScreenHandler.HandleStepPerMMChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   VPHELPER(VP_Y_STEP_PER_MM, &planner.settings.axis_steps_per_mm[Y_AXIS], ScreenHandler.HandleStepPerMMChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   VPHELPER(VP_Z_STEP_PER_MM, &planner.settings.axis_steps_per_mm[Z_AXIS], ScreenHandler.HandleStepPerMMChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   #if HOTENDS >= 1 | ||||
|     VPHELPER(VP_E0_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(0)], DGUSScreenVariableHandler::HandleStepPerMMExtruderChanged, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|     VPHELPER(VP_E0_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(0)], ScreenHandler.HandleStepPerMMExtruderChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   #endif | ||||
|   #if HOTENDS >= 2 | ||||
|     VPHELPER(VP_E1_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(1)], DGUSScreenVariableHandler::HandleStepPerMMExtruderChanged, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|     VPHELPER(VP_E1_STEP_PER_MM, &planner.settings.axis_steps_per_mm[E_AXIS_N(1)], ScreenHandler.HandleStepPerMMExtruderChanged, ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<1>), | ||||
|   #endif | ||||
|  | ||||
|   // SDCard File listing. | ||||
|   #if ENABLED(SDSUPPORT) | ||||
|     VPHELPER(VP_SD_ScrollEvent, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_ScrollFilelist, nullptr), | ||||
|     VPHELPER(VP_SD_FileSelected, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_FileSelected, nullptr), | ||||
|     VPHELPER(VP_SD_FileSelectConfirm, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_StartPrint, nullptr), | ||||
|     VPHELPER_STR(VP_SD_FileName0,  nullptr, VP_SD_FileName_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName1,  nullptr, VP_SD_FileName_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName2,  nullptr, VP_SD_FileName_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName3,  nullptr, VP_SD_FileName_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName4,  nullptr, VP_SD_FileName_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER(VP_SD_ResumePauseAbort, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_ResumePauseAbort, nullptr), | ||||
|     VPHELPER(VP_SD_AbortPrintConfirmed, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_ReallyAbort, nullptr), | ||||
|     VPHELPER(VP_SD_Print_Setting, nullptr, DGUSScreenVariableHandler::DGUSLCD_SD_PrintTune, nullptr), | ||||
|     VPHELPER(VP_SD_ScrollEvent, nullptr, ScreenHandler.DGUSLCD_SD_ScrollFilelist, nullptr), | ||||
|     VPHELPER(VP_SD_FileSelected, nullptr, ScreenHandler.DGUSLCD_SD_FileSelected, nullptr), | ||||
|     VPHELPER(VP_SD_FileSelectConfirm, nullptr, ScreenHandler.DGUSLCD_SD_StartPrint, nullptr), | ||||
|     VPHELPER_STR(VP_SD_FileName0,  nullptr, VP_SD_FileName_LEN, nullptr, ScreenHandler.DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName1,  nullptr, VP_SD_FileName_LEN, nullptr, ScreenHandler.DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName2,  nullptr, VP_SD_FileName_LEN, nullptr, ScreenHandler.DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName3,  nullptr, VP_SD_FileName_LEN, nullptr, ScreenHandler.DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER_STR(VP_SD_FileName4,  nullptr, VP_SD_FileName_LEN, nullptr, ScreenHandler.DGUSLCD_SD_SendFilename ), | ||||
|     VPHELPER(VP_SD_ResumePauseAbort, nullptr, ScreenHandler.DGUSLCD_SD_ResumePauseAbort, nullptr), | ||||
|     VPHELPER(VP_SD_AbortPrintConfirmed, nullptr, ScreenHandler.DGUSLCD_SD_ReallyAbort, nullptr), | ||||
|     VPHELPER(VP_SD_Print_Setting, nullptr, ScreenHandler.DGUSLCD_SD_PrintTune, nullptr), | ||||
|     #if HAS_BED_PROBE | ||||
|       VPHELPER(VP_SD_Print_ProbeOffsetZ, &probe.offset.z, DGUSScreenVariableHandler::HandleProbeOffsetZChanged, &DGUSScreenVariableHandler::DGUSLCD_SendFloatAsIntValueToDisplay<2>), | ||||
|       VPHELPER(VP_SD_Print_ProbeOffsetZ, &probe.offset.z, ScreenHandler.HandleProbeOffsetZChanged, &ScreenHandler.DGUSLCD_SendFloatAsIntValueToDisplay<2>), | ||||
|       #if ENABLED(BABYSTEPPING) | ||||
|         VPHELPER(VP_SD_Print_LiveAdjustZ, nullptr, DGUSScreenVariableHandler::HandleLiveAdjustZ, nullptr), | ||||
|         VPHELPER(VP_SD_Print_LiveAdjustZ, nullptr, ScreenHandler.HandleLiveAdjustZ, nullptr), | ||||
|       #endif | ||||
|     #endif | ||||
|   #endif | ||||
|  | ||||
|   #if ENABLED(DGUS_UI_WAITING) | ||||
|     VPHELPER(VP_WAITING_STATUS, nullptr, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendWaitingStatusToDisplay), | ||||
|     VPHELPER(VP_WAITING_STATUS, nullptr, nullptr, ScreenHandler.DGUSLCD_SendWaitingStatusToDisplay), | ||||
|   #endif | ||||
|  | ||||
|   // Messages for the User, shared by the popup and the kill screen. They cant be autouploaded as we do not buffer content. | ||||
|   { .VP = VP_MSGSTR1, .memadr = nullptr, .size = VP_MSGSTR1_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR2, .memadr = nullptr, .size = VP_MSGSTR2_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR3, .memadr = nullptr, .size = VP_MSGSTR3_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR4, .memadr = nullptr, .size = VP_MSGSTR4_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &DGUSScreenVariableHandler::DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR1, .memadr = nullptr, .size = VP_MSGSTR1_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &ScreenHandler.DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR2, .memadr = nullptr, .size = VP_MSGSTR2_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &ScreenHandler.DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR3, .memadr = nullptr, .size = VP_MSGSTR3_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &ScreenHandler.DGUSLCD_SendStringToDisplayPGM }, | ||||
|   { .VP = VP_MSGSTR4, .memadr = nullptr, .size = VP_MSGSTR4_LEN, .set_by_display_handler = nullptr, .send_to_display_handler = &ScreenHandler.DGUSLCD_SendStringToDisplayPGM }, | ||||
|  | ||||
|   VPHELPER(0, 0, 0, 0)  // must be last entry. | ||||
| }; | ||||
|   | ||||
| @@ -33,6 +33,7 @@ | ||||
| #include "extui/ui_api.h" | ||||
| #include "extui/lib/dgus/DGUSDisplay.h" | ||||
| #include "extui/lib/dgus/DGUSDisplayDef.h" | ||||
| #include "extui/lib/dgus/DGUSScreenHandler.h" | ||||
|  | ||||
| extern const char NUL_STR[]; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user