Browse Source

Merge 'bugfix-2.0.x' into 2.0.x

Scott Lahteine 4 years ago
parent
commit
b29aae6c0c
100 changed files with 613 additions and 500 deletions
  1. 2
    0
      Marlin/Configuration.h
  2. 14
    13
      Marlin/Configuration_adv.h
  3. 1
    1
      Marlin/src/HAL/HAL_AVR/persistent_store_eeprom.cpp
  4. 1
    1
      Marlin/src/HAL/HAL_AVR/watchdog.cpp
  5. 1
    1
      Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp
  6. 3
    3
      Marlin/src/HAL/HAL_LPC1768/MarlinSerial.cpp
  7. 49
    0
      Marlin/src/HAL/HAL_LPC1768/inc/SanityCheck.h
  8. 1
    1
      Marlin/src/HAL/HAL_SAMD51/persistent_store_eeprom.cpp
  9. 1
    1
      Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp
  10. 1
    1
      Marlin/src/HAL/HAL_STM32F1/persistent_store_eeprom.cpp
  11. 1
    1
      Marlin/src/HAL/HAL_STM32_F4_F7/persistent_store_eeprom.cpp
  12. 1
    1
      Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp
  13. 1
    1
      Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp
  14. 86
    32
      Marlin/src/MarlinCore.cpp
  15. 204
    204
      Marlin/src/core/language.h
  16. 1
    1
      Marlin/src/core/serial.cpp
  17. 2
    2
      Marlin/src/feature/bltouch.cpp
  18. 0
    3
      Marlin/src/feature/bltouch.h
  19. 5
    5
      Marlin/src/feature/pause.cpp
  20. 1
    1
      Marlin/src/feature/power_loss_recovery.cpp
  21. 2
    5
      Marlin/src/feature/power_loss_recovery.h
  22. 1
    1
      Marlin/src/feature/probe_temp_compensation.h
  23. 1
    1
      Marlin/src/feature/prusa_MMU2/mmu2.cpp
  24. 1
    1
      Marlin/src/feature/solenoid.cpp
  25. 1
    1
      Marlin/src/gcode/bedlevel/G42.cpp
  26. 2
    2
      Marlin/src/gcode/bedlevel/M420.cpp
  27. 2
    2
      Marlin/src/gcode/bedlevel/abl/M421.cpp
  28. 2
    2
      Marlin/src/gcode/bedlevel/mbl/M421.cpp
  29. 2
    2
      Marlin/src/gcode/bedlevel/ubl/M421.cpp
  30. 5
    3
      Marlin/src/gcode/calibrate/G28.cpp
  31. 1
    1
      Marlin/src/gcode/calibrate/G33.cpp
  32. 1
    1
      Marlin/src/gcode/calibrate/M852.cpp
  33. 1
    1
      Marlin/src/gcode/config/M218.cpp
  34. 6
    0
      Marlin/src/gcode/config/M281.cpp
  35. 1
    1
      Marlin/src/gcode/config/M301.cpp
  36. 8
    8
      Marlin/src/gcode/control/M111.cpp
  37. 3
    3
      Marlin/src/gcode/control/M211.cpp
  38. 1
    1
      Marlin/src/gcode/control/M605.cpp
  39. 1
    1
      Marlin/src/gcode/control/M80_M81.cpp
  40. 2
    2
      Marlin/src/gcode/feature/pause/G60.cpp
  41. 2
    2
      Marlin/src/gcode/feature/pause/G61.cpp
  42. 7
    0
      Marlin/src/gcode/feature/pause/M125.cpp
  43. 6
    6
      Marlin/src/gcode/gcode.cpp
  44. 1
    1
      Marlin/src/gcode/geometry/M206_M428.cpp
  45. 1
    1
      Marlin/src/gcode/host/M115.cpp
  46. 8
    3
      Marlin/src/gcode/lcd/M0_M1.cpp
  47. 1
    1
      Marlin/src/gcode/lcd/M145.cpp
  48. 1
    1
      Marlin/src/gcode/motion/G0_G1.cpp
  49. 2
    2
      Marlin/src/gcode/motion/G2_G3.cpp
  50. 1
    1
      Marlin/src/gcode/motion/G4.cpp
  51. 1
    1
      Marlin/src/gcode/motion/G5.cpp
  52. 3
    3
      Marlin/src/gcode/motion/M290.cpp
  53. 15
    8
      Marlin/src/gcode/parser.cpp
  54. 19
    7
      Marlin/src/gcode/parser.h
  55. 2
    2
      Marlin/src/gcode/probe/M851.cpp
  56. 24
    41
      Marlin/src/gcode/queue.cpp
  57. 6
    0
      Marlin/src/gcode/queue.h
  58. 2
    2
      Marlin/src/gcode/sdcard/M20.cpp
  59. 4
    4
      Marlin/src/gcode/sdcard/M24_M25.cpp
  60. 1
    1
      Marlin/src/gcode/temperature/M105.cpp
  61. 1
    1
      Marlin/src/gcode/temperature/M303.cpp
  62. 4
    2
      Marlin/src/inc/Conditionals_LCD.h
  63. 2
    12
      Marlin/src/inc/Conditionals_post.h
  64. 1
    1
      Marlin/src/inc/Version.h
  65. 5
    3
      Marlin/src/lcd/dogm/dogm_Statusscreen.h
  66. 4
    19
      Marlin/src/lcd/dogm/status_screen_DOGM.cpp
  67. 4
    4
      Marlin/src/lcd/extensible_ui/lib/ftdi_eve_touch_ui/marlin_events.cpp
  68. 2
    2
      Marlin/src/lcd/extensible_ui/lib/ftdi_eve_touch_ui/screens/advanced_settings_menu.cpp
  69. 1
    1
      Marlin/src/lcd/extensible_ui/lib/ftdi_eve_touch_ui/screens/bio_advanced_settings.cpp
  70. 14
    14
      Marlin/src/lcd/extensible_ui/lib/ftdi_eve_touch_ui/screens/endstop_state_screen.cpp
  71. 4
    4
      Marlin/src/lcd/extui_dgus_lcd.cpp
  72. 1
    1
      Marlin/src/lcd/language/language_an.h
  73. 1
    1
      Marlin/src/lcd/language/language_bg.h
  74. 1
    1
      Marlin/src/lcd/language/language_ca.h
  75. 1
    1
      Marlin/src/lcd/language/language_cz.h
  76. 1
    1
      Marlin/src/lcd/language/language_da.h
  77. 1
    1
      Marlin/src/lcd/language/language_de.h
  78. 1
    1
      Marlin/src/lcd/language/language_el.h
  79. 1
    1
      Marlin/src/lcd/language/language_el_gr.h
  80. 4
    1
      Marlin/src/lcd/language/language_en.h
  81. 1
    1
      Marlin/src/lcd/language/language_es.h
  82. 1
    1
      Marlin/src/lcd/language/language_eu.h
  83. 1
    1
      Marlin/src/lcd/language/language_fi.h
  84. 1
    1
      Marlin/src/lcd/language/language_fr.h
  85. 1
    1
      Marlin/src/lcd/language/language_gl.h
  86. 1
    1
      Marlin/src/lcd/language/language_hr.h
  87. 2
    2
      Marlin/src/lcd/language/language_it.h
  88. 1
    1
      Marlin/src/lcd/language/language_jp_kana.h
  89. 1
    1
      Marlin/src/lcd/language/language_ko_KR.h
  90. 1
    1
      Marlin/src/lcd/language/language_nl.h
  91. 1
    1
      Marlin/src/lcd/language/language_pl.h
  92. 1
    1
      Marlin/src/lcd/language/language_pt.h
  93. 1
    1
      Marlin/src/lcd/language/language_pt_br.h
  94. 1
    1
      Marlin/src/lcd/language/language_ru.h
  95. 10
    7
      Marlin/src/lcd/language/language_sk.h
  96. 3
    3
      Marlin/src/lcd/language/language_test.h
  97. 1
    1
      Marlin/src/lcd/language/language_tr.h
  98. 1
    1
      Marlin/src/lcd/language/language_uk.h
  99. 2
    2
      Marlin/src/lcd/language/language_vi.h
  100. 0
    0
      Marlin/src/lcd/language/language_zh_CN.h

+ 2
- 0
Marlin/Configuration.h View File

@@ -784,6 +784,8 @@
784 784
   #define DEFAULT_YJERK 10.0
785 785
   #define DEFAULT_ZJERK  0.3
786 786
 
787
+  //#define TRAVEL_EXTRA_XYJERK 0.0     // Additional jerk allowance for all travel moves
788
+
787 789
   //#define LIMITED_JERK_EDITING        // Limit edit via M205 or LCD to DEFAULT_aJERK * 2
788 790
   #if ENABLED(LIMITED_JERK_EDITING)
789 791
     #define MAX_JERK_EDIT_VALUES { 20, 20, 0.6, 10 } // ...or, set your own edit limits

+ 14
- 13
Marlin/Configuration_adv.h View File

@@ -1044,7 +1044,7 @@
1044 1044
   #if ENABLED(POWER_LOSS_RECOVERY)
1045 1045
     //#define BACKUP_POWER_SUPPLY       // Backup power / UPS to move the steppers on power loss
1046 1046
     //#define POWER_LOSS_ZRAISE       2 // (mm) Z axis raise on resume (on power loss with UPS)
1047
-    //#define POWER_LOSS_PIN         44 // Pin to detect power loss
1047
+    //#define POWER_LOSS_PIN         44 // Pin to detect power loss. Set to -1 to disable default pin on boards without module.
1048 1048
     //#define POWER_LOSS_STATE     HIGH // State of pin indicating power loss
1049 1049
     //#define POWER_LOSS_PULL           // Set pullup / pulldown as appropriate
1050 1050
     //#define POWER_LOSS_PURGE_LEN   20 // (mm) Length of filament to purge on resume
@@ -1172,18 +1172,16 @@
1172 1172
   // Add an optimized binary file transfer mode, initiated with 'M28 B1'
1173 1173
   //#define BINARY_FILE_TRANSFER
1174 1174
 
1175
-  #if HAS_SDCARD_CONNECTION
1176
-    /**
1177
-     * Set this option to one of the following (or the board's defaults apply):
1178
-     *
1179
-     *           LCD - Use the SD drive in the external LCD controller.
1180
-     *       ONBOARD - Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.)
1181
-     *  CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file).
1182
-     *
1183
-     * :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ]
1184
-     */
1185
-    //#define SDCARD_CONNECTION LCD
1186
-  #endif
1175
+  /**
1176
+   * Set this option to one of the following (or the board's defaults apply):
1177
+   *
1178
+   *           LCD - Use the SD drive in the external LCD controller.
1179
+   *       ONBOARD - Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.)
1180
+   *  CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file).
1181
+   *
1182
+   * :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ]
1183
+   */
1184
+  //#define SDCARD_CONNECTION LCD
1187 1185
 
1188 1186
 #endif // SDSUPPORT
1189 1187
 
@@ -1260,6 +1258,7 @@
1260 1258
   #define STATUS_HOTEND_ANIM          // Use a second bitmap to indicate hotend heating
1261 1259
   #define STATUS_BED_ANIM             // Use a second bitmap to indicate bed heating
1262 1260
   #define STATUS_CHAMBER_ANIM         // Use a second bitmap to indicate chamber heating
1261
+  //#define STATUS_CUTTER_ANIM        // Use a second bitmap to indicate spindle / laser active
1263 1262
   //#define STATUS_ALT_BED_BITMAP     // Use the alternative bed bitmap
1264 1263
   //#define STATUS_ALT_FAN_BITMAP     // Use the alternative fan bitmap
1265 1264
   //#define STATUS_FAN_FRAMES 3       // :[0,1,2,3,4] Number of fan animation frames
@@ -2791,6 +2790,8 @@
2791 2790
   //#define GCODE_QUOTED_STRINGS  // Support for quoted string parameters
2792 2791
 #endif
2793 2792
 
2793
+//#define GCODE_CASE_INSENSITIVE  // Accept G-code sent to the firmware in lowercase
2794
+
2794 2795
 /**
2795 2796
  * CNC G-code options
2796 2797
  * Support CNC-style G-code dialects used by laser cutters, drawing machine cams, etc.

+ 1
- 1
Marlin/src/HAL/HAL_AVR/persistent_store_eeprom.cpp View File

@@ -39,7 +39,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
39 39
     if (v != eeprom_read_byte(p)) {
40 40
       eeprom_write_byte(p, v);
41 41
       if (eeprom_read_byte(p) != v) {
42
-        SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
42
+        SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
43 43
         return true;
44 44
       }
45 45
     }

+ 1
- 1
Marlin/src/HAL/HAL_AVR/watchdog.cpp View File

@@ -62,7 +62,7 @@ void watchdog_init() {
62 62
 #if ENABLED(WATCHDOG_RESET_MANUAL)
63 63
   ISR(WDT_vect) {
64 64
     sei();  // With the interrupt driven serial we need to allow interrupts.
65
-    SERIAL_ERROR_MSG(MSG_WATCHDOG_FIRED);
65
+    SERIAL_ERROR_MSG(STR_WATCHDOG_FIRED);
66 66
     minkill();  // interrupt-safe final kill and infinite loop
67 67
   }
68 68
 #endif

+ 1
- 1
Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp View File

@@ -54,7 +54,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
54 54
       eeprom_write_byte(p, v);
55 55
       delay(2);
56 56
       if (eeprom_read_byte(p) != v) {
57
-        SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
57
+        SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
58 58
         return true;
59 59
       }
60 60
     }

+ 3
- 3
Marlin/src/HAL/HAL_LPC1768/MarlinSerial.cpp View File

@@ -32,21 +32,21 @@
32 32
   }
33 33
 #endif
34 34
 
35
-#if (defined(SERIAL_PORT) && SERIAL_PORT == 1) || (defined(SERIAL_PORT_2) && SERIAL_PORT_2 == 1) || (defined(DGUS_SERIAL_PORT) && DGUS_SERIAL_PORT == 1)
35
+#if SERIAL_PORT == 1 || SERIAL_PORT_2 == 1 || DGUS_SERIAL_PORT == 1
36 36
   MarlinSerial MSerial1((LPC_UART_TypeDef *) LPC_UART1);
37 37
   extern "C" void UART1_IRQHandler() {
38 38
     MSerial1.IRQHandler();
39 39
   }
40 40
 #endif
41 41
 
42
-#if (defined(SERIAL_PORT) && SERIAL_PORT == 2) || (defined(SERIAL_PORT_2) && SERIAL_PORT_2 == 2) || (defined(DGUS_SERIAL_PORT) && DGUS_SERIAL_PORT == 2)
42
+#if SERIAL_PORT == 2 || SERIAL_PORT_2 == 2 || DGUS_SERIAL_PORT == 2
43 43
   MarlinSerial MSerial2(LPC_UART2);
44 44
   extern "C" void UART2_IRQHandler() {
45 45
     MSerial2.IRQHandler();
46 46
   }
47 47
 #endif
48 48
 
49
-#if (defined(SERIAL_PORT) && SERIAL_PORT == 3) || (defined(SERIAL_PORT_2) && SERIAL_PORT_2 == 3) || (defined(DGUS_SERIAL_PORT) && DGUS_SERIAL_PORT == 3)
49
+#if SERIAL_PORT == 3 || SERIAL_PORT_2 == 3 || DGUS_SERIAL_PORT == 3
50 50
   MarlinSerial MSerial3(LPC_UART3);
51 51
   extern "C" void UART3_IRQHandler() {
52 52
     MSerial3.IRQHandler();

+ 49
- 0
Marlin/src/HAL/HAL_LPC1768/inc/SanityCheck.h View File

@@ -76,3 +76,52 @@
76 76
 #if ENABLED(BAUD_RATE_GCODE)
77 77
   #error "BAUD_RATE_GCODE is not yet supported on LPC176x."
78 78
 #endif
79
+
80
+/**
81
+ * Flag any serial port conflicts
82
+ *
83
+ *   Port  |  TX   |  RX   |
84
+ *    ---  |  ---  |  ---  |
85
+ * Serial  | P0_02 | P0_03 |
86
+ * Serial1 | P0_15 | P0_16 |
87
+ * Serial2 | P0_10 | P0_11 |
88
+ * Serial3 | P0_00 | P0_01 |
89
+ */
90
+#if (defined(SERIAL_PORT) && SERIAL_PORT == 0) || (defined(SERIAL_PORT_2) && SERIAL_PORT_2 == 0) || (defined(DGUS_SERIAL_PORT) && DGUS_SERIAL_PORT == 0)
91
+  #if  X_CS_PIN == P0_02 || TMC_SW_MISO == P0_02 || (E_STEPPERS && E_MUX1_PIN == P0_02) \
92
+    || Y_CS_PIN == P0_03 || TMC_SW_MOSI == P0_03 || (E_STEPPERS && E_MUX0_PIN == P0_03)
93
+    #error "Serial port assignment (0) conflicts with other pins!"
94
+  #endif
95
+#endif
96
+
97
+#if SERIAL_PORT == 1 || SERIAL_PORT_2 == 1 || DGUS_SERIAL_PORT == 1
98
+  #if TMC_SW_SCK == P0_15
99
+    #error "Serial port assignment (1) conflicts with other pins!"
100
+  #elif HAS_SPI_LCD
101
+    #if  BTN_EN2 == P0_15 || SCK_PIN == P0_15 || LCD_PINS_D4 == P0_15 || DOGLCD_SCK == P0_15 || LCD_RESET_PIN == P0_15 || LCD_PINS_RS == P0_15 || SHIFT_CLK == P0_15 \
102
+      || BTN_EN1 == P0_16 || LCD_SDSS == P0_16 || LCD_PINS_RS == P0_16 || MISO_PIN == P0_16 || DOGLCD_A0 == P0_16 || SS_PIN == P0_16 || LCD_SDSS == P0_16 || DOGLCD_CS == P0_16 || LCD_RESET_PIN == P0_16 || LCD_BACKLIGHT_PIN == P0_16
103
+      #error "Serial port assignment (1) conflicts with other pins!"
104
+    #endif
105
+  #endif
106
+#endif
107
+
108
+#if SERIAL_PORT == 2 || SERIAL_PORT_2 == 2 || DGUS_SERIAL_PORT == 2
109
+  #if  Y_MIN_PIN == P0_10 || Z_MIN_PROBE_PIN == P0_10 \
110
+    || X_ENABLE_PIN == P0_10 || Y_ENABLE_PIN == P0_10 || X2_ENABLE_PIN == P0_10 || Y2_ENABLE_PIN == P0_10 || Z2_ENABLE_PIN == P0_10 || Z3_ENABLE_PIN == P0_10 || Z4_ENABLE_PIN == P0_10 \
111
+    || X2_CS_PIN == P0_10 || Y2_CS_PIN == P0_10 || Z2_CS_PIN == P0_10 || Z3_CS_PIN == P0_10 || Z4_CS_PIN == P0_10 \
112
+    || X_DIR_PIN == P0_11 || Y_DIR_PIN == P0_11 || X2_DIR_PIN == P0_11 || Y2_DIR_PIN == P0_11 || Z2_DIR_PIN == P0_11 || Z3_DIR_PIN == P0_11 || Z4_DIR_PIN == P0_11 \
113
+    || X2_STEP_PIN == P0_11 || Y2_STEP_PIN == P0_11 || Z2_STEP_PIN == P0_11 || Z3_STEP_PIN == P0_11 || Z4_STEP_PIN == P0_11
114
+    #error "Serial port assignment (2) conflicts with other pins!"
115
+  #elif  (E_STEPPERS > 1 && (E1_ENABLE_PIN == P0_10 || E1_CS_PIN == P0_10)) || (E_STEPPERS > 0 && (E0_DIR_PIN == P0_11 || E0_STEP_PIN == P0_11))
116
+    #error "Serial port assignment (2) conflicts with other pins!"
117
+  #endif
118
+#endif
119
+
120
+#if SERIAL_PORT == 3 || SERIAL_PORT_2 == 3 || DGUS_SERIAL_PORT == 3
121
+  #if  X_MIN_PIN == P0_00 || Y_SERIAL_TX_PIN == P0_00 || Y_SERIAL_RX_PIN == P0_00 \
122
+    || X_MAX_PIN == P0_01 || X_SERIAL_TX_PIN == P0_01 || X_SERIAL_RX_PIN == P0_01
123
+    #error "Serial port assignment (2) conflicts with other pins!"
124
+  #elif E_STEPPERS > 1 && (E1_DIR_PIN == P0_00 || E1_STEP_PIN == P0_01)
125
+    #error "Serial port assignment (2) conflicts with other pins!"
126
+  #endif
127
+#endif

