Переглянути джерело

Allow E3 V2 DWIN without EEPROM, POWER_LOSS_RECOVERY

Scott Lahteine 3 роки тому
джерело
коміт
0f9eb480aa

+ 163
- 147
Marlin/src/lcd/dwin/e3v2/dwin.cpp Переглянути файл

@@ -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
   }

+ 1
- 1
Marlin/src/lcd/dwin/e3v2/dwin.h Переглянути файл

@@ -318,7 +318,7 @@ void HMI_MaxCornerXYZE(void);
318 318
 void HMI_StepXYZE(void);
319 319
 
320 320
 void update_variable(void);
321
-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);
321
+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);
322 322
 
323 323
 // SD Card
324 324
 void HMI_SDCardInit(void);

+ 1
- 1
Marlin/src/lcd/extui/ui_api.cpp Переглянути файл

@@ -759,7 +759,7 @@ namespace ExtUI {
759 759
       if (WITHIN(value, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX))
760 760
         probe.offset.z = value;
761 761
     #elif ENABLED(BABYSTEP_DISPLAY_TOTAL)
762
-      babystep.add_mm(Z_AXIS, (value - getZOffset_mm()));
762
+      babystep.add_mm(Z_AXIS, value - getZOffset_mm());
763 763
     #else
764 764
       UNUSED(value);
765 765
     #endif

Завантаження…
Відмінити
Зберегти