Browse Source

♻️ Set Progress without LCD (#24767)

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
EvilGremlin 1 year ago
parent
commit
f595e40ceb
34 changed files with 627 additions and 488 deletions
  1. 1
    0
      .gitignore
  2. 29
    32
      Marlin/Configuration_adv.h
  3. 1
    1
      Marlin/src/MarlinCore.cpp
  4. 2
    2
      Marlin/src/gcode/gcode.cpp
  5. 2
    2
      Marlin/src/gcode/gcode.h
  6. 1
    1
      Marlin/src/gcode/host/M115.cpp
  7. 45
    9
      Marlin/src/gcode/lcd/M73.cpp
  8. 2
    2
      Marlin/src/gcode/sd/M1001.cpp
  9. 1
    1
      Marlin/src/gcode/sd/M23.cpp
  10. 0
    4
      Marlin/src/inc/Conditionals_LCD.h
  11. 7
    1
      Marlin/src/inc/Conditionals_adv.h
  12. 15
    11
      Marlin/src/inc/SanityCheck.h
  13. 61
    62
      Marlin/src/lcd/HD44780/marlinui_HD44780.cpp
  14. 1
    1
      Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp
  15. 95
    129
      Marlin/src/lcd/dogm/status_screen_DOGM.cpp
  16. 194
    133
      Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp
  17. 14
    3
      Marlin/src/lcd/dogm/status_screen_lite_ST7920.h
  18. 7
    7
      Marlin/src/lcd/e3v2/jyersui/dwin.cpp
  19. 1
    1
      Marlin/src/lcd/e3v2/jyersui/dwin.h
  20. 3
    3
      Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp
  21. 2
    2
      Marlin/src/lcd/e3v2/proui/dwin.cpp
  22. 1
    1
      Marlin/src/lcd/extui/dgus/fysetc/DGUSDisplayDef.cpp
  23. 1
    1
      Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp
  24. 1
    1
      Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp
  25. 2
    2
      Marlin/src/lcd/extui/mks_ui/draw_printing.cpp
  26. 3
    0
      Marlin/src/lcd/extui/ui_api.h
  27. 41
    17
      Marlin/src/lcd/marlinui.cpp
  28. 26
    6
      Marlin/src/lcd/marlinui.h
  29. 1
    1
      Marlin/src/lcd/menu/menu.cpp
  30. 2
    2
      Marlin/src/libs/numtostr.cpp
  31. 1
    1
      buildroot/tests/SAMD51_grandcentral_m4
  32. 1
    1
      buildroot/tests/STM32F103RE_creality
  33. 62
    47
      buildroot/tests/mega2560
  34. 1
    1
      ini/features.ini

+ 1
- 0
.gitignore View File

147
 imgui.ini
147
 imgui.ini
148
 eeprom.dat
148
 eeprom.dat
149
 spi_flash.bin
149
 spi_flash.bin
150
+fs.img
150
 
151
 
151
 #cmake
152
 #cmake
152
 CMakeLists.txt
153
 CMakeLists.txt

+ 29
- 32
Marlin/Configuration_adv.h View File

1403
   // On the Info Screen, display XY with one decimal place when possible
1403
   // On the Info Screen, display XY with one decimal place when possible
1404
   //#define LCD_DECIMAL_SMALL_XY
1404
   //#define LCD_DECIMAL_SMALL_XY
1405
 
1405
 
1406
-  // Add an 'M73' G-code to set the current percentage
1407
-  //#define LCD_SET_PROGRESS_MANUALLY
1408
-
1409
   // Show the E position (filament used) during printing
1406
   // Show the E position (filament used) during printing
1410
   //#define LCD_SHOW_E_TOTAL
1407
   //#define LCD_SHOW_E_TOTAL
1411
 
1408
 
1426
       //#define LED_USER_PRESET_STARTUP       // Have the printer display the user preset color on startup
1423
       //#define LED_USER_PRESET_STARTUP       // Have the printer display the user preset color on startup
1427
     #endif
1424
     #endif
1428
     #if ENABLED(NEO2_COLOR_PRESETS)
1425
     #if ENABLED(NEO2_COLOR_PRESETS)
1429
-      #define NEO2_USER_PRESET_RED        255  // User defined RED value
1430
-      #define NEO2_USER_PRESET_GREEN      128  // User defined GREEN value
1431
-      #define NEO2_USER_PRESET_BLUE         0  // User defined BLUE value
1432
-      #define NEO2_USER_PRESET_WHITE      255  // User defined WHITE value
1433
-      #define NEO2_USER_PRESET_BRIGHTNESS 255  // User defined intensity
1434
-      //#define NEO2_USER_PRESET_STARTUP       // Have the printer display the user preset color on startup for the second strip
1426
+      #define NEO2_USER_PRESET_RED        255 // User defined RED value
1427
+      #define NEO2_USER_PRESET_GREEN      128 // User defined GREEN value
1428
+      #define NEO2_USER_PRESET_BLUE         0 // User defined BLUE value
1429
+      #define NEO2_USER_PRESET_WHITE      255 // User defined WHITE value
1430
+      #define NEO2_USER_PRESET_BRIGHTNESS 255 // User defined intensity
1431
+      //#define NEO2_USER_PRESET_STARTUP      // Have the printer display the user preset color on startup for the second strip
1435
     #endif
1432
     #endif
1436
   #endif
1433
   #endif
1437
 
1434
 
1438
-#endif
1435
+#endif // HAS_DISPLAY || DWIN_LCD_PROUI
1439
 
1436
 
1440
-// LCD Print Progress options
1441
-#if EITHER(SDSUPPORT, LCD_SET_PROGRESS_MANUALLY)
1442
-  #if CAN_SHOW_REMAINING_TIME
1443
-    //#define SHOW_REMAINING_TIME         // Display estimated time to completion
1444
-    #if ENABLED(SHOW_REMAINING_TIME)
1445
-      //#define USE_M73_REMAINING_TIME    // Use remaining time from M73 command instead of estimation
1446
-      //#define ROTATE_PROGRESS_DISPLAY   // Display (P)rogress, (E)lapsed, and (R)emaining time
1447
-    #endif
1437
+// Add the G-code 'M73' to set / report the current job progress
1438
+//#define SET_PROGRESS_MANUALLY
1439
+#if ENABLED(SET_PROGRESS_MANUALLY)
1440
+  //#define SET_PROGRESS_PERCENT          // Add 'P' parameter to set percentage done, otherwise use Marlin's estimate
1441
+  //#define SET_REMAINING_TIME            // Add 'R' parameter to set remaining time, otherwise use Marlin's estimate
1442
+  //#define SET_INTERACTION_TIME          // Add 'C' parameter to set time until next filament change or other user interaction
1443
+  #if ENABLED(SET_INTERACTION_TIME)
1444
+    #define SHOW_INTERACTION_TIME         // Display time until next user interaction ('C' = filament change)
1448
   #endif
1445
   #endif
1446
+  //#define M73_REPORT                    // Report progress to host with 'M73'
1447
+#endif
1449
 
1448
 
1450
-  #if EITHER(HAS_MARLINUI_U8GLIB, EXTENSIBLE_UI)
1451
-    //#define PRINT_PROGRESS_SHOW_DECIMALS // Show progress with decimal digits
1452
-  #endif
1449
+// LCD Print Progress options, multiple can be rotated depending on screen layout
1450
+#if HAS_DISPLAY && EITHER(SDSUPPORT, SET_PROGRESS_MANUALLY)
1451
+  #define SHOW_PROGRESS_PERCENT           // Show print progress percentage (doesn't affect progress bar)
1452
+  #define SHOW_ELAPSED_TIME               // Display elapsed printing time (prefix 'E')
1453
+  //#define SHOW_REMAINING_TIME           // Display estimated time to completion (prefix 'R')
1454
+
1455
+  //#define PRINT_PROGRESS_SHOW_DECIMALS  // Show/report progress with decimal digits, not all UIs support this
1453
 
1456
 
1454
   #if EITHER(HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL)
1457
   #if EITHER(HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL)
1455
     //#define LCD_PROGRESS_BAR            // Show a progress bar on HD44780 LCDs for SD printing
1458
     //#define LCD_PROGRESS_BAR            // Show a progress bar on HD44780 LCDs for SD printing
1456
     #if ENABLED(LCD_PROGRESS_BAR)
1459
     #if ENABLED(LCD_PROGRESS_BAR)
1457
       #define PROGRESS_BAR_BAR_TIME 2000  // (ms) Amount of time to show the bar
1460
       #define PROGRESS_BAR_BAR_TIME 2000  // (ms) Amount of time to show the bar
1458
       #define PROGRESS_BAR_MSG_TIME 3000  // (ms) Amount of time to show the status message
1461
       #define PROGRESS_BAR_MSG_TIME 3000  // (ms) Amount of time to show the status message
1459
-      #define PROGRESS_MSG_EXPIRE   0     // (ms) Amount of time to retain the status message (0=forever)
1462
+      #define PROGRESS_MSG_EXPIRE      0  // (ms) Amount of time to retain the status message (0=forever)
1460
       //#define PROGRESS_MSG_ONCE         // Show the message for MSG_TIME then clear it
1463
       //#define PROGRESS_MSG_ONCE         // Show the message for MSG_TIME then clear it
1461
       //#define LCD_PROGRESS_BAR_TEST     // Add a menu item to test the progress bar
1464
       //#define LCD_PROGRESS_BAR_TEST     // Add a menu item to test the progress bar
1462
     #endif
1465
     #endif
1799
 #endif // HAS_MARLINUI_U8GLIB
1802
 #endif // HAS_MARLINUI_U8GLIB
1800
 
1803
 
1801
 #if HAS_MARLINUI_U8GLIB || IS_DWIN_MARLINUI
1804
 #if HAS_MARLINUI_U8GLIB || IS_DWIN_MARLINUI
1802
-  // Show SD percentage next to the progress bar
1803
-  //#define SHOW_SD_PERCENT
1804
-
1805
-  // Enable to save many cycles by drawing a hollow frame on Menu Screens
1806
-  #define MENU_HOLLOW_FRAME
1807
-
1808
-  // Swap the CW/CCW indicators in the graphics overlay
1809
-  //#define OVERLAY_GFX_REVERSE
1805
+  #define MENU_HOLLOW_FRAME           // Enable to save many cycles by drawing a hollow frame on Menu Screens
1806
+  //#define OVERLAY_GFX_REVERSE       // Swap the CW/CCW indicators in the graphics overlay
1810
 #endif
1807
 #endif
1811
 
1808
 
1812
 //
1809
 //
2064
  */
2061
  */
2065
 //#define LIN_ADVANCE
2062
 //#define LIN_ADVANCE
2066
 #if ENABLED(LIN_ADVANCE)
2063
 #if ENABLED(LIN_ADVANCE)
2067
-  //#define EXTRA_LIN_ADVANCE_K // Add a second linear advance constant, configurable with M900.
2064
+  //#define EXTRA_LIN_ADVANCE_K // Add a second linear advance constant, configurable with M900 L.
2068
   #define LIN_ADVANCE_K 0.22    // Unit: mm compression per 1mm/s extruder speed
2065
   #define LIN_ADVANCE_K 0.22    // Unit: mm compression per 1mm/s extruder speed
2069
   //#define LA_DEBUG            // Print debug information to serial during operation. Disable for production use.
2066
   //#define LA_DEBUG            // Print debug information to serial during operation. Disable for production use.
2070
   //#define EXPERIMENTAL_SCURVE // Allow S-Curve Acceleration to be used with LA.
2067
   //#define EXPERIMENTAL_SCURVE // Allow S-Curve Acceleration to be used with LA.
4058
 
4055
 
4059
 /**
4056
 /**
4060
  * Mechanical Gantry Calibration
4057
  * Mechanical Gantry Calibration
4061
- * Modern replacement for the Prusa TMC_Z_CALIBRATION.
4058
+ * Modern replacement for the Průša TMC_Z_CALIBRATION.
4062
  * Adds capability to work with any adjustable current drivers.
4059
  * Adds capability to work with any adjustable current drivers.
4063
  * Implemented as G34 because M915 is deprecated.
4060
  * Implemented as G34 because M915 is deprecated.
4064
  * @section calibrate
4061
  * @section calibrate

+ 1
- 1
Marlin/src/MarlinCore.cpp View File

347
     TERN_(GCODE_REPEAT_MARKERS, repeat.reset());
347
     TERN_(GCODE_REPEAT_MARKERS, repeat.reset());
348
     TERN_(CANCEL_OBJECTS, cancelable.reset());
348
     TERN_(CANCEL_OBJECTS, cancelable.reset());
349
     TERN_(LCD_SHOW_E_TOTAL, e_move_accumulator = 0);
349
     TERN_(LCD_SHOW_E_TOTAL, e_move_accumulator = 0);
350
-    #if BOTH(LCD_SET_PROGRESS_MANUALLY, USE_M73_REMAINING_TIME)
350
+    #if ENABLED(SET_REMAINING_TIME)
351
       ui.reset_remaining_time();
351
       ui.reset_remaining_time();
352
     #endif
352
     #endif
353
   }
353
   }

+ 2
- 2
Marlin/src/gcode/gcode.cpp View File

561
         case 48: M48(); break;                                    // M48: Z probe repeatability test
561
         case 48: M48(); break;                                    // M48: Z probe repeatability test
562
       #endif
562
       #endif
563
 
563
 
564
-      #if ENABLED(LCD_SET_PROGRESS_MANUALLY)
565
-        case 73: M73(); break;                                    // M73: Set progress percentage (for display on LCD)
564
+      #if ENABLED(SET_PROGRESS_MANUALLY)
565
+        case 73: M73(); break;                                    // M73: Set progress percentage
566
       #endif
566
       #endif
567
 
567
 
568
       case 75: M75(); break;                                      // M75: Start print timer
568
       case 75: M75(); break;                                      // M75: Start print timer

+ 2
- 2
Marlin/src/gcode/gcode.h View File

114
  * M43  - Display pin status, watch pins for changes, watch endstops & toggle LED, Z servo probe test, toggle pins (Requires PINS_DEBUGGING)
114
  * M43  - Display pin status, watch pins for changes, watch endstops & toggle LED, Z servo probe test, toggle pins (Requires PINS_DEBUGGING)
115
  * M48  - Measure Z Probe repeatability: M48 P<points> X<pos> Y<pos> V<level> E<engage> L<legs> S<chizoid>. (Requires Z_MIN_PROBE_REPEATABILITY_TEST)
115
  * M48  - Measure Z Probe repeatability: M48 P<points> X<pos> Y<pos> V<level> E<engage> L<legs> S<chizoid>. (Requires Z_MIN_PROBE_REPEATABILITY_TEST)
116
  *
116
  *
117
- * M73  - Set the progress percentage. (Requires LCD_SET_PROGRESS_MANUALLY)
117
+ * M73  - Set the progress percentage. (Requires SET_PROGRESS_MANUALLY)
118
  * M75  - Start the print job timer.
118
  * M75  - Start the print job timer.
119
  * M76  - Pause the print job timer.
119
  * M76  - Pause the print job timer.
120
  * M77  - Stop the print job timer.
120
  * M77  - Stop the print job timer.
677
     static void M48();
677
     static void M48();
678
   #endif
678
   #endif
679
 
679
 
680
-  #if ENABLED(LCD_SET_PROGRESS_MANUALLY)
680
+  #if ENABLED(SET_PROGRESS_MANUALLY)
681
     static void M73();
681
     static void M73();
682
   #endif
682
   #endif
683
 
683
 

+ 1
- 1
Marlin/src/gcode/host/M115.cpp View File

142
     cap_line(F("LEVELING_DATA"), ENABLED(HAS_LEVELING));
142
     cap_line(F("LEVELING_DATA"), ENABLED(HAS_LEVELING));
143
 
143
 
144
     // BUILD_PERCENT (M73)
144
     // BUILD_PERCENT (M73)
145
-    cap_line(F("BUILD_PERCENT"), ENABLED(LCD_SET_PROGRESS_MANUALLY));
145
+    cap_line(F("BUILD_PERCENT"), ENABLED(SET_PROGRESS_PERCENT));
146
 
146
 
147
     // SOFTWARE_POWER (M80, M81)
147
     // SOFTWARE_POWER (M80, M81)
148
     cap_line(F("SOFTWARE_POWER"), ENABLED(PSU_CONTROL));
148
     cap_line(F("SOFTWARE_POWER"), ENABLED(PSU_CONTROL));

+ 45
- 9
Marlin/src/gcode/lcd/M73.cpp View File

22
 
22
 
23
 #include "../../inc/MarlinConfig.h"
23
 #include "../../inc/MarlinConfig.h"
24
 
24
 
25
-#if ENABLED(LCD_SET_PROGRESS_MANUALLY)
25
+#if ENABLED(SET_PROGRESS_MANUALLY)
26
 
26
 
27
 #include "../gcode.h"
27
 #include "../gcode.h"
28
 #include "../../lcd/marlinui.h"
28
 #include "../../lcd/marlinui.h"
29
 #include "../../sd/cardreader.h"
29
 #include "../../sd/cardreader.h"
30
+#include "../../libs/numtostr.h"
30
 
31
 
31
 #if ENABLED(DWIN_LCD_PROUI)
32
 #if ENABLED(DWIN_LCD_PROUI)
32
   #include "../../lcd/e3v2/proui/dwin.h"
33
   #include "../../lcd/e3v2/proui/dwin.h"
33
 #endif
34
 #endif
34
 
35
 
36
+#if ENABLED(M73_REPORT)
37
+  #define M73_REPORT_PRUSA
38
+#endif
39
+
35
 /**
40
 /**
36
  * M73: Set percentage complete (for display on LCD)
41
  * M73: Set percentage complete (for display on LCD)
37
  *
42
  *
38
  * Example:
43
  * Example:
39
- *   M73 P25 ; Set progress to 25%
44
+ *   M73 P25.63 ; Set progress to 25.63%
45
+ *   M73 R456   ; Set remaining time to 456 minutes
46
+ *   M73 C12    ; Set next interaction countdown to 12 minutes
47
+ *   M73        ; Report current values
48
+ *
49
+ * Use a shorter-than-Průša report format:
50
+ * M73 Percent done: ---%; Time left: -----m; Change: -----m;
51
+ *
52
+ * When PRINT_PROGRESS_SHOW_DECIMALS is enabled - reports percent with 100 / 23.4 / 3.45 format
53
+ *
40
  */
54
  */
41
 void GcodeSuite::M73() {
55
 void GcodeSuite::M73() {
42
 
56
 
46
 
60
 
47
   #else
61
   #else
48
 
62
 
49
-    if (parser.seenval('P'))
50
-      ui.set_progress((PROGRESS_SCALE) > 1
51
-        ? parser.value_float() * (PROGRESS_SCALE)
52
-        : parser.value_byte()
53
-      );
63
+    #if ENABLED(SET_PROGRESS_PERCENT)
64
+      if (parser.seenval('P'))
65
+        ui.set_progress((PROGRESS_SCALE) > 1
66
+          ? parser.value_float() * (PROGRESS_SCALE)
67
+          : parser.value_byte()
68
+        );
69
+    #endif
54
 
70
 
55
-    #if ENABLED(USE_M73_REMAINING_TIME)
71
+    #if ENABLED(SET_REMAINING_TIME)
56
       if (parser.seenval('R')) ui.set_remaining_time(60 * parser.value_ulong());
72
       if (parser.seenval('R')) ui.set_remaining_time(60 * parser.value_ulong());
57
     #endif
73
     #endif
58
 
74
 
75
+    #if ENABLED(SET_INTERACTION_TIME)
76
+      if (parser.seenval('C')) ui.set_interaction_time(60 * parser.value_ulong());
77
+    #endif
78
+
79
+  #endif
80
+
81
+  #if ENABLED(M73_REPORT)
82
+  {
83
+    SERIAL_ECHO_MSG(
84
+        TERN(M73_REPORT_PRUSA, "M73 Percent done: ", "Progress: ")
85
+      , TERN(PRINT_PROGRESS_SHOW_DECIMALS, permyriadtostr4(ui.get_progress_permyriad()), ui.get_progress_percent())
86
+      #if ENABLED(SET_REMAINING_TIME)
87
+        , TERN(M73_REPORT_PRUSA, "; Print time remaining in mins: ", "%; Time left: "), ui.remaining_time / 60
88
+      #endif
89
+      #if ENABLED(SET_INTERACTION_TIME)
90
+        , TERN(M73_REPORT_PRUSA, "; Change in mins: ", "m; Change: "), ui.interaction_time / 60
91
+      #endif
92
+      , TERN(M73_REPORT_PRUSA, ";", "m")
93
+    );
94
+  }
59
   #endif
95
   #endif
60
 }
96
 }
61
 
97
 
62
-#endif // LCD_SET_PROGRESS_MANUALLY
98
+#endif // SET_PROGRESS_MANUALLY

+ 2
- 2
Marlin/src/gcode/sd/M1001.cpp View File

34
   #include "../queue.h"
34
   #include "../queue.h"
35
 #endif
35
 #endif
36
 
36
 
37
-#if EITHER(LCD_SET_PROGRESS_MANUALLY, SD_REPRINT_LAST_SELECTED_FILE)
37
+#if EITHER(SET_PROGRESS_MANUALLY, SD_REPRINT_LAST_SELECTED_FILE)
38
   #include "../../lcd/marlinui.h"
38
   #include "../../lcd/marlinui.h"
39
 #endif
39
 #endif
40
 
40
 
84
   process_subcommands_now(F("M77"));
84
   process_subcommands_now(F("M77"));
85
 
85
 
86
   // Set the progress bar "done" state
86
   // Set the progress bar "done" state
87
-  TERN_(LCD_SET_PROGRESS_MANUALLY, ui.set_progress_done());
87
+  TERN_(SET_PROGRESS_PERCENT, ui.set_progress_done());
88
 
88
 
89
   // Announce SD file completion
89
   // Announce SD file completion
90
   {
90
   {

+ 1
- 1
Marlin/src/gcode/sd/M23.cpp View File

38
   for (char *fn = parser.string_arg; *fn; ++fn) if (*fn == ' ') *fn = '\0';
38
   for (char *fn = parser.string_arg; *fn; ++fn) if (*fn == ' ') *fn = '\0';
39
   card.openFileRead(parser.string_arg);
39
   card.openFileRead(parser.string_arg);
40
 
40
 
41
-  TERN_(LCD_SET_PROGRESS_MANUALLY, ui.set_progress(0));
41
+  TERN_(SET_PROGRESS_PERCENT, ui.set_progress(0));
42
 }
42
 }
43
 
43
 
44
 #endif // SDSUPPORT
44
 #endif // SDSUPPORT

+ 0
- 4
Marlin/src/inc/Conditionals_LCD.h View File

529
   #define HAS_MANUAL_MOVE_MENU 1
529
   #define HAS_MANUAL_MOVE_MENU 1
530
 #endif
530
 #endif
531
 
531
 
532
-#if ANY(HAS_MARLINUI_U8GLIB, EXTENSIBLE_UI, HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL, IS_DWIN_MARLINUI, DWIN_CREALITY_LCD_JYERSUI)
533
-  #define CAN_SHOW_REMAINING_TIME 1
534
-#endif
535
-
536
 #if HAS_MARLINUI_U8GLIB
532
 #if HAS_MARLINUI_U8GLIB
537
   #ifndef LCD_PIXEL_WIDTH
533
   #ifndef LCD_PIXEL_WIDTH
538
     #define LCD_PIXEL_WIDTH 128
534
     #define LCD_PIXEL_WIDTH 128

+ 7
- 1
Marlin/src/inc/Conditionals_adv.h View File

599
   #undef MENU_ADDAUTOSTART
599
   #undef MENU_ADDAUTOSTART
600
 #endif
600
 #endif
601
 
601
 
602
-#if EITHER(SDSUPPORT, LCD_SET_PROGRESS_MANUALLY)
602
+#if EITHER(SDSUPPORT, SET_PROGRESS_MANUALLY)
603
   #define HAS_PRINT_PROGRESS 1
603
   #define HAS_PRINT_PROGRESS 1
604
 #endif
604
 #endif
605
 
605
 
606
+#if DISABLED(SET_PROGRESS_MANUALLY)
607
+  #undef SET_REMAINING_TIME
608
+  #undef SET_INTERACTION_TIME
609
+  #undef M73_REPORT
610
+#endif
611
+
606
 #if ANY(HAS_MARLINUI_MENU, ULTIPANEL_FEEDMULTIPLY, SOFT_RESET_ON_KILL)
612
 #if ANY(HAS_MARLINUI_MENU, ULTIPANEL_FEEDMULTIPLY, SOFT_RESET_ON_KILL)
607
   #define HAS_ENCODER_ACTION 1
613
   #define HAS_ENCODER_ACTION 1
608
 #endif
614
 #endif

+ 15
- 11
Marlin/src/inc/SanityCheck.h View File

587
 #elif defined(MKS_LCD12864)
587
 #elif defined(MKS_LCD12864)
588
   #error "MKS_LCD12864 is now MKS_LCD12864A or MKS_LCD12864B."
588
   #error "MKS_LCD12864 is now MKS_LCD12864A or MKS_LCD12864B."
589
 #elif defined(DOGM_SD_PERCENT)
589
 #elif defined(DOGM_SD_PERCENT)
590
-  #error "DOGM_SD_PERCENT is now SHOW_SD_PERCENT."
590
+  #error "DOGM_SD_PERCENT is now SHOW_PROGRESS_PERCENT."
591
 #elif defined(NEOPIXEL_BKGD_LED_INDEX)
591
 #elif defined(NEOPIXEL_BKGD_LED_INDEX)
592
   #error "NEOPIXEL_BKGD_LED_INDEX is now NEOPIXEL_BKGD_INDEX_FIRST."
592
   #error "NEOPIXEL_BKGD_LED_INDEX is now NEOPIXEL_BKGD_INDEX_FIRST."
593
 #elif defined(TEMP_SENSOR_1_AS_REDUNDANT)
593
 #elif defined(TEMP_SENSOR_1_AS_REDUNDANT)
646
   #error "TOUCH_IDLE_SLEEP (seconds) is now TOUCH_IDLE_SLEEP_MINS (minutes)."
646
   #error "TOUCH_IDLE_SLEEP (seconds) is now TOUCH_IDLE_SLEEP_MINS (minutes)."
647
 #elif defined(LCD_BACKLIGHT_TIMEOUT)
647
 #elif defined(LCD_BACKLIGHT_TIMEOUT)
648
   #error "LCD_BACKLIGHT_TIMEOUT (seconds) is now LCD_BACKLIGHT_TIMEOUT_MINS (minutes)."
648
   #error "LCD_BACKLIGHT_TIMEOUT (seconds) is now LCD_BACKLIGHT_TIMEOUT_MINS (minutes)."
649
+#elif defined(LCD_SET_PROGRESS_MANUALLY)
650
+  #error "LCD_SET_PROGRESS_MANUALLY is now SET_PROGRESS_MANUALLY."
651
+#elif defined(USE_M73_REMAINING_TIME)
652
+  #error "USE_M73_REMAINING_TIME is now SET_REMAINING_TIME."
653
+#elif defined(SHOW_SD_PERCENT)
654
+  #error "SHOW_SD_PERCENT is now SHOW_PROGRESS_PERCENT."
649
 #endif
655
 #endif
650
 
656
 
651
 // L64xx stepper drivers have been removed
657
 // L64xx stepper drivers have been removed
894
  * Progress Bar
900
  * Progress Bar
895
  */
901
  */
896
 #if ENABLED(LCD_PROGRESS_BAR)
902
 #if ENABLED(LCD_PROGRESS_BAR)
897
-  #if NONE(SDSUPPORT, LCD_SET_PROGRESS_MANUALLY)
898
-    #error "LCD_PROGRESS_BAR requires SDSUPPORT or LCD_SET_PROGRESS_MANUALLY."
903
+  #if NONE(SDSUPPORT, SET_PROGRESS_MANUALLY)
904
+    #error "LCD_PROGRESS_BAR requires SDSUPPORT or SET_PROGRESS_MANUALLY."
899
   #elif NONE(HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL)
905
   #elif NONE(HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL)
900
     #error "LCD_PROGRESS_BAR only applies to HD44780 character LCD and TFTGLCD_PANEL_(SPI|I2C)."
906
     #error "LCD_PROGRESS_BAR only applies to HD44780 character LCD and TFTGLCD_PANEL_(SPI|I2C)."
901
   #elif HAS_MARLINUI_U8GLIB || IS_DWIN_MARLINUI
907
   #elif HAS_MARLINUI_U8GLIB || IS_DWIN_MARLINUI
905
   #elif PROGRESS_MSG_EXPIRE < 0
911
   #elif PROGRESS_MSG_EXPIRE < 0
906
     #error "PROGRESS_MSG_EXPIRE must be greater than or equal to 0."
912
     #error "PROGRESS_MSG_EXPIRE must be greater than or equal to 0."
907
   #endif
913
   #endif
908
-#elif ENABLED(LCD_SET_PROGRESS_MANUALLY) && NONE(HAS_MARLINUI_U8GLIB, HAS_GRAPHICAL_TFT, HAS_MARLINUI_HD44780, EXTENSIBLE_UI, HAS_DWIN_E3V2, IS_DWIN_MARLINUI)
909
-  #error "LCD_SET_PROGRESS_MANUALLY requires LCD_PROGRESS_BAR, Character LCD, Graphical LCD, TFT, DWIN_CREALITY_LCD, DWIN_LCD_PROUI, DWIN_CREALITY_LCD_JYERSUI, DWIN_MARLINUI_*, OR EXTENSIBLE_UI."
910
 #endif
914
 #endif
911
 
915
 
912
-#if ENABLED(USE_M73_REMAINING_TIME) && DISABLED(LCD_SET_PROGRESS_MANUALLY)
913
-  #error "USE_M73_REMAINING_TIME requires LCD_SET_PROGRESS_MANUALLY"
916
+#if ENABLED(SET_PROGRESS_MANUALLY) && NONE(SET_PROGRESS_PERCENT, SET_REMAINING_TIME, SET_INTERACTION_TIME)
917
+  #error "SET_PROGRESS_MANUALLY requires at least one of SET_PROGRESS_PERCENT, SET_REMAINING_TIME, SET_INTERACTION_TIME to be enabled."
918
+#endif
919
+
920
+#if HAS_LCDPRINT && LCD_HEIGHT < 4 && ANY(SHOW_PROGRESS_PERCENT, SHOW_ELAPSED_TIME, SHOW_REMAINING_TIME, SHOW_INTERACTION_TIME)
921
+  #error "Displays with fewer than 4 rows of text can't show progress values."
914
 #endif
922
 #endif
915
 
923
 
916
 #if !HAS_MARLINUI_MENU && ENABLED(SD_REPRINT_LAST_SELECTED_FILE)
924
 #if !HAS_MARLINUI_MENU && ENABLED(SD_REPRINT_LAST_SELECTED_FILE)
4038
   #error "COOLANT_FLOOD requires COOLANT_FLOOD_PIN to be defined."
4046
   #error "COOLANT_FLOOD requires COOLANT_FLOOD_PIN to be defined."
4039
 #endif
4047
 #endif
4040
 
4048
 
4041
-#if NONE(HAS_MARLINUI_U8GLIB, EXTENSIBLE_UI, IS_DWIN_MARLINUI) && ENABLED(PRINT_PROGRESS_SHOW_DECIMALS)
4042
-  #error "PRINT_PROGRESS_SHOW_DECIMALS currently requires a Graphical LCD."
4043
-#endif
4044
-
4045
 #if HAS_ADC_BUTTONS && defined(ADC_BUTTON_DEBOUNCE_DELAY) && ADC_BUTTON_DEBOUNCE_DELAY < 16
4049
 #if HAS_ADC_BUTTONS && defined(ADC_BUTTON_DEBOUNCE_DELAY) && ADC_BUTTON_DEBOUNCE_DELAY < 16
4046
   #error "ADC_BUTTON_DEBOUNCE_DELAY must be greater than 16."
4050
   #error "ADC_BUTTON_DEBOUNCE_DELAY must be greater than 16."
4047
 #endif
4051
 #endif

+ 61
- 62
Marlin/src/lcd/HD44780/marlinui_HD44780.cpp View File

612
   _draw_heater_status(H_BED, TERN0(HAS_LEVELING, blink && planner.leveling_active) ? '_' : LCD_STR_BEDTEMP[0], blink);
612
   _draw_heater_status(H_BED, TERN0(HAS_LEVELING, blink && planner.leveling_active) ? '_' : LCD_STR_BEDTEMP[0], blink);
613
 }