+ 1
- 1
Marlin/src/HAL/HAL_SAMD51/persistent_store_eeprom.cpp View File

@@ -72,7 +72,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
72 72
         eeprom_write_byte(p, v);
73 73
         delay(2);
74 74
         if (eeprom_read_byte(p) != v) {
75
-          SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
75
+          SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
76 76
           return true;
77 77
         }
78 78
       }

+ 1
- 1
Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp View File

@@ -48,7 +48,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
48 48
       if (v != eeprom_read_byte(p)) {
49 49
         eeprom_write_byte(p, v);
50 50
         if (eeprom_read_byte(p) != v) {
51
-          SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
51
+          SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
52 52
           return true;
53 53
         }
54 54
       }

+ 1
- 1
Marlin/src/HAL/HAL_STM32F1/persistent_store_eeprom.cpp View File

@@ -49,7 +49,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
49 49
     if (v != eeprom_read_byte(p)) {
50 50
       eeprom_write_byte(p, v);
51 51
       if (eeprom_read_byte(p) != v) {
52
-        SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
52
+        SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
53 53
         return true;
54 54
       }
55 55
     }

+ 1
- 1
Marlin/src/HAL/HAL_STM32_F4_F7/persistent_store_eeprom.cpp View File

@@ -41,7 +41,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
41 41
     if (v != eeprom_read_byte(p)) {
42 42
       eeprom_write_byte(p, v);
43 43
       if (eeprom_read_byte(p) != v) {
44
-        SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
44
+        SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
45 45
         return true;
46 46
       }
47 47
     }

+ 1
- 1
Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp View File

@@ -36,7 +36,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
36 36
     if (v != eeprom_read_byte(p)) {
37 37
       eeprom_write_byte(p, v);
38 38
       if (eeprom_read_byte(p) != v) {
39
-        SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
39
+        SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
40 40
         return true;
41 41
       }
42 42
     }

+ 1
- 1
Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp View File

@@ -42,7 +42,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
42 42
     if (v != eeprom_read_byte(p)) {
43 43
       eeprom_write_byte(p, v);
44 44
       if (eeprom_read_byte(p) != v) {
45
-        SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
45
+        SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
46 46
         return true;
47 47
       }
48 48
     }

+ 86
- 32
Marlin/src/MarlinCore.cpp View File

@@ -278,7 +278,7 @@ bool pin_is_protected(const pin_t pin) {
278 278
 }
279 279
 
280 280
 void protected_pin_err() {
281
-  SERIAL_ERROR_MSG(MSG_ERR_PROTECTED_PIN);
281
+  SERIAL_ERROR_MSG(STR_ERR_PROTECTED_PIN);
282 282
 }
283 283
 
