Skip to content

Commit 201c991

Browse files
authored
Fix and update DGUS displays (MarlinFirmware#17072)
1 parent 23c5701 commit 201c991

8 files changed

+43
-26
lines changed

Marlin/Configuration_adv.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -1288,7 +1288,7 @@
12881288
// Additional options for DGUS / DWIN displays
12891289
//
12901290
#if HAS_DGUS_LCD
1291-
#define DGUS_SERIAL_PORT 2
1291+
#define DGUS_SERIAL_PORT 3
12921292
#define DGUS_BAUDRATE 115200
12931293

12941294
#define DGUS_RX_BUFFER_SIZE 128

Marlin/src/inc/Conditionals_LCD.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -356,11 +356,12 @@
356356
#endif
357357
#endif
358358

359-
// Extensible UI serial touch screens. (See src/lcd/extensible_ui)
359+
// Aliases for LCD features
360360
#if ANY(DGUS_LCD_UI_ORIGIN, DGUS_LCD_UI_FYSETC, DGUS_LCD_UI_HIPRECY)
361361
#define HAS_DGUS_LCD 1
362362
#endif
363363

364+
// Extensible UI serial touch screens. (See src/lcd/extensible_ui)
364365
#if ANY(HAS_DGUS_LCD, MALYAN_LCD, TOUCH_UI_FTDI_EVE)
365366
#define IS_EXTUI
366367
#define EXTENSIBLE_UI

Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplay.cpp

+14-8
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,15 @@ void DGUSScreenVariableHandler::DGUSLCD_SendPercentageToDisplay(DGUS_VP_Variable
179179
}
180180
}
181181