613
 }
614
 
614
 
615
-#if HAS_PRINT_PROGRESS
616
-
617
-  FORCE_INLINE void _draw_print_progress() {
618
-    const uint8_t progress = ui.get_progress_percent();
619
-    lcd_put_u8str(F(TERN(SDSUPPORT, "SD", "P:")));
620
-    if (progress)
621
-      lcd_put_u8str(ui8tostr3rj(progress));
622
-    else
623
-      lcd_put_u8str(F("---"));
624
-    lcd_put_lchar('%');
625
-  }
626
-
627
-#endif
628
-
629
 #if ENABLED(LCD_PROGRESS_BAR)
615
 #if ENABLED(LCD_PROGRESS_BAR)
630
 
616
 
631
   void MarlinUI::draw_progress_bar(const uint8_t percent) {
617
   void MarlinUI::draw_progress_bar(const uint8_t percent) {
733
   #endif
719
   #endif
734
 }
720
 }
735
 
721
 
722
+#if HAS_PRINT_PROGRESS
723
+  #define TPOFFSET (LCD_WIDTH - 1)
724
+  static uint8_t timepos = TPOFFSET - 6;
725
+  static char buffer[14];
726
+  static lcd_uint_t pc, pr;
727
+
728
+  #if ENABLED(SHOW_PROGRESS_PERCENT)
729
+    void MarlinUI::drawPercent() {
730
+      const uint8_t progress = ui.get_progress_percent();
731
+      if (progress) {
732
+        lcd_moveto(pc, pr);
733
+        lcd_put_u8str(F(TERN(IS_SD_PRINTING, "SD", "P:")));
734
+        lcd_put_u8str(TERN(PRINT_PROGRESS_SHOW_DECIMALS, permyriadtostr4(ui.get_progress_permyriad()), ui8tostr3rj(progress)));
735
+        lcd_put_lchar('%');
736
+      }
737
+    }
738
+  #endif
739
+  #if ENABLED(SHOW_REMAINING_TIME)
740
+    void MarlinUI::drawRemain() {
741
+      const duration_t remaint = ui.get_remaining_time();
742
+      if (printJobOngoing()) {
743
+        timepos = TPOFFSET - remaint.toDigital(buffer);
744
+        lcd_put_lchar(TERN(LCD_INFO_SCREEN_STYLE, 11, timepos), 2, 'R');
745
+        lcd_put_u8str(buffer);
746
+      }
747
+    }
748
+  #endif
749
+  #if ENABLED(SHOW_INTERACTION_TIME)
750
+    void MarlinUI::drawInter() {
751
+      const duration_t interactt = ui.interaction_time;
752
+      if (printingIsActive() && interactt.value) {
753
+        timepos = TPOFFSET - interactt.toDigital(buffer);
754
+        lcd_put_lchar(TERN(LCD_INFO_SCREEN_STYLE, 11, timepos), 2, 'C');
755
+        lcd_put_u8str(buffer);
756
+      }
757
+    }
758
+  #endif
759
+  #if ENABLED(SHOW_ELAPSED_TIME)
760
+    void MarlinUI::drawElapsed() {
761
+      const duration_t elapsedt = print_job_timer.duration();
762
+      if (printJobOngoing()) {
763
+        timepos = TPOFFSET - elapsedt.toDigital(buffer);
764
+        lcd_put_lchar(TERN(LCD_INFO_SCREEN_STYLE, 11, timepos), 2, 'E');
765
+        //lcd_put_lchar(timepos, 2, LCD_STR_CLOCK[0]);
766
+        lcd_put_u8str(buffer);
767
+      }
768
+    }
769
+  #endif
770
+#endif // HAS_PRINT_PROGRESS
771
+
736
 /**
772
 /**
737
  *  LCD_INFO_SCREEN_STYLE 0 : Classic Status Screen
773
  *  LCD_INFO_SCREEN_STYLE 0 : Classic Status Screen
738
  *
774
  *
765
  *  |01234567890123456789|
801
  *  |01234567890123456789|
766
  */
