|
@@ -48,15 +48,17 @@
|
48
|
48
|
#include "../../../core/macros.h"
|
49
|
49
|
#include "../../../gcode/queue.h"
|
50
|
50
|
|
51
|
|
-#include "../../../feature/powerloss.h"
|
52
|
51
|
#include "../../../feature/babystep.h"
|
53
|
52
|
|
54
|
|
-#include "../../../module/settings.h"
|
55
|
53
|
#include "../../../module/temperature.h"
|
56
|
54
|
#include "../../../module/printcounter.h"
|
57
|
55
|
#include "../../../module/motion.h"
|
58
|
56
|
#include "../../../module/planner.h"
|
59
|
57
|
|
|
58
|
+#if ENABLED(EEPROM_SETTINGS)
|
|
59
|
+ #include "../../../module/settings.h"
|
|
60
|
+#endif
|
|
61
|
+
|
60
|
62
|
#if ENABLED(HOST_ACTION_COMMANDS)
|
61
|
63
|
#include "../../../feature/host_actions.h"
|
62
|
64
|
#endif
|
|
@@ -69,6 +71,10 @@
|
69
|
71
|
#include "../../../module/probe.h"
|
70
|
72
|
#endif
|
71
|
73
|
|
|
74
|
+#if ENABLED(POWER_LOSS_RECOVERY)
|
|
75
|
+ #include "../../../feature/powerloss.h"
|
|
76
|
+#endif
|
|
77
|
+
|
72
|
78
|
#ifndef MACHINE_SIZE
|
73
|
79
|
#define MACHINE_SIZE "220x220x250"
|
74
|
80
|
#endif
|
|
@@ -130,7 +136,7 @@ constexpr uint16_t TROWS = 6, MROWS = TROWS - 1, // Total rows, and other
|
130
|
136
|
|
131
|
137
|
#define MBASE(L) (49 + (L)*MLINE)
|
132
|
138
|
|
133
|
|
-#define BABY_Z_VAR TERN(HAS_BED_PROBE, probe.offset.z, zprobe_zoffset)
|
|
139
|
+#define BABY_Z_VAR TERN(HAS_BED_PROBE, probe.offset.z, dwin_zoffset)
|
134
|
140
|
|
135
|
141
|
/* Value Init */
|
136
|
142
|
HMI_value_t HMI_ValueStruct;
|
|
@@ -188,8 +194,8 @@ float last_E_scale = 0;
|
188
|
194
|
bool DWIN_lcd_sd_status = 0;
|
189
|
195
|
bool pause_action_flag = 0;
|
190
|
196
|
int temphot = 0, tempbed = 0;
|
191
|
|
-float zprobe_zoffset = 0;
|
192
|
|
-float last_zoffset = 0, last_probe_zoffset = 0;
|
|
197
|
+float dwin_zoffset = 0;
|
|
198
|
+float last_zoffset = 0;
|
193
|
199
|
|
194
|
200
|
#define DWIN_LANGUAGE_EEPROM_ADDRESS 0x01 // Between 0x01 and 0x63 (EEPROM_OFFSET-1)
|
195
|
201
|
// BL24CXX::check() uses 0x00
|
|
@@ -213,7 +219,7 @@ void HMI_SetAndSaveLanguageChinese(void) {
|
213
|
219
|
BL24CXX::write(DWIN_LANGUAGE_EEPROM_ADDRESS, (uint8_t*)&HMI_flag.language_chinese, sizeof(HMI_flag.language_chinese));
|
214
|
220
|
}
|
215
|
221
|
|
216
|
|
-void show_plus_or_minus(uint8_t size, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
|
|
222
|
+void DWIN_Draw_Signed_Float(uint8_t size, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
|
217
|
223
|
if (value < 0) {
|
218
|
224
|
DWIN_Draw_String(false, true, size, White, bColor, x - 6, y, F("-"));
|
219
|
225
|
DWIN_Draw_FloatValue(true, true, 0, size, White, bColor, iNum, fNum, x, y, -value);
|
|
@@ -517,7 +523,7 @@ inline void Prepare_Item_Offset(const uint8_t row) {
|
517
|
523
|
if (HMI_flag.language_chinese) {
|
518
|
524
|
#if HAS_BED_PROBE
|
519
|
525
|
DWIN_Frame_AreaCopy(1, 174, 164, 271 - 48, 479 - 302, LBLX, MBASE(row));
|
520
|
|
- show_plus_or_minus(font8x16, Background_black, 2, 2, 202, MBASE(row), probe.offset.z * 100);
|
|
526
|
+ DWIN_Draw_Signed_Float(font8x16, Background_black, 2, 2, 202, MBASE(row), probe.offset.z * 100);
|
521
|
527
|
#else
|
522
|
528
|
DWIN_Frame_AreaCopy(1, 43, 89, 271 - 173, 479 - 378, LBLX, MBASE(row));
|
523
|
529
|
#endif
|
|
@@ -525,7 +531,7 @@ inline void Prepare_Item_Offset(const uint8_t row) {
|
525
|
531
|
else {
|
526
|
532
|
#if HAS_BED_PROBE
|
527
|
533
|
DWIN_Frame_AreaCopy(1, 93, 179, 271 - 130, 479 - 290, LBLX, MBASE(row)); // "Z-Offset"
|
528
|
|
- show_plus_or_minus(font8x16, Background_black, 2, 2, 202, MBASE(row), probe.offset.z * 100);
|
|
534
|
+ DWIN_Draw_Signed_Float(font8x16, Background_black, 2, 2, 202, MBASE(row), probe.offset.z * 100);
|
529
|
535
|
#else
|
530
|
536
|
DWIN_Frame_AreaCopy(1, 1, 76, 271 - 165, 479 - 393, LBLX, MBASE(row)); // "..."
|
531
|
537
|
#endif
|
|
@@ -633,22 +639,28 @@ inline void Draw_Control_Menu() {
|
633
|
639
|
Draw_Title(GET_TEXT_F(MSG_CONTROL));
|
634
|
640
|
DWIN_Draw_String(false, true, font8x16, White, Background_black, 60, 102 + (MLINE * 0), GET_TEXT_F(MSG_TEMPERATURE));
|
635
|
641
|
DWIN_Draw_String(false, true, font8x16, White, Background_black, 60, 102 + (MLINE * 1), GET_TEXT_F(MSG_MOTION));
|
636
|
|
- DWIN_Draw_String(false, true, font8x16, White, Background_black, 60, 102 + (MLINE * 2), GET_TEXT_F(MSG_STORE_EEPROM));
|
637
|
|
- DWIN_Draw_String(false, true, font8x16, White, Background_black, 60, 102 + (MLINE * 3), GET_TEXT_F(MSG_LOAD_EEPROM));
|
638
|
|
- DWIN_Draw_String(false, true, font8x16, White, Background_black, 60, 102 + (MLINE * 4), GET_TEXT_F(MSG_RESTORE_DEFAULTS));
|
639
|
|
- if (CVISI(6))
|
640
|
|
- DWIN_Draw_String(false, true, font8x16, White, Background_black, 60, 102 + (MLINE * 5), F("Info"));
|
|
642
|
+ #if ENABLED(EEPROM_SETTINGS)
|
|
643
|
+ DWIN_Draw_String(false, true, font8x16, White, Background_black, 60, 102 + (MLINE * 2), GET_TEXT_F(MSG_STORE_EEPROM));
|
|
644
|
+ DWIN_Draw_String(false, true, font8x16, White, Background_black, 60, 102 + (MLINE * 3), GET_TEXT_F(MSG_LOAD_EEPROM));
|
|
645
|
+ DWIN_Draw_String(false, true, font8x16, White, Background_black, 60, 102 + (MLINE * 4), GET_TEXT_F(MSG_RESTORE_DEFAULTS));
|
|
646
|
+ if (CVISI(6)) DWIN_Draw_String(false, true, font8x16, White, Background_black, 60, 102 + (MLINE * 5), F("Info"));
|
|
647
|
+ #else
|
|
648
|
+ if (CVISI(3)) DWIN_Draw_String(false, true, font8x16, White, Background_black, 60, 102 + (MLINE * 2), F("Info"));
|
|
649
|
+ #endif
|
641
|
650
|
#else
|
642
|
651
|
DWIN_Frame_AreaCopy(1, 128, 2, 271 - 95, 479 - 467, 14, 8);
|
643
|
652
|
DWIN_Frame_AreaCopy(1, 1, 89, 271 - 188, 479 - 377 - 1, LBLX, CLINE(1));// Temperature >
|
644
|
653
|
DWIN_Frame_AreaCopy(1, 84, 89, 271 - 143, 479 - 380, LBLX, CLINE(2));// Motion >
|
645
|
|
- DWIN_Frame_AreaCopy(1, 131 + 17, 89, 271 - 3, 479 - 377 - 1, LBLX, CLINE(3));// "Store Configuration"
|
646
|
|
- DWIN_Frame_AreaCopy(1, 26, 104, 271 - 214, 479 - 365, LBLX, CLINE(4)); // "Read"
|
647
|
|
- DWIN_Frame_AreaCopy(1, 131 + 51, 89, 271 - 3, 479 - 377 - 1, LBLX + 31 + 3, CLINE(4)); // "Configuration"
|
648
|
|
- DWIN_Frame_AreaCopy(1, 59, 104, 271 - 178, 479 - 365, LBLX, CLINE(5)); // "Reset"
|
649
|
|
- DWIN_Frame_AreaCopy(1, 131 + 51, 89, 271 - 3, 479 - 377 - 1, LBLX + 34 + 3, CLINE(5)); // "Configuration"
|
650
|
|
- if (CVISI(6))
|
651
|
|
- DWIN_Frame_AreaCopy(1, 0, 104, 25, 115, LBLX, CLINE(6)); // Info >
|
|
654
|
+ #if ENABLED(EEPROM_SETTINGS)
|
|
655
|
+ DWIN_Frame_AreaCopy(1, 131 + 17, 89, 271 - 3, 479 - 377 - 1, LBLX, CLINE(3));// "Store Configuration"
|
|
656
|
+ DWIN_Frame_AreaCopy(1, 26, 104, 271 - 214, 479 - 365, LBLX, CLINE(4)); // "Read"
|
|
657
|
+ DWIN_Frame_AreaCopy(1, 131 + 51, 89, 271 - 3, 479 - 377 - 1, LBLX + 31 + 3, CLINE(4)); // "Configuration"
|
|
658
|
+ DWIN_Frame_AreaCopy(1, 59, 104, 271 - 178, 479 - 365, LBLX, CLINE(5)); // "Reset"
|
|
659
|
+ DWIN_Frame_AreaCopy(1, 131 + 51, 89, 271 - 3, 479 - 377 - 1, LBLX + 34 + 3, CLINE(5)); // "Configuration"
|
|
660
|
+ if (CVISI(6)) DWIN_Frame_AreaCopy(1, 0, 104, 25, 115, LBLX, CLINE(6)); // Info >
|
|
661
|
+ #else
|
|
662
|
+ if (CVISI(3)) DWIN_Frame_AreaCopy(1, 0, 104, 25, 115, LBLX, CLINE(3)); // Info >
|
|
663
|
+ #endif
|
652
|
664
|
#endif
|
653
|
665
|
}
|
654
|
666
|
|
|
@@ -708,7 +720,7 @@ inline void Draw_Tune_Menu() {
|
708
|
720
|
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(2), thermalManager.temp_hotend[0].target);
|
709
|
721
|
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(3), thermalManager.temp_bed.target);
|
710
|
722
|
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(4), thermalManager.fan_speed[0]);
|
711
|
|
- show_plus_or_minus(font8x16, Background_black, 2, 2, 202, MBASE(5), BABY_Z_VAR * 100);
|
|
723
|
+ DWIN_Draw_Signed_Float(font8x16, Background_black, 2, 2, 202, MBASE(5), BABY_Z_VAR * 100);
|
712
|
724
|
}
|
713
|
725
|
|
714
|
726
|
inline void draw_max_en(const uint16_t line) {
|
|
@@ -1102,7 +1114,7 @@ void HMI_Move_Z(void) {
|
1102
|
1114
|
checkkey = AxisMove;
|
1103
|
1115
|
EncoderRate.encoderRateEnabled = 0;
|
1104
|
1116
|
last_E_scale = HMI_ValueStruct.Move_E_scale;
|
1105
|
|
- show_plus_or_minus(font8x16, Background_black, 3, 1, 216, MBASE(4), HMI_ValueStruct.Move_E_scale);
|
|
1117
|
+ DWIN_Draw_Signed_Float(font8x16, Background_black, 3, 1, 216, MBASE(4), HMI_ValueStruct.Move_E_scale);
|
1106
|
1118
|
if (!planner.is_full()) {
|
1107
|
1119
|
planner.synchronize(); // Wait for planner moves to finish!
|
1108
|
1120
|
planner.buffer_line(current_position, MMM_TO_MMS(FEEDRATE_E), active_extruder);
|
|
@@ -1115,7 +1127,7 @@ void HMI_Move_Z(void) {
|
1115
|
1127
|
else if ((last_E_scale - HMI_ValueStruct.Move_E_scale) > (EXTRUDE_MAXLENGTH) * MINUNITMULT)
|
1116
|
1128
|
HMI_ValueStruct.Move_E_scale = last_E_scale - (EXTRUDE_MAXLENGTH) * MINUNITMULT;
|
1117
|
1129
|
current_position.e = HMI_ValueStruct.Move_E_scale / 10;
|
1118
|
|
- show_plus_or_minus(font8x16, Select_Color, 3, 1, 216, MBASE(4), HMI_ValueStruct.Move_E_scale);
|
|
1130
|
+ DWIN_Draw_Signed_Float(font8x16, Select_Color, 3, 1, 216, MBASE(4), HMI_ValueStruct.Move_E_scale);
|
1119
|
1131
|
DWIN_UpdateLCD();
|
1120
|
1132
|
}
|
1121
|
1133
|
}
|
|
@@ -1125,7 +1137,7 @@ void HMI_Move_Z(void) {
|
1125
|
1137
|
void HMI_Zoffset(void) {
|
1126
|
1138
|
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
|
1127
|
1139
|
if (encoder_diffState != ENCODER_DIFF_NO) {
|
1128
|
|
- last_zoffset = zprobe_zoffset;
|
|
1140
|
+ last_zoffset = dwin_zoffset;
|
1129
|
1141
|
if (encoder_diffState == ENCODER_DIFF_CW) {
|
1130
|
1142
|
HMI_ValueStruct.offset_value += EncoderRate.encoderMoveValue;
|
1131
|
1143
|
}
|
|
@@ -1134,24 +1146,22 @@ void HMI_Zoffset(void) {
|
1134
|
1146
|
}
|
1135
|
1147
|
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
|
1136
|
1148
|
EncoderRate.encoderRateEnabled = 0;
|
1137
|
|
- zprobe_zoffset = HMI_ValueStruct.offset_value / 100;
|
|
1149
|
+ dwin_zoffset = HMI_ValueStruct.offset_value / 100;
|
1138
|
1150
|
#if HAS_BED_PROBE
|
1139
|
|
- if (WITHIN(zprobe_zoffset - last_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX))
|
1140
|
|
- probe.offset.z = zprobe_zoffset;
|
1141
|
|
- settings.save();
|
|
1151
|
+ if (WITHIN(dwin_zoffset - last_zoffset, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX))
|
|
1152
|
+ probe.offset.z = dwin_zoffset;
|
|
1153
|
+ TERN_(EEPROM_SETTINGS, settings.save());
|
1142
|
1154
|
#elif ENABLED(BABYSTEPPING)
|
1143
|
|
- babystep.add_mm(Z_AXIS, (zprobe_zoffset - last_zoffset));
|
1144
|
|
- #else
|
1145
|
|
- UNUSED(zprobe_zoffset - last_zoffset);
|
|
1155
|
+ babystep.add_mm(Z_AXIS, dwin_zoffset - last_zoffset);
|
1146
|
1156
|
#endif
|
1147
|
1157
|
|
1148
|
1158
|
if (HMI_ValueStruct.show_mode == -4) {
|
1149
|
1159
|
checkkey = Prepare;
|
1150
|
|
- show_plus_or_minus(font8x16, Background_black, 2, 2, 202, MBASE(4 + MROWS - index_prepare), TERN(HAS_BED_PROBE, probe.offset.z * 100, HMI_ValueStruct.offset_value));
|
|
1160
|
+ DWIN_Draw_Signed_Float(font8x16, Background_black, 2, 2, 202, MBASE(4 + MROWS - index_prepare), TERN(HAS_BED_PROBE, probe.offset.z * 100, HMI_ValueStruct.offset_value));
|
1151
|
1161
|
}
|
1152
|
1162
|
else {
|
1153
|
1163
|
checkkey = Tune;
|
1154
|
|
- show_plus_or_minus(font8x16, Background_black, 2, 2, 202, MBASE(5 + MROWS - index_tune), TERN(HAS_BED_PROBE, probe.offset.z * 100, HMI_ValueStruct.offset_value));
|
|
1164
|
+ DWIN_Draw_Signed_Float(font8x16, Background_black, 2, 2, 202, MBASE(5 + MROWS - index_tune), TERN(HAS_BED_PROBE, probe.offset.z * 100, HMI_ValueStruct.offset_value));
|
1155
|
1165
|
}
|
1156
|
1166
|
DWIN_UpdateLCD();
|
1157
|
1167
|
return;
|
|
@@ -1159,9 +1169,9 @@ void HMI_Zoffset(void) {
|
1159
|
1169
|
NOLESS(HMI_ValueStruct.offset_value, (Z_PROBE_OFFSET_RANGE_MIN) * 100);
|
1160
|
1170
|
NOMORE(HMI_ValueStruct.offset_value, (Z_PROBE_OFFSET_RANGE_MAX) * 100);
|
1161
|
1171
|
if (HMI_ValueStruct.show_mode == -4)
|
1162
|
|
- show_plus_or_minus(font8x16, Select_Color, 2, 2, 202, MBASE(4 + MROWS - index_prepare), HMI_ValueStruct.offset_value);
|
|
1172
|
+ DWIN_Draw_Signed_Float(font8x16, Select_Color, 2, 2, 202, MBASE(4 + MROWS - index_prepare), HMI_ValueStruct.offset_value);
|
1163
|
1173
|
else
|
1164
|
|
- show_plus_or_minus(font8x16, Select_Color, 2, 2, 202, MBASE(5 + MROWS - index_tune), HMI_ValueStruct.offset_value);
|
|
1174
|
+ DWIN_Draw_Signed_Float(font8x16, Select_Color, 2, 2, 202, MBASE(5 + MROWS - index_tune), HMI_ValueStruct.offset_value);
|
1165
|
1175
|
DWIN_UpdateLCD();
|
1166
|
1176
|
}
|
1167
|
1177
|
}
|
|
@@ -1213,7 +1223,7 @@ void HMI_Zoffset(void) {
|
1213
|
1223
|
}
|
1214
|
1224
|
}
|
1215
|
1225
|
|
1216
|
|
-#endif // if HAS_HOTEND
|
|
1226
|
+#endif // HAS_HOTEND
|
1217
|
1227
|
|
1218
|
1228
|
#if HAS_HEATED_BED
|
1219
|
1229
|
|
|
@@ -1262,7 +1272,7 @@ void HMI_Zoffset(void) {
|
1262
|
1272
|
}
|
1263
|
1273
|
}
|
1264
|
1274
|
|
1265
|
|
-#endif // if HAS_HEATED_BED
|
|
1275
|
+#endif // HAS_HEATED_BED
|
1266
|
1276
|
|
1267
|
1277
|
#if HAS_FAN
|
1268
|
1278
|
|
|
@@ -1311,7 +1321,7 @@ void HMI_Zoffset(void) {
|
1311
|
1321
|
}
|
1312
|
1322
|
}
|
1313
|
1323
|
|
1314
|
|
-#endif // if HAS_FAN
|
|
1324
|
+#endif // HAS_FAN
|
1315
|
1325
|
|
1316
|
1326
|
void HMI_PrintSpeed(void) {
|
1317
|
1327
|
ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
|
|
@@ -1515,27 +1525,20 @@ void update_variable(void) {
|
1515
|
1525
|
DWIN_Draw_IntValue(true, true, 0, STAT_FONT, White, Background_black, 3, 33 + 2 * STAT_CHR_W, 429, feedrate_percentage);
|
1516
|
1526
|
last_speed = feedrate_percentage;
|
1517
|
1527
|
}
|
1518
|
|
- #if HAS_BED_PROBE
|
1519
|
|
- if (last_probe_zoffset != probe.offset.z) {
|
1520
|
|
- show_plus_or_minus(STAT_FONT, Background_black, 2, 2, 178 + STAT_CHR_W, 429, probe.offset.z * 100);
|
1521
|
|
- last_probe_zoffset = probe.offset.z;
|
1522
|
|
- }
|
1523
|
|
- #else
|
1524
|
|
- if (last_zoffset != zprobe_zoffset) {
|
1525
|
|
- show_plus_or_minus(STAT_FONT, Background_black, 2, 2, 178 + STAT_CHR_W, 429, zprobe_zoffset * 100);
|
1526
|
|
- last_zoffset = zprobe_zoffset;
|
1527
|
|
- }
|
1528
|
|
- #endif
|
|
1528
|
+ if (last_zoffset != BABY_Z_VAR) {
|
|
1529
|
+ DWIN_Draw_Signed_Float(STAT_FONT, Background_black, 2, 2, 178 + STAT_CHR_W, 429, BABY_Z_VAR * 100);
|
|
1530
|
+ last_zoffset = BABY_Z_VAR;
|
|
1531
|
+ }
|
1529
|
1532
|
}
|
1530
|
1533
|
|
1531
|
1534
|
/**
|
1532
|
|
-* Read and cache the working directory.
|
1533
|
|
-*
|
1534
|
|
-* TODO: New code can follow the pattern of menu_media.cpp
|
1535
|
|
-* and rely on Marlin caching for performance. No need to
|
1536
|
|
-* cache files here.
|
1537
|
|
-*
|
1538
|
|
-*/
|
|
1535
|
+ * Read and cache the working directory.
|
|
1536
|
+ *
|
|
1537
|
+ * TODO: New code can follow the pattern of menu_media.cpp
|
|
1538
|
+ * and rely on Marlin caching for performance. No need to
|
|
1539
|
+ * cache files here.
|
|
1540
|
+ *
|
|
1541
|
+ */
|
1539
|
1542
|
|
1540
|
1543
|
#ifndef strcasecmp_P
|
1541
|
1544
|
#define strcasecmp_P(a, b) strcasecmp((a), (b))
|
|
@@ -1723,7 +1726,7 @@ void HMI_StartFrame(const bool with_update) {
|
1723
|
1726
|
DWIN_Draw_IntValue(true, true, 0, STAT_FONT, White, Background_black, 3, 33 + 2 * STAT_CHR_W, 429, feedrate_percentage);
|
1724
|
1727
|
DWIN_Draw_String(false, false, STAT_FONT, White, Background_black, 33 + (2 + 3) * STAT_CHR_W + 2, 429, F("%"));
|
1725
|
1728
|
|
1726
|
|
- show_plus_or_minus(STAT_FONT, Background_black, 2, 2, 178, 429, BABY_Z_VAR * 100);
|
|
1729
|
+ DWIN_Draw_Signed_Float(STAT_FONT, Background_black, 2, 2, 178, 429, BABY_Z_VAR * 100);
|
1727
|
1730
|
DWIN_Draw_String(false, false, STAT_FONT, White, Background_black, 33 + 3 * STAT_CHR_W + 5, 383, F("/"));
|
1728
|
1731
|
DWIN_Draw_String(false, false, STAT_FONT, White, Background_black, 178 + 3 * STAT_CHR_W + 5, 383, F("/"));
|
1729
|
1732
|
|
|
@@ -2223,7 +2226,7 @@ void HMI_Prepare(void) {
|
2223
|
2226
|
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 216, MBASE(1), current_position[X_AXIS] * MINUNITMULT);
|
2224
|
2227
|
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 216, MBASE(2), current_position[Y_AXIS] * MINUNITMULT);
|
2225
|
2228
|
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 216, MBASE(3), current_position[Z_AXIS] * MINUNITMULT);
|
2226
|
|
- show_plus_or_minus(font8x16, Background_black, 3, 1, 216, MBASE(4), current_position.e * MINUNITMULT);
|
|
2229
|
+ DWIN_Draw_Signed_Float(font8x16, Background_black, 3, 1, 216, MBASE(4), current_position.e * MINUNITMULT);
|
2227
|
2230
|
break;
|
2228
|
2231
|
case 2: // close motion
|
2229
|
2232
|
queue.inject_P(PSTR("M84"));
|
|
@@ -2237,9 +2240,9 @@ void HMI_Prepare(void) {
|
2237
|
2240
|
case 4: // Z-offset
|
2238
|
2241
|
#if HAS_BED_PROBE
|
2239
|
2242
|
checkkey = Homeoffset;
|
2240
|
|
- HMI_ValueStruct.show_mode = -4;
|
|
2243
|
+ HMI_ValueStruct.show_mode = -4;
|
2241
|
2244
|
HMI_ValueStruct.offset_value = probe.offset.z * 100;
|
2242
|
|
- show_plus_or_minus(font8x16, Select_Color, 2, 2, 202, MBASE(4 + MROWS - index_prepare), HMI_ValueStruct.offset_value);
|
|
2245
|
+ DWIN_Draw_Signed_Float(font8x16, Select_Color, 2, 2, 202, MBASE(4 + MROWS - index_prepare), HMI_ValueStruct.offset_value);
|
2243
|
2246
|
EncoderRate.encoderRateEnabled = 1;
|
2244
|
2247
|
#else
|
2245
|
2248
|
// Apply workspace offset, making the current position 0,0,0
|
|
@@ -2392,19 +2395,22 @@ void HMI_Control(void) {
|
2392
|
2395
|
select_motion.reset();
|
2393
|
2396
|
Draw_Motion_Menu();
|
2394
|
2397
|
break;
|
2395
|
|
- case 3: { // write EEPROM
|
2396
|
|
- const bool success = settings.save();
|
2397
|
|
- HMI_AudioFeedback(success);
|
2398
|
|
- } break;
|
2399
|
|
- case 4: { // read EEPROM
|
2400
|
|
- const bool success = settings.load();
|
2401
|
|
- HMI_AudioFeedback(success);
|
2402
|
|
- } break;
|
2403
|
|
- case 5: // resume EEPROM
|
2404
|
|
- settings.reset();
|
2405
|
|
- HMI_AudioFeedback();
|
2406
|
|
- break;
|
2407
|
|
- case 6: // info
|
|
2398
|
+ case 3:
|
|
2399
|
+ #if ENABLED(EEPROM_SETTINGS)
|
|
2400
|
+ { // write EEPROM
|
|
2401
|
+ const bool success = settings.save();
|
|
2402
|
+ HMI_AudioFeedback(success);
|
|
2403
|
+ } break;
|
|
2404
|
+ case 4: { // read EEPROM
|
|
2405
|
+ const bool success = settings.load();
|
|
2406
|
+ HMI_AudioFeedback(success);
|
|
2407
|
+ } break;
|
|
2408
|
+ case 5: // resume EEPROM
|
|
2409
|
+ settings.reset();
|
|
2410
|
+ HMI_AudioFeedback();
|
|
2411
|
+ break;
|
|
2412
|
+ case 6: // info
|
|
2413
|
+ #endif
|
2408
|
2414
|
checkkey = Info;
|
2409
|
2415
|
Draw_Info_Menu();
|
2410
|
2416
|
break;
|
|
@@ -2442,7 +2448,7 @@ void HMI_AxisMove(void) {
|
2442
|
2448
|
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 216, MBASE(1), HMI_ValueStruct.Move_X_scale);
|
2443
|
2449
|
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 216, MBASE(2), HMI_ValueStruct.Move_Y_scale);
|
2444
|
2450
|
DWIN_Draw_FloatValue(true, true, 0, font8x16, White, Background_black, 3, 1, 216, MBASE(3), HMI_ValueStruct.Move_Z_scale);
|
2445
|
|
- show_plus_or_minus(font8x16, Background_black, 3, 1, 216, MBASE(4), HMI_ValueStruct.Move_E_scale);
|
|
2451
|
+ DWIN_Draw_Signed_Float(font8x16, Background_black, 3, 1, 216, MBASE(4), HMI_ValueStruct.Move_E_scale);
|
2446
|
2452
|
DWIN_UpdateLCD();
|
2447
|
2453
|
}
|
2448
|
2454
|
return;
|
|
@@ -2495,7 +2501,7 @@ void HMI_AxisMove(void) {
|
2495
|
2501
|
#endif
|
2496
|
2502
|
checkkey = Extruder;
|
2497
|
2503
|
HMI_ValueStruct.Move_E_scale = current_position.e * MINUNITMULT;
|
2498
|
|
- show_plus_or_minus(font8x16, Select_Color, 3, 1, 216, MBASE(4), HMI_ValueStruct.Move_E_scale);
|
|
2504
|
+ DWIN_Draw_Signed_Float(font8x16, Select_Color, 3, 1, 216, MBASE(4), HMI_ValueStruct.Move_E_scale);
|
2499
|
2505
|
EncoderRate.encoderRateEnabled = 1;
|
2500
|
2506
|
break;
|
2501
|
2507
|
#endif
|
|
@@ -2593,7 +2599,9 @@ void HMI_Temperature(void) {
|
2593
|
2599
|
Draw_Menu_Line(1, ICON_SetEndTemp);
|
2594
|
2600
|
Draw_Menu_Line(2, ICON_SetBedTemp);
|
2595
|
2601
|
Draw_Menu_Line(3, ICON_FanSpeed);
|
2596
|
|
- Draw_Menu_Line(4, ICON_WriteEEPROM);
|
|
2602
|
+ #if ENABLED(EEPROM_SETTINGS)
|
|
2603
|
+ Draw_Menu_Line(4, ICON_WriteEEPROM);
|
|
2604
|
+ #endif
|
2597
|
2605
|
|
2598
|
2606
|
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(1), ui.material_preset[0].hotend_temp);
|
2599
|
2607
|
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(2), ui.material_preset[0].bed_temp);
|
|
@@ -2647,14 +2655,16 @@ void HMI_Temperature(void) {
|
2647
|
2655
|
Draw_Menu_Line(1, ICON_SetEndTemp);
|
2648
|
2656
|
Draw_Menu_Line(2, ICON_SetBedTemp);
|
2649
|
2657
|
Draw_Menu_Line(3, ICON_FanSpeed);
|
2650
|
|
- Draw_Menu_Line(4, ICON_WriteEEPROM);
|
|
2658
|
+ #if ENABLED(EEPROM_SETTINGS)
|
|
2659
|
+ Draw_Menu_Line(4, ICON_WriteEEPROM);
|
|
2660
|
+ #endif
|
2651
|
2661
|
|
2652
|
2662
|
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(1), ui.material_preset[1].hotend_temp);
|
2653
|
2663
|
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(2), ui.material_preset[1].bed_temp);
|
2654
|
2664
|
DWIN_Draw_IntValue(true, true, 0, font8x16, White, Background_black, 3, 216, MBASE(3), ui.material_preset[1].fan_speed);
|
2655
|
2665
|
|
2656
|
2666
|
break;
|
2657
|
|
- #endif // if HAS_HOTEND
|
|
2667
|
+ #endif // HAS_HOTEND
|
2658
|
2668
|
}
|
2659
|
2669
|
}
|
2660
|
2670
|
DWIN_UpdateLCD();
|
|
@@ -2996,7 +3006,7 @@ void HMI_Tune(void) {
|
2996
|
3006
|
case 5: // Z-offset
|
2997
|
3007
|
checkkey = Homeoffset;
|
2998
|
3008
|
HMI_ValueStruct.offset_value = BABY_Z_VAR * 100;
|
2999
|
|
- show_plus_or_minus(font8x16, Select_Color, 2, 2, 202, MBASE(5 + MROWS - index_tune), HMI_ValueStruct.offset_value);
|
|
3009
|
+ DWIN_Draw_Signed_Float(font8x16, Select_Color, 2, 2, 202, MBASE(5 + MROWS - index_tune), HMI_ValueStruct.offset_value);
|
3000
|
3010
|
EncoderRate.encoderRateEnabled = 1;
|
3001
|
3011
|
break;
|
3002
|
3012
|
case 6: // Language
|
|
@@ -3067,10 +3077,12 @@ void HMI_PLAPreheatSetting(void) {
|
3067
|
3077
|
EncoderRate.encoderRateEnabled = 1;
|
3068
|
3078
|
break;
|
3069
|
3079
|
#endif
|
3070
|
|
- case 4: { // save PLA configuration
|
3071
|
|
- const bool success = settings.save();
|
3072
|
|
- HMI_AudioFeedback(success);
|
3073
|
|
- } break;
|
|
3080
|
+ #if ENABLED(EEPROM_SETTINGS)
|
|
3081
|
+ case 4: { // save PLA configuration
|
|
3082
|
+ const bool success = settings.save();
|
|
3083
|
+ HMI_AudioFeedback(success);
|
|
3084
|
+ } break;
|
|
3085
|
+ #endif
|
3074
|
3086
|
default: break;
|
3075
|
3087
|
}
|
3076
|
3088
|
}
|
|
@@ -3121,10 +3133,12 @@ void HMI_ABSPreheatSetting(void) {
|
3121
|
3133
|
EncoderRate.encoderRateEnabled = 1;
|
3122
|
3134
|
break;
|
3123
|
3135
|
#endif
|
3124
|
|
- case 4: { // save ABS configuration
|
3125
|
|
- const bool success = settings.save();
|
3126
|
|
- HMI_AudioFeedback(success);
|
3127
|
|
- } break;
|
|
3136
|
+ #if ENABLED(EEPROM_SETTINGS)
|
|
3137
|
+ case 4: { // save ABS configuration
|
|
3138
|
+ const bool success = settings.save();
|
|
3139
|
+ HMI_AudioFeedback(success);
|
|
3140
|
+ } break;
|
|
3141
|
+ #endif
|
3128
|
3142
|
default:
|
3129
|
3143
|
break;
|
3130
|
3144
|
}
|
|
@@ -3441,7 +3455,7 @@ void EachMomentUpdate(void) {
|
3441
|
3455
|
else if (abort_flag && !HMI_flag.home_flag) { // Print Stop
|
3442
|
3456
|
abort_flag = 0;
|
3443
|
3457
|
HMI_ValueStruct.print_speed = feedrate_percentage = 100;
|
3444
|
|
- zprobe_zoffset = TERN(HAS_BED_PROBE, probe.offset.z, 0);
|
|
3458
|
+ dwin_zoffset = TERN0(HAS_BED_PROBE, probe.offset.z);
|
3445
|
3459
|
|
3446
|
3460
|
planner.finish_and_disable();
|
3447
|
3461
|
|
|
@@ -3452,70 +3466,72 @@ void EachMomentUpdate(void) {
|
3452
|
3466
|
select_page.set(0);
|
3453
|
3467
|
Goto_MainMenu();
|
3454
|
3468
|
}
|
3455
|
|
- else if (DWIN_lcd_sd_status && recovery.dwin_flag) { // resume print before power off
|
3456
|
|
- recovery.dwin_flag = false;
|
3457
|
|
-
|
3458
|
|
- recovery.load();
|
3459
|
|
- if (!recovery.valid()) return recovery.purge();
|
3460
|
|
-
|
3461
|
|
- auto draw_first_option = [](const bool sel) {
|
3462
|
|
- const uint16_t c1 = sel ? Background_window : Select_Color;
|
3463
|
|
- DWIN_Draw_Rectangle(0, c1, 25, 306, 126, 345);
|
3464
|
|
- DWIN_Draw_Rectangle(0, c1, 24, 305, 127, 346);
|
3465
|
|
- };
|
3466
|
|
-
|
3467
|
|
- auto update_selection = [&](const bool sel) {
|
3468
|
|
- HMI_flag.select_flag = sel;
|
3469
|
|
- draw_first_option(sel);
|
3470
|
|
- const uint16_t c2 = sel ? Select_Color : Background_window;
|
3471
|
|
- DWIN_Draw_Rectangle(0, c2, 145, 306, 246, 345);
|
3472
|
|
- DWIN_Draw_Rectangle(0, c2, 144, 305, 247, 346);
|
3473
|
|
- };
|
3474
|
|
-
|
3475
|
|
- const uint16_t fileCnt = card.get_num_Files();
|
3476
|
|
- for (uint16_t i = 0; i < fileCnt; i++) {
|
3477
|
|
- // TODO: Resume print via M1000 then update the UI
|
3478
|
|
- // with the active filename which can come from CardReader.
|
3479
|
|
- card.getfilename_sorted(SD_ORDER(i, fileCnt));
|
3480
|
|
- if (!strcmp(card.filename, &recovery.info.sd_filename[1])) { // Resume print before power failure while have the same file
|
3481
|
|
- recovery_flag = 1;
|
3482
|
|
- HMI_flag.select_flag = 1;
|
3483
|
|
- Popup_Window_Resume();
|
3484
|
|
- draw_first_option(false);
|
3485
|
|
- char * const name = card.longest_filename();
|
3486
|
|
- const int8_t npos = _MAX(0, DWIN_WIDTH - strlen(name) * (MENU_CHR_W)) / 2;
|
3487
|
|
- DWIN_Draw_String(false, true, font8x16, Font_window, Background_window, npos, 252, name);
|
3488
|
|
- DWIN_UpdateLCD();
|
3489
|
|
- break;
|
|
3469
|
+ #if ENABLED(POWER_LOSS_RECOVERY)
|
|
3470
|
+ else if (DWIN_lcd_sd_status && recovery.dwin_flag) { // resume print before power off
|
|
3471
|
+ recovery.dwin_flag = false;
|
|
3472
|
+
|
|
3473
|
+ recovery.load();
|
|
3474
|
+ if (!recovery.valid()) return recovery.purge();
|
|
3475
|
+
|
|
3476
|
+ auto draw_first_option = [](const bool sel) {
|
|
3477
|
+ const uint16_t c1 = sel ? Background_window : Select_Color;
|
|
3478
|
+ DWIN_Draw_Rectangle(0, c1, 25, 306, 126, 345);
|
|
3479
|
+ DWIN_Draw_Rectangle(0, c1, 24, 305, 127, 346);
|
|
3480
|
+ };
|
|
3481
|
+
|
|
3482
|
+ auto update_selection = [&](const bool sel) {
|
|
3483
|
+ HMI_flag.select_flag = sel;
|
|
3484
|
+ draw_first_option(sel);
|
|
3485
|
+ const uint16_t c2 = sel ? Select_Color : Background_window;
|
|
3486
|
+ DWIN_Draw_Rectangle(0, c2, 145, 306, 246, 345);
|
|
3487
|
+ DWIN_Draw_Rectangle(0, c2, 144, 305, 247, 346);
|
|
3488
|
+ };
|
|
3489
|
+
|
|
3490
|
+ const uint16_t fileCnt = card.get_num_Files();
|
|
3491
|
+ for (uint16_t i = 0; i < fileCnt; i++) {
|
|
3492
|
+ // TODO: Resume print via M1000 then update the UI
|
|
3493
|
+ // with the active filename which can come from CardReader.
|
|
3494
|
+ card.getfilename_sorted(SD_ORDER(i, fileCnt));
|
|
3495
|
+ if (!strcmp(card.filename, &recovery.info.sd_filename[1])) { // Resume print before power failure while have the same file
|
|
3496
|
+ recovery_flag = 1;
|
|
3497
|
+ HMI_flag.select_flag = 1;
|
|
3498
|
+ Popup_Window_Resume();
|
|
3499
|
+ draw_first_option(false);
|
|
3500
|
+ char * const name = card.longest_filename();
|
|
3501
|
+ const int8_t npos = _MAX(0, DWIN_WIDTH - strlen(name) * (MENU_CHR_W)) / 2;
|
|
3502
|
+ DWIN_Draw_String(false, true, font8x16, Font_window, Background_window, npos, 252, name);
|
|
3503
|
+ DWIN_UpdateLCD();
|
|
3504
|
+ break;
|
|
3505
|
+ }
|
3490
|
3506
|
}
|
3491
|
|
- }
|
3492
|
3507
|
|
3493
|
|
- // if hasn't resumable G-code file
|
3494
|
|
- if (!recovery_flag) return;
|
|
3508
|
+ // if hasn't resumable G-code file
|
|
3509
|
+ if (!recovery_flag) return;
|
|
3510
|
+
|
|
3511
|
+ while (recovery_flag) {
|
|
3512
|
+ ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
|
|
3513
|
+ if (encoder_diffState != ENCODER_DIFF_NO) {
|
|
3514
|
+ if (encoder_diffState == ENCODER_DIFF_ENTER) {
|
|
3515
|
+ recovery_flag = 0;
|
|
3516
|
+ if (HMI_flag.select_flag) break;
|
|
3517
|
+ TERN_(POWER_LOSS_RECOVERY, recovery.cancel());
|
|
3518
|
+ HMI_StartFrame(true);
|
|
3519
|
+ return;
|
|
3520
|
+ }
|
|
3521
|
+ else
|
|
3522
|
+ update_selection(encoder_diffState == ENCODER_DIFF_CCW);
|
3495
|
3523
|
|
3496
|
|
- while (recovery_flag) {
|
3497
|
|
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
|
3498
|
|
- if (encoder_diffState != ENCODER_DIFF_NO) {
|
3499
|
|
- if (encoder_diffState == ENCODER_DIFF_ENTER) {
|
3500
|
|
- recovery_flag = 0;
|
3501
|
|
- if (HMI_flag.select_flag) break;
|
3502
|
|
- TERN_(POWER_LOSS_RECOVERY, recovery.cancel());
|
3503
|
|
- HMI_StartFrame(true);
|
3504
|
|
- return;
|
|
3524
|
+ DWIN_UpdateLCD();
|
3505
|
3525
|
}
|
3506
|
|
- else
|
3507
|
|
- update_selection(encoder_diffState == ENCODER_DIFF_CCW);
|
3508
|
|
-
|
3509
|
|
- DWIN_UpdateLCD();
|
3510
|
3526
|
}
|
3511
|
|
- }
|
3512
|
3527
|
|
3513
|
|
- select_print.set(0);
|
3514
|
|
- HMI_ValueStruct.show_mode = 0;
|
3515
|
|
- HMI_StartFrame(false);
|
3516
|
|
- recovery.resume();
|
3517
|
|
- return;
|
3518
|
|
- }
|
|
3528
|
+ select_print.set(0);
|
|
3529
|
+ HMI_ValueStruct.show_mode = 0;
|
|
3530
|
+ HMI_StartFrame(false);
|
|
3531
|
+ recovery.resume();
|
|
3532
|
+ return;
|
|
3533
|
+ }
|
|
3534
|
+ #endif
|
3519
|
3535
|
DWIN_UpdateLCD();
|
3520
|
3536
|
}
|
3521
|
3537
|
|
|
@@ -3572,7 +3588,7 @@ void DWIN_CompletedHoming(void) {
|
3572
|
3588
|
}
|
3573
|
3589
|
else if (checkkey == Back_Main) {
|
3574
|
3590
|
HMI_ValueStruct.print_speed = feedrate_percentage = 100;
|
3575
|
|
- zprobe_zoffset = TERN0(BLTOUCH, probe.offset.z);
|
|
3591
|
+ dwin_zoffset = TERN0(HAS_BED_PROBE, probe.offset.z);
|
3576
|
3592
|
planner.finish_and_disable();
|
3577
|
3593
|
Goto_MainMenu();
|
3578
|
3594
|
}
|