Fix and update DGUS displays (#17072)
This commit is contained in:
		| @@ -1288,7 +1288,7 @@ | |||||||
| // Additional options for DGUS / DWIN displays | // Additional options for DGUS / DWIN displays | ||||||
| // | // | ||||||
| #if HAS_DGUS_LCD | #if HAS_DGUS_LCD | ||||||
|   #define DGUS_SERIAL_PORT 2 |   #define DGUS_SERIAL_PORT 3 | ||||||
|   #define DGUS_BAUDRATE 115200 |   #define DGUS_BAUDRATE 115200 | ||||||
|  |  | ||||||
|   #define DGUS_RX_BUFFER_SIZE 128 |   #define DGUS_RX_BUFFER_SIZE 128 | ||||||
|   | |||||||
| @@ -356,11 +356,12 @@ | |||||||
|   #endif |   #endif | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // Extensible UI serial touch screens. (See src/lcd/extensible_ui) | // Aliases for LCD features | ||||||
| #if ANY(DGUS_LCD_UI_ORIGIN, DGUS_LCD_UI_FYSETC, DGUS_LCD_UI_HIPRECY) | #if ANY(DGUS_LCD_UI_ORIGIN, DGUS_LCD_UI_FYSETC, DGUS_LCD_UI_HIPRECY) | ||||||
|   #define HAS_DGUS_LCD 1 |   #define HAS_DGUS_LCD 1 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | // Extensible UI serial touch screens. (See src/lcd/extensible_ui) | ||||||
| #if ANY(HAS_DGUS_LCD, MALYAN_LCD, TOUCH_UI_FTDI_EVE) | #if ANY(HAS_DGUS_LCD, MALYAN_LCD, TOUCH_UI_FTDI_EVE) | ||||||
|   #define IS_EXTUI |   #define IS_EXTUI | ||||||
|   #define EXTENSIBLE_UI |   #define EXTENSIBLE_UI | ||||||
|   | |||||||
| @@ -179,6 +179,15 @@ void DGUSScreenVariableHandler::DGUSLCD_SendPercentageToDisplay(DGUS_VP_Variable | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Send the current print progress to the display. | ||||||
|  | void DGUSScreenVariableHandler::DGUSLCD_SendPrintProgressToDisplay(DGUS_VP_Variable &var) { | ||||||
|  |   //DEBUG_ECHOPAIR(" DGUSLCD_SendPrintProgressToDisplay ", var.VP); | ||||||
|  |   uint16_t tmp = ExtUI::getProgress_percent(); | ||||||
|  |   //DEBUG_ECHOLNPAIR(" data ", tmp); | ||||||
|  |   uint16_t data_to_send = swap16(tmp); | ||||||
|  |   dgusdisplay.WriteVariable(var.VP, data_to_send); | ||||||
|  | } | ||||||
|  |  | ||||||
| // Send the current print time to the display. | // Send the current print time to the display. | ||||||
| // It is using a hex display for that: It expects BSD coded data in the format xxyyzz | // It is using a hex display for that: It expects BSD coded data in the format xxyyzz | ||||||
| void DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay(DGUS_VP_Variable &var) { | void DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay(DGUS_VP_Variable &var) { | ||||||
| @@ -465,7 +474,7 @@ void DGUSScreenVariableHandler::ScreenConfirmedOK(DGUS_VP_Variable &var, void *v | |||||||
| const uint16_t* DGUSLCD_FindScreenVPMapList(uint8_t screen) { | const uint16_t* DGUSLCD_FindScreenVPMapList(uint8_t screen) { | ||||||
|   const uint16_t *ret; |   const uint16_t *ret; | ||||||
|   const struct VPMapping *map = VPMap; |   const struct VPMapping *map = VPMap; | ||||||
|   while (ret = (uint16_t*) pgm_read_word(&(map->VPList))) { |   while (ret = (uint16_t*) pgm_read_ptr(&(map->VPList))) { | ||||||
|     if (pgm_read_byte(&(map->screen)) == screen) return ret; |     if (pgm_read_byte(&(map->screen)) == screen) return ret; | ||||||
|     map++; |     map++; | ||||||
|   } |   } | ||||||
| @@ -846,8 +855,8 @@ void DGUSScreenVariableHandler::HandleStepPerMMExtruderChanged(DGUS_VP_Variable | |||||||
| void DGUSScreenVariableHandler::HandleProbeOffsetZChanged(DGUS_VP_Variable &var, void *val_ptr) { | void DGUSScreenVariableHandler::HandleProbeOffsetZChanged(DGUS_VP_Variable &var, void *val_ptr) { | ||||||
|   DEBUG_ECHOLNPGM("HandleProbeOffsetZChanged"); |   DEBUG_ECHOLNPGM("HandleProbeOffsetZChanged"); | ||||||
|  |  | ||||||
|   uint16_t value = swap16(*(uint16_t*)val_ptr)/100; |   const float offset = float(swap16(*(uint16_t*)val_ptr)) / 100.0f; | ||||||
|   ExtUI::setZOffset_mm(value); |   ExtUI::setZOffset_mm(offset); | ||||||
|   ScreenHandler.skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel |   ScreenHandler.skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel | ||||||
|   return; |   return; | ||||||
| } | } | ||||||
| @@ -858,7 +867,7 @@ void DGUSScreenVariableHandler::HandleProbeOffsetZChanged(DGUS_VP_Variable &var, | |||||||
|  |  | ||||||
|     int16_t flag = swap16(*(uint16_t*)val_ptr); |     int16_t flag = swap16(*(uint16_t*)val_ptr); | ||||||
|     int16_t steps = flag ? -20 : 20; |     int16_t steps = flag ? -20 : 20; | ||||||
|     ExtUI::smartAdjustAxis_steps(steps,ExtUI::axis_t::Z,true); |     ExtUI::smartAdjustAxis_steps(steps, ExtUI::axis_t::Z, true); | ||||||
|     ScreenHandler.ForceCompleteUpdate(); |     ScreenHandler.ForceCompleteUpdate(); | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
| @@ -1307,11 +1316,8 @@ void DGUSDisplay::ProcessRx() { | |||||||
|           //DEBUG_ECHOPAIR(" vp=", vp, " dlen=", dlen); |           //DEBUG_ECHOPAIR(" vp=", vp, " dlen=", dlen); | ||||||
|           DGUS_VP_Variable ramcopy; |           DGUS_VP_Variable ramcopy; | ||||||
|           if (populate_VPVar(vp, &ramcopy)) { |           if (populate_VPVar(vp, &ramcopy)) { | ||||||
|             if (!(dlen == ramcopy.size || (dlen == 2 && ramcopy.size == 1))) |             if (ramcopy.set_by_display_handler) | ||||||
|               DEBUG_ECHOLNPGM("SIZE MISMATCH"); |  | ||||||
|             else if (ramcopy.set_by_display_handler) { |  | ||||||
|               ramcopy.set_by_display_handler(ramcopy, &tmp[3]); |               ramcopy.set_by_display_handler(ramcopy, &tmp[3]); | ||||||
|             } |  | ||||||
|             else |             else | ||||||
|               DEBUG_ECHOLNPGM(" VPVar found, no handler."); |               DEBUG_ECHOLNPGM(" VPVar found, no handler."); | ||||||
|           } |           } | ||||||
|   | |||||||
| @@ -26,6 +26,9 @@ | |||||||
| #include "../../../../inc/MarlinConfigPre.h" | #include "../../../../inc/MarlinConfigPre.h" | ||||||
|  |  | ||||||
| #include "../../../../MarlinCore.h" | #include "../../../../MarlinCore.h" | ||||||
|  | #if HAS_BED_PROBE | ||||||
|  |   #include "../../../../module/probe.h" | ||||||
|  | #endif | ||||||
| #include "DGUSVPVariable.h" | #include "DGUSVPVariable.h" | ||||||
|  |  | ||||||
| enum DGUSLCD_Screens : uint8_t; | enum DGUSLCD_Screens : uint8_t; | ||||||
| @@ -140,8 +143,10 @@ public: | |||||||
|     // Hook for PID autotune |     // Hook for PID autotune | ||||||
|     static void HandlePIDAutotune(DGUS_VP_Variable &var, void *val_ptr); |     static void HandlePIDAutotune(DGUS_VP_Variable &var, void *val_ptr); | ||||||
|   #endif |   #endif | ||||||
|   // Hook for "Change probe offset z" |   #if HAS_BED_PROBE | ||||||
|   static void HandleProbeOffsetZChanged(DGUS_VP_Variable &var, void *val_ptr); |     // Hook for "Change probe offset z" | ||||||
|  |     static void HandleProbeOffsetZChanged(DGUS_VP_Variable &var, void *val_ptr); | ||||||
|  |   #endif | ||||||
|   #if ENABLED(BABYSTEPPING) |   #if ENABLED(BABYSTEPPING) | ||||||
|     // Hook for live z adjust action |     // Hook for live z adjust action | ||||||
|     static void HandleLiveAdjustZ(DGUS_VP_Variable &var, void *val_ptr); |     static void HandleLiveAdjustZ(DGUS_VP_Variable &var, void *val_ptr); | ||||||
| @@ -210,6 +215,7 @@ public: | |||||||
|   static void DGUSLCD_SendStringToDisplayPGM(DGUS_VP_Variable &var); |   static void DGUSLCD_SendStringToDisplayPGM(DGUS_VP_Variable &var); | ||||||
|   static void DGUSLCD_SendTemperaturePID(DGUS_VP_Variable &var); |   static void DGUSLCD_SendTemperaturePID(DGUS_VP_Variable &var); | ||||||
|   static void DGUSLCD_SendPercentageToDisplay(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); |   static void DGUSLCD_SendPrintTimeToDisplay(DGUS_VP_Variable &var); | ||||||
|   #if ENABLED(PRINTCOUNTER) |   #if ENABLED(PRINTCOUNTER) | ||||||
|     static void DGUSLCD_SendPrintAccTimeToDisplay(DGUS_VP_Variable &var); |     static void DGUSLCD_SendPrintAccTimeToDisplay(DGUS_VP_Variable &var); | ||||||
|   | |||||||
| @@ -213,6 +213,7 @@ const uint16_t VPList_SDPrintTune[] PROGMEM = { | |||||||
|     VP_T_Bed_Is, VP_T_Bed_Set, |     VP_T_Bed_Is, VP_T_Bed_Set, | ||||||
|   #endif |   #endif | ||||||
|   VP_Feedrate_Percentage, |   VP_Feedrate_Percentage, | ||||||
|  |   VP_SD_Print_ProbeOffsetZ, | ||||||
|   0x0000 |   0x0000 | ||||||
| }; | }; | ||||||
|  |  | ||||||
| @@ -279,6 +280,13 @@ const uint16_t VPList_FLCPrinting[] PROGMEM = { | |||||||
|   0x0000 |   0x0000 | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | const uint16_t VPList_Z_Offset[] PROGMEM = { | ||||||
|  |   #if HOTENDS >= 1 | ||||||
|  |     VP_SD_Print_ProbeOffsetZ, | ||||||
|  |   #endif | ||||||
|  |   0x0000 | ||||||
|  | }; | ||||||
|  |  | ||||||
| const struct VPMapping VPMap[] PROGMEM = { | const struct VPMapping VPMap[] PROGMEM = { | ||||||
|   { DGUSLCD_SCREEN_BOOT, VPList_Boot }, |   { DGUSLCD_SCREEN_BOOT, VPList_Boot }, | ||||||
|   { DGUSLCD_SCREEN_MAIN, VPList_Main }, |   { DGUSLCD_SCREEN_MAIN, VPList_Main }, | ||||||
| @@ -297,6 +305,7 @@ const struct VPMapping VPMap[] PROGMEM = { | |||||||
|   { DGUSLCD_SCREEN_WAITING, VPList_PIDTuningWaiting }, |   { DGUSLCD_SCREEN_WAITING, VPList_PIDTuningWaiting }, | ||||||
|   { DGUSLCD_SCREEN_FLC_PREHEAT, VPList_FLCPreheat }, |   { DGUSLCD_SCREEN_FLC_PREHEAT, VPList_FLCPreheat }, | ||||||
|   { DGUSLCD_SCREEN_FLC_PRINTING, VPList_FLCPrinting }, |   { DGUSLCD_SCREEN_FLC_PRINTING, VPList_FLCPrinting }, | ||||||
|  |   { DGUSLCD_SCREEN_Z_OFFSET, VPList_Z_Offset }, | ||||||
|   { DGUSLCD_SCREEN_STEPPERMM, VPList_StepPerMM }, |   { DGUSLCD_SCREEN_STEPPERMM, VPList_StepPerMM }, | ||||||
|   { DGUSLCD_SCREEN_PID_E, VPList_PIDE0 }, |   { DGUSLCD_SCREEN_PID_E, VPList_PIDE0 }, | ||||||
|   { DGUSLCD_SCREEN_PID_BED, VPList_PIDBED }, |   { DGUSLCD_SCREEN_PID_BED, VPList_PIDBED }, | ||||||
| @@ -418,9 +427,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { | |||||||
|   VPHELPER(VP_ZPos, ¤t_position.z, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), |   VPHELPER(VP_ZPos, ¤t_position.z, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||||
|  |  | ||||||
|   // Print Progress |   // Print Progress | ||||||
|   #if ENABLED(LCD_SET_PROGRESS_MANUALLY) |   VPHELPER(VP_PrintProgress_Percentage, nullptr, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintProgressToDisplay ), | ||||||
|     VPHELPER(VP_PrintProgress_Percentage, &ui.progress_override, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay), |  | ||||||
|   #endif |  | ||||||
|  |  | ||||||
|   // Print Time |   // Print Time | ||||||
|   VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay), |   VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay), | ||||||
|   | |||||||
| @@ -43,7 +43,8 @@ enum DGUSLCD_Screens : uint8_t { | |||||||
|   DGUSLCD_SCREEN_STEPPERMM           = 212, |   DGUSLCD_SCREEN_STEPPERMM           = 212, | ||||||
|   DGUSLCD_SCREEN_PID_E               = 214, |   DGUSLCD_SCREEN_PID_E               = 214, | ||||||
|   DGUSLCD_SCREEN_PID_BED             = 218, |   DGUSLCD_SCREEN_PID_BED             = 218, | ||||||
|   DGUSLCD_SCREEN_INFOS               =  30, |   DGUSLCD_SCREEN_Z_OFFSET            = 222, | ||||||
|  |   DGUSLCD_SCREEN_INFOS               =  36, | ||||||
|   DGUSLCD_SCREEN_CONFIRM             = 240, |   DGUSLCD_SCREEN_CONFIRM             = 240, | ||||||
|   DGUSLCD_SCREEN_KILL                = 250, ///< Kill Screen. Must always be 250 (to be able to display "Error wrong LCD Version") |   DGUSLCD_SCREEN_KILL                = 250, ///< Kill Screen. Must always be 250 (to be able to display "Error wrong LCD Version") | ||||||
|   DGUSLCD_SCREEN_WAITING             = 251, |   DGUSLCD_SCREEN_WAITING             = 251, | ||||||
| @@ -121,8 +122,8 @@ constexpr uint16_t VP_POWER_LOSS_RECOVERY = 0x2180; | |||||||
| // Fan Control Buttons , switch between "off" and "on" | // Fan Control Buttons , switch between "off" and "on" | ||||||
| constexpr uint16_t VP_FAN0_CONTROL = 0x2200; | constexpr uint16_t VP_FAN0_CONTROL = 0x2200; | ||||||
| constexpr uint16_t VP_FAN1_CONTROL = 0x2202; | constexpr uint16_t VP_FAN1_CONTROL = 0x2202; | ||||||
| //constexpr uint16_t VP_FAN2_CONTROL = 0x2204; | constexpr uint16_t VP_FAN2_CONTROL = 0x2204; | ||||||
| //constexpr uint16_t VP_FAN3_CONTROL = 0x2206; | constexpr uint16_t VP_FAN3_CONTROL = 0x2206; | ||||||
|  |  | ||||||
| // Heater Control Buttons , triged between "cool down" and "heat PLA" state | // Heater Control Buttons , triged between "cool down" and "heat PLA" state | ||||||
| constexpr uint16_t VP_E0_CONTROL = 0x2210; | constexpr uint16_t VP_E0_CONTROL = 0x2210; | ||||||
| @@ -240,8 +241,8 @@ constexpr uint16_t VP_SD_Print_Filename = 0x32C0; | |||||||
| // Fan status | // Fan status | ||||||
| constexpr uint16_t VP_FAN0_STATUS = 0x3300; | constexpr uint16_t VP_FAN0_STATUS = 0x3300; | ||||||
| constexpr uint16_t VP_FAN1_STATUS = 0x3302; | constexpr uint16_t VP_FAN1_STATUS = 0x3302; | ||||||
| //constexpr uint16_t VP_FAN2_STATUS = 0x3304; | constexpr uint16_t VP_FAN2_STATUS = 0x3304; | ||||||
| //constexpr uint16_t VP_FAN3_STATUS = 0x3306; | constexpr uint16_t VP_FAN3_STATUS = 0x3306; | ||||||
|  |  | ||||||
| // Heater status | // Heater status | ||||||
| constexpr uint16_t VP_E0_STATUS = 0x3310; | constexpr uint16_t VP_E0_STATUS = 0x3310; | ||||||
|   | |||||||
| @@ -418,9 +418,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { | |||||||
|   VPHELPER(VP_ZPos, ¤t_position.z, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), |   VPHELPER(VP_ZPos, ¤t_position.z, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||||
|  |  | ||||||
|   // Print Progress |   // Print Progress | ||||||
|   #if ENABLED(LCD_SET_PROGRESS_MANUALLY) |   VPHELPER(VP_PrintProgress_Percentage, nullptr, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintProgressToDisplay ), | ||||||
|     VPHELPER(VP_PrintProgress_Percentage, &ui.progress_override, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay ), |  | ||||||
|   #endif |  | ||||||
|  |  | ||||||
|   // Print Time |   // Print Time | ||||||
|   VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay ), |   VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay ), | ||||||
|   | |||||||
| @@ -250,9 +250,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = { | |||||||
|   VPHELPER(VP_ZPos, ¤t_position.z, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), |   VPHELPER(VP_ZPos, ¤t_position.z, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>), | ||||||
|  |  | ||||||
|   // Print Progress |   // Print Progress | ||||||
|   #if ENABLED(LCD_SET_PROGRESS_MANUALLY) |   VPHELPER(VP_PrintProgress_Percentage, nullptr, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintProgressToDisplay ), | ||||||
|     VPHELPER(VP_PrintProgress_Percentage, &ui.progress_override, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay ), |  | ||||||
|   #endif |  | ||||||
|  |  | ||||||
|   // Print Time |   // Print Time | ||||||
|   VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay ), |   VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay ), | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user