802
  */
767
 
803
 
768
-inline uint8_t draw_elapsed_or_remaining_time(uint8_t timepos, const bool blink) {
769
-  char buffer[14];
770
-
771
-  #if ENABLED(SHOW_REMAINING_TIME)
772
-    const bool show_remain = TERN1(ROTATE_PROGRESS_DISPLAY, blink) && printingIsActive();
773
-    if (show_remain) {
774
-      #if ENABLED(USE_M73_REMAINING_TIME)
775
-        duration_t remaining = ui.get_remaining_time();
776
-      #else
777
-        uint8_t progress = ui.get_progress_percent();
778
-        uint32_t elapsed = print_job_timer.duration();
779
-        duration_t remaining = (progress > 0) ? ((elapsed * 25600 / progress) >> 8) - elapsed : 0;
780
-      #endif
781
-      timepos -= remaining.toDigital(buffer);
782
-      lcd_put_lchar(timepos, 2, 'R');
783
-    }
784
-  #else
785
-    constexpr bool show_remain = false;
786
-  #endif
787
-
788
-  if (!show_remain) {
789
-    duration_t elapsed = print_job_timer.duration();
790
-    timepos -= elapsed.toDigital(buffer);
791
-    lcd_put_lchar(timepos, 2, LCD_STR_CLOCK[0]);
792
-  }
793
-  lcd_put_u8str(buffer);
794
-  return timepos;
795
-}
796
-
797
 void MarlinUI::draw_status_screen() {
804
 void MarlinUI::draw_status_screen() {
798
 
805
 
799
   const bool blink = get_blink();
806
   const bool blink = get_blink();
856
       #if LCD_WIDTH < 20
863
       #if LCD_WIDTH < 20
857
 
864
 
858
         #if HAS_PRINT_PROGRESS
865
         #if HAS_PRINT_PROGRESS
859
-          lcd_moveto(0, 2);
860
-          _draw_print_progress();
866
+          pc = 0, pr = 2;
867
+          rotate_progress();
861
         #endif
868
         #endif
862
 
869
 
863
       #else // LCD_WIDTH >= 20
870
       #else // LCD_WIDTH >= 20
940
       lcd_put_u8str(i16tostr3rj(feedrate_percentage));
947
       lcd_put_u8str(i16tostr3rj(feedrate_percentage));
941
       lcd_put_lchar('%');
948
       lcd_put_lchar('%');
942
 
949
 
943
-      const uint8_t timepos = draw_elapsed_or_remaining_time(LCD_WIDTH - 1, blink);
944
-
945
       #if LCD_WIDTH >= 20
950
       #if LCD_WIDTH >= 20
946
-        lcd_moveto(timepos - 7, 2);
951
+
947
         #if HAS_PRINT_PROGRESS
952
         #if HAS_PRINT_PROGRESS
948
-          _draw_print_progress();
953
+          pc = timepos - 7, pr = 2;
954
+          rotate_progress();
949
         #else
955
         #else
950
           char c;
956
           char c;
951
           uint16_t per;
957
           uint16_t per;
1016
     // ========== Line 3 ==========
1022
     // ========== Line 3 ==========
1017
 
1023
 
1018
     //
1024
     //
1019
-    // SD Percent, Hotend 2, or Bed
1025
+    // Progress percent, Hotend 2, or Bed
1020
     //
1026
     //
1021
     lcd_moveto(0, 2);
1027
     lcd_moveto(0, 2);
1022
     #if HOTENDS > 2
1028
     #if HOTENDS > 2
1025
       _draw_bed_status(blink);
1031
       _draw_bed_status(blink);
1026
     #elif HAS_PRINT_PROGRESS
1032
     #elif HAS_PRINT_PROGRESS
1027
       #define DREW_PRINT_PROGRESS 1
1033
       #define DREW_PRINT_PROGRESS 1
1028
-      _draw_print_progress();
1034
+      pc = 0, pr = 2;
1035
+      rotate_progress();
1029
     #endif
1036
     #endif
1030
 
1037
 
1031
     //
1038
     //
1032
-    // Elapsed Time or SD Percent
1039
+    // All progress strings
1033
     //
1040
     //
1034
-    lcd_moveto(LCD_WIDTH - 9, 2);
1035
-
1036
     #if HAS_PRINT_PROGRESS && !DREW_PRINT_PROGRESS
1041
     #if HAS_PRINT_PROGRESS && !DREW_PRINT_PROGRESS
1037
-
1038
-      _draw_print_progress();
1039
-
1040
-    #else
1041
-
1042
-      (void)draw_elapsed_or_remaining_time(LCD_WIDTH - 4, blink);
1043
-
1042
+      pc = LCD_WIDTH - 9, pr = 2;
1043
+      rotate_progress();
1044
     #endif
1044
     #endif
1045
-
1046
   #endif // LCD_INFO_SCREEN_STYLE 1
1045
   #endif // LCD_INFO_SCREEN_STYLE 1
1047
 
1046
 
1048
   // ========= Last Line ========
1047
   // ========= Last Line ========

+ 1
- 1
Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp View File

606
     const uint8_t progress = ui._get_progress();
606
     const uint8_t progress = ui._get_progress();
607
     #if ENABLED(SDSUPPORT)
607
     #if ENABLED(SDSUPPORT)
608
       lcd_put_u8str(F("SD"));
608
       lcd_put_u8str(F("SD"));
609
-    #elif ENABLED(LCD_SET_PROGRESS_MANUALLY)
609
+    #elif ENABLED(SET_PROGRESS_PERCENT)
610
       lcd_put_u8str(F("P:"));
610
       lcd_put_u8str(F("P:"));
611
     #endif
611
     #endif
612
     if (progress)
612
     if (progress)

+ 95
- 129
Marlin/src/lcd/dogm/status_screen_DOGM.cpp View File

40
 
40
 
41
 #include "../../gcode/parser.h" // for units (and volumetric)
41
 #include "../../gcode/parser.h" // for units (and volumetric)
42
 
42
 
43
-#if ENABLED(LCD_SHOW_E_TOTAL)
44
-  #include "../../MarlinCore.h" // for printingIsActive()
45
-#endif
43
+#include "../../MarlinCore.h" // for printingIsActive()
46
 
44
 
47
 #if ENABLED(FILAMENT_LCD_DISPLAY)
45
 #if ENABLED(FILAMENT_LCD_DISPLAY)
48
   #include "../../feature/filwidth.h"
46
   #include "../../feature/filwidth.h"
445
     lcd_put_u8str(value);
443
     lcd_put_u8str(value);
446
 }
444
 }
447
 
445
 