284 284
 void quickstop_stepper() {
@@ -390,8 +390,8 @@ void startOrResumeJob() {
390 390
 
391 391
 #if ENABLED(SDSUPPORT)
392 392
 
393
-  void abortSDPrinting() {
394
-    card.stopSDPrint(
393
+  inline void abortSDPrinting() {
394
+    card.endFilePrint(
395 395
       #if SD_RESORT
396 396
         true
397 397
       #endif
@@ -412,10 +412,58 @@ void startOrResumeJob() {
412 412
     #endif
413 413
   }
414 414
 
415
-#endif
415
+  inline void finishSDPrinting() {
416
+    bool did_state = true;
417
+    switch (card.sdprinting_done_state) {
418
+
419
+      #if HAS_RESUME_CONTINUE                   // Display "Click to Continue..."
420
+        case 1:
421
+          did_state = queue.enqueue_P(PSTR("M0Q1S"
422
+            #if HAS_LCD_MENU
423
+              "1800"                            // ...for 30 minutes with LCD
424
+            #else
425
+              "60"                              // ...for 1 minute with no LCD
426
+            #endif
427
+          ));
428
+          break;
429
+      #endif
430
+
431
+      case 2: print_job_timer.stop(); break;
432
+
433
+      case 3:
434
+        did_state = print_job_timer.duration() < 60 || queue.enqueue_P(PSTR("M31"));
435
+        break;
436
+
437
+      case 4:
438
+        #if ENABLED(POWER_LOSS_RECOVERY)
439
+          recovery.purge();
440
+        #endif
441
+
442
+        #if ENABLED(SD_FINISHED_STEPPERRELEASE) && defined(SD_FINISHED_RELEASECOMMAND)
443
+          planner.finish_and_disable();
444
+        #endif
445
+
446
+        #if ENABLED(LCD_SET_PROGRESS_MANUALLY)
447
+          ui.set_progress_done();
448
+        #endif
449
+
450
+        #if ENABLED(SD_REPRINT_LAST_SELECTED_FILE)
451
+          ui.reselect_last_file();
452
+        #endif
453
+
454
+        SERIAL_ECHOLNPGM(STR_FILE_PRINTED);
455
+
456
+      default:
457
+        did_state = false;
458
+        card.sdprinting_done_state = 0;
459
+    }
460
+    if (did_state) ++card.sdprinting_done_state;
461
+  }
462
+
463
+#endif // SDSUPPORT
416 464
 
417 465
 /**
418
- * Manage several activities:
466
+ * Minimal management of Marlin's core activities:
419 467
  *  - Check for Filament Runout
420 468
  *  - Keep the command buffer full
421 469
  *  - Check for maximum inactive time between commands
@@ -440,7 +488,7 @@ inline void manage_inactivity(const bool ignore_stepper_queue=false) {
440 488
 
441 489
   if (max_inactive_time && ELAPSED(ms, gcode.previous_move_ms + max_inactive_time)) {
442 490
     SERIAL_ERROR_START();
443
-    SERIAL_ECHOLNPAIR(MSG_KILL_INACTIVE_TIME, parser.command_ptr);
491
+    SERIAL_ECHOLNPAIR(STR_KILL_INACTIVE_TIME, parser.command_ptr);
444 492
     kill();
445 493
   }
446 494
 
@@ -505,7 +553,7 @@ inline void manage_inactivity(const bool ignore_stepper_queue=false) {
505 553
     // KILL the machine
506 554
     // ----------------------------------------------------------------
507 555
     if (killCount >= KILL_DELAY) {
508
-      SERIAL_ERROR_MSG(MSG_KILL_BUTTON);
556
+      SERIAL_ERROR_MSG(STR_KILL_BUTTON);
509 557
       kill();
510 558
     }
511 559
   #endif
@@ -723,7 +771,7 @@ void idle(
723 771
 void kill(PGM_P const lcd_error/*=nullptr*/, PGM_P const lcd_component/*=nullptr*/, const bool steppers_off/*=false*/) {
724 772
   thermalManager.disable_all_heaters();
725 773
 
726
-  SERIAL_ERROR_MSG(MSG_ERR_KILLED);
774
+  SERIAL_ERROR_MSG(STR_ERR_KILLED);
727 775
 
728 776
   #if HAS_DISPLAY
729 777
     ui.kill_screen(lcd_error ?: GET_TEXT(MSG_KILLED), lcd_component ?: NUL_STR);
@@ -794,7 +842,7 @@ void stop() {
794 842
   #endif
795 843
 
796 844
   if (IsRunning()) {
797
-    SERIAL_ERROR_MSG(MSG_ERR_STOPPED);
845
+    SERIAL_ERROR_MSG(STR_ERR_STOPPED);
798 846
     LCD_MESSAGEPGM(MSG_STOPPED);
799 847
     safe_delay(350);       // allow enough time for messages to get out before stopping
800 848
     Running = false;
@@ -900,11 +948,11 @@ void setup() {
900 948
 
901 949
   // Check startup - does nothing if bootloader sets MCUSR to 0
902 950
   byte mcu = HAL_get_reset_source();
903
-  if (mcu &  1) SERIAL_ECHOLNPGM(MSG_POWERUP);
904
-  if (mcu &  2) SERIAL_ECHOLNPGM(MSG_EXTERNAL_RESET);
905
-  if (mcu &  4) SERIAL_ECHOLNPGM(MSG_BROWNOUT_RESET);
906
-  if (mcu &  8) SERIAL_ECHOLNPGM(MSG_WATCHDOG_RESET);
907
-  if (mcu & 32) SERIAL_ECHOLNPGM(MSG_SOFTWARE_RESET);
951
+  if (mcu &  1) SERIAL_ECHOLNPGM(STR_POWERUP);
952
+  if (mcu &  2) SERIAL_ECHOLNPGM(STR_EXTERNAL_RESET);
953
+  if (mcu &  4) SERIAL_ECHOLNPGM(STR_BROWNOUT_RESET);
954
+  if (mcu &  8) SERIAL_ECHOLNPGM(STR_WATCHDOG_RESET);
955
+  if (mcu & 32) SERIAL_ECHOLNPGM(STR_SOFTWARE_RESET);
908 956
   HAL_clear_reset_source();
909 957
 
910 958
   serialprintPGM(GET_TEXT(MSG_MARLIN));
@@ -914,15 +962,15 @@ void setup() {
914 962
 
915 963
   #if defined(STRING_DISTRIBUTION_DATE) && defined(STRING_CONFIG_H_AUTHOR)
916 964
     SERIAL_ECHO_MSG(
917
-      MSG_CONFIGURATION_VER
965
+      STR_CONFIGURATION_VER
918 966
       STRING_DISTRIBUTION_DATE
919
-      MSG_AUTHOR STRING_CONFIG_H_AUTHOR
967
+      STR_AUTHOR STRING_CONFIG_H_AUTHOR
920 968
     );
921 969
     SERIAL_ECHO_MSG("Compiled: " __DATE__);
922 970
   #endif
923 971
 
924 972
   SERIAL_ECHO_START();
925
-  SERIAL_ECHOLNPAIR(MSG_FREE_MEMORY, freeMemory(), MSG_PLANNER_BUFFER_BYTES, (int)sizeof(block_t) * (BLOCK_BUFFER_SIZE));
973
+  SERIAL_ECHOLNPAIR(STR_FREE_MEMORY, freeMemory(), STR_PLANNER_BUFFER_BYTES, (int)sizeof(block_t) * (BLOCK_BUFFER_SIZE));
926 974
 
927 975
   // UI must be initialized before EEPROM
928 976
   // (because EEPROM code calls the UI).
@@ -937,32 +985,28 @@ void setup() {
937 985
     ui.show_bootscreen();
938 986
   #endif
939 987
 
988
+  ui.reset_status();        // Load welcome message early. (Retained if no errors exist.)
989
+
940 990
   #if ENABLED(SDSUPPORT)
941
-    card.mount(); // Mount the SD card before settings.first_load
991
+    card.mount();           // Mount the SD card before settings.first_load
942 992
   #endif
943
-
944
-  // Load data from EEPROM if available (or use defaults)
945
-  // This also updates variables in the planner, elsewhere
946
-  settings.first_load();
993
+                            // Load data from EEPROM if available (or use defaults)
994
+  settings.first_load();    // This also updates variables in the planner, elsewhere
947 995
 
948 996
   #if ENABLED(TOUCH_BUTTONS)
949 997
     touch.init();
950 998
   #endif
951 999
 
952
-  #if HAS_M206_COMMAND
953
-    // Initialize current position based on home_offset
1000
+  #if HAS_M206_COMMAND      // Initialize current position based on home_offset
954 1001
     current_position += home_offset;
955 1002
   #endif
956 1003
 
957
-  // Vital to init stepper/planner equivalent for current_position
958
-  sync_plan_position();
1004
+  sync_plan_position();     // Vital to init stepper/planner equivalent for current_position
959 1005
 
960 1006
   thermalManager.init();    // Initialize temperature loop
961 1007
 
962 1008
   print_job_timer.init();   // Initial setup of print job timer
963 1009
 
964
-  ui.reset_status();        // Print startup message after print statistics are loaded
965
-
966 1010
   endstops.init();          // Init endstops and pullups
967 1011
 
968 1012
   stepper.init();           // Init stepper. This enables interrupts!
@@ -1117,15 +1161,24 @@ void setup() {
1117 1161
   #if ENABLED(PRUSA_MMU2)
1118 1162
     mmu2.init();
1119 1163
   #endif
1164
+
1165
+  #if HAS_SERVICE_INTERVALS
1166
+    ui.reset_status(true);  // Show service messages or keep current status
1167
+  #endif
1120 1168
 }
1121 1169
 
1122 1170
 /**
1123 1171
  * The main Marlin program loop
1124 1172
  *
1125
- *  - Save or log commands to SD
1126
- *  - Process available commands (if not saving)
1127
- *  - Call endstop manager
1128
- *  - Call inactivity manager
1173
+ *  - Call idle() to handle all tasks between G-code commands
1174
+ *      Note that no G-codes from the queue can be executed during idle()
1175
+ *      but many G-codes can be called directly anytime like macros.
1176
+ *  - Check whether SD card auto-start is needed now.
1177
+ *  - Check whether SD print finishing is needed now.
1178
+ *  - Run one G-code command from the immediate or main command queue
1179
+ *    and open up one space. Commands in the main queue may come from sd
1180
+ *    card, host, or by direct injection. The queue will continue to fill
1181
+ *    as long as idle() or manage_inactivity() are being called.
1129 1182
  */
1130 1183
 void loop() {
1131 1184
   do {
@@ -1135,6 +1188,7 @@ void loop() {
1135 1188
     #if ENABLED(SDSUPPORT)
1136 1189
       card.checkautostart();
1137 1190
       if (card.flag.abort_sd_printing) abortSDPrinting();
1191
+      if (card.sdprinting_done_state) finishSDPrinting();
1138 1192
     #endif
1139 1193
 
1140 1194
     queue.advance();

+ 204
- 204
Marlin/src/core/language.h View File

@@ -97,6 +97,210 @@
97 97
 //  #define STRING_SPLASH_LINE3 WEBSITE_URL
98 98
 //#endif
99 99
 
100
+//
101
+// Common Serial Console Messages
102
+// Don't change these strings because serial hosts look for them.
103
+//
104
+
105
+#define STR_ENQUEUEING                      "enqueueing \""
106
+#define STR_POWERUP                         "PowerUp"
107
+#define STR_EXTERNAL_RESET                  " External Reset"
108
+#define STR_BROWNOUT_RESET                  " Brown out Reset"
109
+#define STR_WATCHDOG_RESET                  " Watchdog Reset"
110
+#define STR_SOFTWARE_RESET                  " Software Reset"
111
+#define STR_AUTHOR                          " | Author: "
112
+#define STR_CONFIGURATION_VER               " Last Updated: "
113
+#define STR_FREE_MEMORY                     " Free Memory: "
114
+#define STR_PLANNER_BUFFER_BYTES            "  PlannerBufferBytes: "
115
+#define STR_OK                              "ok"
116
+#define STR_WAIT                            "wait"
117
+#define STR_STATS                           "Stats: "
118
+#define STR_FILE_SAVED                      "Done saving file."
119
+#define STR_ERR_LINE_NO                     "Line Number is not Last Line Number+1, Last Line: "
120
+#define STR_ERR_CHECKSUM_MISMATCH           "checksum mismatch, Last Line: "
121
+#define STR_ERR_NO_CHECKSUM                 "No Checksum with line number, Last Line: "
122
+#define STR_FILE_PRINTED                    "Done printing file"
123
+#define STR_BEGIN_FILE_LIST                 "Begin file list"
124
+#define STR_END_FILE_LIST                   "End file list"
125
+#define STR_INVALID_EXTRUDER                "Invalid extruder"
126
+#define STR_INVALID_E_STEPPER               "Invalid E stepper"
127
+#define STR_E_STEPPER_NOT_SPECIFIED         "E stepper not specified"
128
+#define STR_INVALID_SOLENOID                "Invalid solenoid"
129
+#define STR_M115_REPORT                     "FIRMWARE_NAME:Marlin " DETAILED_BUILD_VERSION " SOURCE_CODE_URL:" SOURCE_CODE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID
130
+#define STR_COUNT_X                         " Count X:"
131
+#define STR_COUNT_A                         " Count A:"
132
+#define STR_WATCHDOG_FIRED                  "Watchdog timeout. Reset required."
133
+#define STR_ERR_KILLED                      "Printer halted. kill() called!"
134
+#define STR_ERR_STOPPED                     "Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)"
135
+#define STR_BUSY_PROCESSING                 "busy: processing"
136
+#define STR_BUSY_PAUSED_FOR_USER            "busy: paused for user"
137
+#define STR_BUSY_PAUSED_FOR_INPUT           "busy: paused for input"
138
+#define STR_Z_MOVE_COMP                     "Z_move_comp"
139
+#define STR_RESEND                          "Resend: "
140
+#define STR_UNKNOWN_COMMAND                 "Unknown command: \""
141
+#define STR_ACTIVE_EXTRUDER                 "Active Extruder: "
142
+#define STR_X_MIN                           "x_min"
143
+#define STR_X_MAX                           "x_max"
144
+#define STR_X2_MIN                          "x2_min"
145
+#define STR_X2_MAX                          "x2_max"
146
+#define STR_Y_MIN                           "y_min"
147
+#define STR_Y_MAX                           "y_max"
148
+#define STR_Y2_MIN                          "y2_min"
149
+#define STR_Y2_MAX                          "y2_max"
150
+#define STR_Z_MIN                           "z_min"
151
+#define STR_Z_MAX                           "z_max"
152
+#define STR_Z2_MIN                          "z2_min"
153
+#define STR_Z2_MAX                          "z2_max"
154
+#define STR_Z3_MIN                          "z3_min"
155
+#define STR_Z3_MAX                          "z3_max"
156
+#define STR_Z4_MIN                          "z4_min"
157
+#define STR_Z4_MAX                          "z4_max"
158
+#define STR_Z_PROBE                         "z_probe"
159
+#define STR_FILAMENT_RUNOUT_SENSOR          "filament"
160
+#define STR_PROBE_OFFSET                    "Probe Offset"
161
+#define STR_SKEW_MIN                        "min_skew_factor: "
162
+#define STR_SKEW_MAX                        "max_skew_factor: "
163
+#define STR_ERR_MATERIAL_INDEX              "M145 S<index> out of range (0-1)"
164
+#define STR_ERR_M421_PARAMETERS             "M421 incorrect parameter usage"
165
+#define STR_ERR_BAD_PLANE_MODE              "G5 requires XY plane mode"
166
+#define STR_ERR_MESH_XY                     "Mesh point cannot be resolved"
167
+#define STR_ERR_ARC_ARGS                    "G2/G3 bad parameters"
168
+#define STR_ERR_PROTECTED_PIN               "Protected Pin"
169
+#define STR_ERR_M420_FAILED                 "Failed to enable Bed Leveling"
170
+#define STR_ERR_M428_TOO_FAR                "Too far from reference point"
171
+#define STR_ERR_M303_DISABLED               "PIDTEMP disabled"
172
+#define STR_M119_REPORT                     "Reporting endstop status"
173
+#define STR_ON                              "ON"
174
+#define STR_OFF                             "OFF"
175
+#define STR_ENDSTOP_HIT                     "TRIGGERED"
176
+#define STR_ENDSTOP_OPEN                    "open"
177
+#define STR_HOTEND_OFFSET                   "Hotend offsets:"
178
+#define STR_DUPLICATION_MODE                "Duplication mode: "
179
+#define STR_SOFT_ENDSTOPS                   "Soft endstops: "
180
+#define STR_SOFT_MIN                        "  Min: "
181
+#define STR_SOFT_MAX                        "  Max: "
182
+
183
+#define STR_SAVED_POS                       "Position saved"
184
+#define STR_RESTORING_POS                   "Restoring position"
185
+#define STR_INVALID_POS_SLOT                "Invalid slot. Total: "
186
+
187
+#define STR_SD_CANT_OPEN_SUBDIR             "Cannot open subdir "
188
+#define STR_SD_INIT_FAIL                    "SD init fail"
189
+#define STR_SD_VOL_INIT_FAIL                "volume.init failed"
190
+#define STR_SD_OPENROOT_FAIL                "openRoot failed"
191
+#define STR_SD_CARD_OK                      "SD card ok"
192
+#define STR_SD_WORKDIR_FAIL                 "workDir open failed"
193
+#define STR_SD_OPEN_FILE_FAIL               "open failed, File: "
194
+#define STR_SD_FILE_OPENED                  "File opened: "
195
+#define STR_SD_SIZE                         " Size: "
196
+#define STR_SD_FILE_SELECTED                "File selected"
197
+#define STR_SD_WRITE_TO_FILE                "Writing to file: "
198
+#define STR_SD_PRINTING_BYTE                "SD printing byte "
199
+#define STR_SD_NOT_PRINTING                 "Not SD printing"
200
+#define STR_SD_ERR_WRITE_TO_FILE            "error writing to file"
201
+#define STR_SD_ERR_READ                     "SD read error"
202
+#define STR_SD_CANT_ENTER_SUBDIR            "Cannot enter subdir: "
203
+
204
+#define STR_ENDSTOPS_HIT                    "endstops hit: "
205
+#define STR_ERR_COLD_EXTRUDE_STOP           " cold extrusion prevented"
206
+#define STR_ERR_LONG_EXTRUDE_STOP           " too long extrusion prevented"
207
+#define STR_ERR_HOTEND_TOO_COLD             "Hotend too cold"
208
+#define STR_ERR_Z_HOMING_SER                "Home XY first"
209
+#define STR_ERR_EEPROM_WRITE                "Error writing to EEPROM!"
210
+
211
+#define STR_FILAMENT_CHANGE_HEAT_LCD        "Press button to heat nozzle"
212
+#define STR_FILAMENT_CHANGE_INSERT_LCD      "Insert filament and press button"
213
+#define STR_FILAMENT_CHANGE_WAIT_LCD        "Press button to resume"
214
+#define STR_FILAMENT_CHANGE_HEAT_M108       "Send M108 to heat nozzle"
215
+#define STR_FILAMENT_CHANGE_INSERT_M108     "Insert filament and send M108"
216
+#define STR_FILAMENT_CHANGE_WAIT_M108       "Send M108 to resume"
217
+
218
+#define STR_STOP_BLTOUCH                    "!! STOP called because of BLTouch error - restart with M999"
219
+#define STR_STOP_UNHOMED                    "!! STOP called because of unhomed error - restart with M999"
220
+#define STR_KILL_INACTIVE_TIME              "!! KILL caused by too much inactive time - current command: "
221
+#define STR_KILL_BUTTON                     "!! KILL caused by KILL button/pin"
222
+
223
+// temperature.cpp strings
224
+#define STR_PID_AUTOTUNE_PREFIX             "PID Autotune"
225
+#define STR_PID_AUTOTUNE_START              STR_PID_AUTOTUNE_PREFIX " start"
226
+#define STR_PID_AUTOTUNE_FAILED             STR_PID_AUTOTUNE_PREFIX " failed!"
227
+#define STR_PID_BAD_EXTRUDER_NUM            STR_PID_AUTOTUNE_FAILED " Bad extruder number"
228
+#define STR_PID_TEMP_TOO_HIGH               STR_PID_AUTOTUNE_FAILED " Temperature too high"
229
+#define STR_PID_TIMEOUT                     STR_PID_AUTOTUNE_FAILED " timeout"
230
+#define STR_BIAS                            " bias: "
231
+#define STR_D_COLON                         " d: "
232
+#define STR_T_MIN                           " min: "
233
+#define STR_T_MAX                           " max: "
234
+#define STR_KU                              " Ku: "
235
+#define STR_TU                              " Tu: "
236
+#define STR_CLASSIC_PID                     " Classic PID "
237
+#define STR_KP                              " Kp: "
238
+#define STR_KI                              " Ki: "
239
+#define STR_KD                              " Kd: "
240
+#define STR_PID_AUTOTUNE_FINISHED           STR_PID_AUTOTUNE_PREFIX " finished! Put the last Kp, Ki and Kd constants from below into Configuration.h"
241
+#define STR_PID_DEBUG                       " PID_DEBUG "
242
+#define STR_PID_DEBUG_INPUT                 ": Input "
243
+#define STR_PID_DEBUG_OUTPUT                " Output "
244
+#define STR_PID_DEBUG_PTERM                 " pTerm "
245
+#define STR_PID_DEBUG_ITERM                 " iTerm "
246
+#define STR_PID_DEBUG_DTERM                 " dTerm "
247
+#define STR_PID_DEBUG_CTERM                 " cTerm "
248
+#define STR_INVALID_EXTRUDER_NUM            " - Invalid extruder number !"
249
+
250
+#define STR_HEATER_BED                      "bed"
251
+#define STR_HEATER_CHAMBER                  "chamber"
252
+
253
+#define STR_STOPPED_HEATER                  ", system stopped! Heater_ID: "
254
+#define STR_REDUNDANCY                      "Heater switched off. Temperature difference between temp sensors is too high !"
255
+#define STR_T_HEATING_FAILED                "Heating failed"
256
+#define STR_T_THERMAL_RUNAWAY               "Thermal Runaway"
257
+#define STR_T_MAXTEMP                       "MAXTEMP triggered"
258
+#define STR_T_MINTEMP                       "MINTEMP triggered"
259
+#define STR_ERR_PROBING_FAILED              "Probing Failed"
260
+#define STR_ZPROBE_OUT_SER                  "Z Probe Past Bed"
261
+
262
+// Debug
263
+#define STR_DEBUG_PREFIX                    "DEBUG:"
264
+#define STR_DEBUG_OFF                       "off"
265
+#define STR_DEBUG_ECHO                      "ECHO"
266
+#define STR_DEBUG_INFO                      "INFO"
267
+#define STR_DEBUG_ERRORS                    "ERRORS"
268
+#define STR_DEBUG_DRYRUN                    "DRYRUN"
269
+#define STR_DEBUG_COMMUNICATION             "COMMUNICATION"
270
+#define STR_DEBUG_LEVELING                  "LEVELING"
271
+
272
+// LCD Menu Messages
273
+
274
+#define LANGUAGE_DATA_INCL_(M) STRINGIFY_(fontdata/langdata_##M.h)
275
+#define LANGUAGE_DATA_INCL(M) LANGUAGE_DATA_INCL_(M)
276
+
277
+#define LANGUAGE_INCL_(M) STRINGIFY_(../lcd/language/language_##M.h)
278
+#define LANGUAGE_INCL(M) LANGUAGE_INCL_(M)
279
+
280
+#define STR_X "X"
281
+#define STR_Y "Y"
282
+#define STR_Z "Z"
283
+#define STR_E "E"
284
+#if IS_KINEMATIC
285
+  #define STR_A "A"
286
+  #define STR_B "B"
287
+  #define STR_C "C"
288
+#else
289
+  #define STR_A "X"
290
+  #define STR_B "Y"
291
+  #define STR_C "Z"
292
+#endif
293
+#define STR_X2 "X2"
294
+#define STR_Y2 "Y2"
295
+#define STR_Z2 "Z2"
296
+#define STR_Z3 "Z3"
297
+#define STR_Z4 "Z4"
298
+
299
+#define LCD_STR_A STR_A
300
+#define LCD_STR_B STR_B
301
+#define LCD_STR_C STR_C
302
+#define LCD_STR_E STR_E
303
+
100 304
 #if HAS_CHARACTER_LCD
101 305
 
102 306
   // Custom characters defined in the first 8 characters of the LCD
@@ -135,210 +339,6 @@
135 339
 
136 340
 #endif
137 341
 
138
-// Common Serial Console Messages (do not translate those!)
139
-
140
-#define MSG_ENQUEUEING                      "enqueueing \""
141
-#define MSG_POWERUP                         "PowerUp"
142
-#define MSG_EXTERNAL_RESET                  " External Reset"
143
-#define MSG_BROWNOUT_RESET                  " Brown out Reset"
144
-#define MSG_WATCHDOG_RESET                  " Watchdog Reset"
145
-#define MSG_SOFTWARE_RESET                  " Software Reset"
146
-#define MSG_AUTHOR                          " | Author: "
147
-#define MSG_CONFIGURATION_VER               " Last Updated: "
148
-#define MSG_FREE_MEMORY                     " Free Memory: "
149
-#define MSG_PLANNER_BUFFER_BYTES            "  PlannerBufferBytes: "
150
-#define MSG_OK                              "ok"
151
-#define MSG_WAIT                            "wait"
152
-#define MSG_STATS                           "Stats: "
153
-#define MSG_FILE_SAVED                      "Done saving file."
154
-#define MSG_ERR_LINE_NO                     "Line Number is not Last Line Number+1, Last Line: "
155
-#define MSG_ERR_CHECKSUM_MISMATCH           "checksum mismatch, Last Line: "
156
-#define MSG_ERR_NO_CHECKSUM                 "No Checksum with line number, Last Line: "
157
-#define MSG_FILE_PRINTED                    "Done printing file"
158
-#define MSG_BEGIN_FILE_LIST                 "Begin file list"
159
-#define MSG_END_FILE_LIST                   "End file list"
160
-#define MSG_INVALID_EXTRUDER                "Invalid extruder"
161
-#define MSG_INVALID_E_STEPPER               "Invalid E stepper"
162
-#define MSG_E_STEPPER_NOT_SPECIFIED         "E stepper not specified"
163
-#define MSG_INVALID_SOLENOID                "Invalid solenoid"
164
-#define MSG_M115_REPORT                     "FIRMWARE_NAME:Marlin " DETAILED_BUILD_VERSION " SOURCE_CODE_URL:" SOURCE_CODE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID
165
-#define MSG_COUNT_X                         " Count X:"
166
-#define MSG_COUNT_A                         " Count A:"
167
-#define MSG_WATCHDOG_FIRED                  "Watchdog timeout. Reset required."
168
-#define MSG_ERR_KILLED                      "Printer halted. kill() called!"
169
-#define MSG_ERR_STOPPED                     "Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)"
170
-#define MSG_BUSY_PROCESSING                 "busy: processing"
171
-#define MSG_BUSY_PAUSED_FOR_USER            "busy: paused for user"
172
-#define MSG_BUSY_PAUSED_FOR_INPUT           "busy: paused for input"
173
-#define MSG_Z_MOVE_COMP                     "Z_move_comp"
174
-#define MSG_RESEND                          "Resend: "
175
-#define MSG_UNKNOWN_COMMAND                 "Unknown command: \""
176
-#define MSG_ACTIVE_EXTRUDER                 "Active Extruder: "
177
-#define MSG_X_MIN                           "x_min"
178
-#define MSG_X_MAX                           "x_max"
179
-#define MSG_X2_MIN                          "x2_min"
180
-#define MSG_X2_MAX                          "x2_max"
181
-#define MSG_Y_MIN                           "y_min"
182
-#define MSG_Y_MAX                           "y_max"
183
-#define MSG_Y2_MIN                          "y2_min"
184
-#define MSG_Y2_MAX                          "y2_max"
185
-#define MSG_Z_MIN                           "z_min"
186
-#define MSG_Z_MAX                           "z_max"
187
-#define MSG_Z2_MIN                          "z2_min"
188
-#define MSG_Z2_MAX                          "z2_max"
189
-#define MSG_Z3_MIN                          "z3_min"
190
-#define MSG_Z3_MAX                          "z3_max"
191
-#define MSG_Z4_MIN                          "z4_min"
192
-#define MSG_Z4_MAX                          "z4_max"
193
-#define MSG_Z_PROBE                         "z_probe"
194
-#define MSG_FILAMENT_RUNOUT_SENSOR          "filament"
195
-#define MSG_PROBE_OFFSET                    "Probe Offset"
196
-#define MSG_SKEW_MIN                        "min_skew_factor: "
197
-#define MSG_SKEW_MAX                        "max_skew_factor: "
198
-#define MSG_ERR_MATERIAL_INDEX              "M145 S<index> out of range (0-1)"
199
-#define MSG_ERR_M421_PARAMETERS             "M421 incorrect parameter usage"
200
-#define MSG_ERR_BAD_PLANE_MODE              "G5 requires XY plane mode"
201
-#define MSG_ERR_MESH_XY                     "Mesh point cannot be resolved"
202
-#define MSG_ERR_ARC_ARGS                    "G2/G3 bad parameters"
203
-#define MSG_ERR_PROTECTED_PIN               "Protected Pin"
204
-#define MSG_ERR_M420_FAILED                 "Failed to enable Bed Leveling"
205
-#define MSG_ERR_M428_TOO_FAR                "Too far from reference point"
206
-#define MSG_ERR_M303_DISABLED               "PIDTEMP disabled"
207
-#define MSG_M119_REPORT                     "Reporting endstop status"
208
-#define MSG_ON                              "ON"
209
-#define MSG_OFF                             "OFF"
210
-#define MSG_ENDSTOP_HIT                     "TRIGGERED"
211
-#define MSG_ENDSTOP_OPEN                    "open"
212
-#define MSG_HOTEND_OFFSET                   "Hotend offsets:"
213
-#define MSG_DUPLICATION_MODE                "Duplication mode: "
214
-#define MSG_SOFT_ENDSTOPS                   "Soft endstops: "
215
-#define MSG_SOFT_MIN                        "  Min: "
216
-#define MSG_SOFT_MAX                        "  Max: "
217
-
218
-#define MSG_SAVED_POS                       "Position saved"
219
-#define MSG_RESTORING_POS                   "Restoring position"
220
-#define MSG_INVALID_POS_SLOT                "Invalid slot. Total: "
221
-
222
-#define MSG_SD_CANT_OPEN_SUBDIR             "Cannot open subdir "
223
-#define MSG_SD_INIT_FAIL                    "SD init fail"
224
-#define MSG_SD_VOL_INIT_FAIL                "volume.init failed"
225
-#define MSG_SD_OPENROOT_FAIL                "openRoot failed"
226
-#define MSG_SD_CARD_OK                      "SD card ok"
227
-#define MSG_SD_WORKDIR_FAIL                 "workDir open failed"
228
-#define MSG_SD_OPEN_FILE_FAIL               "open failed, File: "
229
-#define MSG_SD_FILE_OPENED                  "File opened: "
230
-#define MSG_SD_SIZE                         " Size: "
231
-#define MSG_SD_FILE_SELECTED                "File selected"
232
-#define MSG_SD_WRITE_TO_FILE                "Writing to file: "
233
-#define MSG_SD_PRINTING_BYTE                "SD printing byte "
234
-#define MSG_SD_NOT_PRINTING                 "Not SD printing"
235
-#define MSG_SD_ERR_WRITE_TO_FILE            "error writing to file"
236
-#define MSG_SD_ERR_READ                     "SD read error"
237
-#define MSG_SD_CANT_ENTER_SUBDIR            "Cannot enter subdir: "
238
-
239
-#define MSG_STEPPER_TOO_HIGH                "Steprate too high: "
240
-#define MSG_ENDSTOPS_HIT                    "endstops hit: "
241
-#define MSG_ERR_COLD_EXTRUDE_STOP           " cold extrusion prevented"
242
-#define MSG_ERR_LONG_EXTRUDE_STOP           " too long extrusion prevented"
243
-#define MSG_ERR_HOTEND_TOO_COLD             "Hotend too cold"
244
-#define MSG_ERR_Z_HOMING_SER                "Home XY first"
245
-#define MSG_ERR_EEPROM_WRITE                "Error writing to EEPROM!"
246
-
247
-#define MSG_FILAMENT_CHANGE_HEAT_LCD        "Press button to heat nozzle"
248
-#define MSG_FILAMENT_CHANGE_INSERT_LCD      "Insert filament and press button"
249
-#define MSG_FILAMENT_CHANGE_WAIT_LCD        "Press button to resume"
250
-#define MSG_FILAMENT_CHANGE_HEAT_M108       "Send M108 to heat nozzle"
251
-#define MSG_FILAMENT_CHANGE_INSERT_M108     "Insert filament and send M108"
252
-#define MSG_FILAMENT_CHANGE_WAIT_M108       "Send M108 to resume"
253
-
254
-#define MSG_STOP_BLTOUCH                    "!! STOP called because of BLTouch error - restart with M999"
255
-#define MSG_STOP_UNHOMED                    "!! STOP called because of unhomed error - restart with M999"
256
-#define MSG_KILL_INACTIVE_TIME              "!! KILL caused by too much inactive time - current command: "
257
-#define MSG_KILL_BUTTON                     "!! KILL caused by KILL button/pin"
258
-
259
-// temperature.cpp strings
260
-#define MSG_PID_AUTOTUNE_PREFIX             "PID Autotune"
261
-#define MSG_PID_AUTOTUNE_START              MSG_PID_AUTOTUNE_PREFIX " start"
262
-#define MSG_PID_AUTOTUNE_FAILED             MSG_PID_AUTOTUNE_PREFIX " failed!"
263
-#define MSG_PID_BAD_EXTRUDER_NUM            MSG_PID_AUTOTUNE_FAILED " Bad extruder number"
264
-#define MSG_PID_TEMP_TOO_HIGH               MSG_PID_AUTOTUNE_FAILED " Temperature too high"
265
-#define MSG_PID_TIMEOUT                     MSG_PID_AUTOTUNE_FAILED " timeout"
266
-#define MSG_BIAS                            " bias: "
267
-#define MSG_D                               " d: "
268
-#define MSG_T_MIN                           " min: "
269
-#define MSG_T_MAX                           " max: "
270
-#define MSG_KU                              " Ku: "
271
-#define MSG_TU                              " Tu: "
272
-#define MSG_CLASSIC_PID                     " Classic PID "
273
-#define MSG_KP                              " Kp: "
274
-#define MSG_KI                              " Ki: "
275
-#define MSG_KD                              " Kd: "
276
-#define MSG_AT                              " @:"
277
-#define MSG_PID_AUTOTUNE_FINISHED           MSG_PID_AUTOTUNE_PREFIX " finished! Put the last Kp, Ki and Kd constants from below into Configuration.h"
278
-#define MSG_PID_DEBUG                       " PID_DEBUG "
279
-#define MSG_PID_DEBUG_INPUT                 ": Input "
280
-#define MSG_PID_DEBUG_OUTPUT                " Output "
281
-#define MSG_PID_DEBUG_PTERM                 " pTerm "
282
-#define MSG_PID_DEBUG_ITERM                 " iTerm "
283
-#define MSG_PID_DEBUG_DTERM                 " dTerm "
284
-#define MSG_PID_DEBUG_CTERM                 " cTerm "
285
-#define MSG_INVALID_EXTRUDER_NUM            " - Invalid extruder number !"
286
-
287
-#define MSG_HEATER_BED                      "bed"
288
-#define MSG_HEATER_CHAMBER                  "chamber"
289
-
290
-#define MSG_STOPPED_HEATER                  ", system stopped! Heater_ID: "
291
-#define MSG_REDUNDANCY                      "Heater switched off. Temperature difference between temp sensors is too high !"
292
-#define MSG_T_HEATING_FAILED                "Heating failed"
293
-#define MSG_T_THERMAL_RUNAWAY               "Thermal Runaway"
294
-#define MSG_T_MAXTEMP                       "MAXTEMP triggered"
295
-#define MSG_T_MINTEMP                       "MINTEMP triggered"
296
-#define MSG_ERR_PROBING_FAILED              "Probing Failed"
297
-#define MSG_ZPROBE_OUT_SER                  "Z Probe Past Bed"
298
-
299
-// Debug
300
-#define MSG_DEBUG_PREFIX                    "DEBUG:"
301
-#define MSG_DEBUG_OFF                       "off"
302
-#define MSG_DEBUG_ECHO                      "ECHO"
303
-#define MSG_DEBUG_INFO                      "INFO"
304
-#define MSG_DEBUG_ERRORS                    "ERRORS"
305
-#define MSG_DEBUG_DRYRUN                    "DRYRUN"
306
-#define MSG_DEBUG_COMMUNICATION             "COMMUNICATION"
307
-#define MSG_DEBUG_LEVELING                  "LEVELING"
308
-
309
-// LCD Menu Messages
310
-
311
-#define LANGUAGE_DATA_INCL_(M) STRINGIFY_(fontdata/langdata_##M.h)
312
-#define LANGUAGE_DATA_INCL(M) LANGUAGE_DATA_INCL_(M)
313
-
314
-#define LANGUAGE_INCL_(M) STRINGIFY_(../lcd/language/language_##M.h)
315
-#define LANGUAGE_INCL(M) LANGUAGE_INCL_(M)
316
-
317
-// Never translate these strings
318
-#define MSG_X "X"
319
-#define MSG_Y "Y"
320
-#define MSG_Z "Z"
321
-#define MSG_E "E"
322
-#if IS_KINEMATIC
323
-  #define MSG_A "A"
324
-  #define MSG_B "B"
325
-  #define MSG_C "C"
326
-#else
327
-  #define MSG_A "X"
328
-  #define MSG_B "Y"
329
-  #define MSG_C "Z"
330
-#endif
331
-#define MSG_X2 "X2"
332
-#define MSG_Y2 "Y2"
333
-#define MSG_Z2 "Z2"
334
-#define MSG_Z3 "Z3"
335
-#define MSG_Z4 "Z4"
336
-
337
-#define LCD_STR_A MSG_A
338
-#define LCD_STR_B MSG_B
339
-#define LCD_STR_C MSG_C
340
-#define LCD_STR_E MSG_E
341
-
342 342
 /**
343 343
  * Tool indexes for LCD display only
344 344
  *

+ 1
- 1
Marlin/src/core/serial.cpp View File

@@ -54,7 +54,7 @@ void serial_ternary(const bool onoff, PGM_P const pre, PGM_P const on, PGM_P con
54 54
   serialprintPGM(onoff ? on : off);
55 55
   if (post) serialprintPGM(post);
56 56
 }
57
-void serialprint_onoff(const bool onoff) { serialprintPGM(onoff ? PSTR(MSG_ON) : PSTR(MSG_OFF)); }
57
+void serialprint_onoff(const bool onoff) { serialprintPGM(onoff ? PSTR(STR_ON) : PSTR(STR_OFF)); }
58 58
 void serialprintln_onoff(const bool onoff) { serialprint_onoff(onoff); SERIAL_EOL(); }
59 59
 void serialprint_truefalse(const bool tf) { serialprintPGM(tf ? PSTR("true") : PSTR("false")); }
60 60
 

+ 2
- 2
Marlin/src/feature/bltouch.cpp View File

@@ -124,7 +124,7 @@ bool BLTouch::deploy_proc() {
124 124
       // The deploy might have failed or the probe is actually triggered (nozzle too low?) again
125 125
       if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("BLTouch Recovery Failed");
126 126
 
127
-      SERIAL_ERROR_MSG(MSG_STOP_BLTOUCH);  // Tell the user something is wrong, needs action
127
+      SERIAL_ERROR_MSG(STR_STOP_BLTOUCH);  // Tell the user something is wrong, needs action
128 128
       stop();                              // but it's not too bad, no need to kill, allow restart
129 129
 
130 130
       return true;                         // Tell our caller we goofed in case he cares to know
@@ -169,7 +169,7 @@ bool BLTouch::stow_proc() {
169 169
 
170 170
       if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("BLTouch Recovery Failed");
171 171
 
172
-      SERIAL_ERROR_MSG(MSG_STOP_BLTOUCH);  // Tell the user something is wrong, needs action
172
+      SERIAL_ERROR_MSG(STR_STOP_BLTOUCH);  // Tell the user something is wrong, needs action
173 173
       stop();                              // but it's not too bad, no need to kill, allow restart
174 174
 
175 175
       return true;                         // Tell our caller we goofed in case he cares to know

+ 0
- 3
Marlin/src/feature/bltouch.h View File

@@ -105,7 +105,4 @@ private:
105 105
   static void mode_conv_proc(const bool M5V);
106 106
 };
107 107
 
108
-// Deploy/stow angles for use by servo.cpp / servo.h
109
-#define BLTOUCH_ANGLES { BLTOUCH_DEPLOY, BLTOUCH_STOW }
110
-
111 108
 extern BLTouch bltouch;

+ 5
- 5
Marlin/src/feature/pause.cpp View File

@@ -120,7 +120,7 @@ static bool ensure_safe_temperature(const PauseMode mode=PAUSE_MODE_SAME) {
120 120
 
121 121
   #if ENABLED(PREVENT_COLD_EXTRUSION)
122 122
     if (!DEBUGGING(DRYRUN) && thermalManager.targetTooColdToExtrude(active_extruder)) {
123
-      SERIAL_ECHO_MSG(MSG_ERR_HOTEND_TOO_COLD);
123
+      SERIAL_ECHO_MSG(STR_ERR_HOTEND_TOO_COLD);
124 124
       return false;
125 125
     }
126 126
   #endif
@@ -175,7 +175,7 @@ bool load_filament(const float &slow_load_length/*=0*/, const float &fast_load_l
175 175
     #if HAS_LCD_MENU
176 176
       if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_INSERT, mode);
177 177
     #endif
178
-    SERIAL_ECHO_MSG(_PMSG(MSG_FILAMENT_CHANGE_INSERT));
178
+    SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_INSERT));
179 179
 
180 180
     #if HAS_BUZZER
181 181
       filament_change_beep(max_beep_count, true);
@@ -400,7 +400,7 @@ bool pause_print(const float &retract, const xyz_pos_t &park_point, const float
400 400
   #endif
401 401
 
402 402
   if (!DEBUGGING(DRYRUN) && unload_length && thermalManager.targetTooColdToExtrude(active_extruder)) {
403
-    SERIAL_ECHO_MSG(MSG_ERR_HOTEND_TOO_COLD);
403
+    SERIAL_ECHO_MSG(STR_ERR_HOTEND_TOO_COLD);
404 404
 
405 405
     #if HAS_LCD_MENU
406 406
       if (show_lcd) { // Show status screen
@@ -480,7 +480,7 @@ void show_continue_prompt(const bool is_reload) {
480 480
     lcd_pause_show_message(is_reload ? PAUSE_MESSAGE_INSERT : PAUSE_MESSAGE_WAITING);
481 481
   #endif
482 482
   SERIAL_ECHO_START();
483
-  serialprintPGM(is_reload ? PSTR(_PMSG(MSG_FILAMENT_CHANGE_INSERT) "\n") : PSTR(_PMSG(MSG_FILAMENT_CHANGE_WAIT) "\n"));
483
+  serialprintPGM(is_reload ? PSTR(_PMSG(STR_FILAMENT_CHANGE_INSERT) "\n") : PSTR(_PMSG(STR_FILAMENT_CHANGE_WAIT) "\n"));
484 484
 }
485 485
 
486 486
 void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep_count/*=0*/ DXC_ARGS) {
@@ -530,7 +530,7 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
530 530
       #if HAS_LCD_MENU
531 531
         lcd_pause_show_message(PAUSE_MESSAGE_HEAT);
532 532
       #endif
533
-      SERIAL_ECHO_MSG(_PMSG(MSG_FILAMENT_CHANGE_HEAT));
533
+      SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_HEAT));
534 534
 
535 535
       #if ENABLED(HOST_PROMPT_SUPPORT)
536 536
         host_prompt_do(PROMPT_USER_CONTINUE, PSTR("HeaterTimeout"), PSTR("Reheat"));

+ 1
- 1
Marlin/src/feature/power_loss_recovery.cpp View File

@@ -141,7 +141,7 @@ void PrintJobRecovery::prepare() {
141 141
 /**
142 142
  * Save the current machine state to the power-loss recovery file
143 143
  */
144
-void PrintJobRecovery::save(const bool force/*=false*/, const bool save_queue/*=true*/) {
144
+void PrintJobRecovery::save(const bool force/*=false*/) {
145 145
 
146 146
   #if SAVE_INFO_INTERVAL_MS > 0
147 147
     static millis_t next_save_ms; // = 0

+ 2
- 5
Marlin/src/feature/power_loss_recovery.h View File

@@ -159,13 +159,10 @@ class PrintJobRecovery {
159 159
     static inline void cancel() { purge(); card.autostart_index = 0; }
160 160
 
161 161
     static void load();
162
-    static void save(const bool force=
162
+    static void save(const bool force=false
163 163
       #if ENABLED(SAVE_EACH_CMD_MODE)
164
-        true
165
-      #else
166
-        false
164
+        || true
167 165
       #endif
168
-      , const bool save_queue=true
169 166
     );
170 167
 
171 168
   #if PIN_EXISTS(POWER_LOSS)

+ 1
- 1
Marlin/src/feature/probe_temp_compensation.h View File

@@ -57,7 +57,7 @@ class ProbeTempComp {
57 57
     static const temp_calib_t cali_info[TSI_COUNT];
58 58
 
59 59
     // Where to park nozzle to wait for probe cooldown
60
-    static constexpr xyz_pos_t park_point = { PTC_PARK_POS_X, PTC_PARK_POS_Y, PTC_PARK_POS_Z };
60
+    static constexpr xyz_pos_t park_point = xyz_pos_t({ PTC_PARK_POS_X, PTC_PARK_POS_Y, PTC_PARK_POS_Z });
61 61
 
62 62
     static constexpr int  max_bed_temp         = PTC_MAX_BED_TEMP,  // Max temperature to avoid heating errors
63 63
 

+ 1
- 1
Marlin/src/feature/prusa_MMU2/mmu2.cpp View File

@@ -462,7 +462,7 @@ void MMU2::tool_change(uint8_t index) {
462 462
     ENABLE_AXIS_E0();
463 463
 
464 464
     SERIAL_ECHO_START();
465
-    SERIAL_ECHOLNPAIR(MSG_ACTIVE_EXTRUDER, int(extruder));
465
+    SERIAL_ECHOLNPAIR(STR_ACTIVE_EXTRUDER, int(extruder));
466 466
 
467 467
     ui.reset_status();
468 468
   }

+ 1
- 1
Marlin/src/feature/solenoid.cpp View File

@@ -67,7 +67,7 @@ static void set_solenoid(const uint8_t num, const bool active) {
67 67
         break;
68 68
     #endif
69 69
     default:
70
-      SERIAL_ECHO_MSG(MSG_INVALID_SOLENOID);
70
+      SERIAL_ECHO_MSG(STR_INVALID_SOLENOID);
71 71
       break;
72 72
   }
73 73
 }

+ 1
- 1
Marlin/src/gcode/bedlevel/G42.cpp View File

@@ -41,7 +41,7 @@ void GcodeSuite::G42() {
41 41
     const int8_t iy = hasJ ? parser.value_int() : 0;
42 42
 
43 43
     if ((hasI && !WITHIN(ix, 0, GRID_MAX_POINTS_X - 1)) || (hasJ && !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1))) {
44
-      SERIAL_ECHOLNPGM(MSG_ERR_MESH_XY);
44
+      SERIAL_ECHOLNPGM(STR_ERR_MESH_XY);
45 45
       return;
46 46
     }
47 47
 

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

@@ -235,7 +235,7 @@ void GcodeSuite::M420() {
235 235
 
236 236
   // Error if leveling failed to enable or reenable
237 237
   if (to_enable && !planner.leveling_active)
238
-    SERIAL_ERROR_MSG(MSG_ERR_M420_FAILED);
238
+    SERIAL_ERROR_MSG(STR_ERR_M420_FAILED);
239 239
 
240 240
   SERIAL_ECHO_START();
241 241
   SERIAL_ECHOPGM("Bed Leveling ");
@@ -247,7 +247,7 @@ void GcodeSuite::M420() {
247 247
     if (planner.z_fade_height > 0.0)
248 248
       SERIAL_ECHOLN(planner.z_fade_height);
249 249
     else
250
-      SERIAL_ECHOLNPGM(MSG_OFF);
250
+      SERIAL_ECHOLNPGM(STR_OFF);
251 251
   #endif
252 252
 
253 253
   // Report change in position

+ 2
- 2
Marlin/src/gcode/bedlevel/abl/M421.cpp View File

@@ -50,9 +50,9 @@ void GcodeSuite::M421() {
50 50
              hasQ = !hasZ && parser.seen('Q');
51 51
 
52 52
   if (!hasI || !hasJ || !(hasZ || hasQ))
53
-    SERIAL_ERROR_MSG(MSG_ERR_M421_PARAMETERS);
53
+    SERIAL_ERROR_MSG(STR_ERR_M421_PARAMETERS);
54 54
   else if (!WITHIN(ix, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1))
55
-    SERIAL_ERROR_MSG(MSG_ERR_MESH_XY);
55
+    SERIAL_ERROR_MSG(STR_ERR_MESH_XY);
56 56
   else {
57 57
     z_values[ix][iy] = parser.value_linear_units() + (hasQ ? z_values[ix][iy] : 0);
58 58
     #if ENABLED(ABL_BILINEAR_SUBDIVISION)

+ 2
- 2
Marlin/src/gcode/bedlevel/mbl/M421.cpp View File

@@ -49,9 +49,9 @@ void GcodeSuite::M421() {
49 49
   const bool hasZ = parser.seen('Z'), hasQ = !hasZ && parser.seen('Q');
50 50
 
51 51
   if (int(hasI && hasJ) + int(hasX && hasY) != 1 || !(hasZ || hasQ))
52
-    SERIAL_ERROR_MSG(MSG_ERR_M421_PARAMETERS);
52
+    SERIAL_ERROR_MSG(STR_ERR_M421_PARAMETERS);
53 53
   else if (ix < 0 || iy < 0)
54
-    SERIAL_ERROR_MSG(MSG_ERR_MESH_XY);
54
+    SERIAL_ERROR_MSG(STR_ERR_MESH_XY);
55 55
   else
56 56
     mbl.set_z(ix, iy, parser.value_linear_units() + (hasQ ? mbl.z_values[ix][iy] : 0));
57 57
 }

+ 2
- 2
Marlin/src/gcode/bedlevel/ubl/M421.cpp View File

@@ -57,9 +57,9 @@ void GcodeSuite::M421() {
57 57
   if (hasC) ij = ubl.find_closest_mesh_point_of_type(REAL, current_position);
58 58
 
59 59
   if (int(hasC) + int(hasI && hasJ) != 1 || !(hasZ || hasQ || hasN))
60
-    SERIAL_ERROR_MSG(MSG_ERR_M421_PARAMETERS);
60
+    SERIAL_ERROR_MSG(STR_ERR_M421_PARAMETERS);
61 61
   else if (!WITHIN(ij.x, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(ij.y, 0, GRID_MAX_POINTS_Y - 1))
62
-    SERIAL_ERROR_MSG(MSG_ERR_MESH_XY);
62
+    SERIAL_ERROR_MSG(STR_ERR_MESH_XY);
63 63
   else {
64 64
     float &zval = ubl.z_values[ij.x][ij.y];
65 65
     zval = hasN ? NAN : parser.value_linear_units() + (hasQ ? zval : 0);

+ 5
- 3
Marlin/src/gcode/calibrate/G28.cpp View File

@@ -106,6 +106,8 @@
106 106
       #if AXIS_HAS_STALLGUARD(Y2)
107 107
         tmc_disable_stallguard(stepperY2, stealth_states.y2);
108 108
       #endif
109
+      do_blocking_move_to_xy(-0.5 * x_axis_home_dir, -0.5 * home_dir(Y_AXIS), fr_mm_s / 2);
110
+      safe_delay(100);
109 111
     #endif
110 112
   }
111 113
 
@@ -118,7 +120,7 @@
118 120
     // Disallow Z homing if X or Y are unknown
119 121
     if (!TEST(axis_known_position, X_AXIS) || !TEST(axis_known_position, Y_AXIS)) {
120 122
       LCD_MESSAGEPGM(MSG_ERR_Z_HOMING);
121
-      SERIAL_ECHO_MSG(MSG_ERR_Z_HOMING_SER);
123
+      SERIAL_ECHO_MSG(STR_ERR_Z_HOMING_SER);
122 124
       return;
123 125
     }
124 126
 
@@ -154,7 +156,7 @@
154 156
     }
155 157
     else {
156 158
       LCD_MESSAGEPGM(MSG_ZPROBE_OUT);
157
-      SERIAL_ECHO_MSG(MSG_ZPROBE_OUT_SER);
159
+      SERIAL_ECHO_MSG(STR_ZPROBE_OUT_SER);
158 160
     }
159 161
 
160 162
     if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< home_z_safely");
@@ -529,7 +531,7 @@ void GcodeSuite::G28(const bool always_home_all) {
529 531
       #define _HOME_SYNC doZ        // Only for Z-axis
530 532
     #endif
531 533
     if (_HOME_SYNC)
532
-      SERIAL_ECHOLNPGM(MSG_Z_MOVE_COMP);
534
+      SERIAL_ECHOLNPGM(STR_Z_MOVE_COMP);
533 535
   #endif
534 536
 
535 537
   if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< G28");

+ 1
- 1
Marlin/src/gcode/calibrate/G33.cpp View File

@@ -190,7 +190,7 @@ static float std_dev_points(float z_pt[NPP + 1], const bool _0p_cal, const bool
190 190
  */
191 191
 static float calibration_probe(const xy_pos_t &xy, const bool stow) {
192 192
   #if HAS_BED_PROBE
193
-    return probe.probe_at_point(xy, stow ? PROBE_PT_STOW : PROBE_PT_RAISE, 0, true);
193
+    return probe.probe_at_point(xy, stow ? PROBE_PT_STOW : PROBE_PT_RAISE, 0, true, false);
194 194
   #else
195 195
     UNUSED(stow);
196 196
     return lcd_probe_pt(xy);

+ 1
- 1
Marlin/src/gcode/calibrate/M852.cpp View File

@@ -82,7 +82,7 @@ void GcodeSuite::M852() {
82 82
   #endif
83 83
 
84 84
   if (badval)
85
-    SERIAL_ECHOLNPGM(MSG_SKEW_MIN " " STRINGIFY(SKEW_FACTOR_MIN) " " MSG_SKEW_MAX " " STRINGIFY(SKEW_FACTOR_MAX));
85
+    SERIAL_ECHOLNPGM(STR_SKEW_MIN " " STRINGIFY(SKEW_FACTOR_MIN) " " STR_SKEW_MAX " " STRINGIFY(SKEW_FACTOR_MAX));
86 86
 
87 87
   // When skew is changed the current position changes
88 88
   if (setval) {

+ 1
- 1
Marlin/src/gcode/config/M218.cpp View File

@@ -50,7 +50,7 @@ void GcodeSuite::M218() {
50 50
 
51 51
   if (!parser.seen("XYZ")) {
52 52
     SERIAL_ECHO_START();
53
-    SERIAL_ECHOPGM(MSG_HOTEND_OFFSET);
53
+    SERIAL_ECHOPGM(STR_HOTEND_OFFSET);
54 54
     HOTEND_LOOP() {
55 55
       SERIAL_CHAR(' ');
56 56
       SERIAL_ECHO(hotend_offset[e].x);

+ 6
- 0
Marlin/src/gcode/config/M281.cpp View File

@@ -30,6 +30,12 @@ void GcodeSuite::M281() {
30 30
   if (!parser.seenval('P')) return;
31 31
   const int servo_index = parser.value_int();
32 32
   if (WITHIN(servo_index, 0, NUM_SERVOS - 1)) {
33
+    #if ENABLED(BLTOUCH)
34
+      if (servo_index == Z_PROBE_SERVO_NR) {
35
+        SERIAL_ERROR_MSG("BLTouch angles can't be changed.");
36
+        return;
37
+      }
38
+    #endif
33 39
     bool angle_change = false;
34 40
     if (parser.seen('L')) {
35 41
       servo_angles[servo_index][0] = parser.value_int();

+ 1
- 1
Marlin/src/gcode/config/M301.cpp View File

@@ -82,7 +82,7 @@ void GcodeSuite::M301() {
82 82
     SERIAL_EOL();
83 83
   }
84 84
   else
85
-    SERIAL_ERROR_MSG(MSG_INVALID_EXTRUDER);
85
+    SERIAL_ERROR_MSG(STR_INVALID_EXTRUDER);
86 86
 }
87 87
 
88 88
 #endif // PIDTEMP

+ 8
- 8
Marlin/src/gcode/control/M111.cpp View File

@@ -28,13 +28,13 @@
28 28
 void GcodeSuite::M111() {
29 29
   if (parser.seen('S')) marlin_debug_flags = parser.byteval('S');
30 30
 
31
-  static const char str_debug_1[] PROGMEM = MSG_DEBUG_ECHO,
32
-                    str_debug_2[] PROGMEM = MSG_DEBUG_INFO,
33
-                    str_debug_4[] PROGMEM = MSG_DEBUG_ERRORS,
34
-                    str_debug_8[] PROGMEM = MSG_DEBUG_DRYRUN,
35
-                    str_debug_16[] PROGMEM = MSG_DEBUG_COMMUNICATION
31
+  static const char str_debug_1[] PROGMEM = STR_DEBUG_ECHO,
32
+                    str_debug_2[] PROGMEM = STR_DEBUG_INFO,
33
+                    str_debug_4[] PROGMEM = STR_DEBUG_ERRORS,
34
+                    str_debug_8[] PROGMEM = STR_DEBUG_DRYRUN,
35
+                    str_debug_16[] PROGMEM = STR_DEBUG_COMMUNICATION
36 36
                     #if ENABLED(DEBUG_LEVELING_FEATURE)
37
-                      , str_debug_lvl[] PROGMEM = MSG_DEBUG_LEVELING
37
+                      , str_debug_lvl[] PROGMEM = STR_DEBUG_LEVELING
38 38
                     #endif
39 39
                     ;
40 40
 
@@ -46,7 +46,7 @@ void GcodeSuite::M111() {
46 46
   };
47 47
 
48 48
   SERIAL_ECHO_START();
49
-  SERIAL_ECHOPGM(MSG_DEBUG_PREFIX);
49
+  SERIAL_ECHOPGM(STR_DEBUG_PREFIX);
50 50
   if (marlin_debug_flags) {
51 51
     uint8_t comma = 0;
52 52
     for (uint8_t i = 0; i < COUNT(debug_strings); i++) {
@@ -57,7 +57,7 @@ void GcodeSuite::M111() {
57 57
     }
58 58
   }
59 59
   else {
60
-    SERIAL_ECHOPGM(MSG_DEBUG_OFF);
60
+    SERIAL_ECHOPGM(STR_DEBUG_OFF);
61 61
     #if !defined(__AVR__) || !defined(USBCON)
62 62
       #if ENABLED(SERIAL_STATS_RX_BUFFER_OVERRUNS)
63 63
         SERIAL_ECHOPAIR("\nBuffer Overruns: ", MYSERIAL0.buffer_overruns());

+ 3
- 3
Marlin/src/gcode/control/M211.cpp View File

@@ -36,11 +36,11 @@ void GcodeSuite::M211() {
36 36
   const xyz_pos_t l_soft_min = soft_endstop.min.asLogical(),
37 37
                   l_soft_max = soft_endstop.max.asLogical();
38 38
   SERIAL_ECHO_START();
39
-  SERIAL_ECHOPGM(MSG_SOFT_ENDSTOPS);
39
+  SERIAL_ECHOPGM(STR_SOFT_ENDSTOPS);
40 40
   if (parser.seen('S')) soft_endstops_enabled = parser.value_bool();
41 41
   serialprint_onoff(soft_endstops_enabled);
42
-  print_xyz(l_soft_min, PSTR(MSG_SOFT_MIN), PSTR(" "));
43
-  print_xyz(l_soft_max, PSTR(MSG_SOFT_MAX));
42
+  print_xyz(l_soft_min, PSTR(STR_SOFT_MIN), PSTR(" "));
43
+  print_xyz(l_soft_max, PSTR(STR_SOFT_MAX));
44 44
 }
45 45
 
46 46
 #endif

+ 1
- 1
Marlin/src/gcode/control/M605.cpp View File

@@ -167,7 +167,7 @@
167 167
       extruder_duplication_enabled = ena && (duplication_e_mask >= 3);
168 168
     }
169 169
     SERIAL_ECHO_START();
170
-    SERIAL_ECHOPGM(MSG_DUPLICATION_MODE);
170
+    SERIAL_ECHOPGM(STR_DUPLICATION_MODE);
171 171
     serialprint_onoff(extruder_duplication_enabled);
172 172
     if (ena) {
173 173
       SERIAL_ECHOPGM(" ( ");

+ 1
- 1
Marlin/src/gcode/control/M80_M81.cpp View File

@@ -110,6 +110,6 @@ void GcodeSuite::M81() {
110 110
   #endif
111 111
 
112 112
   #if HAS_LCD_MENU
113
-    LCD_MESSAGEPGM_P(PSTR(MACHINE_NAME " " MSG_OFF "."));
113
+    LCD_MESSAGEPGM_P(PSTR(MACHINE_NAME " " STR_OFF "."));
114 114
   #endif
115 115
 }

+ 2
- 2
Marlin/src/gcode/feature/pause/G60.cpp View File

@@ -40,7 +40,7 @@ void GcodeSuite::G60() {
40 40
   const uint8_t slot = parser.byteval('S');
41 41
 
42 42
   if (slot >= SAVED_POSITIONS) {
43
-    SERIAL_ERROR_MSG(MSG_INVALID_POS_SLOT STRINGIFY(SAVED_POSITIONS));
43
+    SERIAL_ERROR_MSG(STR_INVALID_POS_SLOT STRINGIFY(SAVED_POSITIONS));
44 44
     return;
45 45
   }
46 46
 
@@ -49,7 +49,7 @@ void GcodeSuite::G60() {
49 49
 
50 50
   #if ENABLED(SAVED_POSITIONS_DEBUG)
51 51
     const xyze_pos_t &pos = stored_position[slot];
52
-    DEBUG_ECHOPAIR_F(MSG_SAVED_POS " S", slot);
52
+    DEBUG_ECHOPAIR_F(STR_SAVED_POS " S", slot);
53 53
     DEBUG_ECHOPAIR_F(" : X", pos.x);
54 54
     DEBUG_ECHOPAIR_F_P(SP_Y_STR, pos.y);
55 55
     DEBUG_ECHOLNPAIR_F_P(SP_Z_STR, pos.z);

+ 2
- 2
Marlin/src/gcode/feature/pause/G61.cpp View File

@@ -42,7 +42,7 @@ void GcodeSuite::G61(void) {
42 42
 
43 43
   #if SAVED_POSITIONS < 256
44 44
     if (slot >= SAVED_POSITIONS) {
45
-      SERIAL_ERROR_MSG(MSG_INVALID_POS_SLOT STRINGIFY(SAVED_POSITIONS));
45
+      SERIAL_ERROR_MSG(STR_INVALID_POS_SLOT STRINGIFY(SAVED_POSITIONS));
46 46
       return;
47 47
     }
48 48
   #endif
@@ -54,7 +54,7 @@ void GcodeSuite::G61(void) {
54 54
   const float fr = parser.linearval('F');
55 55
   if (fr > 0.0) feedrate_mm_s = MMM_TO_MMS(fr);
56 56
 
57
-  SERIAL_ECHOPAIR(MSG_RESTORING_POS " S", int(slot));
57
+  SERIAL_ECHOPAIR(STR_RESTORING_POS " S", int(slot));
58 58
   LOOP_XYZ(i) {
59 59
     destination[i] = parser.seen(axis_codes[i])
60 60
       ? stored_position[slot][i] + parser.value_axis_units((AxisEnum)i)

+ 7
- 0
Marlin/src/gcode/feature/pause/M125.cpp View File

@@ -35,6 +35,10 @@
35 35
   #include "../../../lcd/ultralcd.h"
36 36
 #endif
37 37
 
38
+#if ENABLED(POWER_LOSS_RECOVERY)
39
+  #include "../../../feature/power_loss_recovery.h"
40
+#endif
41
+
38 42
 /**
39 43
  * M125: Store current position and move to parking position.
40 44
  *       Called on pause (by M25) to prevent material leaking onto the
@@ -85,6 +89,9 @@ void GcodeSuite::M125() {
85 89
   #endif
86 90
 
87 91
   if (pause_print(retract, park_point, 0, show_lcd)) {
92
+    #if ENABLED(POWER_LOSS_RECOVERY)
93
+      if (recovery.enabled) recovery.save(true);
94
+    #endif
88 95
     if (!sd_printing || show_lcd) {
89 96
       wait_for_confirmation(false, 0);
90 97
       resume_print(0, 0, PAUSE_PARK_RETRACT_LENGTH, 0);

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

@@ -94,7 +94,7 @@ int8_t GcodeSuite::get_target_extruder_from_command() {
94 94
     if (e < EXTRUDERS) return e;
95 95
     SERIAL_ECHO_START();
96 96
     SERIAL_CHAR('M'); SERIAL_ECHO(parser.codenum);
97
-    SERIAL_ECHOLNPAIR(" " MSG_INVALID_EXTRUDER " ", int(e));
97
+    SERIAL_ECHOLNPAIR(" " STR_INVALID_EXTRUDER " ", int(e));
98 98
     return -1;
99 99
   }
100 100
   return active_extruder;
@@ -111,9 +111,9 @@ int8_t GcodeSuite::get_target_e_stepper_from_command() {
111 111
   SERIAL_ECHO_START();
112 112
   SERIAL_CHAR('M'); SERIAL_ECHO(parser.codenum);
113 113
   if (e == -1)
114
-    SERIAL_ECHOLNPGM(" " MSG_E_STEPPER_NOT_SPECIFIED);
114
+    SERIAL_ECHOLNPGM(" " STR_E_STEPPER_NOT_SPECIFIED);
115 115
   else
116
-    SERIAL_ECHOLNPAIR(" " MSG_INVALID_E_STEPPER " ", int(e));
116
+    SERIAL_ECHOLNPAIR(" " STR_INVALID_E_STEPPER " ", int(e));
117 117
   return -1;
118 118
 }
119 119
 
@@ -951,13 +951,13 @@ void GcodeSuite::process_subcommands_now(char * gcode) {
951 951
       switch (busy_state) {
952 952
         case IN_HANDLER:
953 953
         case IN_PROCESS:
954
-          SERIAL_ECHO_MSG(MSG_BUSY_PROCESSING);
954
+          SERIAL_ECHO_MSG(STR_BUSY_PROCESSING);
955 955
           break;
956 956
         case PAUSED_FOR_USER:
957
-          SERIAL_ECHO_MSG(MSG_BUSY_PAUSED_FOR_USER);
957
+          SERIAL_ECHO_MSG(STR_BUSY_PAUSED_FOR_USER);
958 958
           break;
959 959
         case PAUSED_FOR_INPUT:
960
-          SERIAL_ECHO_MSG(MSG_BUSY_PAUSED_FOR_INPUT);
960
+          SERIAL_ECHO_MSG(STR_BUSY_PAUSED_FOR_INPUT);
961 961
           break;
962 962
         default:
963 963
           break;

+ 1
- 1
Marlin/src/gcode/geometry/M206_M428.cpp View File

@@ -69,7 +69,7 @@ void GcodeSuite::M428() {
69 69
     if (!WITHIN(diff[i], -20, 20) && home_dir((AxisEnum)i) > 0)
70 70
       diff[i] = -current_position[i];
71 71
     if (!WITHIN(diff[i], -20, 20)) {
72
-      SERIAL_ERROR_MSG(MSG_ERR_M428_TOO_FAR);
72
+      SERIAL_ERROR_MSG(STR_ERR_M428_TOO_FAR);
73 73
       LCD_ALERTMESSAGEPGM_P(PSTR("Err: Too far!"));
74 74
       BUZZ(200, 40);
75 75
       return;

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

@@ -39,7 +39,7 @@
39 39
  */
40 40
 void GcodeSuite::M115() {
41 41
 
42
-  SERIAL_ECHOLNPGM(MSG_M115_REPORT);
42
+  SERIAL_ECHOLNPGM(STR_M115_REPORT);
43 43
 
44 44
   #if ENABLED(EXTENDED_CAPABILITIES_REPORT)
45 45
 

+ 8
- 3
Marlin/src/gcode/lcd/M0_M1.cpp View File

@@ -67,11 +67,16 @@ void GcodeSuite::M0_M1() {
67 67
 
68 68
   planner.synchronize();
69 69
 
70
+  #if HAS_LEDS_OFF_FLAG
71
+    if (parser.seen('Q'))
72
+      printerEventLEDs.onPrintCompleted();  // Change LED color for Print Completed
73
+  #endif
74
+
70 75
   #if HAS_LCD_MENU
71 76
 
72 77
     if (has_message)
73 78
       ui.set_status(args, true);
74
-    else if (!parser.seenval('Q')) {
79
+    else {
75 80
       LCD_MESSAGEPGM(MSG_USERWAIT);
76 81
       #if ENABLED(LCD_PROGRESS_BAR) && PROGRESS_MSG_EXPIRE > 0
77 82
         ui.reset_progress_bar_timeout();
@@ -98,11 +103,11 @@ void GcodeSuite::M0_M1() {
98 103
   wait_for_user = true;
99 104
 
100 105
   #if ENABLED(HOST_PROMPT_SUPPORT)
101
-    host_prompt_do(PROMPT_USER_CONTINUE, PSTR("M0/1 Break Called"), CONTINUE_STR);
106
+    host_prompt_do(PROMPT_USER_CONTINUE, parser.codenum ? PSTR("M1 Stop") : PSTR("M0 Stop"), CONTINUE_STR);
102 107
   #endif
103 108
 
104 109
   if (ms > 0) ms += millis();  // wait until this time for a click
105
-  while (wait_for_user || (ms > 0 && PENDING(millis(), ms))) idle();
110
+  while (wait_for_user && (ms == 0 || PENDING(millis(), ms))) idle();
106 111
 
107 112
   #if HAS_LEDS_OFF_FLAG
108 113
     printerEventLEDs.onResumeAfterWait();

+ 1
- 1
Marlin/src/gcode/lcd/M145.cpp View File

@@ -38,7 +38,7 @@
38 38
 void GcodeSuite::M145() {
39 39
   const uint8_t material = (uint8_t)parser.intval('S');
40 40
   if (material >= COUNT(ui.preheat_hotend_temp))
41
-    SERIAL_ERROR_MSG(MSG_ERR_MATERIAL_INDEX);
41
+    SERIAL_ERROR_MSG(STR_ERR_MATERIAL_INDEX);
42 42
   else {
43 43
     int v;
44 44
     if (parser.seenval('H')) {

+ 1
- 1
Marlin/src/gcode/motion/G0_G1.cpp View File

@@ -118,7 +118,7 @@ void GcodeSuite::G0_G1(
118 118
       #endif
119 119
       if (_MOVE_SYNC) {
120 120
         planner.synchronize();
121
-        SERIAL_ECHOLNPGM(MSG_Z_MOVE_COMP);
121
+        SERIAL_ECHOLNPGM(STR_Z_MOVE_COMP);
122 122
       }
123 123
     #endif
124 124
   }

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

@@ -327,7 +327,7 @@ void GcodeSuite::G2_G3(const bool clockwise) {
327 327
         // P indicates number of circles to do
328 328
         int8_t circles_to_do = parser.byteval('P');
329 329
         if (!WITHIN(circles_to_do, 0, 100))
330
-          SERIAL_ERROR_MSG(MSG_ERR_ARC_ARGS);
330
+          SERIAL_ERROR_MSG(STR_ERR_ARC_ARGS);
331 331
 
332 332
         while (circles_to_do--)
333 333
           plan_arc(current_position, arc_offset, clockwise);
@@ -338,7 +338,7 @@ void GcodeSuite::G2_G3(const bool clockwise) {
338 338
       reset_stepper_timeout();
339 339
     }
340 340
     else
341
-      SERIAL_ERROR_MSG(MSG_ERR_ARC_ARGS);
341
+      SERIAL_ERROR_MSG(STR_ERR_ARC_ARGS);
342 342
   }
343 343
 }
344 344
 

+ 1
- 1
Marlin/src/gcode/motion/G4.cpp View File

@@ -35,7 +35,7 @@ void GcodeSuite::G4() {
35 35
 
36 36
   planner.synchronize();
37 37
   #if ENABLED(NANODLP_Z_SYNC)
38
-    SERIAL_ECHOLNPGM(MSG_Z_MOVE_COMP);
38
+    SERIAL_ECHOLNPGM(STR_Z_MOVE_COMP);
39 39
   #endif
40 40
 
41 41
   if (!ui.has_status()) LCD_MESSAGEPGM(MSG_DWELL);

+ 1
- 1
Marlin/src/gcode/motion/G5.cpp View File

@@ -45,7 +45,7 @@ void GcodeSuite::G5() {
45 45
 
46 46
     #if ENABLED(CNC_WORKSPACE_PLANES)
47 47
       if (workspace_plane != PLANE_XY) {
48
-        SERIAL_ERROR_MSG(MSG_ERR_BAD_PLANE_MODE);
48
+        SERIAL_ERROR_MSG(STR_ERR_BAD_PLANE_MODE);
49 49
         return;
50 50
       }
51 51
     #endif

+ 3
- 3
Marlin/src/gcode/motion/M290.cpp View File

@@ -48,13 +48,13 @@
48 48
     ) {
49 49
       probe.offset.z += offs;
50 50
       SERIAL_ECHO_START();
51
-      SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET MSG_Z ": ", probe.offset.z);
51
+      SERIAL_ECHOLNPAIR(STR_PROBE_OFFSET STR_Z ": ", probe.offset.z);
52 52
     }
53 53
     else {
54 54
       #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
55 55
         hotend_offset[active_extruder].z -= offs;
56 56
         SERIAL_ECHO_START();
57
-        SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET MSG_Z ": ", hotend_offset[active_extruder].z);
57
+        SERIAL_ECHOLNPAIR(STR_PROBE_OFFSET STR_Z ": ", hotend_offset[active_extruder].z);
58 58
       #endif
59 59
     }
60 60
   }
@@ -98,7 +98,7 @@ void GcodeSuite::M290() {
98 98
     SERIAL_ECHO_START();
99 99
 
100 100
     #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
101
-      SERIAL_ECHOLNPAIR(MSG_PROBE_OFFSET " " MSG_Z, probe.offset.z);
101
+      SERIAL_ECHOLNPAIR(STR_PROBE_OFFSET " " STR_Z, probe.offset.z);
102 102
     #endif
103 103
 
104 104
     #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)

+ 15
- 8
Marlin/src/gcode/parser.cpp View File

@@ -118,11 +118,18 @@ void GCodeParser::parse(char *p) {
118 118
 
119 119
   reset(); // No codes to report
120 120
 
121
+  auto uppercase = [](char c) {
122
+    #if ENABLED(GCODE_CASE_INSENSITIVE)
123
+      if (WITHIN(c, 'a', 'z')) c += 'A' - 'a';
124
+    #endif
125
+    return c;
126
+  };
127
+
121 128
   // Skip spaces
122 129
   while (*p == ' ') ++p;
123 130
 
124 131
   // Skip N[-0-9] if included in the command line
125
-  if (*p == 'N' && NUMERIC_SIGNED(p[1])) {
132
+  if (uppercase(*p) == 'N' && NUMERIC_SIGNED(p[1])) {
126 133
     #if ENABLED(FASTER_GCODE_PARSER)
127 134
       //set('N', p + 1);     // (optional) Set the 'N' parameter value
128 135
     #endif
@@ -135,7 +142,7 @@ void GCodeParser::parse(char *p) {
135 142
   command_ptr = p;
136 143
 
137 144
   // Get the command letter, which must be G, M, or T
138
-  const char letter = *p++;
145
+  const char letter = uppercase(*p++);
139 146
 
140 147
   // Nullify asterisk and trailing whitespace
141 148
   char *starpos = strchr(p, '*');
@@ -271,7 +278,7 @@ void GCodeParser::parse(char *p) {
271 278
     bool quoted_string_arg = false;
272 279
   #endif
273 280
   string_arg = nullptr;
274
-  while (const char param = *p++) {              // Get the next parameter. A NUL ends the loop
281
+  while (const char param = uppercase(*p++)) {  // Get the next parameter. A NUL ends the loop
275 282
 
276 283
     // Special handling for M32 [P] !/path/to/file.g#
277 284
     // The path must be the last parameter
@@ -289,14 +296,14 @@ void GCodeParser::parse(char *p) {
289 296
       }
290 297
     #endif
291 298
 
292
-    // Arguments MUST be uppercase for fast GCode parsing
293 299
     #if ENABLED(FASTER_GCODE_PARSER)
294
-      #define PARAM_TEST WITHIN(param, 'A', 'Z')
300
+      // Arguments MUST be uppercase for fast GCode parsing
301
+      #define PARAM_OK(P) WITHIN((P), 'A', 'Z')
295 302
     #else
296
-      #define PARAM_TEST true
303
+      #define PARAM_OK(P) true
297 304
     #endif
298 305
 
299
-    if (PARAM_TEST) {
306
+    if (PARAM_OK(param)) {
300 307
 
301 308
       while (*p == ' ') p++;                    // Skip spaces between parameters & values
302 309
 
@@ -365,7 +372,7 @@ void GCodeParser::parse(char *p) {
365 372
 #endif // CNC_COORDINATE_SYSTEMS
366 373
 
367 374
 void GCodeParser::unknown_command_warning() {
368
-  SERIAL_ECHO_MSG(MSG_UNKNOWN_COMMAND, command_ptr, "\"");
375
+  SERIAL_ECHO_MSG(STR_UNKNOWN_COMMAND, command_ptr, "\"");
369 376
 }
370 377
 
371 378
 #if ENABLED(DEBUG_GCODE_PARSER)

+ 19
- 7
Marlin/src/gcode/parser.h View File

@@ -166,7 +166,6 @@ public:
166 166
     #ifdef CPU_32_BIT
167 167
       FORCE_INLINE static bool seen(const char * const str) { return !!(codebits & letter_bits(str)); }
168 168
     #else
169
-      // At least one of a list of code letters was seen
170 169
       FORCE_INLINE static bool seen(const char * const str) {
171 170
         const uint32_t letrbits = letter_bits(str);
172 171
         const uint8_t * const cb = (uint8_t*)&codebits;
@@ -177,14 +176,27 @@ public:
177 176
 
178 177
     static inline bool seen_any() { return !!codebits; }
179 178
 
180
-    #define SEEN_TEST(L) TEST32(codebits, LETTER_BIT(L))
179
+    FORCE_INLINE static bool seen_test(const char c) { return TEST32(codebits, LETTER_BIT(c)); }
181 180
 
182 181
   #else // !FASTER_GCODE_PARSER
183 182
 
183
+    #if ENABLED(GCODE_CASE_INSENSITIVE)
184
+      FORCE_INLINE static char* strgchr(char *p, char g) {
185
+        auto uppercase = [](char c) {
186
+          return c + (WITHIN(c, 'a', 'z') ? 'A' - 'a' : 0);
187
+        };
188
+        const char d = uppercase(g);
189
+        for (char cc; (cc = uppercase(*p)); p++) if (cc == d) return p;
190
+        return nullptr;
191
+      }
192
+    #else
193
+      #define strgchr strchr
194
+    #endif
195
+
184 196
     // Code is found in the string. If not found, value_ptr is unchanged.
185 197
     // This allows "if (seen('A')||seen('B'))" to use the last-found value.
186 198
     static inline bool seen(const char c) {
187
-      char *p = strchr(command_args, c);
199
+      char *p = strgchr(command_args, c);
188 200
       const bool b = !!p;
189 201
       if (b) value_ptr = valid_float(&p[1]) ? &p[1] : nullptr;
190 202
       return b;
@@ -192,12 +204,12 @@ public:
192 204
 
193 205
     static inline bool seen_any() { return *command_args == '\0'; }
194 206
 
195
-    #define SEEN_TEST(L) !!strchr(command_args, L)
207
+    FORCE_INLINE static bool seen_test(const char c) { return (bool)strgchr(command_args, c); }
196 208
 
197 209
     // At least one of a list of code letters was seen
198 210
     static inline bool seen(const char * const str) {
199 211
       for (uint8_t i = 0; const char c = str[i]; i++)
200
-        if (SEEN_TEST(c)) return true;
212
+        if (seen_test(c)) return true;
201 213
       return false;
202 214
     }
203 215
 
@@ -205,7 +217,7 @@ public:
205 217
 
206 218
   // Seen any axis parameter
207 219
   static inline bool seen_axis() {
208
-    return SEEN_TEST('X') || SEEN_TEST('Y') || SEEN_TEST('Z') || SEEN_TEST('E');
220
+    return seen_test('X') || seen_test('Y') || seen_test('Z') || seen_test('E');
209 221
   }
210 222
 
211 223
   #if ENABLED(GCODE_QUOTED_STRINGS)
@@ -229,7 +241,7 @@ public:
229 241
   // Seen a parameter with a value
230 242
   static inline bool seenval(const char c) { return seen(c) && has_value(); }
231 243
 
232
-  // Float removes 'E' to prevent scientific notation interpretation
244
+  // The value as a string
233 245
   static inline char* value_string() { return value_ptr; }
234 246
 
235 247
   // Float removes 'E' to prevent scientific notation interpretation

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

@@ -39,9 +39,9 @@ void GcodeSuite::M851() {
39 39
   if (!parser.seen("XYZ")) {
40 40
     SERIAL_ECHOLNPAIR_P(
41 41
       #if HAS_PROBE_XY_OFFSET
42
-        PSTR(MSG_PROBE_OFFSET " X"), probe.offset_xy.x, SP_Y_STR, probe.offset_xy.y, SP_Z_STR
42
+        PSTR(STR_PROBE_OFFSET " X"), probe.offset_xy.x, SP_Y_STR, probe.offset_xy.y, SP_Z_STR
43 43
       #else
44
-        PSTR(MSG_PROBE_OFFSET " X0 Y0 Z")
44
+        PSTR(STR_PROBE_OFFSET " X0 Y0 Z")
45 45
       #endif
46 46
       , probe.offset.z
47 47
     );

+ 24
- 41
Marlin/src/gcode/queue.cpp View File

@@ -163,7 +163,7 @@ bool GCodeQueue::enqueue_one(const char* cmd) {
163 163
   if (*cmd == 0 || *cmd == '\n' || *cmd == '\r') return true;
164 164
 
165 165
   if (_enqueue(cmd)) {
166
-    SERIAL_ECHO_MSG(MSG_ENQUEUEING, cmd, "\"");
166
+    SERIAL_ECHO_MSG(STR_ENQUEUEING, cmd, "\"");
167 167
     return true;
168 168
   }
169 169
   return false;
@@ -244,7 +244,7 @@ void GCodeQueue::ok_to_send() {
244 244
     PORT_REDIRECT(pn);                    // Reply to the serial port that sent the command
245 245
   #endif
246 246
   if (!send_ok[index_r]) return;
247
-  SERIAL_ECHOPGM(MSG_OK);
247
+  SERIAL_ECHOPGM(STR_OK);
248 248
   #if ENABLED(ADVANCED_OK)
249 249
     char* p = command_buffer[index_r];
250 250
     if (*p == 'N') {
@@ -270,7 +270,7 @@ void GCodeQueue::flush_and_request_resend() {
270 270
     PORT_REDIRECT(pn);                    // Reply to the serial port that sent the command
271 271
   #endif
272 272
   SERIAL_FLUSH();
273
-  SERIAL_ECHOPGM(MSG_RESEND);
273
+  SERIAL_ECHOPGM(STR_RESEND);
274 274
   SERIAL_ECHOLN(last_N + 1);
275 275
   ok_to_send();
276 276
 }
@@ -397,7 +397,7 @@ void GCodeQueue::get_serial_commands() {
397 397
     static millis_t last_command_time = 0;
398 398
     const millis_t ms = millis();
399 399
     if (length == 0 && !serial_data_available() && ELAPSED(ms, last_command_time + NO_TIMEOUTS)) {
400
-      SERIAL_ECHOLNPGM(MSG_WAIT);
400
+      SERIAL_ECHOLNPGM(STR_WAIT);
401 401
       last_command_time = ms;
402 402
     }
403 403
   #endif
@@ -436,24 +436,24 @@ void GCodeQueue::get_serial_commands() {
436 436
           gcode_N = strtol(npos + 1, nullptr, 10);
437 437
 
438 438
           if (gcode_N != last_N + 1 && !M110)
439
-            return gcode_line_error(PSTR(MSG_ERR_LINE_NO), i);
439
+            return gcode_line_error(PSTR(STR_ERR_LINE_NO), i);
440 440
 
441 441
           char *apos = strrchr(command, '*');
442 442
           if (apos) {
443 443
             uint8_t checksum = 0, count = uint8_t(apos - command);
444 444
             while (count) checksum ^= command[--count];
445 445
             if (strtol(apos + 1, nullptr, 10) != checksum)
446
-              return gcode_line_error(PSTR(MSG_ERR_CHECKSUM_MISMATCH), i);
446
+              return gcode_line_error(PSTR(STR_ERR_CHECKSUM_MISMATCH), i);
447 447
           }
448 448
           else
449
-            return gcode_line_error(PSTR(MSG_ERR_NO_CHECKSUM), i);
449
+            return gcode_line_error(PSTR(STR_ERR_NO_CHECKSUM), i);
450 450
 
451 451
           last_N = gcode_N;
452 452
         }
453 453
         #if ENABLED(SDSUPPORT)
454 454
           // Pronterface "M29" and "M29 " has no line number
455 455
           else if (card.flag.saving && !is_M29(command))
456
-            return gcode_line_error(PSTR(MSG_ERR_NO_CHECKSUM), i);
456
+            return gcode_line_error(PSTR(STR_ERR_NO_CHECKSUM), i);
457 457
         #endif
458 458
 
459 459
         //
@@ -472,7 +472,7 @@ void GCodeQueue::get_serial_commands() {
472 472
                 case 5:
473 473
               #endif
474 474
                 PORT_REDIRECT(i);                      // Reply to the serial port that sent the command
475
-                SERIAL_ECHOLNPGM(MSG_ERR_STOPPED);
475
+                SERIAL_ECHOLNPGM(STR_ERR_STOPPED);
476 476
                 LCD_MESSAGEPGM(MSG_STOPPED);
477 477
                 break;
478 478
             }
@@ -512,9 +512,10 @@ void GCodeQueue::get_serial_commands() {
512 512
 #if ENABLED(SDSUPPORT)
513 513
 
514 514
   /**
515
-   * Get commands from the SD Card until the command buffer is full
516
-   * or until the end of the file is reached. The special character '#'
517
-   * can also interrupt buffering.
515
+   * Get lines from the SD Card until the command buffer is full
516
+   * or until the end of the file is reached. Because this method
517
+   * always receives complete command-lines, they can go directly
518
+   * into the main command queue.
518 519
    */
519 520
   inline void GCodeQueue::get_sdcard_commands() {
520 521
     static uint8_t sd_input_state = PS_NORMAL;
@@ -526,38 +527,22 @@ void GCodeQueue::get_serial_commands() {
526 527
     while (length < BUFSIZE && !card_eof) {
527 528
       const int16_t n = card.get();
528 529
       card_eof = card.eof();
529
-      if (n < 0 && !card_eof) { SERIAL_ERROR_MSG(MSG_SD_ERR_READ); continue; }
530
+      if (n < 0 && !card_eof) { SERIAL_ERROR_MSG(STR_SD_ERR_READ); continue; }
531
+
530 532
       const char sd_char = (char)n;
531
-      if (sd_char == '\n' || sd_char == '\r' || card_eof) {
533
+      const bool is_eol = sd_char == '\n' || sd_char == '\r';
534
+      if (is_eol || card_eof) {
532 535
 
533 536
         // Reset stream state, terminate the buffer, and commit a non-empty command
537
+        if (!is_eol && sd_count) ++sd_count;          // End of file with no newline
534 538
         if (!process_line_done(sd_input_state, command_buffer[index_w], sd_count)) {
535
-          _commit_command(false);                     // Can handle last line missing a newline terminator
539
+          _commit_command(false);
536 540
           #if ENABLED(POWER_LOSS_RECOVERY)
537
-            recovery.cmd_sdpos = card.getIndex();     // Prime for the next _commit_command
541
+            recovery.cmd_sdpos = card.getIndex();     // Prime for the NEXT _commit_command
538 542
           #endif
539 543
         }
540 544
 
541
-        if (card_eof) {
542
-
543
-          card.fileHasFinished();                     // Handle end of file reached
544
-
545
-          if (!IS_SD_PRINTING()) {                    // Was it the main job file?
546
-            SERIAL_ECHOLNPGM(MSG_FILE_PRINTED);       // Tell the host the file is printed.
547
-            #if ENABLED(PRINTER_EVENT_LEDS)
548
-              printerEventLEDs.onPrintCompleted();    // Change LED color for Print Completed
549
-              #if HAS_RESUME_CONTINUE
550
-                enqueue_now_P(PSTR("M0 S"             // Display "Click to Continue..."
551
-                  #if HAS_LCD_MENU
552
-                    "1800"                            // ...for 30 minutes with LCD
553
-                  #else
554
-                    "60"                              // ...for 1 minute with no LCD
555
-                  #endif
556
-                ));
557
-              #endif
558
-            #endif
559
-          }
560
-        }
545
+        if (card_eof) card.fileHasFinished();         // Handle end of file reached
561 546
       }
562 547
       else
563 548
         process_stream_char(sd_char, sd_input_state, command_buffer[index_w], sd_count);
@@ -600,7 +585,7 @@ void GCodeQueue::advance() {
600 585
       if (is_M29(command)) {
601 586
         // M29 closes the file
602 587
         card.closefile();
603
-        SERIAL_ECHOLNPGM(MSG_FILE_SAVED);
588
+        SERIAL_ECHOLNPGM(STR_FILE_SAVED);
604 589
 
605 590
         #if !defined(__AVR__) || !defined(USBCON)
606 591
           #if ENABLED(SERIAL_STATS_DROPPED_RX)
@@ -633,9 +618,7 @@ void GCodeQueue::advance() {
633 618
   #endif // SDSUPPORT
634 619
 
635 620
   // The queue may be reset by a command handler or by code invoked by idle() within a handler
636
-  if (length) {
637
-    --length;
638
-    if (++index_r >= BUFSIZE) index_r = 0;
639
-  }
621
+  --length;
622
+  if (++index_r >= BUFSIZE) index_r = 0;
640 623
 
641 624
 }

+ 6
- 0
Marlin/src/gcode/queue.h View File

@@ -117,6 +117,12 @@ public:
117 117
    */
118 118
   static void flush_and_request_resend();
119 119
 
120
+  /**
121
+   * Attempt to enqueue a single G-code command
122
+   * and return 'true' if successful.
123
+   */
124
+  FORCE_INLINE static bool enqueue_P(const char* cmd) { return _enqueue(cmd); }
125
+
120 126
 private:
121 127
 
122 128
   static uint8_t index_w;  // Ring buffer write position

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

@@ -31,9 +31,9 @@
31 31
  * M20: List SD card to serial output
32 32
  */
33 33
 void GcodeSuite::M20() {
34
-  SERIAL_ECHOLNPGM(MSG_BEGIN_FILE_LIST);
34
+  SERIAL_ECHOLNPGM(STR_BEGIN_FILE_LIST);
35 35
   card.ls();
36
-  SERIAL_ECHOLNPGM(MSG_END_FILE_LIST);
36
+  SERIAL_ECHOLNPGM(STR_END_FILE_LIST);
37 37
 }
38 38
 
39 39
 #endif // SDSUPPORT

+ 4
- 4
Marlin/src/gcode/sdcard/M24_M25.cpp View File

@@ -86,10 +86,6 @@ void GcodeSuite::M24() {
86 86
  */
87 87
 void GcodeSuite::M25() {
88 88
 
89
-  #if ENABLED(POWER_LOSS_RECOVERY)
90
-    if (recovery.enabled) recovery.save(true, false);
91
-  #endif
92
-
93 89
   // Set initial pause flag to prevent more commands from landing in the queue while we try to pause
94 90
   #if ENABLED(SDSUPPORT)
95 91
     if (IS_SD_PRINTING()) card.pauseSDPrint();
@@ -101,6 +97,10 @@ void GcodeSuite::M25() {
101 97
 
102 98
   #else
103 99
 
100
+    #if ENABLED(POWER_LOSS_RECOVERY)
101
+      if (recovery.enabled) recovery.save(true);
102
+    #endif
103
+
104 104
     print_job_timer.pause();
105 105
     ui.reset_status();
106 106
 

+ 1
- 1
Marlin/src/gcode/temperature/M105.cpp View File

@@ -31,7 +31,7 @@ void GcodeSuite::M105() {
31 31
   const int8_t target_extruder = get_target_extruder_from_command();
32 32
   if (target_extruder < 0) return;
33 33
 
34
-  SERIAL_ECHOPGM(MSG_OK);
34
+  SERIAL_ECHOPGM(STR_OK);
35 35
 
36 36
   #if HAS_TEMP_SENSOR
37 37
 

+ 1
- 1
Marlin/src/gcode/temperature/M303.cpp View File

@@ -52,7 +52,7 @@ void GcodeSuite::M303() {
52 52
   #endif
53 53
   const heater_ind_t e = (heater_ind_t)parser.intval('E');
54 54
   if (!WITHIN(e, SI, EI)) {
55
-    SERIAL_ECHOLNPGM(MSG_PID_BAD_EXTRUDER_NUM);
55
+    SERIAL_ECHOLNPGM(STR_PID_BAD_EXTRUDER_NUM);
56 56
     #if ENABLED(EXTENSIBLE_UI)
57 57
       ExtUI::OnPidTuning(ExtUI::result_t::PID_BAD_EXTRUDER_NUM);
58 58
     #endif

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

@@ -502,6 +502,10 @@
502 502
  * Set a flag for a servo probe (or BLTouch)
503 503
  */
504 504
 #define HAS_Z_SERVO_PROBE (defined(Z_PROBE_SERVO_NR) && Z_PROBE_SERVO_NR >= 0)
505
+#define HAS_SERVO_ANGLES (HAS_Z_SERVO_PROBE || EITHER(SWITCHING_EXTRUDER, SWITCHING_NOZZLE))
506
+#if !HAS_SERVO_ANGLES
507
+  #undef EDITABLE_SERVO_ANGLES
508
+#endif
505 509
 
506 510
 /**
507 511
  * Set flags for enabled probes
@@ -571,8 +575,6 @@
571 575
 
572 576
 #define IS_RE_ARM_BOARD MB(RAMPS_14_RE_ARM_EFB, RAMPS_14_RE_ARM_EEB, RAMPS_14_RE_ARM_EFF, RAMPS_14_RE_ARM_EEF, RAMPS_14_RE_ARM_SF)
573 577
 
574
-#define HAS_SDCARD_CONNECTION EITHER(TARGET_LPC1768, ADAFRUIT_GRAND_CENTRAL_M4)
575
-
576 578
 #define HAS_LINEAR_E_JERK (DISABLED(CLASSIC_JERK) && ENABLED(LIN_ADVANCE))
577 579
 
578 580
 #ifndef SPI_SPEED

+ 2
- 12
Marlin/src/inc/Conditionals_post.h View File

@@ -645,7 +645,7 @@
645 645
     #define MINIMUM_STEPPER_PULSE 2
646 646
   #elif HAS_DRIVER(A4988) || HAS_DRIVER(A5984)
647 647
     #define MINIMUM_STEPPER_PULSE 1
648
-  #elif TRINAMICS
648
+  #elif HAS_TRINAMIC || HAS_TRINAMIC_STANDALONE
649 649
     #define MINIMUM_STEPPER_PULSE 0
650 650
   #elif HAS_DRIVER(LV8729)
651 651
     #define MINIMUM_STEPPER_PULSE 0
@@ -665,7 +665,7 @@
665 665
     #define MAXIMUM_STEPPER_RATE 500000
666 666
   #elif HAS_DRIVER(LV8729)
667 667
     #define MAXIMUM_STEPPER_RATE 1000000
668
-  #elif TRINAMICS
668
+  #elif HAS_TRINAMIC || HAS_TRINAMIC_STANDALONE
669 669
     #define MAXIMUM_STEPPER_RATE 5000000
670 670
   #else
671 671
     #define MAXIMUM_STEPPER_RATE 250000
@@ -1546,16 +1546,6 @@
1546 1546
 #define HAS_SERVO_3 (PIN_EXISTS(SERVO3) && NUM_SERVOS > 3)
1547 1547
 #define HAS_SERVOS  (NUM_SERVOS > 0)
1548 1548
 
1549
-#if HAS_SERVOS && !defined(Z_PROBE_SERVO_NR)
1550
-  #define Z_PROBE_SERVO_NR -1
1551
-#endif
1552
-
1553
-#define HAS_SERVO_ANGLES (EITHER(SWITCHING_EXTRUDER, SWITCHING_NOZZLE) || (HAS_Z_SERVO_PROBE && defined(Z_PROBE_SERVO_NR)))
1554
-
1555
-#if !HAS_SERVO_ANGLES || ENABLED(BLTOUCH)
1556
-  #undef EDITABLE_SERVO_ANGLES
1557
-#endif
1558
-
1559 1549
 // Sensors
1560 1550
 #define HAS_FILAMENT_WIDTH_SENSOR (PIN_EXISTS(FILWIDTH))
1561 1551
 

+ 1
- 1
Marlin/src/inc/Version.h View File

@@ -42,7 +42,7 @@
42 42
  * version was tagged.
43 43
  */
44 44
 #ifndef STRING_DISTRIBUTION_DATE
45
-  #define STRING_DISTRIBUTION_DATE "2020-02-24"
45
+  #define STRING_DISTRIBUTION_DATE "2020-02-27"
46 46
 #endif
47 47
 
48 48
 /**

+ 5
- 3
Marlin/src/lcd/dogm/dogm_Statusscreen.h View File

@@ -785,7 +785,9 @@
785 785
     #endif
786 786
 
787 787
   #endif
788
-#else
788
+#endif
789
+
790
+#ifndef STATUS_BED_WIDTH
789 791
   #define STATUS_BED_WIDTH 0
790 792
 #endif
791 793
 
@@ -1729,8 +1731,8 @@
1729 1731
 
1730 1732
 #define DO_DRAW_LOGO (STATUS_LOGO_WIDTH && ENABLED(CUSTOM_STATUS_SCREEN_IMAGE))
1731 1733
 #define DO_DRAW_HOTENDS (HOTENDS > 0)
1732
-#define DO_DRAW_CUTTER (HAS_CUTTER)
1733
-#define DO_DRAW_BED (HAS_HEATED_BED && STATUS_BED_WIDTH && HOTENDS <= 4)
1734
+#define DO_DRAW_BED (HAS_HEATED_BED && HOTENDS <= 4)
1735
+#define DO_DRAW_CUTTER (HAS_CUTTER && !DO_DRAW_BED)
1734 1736
 #define DO_DRAW_CHAMBER (HAS_TEMP_CHAMBER && STATUS_CHAMBER_WIDTH && HOTENDS <= 4)
1735 1737
 #define DO_DRAW_FAN (HAS_FAN0 && STATUS_FAN_WIDTH && HOTENDS <= 4 && defined(STATUS_FAN_FRAMES))
1736 1738
 

+ 4
- 19
Marlin/src/lcd/dogm/status_screen_DOGM.cpp View File

@@ -188,21 +188,6 @@ FORCE_INLINE void _draw_centered_temp(const int16_t temp, const uint8_t tx, cons
188 188
             u8g.drawBitmapP(hx, STATUS_HEATERS_Y, bw, STATUS_HEATERS_HEIGHT, HOTEND_BITMAP(heater, isHeat));
189 189
       #endif
190 190
 
191
-      // Draw a heating progress bar, if specified
192
-      #if DO_DRAW_BED && ENABLED(STATUS_HEAT_PERCENT)
193
-
194
-        if (STATIC_HOTEND && isHeat) {
195
-          const uint8_t bx = STATUS_HOTEND_X(heater) + STATUS_HOTEND_WIDTH(heater) + 1;
196
-          u8g.drawFrame(bx, STATUS_HEATERS_Y, 3, STATUS_HEATERS_HEIGHT);
197
-          if (tall) {
198
-            const uint8_t ph = STATUS_HEATERS_HEIGHT - 1 - tall;
199
-            if (PAGE_OVER(STATUS_HEATERS_Y + ph))
200
-              u8g.drawVLine(bx + 1, STATUS_HEATERS_Y + ph, tall);
201
-          }
202
-        }
203
-
204
-      #endif
205
-
206 191
     } // PAGE_CONTAINS
207 192
 
208 193
     if (PAGE_UNDER(7)) {
@@ -240,11 +225,11 @@ FORCE_INLINE void _draw_centered_temp(const int16_t temp, const uint8_t tx, cons
240 225
     const float temp = thermalManager.degBed(),
241 226
               target = thermalManager.degTargetBed();
242 227
 
243
-    #if ENABLED(STATUS_HEAT_PERCENT) || (DO_DRAW_BED && DISABLED(STATUS_BED_ANIM))
228
+    #if ENABLED(STATUS_HEAT_PERCENT) || DISABLED(STATUS_BED_ANIM)
244 229
       const bool isHeat = BED_ALT();
245 230
     #endif
246 231
 
247
-    #if DO_DRAW_BED && DISABLED(STATUS_BED_ANIM)
232
+    #if DISABLED(STATUS_BED_ANIM)
248 233
       #define STATIC_BED    true
249 234
       #define BED_DOT       isHeat
250 235
     #else
@@ -513,7 +498,7 @@ void MarlinUI::draw_status_screen() {
513 498
       u8g.drawBitmapP(STATUS_HEATERS_X, STATUS_HEATERS_Y, STATUS_HEATERS_BYTEWIDTH, STATUS_HEATERS_HEIGHT, status_heaters_bmp);
514 499
   #endif
515 500
 
516
-  #if DO_DRAW_CUTTER
501
+  #if DO_DRAW_CUTTER && DISABLED(STATUS_COMBINE_HEATERS)
517 502
     #if ANIM_CUTTER
518 503
       #define CUTTER_BITMAP(S) ((S) ? status_cutter_on_bmp : status_cutter_bmp)
519 504
     #else
@@ -537,7 +522,7 @@ void MarlinUI::draw_status_screen() {
537 522
       u8g.drawBitmapP(STATUS_BED_X, bedy, STATUS_BED_BYTEWIDTH, bedh, BED_BITMAP(BED_ALT()));
538 523
   #endif
539 524
 
540
-  #if DO_DRAW_CHAMBER
525
+  #if DO_DRAW_CHAMBER && DISABLED(STATUS_COMBINE_HEATERS)
541 526
     #if ANIM_CHAMBER
542 527
       #define CHAMBER_BITMAP(S) ((S) ? status_chamber_on_bmp : status_chamber_bmp)
543 528
     #else

+ 4
- 4
Marlin/src/lcd/extensible_ui/lib/ftdi_eve_touch_ui/marlin_events.cpp View File

@@ -137,16 +137,16 @@ namespace ExtUI {
137 137
       SERIAL_ECHOLNPAIR("OnPidTuning:", rst);
138 138
       switch (rst) {
139 139
         case PID_BAD_EXTRUDER_NUM:
140
-          StatusScreen::setStatusMessage(MSG_PID_BAD_EXTRUDER_NUM);
140
+          StatusScreen::setStatusMessage(STR_PID_BAD_EXTRUDER_NUM);
141 141
           break;
142 142
         case PID_TEMP_TOO_HIGH:
143
-          StatusScreen::setStatusMessage(MSG_PID_TEMP_TOO_HIGH);
143
+          StatusScreen::setStatusMessage(STR_PID_TEMP_TOO_HIGH);
144 144
           break;
145 145
         case PID_TUNING_TIMEOUT:
146
-          StatusScreen::setStatusMessage(MSG_PID_TIMEOUT);
146
+          StatusScreen::setStatusMessage(STR_PID_TIMEOUT);
147 147
           break;
148 148
         case PID_DONE:
149
-          StatusScreen::setStatusMessage(MSG_PID_AUTOTUNE_FINISHED);
149
+          StatusScreen::setStatusMessage(STR_PID_AUTOTUNE_FINISHED);
150 150
           break;
151 151
       }
152 152
       GOTO_SCREEN(StatusScreen);

+ 2
- 2
Marlin/src/lcd/extensible_ui/lib/ftdi_eve_touch_ui/screens/advanced_settings_menu.cpp View File

@@ -84,7 +84,7 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
84 84
       .tag(12).button( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXT_F(MSG_LCD_ENDSTOPS))
85 85
       .tag(15).button( BTN_POS(2,6), BTN_SIZE(1,1), GET_TEXT_F(MSG_DISPLAY_MENU))
86 86
       .tag(9) .button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(MSG_INTERFACE_SETTINGS))
87
-      .tag(10).button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXT_F(MSG_RESTORE_FAILSAFE))
87
+      .tag(10).button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXT_F(MSG_RESTORE_DEFAULTS))
88 88
       .tag(5) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXT_F(MSG_VELOCITY))
89 89
       .tag(6) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXT_F(MSG_ACCELERATION))
90 90
       #if DISABLED(CLASSIC_JERK)
@@ -154,7 +154,7 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
154 154
       .tag(11).button( BTN_POS(1,3),  BTN_SIZE(1,1), GET_TEXT_F(MSG_FILAMENT))
155 155
       .tag(15).button( BTN_POS(3,5),  BTN_SIZE(1,1), GET_TEXT_F(MSG_DISPLAY_MENU))
156 156
       .tag(9) .button( BTN_POS(1,5),  BTN_SIZE(2,1), GET_TEXT_F(MSG_INTERFACE_SETTINGS))
157
-      .tag(10).button( BTN_POS(1,6),  BTN_SIZE(2,1), GET_TEXT_F(MSG_RESTORE_FAILSAFE))
157
+      .tag(10).button( BTN_POS(1,6),  BTN_SIZE(2,1), GET_TEXT_F(MSG_RESTORE_DEFAULTS))
158 158
       .colors(action_btn)
159 159
       .tag(1) .button( BTN_POS(3,6),  BTN_SIZE(1,1), GET_TEXT_F(MSG_BACK));
160 160
     #endif

+ 1
- 1
Marlin/src/lcd/extensible_ui/lib/ftdi_eve_touch_ui/screens/bio_advanced_settings.cpp View File

@@ -86,7 +86,7 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) {
86 86
       )
87 87
       .tag(12) .button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(MSG_LINEAR_ADVANCE))
88 88
       .tag(13) .button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXT_F(MSG_INTERFACE_SETTINGS))
89
-      .tag(14) .button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(MSG_RESTORE_FAILSAFE))
89
+      .tag(14) .button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(MSG_RESTORE_DEFAULTS))
90 90
       .colors(action_btn)
91 91
       .tag(1). button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXT_F(MSG_BACK));
92 92
     #undef GRID_COLS

+ 14
- 14
Marlin/src/lcd/extensible_ui/lib/ftdi_eve_touch_ui/screens/endstop_state_screen.cpp View File

@@ -62,34 +62,34 @@ void EndstopStatesScreen::onRedraw(draw_mode_t) {
62 62
   .text(BTN_POS(1,1), BTN_SIZE(6,1), GET_TEXT_F(MSG_LCD_ENDSTOPS))
63 63
   .font(font_tiny);
64 64
   #if PIN_EXISTS(X_MAX)
65
-    PIN_ENABLED (1, 2, PSTR(MSG_X_MAX), X_MAX, X_MAX_ENDSTOP_INVERTING)
65
+    PIN_ENABLED (1, 2, PSTR(STR_X_MAX), X_MAX, X_MAX_ENDSTOP_INVERTING)
66 66
   #else
67
-    PIN_DISABLED(1, 2, PSTR(MSG_X_MAX), X_MAX)
67
+    PIN_DISABLED(1, 2, PSTR(STR_X_MAX), X_MAX)
68 68
   #endif
69 69
   #if PIN_EXISTS(Y_MAX)
70
-    PIN_ENABLED (3, 2, PSTR(MSG_Y_MAX), Y_MAX, Y_MAX_ENDSTOP_INVERTING)
70
+    PIN_ENABLED (3, 2, PSTR(STR_Y_MAX), Y_MAX, Y_MAX_ENDSTOP_INVERTING)
71 71
   #else
72
-    PIN_DISABLED(3, 2, PSTR(MSG_Y_MAX), Y_MAX)
72
+    PIN_DISABLED(3, 2, PSTR(STR_Y_MAX), Y_MAX)
73 73
   #endif
74 74
   #if PIN_EXISTS(Z_MAX)
75
-    PIN_ENABLED (5, 2, PSTR(MSG_Z_MAX), Z_MAX, Z_MAX_ENDSTOP_INVERTING)
75
+    PIN_ENABLED (5, 2, PSTR(STR_Z_MAX), Z_MAX, Z_MAX_ENDSTOP_INVERTING)
76 76
   #else
77
-    PIN_DISABLED(5, 2, PSTR(MSG_Z_MAX), Z_MAX)
77
+    PIN_DISABLED(5, 2, PSTR(STR_Z_MAX), Z_MAX)
78 78
   #endif
79 79
   #if PIN_EXISTS(X_MIN)
80
-    PIN_ENABLED (1, 3, PSTR(MSG_X_MIN), X_MIN, X_MIN_ENDSTOP_INVERTING)
80
+    PIN_ENABLED (1, 3, PSTR(STR_X_MIN), X_MIN, X_MIN_ENDSTOP_INVERTING)
81 81
   #else
82
-    PIN_DISABLED(1, 3, PSTR(MSG_X_MIN), X_MIN)
82
+    PIN_DISABLED(1, 3, PSTR(STR_X_MIN), X_MIN)
83 83
   #endif
84 84
   #if PIN_EXISTS(Y_MIN)
85
-    PIN_ENABLED (3, 3, PSTR(MSG_Y_MIN), Y_MIN, Y_MIN_ENDSTOP_INVERTING)
85
+    PIN_ENABLED (3, 3, PSTR(STR_Y_MIN), Y_MIN, Y_MIN_ENDSTOP_INVERTING)
86 86
   #else
87
-    PIN_DISABLED(3, 3, PSTR(MSG_Y_MIN), Y_MIN)
87
+    PIN_DISABLED(3, 3, PSTR(STR_Y_MIN), Y_MIN)
88 88
   #endif
89 89
   #if PIN_EXISTS(Z_MIN)
90
-    PIN_ENABLED (5, 3, PSTR(MSG_Z_MIN), Z_MIN, Z_MIN_ENDSTOP_INVERTING)
90
+    PIN_ENABLED (5, 3, PSTR(STR_Z_MIN), Z_MIN, Z_MIN_ENDSTOP_INVERTING)
91 91
   #else
92
-    PIN_DISABLED(5, 3, PSTR(MSG_Z_MIN), Z_MIN)
92
+    PIN_DISABLED(5, 3, PSTR(STR_Z_MIN), Z_MIN)
93 93
   #endif
94 94
   #if ENABLED(FILAMENT_RUNOUT_SENSOR) && PIN_EXISTS(FIL_RUNOUT)
95 95
     PIN_ENABLED (1, 4, GET_TEXT_F(MSG_RUNOUT_1), FIL_RUNOUT, FIL_RUNOUT_INVERTING)
@@ -102,9 +102,9 @@ void EndstopStatesScreen::onRedraw(draw_mode_t) {
102 102
     PIN_DISABLED(3, 4, GET_TEXT_F(MSG_RUNOUT_2), FIL_RUNOUT2)
103 103
   #endif
104 104
   #if PIN_EXISTS(Z_MIN_PROBE)
105
-    PIN_ENABLED (5, 4, PSTR(MSG_Z_PROBE), Z_MIN_PROBE, Z_MIN_PROBE_ENDSTOP_INVERTING)
105
+    PIN_ENABLED (5, 4, PSTR(STR_Z_PROBE), Z_MIN_PROBE, Z_MIN_PROBE_ENDSTOP_INVERTING)
106 106
   #else
107
-    PIN_DISABLED(5, 4, PSTR(MSG_Z_PROBE), Z_MIN_PROBE)
107
+    PIN_DISABLED(5, 4, PSTR(STR_Z_PROBE), Z_MIN_PROBE)
108 108
   #endif
109 109
 
110 110
   #if HAS_SOFTWARE_ENDSTOPS

+ 4
- 4
Marlin/src/lcd/extui_dgus_lcd.cpp View File

@@ -136,16 +136,16 @@ namespace ExtUI {
136 136
       SERIAL_ECHOLNPAIR("OnPidTuning:",rst);
137 137
       switch(rst) {
138 138
         case PID_BAD_EXTRUDER_NUM:
139
-          ScreenHandler.setstatusmessagePGM(PSTR(MSG_PID_BAD_EXTRUDER_NUM));
139
+          ScreenHandler.setstatusmessagePGM(PSTR(STR_PID_BAD_EXTRUDER_NUM));
140 140
           break;
141 141
         case PID_TEMP_TOO_HIGH:
142
-          ScreenHandler.setstatusmessagePGM(PSTR(MSG_PID_TEMP_TOO_HIGH));
142
+          ScreenHandler.setstatusmessagePGM(PSTR(STR_PID_TEMP_TOO_HIGH));
143 143
           break;
144 144
         case PID_TUNING_TIMEOUT:
145
-          ScreenHandler.setstatusmessagePGM(PSTR(MSG_PID_TIMEOUT));
145
+          ScreenHandler.setstatusmessagePGM(PSTR(STR_PID_TIMEOUT));
146 146
           break;
147 147
         case PID_DONE:
148
-          ScreenHandler.setstatusmessagePGM(PSTR(MSG_PID_AUTOTUNE_FINISHED));
148
+          ScreenHandler.setstatusmessagePGM(PSTR(STR_PID_AUTOTUNE_FINISHED));
149 149
           break;
150 150
       }
151 151
       ScreenHandler.GotoScreen(DGUSLCD_SCREEN_MAIN);

+ 1
- 1
Marlin/src/lcd/language/language_an.h View File

@@ -125,7 +125,7 @@ namespace Language_an {
125 125
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste");
126 126
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Alzar memoria");
127 127
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Cargar memoria");
128
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Restaurar memoria");
128
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Restaurar memoria");
129 129
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH _UxGT("Tornar a cargar");
130 130
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Informacion");
131 131
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Preparar");

+ 1
- 1
Marlin/src/lcd/language/language_bg.h View File

@@ -110,7 +110,7 @@ namespace Language_bg {
110 110
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD контраст");
111 111
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Запази в EPROM");
112 112
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Зареди от EPROM");
113
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Фабрични настройки");
113
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Фабрични настройки");
114 114
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH _UxGT("Обнови");
115 115
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Преглед");
116 116
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Действия");

+ 1
- 1
Marlin/src/lcd/language/language_ca.h View File

@@ -120,7 +120,7 @@ namespace Language_ca {
120 120
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contrast de LCD");
121 121
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Desa memoria");
122 122
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Carrega memoria");
123
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Restaura valors");
123
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Restaura valors");
124 124
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Actualitza");
125 125
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Pantalla Info.");
126 126
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Prepara");

+ 1
- 1
Marlin/src/lcd/language/language_cz.h View File

@@ -310,7 +310,7 @@ namespace Language_cz {
310 310
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD");
311 311
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Uložit nastavení");
312 312
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Načíst nastavení");
313
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Obnovit výchozí");
313
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Obnovit výchozí");
314 314
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Inic. EEPROM");
315 315
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Aktualizace z SD");
316 316
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Reset tiskárny");

+ 1
- 1
Marlin/src/lcd/language/language_da.h View File

@@ -105,7 +105,7 @@ namespace Language_da {
105 105
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD kontrast");
106 106
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Gem i EEPROM");
107 107
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Hent fra EEPROM");
108
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Gendan failsafe");
108
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Gendan Defaults");
109 109
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Genopfrisk");
110 110
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Info skærm");
111 111
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Forbered");

+ 1
- 1
Marlin/src/lcd/language/language_de.h View File

@@ -290,7 +290,7 @@ namespace Language_de {
290 290
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD-Kontrast");
291 291
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Konfig. speichern");
292 292
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Konfig. laden");
293
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Standardwerte laden");
293
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Standardwerte laden");
294 294
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Werkseinstellungen");
295 295
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("FW Update vom Medium");
296 296
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Drucker neustarten");

+ 1
- 1
Marlin/src/lcd/language/language_el.h View File

@@ -136,7 +136,7 @@ namespace Language_el {
136 136
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Κοντράστ LCD");
137 137
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Αποθήκευση");
138 138
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Φόρτωση");
139
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Επαναφορά ασφαλούς αντιγράφου"); //SHORTEN
139
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Επαναφορά ασφαλούς αντιγράφου"); //SHORTEN
140 140
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Ανανέωση");
141 141
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Οθόνη πληροφόρησης");
142 142
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Προετοιμασία");

+ 1
- 1
Marlin/src/lcd/language/language_el_gr.h View File

@@ -138,7 +138,7 @@ namespace Language_el_gr {
138 138
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Κοντράστ LCD");
139 139
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Αποθήκευση");
140 140
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Φόρτωση");
141
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Επαναφορά ασφαλούς αντιγράφου");
141
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Επαναφορά ασφαλούς αντιγράφου");
142 142
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Ανανέωση");
143 143
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Οθόνη πληροφόρησης");
144 144
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Προετοιμασία");

+ 4
- 1
Marlin/src/lcd/language/language_en.h View File

@@ -312,8 +312,11 @@ namespace Language_en {
312 312
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD Contrast");
313 313
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Store Settings");
314 314
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Load Settings");
315
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Restore failsafe");
315
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Restore Defaults");
316 316
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Initialize EEPROM");
317
+  PROGMEM Language_Str MSG_ERR_EEPROM_CRC                  = _UxGT("Err: EEPROM CRC");
318
+  PROGMEM Language_Str MSG_ERR_EEPROM_INDEX                = _UxGT("Err: EEPROM Index");
319
+  PROGMEM Language_Str MSG_ERR_EEPROM_VERSION              = _UxGT("Err: EEPROM Version");
317 320
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Media Update");
318 321
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Reset Printer");
319 322
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Refresh");

+ 1
- 1
Marlin/src/lcd/language/language_es.h View File

@@ -284,7 +284,7 @@ namespace Language_es {
284 284
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste LCD");
285 285
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Guardar EEPROM");
286 286
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Cargar EEPROM");
287
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Rest. fábrica");
287
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Rest. fábrica");
288 288
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Inicializar EEPROM");
289 289
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Actualizar SD/USB");
290 290
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Resetear Impresora");

+ 1
- 1
Marlin/src/lcd/language/language_eu.h View File

@@ -187,7 +187,7 @@ namespace Language_eu {
187 187
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD kontrastea");
188 188
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Gorde memoria");
189 189
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Kargatu memoria");
190
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Larri. berriz.");
190
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Larri. berriz.");
191 191
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("EEPROM-a hasieratu");
192 192
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Berriz kargatu");
193 193
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Pantaila info");

+ 1
- 1
Marlin/src/lcd/language/language_fi.h View File

@@ -97,7 +97,7 @@ namespace Language_fi {
97 97
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD kontrasti");
98 98
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Tallenna muistiin");
99 99
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Lataa muistista");
100
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Palauta oletus");
100
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Palauta oletus");
101 101
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Päivitä");
102 102
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Seuraa");
103 103
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Valmistele");

+ 1
- 1
Marlin/src/lcd/language/language_fr.h View File

@@ -282,7 +282,7 @@ namespace Language_fr {
282 282
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste LCD");
283 283
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Enregistrer config.");
284 284
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Charger config.");
285
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Restaurer défauts");
285
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Restaurer défauts");
286 286
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Initialiser EEPROM");
287 287
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("MaJ Firmware SD");
288 288
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("RaZ imprimante");

+ 1
- 1
Marlin/src/lcd/language/language_gl.h View File

@@ -117,7 +117,7 @@ namespace Language_gl {
117 117
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Constraste LCD");
118 118
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Gardar en memo.");
119 119
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Cargar de memo.");
120
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Cargar de firm.");
120
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Cargar de firm.");
121 121
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Volver a cargar");
122 122
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Monitorizacion");
123 123
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Preparar");

+ 1
- 1
Marlin/src/lcd/language/language_hr.h View File

@@ -98,7 +98,7 @@ namespace Language_hr {
98 98
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD-a");
99 99
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Pohrani u memoriju");
100 100
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Učitaj memoriju");
101
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Učitaj failsafe");
101
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Učitaj Defaults");
102 102
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Osvježi");
103 103
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Info screen");
104 104
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Pripremi");

+ 2
- 2
Marlin/src/lcd/language/language_it.h View File

@@ -310,7 +310,7 @@ namespace Language_it {
310 310
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contrasto LCD");
311 311
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Salva impostazioni");
312 312
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Carica impostazioni");
313
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Ripristina imp.");
313
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Ripristina imp.");
314 314
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Inizializza EEPROM");
315 315
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Aggiorna media");
316 316
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Resetta stampante");
@@ -368,7 +368,7 @@ namespace Language_it {
368 368
   PROGMEM Language_Str MSG_FILAMENTUNLOAD                  = _UxGT("Rimuovi filamento");
369 369
   PROGMEM Language_Str MSG_FILAMENTUNLOAD_E                = _UxGT("Rimuovi filamento *");
370 370
   PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Rimuovi tutto");
371
-  PROGMEM Language_Str MSG_ATTACH_MEDIA                    = _UxGT("Inizializ. media");
371
+  PROGMEM Language_Str MSG_ATTACH_MEDIA                    = _UxGT("Collega media");
372 372
   PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Cambia media");
373 373
   PROGMEM Language_Str MSG_RELEASE_MEDIA                   = _UxGT("Rilascia media");
374 374
   PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Z probe fuori piatto");

+ 1
- 1
Marlin/src/lcd/language/language_jp_kana.h View File

@@ -141,7 +141,7 @@ namespace Language_jp_kana {
141 141
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCDコントラスト");               // "LCD contrast"
142 142
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("EEPROMヘホゾン");               // "Store memory"
143 143
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("EEPROMカラヨミコミ");               // "Load memory"
144
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("セッテイリセット");               // "Restore failsafe"
144
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("セッテイリセット");               // "Restore Defaults"
145 145
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("リフレッシュ");                  // "Refresh"
146 146
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("ジョウホウガメン");               // "Info screen"
147 147
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("ジュンビセッテイ");               // "Prepare"

+ 1
- 1
Marlin/src/lcd/language/language_ko_KR.h View File

@@ -84,7 +84,7 @@ namespace Language_ko_KR {
84 84
   PROGMEM Language_Str MSG_MOTION                          = _UxGT("동작");
85 85
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("설정 저장하기");
86 86
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("설정 읽어오기");
87
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("설정 되돌리기");
87
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("설정 되돌리기");
88 88
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("EEPROM 초기화");
89 89
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("새로고침");
90 90
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("처음으로");

+ 1
- 1
Marlin/src/lcd/language/language_nl.h View File

@@ -123,7 +123,7 @@ namespace Language_nl {
123 123
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD contrast");
124 124
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Geheugen opslaan");
125 125
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Geheugen laden");
126
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Noodstop reset");
126
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Noodstop reset");
127 127
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Ververs");
128 128
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Info scherm");
129 129
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Voorbereiden");

+ 1
- 1
Marlin/src/lcd/language/language_pl.h View File

@@ -298,7 +298,7 @@ namespace Language_pl {
298 298
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD");
299 299
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Zapisz w pamięci");
300 300
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Wczytaj z pamięci");
301
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Ustaw. fabryczne");
301
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Ustaw. fabryczne");
302 302
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Initializuj EEPROM");
303 303
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Uaktualnij kartę");
304 304
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Resetuj drukarkę");

+ 1
- 1
Marlin/src/lcd/language/language_pt.h View File

@@ -113,7 +113,7 @@ namespace Language_pt {
113 113
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste");
114 114
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Guardar na memoria");
115 115
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Carregar da memoria");
116
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Rest. de emergen.");
116
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Rest. de emergen.");
117 117
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH _UxGT(" Recarregar");
118 118
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Monitorizar");
119 119
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Preparar");

+ 1
- 1
Marlin/src/lcd/language/language_pt_br.h View File

@@ -252,7 +252,7 @@ namespace Language_pt_br {
252 252
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste");
253 253
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Salvar Configuração");
254 254
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Ler Configuração");
255
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Restauro seguro");
255
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Restauro seguro");
256 256
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Iniciar EEPROM");
257 257
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Atualiz. SD");
258 258
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Resetar Impressora");

+ 1
- 1
Marlin/src/lcd/language/language_ru.h View File

@@ -276,7 +276,7 @@ namespace Language_ru {
276 276
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Контраст LCD");
277 277
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Сохранить настройки");
278 278
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Загрузить настройки");
279
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Вернуть настройки");
279
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Вернуть настройки");
280 280
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Изначальный EEPROM");
281 281
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Обновление прошивки");
282 282
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Сброс принтера");

+ 10
- 7
Marlin/src/lcd/language/language_sk.h View File

@@ -67,9 +67,9 @@ namespace Language_sk {
67 67
   PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Domov os Z");
68 68
   PROGMEM Language_Str MSG_AUTO_Z_ALIGN                    = _UxGT("Auto-zarovn. Z");
69 69
   PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Parkovanie XYZ");
70
-  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Kliknutím spusťte");
70
+  PROGMEM Language_Str MSG_LEVEL_BED_WAITING               = _UxGT("Kliknutím začnete");
71 71
   PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Ďalší bod");
72
-  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Meranie hotové!");
72
+  PROGMEM Language_Str MSG_LEVEL_BED_DONE                  = _UxGT("Vyrovnanie hotové!");
73 73
   PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("Výška rovnania");
74 74
   PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Nastaviť ofsety");
75 75
   PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Ofsety nastavené");
@@ -173,10 +173,10 @@ namespace Language_sk {
173 173
   PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("Postranné body");
174 174
   PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("Typ siete bodov");
175 175
   PROGMEM Language_Str MSG_UBL_OUTPUT_MAP                  = _UxGT("Exportovať sieť");
176
-  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST             = _UxGT("Exportovať do PC");
177
-  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV              = _UxGT("Exportovať do CSV");
178
-  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP           = _UxGT("Záloha do PC");
179
-  PROGMEM Language_Str MSG_UBL_INFO_UBL                    = _UxGT("Info. o UBL do PC");
176
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST             = _UxGT("Export do hosta");
177
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV              = _UxGT("Export do CSV");
178
+  PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP           = _UxGT("Externá záloha");
179
+  PROGMEM Language_Str MSG_UBL_INFO_UBL                    = _UxGT("Info. o výst. UBL");
180 180
   PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("Hustota mriežky");
181 181
   PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("Ručné vyplnenie");
182 182
   PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("Chytré vyplnenie");
@@ -302,8 +302,11 @@ namespace Language_sk {
302 302
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD");
303 303
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Uložiť nastavenie");
304 304
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Načítať nastavenie");
305
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Obnoviť nastavenie");
305
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Obnoviť nastavenie");
306 306
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Inicializ. EEPROM");
307
+  PROGMEM Language_Str MSG_ERR_EEPROM_CRC                  = _UxGT("Chyba: EEPROM CRC");
308
+  PROGMEM Language_Str MSG_ERR_EEPROM_INDEX                = _UxGT("Chyba: EEPROM Index");
309
+  PROGMEM Language_Str MSG_ERR_EEPROM_VERSION              = _UxGT("Chyba: Verzia EEPROM");
307 310
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Aktualizovať z SD");
308 311
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Reštart. tlačiar.");
309 312
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Obnoviť");

+ 3
- 3
Marlin/src/lcd/language/language_test.h View File

@@ -149,7 +149,7 @@ namespace Language_test {
149 149
     PROGMEM Language_Str MSG_MOTION                          = STRG_OKTAL_4;
150 150
     PROGMEM Language_Str MSG_FILAMENT                        = STRG_OKTAL_5;
151 151
     PROGMEM Language_Str MSG_CONTRAST                        = STRG_OKTAL_6;
152
-    PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = STRG_OKTAL_7;
152
+    PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = STRG_OKTAL_7;
153 153
 
154 154
     PROGMEM Language_Str MSG_NOZZLE                          = STRG_OKTAL_8;
155 155
     PROGMEM Language_Str MSG_NOZZLE_N                        = STRG_OKTAL_8 " ~";
@@ -186,7 +186,7 @@ namespace Language_test {
186 186
     PROGMEM Language_Str MSG_MOTION                          = STRG_OKTAL_4;
187 187
     PROGMEM Language_Str MSG_FILAMENT                        = STRG_OKTAL_5;
188 188
     PROGMEM Language_Str MSG_CONTRAST                        = STRG_OKTAL_6;
189
-    PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = STRG_OKTAL_7;
189
+    PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = STRG_OKTAL_7;
190 190
 
191 191
     PROGMEM Language_Str MSG_NOZZLE                          = STRG_OKTAL_8;
192 192
     PROGMEM Language_Str MSG_NOZZLE_N                        = STRG_OKTAL_8 " ~";
@@ -222,7 +222,7 @@ namespace Language_test {
222 222
     PROGMEM Language_Str MSG_MOTION                          = STRG_OKTAL_4;
223 223
     PROGMEM Language_Str MSG_FILAMENT                        = STRG_OKTAL_5;
224 224
     PROGMEM Language_Str MSG_CONTRAST                        = STRG_OKTAL_6;
225
-    PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = STRG_OKTAL_7;
225
+    PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = STRG_OKTAL_7;
226 226
 
227 227
     PROGMEM Language_Str MSG_NOZZLE                          = STRG_OKTAL_8;
228 228
     PROGMEM Language_Str MSG_NOZZLE_N                        = STRG_OKTAL_8 " ~";

+ 1
- 1
Marlin/src/lcd/language/language_tr.h View File

@@ -266,7 +266,7 @@ namespace Language_tr {
266 266
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD Kontrast");
267 267
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Hafızaya Al");
268 268
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Hafızadan Yükle");
269
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Fabrika Ayarları");
269
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Fabrika Ayarları");
270 270
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("EEPROM'u başlat");
271 271
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("SD Güncellemesi");
272 272
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Yazıcıyı Resetle");

+ 1
- 1
Marlin/src/lcd/language/language_uk.h View File

@@ -139,7 +139,7 @@ namespace Language_uk {
139 139
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("контраст LCD");
140 140
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Зберегти в ПЗП");
141 141
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Зчитати з ПЗП");
142
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Відновити базові");
142
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Відновити базові");
143 143
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Поновити");
144 144
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Інформація");
145 145
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Підготувати");

+ 2
- 2
Marlin/src/lcd/language/language_vi.h View File

@@ -266,7 +266,7 @@ namespace Language_vi {
266 266
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Độ tương phản LCD");                    // LCD contrast
267 267
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Lưu các thiết lập");                    // Store settings
268 268
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Tải các cài đặt");                      // Load settings
269
-  PROGMEM Language_Str MSG_RESTORE_FAILSAFE                = _UxGT("Khôi phục phòng hư");                   // Restore failsafe
269
+  PROGMEM Language_Str MSG_RESTORE_DEFAULTS                = _UxGT("Khôi phục phòng hư");                   // Restore Defaults
270 270
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Khởi Tạo EEPROM");                      // Initialize EEPROM
271 271
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Cập Nhật phương tiện");                 // Update media
272 272
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Bặt Lại Máy In");
@@ -309,7 +309,7 @@ namespace Language_vi {
309 309
   PROGMEM Language_Str MSG_FILAMENTUNLOAD                  = _UxGT("Dỡ dây nhựa");                          // unload filament
310 310
   PROGMEM Language_Str MSG_FILAMENTUNLOAD_E                = _UxGT("Dỡ dây nhựa *");                        // unload filament
311 311
   PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Dỡ tất cả");                            // Unload All
312
-  PROGMEM Language_Str MSG_ATTACH_MEDIA                    = _UxGT("Khởi tạo phương tiện");                 // Init. media
312
+  PROGMEM Language_Str MSG_ATTACH_MEDIA                    = _UxGT("Khởi tạo phương tiện");                 // Attach media
313 313
   PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Thay phương tiện");                     // Change midea
314 314
   PROGMEM Language_Str MSG_RELEASE_MEDIA                   = _UxGT("Phát hành phương tiện");
315 315
   PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Đầu Dò Z qua bàn");                     // Z Probe past bed

+ 0
- 0
Marlin/src/lcd/language/language_zh_CN.h View File


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save