182+
// Send the current print progress to the display.
183+
void DGUSScreenVariableHandler::DGUSLCD_SendPrintProgressToDisplay(DGUS_VP_Variable &var) {
184+
//DEBUG_ECHOPAIR(" DGUSLCD_SendPrintProgressToDisplay ", var.VP);
185+
uint16_t tmp = ExtUI::getProgress_percent();
186+
//DEBUG_ECHOLNPAIR(" data ", tmp);
187+
uint16_t data_to_send = swap16(tmp);
188+
dgusdisplay.WriteVariable(var.VP, data_to_send);
189+
}
190+
182191
// Send the current print time to the display.
183192
// It is using a hex display for that: It expects BSD coded data in the format xxyyzz
184193
void DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay(DGUS_VP_Variable &var) {
@@ -465,7 +474,7 @@ void DGUSScreenVariableHandler::ScreenConfirmedOK(DGUS_VP_Variable &var, void *v
465474
const uint16_t* DGUSLCD_FindScreenVPMapList(uint8_t screen) {
466475
const uint16_t *ret;
467476
const struct VPMapping *map = VPMap;
468-
while (ret = (uint16_t*) pgm_read_word(&(map->VPList))) {
477+
while (ret = (uint16_t*) pgm_read_ptr(&(map->VPList))) {
469478
if (pgm_read_byte(&(map->screen)) == screen) return ret;
470479
map++;
471480
}
@@ -846,8 +855,8 @@ void DGUSScreenVariableHandler::HandleStepPerMMExtruderChanged(DGUS_VP_Variable
846855
void DGUSScreenVariableHandler::HandleProbeOffsetZChanged(DGUS_VP_Variable &var, void *val_ptr) {
847856
DEBUG_ECHOLNPGM("HandleProbeOffsetZChanged");
848857

849-
uint16_t value = swap16(*(uint16_t*)val_ptr)/100;
850-
ExtUI::setZOffset_mm(value);
858+
const float offset = float(swap16(*(uint16_t*)val_ptr)) / 100.0f;
859+
ExtUI::setZOffset_mm(offset);
851860
ScreenHandler.skipVP = var.VP; // don't overwrite value the next update time as the display might autoincrement in parallel
852861
return;
853862
}
@@ -858,7 +867,7 @@ void DGUSScreenVariableHandler::HandleProbeOffsetZChanged(DGUS_VP_Variable &var,
858867

859868
int16_t flag = swap16(*(uint16_t*)val_ptr);
860869
int16_t steps = flag ? -20 : 20;
861-
ExtUI::smartAdjustAxis_steps(steps,ExtUI::axis_t::Z,true);
870+
ExtUI::smartAdjustAxis_steps(steps, ExtUI::axis_t::Z, true);
862871
ScreenHandler.ForceCompleteUpdate();
863872
return;
864873
}
@@ -1307,11 +1316,8 @@ void DGUSDisplay::ProcessRx() {
13071316
//DEBUG_ECHOPAIR(" vp=", vp, " dlen=", dlen);
13081317
DGUS_VP_Variable ramcopy;
13091318
if (populate_VPVar(vp, &ramcopy)) {
1310-
if (!(dlen == ramcopy.size || (dlen == 2 && ramcopy.size == 1)))
1311-
DEBUG_ECHOLNPGM("SIZE MISMATCH");
1312-
else if (ramcopy.set_by_display_handler) {
1319+
if (ramcopy.set_by_display_handler)
13131320
ramcopy.set_by_display_handler(ramcopy, &tmp[3]);
1314-
}
13151321
else
13161322
DEBUG_ECHOLNPGM(" VPVar found, no handler.");
13171323
}

Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplay.h

+8-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
#include "../../../../inc/MarlinConfigPre.h"
2727

2828
#include "../../../../MarlinCore.h"
29+
#if HAS_BED_PROBE
30+
#include "../../../../module/probe.h"
31+
#endif
2932
#include "DGUSVPVariable.h"
3033

3134
enum DGUSLCD_Screens : uint8_t;
@@ -140,8 +143,10 @@ class DGUSScreenVariableHandler {
140143
// Hook for PID autotune
141144
static void HandlePIDAutotune(DGUS_VP_Variable &var, void *val_ptr);
142145
#endif
143-
// Hook for "Change probe offset z"
144-
static void HandleProbeOffsetZChanged(DGUS_VP_Variable &var, void *val_ptr);
146+
#if HAS_BED_PROBE
147+
// Hook for "Change probe offset z"
148+
static void HandleProbeOffsetZChanged(DGUS_VP_Variable &var, void *val_ptr);
149+
#endif
145150
#if ENABLED(BABYSTEPPING)
146151
// Hook for live z adjust action
147152
static void HandleLiveAdjustZ(DGUS_VP_Variable &var, void *val_ptr);
@@ -210,6 +215,7 @@ class DGUSScreenVariableHandler {
210215
static void DGUSLCD_SendStringToDisplayPGM(DGUS_VP_Variable &var);
211216
static void DGUSLCD_SendTemperaturePID(DGUS_VP_Variable &var);
212217
static void DGUSLCD_SendPercentageToDisplay(DGUS_VP_Variable &var);
218+
static void DGUSLCD_SendPrintProgressToDisplay(DGUS_VP_Variable &var);
213219
static void DGUSLCD_SendPrintTimeToDisplay(DGUS_VP_Variable &var);
214220
#if ENABLED(PRINTCOUNTER)
215221
static void DGUSLCD_SendPrintAccTimeToDisplay(DGUS_VP_Variable &var);

Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinitionFYSETC.cpp

+10-3
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ const uint16_t VPList_SDPrintTune[] PROGMEM = {
213213
VP_T_Bed_Is, VP_T_Bed_Set,
214214
#endif
215215
VP_Feedrate_Percentage,
216+
VP_SD_Print_ProbeOffsetZ,
216217
0x0000
217218
};
218219

@@ -279,6 +280,13 @@ const uint16_t VPList_FLCPrinting[] PROGMEM = {
279280
0x0000
280281
};
281282

283+
const uint16_t VPList_Z_Offset[] PROGMEM = {
284+
#if HOTENDS >= 1
285+
VP_SD_Print_ProbeOffsetZ,
286+
#endif
287+
0x0000
288+
};
289+
282290
const struct VPMapping VPMap[] PROGMEM = {
283291
{ DGUSLCD_SCREEN_BOOT, VPList_Boot },
284292
{ DGUSLCD_SCREEN_MAIN, VPList_Main },
@@ -297,6 +305,7 @@ const struct VPMapping VPMap[] PROGMEM = {
297305
{ DGUSLCD_SCREEN_WAITING, VPList_PIDTuningWaiting },
298306
{ DGUSLCD_SCREEN_FLC_PREHEAT, VPList_FLCPreheat },
299307
{ DGUSLCD_SCREEN_FLC_PRINTING, VPList_FLCPrinting },
308+
{ DGUSLCD_SCREEN_Z_OFFSET, VPList_Z_Offset },
300309
{ DGUSLCD_SCREEN_STEPPERMM, VPList_StepPerMM },
301310
{ DGUSLCD_SCREEN_PID_E, VPList_PIDE0 },
302311
{ DGUSLCD_SCREEN_PID_BED, VPList_PIDBED },
@@ -418,9 +427,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = {
418427
VPHELPER(VP_ZPos, &current_position.z, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>),
419428

420429
// Print Progress
421-
#if ENABLED(LCD_SET_PROGRESS_MANUALLY)
422-
VPHELPER(VP_PrintProgress_Percentage, &ui.progress_override, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay),
423-
#endif
430+
VPHELPER(VP_PrintProgress_Percentage, nullptr, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintProgressToDisplay ),
424431

425432
// Print Time
426433
VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay),

Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinitionFYSETC.h

+6-5
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ enum DGUSLCD_Screens : uint8_t {
4343
DGUSLCD_SCREEN_STEPPERMM = 212,
4444
DGUSLCD_SCREEN_PID_E = 214,
4545
DGUSLCD_SCREEN_PID_BED = 218,
46-
DGUSLCD_SCREEN_INFOS = 30,
46+
DGUSLCD_SCREEN_Z_OFFSET = 222,
47+
DGUSLCD_SCREEN_INFOS = 36,
4748
DGUSLCD_SCREEN_CONFIRM = 240,
4849
DGUSLCD_SCREEN_KILL = 250, ///< Kill Screen. Must always be 250 (to be able to display "Error wrong LCD Version")
4950
DGUSLCD_SCREEN_WAITING = 251,
@@ -121,8 +122,8 @@ constexpr uint16_t VP_POWER_LOSS_RECOVERY = 0x2180;
121122
// Fan Control Buttons , switch between "off" and "on"
122123
constexpr uint16_t VP_FAN0_CONTROL = 0x2200;
123124
constexpr uint16_t VP_FAN1_CONTROL = 0x2202;
124-
//constexpr uint16_t VP_FAN2_CONTROL = 0x2204;
125-
//constexpr uint16_t VP_FAN3_CONTROL = 0x2206;
125+
constexpr uint16_t VP_FAN2_CONTROL = 0x2204;
126+
constexpr uint16_t VP_FAN3_CONTROL = 0x2206;
126127

127128
// Heater Control Buttons , triged between "cool down" and "heat PLA" state
128129
constexpr uint16_t VP_E0_CONTROL = 0x2210;
@@ -240,8 +241,8 @@ constexpr uint16_t VP_SD_Print_Filename = 0x32C0;
240241
// Fan status
241242
constexpr uint16_t VP_FAN0_STATUS = 0x3300;
242243
constexpr uint16_t VP_FAN1_STATUS = 0x3302;
243-
//constexpr uint16_t VP_FAN2_STATUS = 0x3304;
244-
//constexpr uint16_t VP_FAN3_STATUS = 0x3306;
244+
constexpr uint16_t VP_FAN2_STATUS = 0x3304;
245+
constexpr uint16_t VP_FAN3_STATUS = 0x3306;
245246

246247
// Heater status
247248
constexpr uint16_t VP_E0_STATUS = 0x3310;

Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinitionHIPRECY.cpp

+1-3
Original file line numberDiff line numberDiff line change
@@ -418,9 +418,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = {
418418
VPHELPER(VP_ZPos, &current_position.z, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>),
419419

420420
// Print Progress
421-
#if ENABLED(LCD_SET_PROGRESS_MANUALLY)
422-
VPHELPER(VP_PrintProgress_Percentage, &ui.progress_override, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay ),
423-
#endif
421+
VPHELPER(VP_PrintProgress_Percentage, nullptr, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintProgressToDisplay ),
424422

425423
// Print Time
426424
VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay ),

Marlin/src/lcd/extensible_ui/lib/dgus/DGUSDisplayDefinitionOrigin.cpp

+1-3
Original file line numberDiff line numberDiff line change
@@ -250,9 +250,7 @@ const struct DGUS_VP_Variable ListOfVP[] PROGMEM = {
250250
VPHELPER(VP_ZPos, &current_position.z, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendFloatAsLongValueToDisplay<2>),
251251

252252
// Print Progress
253-
#if ENABLED(LCD_SET_PROGRESS_MANUALLY)
254-
VPHELPER(VP_PrintProgress_Percentage, &ui.progress_override, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendWordValueToDisplay ),
255-
#endif
253+
VPHELPER(VP_PrintProgress_Percentage, nullptr, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintProgressToDisplay ),
256254

257255
// Print Time
258256
VPHELPER_STR(VP_PrintTime, nullptr, VP_PrintTime_LEN, nullptr, DGUSScreenVariableHandler::DGUSLCD_SendPrintTimeToDisplay ),

0 commit comments

Comments
 (0)