446
+// Prepare strings for progress display
447
+#if HAS_PRINT_PROGRESS
448
+  #define _PRGR_INFO_X(len) (LCD_PIXEL_WIDTH - (len) * (MENU_FONT_WIDTH))
449
+  #define PCENTERED 1  // center percent value over progress bar, else align to the right
450
+  static uint8_t lastProgress = 0xFF;
451
+  static u8g_uint_t progress_bar_solid_width = 0;
452
+  #if ENABLED(SHOW_PROGRESS_PERCENT)
453
+    static char progress_string[5];
454
+    static u8g_uint_t progress_x_pos;
455
+    void MarlinUI::drawPercent() {
456
+      if (progress_string[0]) {
457
+        lcd_put_u8str(progress_x_pos, EXTRAS_BASELINE, progress_string);
458
+        lcd_put_lchar('%');
459
+      }
460
+    }
461
+  #endif
462
+  #if ENABLED(SHOW_REMAINING_TIME)
463
+    static char remaining_string[10];
464
+    static u8g_uint_t remaining_x_pos = 0;
465
+    void MarlinUI::drawRemain() {
466
+      if (printJobOngoing()){
467
+        lcd_put_u8str(PROGRESS_BAR_X, EXTRAS_BASELINE, F("R:"));
468
+        lcd_put_u8str(remaining_x_pos, EXTRAS_BASELINE, remaining_string);
469
+      }
470
+    }
471
+  #endif
472
+  #if ENABLED(SHOW_INTERACTION_TIME)
473
+    static char interaction_string[10];
474
+    static u8g_uint_t interaction_x_pos = 0;
475
+    void MarlinUI::drawInter() {
476
+      if (printingIsActive() && interaction_string[0]) {
477
+        lcd_put_u8str(PROGRESS_BAR_X, EXTRAS_BASELINE, F("C:"));
478
+        lcd_put_u8str(interaction_x_pos, EXTRAS_BASELINE, interaction_string);
479
+      }
480
+    }
481
+  #endif
482
+  #if ENABLED(SHOW_ELAPSED_TIME)
483
+    static char elapsed_string[10];
484
+    static u8g_uint_t elapsed_x_pos = 0;
485
+    static uint8_t lastElapsed;
486
+    void MarlinUI::drawElapsed() {
487
+      if (printJobOngoing()) {
488
+        lcd_put_u8str(PROGRESS_BAR_X, EXTRAS_BASELINE, F("E:"));
489
+        lcd_put_u8str(elapsed_x_pos, EXTRAS_BASELINE, elapsed_string);
490
+      }
491
+    }
492
+  #endif
493
+#endif // HAS_PRINT_PROGRESS
494
+
448
 /**
495
 /**
449
  * Draw the Status Screen for a 128x64 DOGM (U8glib) display.
496
  * Draw the Status Screen for a 128x64 DOGM (U8glib) display.
450
  *
497
  *
459
     static char wstring[5], mstring[4];
506
     static char wstring[5], mstring[4];
460
   #endif
507
   #endif
461
 
508
 
462
-  #if HAS_PRINT_PROGRESS
463
-    #if DISABLED(SHOW_SD_PERCENT)
464
-      #define _SD_INFO_X(len) (PROGRESS_BAR_X + (PROGRESS_BAR_WIDTH) / 2 - (len) * (MENU_FONT_WIDTH) / 2)
465
-    #else
466
-      #define _SD_INFO_X(len) (LCD_PIXEL_WIDTH - (len) * (MENU_FONT_WIDTH))
467
-    #endif
468
-
469
-    #if ENABLED(SHOW_SD_PERCENT)
470
-      static char progress_string[5];
471
-    #endif
472
-    static uint8_t lastElapsed = 0xFF, lastProgress = 0xFF;
473
-    static u8g_uint_t elapsed_x_pos = 0, progress_bar_solid_width = 0;
474
-    static char elapsed_string[16];
475
-    #if ENABLED(SHOW_REMAINING_TIME)
476
-      static u8g_uint_t estimation_x_pos = 0;
477
-      static char estimation_string[10];
478
-      #if BOTH(SHOW_SD_PERCENT, ROTATE_PROGRESS_DISPLAY)
479
-        static u8g_uint_t progress_x_pos = 0;
480
-        static uint8_t progress_state = 0;
481
-        static bool prev_blink = 0;
482
-      #endif
483
-    #endif
484
-  #endif
485
-
486
   const bool show_e_total = TERN0(LCD_SHOW_E_TOTAL, printingIsActive());
509
   const bool show_e_total = TERN0(LCD_SHOW_E_TOTAL, printingIsActive());
487
 
510
 
488
   // At the first page, generate new display values
511
   // At the first page, generate new display values
523
     // Progress / elapsed / estimation updates and string formatting to avoid float math on each LCD draw
546
     // Progress / elapsed / estimation updates and string formatting to avoid float math on each LCD draw
524
     #if HAS_PRINT_PROGRESS
547
     #if HAS_PRINT_PROGRESS
525
       const progress_t progress = TERN(HAS_PRINT_PROGRESS_PERMYRIAD, get_progress_permyriad, get_progress_percent)();
548
       const progress_t progress = TERN(HAS_PRINT_PROGRESS_PERMYRIAD, get_progress_permyriad, get_progress_percent)();
526
-      duration_t elapsed = print_job_timer.duration();
527
-      const uint8_t p = progress & 0xFF, ev = elapsed.value & 0xFF;
549
+      duration_t elapsedt = print_job_timer.duration();
550
+      const uint8_t p = progress & 0xFF, ev = elapsedt.value & 0xFF;
528
       if (p != lastProgress) {
551
       if (p != lastProgress) {
529
         lastProgress = p;
552
         lastProgress = p;
530
 
553
 
531
         progress_bar_solid_width = u8g_uint_t((PROGRESS_BAR_WIDTH - 2) * (progress / (PROGRESS_SCALE)) * 0.01f);
554
         progress_bar_solid_width = u8g_uint_t((PROGRESS_BAR_WIDTH - 2) * (progress / (PROGRESS_SCALE)) * 0.01f);
532
 
555
 
533
-        #if ENABLED(SHOW_SD_PERCENT)
534
-          if (progress == 0) {
556
+        #if ENABLED(SHOW_PROGRESS_PERCENT)
557
+          if (progress == 0)
535
             progress_string[0] = '\0';
558
             progress_string[0] = '\0';
536
-            #if ENABLED(SHOW_REMAINING_TIME)
537
-              estimation_string[0] = '\0';
538
-              estimation_x_pos = _SD_INFO_X(0);
539
-            #endif
540
-          }
541
           else
559
           else
542
             strcpy(progress_string, TERN(PRINT_PROGRESS_SHOW_DECIMALS, permyriadtostr4(progress), ui8tostr3rj(progress / (PROGRESS_SCALE))));
560
             strcpy(progress_string, TERN(PRINT_PROGRESS_SHOW_DECIMALS, permyriadtostr4(progress), ui8tostr3rj(progress / (PROGRESS_SCALE))));
543
-
544
-          #if BOTH(SHOW_REMAINING_TIME, ROTATE_PROGRESS_DISPLAY) // Tri-state progress display mode
545
-            progress_x_pos = _SD_INFO_X(strlen(progress_string) + 1);
546
-          #endif
561
+          progress_x_pos = TERN(PCENTERED, 77, _PRGR_INFO_X(strlen(progress_string) + 1));
547
         #endif
562
         #endif
548
       }
563
       }
549
 
564
 
550
-      constexpr bool can_show_days = DISABLED(SHOW_SD_PERCENT) || ENABLED(ROTATE_PROGRESS_DISPLAY);
551
-      if (ev != lastElapsed) {
552
-        lastElapsed = ev;
553
-        const uint8_t len = elapsed.toDigital(elapsed_string, can_show_days && elapsed.value >= 60*60*24L);
554
-        elapsed_x_pos = _SD_INFO_X(len);
555
-
556
-        #if ENABLED(SHOW_REMAINING_TIME)
557
-          if (!(ev & 0x3)) {
558
-            uint32_t timeval = (0
559
-              #if BOTH(LCD_SET_PROGRESS_MANUALLY, USE_M73_REMAINING_TIME)
560
-                + get_remaining_time()
561
-              #endif
562
-            );
563
-            if (!timeval && progress > 0) timeval = elapsed.value * (100 * (PROGRESS_SCALE) - progress) / progress;
564
-            if (!timeval) {
565
-              estimation_string[0] = '\0';
566
-              estimation_x_pos = _SD_INFO_X(0);
567
-            }
568
-            else {
569
-              duration_t estimation = timeval;
570
-              const uint8_t len = estimation.toDigital(estimation_string, can_show_days && estimation.value >= 60*60*24L);
571
-              estimation_x_pos = _SD_INFO_X(len + !BOTH(SHOW_SD_PERCENT, ROTATE_PROGRESS_DISPLAY));
572
-            }
565
+      #if ENABLED(SHOW_INTERACTION_TIME)
566
+        if (!(interaction_time)) {
567
+          interaction_string[0] = '\0';
568
+          interaction_x_pos = _PRGR_INFO_X(0);
569
+        }
570
+        else {
571
+          const duration_t interactt = ui.interaction_time;
572
+          interactt.toDigital(interaction_string, interactt.value >= 60*60*24L);
573
+          interaction_x_pos = _PRGR_INFO_X(strlen(interaction_string));
574
+        }
575
+      #endif
576
+
577
+      #if ENABLED(SHOW_ELAPSED_TIME)
578
+        if (ev != lastElapsed) {
579
+          lastElapsed = ev;
580
+          const uint8_t len = elapsedt.toDigital(elapsed_string, elapsedt.value >= 60*60*24L);
581
+          elapsed_x_pos = _PRGR_INFO_X(len);
582
+        }
583
+      #endif
584
+
585
+      #if ENABLED(SHOW_REMAINING_TIME)
586
+        if (!(ev & 0x3)) {
587
+          uint32_t timeval = get_remaining_time();
588
+          if (!timeval) {
589
+            remaining_string[0] = '\0';
590
+            remaining_x_pos = _PRGR_INFO_X(0);
573
           }
591
           }
574
-        #endif
575
-      }
592
+          else {
593
+            const duration_t remaint = timeval;
594
+            const uint8_t len = remaint.toDigital(remaining_string, remaint.value >= 60*60*24L);
595
+            remaining_x_pos = _PRGR_INFO_X(len);
596
+          }
597
+        }
598
+      #endif
576
     #endif
599
     #endif
577
   }
600
   }
578
 
601
 
579
-  const bool blink = get_blink();
580
-
581
   // Status Menu Font
602
   // Status Menu Font
582
   set_font(FONT_STATUSMENU);
603
   set_font(FONT_STATUSMENU);
583
 
604
 
634
       u8g.drawBitmapP(STATUS_CHAMBER_X, chambery, STATUS_CHAMBER_BYTEWIDTH, chamberh, CHAMBER_BITMAP(CHAMBER_ALT()));
655
       u8g.drawBitmapP(STATUS_CHAMBER_X, chambery, STATUS_CHAMBER_BYTEWIDTH, chamberh, CHAMBER_BITMAP(CHAMBER_ALT()));
635
   #endif
656
   #endif
636
 
657
 
658
+  const bool blink = ui.get_blink();
659
+
637
   #if DO_DRAW_FAN
660
   #if DO_DRAW_FAN
638
     #if STATUS_FAN_FRAMES > 2
661
     #if STATUS_FAN_FRAMES > 2
639
       static bool old_blink;
662
       static bool old_blink;
664
   if (PAGE_UNDER(6 + 1 + 12 + 1 + 6 + 1)) {
687
   if (PAGE_UNDER(6 + 1 + 12 + 1 + 6 + 1)) {
665
     // Extruders
688
     // Extruders
666
     #if DO_DRAW_HOTENDS
689
     #if DO_DRAW_HOTENDS
667
-      LOOP_L_N(e, MAX_HOTEND_DRAW)
668
-        _draw_hotend_status((heater_id_t)e, blink);
690
+      LOOP_L_N(e, MAX_HOTEND_DRAW) _draw_hotend_status((heater_id_t)e, blink);
669
     #endif
691
     #endif
670
 
692
 
671
     // Laser / Spindle
693
     // Laser / Spindle
757
   #endif // SDSUPPORT
779
   #endif // SDSUPPORT
758
 
780
 
759
   #if HAS_PRINT_PROGRESS
781
   #if HAS_PRINT_PROGRESS
760
-    //
761
     // Progress bar frame
782
     // Progress bar frame
762
-    //
763
-
764
     if (PAGE_CONTAINS(PROGRESS_BAR_Y, PROGRESS_BAR_Y + 3))
783
     if (PAGE_CONTAINS(PROGRESS_BAR_Y, PROGRESS_BAR_Y + 3))
765
       u8g.drawFrame(PROGRESS_BAR_X, PROGRESS_BAR_Y, PROGRESS_BAR_WIDTH, 4);
784
       u8g.drawFrame(PROGRESS_BAR_X, PROGRESS_BAR_Y, PROGRESS_BAR_WIDTH, 4);
766
 
785
 
767
-    //
768
     // Progress bar solid part
786
     // Progress bar solid part
769
-    //
770
-
771
     if (PAGE_CONTAINS(PROGRESS_BAR_Y + 1, PROGRESS_BAR_Y + 2))
787
     if (PAGE_CONTAINS(PROGRESS_BAR_Y + 1, PROGRESS_BAR_Y + 2))
772
       u8g.drawBox(PROGRESS_BAR_X + 1, PROGRESS_BAR_Y + 1, progress_bar_solid_width, 2);
788
       u8g.drawBox(PROGRESS_BAR_X + 1, PROGRESS_BAR_Y + 1, progress_bar_solid_width, 2);
773
 
789
 
774
-    if (PAGE_CONTAINS(EXTRAS_BASELINE - INFO_FONT_ASCENT, EXTRAS_BASELINE - 1)) {
775
-
776
-      #if ALL(SHOW_SD_PERCENT, SHOW_REMAINING_TIME, ROTATE_PROGRESS_DISPLAY)
777
-
778
-        if (prev_blink != blink) {
779
-          prev_blink = blink;
780
-          if (++progress_state >= 3) progress_state = 0;
781
-        }
782
-
783
-        if (progress_state == 0) {
784
-          if (progress_string[0]) {
785
-            lcd_put_u8str(progress_x_pos, EXTRAS_BASELINE, progress_string);
786
-            lcd_put_lchar('%');
787
-          }
788
-        }
789
-        else if (progress_state == 2 && estimation_string[0]) {
790
-          lcd_put_u8str(PROGRESS_BAR_X, EXTRAS_BASELINE, F("R:"));
791
-          lcd_put_u8str(estimation_x_pos, EXTRAS_BASELINE, estimation_string);
792
-        }
793
-        else if (elapsed_string[0]) {
794
-          lcd_put_u8str(PROGRESS_BAR_X, EXTRAS_BASELINE, F("E:"));
795
-          lcd_put_u8str(elapsed_x_pos, EXTRAS_BASELINE, elapsed_string);
796
-        }
797
-
798
-      #else // !SHOW_SD_PERCENT || !SHOW_REMAINING_TIME || !ROTATE_PROGRESS_DISPLAY
799
-
800
-        //
801
-        // SD Percent Complete
802
-        //
803
-
804
-        #if ENABLED(SHOW_SD_PERCENT)
805
-          if (progress_string[0]) {
806
-            lcd_put_u8str(55, EXTRAS_BASELINE, progress_string); // Percent complete
807
-            lcd_put_lchar('%');
808
-          }
809
-        #endif
810
-
811
-        //
812
-        // Elapsed Time
813
-        //
814
-
815
-        #if ENABLED(SHOW_REMAINING_TIME)
816
-          if (blink && estimation_string[0]) {
817
-            lcd_put_lchar(estimation_x_pos, EXTRAS_BASELINE, 'R');
818
-            lcd_put_u8str(estimation_string);
819
-          }
820
-          else
821
-        #endif
822
-            lcd_put_u8str(elapsed_x_pos, EXTRAS_BASELINE, elapsed_string);
823
-
824
-      #endif // !SHOW_SD_PERCENT || !SHOW_REMAINING_TIME || !ROTATE_PROGRESS_DISPLAY
825
-    }
826
-
827
-  #endif // HAS_PRINT_PROGRESS
790
+    // Progress strings
791
+    if (PAGE_CONTAINS(EXTRAS_BASELINE - INFO_FONT_ASCENT, EXTRAS_BASELINE - 1))
792
+      ui.rotate_progress();
793
+  #endif
828
 
794
 
829
   //
795
   //
830
   // XYZ Coordinates
796
   // XYZ Coordinates

+ 194
- 133
Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp View File

40
 // Lightweight Status Screen for Graphical Display
40
 // Lightweight Status Screen for Graphical Display
41
 //
41
 //
42
 
42
 
43
+/** One hotend layout
44
+ *  ------------------
45
+ *  |⟱ xxx➜xxx° ✱xxx%
46
+ *  |_ xxx➜xxx° Fxxx%
47
+ *  ||||||||||R•xxx:xx
48
+ *  |  status string
49
+ *  ------------------
50
+ *
51
+ *  hotend temp | fan speed
52
+ *  bed temp    | feedrate
53
+ *  progress bar| progress time
54
+ *       status string
55
+ *
56
+ * ****************************
57
+ *  Two hotends layout
58
+ *  ------------------
59
+ *  |⟱ xxx➜xxx° ✱xxx%
60
+ *  |⟱ xxx➜xxx°|||||||
61
+ *  |_ xxx➜xxx°Rxxx:xx
62
+ *  |  status string
63
+ *  ------------------
64
+ *
65
+ *  hotend temp | fan speed
66
+ *  hotend temp | progress bar
67
+ *  bed temp    | progress time
68
+ *       status string
69
+ */
70
+
43
 #include "../../inc/MarlinConfigPre.h"
71
 #include "../../inc/MarlinConfigPre.h"
44
 
72
 
45
 #if ENABLED(LIGHTWEIGHT_UI)
73
 #if ENABLED(LIGHTWEIGHT_UI)
46
 
74
 
47
-#include "status_screen_lite_ST7920.h"
48
-
49
 #include "../marlinui.h"
75
 #include "../marlinui.h"
50
 #include "../fontutils.h"
76
 #include "../fontutils.h"
51
 #include "../lcdprint.h"
77
 #include "../lcdprint.h"
53
 #include "../../module/motion.h"
79
 #include "../../module/motion.h"
54
 #include "../../module/printcounter.h"
80
 #include "../../module/printcounter.h"
55
 #include "../../module/temperature.h"
81
 #include "../../module/temperature.h"
82
+#include "../../libs/numtostr.h"
56
 
83
 
57
 #if ENABLED(SDSUPPORT)
84
 #if ENABLED(SDSUPPORT)
58
   #include "../../sd/cardreader.h"
85
   #include "../../sd/cardreader.h"
59
 #endif
86
 #endif
60
 
87
 
61
-#if ENABLED(LCD_SHOW_E_TOTAL)
88
+#if ENABLED(LCD_SHOW_E_TOTAL) || HAS_PRINT_PROGRESS
62
   #include "../../MarlinCore.h" // for printingIsActive
89
   #include "../../MarlinCore.h" // for printingIsActive
63
 #endif
90
 #endif
64
 
91
 
72
 #define DDRAM_LINE_3   0x08
99
 #define DDRAM_LINE_3   0x08
73
 #define DDRAM_LINE_4   0x18
100
 #define DDRAM_LINE_4   0x18
74
 
101
 
102
+#include "status_screen_lite_ST7920.h"
103
+extern ST7920_Lite_Status_Screen lightUI;
104
+
75
 ST7920_Lite_Status_Screen::st7920_state_t ST7920_Lite_Status_Screen::current_bits;
105
 ST7920_Lite_Status_Screen::st7920_state_t ST7920_Lite_Status_Screen::current_bits;
76
 
106
 
77
 void ST7920_Lite_Status_Screen::cmd(const uint8_t cmd) {
107
 void ST7920_Lite_Status_Screen::cmd(const uint8_t cmd) {
442
   draw_fan_icon(false);
472
   draw_fan_icon(false);
443
 }
473
 }
444
 
474
 
445
-/**
446
- * Although this is undocumented, the ST7920 allows the character
447
- * data buffer (DDRAM) to be used in conjunction with the graphics
448
- * bitmap buffer (CGRAM). The contents of the graphics buffer is
449
- * XORed with the data from the character generator. This allows
450
- * us to make the progress bar out of graphical data (the bar) and
451
- * text data (the percentage).
452
- */
453
-void ST7920_Lite_Status_Screen::draw_progress_bar(const uint8_t value) {
454
-  #if HOTENDS == 1
455
-    // If we have only one extruder, draw a long progress bar on the third line
456
-    constexpr uint8_t top     = 1,         // Top in pixels
457
-                      bottom  = 13,        // Bottom in pixels
458
-                      left    = 12,        // Left edge, in 16-bit words
459
-                      width   = 4;         // Width of progress bar, in 16-bit words
460
-  #else
461
-    constexpr uint8_t top     = 16 + 1,
462
-                      bottom  = 16 + 13,
463
-                      left    = 5,
464
-                      width   = 3;
465
-  #endif
466
-  const uint8_t char_pcnt  = 100 / width; // How many percent does each 16-bit word represent?
467
-
468
-  // Draw the progress bar as a bitmap in CGRAM
469
-  LOOP_S_LE_N(y, top, bottom) {
470
-    set_gdram_address(left, y);
471
-    begin_data();
472
-    LOOP_L_N(x, width) {
473
-      uint16_t gfx_word = 0x0000;
474
-      if ((x + 1) * char_pcnt <= value)
475
-        gfx_word = 0xFFFF;                                              // Draw completely filled bytes
476
-      else if ((x * char_pcnt) < value)
477
-        gfx_word = int(0x8000) >> (value % char_pcnt) * 16 / char_pcnt; // Draw partially filled bytes
478
-
479
-      // Draw the frame around the progress bar
480
-      if (y == top || y == bottom)
481
-        gfx_word = 0xFFFF;        // Draw top/bottom border
482
-      else if (x == width - 1)
483
-        gfx_word |= 0x0001;       // Draw right border
484
-      else if (x == 0)
485
-        gfx_word |= 0x8000;       // Draw left border
486
-      write_word(gfx_word);
487
-    }
488
-  }
489
-
490
-  // Draw the percentage as text in DDRAM
491
-  #if HOTENDS == 1
492
-    set_ddram_address(DDRAM_LINE_3 + 4);
493
-    begin_data();
494
-    write_byte(' ');
495
-  #else
496
-    set_ddram_address(DDRAM_LINE_2 + left);
497
-    begin_data();
498
-  #endif
499
-
500
-  // Draw centered
501
-  if (value > 9) {
502
-    write_number(value, 4);
503
-    write_str(F("% "));
504
-  }
505
-  else {
506
-    write_number(value, 3);
507
-    write_str(F("%  "));
508
-  }
509
-}
510
-
511
 void ST7920_Lite_Status_Screen::draw_fan_icon(const bool whichIcon) {
475
 void ST7920_Lite_Status_Screen::draw_fan_icon(const bool whichIcon) {
512
   set_ddram_address(DDRAM_LINE_1 + 5);
476
   set_ddram_address(DDRAM_LINE_1 + 5);
513
   begin_data();
477
   begin_data();
592
   write_byte('%');
556
   write_byte('%');
593
 }
557
 }
594
 
558
 
595
-void ST7920_Lite_Status_Screen::draw_print_time(const duration_t &elapsed, char suffix) {
596
-  #if HOTENDS == 1
597
-    set_ddram_address(DDRAM_LINE_3);
598
-  #else
599
-    set_ddram_address(DDRAM_LINE_3 + 5);
600
-  #endif
601
-  char str[7];
602
-  int str_length = elapsed.toDigital(str);
603
-  str[str_length++] = suffix;
604
-  begin_data();
605
-  write_str(str, str_length);
606
-}
607
-
608
 void ST7920_Lite_Status_Screen::draw_feedrate_percentage(const uint16_t percentage) {
559
 void ST7920_Lite_Status_Screen::draw_feedrate_percentage(const uint16_t percentage) {
609
-  // We only have enough room for the feedrate when
610
-  // we have one extruder
560
+  // We only have enough room for the feedrate when we have one extruder
611
   #if HOTENDS == 1
561
   #if HOTENDS == 1
612
     set_ddram_address(DDRAM_LINE_2 + 6);
562
     set_ddram_address(DDRAM_LINE_2 + 6);
613
     begin_data();
563
     begin_data();
631
       write_str(str);
581
       write_str(str);
632
       while (slen < TEXT_MODE_LCD_WIDTH) { write_byte(' '); ++slen; }
582
       while (slen < TEXT_MODE_LCD_WIDTH) { write_byte(' '); ++slen; }
633
     }
583
     }
634
-    else {
635
-      // String is larger than the available space in screen.
584
+    else {  // String is larger than the available space in ST7920_Lite_Status_Screen::
636
 
585
 
637
-      // Get a pointer to the next valid UTF8 character
638
-      // and the string remaining length
586
+      // Get a pointer to the next valid UTF8 character and the string remaining length
639
       uint8_t rlen;
587
       uint8_t rlen;
640
       const char *stat = ui.status_and_len(rlen);
588
       const char *stat = ui.status_and_len(rlen);
641
       write_str(stat, TEXT_MODE_LCD_WIDTH);
589
       write_str(stat, TEXT_MODE_LCD_WIDTH);
643
       // If the remaining string doesn't completely fill the screen
591
       // If the remaining string doesn't completely fill the screen
644
       if (rlen < TEXT_MODE_LCD_WIDTH) {
592
       if (rlen < TEXT_MODE_LCD_WIDTH) {
645
         uint8_t chars = TEXT_MODE_LCD_WIDTH - rlen; // Amount of space left in characters
593
         uint8_t chars = TEXT_MODE_LCD_WIDTH - rlen; // Amount of space left in characters
646
-        write_byte(' ');                        // Always at 1+ spaces left, draw a space
647
-        if (--chars) {                          // Draw a second space if there's room
594
+        write_byte(' ');                            // Always at 1+ spaces left, draw a space
595
+        if (--chars) {                              // Draw a second space if there's room
648
           write_byte(' ');
596
           write_byte(' ');
649
-          if (--chars) {                        // Draw a third space if there's room
597
+          if (--chars) {                            // Draw a third space if there's room
650
             write_byte(' ');
598
             write_byte(' ');
651
-            if (--chars) write_str(str, chars); // Print a second copy of the message
599
+            if (--chars) write_str(str, chars);     // Print a second copy of the message
652
           }
600
           }
653
         }
601
         }
654
       }
602
       }
715
   return true;
663
   return true;
716
 }
664
 }
717
 
665
 
666
+// Process progress strings
667
+#if HAS_PRINT_PROGRESS
668
+  static char screenstr[8];
669
+
670
+  char * ST7920_Lite_Status_Screen::prepare_time_string(const duration_t &time, char prefix) {
671
+    static char str[6];
672
+    memset(&screenstr, 0x20, 8); // fill with spaces to avoid artifacts, not doing right-justification to save cycles
673
+    screenstr[0] = prefix;
674
+    TERN_(HOTENDS == 1, screenstr[1] = 0x07;)  // add bullet • separator when there is space
675
+    int str_length = time.toDigital(str);
676
+    memcpy(&screenstr[TERN(HOTENDS == 1, 2, 1)], str, str_length); //memcpy because we can't have terminator
677
+    return screenstr;
678
+  }
679
+
680
+  void ST7920_Lite_Status_Screen::draw_progress_string(uint8_t addr, const char *str) {
681
+    set_ddram_address(addr);
682
+    begin_data();
683
+    write_str(str, TERN(HOTENDS == 1, 8, 6));
684
+  }
685
+
686
+  #define PPOS (DDRAM_LINE_3 + TERN(HOTENDS == 1, 4, 5)) // progress string position, in 16-bit words
687
+
688
+  #if ENABLED(SHOW_PROGRESS_PERCENT)
689
+    void MarlinUI::drawPercent() { lightUI.drawPercent(); }
690
+    void ST7920_Lite_Status_Screen::drawPercent() {
691
+      #define LSHIFT TERN(HOTENDS == 1, 0, 1)
692
+      const uint8_t progress = ui.get_progress_percent();
693
+      memset(&screenstr, 0x20, 8); // fill with spaces to avoid artifacts
694
+      if (progress){
695
+        memcpy(&screenstr[2 - LSHIFT], \
696
+                  TERN(PRINT_PROGRESS_SHOW_DECIMALS, permyriadtostr4(ui.get_progress_permyriad()), ui8tostr3rj(progress)), \
697
+                  TERN(PRINT_PROGRESS_SHOW_DECIMALS, 4, 3));
698
+        screenstr[(TERN(PRINT_PROGRESS_SHOW_DECIMALS, 6, 5) - LSHIFT)] = '%';
699
+        draw_progress_string(PPOS, screenstr);
700
+      }
701
+    }
702
+  #endif
703
+  #if ENABLED(SHOW_REMAINING_TIME)
704
+    void MarlinUI::drawRemain() { lightUI.drawRemain(); }
705
+    void ST7920_Lite_Status_Screen::drawRemain() {
706
+      const duration_t remaint = TERN0(SET_REMAINING_TIME, ui.get_remaining_time());
707
+      if (printJobOngoing() && remaint.value) {
708
+        draw_progress_string( PPOS, prepare_time_string(remaint, 'R'));
709
+      }
710
+    }
711
+  #endif
712
+  #if ENABLED(SHOW_INTERACTION_TIME)
713
+    void MarlinUI::drawInter() { lightUI.drawInter(); }
714
+    void ST7920_Lite_Status_Screen::drawInter() {
715
+      const duration_t interactt = ui.interaction_time;
716
+      if (printingIsActive() && interactt.value) {
717
+        draw_progress_string( PPOS, prepare_time_string(interactt, 'C'));
718
+      }
719
+    }
720
+  #endif
721
+  #if ENABLED(SHOW_ELAPSED_TIME)
722
+    void MarlinUI::drawElapsed() { lightUI.drawElapsed(); }
723
+    void ST7920_Lite_Status_Screen::drawElapsed() {
724
+      if (printJobOngoing()) {
725
+        const duration_t elapsedt = print_job_timer.duration();
726
+        draw_progress_string( PPOS, prepare_time_string(elapsedt, 'E'));
727
+      }
728
+    }
729
+  #endif
730
+
731
+  /**
732
+   * Although this is undocumented, the ST7920 allows the character
733
+   * data buffer (DDRAM) to be used in conjunction with the graphics
734
+   * bitmap buffer (CGRAM). The contents of the graphics buffer is
735
+   * XORed with the data from the character generator. This allows
736
+   * us to make the progress bar out of graphical data (the bar) and
737
+   * text data (the percentage).
738
+   */
739
+  void ST7920_Lite_Status_Screen::draw_progress_bar(const uint8_t value) {
740
+    #if HOTENDS == 1
741
+      // If we have only one extruder, draw a long progress bar on the third line
742
+      constexpr uint8_t top     = 1,         // Top in pixels
743
+                        bottom  = 13,        // Bottom in pixels
744
+                        left    = 8,         // Left edge, in 16-bit words
745
+                        width   = 4;         // Width of progress bar, in 16-bit words
746
+    #else
747
+      constexpr uint8_t top     = 16 + 1,
748
+                        bottom  = 16 + 13,
749
+                        left    = 5,
750
+                        width   = 3;
751
+    #endif
752
+    const uint8_t char_pcnt  = 100 / width; // How many percent does each 16-bit word represent?
753
+
754
+    // Draw the progress bar as a bitmap in CGRAM
755
+    // This drawing is a mess and only produce readable result around 25% steps
756
+    // i.e. 74-76% look fine [||||||||||||||||||||||||        ], but 73% look like this: [||||||||||||||||       |        ]
757
+    // meaning partially filled bytes produce only single vertical line, and i bet they're not supposed to!
758
+    LOOP_S_LE_N(y, top, bottom) {
759
+      set_gdram_address(left, y);
760
+      begin_data();
761
+      LOOP_L_N(x, width) {
762
+        uint16_t gfx_word = 0x0000;
763
+        if ((x + 1) * char_pcnt <= value)
764
+          gfx_word = 0xFFFF;                                              // Draw completely filled bytes
765
+        else if ((x * char_pcnt) < value)
766
+          gfx_word = int16_t(0x8000) >> (value % char_pcnt) * 16 / char_pcnt; // Draw partially filled bytes
767
+
768
+        // Draw the frame around the progress bar
769
+        if (y == top || y == bottom)
770
+          gfx_word = 0xFFFF;        // Draw top/bottom border
771
+        else if (x == width - 1)
772
+          gfx_word |= 0x0001;       // Draw right border
773
+        else if (x == 0)
774
+          gfx_word |= 0x8000;       // Draw left border
775
+        write_word(gfx_word);
776
+      }
777
+    }
778
+
779
+    // // Draw the percentage as text in DDRAM
780
+    // #if HOTENDS == 1
781
+    //   set_ddram_address(DDRAM_LINE_3 + 4);
782
+    //   begin_data();
783
+    //   write_byte(' ');
784
+    // #else
785
+    //   set_ddram_address(DDRAM_LINE_2 + left);
786
+    //   begin_data();
787
+    // #endif
788
+
789
+    // // Draw centered
790
+    // if (value > 9)
791
+    //   write_number(value, 4);
792
+    // else
793
+    //   write_number(value, 3);
794
+    // write_str(F("%  "));
795
+  }
796
+
797
+  void ST7920_Lite_Status_Screen::update_progress(const bool forceUpdate) {
798
+
799
+    // Since the progress bar involves writing
800
+    // quite a few bytes to GDRAM, only do this
801
+    // when an update is actually necessary.
802
+
803
+    const uint8_t progress = ui.get_progress_percent();
804
+    static uint8_t last_progress = 0;
805
+    if (forceUpdate || last_progress != progress/2) {
806
+      last_progress = progress/2;     // Because progress bar turns out only 62||46px wide, we only need to redraw it every 2%
807
+      draw_progress_bar(progress);
808
+    }
809
+  }
810
+#endif // HAS_PRINT_PROGRESS
811
+
718
 void ST7920_Lite_Status_Screen::update_indicators(const bool forceUpdate) {
812
 void ST7920_Lite_Status_Screen::update_indicators(const bool forceUpdate) {
719
   if (forceUpdate || indicators_changed()) {
813
   if (forceUpdate || indicators_changed()) {
720
     const bool       blink              = ui.get_blink();
814
     const bool       blink              = ui.get_blink();
721
-    const duration_t elapsed            = print_job_timer.duration();
722
-    duration_t       remaining          = TERN0(USE_M73_REMAINING_TIME, ui.get_remaining_time());
723
     const uint16_t   feedrate_perc      = feedrate_percentage;
815
     const uint16_t   feedrate_perc      = feedrate_percentage;
724
     const celsius_t  extruder_1_temp    = thermalManager.wholeDegHotend(0),
816
     const celsius_t  extruder_1_temp    = thermalManager.wholeDegHotend(0),
725
                      extruder_1_target  = thermalManager.degTargetHotend(0);
817
                      extruder_1_target  = thermalManager.degTargetHotend(0);
736
     TERN_(HAS_MULTI_HOTEND, draw_extruder_2_temp(extruder_2_temp, extruder_2_target, forceUpdate));
828
     TERN_(HAS_MULTI_HOTEND, draw_extruder_2_temp(extruder_2_temp, extruder_2_target, forceUpdate));
737
     TERN_(HAS_HEATED_BED, draw_bed_temp(bed_temp, bed_target, forceUpdate));
829
     TERN_(HAS_HEATED_BED, draw_bed_temp(bed_temp, bed_target, forceUpdate));
738
 
830
 
831
+    // Update the fan and bed animations
739
     uint8_t spd = thermalManager.fan_speed[0];
832
     uint8_t spd = thermalManager.fan_speed[0];
740
     #if ENABLED(ADAPTIVE_FAN_SLOWING)
833
     #if ENABLED(ADAPTIVE_FAN_SLOWING)
741
       if (!blink && thermalManager.fan_speed_scaler[0] < 128)
834
       if (!blink && thermalManager.fan_speed_scaler[0] < 128)
742
         spd = thermalManager.scaledFanSpeed(0, spd);
835
         spd = thermalManager.scaledFanSpeed(0, spd);
743
     #endif
836
     #endif
744
     draw_fan_speed(thermalManager.pwmToPercent(spd));
837
     draw_fan_speed(thermalManager.pwmToPercent(spd));
745
-
746
-    // Draw elapsed/remaining time
747
-    const bool show_remaining = ENABLED(SHOW_REMAINING_TIME) && (DISABLED(ROTATE_PROGRESS_DISPLAY) || blink);
748
-    if (show_remaining && !remaining.second()) {
749
-      const auto progress = ui.get_progress_percent();
750
-      if (progress)
751
-        remaining = elapsed.second() * (100 - progress) / progress;
752
-    }
753
-    if (show_remaining && remaining.second())
754
-      draw_print_time(remaining, 'R');
755
-    else
756
-      draw_print_time(elapsed);
838
+    if (spd) draw_fan_icon(blink);
839
+    TERN_(HAS_HEATED_BED, draw_heat_icon(bed_target > 0 && blink, bed_target > 0));
757
 
840
 
758
     draw_feedrate_percentage(feedrate_perc);
841
     draw_feedrate_percentage(feedrate_perc);
759
 
842
 
760
-    // Update the fan and bed animations
761
-    if (spd) draw_fan_icon(blink);
762
-    TERN_(HAS_HEATED_BED, draw_heat_icon(bed_target > 0 && blink, bed_target > 0));
843
+    // Update and draw progress strings
844
+    TERN_(HAS_PRINT_PROGRESS, ui.rotate_progress());
763
   }
845
   }
764
 }
846
 }
765
 
847
 
839
   #endif
921
   #endif
840
 }
922
 }
841
 
923
 
842
-void ST7920_Lite_Status_Screen::update_progress(const bool forceUpdate) {
843
-  #if EITHER(LCD_SET_PROGRESS_MANUALLY, SDSUPPORT)
844
-
845
-    // Since the progress bar involves writing
846
-    // quite a few bytes to GDRAM, only do this
847
-    // when an update is actually necessary.
848
-
849
-    static uint8_t last_progress = 0;
850
-    const uint8_t progress = ui.get_progress_percent();
851
-    if (forceUpdate || last_progress != progress) {
852
-      last_progress = progress;
853
-      draw_progress_bar(progress);
854
-    }
855
-
856
-  #else
857
-
858
-    UNUSED(forceUpdate);
859
-
860
-  #endif
861
-}
862
-
863
 void ST7920_Lite_Status_Screen::update(const bool forceUpdate) {
924
 void ST7920_Lite_Status_Screen::update(const bool forceUpdate) {
864
   cs();
925
   cs();
865
   update_indicators(forceUpdate);
926
   update_indicators(forceUpdate);
902
 }
963
 }
903
 
964
 
904
 void MarlinUI::draw_status_screen() {
965
 void MarlinUI::draw_status_screen() {
905
-  ST7920_Lite_Status_Screen::update(false);
966
+  lightUI.update(false);
906
 }
967
 }
907
 
968
 
908
 // This method is called before each screen update and
969
 // This method is called before each screen update and
912
   static bool lastInStatus = false;
973
   static bool lastInStatus = false;
913
   if (lastInStatus == inStatus) return;
974
   if (lastInStatus == inStatus) return;
914
   if ((lastInStatus = inStatus))
975
   if ((lastInStatus = inStatus))
915
-    ST7920_Lite_Status_Screen::on_entry();
976
+    lightUI.on_entry();
916
   else
977
   else
917
-    ST7920_Lite_Status_Screen::on_exit();
978
+    lightUI.on_exit();
918
 }
979
 }
919
 
980
 
920
 #endif // LIGHTWEIGHT_UI
981
 #endif // LIGHTWEIGHT_UI

+ 14
- 3
Marlin/src/lcd/dogm/status_screen_lite_ST7920.h View File

75
   protected:
75
   protected:
76
     static void draw_degree_symbol(uint8_t x, uint8_t y, const bool draw);
76
     static void draw_degree_symbol(uint8_t x, uint8_t y, const bool draw);
77
     static void draw_static_elements();
77
     static void draw_static_elements();
78
-    static void draw_progress_bar(const uint8_t value);
79
     static void draw_fan_icon(const bool whichIcon);
78
     static void draw_fan_icon(const bool whichIcon);
80
     static void draw_heat_icon(const bool whichIcon, const bool heating);
79
     static void draw_heat_icon(const bool whichIcon, const bool heating);
81
     static void draw_temps(uint8_t line, const int16_t temp, const int16_t target, bool showTarget, bool targetStateChange);
80
     static void draw_temps(uint8_t line, const int16_t temp, const int16_t target, bool showTarget, bool targetStateChange);
83
     static void draw_extruder_2_temp(const int16_t temp, const int16_t target, bool forceUpdate=false);
82
     static void draw_extruder_2_temp(const int16_t temp, const int16_t target, bool forceUpdate=false);
84
     static void draw_bed_temp(const int16_t temp, const int16_t target, bool forceUpdate=false);
83
     static void draw_bed_temp(const int16_t temp, const int16_t target, bool forceUpdate=false);
85
     static void draw_fan_speed(const uint8_t value);
84
     static void draw_fan_speed(const uint8_t value);
86
-    static void draw_print_time(const duration_t &elapsed, char suffix=' ');
85
+    #if HAS_PRINT_PROGRESS
86
+      static void draw_progress_bar(const uint8_t value);
87
+      static char* prepare_time_string(const duration_t &time, char prefix=' ');
88
+      static void draw_progress_string(uint8_t addr, const char *str);
89
+      static void update_progress(const bool forceUpdate);
90
+    #endif
87
     static void draw_feedrate_percentage(const uint16_t percentage);
91
     static void draw_feedrate_percentage(const uint16_t percentage);
88
     static void draw_status_message();
92
     static void draw_status_message();
89
     static void draw_position(const xyze_pos_t &pos, bool position_known=true);
93
     static void draw_position(const xyze_pos_t &pos, bool position_known=true);
96
     static void update_indicators(const bool forceUpdate);
100
     static void update_indicators(const bool forceUpdate);
97
     static void update_position(const bool forceUpdate, bool resetChecksum);
101
     static void update_position(const bool forceUpdate, bool resetChecksum);
98
     static void update_status_or_position(bool forceUpdate);
102
     static void update_status_or_position(bool forceUpdate);
99
-    static void update_progress(const bool forceUpdate);
100
 
103
 
101
   public:
104
   public:
102
     static void update(const bool forceUpdate);
105
     static void update(const bool forceUpdate);
103
     static void on_entry();
106
     static void on_entry();
104
     static void on_exit();
107
     static void on_exit();
105
     static void clear_text_buffer();
108
     static void clear_text_buffer();
109
+    #if HAS_PRINT_PROGRESS
110
+      static void drawPercent();
111
+      static void drawRemain();
112
+      static void drawInter();
113
+      static void drawElapsed();
114
+    #endif
106
 };
115
 };
116
+
117
+extern ST7920_Lite_Status_Screen lightUI;

+ 7
- 7
Marlin/src/lcd/e3v2/jyersui/dwin.cpp View File

733
   Update_Status_Bar(true);
733
   Update_Status_Bar(true);
734
   Draw_Print_ProgressBar();
734
   Draw_Print_ProgressBar();
735
   Draw_Print_ProgressElapsed();
735
   Draw_Print_ProgressElapsed();
736
-  TERN_(USE_M73_REMAINING_TIME, Draw_Print_ProgressRemain());
736
+  TERN_(SET_REMAINING_TIME, Draw_Print_ProgressRemain());
737
   Draw_Print_Filename(true);
737
   Draw_Print_Filename(true);
738
 }
738
 }
739
 
739
 
759
   DWIN_Draw_String(false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_percent, Percent_Color), Color_Bg_Black, 133, 133, F("%"));
759
   DWIN_Draw_String(false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_percent, Percent_Color), Color_Bg_Black, 133, 133, F("%"));
760
 }
760
 }
761
 
761
 
762
-#if ENABLED(USE_M73_REMAINING_TIME)
762
+#if ENABLED(SET_REMAINING_TIME)
763
 
763
 
764
   void CrealityDWINClass::Draw_Print_ProgressRemain() {
764
   void CrealityDWINClass::Draw_Print_ProgressRemain() {
765
     uint16_t remainingtime = ui.get_remaining_time();
765
     uint16_t remainingtime = ui.get_remaining_time();
4565
     }
4565
     }
4566
     else
4566
     else
4567
       strcpy_P(filename, PSTR("Host Print"));
4567
       strcpy_P(filename, PSTR("Host Print"));
4568
-    TERN_(LCD_SET_PROGRESS_MANUALLY, ui.set_progress(0));
4569
-    TERN_(USE_M73_REMAINING_TIME, ui.set_remaining_time(0));
4568
+    TERN_(SET_PROGRESS_PERCENT, ui.set_progress(0));
4569
+    TERN_(SET_REMAINING_TIME, ui.set_remaining_time(0));
4570
     Draw_Print_Screen();
4570
     Draw_Print_Screen();
4571
   }
4571
   }
4572
 }
4572
 }
4575
   printing = false;
4575
   printing = false;
4576
   sdprint = false;
4576
   sdprint = false;
4577
   thermalManager.cooldown();
4577
   thermalManager.cooldown();
4578
-  TERN_(LCD_SET_PROGRESS_MANUALLY, ui.set_progress(100 * (PROGRESS_SCALE)));
4579
-  TERN_(USE_M73_REMAINING_TIME, ui.set_remaining_time(0));
4578
+  TERN_(SET_PROGRESS_PERCENT, ui.set_progress(100 * (PROGRESS_SCALE)));
4579
+  TERN_(SET_REMAINING_TIME, ui.set_remaining_time(0));
4580
   Draw_Print_confirm();
4580
   Draw_Print_confirm();
4581
 }
4581
 }
4582
 
4582
 
4653
     if (process == Print) {
4653
     if (process == Print) {
4654
       Draw_Print_ProgressBar();
4654
       Draw_Print_ProgressBar();
4655
       Draw_Print_ProgressElapsed();
4655
       Draw_Print_ProgressElapsed();
4656
-      TERN_(USE_M73_REMAINING_TIME, Draw_Print_ProgressRemain());
4656
+      TERN_(SET_REMAINING_TIME, Draw_Print_ProgressRemain());
4657
     }
4657
     }
4658
   }
4658
   }
4659
 
4659
 

+ 1
- 1
Marlin/src/lcd/e3v2/jyersui/dwin.h View File

188
   static void Draw_Print_Screen();
188
   static void Draw_Print_Screen();
189
   static void Draw_Print_Filename(const bool reset=false);
189
   static void Draw_Print_Filename(const bool reset=false);
190
   static void Draw_Print_ProgressBar();
190
   static void Draw_Print_ProgressBar();
191
-  #if ENABLED(USE_M73_REMAINING_TIME)
191
+  #if ENABLED(SET_REMAINING_TIME)
192
     static void Draw_Print_ProgressRemain();
192
     static void Draw_Print_ProgressRemain();
193
   #endif
193
   #endif
194
   static void Draw_Print_ProgressElapsed();
194
   static void Draw_Print_ProgressElapsed();

+ 3
- 3
Marlin/src/lcd/e3v2/marlinui/ui_status_480x272.cpp View File

374
 
374
 
375
   #if ENABLED(DWIN_MARLINUI_PORTRAIT)
375
   #if ENABLED(DWIN_MARLINUI_PORTRAIT)
376
 
376
 
377
-    // Portrait mode only shows one value at a time, and will rotate if ROTATE_PROGRESS_DISPLAY
377
+    // Portrait mode only shows one value at a time, and will rotate if many are enabled
378
     dwin_string.set();
378
     dwin_string.set();
379
     char prefix = ' ';
379
     char prefix = ' ';
380
     #if ENABLED(SHOW_REMAINING_TIME)
380
     #if ENABLED(SHOW_REMAINING_TIME)
381
-      if (TERN1(ROTATE_PROGRESS_DISPLAY, blink) && print_job_timer.isRunning()) {
381
+      if (blink && print_job_timer.isRunning()) {
382
         time = get_remaining_time();
382
         time = get_remaining_time();
383
         prefix = 'R';
383
         prefix = 'R';
384
       }
384
       }
447
       //if (pb_solid < old_solid)
447
       //if (pb_solid < old_solid)
448
         DWIN_Draw_Rectangle(1, Color_Bg_Black, pb_left + 1 + pb_solid, pb_top + 1, pb_right - 1, pb_bottom - 1); // Erase the rest
448
         DWIN_Draw_Rectangle(1, Color_Bg_Black, pb_left + 1 + pb_solid, pb_top + 1, pb_right - 1, pb_bottom - 1); // Erase the rest
449
 
449
 
450
-      #if ENABLED(SHOW_SD_PERCENT)
450
+      #if ENABLED(SHOW_PROGRESS_PERCENT)
451
         dwin_string.set(TERN(PRINT_PROGRESS_SHOW_DECIMALS, permyriadtostr4(progress), ui8tostr3rj(progress / (PROGRESS_SCALE))));
451
         dwin_string.set(TERN(PRINT_PROGRESS_SHOW_DECIMALS, permyriadtostr4(progress), ui8tostr3rj(progress / (PROGRESS_SCALE))));
452
         dwin_string.add('%');
452
         dwin_string.add('%');
453
         DWIN_Draw_String(
453
         DWIN_Draw_String(

+ 2
- 2
Marlin/src/lcd/e3v2/proui/dwin.cpp View File

43
 #if DISABLED(INDIVIDUAL_AXIS_HOMING_SUBMENU)
43
 #if DISABLED(INDIVIDUAL_AXIS_HOMING_SUBMENU)
44
   #warning "INDIVIDUAL_AXIS_HOMING_SUBMENU is recommended with ProUI."
44
   #warning "INDIVIDUAL_AXIS_HOMING_SUBMENU is recommended with ProUI."
45
 #endif
45
 #endif
46
-#if DISABLED(LCD_SET_PROGRESS_MANUALLY)
47
-  #warning "LCD_SET_PROGRESS_MANUALLY is recommended with ProUI."
46
+#if DISABLED(SET_PROGRESS_MANUALLY)
47
+  #warning "SET_PROGRESS_MANUALLY is recommended with ProUI."
48
 #endif
48
 #endif
49
 #if DISABLED(STATUS_MESSAGE_SCROLLING)
49
 #if DISABLED(STATUS_MESSAGE_SCROLLING)
50
   #warning "STATUS_MESSAGE_SCROLLING is recommended with ProUI."
50
   #warning "STATUS_MESSAGE_SCROLLING is recommended with ProUI."

+ 1
- 1
Marlin/src/lcd/extui/dgus/fysetc/DGUSDisplayDef.cpp View File

63
   VP_XPos, VP_YPos, VP_ZPos,
63
   VP_XPos, VP_YPos, VP_ZPos,
64
   VP_Fan0_Percentage,
64
   VP_Fan0_Percentage,
65
   VP_Feedrate_Percentage,
65
   VP_Feedrate_Percentage,
66
-  #if ENABLED(LCD_SET_PROGRESS_MANUALLY)
66
+  #if ENABLED(SET_PROGRESS_PERCENT)
67
     VP_PrintProgress_Percentage,
67
     VP_PrintProgress_Percentage,
68
   #endif
68
   #endif
69
   0x0000
69
   0x0000

+ 1
- 1
Marlin/src/lcd/extui/dgus/hiprecy/DGUSDisplayDef.cpp View File

63
   VP_XPos, VP_YPos, VP_ZPos,
63
   VP_XPos, VP_YPos, VP_ZPos,
64
   VP_Fan0_Percentage,
64
   VP_Fan0_Percentage,
65
   VP_Feedrate_Percentage,
65
   VP_Feedrate_Percentage,
66
-  #if ENABLED(LCD_SET_PROGRESS_MANUALLY)
66
+  #if ENABLED(SET_PROGRESS_PERCENT)
67
     VP_PrintProgress_Percentage,
67
     VP_PrintProgress_Percentage,
68
   #endif
68
   #endif
69
   0x0000
69
   0x0000

+ 1
- 1
Marlin/src/lcd/extui/dgus/mks/DGUSDisplayDef.cpp View File

135
   VP_XPos, VP_YPos, VP_ZPos,
135
   VP_XPos, VP_YPos, VP_ZPos,
136
   VP_Fan0_Percentage,
136
   VP_Fan0_Percentage,
137
   VP_Feedrate_Percentage,
137
   VP_Feedrate_Percentage,
138
-  #if ENABLED(LCD_SET_PROGRESS_MANUALLY)
138
+  #if ENABLED(SET_PROGRESS_PERCENT)
139
     VP_PrintProgress_Percentage,
139
     VP_PrintProgress_Percentage,
140
   #endif
140
   #endif
141
   0x0000
141
   0x0000

+ 2
- 2
Marlin/src/lcd/extui/mks_ui/draw_printing.cpp View File

39
   #include "../../../feature/powerloss.h"
39
   #include "../../../feature/powerloss.h"
40
 #endif
40
 #endif
41
 
41
 
42
-#if BOTH(LCD_SET_PROGRESS_MANUALLY, USE_M73_REMAINING_TIME)
42
+#if ENABLED(SET_REMAINING_TIME)
43
   #include "../../marlinui.h"
43
   #include "../../marlinui.h"
44
 #endif
44
 #endif
45
 
45
 
244
 }
244
 }
245
 
245
 
246
 void disp_print_time() {
246
 void disp_print_time() {
247
-  #if BOTH(LCD_SET_PROGRESS_MANUALLY, USE_M73_REMAINING_TIME)
247
+  #if ENABLED(SET_REMAINING_TIME)
248
     const uint32_t r = ui.get_remaining_time();
248
     const uint32_t r = ui.get_remaining_time();
249
     sprintf_P(public_buf_l, PSTR("%02d:%02d R"), r / 3600, (r % 3600) / 60);
249
     sprintf_P(public_buf_l, PSTR("%02d:%02d R"), r / 3600, (r % 3600) / 60);
250
   #else
250
   #else

+ 3
- 0
Marlin/src/lcd/extui/ui_api.h View File

164
   #if ENABLED(SHOW_REMAINING_TIME)
164
   #if ENABLED(SHOW_REMAINING_TIME)
165
     inline uint32_t getProgress_seconds_remaining() { return ui.get_remaining_time(); }
165
     inline uint32_t getProgress_seconds_remaining() { return ui.get_remaining_time(); }
166
   #endif
166
   #endif
167
+  #if ENABLED(SHOW_INTERACTION_TIME)
168
+    inline uint32_t getInteraction_seconds_remaining() { return ui.interaction_time; }
169
+  #endif
167
 
170
 
168
   #if HAS_LEVELING
171
   #if HAS_LEVELING
169
     bool getLevelingActive();
172
     bool getLevelingActive();

+ 41
- 17
Marlin/src/lcd/marlinui.cpp View File

79
   statusResetFunc_t MarlinUI::status_reset_callback; // = nullptr
79
   statusResetFunc_t MarlinUI::status_reset_callback; // = nullptr
80
 #endif
80
 #endif
81
 
81
 
82
-#if ENABLED(LCD_SET_PROGRESS_MANUALLY)
83
-  MarlinUI::progress_t MarlinUI::progress_override; // = 0
84
-  #if ENABLED(USE_M73_REMAINING_TIME)
82
+#if ENABLED(SET_PROGRESS_MANUALLY)
83
+  #if ENABLED(SET_PROGRESS_PERCENT)
84
+    MarlinUI::progress_t MarlinUI::progress_override; // = 0
85
+  #endif
86
+  #if ENABLED(SET_REMAINING_TIME)
85
     uint32_t MarlinUI::remaining_time;
87
     uint32_t MarlinUI::remaining_time;
86
   #endif
88
   #endif
89
+  #if ENABLED(SET_INTERACTION_TIME)
90
+    uint32_t MarlinUI::interaction_time;
91
+  #endif
87
 #endif
92
 #endif
88
 
93
 
89
 #if HAS_MULTI_LANGUAGE
94
 #if HAS_MULTI_LANGUAGE
153
   bool MarlinUI::lcd_clicked;
158
   bool MarlinUI::lcd_clicked;
154
 #endif
159
 #endif
155
 
160
 
156
-#if EITHER(HAS_WIRED_LCD, DWIN_CREALITY_LCD_JYERSUI)
161
+#if LCD_WITH_BLINK
157
 
162
 
158
   bool MarlinUI::get_blink() {
163
   bool MarlinUI::get_blink() {
159
     static uint8_t blink = 0;
164
     static uint8_t blink = 0;
1677
     print_job_timer.start(); // Also called by M24
1682
     print_job_timer.start(); // Also called by M24
1678
   }
1683
   }
1679
 
1684
 
1680
-  #if HAS_PRINT_PROGRESS
1681
-
1682
-    MarlinUI::progress_t MarlinUI::_get_progress() {
1683
-      return (
1684
-        TERN0(LCD_SET_PROGRESS_MANUALLY, (progress_override & PROGRESS_MASK))
1685
-        #if ENABLED(SDSUPPORT)
1686
-          ?: TERN(HAS_PRINT_PROGRESS_PERMYRIAD, card.permyriadDone(), card.percentDone())
1687
-        #endif
1688
-      );
1689
-    }
1690
-
1691
-  #endif
1692
-
1693
   #if HAS_TOUCH_BUTTONS
1685
   #if HAS_TOUCH_BUTTONS
1694
 
1686
 
1695
     //
1687
     //
1723
 
1715
 
1724
 #endif // HAS_DISPLAY
1716
 #endif // HAS_DISPLAY
1725
 
1717
 
1718
+#if HAS_PRINT_PROGRESS
1719
+
1720
+  MarlinUI::progress_t MarlinUI::_get_progress() {
1721
+    return (
1722
+      TERN0(SET_PROGRESS_PERCENT, (progress_override & PROGRESS_MASK))
1723
+      #if ENABLED(SDSUPPORT)
1724
+        ?: TERN(HAS_PRINT_PROGRESS_PERMYRIAD, card.permyriadDone(), card.percentDone())
1725
+      #endif
1726
+    );
1727
+  }
1728
+
1729
+  #if LCD_WITH_BLINK
1730
+    typedef void (*PrintProgress_t)();
1731
+    void MarlinUI::rotate_progress() { // Renew and redraw all enabled progress strings
1732
+      const PrintProgress_t progFunc[] = {
1733
+        OPTITEM(SHOW_PROGRESS_PERCENT, drawPercent)
1734
+        OPTITEM(SHOW_ELAPSED_TIME, drawElapsed)
1735
+        OPTITEM(SHOW_REMAINING_TIME, drawRemain)
1736
+        OPTITEM(SHOW_INTERACTION_TIME, drawInter)
1737
+      };
1738
+      static bool prev_blink;
1739
+      static uint8_t i;
1740
+      if (prev_blink != get_blink()) {
1741
+        prev_blink = get_blink();
1742
+        if (++i >= COUNT(progFunc)) i = 0;
1743
+        (*progFunc[i])();
1744
+      }
1745
+    }
1746
+  #endif
1747
+
1748
+#endif // HAS_PRINT_PROGRESS
1749
+
1726
 #if ENABLED(SDSUPPORT)
1750
 #if ENABLED(SDSUPPORT)
1727
 
1751
 
1728
   #if ENABLED(EXTENSIBLE_UI)
1752
   #if ENABLED(EXTENSIBLE_UI)

+ 26
- 6
Marlin/src/lcd/marlinui.h View File

25
 #include "../sd/cardreader.h"
25
 #include "../sd/cardreader.h"
26
 #include "../module/motion.h"
26
 #include "../module/motion.h"
27
 #include "../libs/buzzer.h"
27
 #include "../libs/buzzer.h"
28
-
29
 #include "buttons.h"
28
 #include "buttons.h"
30
 
29
 
31
 #if ENABLED(TOUCH_SCREEN_CALIBRATION)
30
 #if ENABLED(TOUCH_SCREEN_CALIBRATION)
36
   #define MULTI_E_MANUAL 1
35
   #define MULTI_E_MANUAL 1
37
 #endif
36
 #endif
38
 
37
 
39
-#if HAS_DISPLAY
38
+#if HAS_PRINT_PROGRESS
40
   #include "../module/printcounter.h"
39
   #include "../module/printcounter.h"
41
 #endif
40
 #endif
42
 
41
 
86
 #endif // HAS_WIRED_LCD
85
 #endif // HAS_WIRED_LCD
87
 
86
 
88
 #if EITHER(HAS_WIRED_LCD, DWIN_CREALITY_LCD_JYERSUI)
87
 #if EITHER(HAS_WIRED_LCD, DWIN_CREALITY_LCD_JYERSUI)
88
+  #define LCD_WITH_BLINK 1
89
   #define LCD_UPDATE_INTERVAL TERN(HAS_TOUCH_BUTTONS, 50, 100)
89
   #define LCD_UPDATE_INTERVAL TERN(HAS_TOUCH_BUTTONS, 50, 100)
90
 #endif
90
 #endif
91
 
91
 
303
       #define PROGRESS_SCALE 1U
303
       #define PROGRESS_SCALE 1U
304
       #define PROGRESS_MASK 0x7F
304
       #define PROGRESS_MASK 0x7F
305
     #endif
305
     #endif
306
-    #if ENABLED(LCD_SET_PROGRESS_MANUALLY)
306
+    #if ENABLED(SET_PROGRESS_PERCENT)
307
       static progress_t progress_override;
307
       static progress_t progress_override;
308
       static void set_progress(const progress_t p) { progress_override = _MIN(p, 100U * (PROGRESS_SCALE)); }
308
       static void set_progress(const progress_t p) { progress_override = _MIN(p, 100U * (PROGRESS_SCALE)); }
309
       static void set_progress_done() { progress_override = (PROGRESS_MASK + 1U) + 100U * (PROGRESS_SCALE); }
309
       static void set_progress_done() { progress_override = (PROGRESS_MASK + 1U) + 100U * (PROGRESS_SCALE); }
310
       static void progress_reset() { if (progress_override & (PROGRESS_MASK + 1U)) set_progress(0); }
310
       static void progress_reset() { if (progress_override & (PROGRESS_MASK + 1U)) set_progress(0); }
311
     #endif
311
     #endif
312
-    #if ENABLED(SHOW_REMAINING_TIME)
312
+    #if EITHER(SHOW_REMAINING_TIME, SET_PROGRESS_MANUALLY)
313
       static uint32_t _calculated_remaining_time() {
313
       static uint32_t _calculated_remaining_time() {
314
         const duration_t elapsed = print_job_timer.duration();
314
         const duration_t elapsed = print_job_timer.duration();
315
         const progress_t progress = _get_progress();
315
         const progress_t progress = _get_progress();
316
         return progress ? elapsed.value * (100 * (PROGRESS_SCALE) - progress) / progress : 0;
316
         return progress ? elapsed.value * (100 * (PROGRESS_SCALE) - progress) / progress : 0;
317
       }
317
       }
318
-      #if ENABLED(USE_M73_REMAINING_TIME)
318
+      #if ENABLED(SET_REMAINING_TIME)
319
         static uint32_t remaining_time;
319
         static uint32_t remaining_time;
320
         FORCE_INLINE static void set_remaining_time(const uint32_t r) { remaining_time = r; }
320
         FORCE_INLINE static void set_remaining_time(const uint32_t r) { remaining_time = r; }
321
         FORCE_INLINE static uint32_t get_remaining_time() { return remaining_time ?: _calculated_remaining_time(); }
321
         FORCE_INLINE static uint32_t get_remaining_time() { return remaining_time ?: _calculated_remaining_time(); }
323
       #else
323
       #else
324
         FORCE_INLINE static uint32_t get_remaining_time() { return _calculated_remaining_time(); }
324
         FORCE_INLINE static uint32_t get_remaining_time() { return _calculated_remaining_time(); }
325
       #endif
325
       #endif
326
+      #if ENABLED(SET_INTERACTION_TIME)
327
+        static uint32_t interaction_time;
328
+        FORCE_INLINE static void set_interaction_time(const uint32_t r) { interaction_time = r; }
329
+        FORCE_INLINE static void reset_interaction_time() { set_interaction_time(0); }
330
+      #endif
326
     #endif
331
     #endif
327
     static progress_t _get_progress();
332
     static progress_t _get_progress();
328
     #if HAS_PRINT_PROGRESS_PERMYRIAD
333
     #if HAS_PRINT_PROGRESS_PERMYRIAD
329
       FORCE_INLINE static uint16_t get_progress_permyriad() { return _get_progress(); }
334
       FORCE_INLINE static uint16_t get_progress_permyriad() { return _get_progress(); }
330
     #endif
335
     #endif
331
     static uint8_t get_progress_percent() { return uint8_t(_get_progress() / (PROGRESS_SCALE)); }
336
     static uint8_t get_progress_percent() { return uint8_t(_get_progress() / (PROGRESS_SCALE)); }
337
+    #if LCD_WITH_BLINK
338
+      #if ENABLED(SHOW_PROGRESS_PERCENT)
339
+        static void drawPercent();
340
+      #endif
341
+      #if ENABLED(SHOW_ELAPSED_TIME)
342
+        static void drawElapsed();
343
+      #endif
344
+      #if ENABLED(SHOW_REMAINING_TIME)
345
+        static void drawRemain();
346
+      #endif
347
+      #if ENABLED(SHOW_INTERACTION_TIME)
348
+        static void drawInter();
349
+      #endif
350
+      static void rotate_progress();
351
+    #endif
332
   #else
352
   #else
333
     static constexpr uint8_t get_progress_percent() { return 0; }
353
     static constexpr uint8_t get_progress_percent() { return 0; }
334
   #endif
354
   #endif
390
       static void poweroff();
410
       static void poweroff();
391
     #endif
411
     #endif
392
 
412
 
393
-    #if EITHER(HAS_WIRED_LCD, DWIN_CREALITY_LCD_JYERSUI)
413
+    #if LCD_WITH_BLINK
394
       static bool get_blink();
414
       static bool get_blink();
395
     #endif
415
     #endif
396
 
416
 

+ 1
- 1
Marlin/src/lcd/menu/menu.cpp View File

175
 
175
 
176
     TERN_(HAS_TOUCH_BUTTONS, repeat_delay = BUTTON_DELAY_MENU);
176
     TERN_(HAS_TOUCH_BUTTONS, repeat_delay = BUTTON_DELAY_MENU);
177
 
177
 
178
-    TERN_(LCD_SET_PROGRESS_MANUALLY, progress_reset());
178
+    TERN_(SET_PROGRESS_PERCENT, progress_reset());
179
 
179
 
180
     #if BOTH(DOUBLECLICK_FOR_Z_BABYSTEPPING, BABYSTEPPING)
180
     #if BOTH(DOUBLECLICK_FOR_Z_BABYSTEPPING, BABYSTEPPING)
181
       static millis_t doubleclick_expire_ms = 0;
181
       static millis_t doubleclick_expire_ms = 0;

+ 2
- 2
Marlin/src/libs/numtostr.cpp View File

73
 }
73
 }
74
 
74
 
75
 #if HAS_PRINT_PROGRESS_PERMYRIAD
75
 #if HAS_PRINT_PROGRESS_PERMYRIAD
76
-  // Convert unsigned 16-bit permyriad to percent with 100 / 23 / 23.4 / 3.45 format
76
+  // Convert unsigned 16-bit permyriad to percent with 100 / 23.4 / 3.45 format
77
   const char* permyriadtostr4(const uint16_t xx) {
77
   const char* permyriadtostr4(const uint16_t xx) {
78
     if (xx >= 10000)
78
     if (xx >= 10000)
79
-      return "100";
79
+      return " 100"; // space to keep 4-width alignment
80
     else if (xx >= 1000) {
80
     else if (xx >= 1000) {
81
       conv[3] = DIGIMOD(xx, 1000);
81
       conv[3] = DIGIMOD(xx, 1000);
82
       conv[4] = DIGIMOD(xx, 100);
82
       conv[4] = DIGIMOD(xx, 100);

+ 1
- 1
buildroot/tests/SAMD51_grandcentral_m4 View File

21
            FILAMENT_RUNOUT_SENSOR G26_MESH_VALIDATION MESH_EDIT_GFX_OVERLAY Z_SAFE_HOMING \
21
            FILAMENT_RUNOUT_SENSOR G26_MESH_VALIDATION MESH_EDIT_GFX_OVERLAY Z_SAFE_HOMING \
22
            EEPROM_SETTINGS NOZZLE_PARK_FEATURE SDSUPPORT SD_CHECK_AND_RETRY \
22
            EEPROM_SETTINGS NOZZLE_PARK_FEATURE SDSUPPORT SD_CHECK_AND_RETRY \
23
            REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER Z_STEPPER_AUTO_ALIGN ADAPTIVE_STEP_SMOOTHING \
23
            REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER Z_STEPPER_AUTO_ALIGN ADAPTIVE_STEP_SMOOTHING \
24
-           STATUS_MESSAGE_SCROLLING LCD_SET_PROGRESS_MANUALLY SHOW_REMAINING_TIME USE_M73_REMAINING_TIME \
24
+           STATUS_MESSAGE_SCROLLING SET_PROGRESS_MANUALLY SHOW_REMAINING_TIME SET_REMAINING_TIME \
25
            LONG_FILENAME_HOST_SUPPORT CUSTOM_FIRMWARE_UPLOAD M20_TIMESTAMP_SUPPORT \
25
            LONG_FILENAME_HOST_SUPPORT CUSTOM_FIRMWARE_UPLOAD M20_TIMESTAMP_SUPPORT \
26
            SCROLL_LONG_FILENAMES BABYSTEPPING DOUBLECLICK_FOR_Z_BABYSTEPPING \
26
            SCROLL_LONG_FILENAMES BABYSTEPPING DOUBLECLICK_FOR_Z_BABYSTEPPING \
27
            MOVE_Z_WHEN_IDLE BABYSTEP_ZPROBE_OFFSET BABYSTEP_ZPROBE_GFX_OVERLAY \
27
            MOVE_Z_WHEN_IDLE BABYSTEP_ZPROBE_OFFSET BABYSTEP_ZPROBE_GFX_OVERLAY \

+ 1
- 1
buildroot/tests/STM32F103RE_creality View File

20
 
20
 
21
 use_example_configs "Creality/Ender-3 S1/STM32F1"
21
 use_example_configs "Creality/Ender-3 S1/STM32F1"
22
 opt_disable DWIN_CREALITY_LCD Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN AUTO_BED_LEVELING_BILINEAR CONFIGURATION_EMBEDDING CANCEL_OBJECTS FWRETRACT
22
 opt_disable DWIN_CREALITY_LCD Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN AUTO_BED_LEVELING_BILINEAR CONFIGURATION_EMBEDDING CANCEL_OBJECTS FWRETRACT
23
-opt_enable DWIN_LCD_PROUI INDIVIDUAL_AXIS_HOMING_SUBMENU LCD_SET_PROGRESS_MANUALLY STATUS_MESSAGE_SCROLLING \
23
+opt_enable DWIN_LCD_PROUI INDIVIDUAL_AXIS_HOMING_SUBMENU SET_PROGRESS_MANUALLY SET_PROGRESS_PERCENT STATUS_MESSAGE_SCROLLING \
24
            SOUND_MENU_ITEM PRINTCOUNTER NOZZLE_PARK_FEATURE ADVANCED_PAUSE_FEATURE FILAMENT_RUNOUT_SENSOR \
24
            SOUND_MENU_ITEM PRINTCOUNTER NOZZLE_PARK_FEATURE ADVANCED_PAUSE_FEATURE FILAMENT_RUNOUT_SENSOR \
25
            BLTOUCH Z_SAFE_HOMING AUTO_BED_LEVELING_UBL MESH_EDIT_MENU \
25
            BLTOUCH Z_SAFE_HOMING AUTO_BED_LEVELING_UBL MESH_EDIT_MENU \
26
            LIMITED_MAX_FR_EDITING LIMITED_MAX_ACCEL_EDITING LIMITED_JERK_EDITING BAUD_RATE_GCODE
26
            LIMITED_MAX_FR_EDITING LIMITED_MAX_ACCEL_EDITING LIMITED_JERK_EDITING BAUD_RATE_GCODE

+ 62
- 47
buildroot/tests/mega2560 View File

31
            SDSUPPORT SDCARD_SORT_ALPHA USB_FLASH_DRIVE_SUPPORT AUTO_REPORT_SD_STATUS SCROLL_LONG_FILENAMES MEDIA_MENU_AT_TOP \
31
            SDSUPPORT SDCARD_SORT_ALPHA USB_FLASH_DRIVE_SUPPORT AUTO_REPORT_SD_STATUS SCROLL_LONG_FILENAMES MEDIA_MENU_AT_TOP \
32
            EEPROM_SETTINGS EEPROM_CHITCHAT GCODE_MACROS CUSTOM_MENU_MAIN FREEZE_FEATURE CANCEL_OBJECTS SOUND_MENU_ITEM \
32
            EEPROM_SETTINGS EEPROM_CHITCHAT GCODE_MACROS CUSTOM_MENU_MAIN FREEZE_FEATURE CANCEL_OBJECTS SOUND_MENU_ITEM \
33
            MULTI_NOZZLE_DUPLICATION CLASSIC_JERK LIN_ADVANCE EXTRA_LIN_ADVANCE_K QUICK_HOME \
33
            MULTI_NOZZLE_DUPLICATION CLASSIC_JERK LIN_ADVANCE EXTRA_LIN_ADVANCE_K QUICK_HOME \
34
-           LCD_SET_PROGRESS_MANUALLY PRINT_PROGRESS_SHOW_DECIMALS SHOW_REMAINING_TIME \
34
+           SET_PROGRESS_MANUALLY SET_PROGRESS_PERCENT PRINT_PROGRESS_SHOW_DECIMALS SHOW_REMAINING_TIME \
35
            ENCODER_NOISE_FILTER BABYSTEPPING BABYSTEP_XY NANODLP_Z_SYNC I2C_POSITION_ENCODERS M114_DETAIL
35
            ENCODER_NOISE_FILTER BABYSTEPPING BABYSTEP_XY NANODLP_Z_SYNC I2C_POSITION_ENCODERS M114_DETAIL
36
 exec_test $1 $2 "Azteeg X3 Pro | EXTRUDERS 5 | RRDFGSC | UBL | LIN_ADVANCE ..." "$3"
36
 exec_test $1 $2 "Azteeg X3 Pro | EXTRUDERS 5 | RRDFGSC | UBL | LIN_ADVANCE ..." "$3"
37
 
37
 
42
 opt_set MOTHERBOARD BOARD_AZTEEG_X3_PRO LCD_LANGUAGE jp_kana DEFAULT_EJERK 10 \
42
 opt_set MOTHERBOARD BOARD_AZTEEG_X3_PRO LCD_LANGUAGE jp_kana DEFAULT_EJERK 10 \
43
         EXTRUDERS 5 TEMP_SENSOR_1 1 TEMP_SENSOR_2 5 TEMP_SENSOR_3 20 TEMP_SENSOR_4 1000 TEMP_SENSOR_BED 1
43
         EXTRUDERS 5 TEMP_SENSOR_1 1 TEMP_SENSOR_2 5 TEMP_SENSOR_3 20 TEMP_SENSOR_4 1000 TEMP_SENSOR_BED 1
44
 opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER LIGHTWEIGHT_UI SHOW_CUSTOM_BOOTSCREEN BOOT_MARLIN_LOGO_SMALL \
44
 opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER LIGHTWEIGHT_UI SHOW_CUSTOM_BOOTSCREEN BOOT_MARLIN_LOGO_SMALL \
45
-           LCD_SET_PROGRESS_MANUALLY PRINT_PROGRESS_SHOW_DECIMALS SHOW_REMAINING_TIME STATUS_MESSAGE_SCROLLING SCROLL_LONG_FILENAMES \
45
+           SET_PROGRESS_MANUALLY SET_PROGRESS_PERCENT PRINT_PROGRESS_SHOW_DECIMALS SHOW_REMAINING_TIME STATUS_MESSAGE_SCROLLING SCROLL_LONG_FILENAMES \
46
            SDSUPPORT LONG_FILENAME_WRITE_SUPPORT SDCARD_SORT_ALPHA NO_SD_AUTOSTART USB_FLASH_DRIVE_SUPPORT CANCEL_OBJECTS \
46
            SDSUPPORT LONG_FILENAME_WRITE_SUPPORT SDCARD_SORT_ALPHA NO_SD_AUTOSTART USB_FLASH_DRIVE_SUPPORT CANCEL_OBJECTS \
47
            Z_PROBE_SLED AUTO_BED_LEVELING_UBL UBL_HILBERT_CURVE RESTORE_LEVELING_AFTER_G28 DEBUG_LEVELING_FEATURE G26_MESH_VALIDATION ENABLE_LEVELING_FADE_HEIGHT \
47
            Z_PROBE_SLED AUTO_BED_LEVELING_UBL UBL_HILBERT_CURVE RESTORE_LEVELING_AFTER_G28 DEBUG_LEVELING_FEATURE G26_MESH_VALIDATION ENABLE_LEVELING_FADE_HEIGHT \
48
            EEPROM_SETTINGS EEPROM_CHITCHAT GCODE_MACROS CUSTOM_MENU_MAIN \
48
            EEPROM_SETTINGS EEPROM_CHITCHAT GCODE_MACROS CUSTOM_MENU_MAIN \
177
 #opt_enable LCM1602
177
 #opt_enable LCM1602
178
 #exec_test $1 $2 "Stuff" "$3"
178
 #exec_test $1 $2 "Stuff" "$3"
179
 
179
 
180
-#
181
-# Test Laser features with 12864 LCD
182
-#
183
-restore_configs
184
-opt_set MOTHERBOARD BOARD_RAMPS_14_EFB EXTRUDERS 0 LCD_LANGUAGE en TEMP_SENSOR_COOLER 1 TEMP_SENSOR_1 0 SERIAL_PORT_2 2 \
185
-        DEFAULT_AXIS_STEPS_PER_UNIT '{ 80, 80, 400 }' \
186
-        DEFAULT_MAX_FEEDRATE '{ 300, 300, 5 }' \
187
-        DEFAULT_MAX_ACCELERATION '{ 3000, 3000, 100 }' \
188
-        MANUAL_FEEDRATE '{ 50*60, 50*60, 4*60 }' \
189
-        AXIS_RELATIVE_MODES '{ false, false, false }'
190
-opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT EEPROM_SETTINGS EEPROM_BOOT_SILENT EEPROM_AUTO_INIT MEATPACK_ON_SERIAL_PORT_1 \
191
-           LASER_FEATURE LASER_SAFETY_TIMEOUT_MS LASER_COOLANT_FLOW_METER AIR_EVACUATION AIR_EVACUATION_PIN AIR_ASSIST AIR_ASSIST_PIN LASER_SYNCHRONOUS_M106_M107
192
-exec_test $1 $2 "MEGA2560 RAMPS | Laser Options | 12864 | Meatpack | Fan Sync | SERIAL_PORT_2 " "$3"
180
+# #
181
+# # Test Laser features with 12864 LCD
182
+# #
183
+# restore_configs
184
+# opt_set MOTHERBOARD BOARD_RAMPS_14_EFB EXTRUDERS 0 LCD_LANGUAGE en TEMP_SENSOR_COOLER 1 TEMP_SENSOR_1 0 SERIAL_PORT_2 2 \
185
+#         DEFAULT_AXIS_STEPS_PER_UNIT '{ 80, 80, 400 }' \
186
+#         DEFAULT_MAX_FEEDRATE '{ 300, 300, 5 }' \
187
+#         DEFAULT_MAX_ACCELERATION '{ 3000, 3000, 100 }' \
188
+#         MANUAL_FEEDRATE '{ 50*60, 50*60, 4*60 }' \
189
+#         AXIS_RELATIVE_MODES '{ false, false, false }'
190
+# opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT EEPROM_SETTINGS EEPROM_BOOT_SILENT EEPROM_AUTO_INIT MEATPACK_ON_SERIAL_PORT_1 \
191
+#            LASER_FEATURE LASER_SAFETY_TIMEOUT_MS LASER_COOLANT_FLOW_METER AIR_EVACUATION AIR_EVACUATION_PIN AIR_ASSIST AIR_ASSIST_PIN LASER_SYNCHRONOUS_M106_M107
192
+# exec_test $1 $2 "MEGA2560 RAMPS | Laser Options | 12864 | Meatpack | Fan Sync | SERIAL_PORT_2 " "$3"
193
 
193
 
194
-#
195
-# Test Laser features with 44780 LCD
196
-#
197
-restore_configs
198
-opt_set MOTHERBOARD BOARD_RAMPS_14_EFB EXTRUDERS 0 LCD_LANGUAGE en TEMP_SENSOR_COOLER 1 TEMP_SENSOR_1 0 \
199
-        DEFAULT_AXIS_STEPS_PER_UNIT '{ 80, 80, 400 }' \
200
-        DEFAULT_MAX_FEEDRATE '{ 300, 300, 5 }' \
201
-        DEFAULT_MAX_ACCELERATION '{ 3000, 3000, 100 }' \
202
-        MANUAL_FEEDRATE '{ 50*60, 50*60, 4*60 }' \
203
-        AXIS_RELATIVE_MODES '{ false, false, false }'
204
-opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT EEPROM_SETTINGS EEPROM_BOOT_SILENT EEPROM_AUTO_INIT PRINTCOUNTER I2C_AMMETER \
205
-           LASER_FEATURE LASER_SAFETY_TIMEOUT_MS LASER_COOLANT_FLOW_METER AIR_EVACUATION AIR_EVACUATION_PIN AIR_ASSIST AIR_ASSIST_PIN
206
-exec_test $1 $2 "MEGA2560 RAMPS | Laser Feature | Air Evacuation | Air Assist | Cooler | Laser Safety Timeout | Flowmeter | 44780 LCD " "$3"
194
+# #
195
+# # Test Laser features with 44780 LCD
196
+# #
197
+# restore_configs
198
+# opt_set MOTHERBOARD BOARD_RAMPS_14_EFB EXTRUDERS 0 LCD_LANGUAGE en TEMP_SENSOR_COOLER 1 TEMP_SENSOR_1 0 \
199
+#         DEFAULT_AXIS_STEPS_PER_UNIT '{ 80, 80, 400 }' \
200
+#         DEFAULT_MAX_FEEDRATE '{ 300, 300, 5 }' \
201
+#         DEFAULT_MAX_ACCELERATION '{ 3000, 3000, 100 }' \
202
+#         MANUAL_FEEDRATE '{ 50*60, 50*60, 4*60 }' \
203
+#         AXIS_RELATIVE_MODES '{ false, false, false }'
204
+# opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT EEPROM_SETTINGS EEPROM_BOOT_SILENT EEPROM_AUTO_INIT PRINTCOUNTER I2C_AMMETER \
205
+#            LASER_FEATURE LASER_SAFETY_TIMEOUT_MS LASER_COOLANT_FLOW_METER AIR_EVACUATION AIR_EVACUATION_PIN AIR_ASSIST AIR_ASSIST_PIN
206
+# exec_test $1 $2 "MEGA2560 RAMPS | Laser Feature | Air Evacuation | Air Assist | Cooler | Laser Safety Timeout | Flowmeter | 44780 LCD " "$3"
207
 
207
 
208
-#
209
-# Test redundant temperature sensors + MAX TC + Backlight Timeout
210
-#
211
-restore_configs
212
-opt_set MOTHERBOARD BOARD_RAMPS_14_EFB EXTRUDERS 1 \
213
-        TEMP_SENSOR_0 -2 TEMP_SENSOR_REDUNDANT -2 \
214
-        TEMP_SENSOR_REDUNDANT_SOURCE E1 TEMP_SENSOR_REDUNDANT_TARGET E0 \
215
-        TEMP_0_CS_PIN 11 TEMP_1_CS_PIN 12 \
216
-        LCD_BACKLIGHT_TIMEOUT_MINS 2
217
-opt_enable MPCTEMP MINIPANEL
218
-opt_disable PIDTEMP
219
-exec_test $1 $2 "MEGA2560 RAMPS | Redundant temperature sensor | 2x MAX6675 | BL Timeout" "$3"
208
+# #
209
+# # Test redundant temperature sensors + MAX TC + Backlight Timeout
210
+# #
211
+# restore_configs
212
+# opt_set MOTHERBOARD BOARD_RAMPS_14_EFB EXTRUDERS 1 \
213
+#         TEMP_SENSOR_0 -2 TEMP_SENSOR_REDUNDANT -2 \
214
+#         TEMP_SENSOR_REDUNDANT_SOURCE E1 TEMP_SENSOR_REDUNDANT_TARGET E0 \
215
+#         TEMP_0_CS_PIN 11 TEMP_1_CS_PIN 12 \
216
+#         LCD_BACKLIGHT_TIMEOUT_MINS 2
217
+# opt_enable MPCTEMP MINIPANEL
218
+# opt_disable PIDTEMP
219
+# exec_test $1 $2 "MEGA2560 RAMPS | Redundant temperature sensor | 2x MAX6675 | BL Timeout" "$3"
220
 
220
 
221
-#
222
-# Polargraph Config
223
-#
224
-use_example_configs Polargraph
225
-exec_test $1 $2 "RUMBA | POLARGRAPH | RRD LCD" "$3"
221
+# #
222
+# # Polargraph Config
223
+# #
224
+# use_example_configs Polargraph
225
+# exec_test $1 $2 "RUMBA | POLARGRAPH | RRD LCD" "$3"
226
 
226
 
227
 #
227
 #
228
 # Language files test with REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
228
 # Language files test with REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
239
 #
239
 #
240
 # Test a basic DUAL_X_CARRIAGE configuration
240
 # Test a basic DUAL_X_CARRIAGE configuration
241
 #
241
 #
242
-use_example_configs Formbot/T_Rex_3
243
-exec_test $1 $2 "Formbot/T_Rex_3 example configuration." "$3"
242
+# use_example_configs Formbot/T_Rex_3
243
+# exec_test $1 $2 "Formbot/T_Rex_3 example configuration." "$3"
244
 
244
 
245
 #
245
 #
246
 # BQ Hephestos 2
246
 # BQ Hephestos 2
260
 #use_example_configs tvrrug/Round2
260
 #use_example_configs tvrrug/Round2
261
 #exec_test $1 $2 "Stuff" "$3"
261
 #exec_test $1 $2 "Stuff" "$3"
262
 
262
 
263
+#
264
+# Test progress display rotation
265
+#
266
+restore_configs
267
+opt_set MOTHERBOARD BOARD_RAMPS_14_EFB
268
+opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER \
269
+           SET_PROGRESS_MANUALLY SET_PROGRESS_PERCENT SET_REMAINING_TIME SET_INTERACTION_TIME M73_REPORT \
270
+           SHOW_PROGRESS_PERCENT SHOW_ELAPSED_TIME SHOW_REMAINING_TIME SHOW_INTERACTION_TIME PRINT_PROGRESS_SHOW_DECIMALS
271
+exec_test $1 $2 "MEGA2560 RAMPS | 12864 | progress rotation" "$3"
272
+opt_enable LIGHTWEIGHT_UI
273
+exec_test $1 $2 "MEGA2560 RAMPS | 12864 LIGHTWEIGHT_UI | progress rotation" "$3"
274
+opt_disable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
275
+opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER
276
+exec_test $1 $2 "MEGA2560 RAMPS | 44780 | progress rotation" "$3"
277
+
263
 # clean up
278
 # clean up
264
 restore_configs
279
 restore_configs

+ 1
- 1
ini/features.ini View File

201
 REPETIER_GCODE_M360                    = src_filter=+<src/gcode/host/M360.cpp>
201
 REPETIER_GCODE_M360                    = src_filter=+<src/gcode/host/M360.cpp>
202
 HAS_GCODE_M876                         = src_filter=+<src/gcode/host/M876.cpp>
202
 HAS_GCODE_M876                         = src_filter=+<src/gcode/host/M876.cpp>
203
 HAS_RESUME_CONTINUE                    = src_filter=+<src/gcode/lcd/M0_M1.cpp>
203
 HAS_RESUME_CONTINUE                    = src_filter=+<src/gcode/lcd/M0_M1.cpp>
204
-LCD_SET_PROGRESS_MANUALLY              = src_filter=+<src/gcode/lcd/M73.cpp>
204
+SET_PROGRESS_MANUALLY                  = src_filter=+<src/gcode/lcd/M73.cpp>
205
 HAS_STATUS_MESSAGE                     = src_filter=+<src/gcode/lcd/M117.cpp>
205
 HAS_STATUS_MESSAGE                     = src_filter=+<src/gcode/lcd/M117.cpp>
206
 HAS_LCD_CONTRAST                       = src_filter=+<src/gcode/lcd/M250.cpp>
206
 HAS_LCD_CONTRAST                       = src_filter=+<src/gcode/lcd/M250.cpp>
207
 HAS_GCODE_M255                         = src_filter=+<src/gcode/lcd/M255.cpp>
207
 HAS_GCODE_M255                         = src_filter=+<src/gcode/lcd/M255.cpp>

Loading…
Cancel
Save