Преглед на файлове

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

Scott Lahteine преди 4 години
родител
ревизия
b29aae6c0c
променени са 100 файла, в които са добавени 613 реда и са изтрити 500 реда
  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 Целия файл

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

+ 14
- 13
Marlin/Configuration_adv.h Целия файл

1044
   #if ENABLED(POWER_LOSS_RECOVERY)
1044
   #if ENABLED(POWER_LOSS_RECOVERY)
1045
     //#define BACKUP_POWER_SUPPLY       // Backup power / UPS to move the steppers on power loss
1045
     //#define BACKUP_POWER_SUPPLY       // Backup power / UPS to move the steppers on power loss
1046
     //#define POWER_LOSS_ZRAISE       2 // (mm) Z axis raise on resume (on power loss with UPS)
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
     //#define POWER_LOSS_STATE     HIGH // State of pin indicating power loss
1048
     //#define POWER_LOSS_STATE     HIGH // State of pin indicating power loss
1049
     //#define POWER_LOSS_PULL           // Set pullup / pulldown as appropriate
1049
     //#define POWER_LOSS_PULL           // Set pullup / pulldown as appropriate
1050
     //#define POWER_LOSS_PURGE_LEN   20 // (mm) Length of filament to purge on resume
1050
     //#define POWER_LOSS_PURGE_LEN   20 // (mm) Length of filament to purge on resume
1172
   // Add an optimized binary file transfer mode, initiated with 'M28 B1'
1172
   // Add an optimized binary file transfer mode, initiated with 'M28 B1'
1173
   //#define BINARY_FILE_TRANSFER
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
 #endif // SDSUPPORT
1186
 #endif // SDSUPPORT
1189
 
1187
 
1260
   #define STATUS_HOTEND_ANIM          // Use a second bitmap to indicate hotend heating
1258
   #define STATUS_HOTEND_ANIM          // Use a second bitmap to indicate hotend heating
1261
   #define STATUS_BED_ANIM             // Use a second bitmap to indicate bed heating
1259
   #define STATUS_BED_ANIM             // Use a second bitmap to indicate bed heating
1262
   #define STATUS_CHAMBER_ANIM         // Use a second bitmap to indicate chamber heating
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
   //#define STATUS_ALT_BED_BITMAP     // Use the alternative bed bitmap
1262
   //#define STATUS_ALT_BED_BITMAP     // Use the alternative bed bitmap
1264
   //#define STATUS_ALT_FAN_BITMAP     // Use the alternative fan bitmap
1263
   //#define STATUS_ALT_FAN_BITMAP     // Use the alternative fan bitmap
1265
   //#define STATUS_FAN_FRAMES 3       // :[0,1,2,3,4] Number of fan animation frames
1264
   //#define STATUS_FAN_FRAMES 3       // :[0,1,2,3,4] Number of fan animation frames
2791
   //#define GCODE_QUOTED_STRINGS  // Support for quoted string parameters
2790
   //#define GCODE_QUOTED_STRINGS  // Support for quoted string parameters
2792
 #endif
2791
 #endif
2793
 
2792
 
2793
+//#define GCODE_CASE_INSENSITIVE  // Accept G-code sent to the firmware in lowercase
2794
+
2794
 /**
2795
 /**
2795
  * CNC G-code options
2796
  * CNC G-code options
2796
  * Support CNC-style G-code dialects used by laser cutters, drawing machine cams, etc.
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 Целия файл

39
     if (v != eeprom_read_byte(p)) {
39
     if (v != eeprom_read_byte(p)) {
40
       eeprom_write_byte(p, v);
40
       eeprom_write_byte(p, v);
41
       if (eeprom_read_byte(p) != v) {
41
       if (eeprom_read_byte(p) != v) {
42
-        SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
42
+        SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
43
         return true;
43
         return true;
44
       }
44
       }
45
     }
45
     }

+ 1
- 1
Marlin/src/HAL/HAL_AVR/watchdog.cpp Целия файл

62
 #if ENABLED(WATCHDOG_RESET_MANUAL)
62
 #if ENABLED(WATCHDOG_RESET_MANUAL)
63
   ISR(WDT_vect) {
63
   ISR(WDT_vect) {
64
     sei();  // With the interrupt driven serial we need to allow interrupts.
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
     minkill();  // interrupt-safe final kill and infinite loop
66
     minkill();  // interrupt-safe final kill and infinite loop
67
   }
67
   }
68
 #endif
68
 #endif

+ 1
- 1
Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp Целия файл

54
       eeprom_write_byte(p, v);
54
       eeprom_write_byte(p, v);
55
       delay(2);
55
       delay(2);
56
       if (eeprom_read_byte(p) != v) {
56
       if (eeprom_read_byte(p) != v) {
57
-        SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
57
+        SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
58
         return true;
58
         return true;
59
       }
59
       }
60
     }
60
     }

+ 3
- 3
Marlin/src/HAL/HAL_LPC1768/MarlinSerial.cpp Целия файл

32
   }
32
   }
33
 #endif
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
   MarlinSerial MSerial1((LPC_UART_TypeDef *) LPC_UART1);
36
   MarlinSerial MSerial1((LPC_UART_TypeDef *) LPC_UART1);
37
   extern "C" void UART1_IRQHandler() {
37
   extern "C" void UART1_IRQHandler() {
38
     MSerial1.IRQHandler();
38
     MSerial1.IRQHandler();
39
   }
39
   }
40
 #endif
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
   MarlinSerial MSerial2(LPC_UART2);
43
   MarlinSerial MSerial2(LPC_UART2);
44
   extern "C" void UART2_IRQHandler() {
44
   extern "C" void UART2_IRQHandler() {
45
     MSerial2.IRQHandler();
45
     MSerial2.IRQHandler();
46
   }
46
   }
47
 #endif
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
   MarlinSerial MSerial3(LPC_UART3);
50
   MarlinSerial MSerial3(LPC_UART3);
51
   extern "C" void UART3_IRQHandler() {
51
   extern "C" void UART3_IRQHandler() {
52
     MSerial3.IRQHandler();
52
     MSerial3.IRQHandler();

+ 49
- 0
Marlin/src/HAL/HAL_LPC1768/inc/SanityCheck.h Целия файл

76
 #if ENABLED(BAUD_RATE_GCODE)
76
 #if ENABLED(BAUD_RATE_GCODE)
77
   #error "BAUD_RATE_GCODE is not yet supported on LPC176x."
77
   #error "BAUD_RATE_GCODE is not yet supported on LPC176x."
78
 #endif
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 Целия файл

72
         eeprom_write_byte(p, v);
72
         eeprom_write_byte(p, v);
73
         delay(2);
73
         delay(2);
74
         if (eeprom_read_byte(p) != v) {
74
         if (eeprom_read_byte(p) != v) {
75
-          SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
75
+          SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
76
           return true;
76
           return true;
77
         }
77
         }
78
       }
78
       }

+ 1
- 1
Marlin/src/HAL/HAL_STM32/persistent_store_impl.cpp Целия файл

48
       if (v != eeprom_read_byte(p)) {
48
       if (v != eeprom_read_byte(p)) {
49
         eeprom_write_byte(p, v);
49
         eeprom_write_byte(p, v);
50
         if (eeprom_read_byte(p) != v) {
50
         if (eeprom_read_byte(p) != v) {
51
-          SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
51
+          SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
52
           return true;
52
           return true;
53
         }
53
         }
54
       }
54
       }

+ 1
- 1
Marlin/src/HAL/HAL_STM32F1/persistent_store_eeprom.cpp Целия файл

49
     if (v != eeprom_read_byte(p)) {
49
     if (v != eeprom_read_byte(p)) {
50
       eeprom_write_byte(p, v);
50
       eeprom_write_byte(p, v);
51
       if (eeprom_read_byte(p) != v) {
51
       if (eeprom_read_byte(p) != v) {
52
-        SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
52
+        SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
53
         return true;
53
         return true;
54
       }
54
       }
55
     }
55
     }

+ 1
- 1
Marlin/src/HAL/HAL_STM32_F4_F7/persistent_store_eeprom.cpp Целия файл

41
     if (v != eeprom_read_byte(p)) {
41
     if (v != eeprom_read_byte(p)) {
42
       eeprom_write_byte(p, v);
42
       eeprom_write_byte(p, v);
43
       if (eeprom_read_byte(p) != v) {
43
       if (eeprom_read_byte(p) != v) {
44
-        SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
44
+        SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
45
         return true;
45
         return true;
46
       }
46
       }
47
     }
47
     }

+ 1
- 1
Marlin/src/HAL/HAL_TEENSY31_32/persistent_store_impl.cpp Целия файл

36
     if (v != eeprom_read_byte(p)) {
36
     if (v != eeprom_read_byte(p)) {
37
       eeprom_write_byte(p, v);
37
       eeprom_write_byte(p, v);
38
       if (eeprom_read_byte(p) != v) {
38
       if (eeprom_read_byte(p) != v) {
39
-        SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
39
+        SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
40
         return true;
40
         return true;
41
       }
41
       }
42
     }
42
     }

+ 1
- 1
Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp Целия файл

42
     if (v != eeprom_read_byte(p)) {
42
     if (v != eeprom_read_byte(p)) {
43
       eeprom_write_byte(p, v);
43
       eeprom_write_byte(p, v);
44
       if (eeprom_read_byte(p) != v) {
44
       if (eeprom_read_byte(p) != v) {
45
-        SERIAL_ECHO_MSG(MSG_ERR_EEPROM_WRITE);
45
+        SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
46
         return true;
46
         return true;
47
       }
47
       }
48
     }
48
     }

+ 86
- 32
Marlin/src/MarlinCore.cpp Целия файл

278
 }
278
 }
279
 
279
 
280
 void protected_pin_err() {
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
 void quickstop_stepper() {
284
 void quickstop_stepper() {
390
 
390
 
391
 #if ENABLED(SDSUPPORT)
391
 #if ENABLED(SDSUPPORT)
392
 
392
 
393
-  void abortSDPrinting() {
394
-    card.stopSDPrint(
393
+  inline void abortSDPrinting() {
394
+    card.endFilePrint(
395
       #if SD_RESORT
395
       #if SD_RESORT
396
         true
396
         true
397
       #endif
397
       #endif
412
     #endif
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
  *  - Check for Filament Runout
467
  *  - Check for Filament Runout
420
  *  - Keep the command buffer full
468
  *  - Keep the command buffer full
421
  *  - Check for maximum inactive time between commands
469
  *  - Check for maximum inactive time between commands
440
 
488
 
441
   if (max_inactive_time && ELAPSED(ms, gcode.previous_move_ms + max_inactive_time)) {
489
   if (max_inactive_time && ELAPSED(ms, gcode.previous_move_ms + max_inactive_time)) {
442
     SERIAL_ERROR_START();
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
     kill();
492
     kill();
445
   }
493
   }
446
 
494
 
505
     // KILL the machine
553
     // KILL the machine
506
     // ----------------------------------------------------------------
554
     // ----------------------------------------------------------------
507
     if (killCount >= KILL_DELAY) {
555
     if (killCount >= KILL_DELAY) {
508
-      SERIAL_ERROR_MSG(MSG_KILL_BUTTON);
556
+      SERIAL_ERROR_MSG(STR_KILL_BUTTON);
509
       kill();
557
       kill();
510
     }
558
     }
511
   #endif
559
   #endif
723
 void kill(PGM_P const lcd_error/*=nullptr*/, PGM_P const lcd_component/*=nullptr*/, const bool steppers_off/*=false*/) {
771
 void kill(PGM_P const lcd_error/*=nullptr*/, PGM_P const lcd_component/*=nullptr*/, const bool steppers_off/*=false*/) {
724
   thermalManager.disable_all_heaters();
772
   thermalManager.disable_all_heaters();
725
 
773
 
726
-  SERIAL_ERROR_MSG(MSG_ERR_KILLED);
774
+  SERIAL_ERROR_MSG(STR_ERR_KILLED);
727
 
775
 
728
   #if HAS_DISPLAY
776
   #if HAS_DISPLAY
729
     ui.kill_screen(lcd_error ?: GET_TEXT(MSG_KILLED), lcd_component ?: NUL_STR);
777
     ui.kill_screen(lcd_error ?: GET_TEXT(MSG_KILLED), lcd_component ?: NUL_STR);
794
   #endif
842
   #endif
795
 
843
 
796
   if (IsRunning()) {
844
   if (IsRunning()) {
797
-    SERIAL_ERROR_MSG(MSG_ERR_STOPPED);
845
+    SERIAL_ERROR_MSG(STR_ERR_STOPPED);
798
     LCD_MESSAGEPGM(MSG_STOPPED);
846
     LCD_MESSAGEPGM(MSG_STOPPED);
799
     safe_delay(350);       // allow enough time for messages to get out before stopping
847
     safe_delay(350);       // allow enough time for messages to get out before stopping
800
     Running = false;
848
     Running = false;
900
 
948
 
901
   // Check startup - does nothing if bootloader sets MCUSR to 0
949
   // Check startup - does nothing if bootloader sets MCUSR to 0
902
   byte mcu = HAL_get_reset_source();
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
   HAL_clear_reset_source();
956
   HAL_clear_reset_source();
909
 
957
 
910
   serialprintPGM(GET_TEXT(MSG_MARLIN));
958
   serialprintPGM(GET_TEXT(MSG_MARLIN));
914
 
962
 
915
   #if defined(STRING_DISTRIBUTION_DATE) && defined(STRING_CONFIG_H_AUTHOR)
963
   #if defined(STRING_DISTRIBUTION_DATE) && defined(STRING_CONFIG_H_AUTHOR)
916
     SERIAL_ECHO_MSG(
964
     SERIAL_ECHO_MSG(
917
-      MSG_CONFIGURATION_VER
965
+      STR_CONFIGURATION_VER
918
       STRING_DISTRIBUTION_DATE
966
       STRING_DISTRIBUTION_DATE
919
-      MSG_AUTHOR STRING_CONFIG_H_AUTHOR
967
+      STR_AUTHOR STRING_CONFIG_H_AUTHOR
920
     );
968
     );
921
     SERIAL_ECHO_MSG("Compiled: " __DATE__);
969
     SERIAL_ECHO_MSG("Compiled: " __DATE__);
922
   #endif
970
   #endif
923
 
971
 
924
   SERIAL_ECHO_START();
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
   // UI must be initialized before EEPROM
975
   // UI must be initialized before EEPROM
928
   // (because EEPROM code calls the UI).
976
   // (because EEPROM code calls the UI).
937
     ui.show_bootscreen();
985
     ui.show_bootscreen();
938
   #endif
986
   #endif
939
 
987
 
988
+  ui.reset_status();        // Load welcome message early. (Retained if no errors exist.)
989
+
940
   #if ENABLED(SDSUPPORT)
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
   #endif
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
   #if ENABLED(TOUCH_BUTTONS)
996
   #if ENABLED(TOUCH_BUTTONS)
949
     touch.init();
997
     touch.init();
950
   #endif
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
     current_position += home_offset;
1001
     current_position += home_offset;
955
   #endif
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
   thermalManager.init();    // Initialize temperature loop
1006
   thermalManager.init();    // Initialize temperature loop
961
 
1007
 
962
   print_job_timer.init();   // Initial setup of print job timer
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
   endstops.init();          // Init endstops and pullups
1010
   endstops.init();          // Init endstops and pullups
967
 
1011
 
968
   stepper.init();           // Init stepper. This enables interrupts!
1012
   stepper.init();           // Init stepper. This enables interrupts!
1117
   #if ENABLED(PRUSA_MMU2)
1161
   #if ENABLED(PRUSA_MMU2)
1118
     mmu2.init();
1162
     mmu2.init();
1119
   #endif
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
  * The main Marlin program loop
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
 void loop() {
1183
 void loop() {
1131
   do {
1184
   do {
1135
     #if ENABLED(SDSUPPORT)
1188
     #if ENABLED(SDSUPPORT)
1136
       card.checkautostart();
1189
       card.checkautostart();
1137
       if (card.flag.abort_sd_printing) abortSDPrinting();
1190
       if (card.flag.abort_sd_printing) abortSDPrinting();
1191
+      if (card.sdprinting_done_state) finishSDPrinting();
1138
     #endif
1192
     #endif
1139
 
1193
 
1140
     queue.advance();
1194
     queue.advance();

+ 204
- 204
Marlin/src/core/language.h Целия файл

97
 //  #define STRING_SPLASH_LINE3 WEBSITE_URL
97
 //  #define STRING_SPLASH_LINE3 WEBSITE_URL
98
 //#endif
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
 #if HAS_CHARACTER_LCD
304
 #if HAS_CHARACTER_LCD
101
 
305
 
102
   // Custom characters defined in the first 8 characters of the LCD
306
   // Custom characters defined in the first 8 characters of the LCD
135
 
339
 
136
 #endif
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
  * Tool indexes for LCD display only
343
  * Tool indexes for LCD display only
344
  *
344
  *

+ 1
- 1
Marlin/src/core/serial.cpp Целия файл

54
   serialprintPGM(onoff ? on : off);
54
   serialprintPGM(onoff ? on : off);
55
   if (post) serialprintPGM(post);
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
 void serialprintln_onoff(const bool onoff) { serialprint_onoff(onoff); SERIAL_EOL(); }
58
 void serialprintln_onoff(const bool onoff) { serialprint_onoff(onoff); SERIAL_EOL(); }
59
 void serialprint_truefalse(const bool tf) { serialprintPGM(tf ? PSTR("true") : PSTR("false")); }
59
 void serialprint_truefalse(const bool tf) { serialprintPGM(tf ? PSTR("true") : PSTR("false")); }
60
 
60
 

+ 2
- 2
Marlin/src/feature/bltouch.cpp Целия файл

124
       // The deploy might have failed or the probe is actually triggered (nozzle too low?) again
124
       // The deploy might have failed or the probe is actually triggered (nozzle too low?) again
125
       if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("BLTouch Recovery Failed");
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
       stop();                              // but it's not too bad, no need to kill, allow restart
128
       stop();                              // but it's not too bad, no need to kill, allow restart
129
 
129
 
130
       return true;                         // Tell our caller we goofed in case he cares to know
130
       return true;                         // Tell our caller we goofed in case he cares to know
169
 
169
 
170
       if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("BLTouch Recovery Failed");
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
       stop();                              // but it's not too bad, no need to kill, allow restart
173
       stop();                              // but it's not too bad, no need to kill, allow restart
174
 
174
 
175
       return true;                         // Tell our caller we goofed in case he cares to know
175
       return true;                         // Tell our caller we goofed in case he cares to know

+ 0
- 3
Marlin/src/feature/bltouch.h Целия файл

105
   static void mode_conv_proc(const bool M5V);
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
 extern BLTouch bltouch;
108
 extern BLTouch bltouch;

+ 5
- 5
Marlin/src/feature/pause.cpp Целия файл

120
 
120
 
121
   #if ENABLED(PREVENT_COLD_EXTRUSION)
121
   #if ENABLED(PREVENT_COLD_EXTRUSION)
122
     if (!DEBUGGING(DRYRUN) && thermalManager.targetTooColdToExtrude(active_extruder)) {
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
       return false;
124
       return false;
125
     }
125
     }
126
   #endif
126
   #endif
175
     #if HAS_LCD_MENU
175
     #if HAS_LCD_MENU
176
       if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_INSERT, mode);
176
       if (show_lcd) lcd_pause_show_message(PAUSE_MESSAGE_INSERT, mode);
177
     #endif
177
     #endif
178
-    SERIAL_ECHO_MSG(_PMSG(MSG_FILAMENT_CHANGE_INSERT));
178
+    SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_INSERT));
179
 
179
 
180
     #if HAS_BUZZER
180
     #if HAS_BUZZER
181
       filament_change_beep(max_beep_count, true);
181
       filament_change_beep(max_beep_count, true);
400
   #endif
400
   #endif
401
 
401
 
402
   if (!DEBUGGING(DRYRUN) && unload_length && thermalManager.targetTooColdToExtrude(active_extruder)) {
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
     #if HAS_LCD_MENU
405
     #if HAS_LCD_MENU
406
       if (show_lcd) { // Show status screen
406
       if (show_lcd) { // Show status screen
480
     lcd_pause_show_message(is_reload ? PAUSE_MESSAGE_INSERT : PAUSE_MESSAGE_WAITING);
480
     lcd_pause_show_message(is_reload ? PAUSE_MESSAGE_INSERT : PAUSE_MESSAGE_WAITING);
481
   #endif
481
   #endif
482
   SERIAL_ECHO_START();
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
 void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep_count/*=0*/ DXC_ARGS) {
486
 void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep_count/*=0*/ DXC_ARGS) {
530
       #if HAS_LCD_MENU
530
       #if HAS_LCD_MENU
531
         lcd_pause_show_message(PAUSE_MESSAGE_HEAT);
531
         lcd_pause_show_message(PAUSE_MESSAGE_HEAT);
532
       #endif
532
       #endif
533
-      SERIAL_ECHO_MSG(_PMSG(MSG_FILAMENT_CHANGE_HEAT));
533
+      SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_HEAT));
534
 
534
 
535
       #if ENABLED(HOST_PROMPT_SUPPORT)
535
       #if ENABLED(HOST_PROMPT_SUPPORT)
536
         host_prompt_do(PROMPT_USER_CONTINUE, PSTR("HeaterTimeout"), PSTR("Reheat"));
536
         host_prompt_do(PROMPT_USER_CONTINUE, PSTR("HeaterTimeout"), PSTR("Reheat"));

+ 1
- 1
Marlin/src/feature/power_loss_recovery.cpp Целия файл

141
 /**
141
 /**
142
  * Save the current machine state to the power-loss recovery file
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
   #if SAVE_INFO_INTERVAL_MS > 0
146
   #if SAVE_INFO_INTERVAL_MS > 0
147
     static millis_t next_save_ms; // = 0
147
     static millis_t next_save_ms; // = 0

+ 2
- 5
Marlin/src/feature/power_loss_recovery.h Целия файл

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

+ 1
- 1
Marlin/src/feature/probe_temp_compensation.h Целия файл

57
     static const temp_calib_t cali_info[TSI_COUNT];
57
     static const temp_calib_t cali_info[TSI_COUNT];
58
 
58
 
59
     // Where to park nozzle to wait for probe cooldown
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
     static constexpr int  max_bed_temp         = PTC_MAX_BED_TEMP,  // Max temperature to avoid heating errors
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 Целия файл

462
     ENABLE_AXIS_E0();
462
     ENABLE_AXIS_E0();
463
 
463
 
464
     SERIAL_ECHO_START();
464
     SERIAL_ECHO_START();
465
-    SERIAL_ECHOLNPAIR(MSG_ACTIVE_EXTRUDER, int(extruder));
465
+    SERIAL_ECHOLNPAIR(STR_ACTIVE_EXTRUDER, int(extruder));
466
 
466
 
467
     ui.reset_status();
467
     ui.reset_status();
468
   }
468
   }

+ 1
- 1
Marlin/src/feature/solenoid.cpp Целия файл

67
         break;
67
         break;
68
     #endif
68
     #endif
69
     default:
69
     default:
70
-      SERIAL_ECHO_MSG(MSG_INVALID_SOLENOID);
70
+      SERIAL_ECHO_MSG(STR_INVALID_SOLENOID);
71
       break;
71
       break;
72
   }
72
   }
73
 }
73
 }

+ 1
- 1
Marlin/src/gcode/bedlevel/G42.cpp Целия файл

41
     const int8_t iy = hasJ ? parser.value_int() : 0;
41
     const int8_t iy = hasJ ? parser.value_int() : 0;
42
 
42
 
43
     if ((hasI && !WITHIN(ix, 0, GRID_MAX_POINTS_X - 1)) || (hasJ && !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1))) {
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
       return;
45
       return;
46
     }
46
     }
47
 
47
 

+ 2
- 2
Marlin/src/gcode/bedlevel/M420.cpp Целия файл

235
 
235
 
236
   // Error if leveling failed to enable or reenable
236
   // Error if leveling failed to enable or reenable
237
   if (to_enable && !planner.leveling_active)
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
   SERIAL_ECHO_START();
240
   SERIAL_ECHO_START();
241
   SERIAL_ECHOPGM("Bed Leveling ");
241
   SERIAL_ECHOPGM("Bed Leveling ");
247
     if (planner.z_fade_height > 0.0)
247
     if (planner.z_fade_height > 0.0)
248
       SERIAL_ECHOLN(planner.z_fade_height);
248
       SERIAL_ECHOLN(planner.z_fade_height);
249
     else
249
     else
250
-      SERIAL_ECHOLNPGM(MSG_OFF);
250
+      SERIAL_ECHOLNPGM(STR_OFF);
251
   #endif
251
   #endif
252
 
252
 
253
   // Report change in position
253
   // Report change in position

+ 2
- 2
Marlin/src/gcode/bedlevel/abl/M421.cpp Целия файл

50
              hasQ = !hasZ && parser.seen('Q');
50
              hasQ = !hasZ && parser.seen('Q');
51
 
51
 
52
   if (!hasI || !hasJ || !(hasZ || hasQ))
52
   if (!hasI || !hasJ || !(hasZ || hasQ))
53
-    SERIAL_ERROR_MSG(MSG_ERR_M421_PARAMETERS);
53
+    SERIAL_ERROR_MSG(STR_ERR_M421_PARAMETERS);
54
   else if (!WITHIN(ix, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(iy, 0, GRID_MAX_POINTS_Y - 1))
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
   else {
56
   else {
57
     z_values[ix][iy] = parser.value_linear_units() + (hasQ ? z_values[ix][iy] : 0);
57
     z_values[ix][iy] = parser.value_linear_units() + (hasQ ? z_values[ix][iy] : 0);
58
     #if ENABLED(ABL_BILINEAR_SUBDIVISION)
58
     #if ENABLED(ABL_BILINEAR_SUBDIVISION)

+ 2
- 2
Marlin/src/gcode/bedlevel/mbl/M421.cpp Целия файл

49
   const bool hasZ = parser.seen('Z'), hasQ = !hasZ && parser.seen('Q');
49
   const bool hasZ = parser.seen('Z'), hasQ = !hasZ && parser.seen('Q');
50
 
50
 
51
   if (int(hasI && hasJ) + int(hasX && hasY) != 1 || !(hasZ || hasQ))
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
   else if (ix < 0 || iy < 0)
53
   else if (ix < 0 || iy < 0)
54
-    SERIAL_ERROR_MSG(MSG_ERR_MESH_XY);
54
+    SERIAL_ERROR_MSG(STR_ERR_MESH_XY);
55
   else
55
   else
56
     mbl.set_z(ix, iy, parser.value_linear_units() + (hasQ ? mbl.z_values[ix][iy] : 0));
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 Целия файл

57
   if (hasC) ij = ubl.find_closest_mesh_point_of_type(REAL, current_position);
57
   if (hasC) ij = ubl.find_closest_mesh_point_of_type(REAL, current_position);
58
 
58
 
59
   if (int(hasC) + int(hasI && hasJ) != 1 || !(hasZ || hasQ || hasN))
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
   else if (!WITHIN(ij.x, 0, GRID_MAX_POINTS_X - 1) || !WITHIN(ij.y, 0, GRID_MAX_POINTS_Y - 1))
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
   else {
63
   else {
64
     float &zval = ubl.z_values[ij.x][ij.y];
64
     float &zval = ubl.z_values[ij.x][ij.y];
65
     zval = hasN ? NAN : parser.value_linear_units() + (hasQ ? zval : 0);
65
     zval = hasN ? NAN : parser.value_linear_units() + (hasQ ? zval : 0);

+ 5
- 3
Marlin/src/gcode/calibrate/G28.cpp Целия файл

106
       #if AXIS_HAS_STALLGUARD(Y2)
106
       #if AXIS_HAS_STALLGUARD(Y2)
107
         tmc_disable_stallguard(stepperY2, stealth_states.y2);
107
         tmc_disable_stallguard(stepperY2, stealth_states.y2);
108
       #endif
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
     #endif
111
     #endif
110
   }
112
   }
111
 
113
 
118
     // Disallow Z homing if X or Y are unknown
120
     // Disallow Z homing if X or Y are unknown
119
     if (!TEST(axis_known_position, X_AXIS) || !TEST(axis_known_position, Y_AXIS)) {
121
     if (!TEST(axis_known_position, X_AXIS) || !TEST(axis_known_position, Y_AXIS)) {
120
       LCD_MESSAGEPGM(MSG_ERR_Z_HOMING);
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
       return;
124
       return;
123
     }
125
     }
124
 
126
 
154
     }
156
     }
155
     else {
157
     else {
156
       LCD_MESSAGEPGM(MSG_ZPROBE_OUT);
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
     if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< home_z_safely");
162
     if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< home_z_safely");
529
       #define _HOME_SYNC doZ        // Only for Z-axis
531
       #define _HOME_SYNC doZ        // Only for Z-axis
530
     #endif
532
     #endif
531
     if (_HOME_SYNC)
533
     if (_HOME_SYNC)
532
-      SERIAL_ECHOLNPGM(MSG_Z_MOVE_COMP);
534
+      SERIAL_ECHOLNPGM(STR_Z_MOVE_COMP);
533
   #endif
535
   #endif
534
 
536
 
535
   if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< G28");
537
   if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("<<< G28");

+ 1
- 1
Marlin/src/gcode/calibrate/G33.cpp Целия файл

190
  */
190
  */
191
 static float calibration_probe(const xy_pos_t &xy, const bool stow) {
191
 static float calibration_probe(const xy_pos_t &xy, const bool stow) {
192
   #if HAS_BED_PROBE
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
   #else
194
   #else
195
     UNUSED(stow);
195
     UNUSED(stow);
196
     return lcd_probe_pt(xy);
196
     return lcd_probe_pt(xy);

+ 1
- 1
Marlin/src/gcode/calibrate/M852.cpp Целия файл

82
   #endif
82
   #endif
83
 
83
 
84
   if (badval)
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
   // When skew is changed the current position changes
87
   // When skew is changed the current position changes
88
   if (setval) {
88
   if (setval) {

+ 1
- 1
Marlin/src/gcode/config/M218.cpp Целия файл

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

+ 6
- 0
Marlin/src/gcode/config/M281.cpp Целия файл

30
   if (!parser.seenval('P')) return;
30
   if (!parser.seenval('P')) return;
31
   const int servo_index = parser.value_int();
31
   const int servo_index = parser.value_int();
32
   if (WITHIN(servo_index, 0, NUM_SERVOS - 1)) {
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
     bool angle_change = false;
39
     bool angle_change = false;
34
     if (parser.seen('L')) {
40
     if (parser.seen('L')) {
35
       servo_angles[servo_index][0] = parser.value_int();
41
       servo_angles[servo_index][0] = parser.value_int();

+ 1
- 1
Marlin/src/gcode/config/M301.cpp Целия файл

82
     SERIAL_EOL();
82
     SERIAL_EOL();
83
   }
83
   }
84
   else
84
   else
85
-    SERIAL_ERROR_MSG(MSG_INVALID_EXTRUDER);
85
+    SERIAL_ERROR_MSG(STR_INVALID_EXTRUDER);
86
 }
86
 }
87
 
87
 
88
 #endif // PIDTEMP
88
 #endif // PIDTEMP

+ 8
- 8
Marlin/src/gcode/control/M111.cpp Целия файл

28
 void GcodeSuite::M111() {
28
 void GcodeSuite::M111() {
29
   if (parser.seen('S')) marlin_debug_flags = parser.byteval('S');
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
                     #if ENABLED(DEBUG_LEVELING_FEATURE)
36
                     #if ENABLED(DEBUG_LEVELING_FEATURE)
37
-                      , str_debug_lvl[] PROGMEM = MSG_DEBUG_LEVELING
37
+                      , str_debug_lvl[] PROGMEM = STR_DEBUG_LEVELING
38
                     #endif
38
                     #endif
39
                     ;
39
                     ;
40
 
40
 
46
   };
46
   };
47
 
47
 
48
   SERIAL_ECHO_START();
48
   SERIAL_ECHO_START();
49
-  SERIAL_ECHOPGM(MSG_DEBUG_PREFIX);
49
+  SERIAL_ECHOPGM(STR_DEBUG_PREFIX);
50
   if (marlin_debug_flags) {
50
   if (marlin_debug_flags) {
51
     uint8_t comma = 0;
51
     uint8_t comma = 0;
52
     for (uint8_t i = 0; i < COUNT(debug_strings); i++) {
52
     for (uint8_t i = 0; i < COUNT(debug_strings); i++) {
57
     }
57
     }
58
   }
58
   }
59
   else {
59
   else {
60
-    SERIAL_ECHOPGM(MSG_DEBUG_OFF);
60
+    SERIAL_ECHOPGM(STR_DEBUG_OFF);
61
     #if !defined(__AVR__) || !defined(USBCON)
61
     #if !defined(__AVR__) || !defined(USBCON)
62
       #if ENABLED(SERIAL_STATS_RX_BUFFER_OVERRUNS)
62
       #if ENABLED(SERIAL_STATS_RX_BUFFER_OVERRUNS)
63
         SERIAL_ECHOPAIR("\nBuffer Overruns: ", MYSERIAL0.buffer_overruns());
63
         SERIAL_ECHOPAIR("\nBuffer Overruns: ", MYSERIAL0.buffer_overruns());

+ 3
- 3
Marlin/src/gcode/control/M211.cpp Целия файл

36
   const xyz_pos_t l_soft_min = soft_endstop.min.asLogical(),
36
   const xyz_pos_t l_soft_min = soft_endstop.min.asLogical(),
37
                   l_soft_max = soft_endstop.max.asLogical();
37
                   l_soft_max = soft_endstop.max.asLogical();
38
   SERIAL_ECHO_START();
38
   SERIAL_ECHO_START();
39
-  SERIAL_ECHOPGM(MSG_SOFT_ENDSTOPS);
39
+  SERIAL_ECHOPGM(STR_SOFT_ENDSTOPS);
40
   if (parser.seen('S')) soft_endstops_enabled = parser.value_bool();
40
   if (parser.seen('S')) soft_endstops_enabled = parser.value_bool();
41
   serialprint_onoff(soft_endstops_enabled);
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
 #endif
46
 #endif

+ 1
- 1
Marlin/src/gcode/control/M605.cpp Целия файл

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

+ 1
- 1
Marlin/src/gcode/control/M80_M81.cpp Целия файл

110
   #endif
110
   #endif
111
 
111
 
112
   #if HAS_LCD_MENU
112
   #if HAS_LCD_MENU
113
-    LCD_MESSAGEPGM_P(PSTR(MACHINE_NAME " " MSG_OFF "."));
113
+    LCD_MESSAGEPGM_P(PSTR(MACHINE_NAME " " STR_OFF "."));
114
   #endif
114
   #endif
115
 }
115
 }

+ 2
- 2
Marlin/src/gcode/feature/pause/G60.cpp Целия файл

40
   const uint8_t slot = parser.byteval('S');
40
   const uint8_t slot = parser.byteval('S');
41
 
41
 
42
   if (slot >= SAVED_POSITIONS) {
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
     return;
44
     return;
45
   }
45
   }
46
 
46
 
49
 
49
 
50
   #if ENABLED(SAVED_POSITIONS_DEBUG)
50
   #if ENABLED(SAVED_POSITIONS_DEBUG)
51
     const xyze_pos_t &pos = stored_position[slot];
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
     DEBUG_ECHOPAIR_F(" : X", pos.x);
53
     DEBUG_ECHOPAIR_F(" : X", pos.x);
54
     DEBUG_ECHOPAIR_F_P(SP_Y_STR, pos.y);
54
     DEBUG_ECHOPAIR_F_P(SP_Y_STR, pos.y);
55
     DEBUG_ECHOLNPAIR_F_P(SP_Z_STR, pos.z);
55
     DEBUG_ECHOLNPAIR_F_P(SP_Z_STR, pos.z);

+ 2
- 2
Marlin/src/gcode/feature/pause/G61.cpp Целия файл

42
 
42
 
43
   #if SAVED_POSITIONS < 256
43
   #if SAVED_POSITIONS < 256
44
     if (slot >= SAVED_POSITIONS) {
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
       return;
46
       return;
47
     }
47
     }
48
   #endif
48
   #endif
54
   const float fr = parser.linearval('F');
54
   const float fr = parser.linearval('F');
55
   if (fr > 0.0) feedrate_mm_s = MMM_TO_MMS(fr);
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
   LOOP_XYZ(i) {
58
   LOOP_XYZ(i) {
59
     destination[i] = parser.seen(axis_codes[i])
59
     destination[i] = parser.seen(axis_codes[i])
60
       ? stored_position[slot][i] + parser.value_axis_units((AxisEnum)i)
60
       ? stored_position[slot][i] + parser.value_axis_units((AxisEnum)i)

+ 7
- 0
Marlin/src/gcode/feature/pause/M125.cpp Целия файл

35
   #include "../../../lcd/ultralcd.h"
35
   #include "../../../lcd/ultralcd.h"
36
 #endif
36
 #endif
37
 
37
 
38
+#if ENABLED(POWER_LOSS_RECOVERY)
39
+  #include "../../../feature/power_loss_recovery.h"
40
+#endif
41
+
38
 /**
42
 /**
39
  * M125: Store current position and move to parking position.
43
  * M125: Store current position and move to parking position.
40
  *       Called on pause (by M25) to prevent material leaking onto the
44
  *       Called on pause (by M25) to prevent material leaking onto the
85
   #endif
89
   #endif
86
 
90
 
87
   if (pause_print(retract, park_point, 0, show_lcd)) {
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
     if (!sd_printing || show_lcd) {
95
     if (!sd_printing || show_lcd) {
89
       wait_for_confirmation(false, 0);
96
       wait_for_confirmation(false, 0);
90
       resume_print(0, 0, PAUSE_PARK_RETRACT_LENGTH, 0);
97
       resume_print(0, 0, PAUSE_PARK_RETRACT_LENGTH, 0);

+ 6
- 6
Marlin/src/gcode/gcode.cpp Целия файл

94
     if (e < EXTRUDERS) return e;
94
     if (e < EXTRUDERS) return e;
95
     SERIAL_ECHO_START();
95
     SERIAL_ECHO_START();
96
     SERIAL_CHAR('M'); SERIAL_ECHO(parser.codenum);
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
     return -1;
98
     return -1;
99
   }
99
   }
100
   return active_extruder;
100
   return active_extruder;
111
   SERIAL_ECHO_START();
111
   SERIAL_ECHO_START();
112
   SERIAL_CHAR('M'); SERIAL_ECHO(parser.codenum);
112
   SERIAL_CHAR('M'); SERIAL_ECHO(parser.codenum);
113
   if (e == -1)
113
   if (e == -1)
114
-    SERIAL_ECHOLNPGM(" " MSG_E_STEPPER_NOT_SPECIFIED);
114
+    SERIAL_ECHOLNPGM(" " STR_E_STEPPER_NOT_SPECIFIED);
115
   else
115
   else
116
-    SERIAL_ECHOLNPAIR(" " MSG_INVALID_E_STEPPER " ", int(e));
116
+    SERIAL_ECHOLNPAIR(" " STR_INVALID_E_STEPPER " ", int(e));
117
   return -1;
117
   return -1;
118
 }
118
 }
119
 
119
 
951
       switch (busy_state) {
951
       switch (busy_state) {
952
         case IN_HANDLER:
952
         case IN_HANDLER:
953
         case IN_PROCESS:
953
         case IN_PROCESS:
954
-          SERIAL_ECHO_MSG(MSG_BUSY_PROCESSING);
954
+          SERIAL_ECHO_MSG(STR_BUSY_PROCESSING);
955
           break;
955
           break;
956
         case PAUSED_FOR_USER:
956
         case PAUSED_FOR_USER:
957
-          SERIAL_ECHO_MSG(MSG_BUSY_PAUSED_FOR_USER);
957
+          SERIAL_ECHO_MSG(STR_BUSY_PAUSED_FOR_USER);
958
           break;
958
           break;
959
         case PAUSED_FOR_INPUT:
959
         case PAUSED_FOR_INPUT:
960
-          SERIAL_ECHO_MSG(MSG_BUSY_PAUSED_FOR_INPUT);
960
+          SERIAL_ECHO_MSG(STR_BUSY_PAUSED_FOR_INPUT);
961
           break;
961
           break;
962
         default:
962
         default:
963
           break;
963
           break;

+ 1
- 1
Marlin/src/gcode/geometry/M206_M428.cpp Целия файл

69
     if (!WITHIN(diff[i], -20, 20) && home_dir((AxisEnum)i) > 0)
69
     if (!WITHIN(diff[i], -20, 20) && home_dir((AxisEnum)i) > 0)
70
       diff[i] = -current_position[i];
70
       diff[i] = -current_position[i];
71
     if (!WITHIN(diff[i], -20, 20)) {
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
       LCD_ALERTMESSAGEPGM_P(PSTR("Err: Too far!"));
73
       LCD_ALERTMESSAGEPGM_P(PSTR("Err: Too far!"));
74
       BUZZ(200, 40);
74
       BUZZ(200, 40);
75
       return;
75
       return;

+ 1
- 1
Marlin/src/gcode/host/M115.cpp Целия файл

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

+ 8
- 3
Marlin/src/gcode/lcd/M0_M1.cpp Целия файл

67
 
67
 
68
   planner.synchronize();
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
   #if HAS_LCD_MENU
75
   #if HAS_LCD_MENU
71
 
76
 
72
     if (has_message)
77
     if (has_message)
73
       ui.set_status(args, true);
78
       ui.set_status(args, true);
74
-    else if (!parser.seenval('Q')) {
79
+    else {
75
       LCD_MESSAGEPGM(MSG_USERWAIT);
80
       LCD_MESSAGEPGM(MSG_USERWAIT);
76
       #if ENABLED(LCD_PROGRESS_BAR) && PROGRESS_MSG_EXPIRE > 0
81
       #if ENABLED(LCD_PROGRESS_BAR) && PROGRESS_MSG_EXPIRE > 0
77
         ui.reset_progress_bar_timeout();
82
         ui.reset_progress_bar_timeout();
98
   wait_for_user = true;
103
   wait_for_user = true;
99
 
104
 
100
   #if ENABLED(HOST_PROMPT_SUPPORT)
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
   #endif
107
   #endif
103
 
108
 
104
   if (ms > 0) ms += millis();  // wait until this time for a click
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
   #if HAS_LEDS_OFF_FLAG
112
   #if HAS_LEDS_OFF_FLAG
108
     printerEventLEDs.onResumeAfterWait();
113
     printerEventLEDs.onResumeAfterWait();

+ 1
- 1
Marlin/src/gcode/lcd/M145.cpp Целия файл

38
 void GcodeSuite::M145() {
38
 void GcodeSuite::M145() {
39
   const uint8_t material = (uint8_t)parser.intval('S');
39
   const uint8_t material = (uint8_t)parser.intval('S');
40
   if (material >= COUNT(ui.preheat_hotend_temp))
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
   else {
42
   else {
43
     int v;
43
     int v;
44
     if (parser.seenval('H')) {
44
     if (parser.seenval('H')) {

+ 1
- 1
Marlin/src/gcode/motion/G0_G1.cpp Целия файл

118
       #endif
118
       #endif
119
       if (_MOVE_SYNC) {
119
       if (_MOVE_SYNC) {
120
         planner.synchronize();
120
         planner.synchronize();
121
-        SERIAL_ECHOLNPGM(MSG_Z_MOVE_COMP);
121
+        SERIAL_ECHOLNPGM(STR_Z_MOVE_COMP);
122
       }
122
       }
123
     #endif
123
     #endif
124
   }
124
   }

+ 2
- 2
Marlin/src/gcode/motion/G2_G3.cpp Целия файл

327
         // P indicates number of circles to do
327
         // P indicates number of circles to do
328
         int8_t circles_to_do = parser.byteval('P');
328
         int8_t circles_to_do = parser.byteval('P');
329
         if (!WITHIN(circles_to_do, 0, 100))
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
         while (circles_to_do--)
332
         while (circles_to_do--)
333
           plan_arc(current_position, arc_offset, clockwise);
333
           plan_arc(current_position, arc_offset, clockwise);
338
       reset_stepper_timeout();
338
       reset_stepper_timeout();
339
     }
339
     }
340
     else
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 Целия файл

35
 
35
 
36
   planner.synchronize();
36
   planner.synchronize();
37
   #if ENABLED(NANODLP_Z_SYNC)
37
   #if ENABLED(NANODLP_Z_SYNC)
38
-    SERIAL_ECHOLNPGM(MSG_Z_MOVE_COMP);
38
+    SERIAL_ECHOLNPGM(STR_Z_MOVE_COMP);
39
   #endif
39
   #endif
40
 
40
 
41
   if (!ui.has_status()) LCD_MESSAGEPGM(MSG_DWELL);
41
   if (!ui.has_status()) LCD_MESSAGEPGM(MSG_DWELL);

+ 1
- 1
Marlin/src/gcode/motion/G5.cpp Целия файл

45
 
45
 
46
     #if ENABLED(CNC_WORKSPACE_PLANES)
46
     #if ENABLED(CNC_WORKSPACE_PLANES)
47
       if (workspace_plane != PLANE_XY) {
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
         return;
49
         return;
50
       }
50
       }
51
     #endif
51
     #endif

+ 3
- 3
Marlin/src/gcode/motion/M290.cpp Целия файл

48
     ) {
48
     ) {
49
       probe.offset.z += offs;
49
       probe.offset.z += offs;
50
       SERIAL_ECHO_START();
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
     else {
53
     else {
54
       #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
54
       #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
55
         hotend_offset[active_extruder].z -= offs;
55
         hotend_offset[active_extruder].z -= offs;
56
         SERIAL_ECHO_START();
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
       #endif
58
       #endif
59
     }
59
     }
60
   }
60
   }
98
     SERIAL_ECHO_START();
98
     SERIAL_ECHO_START();
99
 
99
 
100
     #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
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
     #endif
102
     #endif
103
 
103
 
104
     #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
104
     #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)

+ 15
- 8
Marlin/src/gcode/parser.cpp Целия файл

118
 
118
 
119
   reset(); // No codes to report
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
   // Skip spaces
128
   // Skip spaces
122
   while (*p == ' ') ++p;
129
   while (*p == ' ') ++p;
123
 
130
 
124
   // Skip N[-0-9] if included in the command line
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
     #if ENABLED(FASTER_GCODE_PARSER)
133
     #if ENABLED(FASTER_GCODE_PARSER)
127
       //set('N', p + 1);     // (optional) Set the 'N' parameter value
134
       //set('N', p + 1);     // (optional) Set the 'N' parameter value
128
     #endif
135
     #endif
135
   command_ptr = p;
142
   command_ptr = p;
136
 
143
 
137
   // Get the command letter, which must be G, M, or T
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
   // Nullify asterisk and trailing whitespace
147
   // Nullify asterisk and trailing whitespace
141
   char *starpos = strchr(p, '*');
148
   char *starpos = strchr(p, '*');
271
     bool quoted_string_arg = false;
278
     bool quoted_string_arg = false;
272
   #endif
279
   #endif
273
   string_arg = nullptr;
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
     // Special handling for M32 [P] !/path/to/file.g#
283
     // Special handling for M32 [P] !/path/to/file.g#
277
     // The path must be the last parameter
284
     // The path must be the last parameter
289
       }
296
       }
290
     #endif
297
     #endif
291
 
298
 
292
-    // Arguments MUST be uppercase for fast GCode parsing
293
     #if ENABLED(FASTER_GCODE_PARSER)
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
     #else
302
     #else
296
-      #define PARAM_TEST true
303
+      #define PARAM_OK(P) true
297
     #endif
304
     #endif
298
 
305
 
299
-    if (PARAM_TEST) {
306
+    if (PARAM_OK(param)) {
300
 
307
 
301
       while (*p == ' ') p++;                    // Skip spaces between parameters & values
308
       while (*p == ' ') p++;                    // Skip spaces between parameters & values
302
 
309
 
365
 #endif // CNC_COORDINATE_SYSTEMS
372
 #endif // CNC_COORDINATE_SYSTEMS
366
 
373
 
367
 void GCodeParser::unknown_command_warning() {
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
 #if ENABLED(DEBUG_GCODE_PARSER)
378
 #if ENABLED(DEBUG_GCODE_PARSER)

+ 19
- 7
Marlin/src/gcode/parser.h Целия файл

166
     #ifdef CPU_32_BIT
166
     #ifdef CPU_32_BIT
167
       FORCE_INLINE static bool seen(const char * const str) { return !!(codebits & letter_bits(str)); }
167
       FORCE_INLINE static bool seen(const char * const str) { return !!(codebits & letter_bits(str)); }
168
     #else
168
     #else
169
-      // At least one of a list of code letters was seen
170
       FORCE_INLINE static bool seen(const char * const str) {
169
       FORCE_INLINE static bool seen(const char * const str) {
171
         const uint32_t letrbits = letter_bits(str);
170
         const uint32_t letrbits = letter_bits(str);
172
         const uint8_t * const cb = (uint8_t*)&codebits;
171
         const uint8_t * const cb = (uint8_t*)&codebits;
177
 
176
 
178
     static inline bool seen_any() { return !!codebits; }
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
   #else // !FASTER_GCODE_PARSER
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
     // Code is found in the string. If not found, value_ptr is unchanged.
196
     // Code is found in the string. If not found, value_ptr is unchanged.
185
     // This allows "if (seen('A')||seen('B'))" to use the last-found value.
197
     // This allows "if (seen('A')||seen('B'))" to use the last-found value.
186
     static inline bool seen(const char c) {
198
     static inline bool seen(const char c) {
187
-      char *p = strchr(command_args, c);
199
+      char *p = strgchr(command_args, c);
188
       const bool b = !!p;
200
       const bool b = !!p;
189
       if (b) value_ptr = valid_float(&p[1]) ? &p[1] : nullptr;
201
       if (b) value_ptr = valid_float(&p[1]) ? &p[1] : nullptr;
190
       return b;
202
       return b;
192
 
204
 
193
     static inline bool seen_any() { return *command_args == '\0'; }
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
     // At least one of a list of code letters was seen
209
     // At least one of a list of code letters was seen
198
     static inline bool seen(const char * const str) {
210
     static inline bool seen(const char * const str) {
199
       for (uint8_t i = 0; const char c = str[i]; i++)
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
       return false;
213
       return false;
202
     }
214
     }
203
 
215
 
205
 
217
 
206
   // Seen any axis parameter
218
   // Seen any axis parameter
207
   static inline bool seen_axis() {
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
   #if ENABLED(GCODE_QUOTED_STRINGS)
223
   #if ENABLED(GCODE_QUOTED_STRINGS)
229
   // Seen a parameter with a value
241
   // Seen a parameter with a value
230
   static inline bool seenval(const char c) { return seen(c) && has_value(); }
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
   static inline char* value_string() { return value_ptr; }
245
   static inline char* value_string() { return value_ptr; }
234
 
246
 
235
   // Float removes 'E' to prevent scientific notation interpretation
247
   // Float removes 'E' to prevent scientific notation interpretation

+ 2
- 2
Marlin/src/gcode/probe/M851.cpp Целия файл

39
   if (!parser.seen("XYZ")) {
39
   if (!parser.seen("XYZ")) {
40
     SERIAL_ECHOLNPAIR_P(
40
     SERIAL_ECHOLNPAIR_P(
41
       #if HAS_PROBE_XY_OFFSET
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
       #else
43
       #else
44
-        PSTR(MSG_PROBE_OFFSET " X0 Y0 Z")
44
+        PSTR(STR_PROBE_OFFSET " X0 Y0 Z")
45
       #endif
45
       #endif
46
       , probe.offset.z
46
       , probe.offset.z
47
     );
47
     );

+ 24
- 41
Marlin/src/gcode/queue.cpp Целия файл

163
   if (*cmd == 0 || *cmd == '\n' || *cmd == '\r') return true;
163
   if (*cmd == 0 || *cmd == '\n' || *cmd == '\r') return true;
164
 
164
 
165
   if (_enqueue(cmd)) {
165
   if (_enqueue(cmd)) {
166
-    SERIAL_ECHO_MSG(MSG_ENQUEUEING, cmd, "\"");
166
+    SERIAL_ECHO_MSG(STR_ENQUEUEING, cmd, "\"");
167
     return true;
167
     return true;
168
   }
168
   }
169
   return false;
169
   return false;
244
     PORT_REDIRECT(pn);                    // Reply to the serial port that sent the command
244
     PORT_REDIRECT(pn);                    // Reply to the serial port that sent the command
245
   #endif
245
   #endif
246
   if (!send_ok[index_r]) return;
246
   if (!send_ok[index_r]) return;
247
-  SERIAL_ECHOPGM(MSG_OK);
247
+  SERIAL_ECHOPGM(STR_OK);
248
   #if ENABLED(ADVANCED_OK)
248
   #if ENABLED(ADVANCED_OK)
249
     char* p = command_buffer[index_r];
249
     char* p = command_buffer[index_r];
250
     if (*p == 'N') {
250
     if (*p == 'N') {
270
     PORT_REDIRECT(pn);                    // Reply to the serial port that sent the command
270
     PORT_REDIRECT(pn);                    // Reply to the serial port that sent the command
271
   #endif
271
   #endif
272
   SERIAL_FLUSH();
272
   SERIAL_FLUSH();
273
-  SERIAL_ECHOPGM(MSG_RESEND);
273
+  SERIAL_ECHOPGM(STR_RESEND);
274
   SERIAL_ECHOLN(last_N + 1);
274
   SERIAL_ECHOLN(last_N + 1);
275
   ok_to_send();
275
   ok_to_send();
276
 }
276
 }
397
     static millis_t last_command_time = 0;
397
     static millis_t last_command_time = 0;
398
     const millis_t ms = millis();
398
     const millis_t ms = millis();
399
     if (length == 0 && !serial_data_available() && ELAPSED(ms, last_command_time + NO_TIMEOUTS)) {
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
       last_command_time = ms;
401
       last_command_time = ms;
402
     }
402
     }
403
   #endif
403
   #endif
436
           gcode_N = strtol(npos + 1, nullptr, 10);
436
           gcode_N = strtol(npos + 1, nullptr, 10);
437
 
437
 
438
           if (gcode_N != last_N + 1 && !M110)
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
           char *apos = strrchr(command, '*');
441
           char *apos = strrchr(command, '*');
442
           if (apos) {
442
           if (apos) {
443
             uint8_t checksum = 0, count = uint8_t(apos - command);
443
             uint8_t checksum = 0, count = uint8_t(apos - command);
444
             while (count) checksum ^= command[--count];
444
             while (count) checksum ^= command[--count];
445
             if (strtol(apos + 1, nullptr, 10) != checksum)
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
           else
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
           last_N = gcode_N;
451
           last_N = gcode_N;
452
         }
452
         }
453
         #if ENABLED(SDSUPPORT)
453
         #if ENABLED(SDSUPPORT)
454
           // Pronterface "M29" and "M29 " has no line number
454
           // Pronterface "M29" and "M29 " has no line number
455
           else if (card.flag.saving && !is_M29(command))
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
         #endif
457
         #endif
458
 
458
 
459
         //
459
         //
472
                 case 5:
472
                 case 5:
473
               #endif
473
               #endif
474
                 PORT_REDIRECT(i);                      // Reply to the serial port that sent the command
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
                 LCD_MESSAGEPGM(MSG_STOPPED);
476
                 LCD_MESSAGEPGM(MSG_STOPPED);
477
                 break;
477
                 break;
478
             }
478
             }
512
 #if ENABLED(SDSUPPORT)
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
   inline void GCodeQueue::get_sdcard_commands() {
520
   inline void GCodeQueue::get_sdcard_commands() {
520
     static uint8_t sd_input_state = PS_NORMAL;
521
     static uint8_t sd_input_state = PS_NORMAL;
526
     while (length < BUFSIZE && !card_eof) {
527
     while (length < BUFSIZE && !card_eof) {
527
       const int16_t n = card.get();
528
       const int16_t n = card.get();
528
       card_eof = card.eof();
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
       const char sd_char = (char)n;
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
         // Reset stream state, terminate the buffer, and commit a non-empty command
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
         if (!process_line_done(sd_input_state, command_buffer[index_w], sd_count)) {
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
           #if ENABLED(POWER_LOSS_RECOVERY)
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
           #endif
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
       else
547
       else
563
         process_stream_char(sd_char, sd_input_state, command_buffer[index_w], sd_count);
548
         process_stream_char(sd_char, sd_input_state, command_buffer[index_w], sd_count);
600
       if (is_M29(command)) {
585
       if (is_M29(command)) {
601
         // M29 closes the file
586
         // M29 closes the file
602
         card.closefile();
587
         card.closefile();
603
-        SERIAL_ECHOLNPGM(MSG_FILE_SAVED);
588
+        SERIAL_ECHOLNPGM(STR_FILE_SAVED);
604
 
589
 
605
         #if !defined(__AVR__) || !defined(USBCON)
590
         #if !defined(__AVR__) || !defined(USBCON)
606
           #if ENABLED(SERIAL_STATS_DROPPED_RX)
591
           #if ENABLED(SERIAL_STATS_DROPPED_RX)
633
   #endif // SDSUPPORT
618
   #endif // SDSUPPORT
634
 
619
 
635
   // The queue may be reset by a command handler or by code invoked by idle() within a handler
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 Целия файл

117
    */
117
    */
118
   static void flush_and_request_resend();
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
 private:
126
 private:
121
 
127
 
122
   static uint8_t index_w;  // Ring buffer write position
128
   static uint8_t index_w;  // Ring buffer write position

+ 2
- 2
Marlin/src/gcode/sdcard/M20.cpp Целия файл

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

+ 4
- 4
Marlin/src/gcode/sdcard/M24_M25.cpp Целия файл

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

+ 1
- 1
Marlin/src/gcode/temperature/M105.cpp Целия файл

31
   const int8_t target_extruder = get_target_extruder_from_command();
31
   const int8_t target_extruder = get_target_extruder_from_command();
32
   if (target_extruder < 0) return;
32
   if (target_extruder < 0) return;
33
 
33
 
34
-  SERIAL_ECHOPGM(MSG_OK);
34
+  SERIAL_ECHOPGM(STR_OK);
35
 
35
 
36
   #if HAS_TEMP_SENSOR
36
   #if HAS_TEMP_SENSOR
37
 
37
 

+ 1
- 1
Marlin/src/gcode/temperature/M303.cpp Целия файл

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

+ 4
- 2
Marlin/src/inc/Conditionals_LCD.h Целия файл

502
  * Set a flag for a servo probe (or BLTouch)
502
  * Set a flag for a servo probe (or BLTouch)
503
  */
503
  */
504
 #define HAS_Z_SERVO_PROBE (defined(Z_PROBE_SERVO_NR) && Z_PROBE_SERVO_NR >= 0)
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
  * Set flags for enabled probes
511
  * Set flags for enabled probes
571
 
575
 
572
 #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)
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
 #define HAS_LINEAR_E_JERK (DISABLED(CLASSIC_JERK) && ENABLED(LIN_ADVANCE))
578
 #define HAS_LINEAR_E_JERK (DISABLED(CLASSIC_JERK) && ENABLED(LIN_ADVANCE))
577
 
579
 
578
 #ifndef SPI_SPEED
580
 #ifndef SPI_SPEED

+ 2
- 12
Marlin/src/inc/Conditionals_post.h Целия файл

645
     #define MINIMUM_STEPPER_PULSE 2
645
     #define MINIMUM_STEPPER_PULSE 2
646
   #elif HAS_DRIVER(A4988) || HAS_DRIVER(A5984)
646
   #elif HAS_DRIVER(A4988) || HAS_DRIVER(A5984)
647
     #define MINIMUM_STEPPER_PULSE 1
647
     #define MINIMUM_STEPPER_PULSE 1
648
-  #elif TRINAMICS
648
+  #elif HAS_TRINAMIC || HAS_TRINAMIC_STANDALONE
649
     #define MINIMUM_STEPPER_PULSE 0
649
     #define MINIMUM_STEPPER_PULSE 0
650
   #elif HAS_DRIVER(LV8729)
650
   #elif HAS_DRIVER(LV8729)
651
     #define MINIMUM_STEPPER_PULSE 0
651
     #define MINIMUM_STEPPER_PULSE 0
665
     #define MAXIMUM_STEPPER_RATE 500000
665
     #define MAXIMUM_STEPPER_RATE 500000
666
   #elif HAS_DRIVER(LV8729)
666
   #elif HAS_DRIVER(LV8729)
667
     #define MAXIMUM_STEPPER_RATE 1000000
667
     #define MAXIMUM_STEPPER_RATE 1000000
668
-  #elif TRINAMICS
668
+  #elif HAS_TRINAMIC || HAS_TRINAMIC_STANDALONE
669
     #define MAXIMUM_STEPPER_RATE 5000000
669
     #define MAXIMUM_STEPPER_RATE 5000000
670
   #else
670
   #else
671
     #define MAXIMUM_STEPPER_RATE 250000
671
     #define MAXIMUM_STEPPER_RATE 250000
1546
 #define HAS_SERVO_3 (PIN_EXISTS(SERVO3) && NUM_SERVOS > 3)
1546
 #define HAS_SERVO_3 (PIN_EXISTS(SERVO3) && NUM_SERVOS > 3)
1547
 #define HAS_SERVOS  (NUM_SERVOS > 0)
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
 // Sensors
1549
 // Sensors
1560
 #define HAS_FILAMENT_WIDTH_SENSOR (PIN_EXISTS(FILWIDTH))
1550
 #define HAS_FILAMENT_WIDTH_SENSOR (PIN_EXISTS(FILWIDTH))
1561
 
1551
 

+ 1
- 1
Marlin/src/inc/Version.h Целия файл

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

+ 5
- 3
Marlin/src/lcd/dogm/dogm_Statusscreen.h Целия файл

785
     #endif
785
     #endif
786
 
786
 
787
   #endif
787
   #endif
788
-#else
788
+#endif
789
+
790
+#ifndef STATUS_BED_WIDTH
789
   #define STATUS_BED_WIDTH 0
791
   #define STATUS_BED_WIDTH 0
790
 #endif
792
 #endif
791
 
793
 
1729
 
1731
 
1730
 #define DO_DRAW_LOGO (STATUS_LOGO_WIDTH && ENABLED(CUSTOM_STATUS_SCREEN_IMAGE))
1732
 #define DO_DRAW_LOGO (STATUS_LOGO_WIDTH && ENABLED(CUSTOM_STATUS_SCREEN_IMAGE))
1731
 #define DO_DRAW_HOTENDS (HOTENDS > 0)
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
 #define DO_DRAW_CHAMBER (HAS_TEMP_CHAMBER && STATUS_CHAMBER_WIDTH && HOTENDS <= 4)
1736
 #define DO_DRAW_CHAMBER (HAS_TEMP_CHAMBER && STATUS_CHAMBER_WIDTH && HOTENDS <= 4)
1735
 #define DO_DRAW_FAN (HAS_FAN0 && STATUS_FAN_WIDTH && HOTENDS <= 4 && defined(STATUS_FAN_FRAMES))
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 Целия файл

188
             u8g.drawBitmapP(hx, STATUS_HEATERS_Y, bw, STATUS_HEATERS_HEIGHT, HOTEND_BITMAP(heater, isHeat));
188
             u8g.drawBitmapP(hx, STATUS_HEATERS_Y, bw, STATUS_HEATERS_HEIGHT, HOTEND_BITMAP(heater, isHeat));
189
       #endif
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
     } // PAGE_CONTAINS
191
     } // PAGE_CONTAINS
207
 
192
 
208
     if (PAGE_UNDER(7)) {
193
     if (PAGE_UNDER(7)) {
240
     const float temp = thermalManager.degBed(),
225
     const float temp = thermalManager.degBed(),
241
               target = thermalManager.degTargetBed();
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
       const bool isHeat = BED_ALT();
229
       const bool isHeat = BED_ALT();
245
     #endif
230
     #endif
246
 
231
 
247
-    #if DO_DRAW_BED && DISABLED(STATUS_BED_ANIM)
232
+    #if DISABLED(STATUS_BED_ANIM)
248
       #define STATIC_BED    true
233
       #define STATIC_BED    true
249
       #define BED_DOT       isHeat
234
       #define BED_DOT       isHeat
250
     #else
235
     #else
513
       u8g.drawBitmapP(STATUS_HEATERS_X, STATUS_HEATERS_Y, STATUS_HEATERS_BYTEWIDTH, STATUS_HEATERS_HEIGHT, status_heaters_bmp);
498
       u8g.drawBitmapP(STATUS_HEATERS_X, STATUS_HEATERS_Y, STATUS_HEATERS_BYTEWIDTH, STATUS_HEATERS_HEIGHT, status_heaters_bmp);
514
   #endif
499
   #endif
515
 
500
 
516
-  #if DO_DRAW_CUTTER
501
+  #if DO_DRAW_CUTTER && DISABLED(STATUS_COMBINE_HEATERS)
517
     #if ANIM_CUTTER
502
     #if ANIM_CUTTER
518
       #define CUTTER_BITMAP(S) ((S) ? status_cutter_on_bmp : status_cutter_bmp)
503
       #define CUTTER_BITMAP(S) ((S) ? status_cutter_on_bmp : status_cutter_bmp)
519
     #else
504
     #else
537
       u8g.drawBitmapP(STATUS_BED_X, bedy, STATUS_BED_BYTEWIDTH, bedh, BED_BITMAP(BED_ALT()));
522
       u8g.drawBitmapP(STATUS_BED_X, bedy, STATUS_BED_BYTEWIDTH, bedh, BED_BITMAP(BED_ALT()));
538
   #endif
523
   #endif
539
 
524
 
540
-  #if DO_DRAW_CHAMBER
525
+  #if DO_DRAW_CHAMBER && DISABLED(STATUS_COMBINE_HEATERS)
541
     #if ANIM_CHAMBER
526
     #if ANIM_CHAMBER
542
       #define CHAMBER_BITMAP(S) ((S) ? status_chamber_on_bmp : status_chamber_bmp)
527
       #define CHAMBER_BITMAP(S) ((S) ? status_chamber_on_bmp : status_chamber_bmp)
543
     #else
528
     #else

+ 4
- 4
Marlin/src/lcd/extensible_ui/lib/ftdi_eve_touch_ui/marlin_events.cpp Целия файл

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

+ 2
- 2
Marlin/src/lcd/extensible_ui/lib/ftdi_eve_touch_ui/screens/advanced_settings_menu.cpp Целия файл

84
       .tag(12).button( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXT_F(MSG_LCD_ENDSTOPS))
84
       .tag(12).button( BTN_POS(1,5), BTN_SIZE(1,1), GET_TEXT_F(MSG_LCD_ENDSTOPS))
85
       .tag(15).button( BTN_POS(2,6), BTN_SIZE(1,1), GET_TEXT_F(MSG_DISPLAY_MENU))
85
       .tag(15).button( BTN_POS(2,6), BTN_SIZE(1,1), GET_TEXT_F(MSG_DISPLAY_MENU))
86
       .tag(9) .button( BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(MSG_INTERFACE_SETTINGS))
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
       .tag(5) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXT_F(MSG_VELOCITY))
88
       .tag(5) .button( BTN_POS(2,2), BTN_SIZE(1,1), GET_TEXT_F(MSG_VELOCITY))
89
       .tag(6) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXT_F(MSG_ACCELERATION))
89
       .tag(6) .button( BTN_POS(2,3), BTN_SIZE(1,1), GET_TEXT_F(MSG_ACCELERATION))
90
       #if DISABLED(CLASSIC_JERK)
90
       #if DISABLED(CLASSIC_JERK)
154
       .tag(11).button( BTN_POS(1,3),  BTN_SIZE(1,1), GET_TEXT_F(MSG_FILAMENT))
154
       .tag(11).button( BTN_POS(1,3),  BTN_SIZE(1,1), GET_TEXT_F(MSG_FILAMENT))
155
       .tag(15).button( BTN_POS(3,5),  BTN_SIZE(1,1), GET_TEXT_F(MSG_DISPLAY_MENU))
155
       .tag(15).button( BTN_POS(3,5),  BTN_SIZE(1,1), GET_TEXT_F(MSG_DISPLAY_MENU))
156
       .tag(9) .button( BTN_POS(1,5),  BTN_SIZE(2,1), GET_TEXT_F(MSG_INTERFACE_SETTINGS))
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
       .colors(action_btn)
158
       .colors(action_btn)
159
       .tag(1) .button( BTN_POS(3,6),  BTN_SIZE(1,1), GET_TEXT_F(MSG_BACK));
159
       .tag(1) .button( BTN_POS(3,6),  BTN_SIZE(1,1), GET_TEXT_F(MSG_BACK));
160
     #endif
160
     #endif

+ 1
- 1
Marlin/src/lcd/extensible_ui/lib/ftdi_eve_touch_ui/screens/bio_advanced_settings.cpp Целия файл

86
       )
86
       )
87
       .tag(12) .button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(MSG_LINEAR_ADVANCE))
87
       .tag(12) .button( BTN_POS(1,6), BTN_SIZE(2,1), GET_TEXT_F(MSG_LINEAR_ADVANCE))
88
       .tag(13) .button( BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXT_F(MSG_INTERFACE_SETTINGS))
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
       .colors(action_btn)
90
       .colors(action_btn)
91
       .tag(1). button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXT_F(MSG_BACK));
91
       .tag(1). button( BTN_POS(1,9), BTN_SIZE(2,1), GET_TEXT_F(MSG_BACK));
92
     #undef GRID_COLS
92
     #undef GRID_COLS

+ 14
- 14
Marlin/src/lcd/extensible_ui/lib/ftdi_eve_touch_ui/screens/endstop_state_screen.cpp Целия файл

62
   .text(BTN_POS(1,1), BTN_SIZE(6,1), GET_TEXT_F(MSG_LCD_ENDSTOPS))
62
   .text(BTN_POS(1,1), BTN_SIZE(6,1), GET_TEXT_F(MSG_LCD_ENDSTOPS))
63
   .font(font_tiny);
63
   .font(font_tiny);
64
   #if PIN_EXISTS(X_MAX)
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
   #else
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
   #endif
68
   #endif
69
   #if PIN_EXISTS(Y_MAX)
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
   #else
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
   #endif
73
   #endif
74
   #if PIN_EXISTS(Z_MAX)
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
   #else
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
   #endif
78
   #endif
79
   #if PIN_EXISTS(X_MIN)
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
   #else
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
   #endif
83
   #endif
84
   #if PIN_EXISTS(Y_MIN)
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
   #else
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
   #endif
88
   #endif
89
   #if PIN_EXISTS(Z_MIN)
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
   #else
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
   #endif
93
   #endif
94
   #if ENABLED(FILAMENT_RUNOUT_SENSOR) && PIN_EXISTS(FIL_RUNOUT)
94
   #if ENABLED(FILAMENT_RUNOUT_SENSOR) && PIN_EXISTS(FIL_RUNOUT)
95
     PIN_ENABLED (1, 4, GET_TEXT_F(MSG_RUNOUT_1), FIL_RUNOUT, FIL_RUNOUT_INVERTING)
95
     PIN_ENABLED (1, 4, GET_TEXT_F(MSG_RUNOUT_1), FIL_RUNOUT, FIL_RUNOUT_INVERTING)
102
     PIN_DISABLED(3, 4, GET_TEXT_F(MSG_RUNOUT_2), FIL_RUNOUT2)
102
     PIN_DISABLED(3, 4, GET_TEXT_F(MSG_RUNOUT_2), FIL_RUNOUT2)
103
   #endif
103
   #endif
104
   #if PIN_EXISTS(Z_MIN_PROBE)
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
   #else
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
   #endif
108
   #endif
109
 
109
 
110
   #if HAS_SOFTWARE_ENDSTOPS
110
   #if HAS_SOFTWARE_ENDSTOPS

+ 4
- 4
Marlin/src/lcd/extui_dgus_lcd.cpp Целия файл

136
       SERIAL_ECHOLNPAIR("OnPidTuning:",rst);
136
       SERIAL_ECHOLNPAIR("OnPidTuning:",rst);
137
       switch(rst) {
137
       switch(rst) {
138
         case PID_BAD_EXTRUDER_NUM:
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
           break;
140
           break;
141
         case PID_TEMP_TOO_HIGH:
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
           break;
143
           break;
144
         case PID_TUNING_TIMEOUT:
144
         case PID_TUNING_TIMEOUT:
145
-          ScreenHandler.setstatusmessagePGM(PSTR(MSG_PID_TIMEOUT));
145
+          ScreenHandler.setstatusmessagePGM(PSTR(STR_PID_TIMEOUT));
146
           break;
146
           break;
147
         case PID_DONE:
147
         case PID_DONE:
148
-          ScreenHandler.setstatusmessagePGM(PSTR(MSG_PID_AUTOTUNE_FINISHED));
148
+          ScreenHandler.setstatusmessagePGM(PSTR(STR_PID_AUTOTUNE_FINISHED));
149
           break;
149
           break;
150
       }
150
       }
151
       ScreenHandler.GotoScreen(DGUSLCD_SCREEN_MAIN);
151
       ScreenHandler.GotoScreen(DGUSLCD_SCREEN_MAIN);

+ 1
- 1
Marlin/src/lcd/language/language_an.h Целия файл

125
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste");
125
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste");
126
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Alzar memoria");
126
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Alzar memoria");
127
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Cargar memoria");
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
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH _UxGT("Tornar a cargar");
129
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH _UxGT("Tornar a cargar");
130
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Informacion");
130
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Informacion");
131
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Preparar");
131
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Preparar");

+ 1
- 1
Marlin/src/lcd/language/language_bg.h Целия файл

110
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD контраст");
110
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD контраст");
111
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Запази в EPROM");
111
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Запази в EPROM");
112
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Зареди от EPROM");
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
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH _UxGT("Обнови");
114
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH _UxGT("Обнови");
115
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Преглед");
115
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Преглед");
116
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Действия");
116
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Действия");

+ 1
- 1
Marlin/src/lcd/language/language_ca.h Целия файл

120
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contrast de LCD");
120
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contrast de LCD");
121
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Desa memoria");
121
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Desa memoria");
122
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Carrega memoria");
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
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Actualitza");
124
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Actualitza");
125
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Pantalla Info.");
125
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Pantalla Info.");
126
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Prepara");
126
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Prepara");

+ 1
- 1
Marlin/src/lcd/language/language_cz.h Целия файл

310
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD");
310
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD");
311
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Uložit nastavení");
311
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Uložit nastavení");
312
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Načíst nastavení");
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
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Inic. EEPROM");
314
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Inic. EEPROM");
315
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Aktualizace z SD");
315
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Aktualizace z SD");
316
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Reset tiskárny");
316
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Reset tiskárny");

+ 1
- 1
Marlin/src/lcd/language/language_da.h Целия файл

105
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD kontrast");
105
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD kontrast");
106
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Gem i EEPROM");
106
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Gem i EEPROM");
107
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Hent fra EEPROM");
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
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Genopfrisk");
109
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Genopfrisk");
110
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Info skærm");
110
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Info skærm");
111
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Forbered");
111
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Forbered");

+ 1
- 1
Marlin/src/lcd/language/language_de.h Целия файл

290
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD-Kontrast");
290
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD-Kontrast");
291
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Konfig. speichern");
291
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Konfig. speichern");
292
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Konfig. laden");
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
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Werkseinstellungen");
294
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Werkseinstellungen");
295
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("FW Update vom Medium");
295
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("FW Update vom Medium");
296
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Drucker neustarten");
296
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Drucker neustarten");

+ 1
- 1
Marlin/src/lcd/language/language_el.h Целия файл

136
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Κοντράστ LCD");
136
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Κοντράστ LCD");
137
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Αποθήκευση");
137
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Αποθήκευση");
138
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Φόρτωση");
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
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Ανανέωση");
140
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Ανανέωση");
141
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Οθόνη πληροφόρησης");
141
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Οθόνη πληροφόρησης");
142
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Προετοιμασία");
142
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Προετοιμασία");

+ 1
- 1
Marlin/src/lcd/language/language_el_gr.h Целия файл

138
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Κοντράστ LCD");
138
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Κοντράστ LCD");
139
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Αποθήκευση");
139
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Αποθήκευση");
140
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Φόρτωση");
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
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Ανανέωση");
142
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Ανανέωση");
143
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Οθόνη πληροφόρησης");
143
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Οθόνη πληροφόρησης");
144
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Προετοιμασία");
144
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Προετοιμασία");

+ 4
- 1
Marlin/src/lcd/language/language_en.h Целия файл

312
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD Contrast");
312
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD Contrast");
313
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Store Settings");
313
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Store Settings");
314
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Load Settings");
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
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Initialize EEPROM");
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
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Media Update");
320
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Media Update");
318
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Reset Printer");
321
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Reset Printer");
319
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Refresh");
322
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Refresh");

+ 1
- 1
Marlin/src/lcd/language/language_es.h Целия файл

284
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste LCD");
284
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste LCD");
285
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Guardar EEPROM");
285
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Guardar EEPROM");
286
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Cargar EEPROM");
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
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Inicializar EEPROM");
288
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Inicializar EEPROM");
289
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Actualizar SD/USB");
289
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Actualizar SD/USB");
290
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Resetear Impresora");
290
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Resetear Impresora");

+ 1
- 1
Marlin/src/lcd/language/language_eu.h Целия файл

187
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD kontrastea");
187
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD kontrastea");
188
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Gorde memoria");
188
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Gorde memoria");
189
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Kargatu memoria");
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
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("EEPROM-a hasieratu");
191
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("EEPROM-a hasieratu");
192
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Berriz kargatu");
192
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Berriz kargatu");
193
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Pantaila info");
193
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Pantaila info");

+ 1
- 1
Marlin/src/lcd/language/language_fi.h Целия файл

97
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD kontrasti");
97
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD kontrasti");
98
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Tallenna muistiin");
98
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Tallenna muistiin");
99
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Lataa muistista");
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
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Päivitä");
101
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Päivitä");
102
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Seuraa");
102
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Seuraa");
103
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Valmistele");
103
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Valmistele");

+ 1
- 1
Marlin/src/lcd/language/language_fr.h Целия файл

282
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste LCD");
282
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste LCD");
283
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Enregistrer config.");
283
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Enregistrer config.");
284
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Charger config.");
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
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Initialiser EEPROM");
286
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Initialiser EEPROM");
287
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("MaJ Firmware SD");
287
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("MaJ Firmware SD");
288
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("RaZ imprimante");
288
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("RaZ imprimante");

+ 1
- 1
Marlin/src/lcd/language/language_gl.h Целия файл

117
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Constraste LCD");
117
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Constraste LCD");
118
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Gardar en memo.");
118
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Gardar en memo.");
119
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Cargar de memo.");
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
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Volver a cargar");
121
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Volver a cargar");
122
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Monitorizacion");
122
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Monitorizacion");
123
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Preparar");
123
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Preparar");

+ 1
- 1
Marlin/src/lcd/language/language_hr.h Целия файл

98
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD-a");
98
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD-a");
99
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Pohrani u memoriju");
99
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Pohrani u memoriju");
100
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Učitaj memoriju");
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
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Osvježi");
102
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Osvježi");
103
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Info screen");
103
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Info screen");
104
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Pripremi");
104
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Pripremi");

+ 2
- 2
Marlin/src/lcd/language/language_it.h Целия файл

310
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contrasto LCD");
310
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contrasto LCD");
311
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Salva impostazioni");
311
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Salva impostazioni");
312
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Carica impostazioni");
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
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Inizializza EEPROM");
314
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Inizializza EEPROM");
315
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Aggiorna media");
315
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Aggiorna media");
316
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Resetta stampante");
316
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Resetta stampante");
368
   PROGMEM Language_Str MSG_FILAMENTUNLOAD                  = _UxGT("Rimuovi filamento");
368
   PROGMEM Language_Str MSG_FILAMENTUNLOAD                  = _UxGT("Rimuovi filamento");
369
   PROGMEM Language_Str MSG_FILAMENTUNLOAD_E                = _UxGT("Rimuovi filamento *");
369
   PROGMEM Language_Str MSG_FILAMENTUNLOAD_E                = _UxGT("Rimuovi filamento *");
370
   PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Rimuovi tutto");
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
   PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Cambia media");
372
   PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Cambia media");
373
   PROGMEM Language_Str MSG_RELEASE_MEDIA                   = _UxGT("Rilascia media");
373
   PROGMEM Language_Str MSG_RELEASE_MEDIA                   = _UxGT("Rilascia media");
374
   PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Z probe fuori piatto");
374
   PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Z probe fuori piatto");

+ 1
- 1
Marlin/src/lcd/language/language_jp_kana.h Целия файл

141
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCDコントラスト");               // "LCD contrast"
141
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCDコントラスト");               // "LCD contrast"
142
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("EEPROMヘホゾン");               // "Store memory"
142
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("EEPROMヘホゾン");               // "Store memory"
143
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("EEPROMカラヨミコミ");               // "Load memory"
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
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("リフレッシュ");                  // "Refresh"
145
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("リフレッシュ");                  // "Refresh"
146
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("ジョウホウガメン");               // "Info screen"
146
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("ジョウホウガメン");               // "Info screen"
147
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("ジュンビセッテイ");               // "Prepare"
147
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("ジュンビセッテイ");               // "Prepare"

+ 1
- 1
Marlin/src/lcd/language/language_ko_KR.h Целия файл

84
   PROGMEM Language_Str MSG_MOTION                          = _UxGT("동작");
84
   PROGMEM Language_Str MSG_MOTION                          = _UxGT("동작");
85
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("설정 저장하기");
85
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("설정 저장하기");
86
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("설정 읽어오기");
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
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("EEPROM 초기화");
88
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("EEPROM 초기화");
89
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("새로고침");
89
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("새로고침");
90
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("처음으로");
90
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("처음으로");

+ 1
- 1
Marlin/src/lcd/language/language_nl.h Целия файл

123
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD contrast");
123
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD contrast");
124
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Geheugen opslaan");
124
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Geheugen opslaan");
125
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Geheugen laden");
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
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Ververs");
127
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Ververs");
128
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Info scherm");
128
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Info scherm");
129
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Voorbereiden");
129
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Voorbereiden");

+ 1
- 1
Marlin/src/lcd/language/language_pl.h Целия файл

298
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD");
298
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD");
299
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Zapisz w pamięci");
299
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Zapisz w pamięci");
300
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Wczytaj z pamięci");
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
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Initializuj EEPROM");
302
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Initializuj EEPROM");
303
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Uaktualnij kartę");
303
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Uaktualnij kartę");
304
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Resetuj drukarkę");
304
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Resetuj drukarkę");

+ 1
- 1
Marlin/src/lcd/language/language_pt.h Целия файл

113
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste");
113
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste");
114
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Guardar na memoria");
114
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Guardar na memoria");
115
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Carregar da memoria");
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
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH _UxGT(" Recarregar");
117
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH _UxGT(" Recarregar");
118
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Monitorizar");
118
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Monitorizar");
119
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Preparar");
119
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Preparar");

+ 1
- 1
Marlin/src/lcd/language/language_pt_br.h Целия файл

252
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste");
252
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Contraste");
253
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Salvar Configuração");
253
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Salvar Configuração");
254
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Ler Configuração");
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
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Iniciar EEPROM");
256
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Iniciar EEPROM");
257
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Atualiz. SD");
257
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Atualiz. SD");
258
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Resetar Impressora");
258
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Resetar Impressora");

+ 1
- 1
Marlin/src/lcd/language/language_ru.h Целия файл

276
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Контраст LCD");
276
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Контраст LCD");
277
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Сохранить настройки");
277
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Сохранить настройки");
278
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Загрузить настройки");
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
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Изначальный EEPROM");
280
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Изначальный EEPROM");
281
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Обновление прошивки");
281
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Обновление прошивки");
282
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Сброс принтера");
282
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Сброс принтера");

+ 10
- 7
Marlin/src/lcd/language/language_sk.h Целия файл

67
   PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Domov os Z");
67
   PROGMEM Language_Str MSG_AUTO_HOME_Z                     = _UxGT("Domov os Z");
68
   PROGMEM Language_Str MSG_AUTO_Z_ALIGN                    = _UxGT("Auto-zarovn. Z");
68
   PROGMEM Language_Str MSG_AUTO_Z_ALIGN                    = _UxGT("Auto-zarovn. Z");
69
   PROGMEM Language_Str MSG_LEVEL_BED_HOMING                = _UxGT("Parkovanie XYZ");
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
   PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT            = _UxGT("Ďalší bod");
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
   PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("Výška rovnania");
73
   PROGMEM Language_Str MSG_Z_FADE_HEIGHT                   = _UxGT("Výška rovnania");
74
   PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Nastaviť ofsety");
74
   PROGMEM Language_Str MSG_SET_HOME_OFFSETS                = _UxGT("Nastaviť ofsety");
75
   PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Ofsety nastavené");
75
   PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED            = _UxGT("Ofsety nastavené");
173
   PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("Postranné body");
173
   PROGMEM Language_Str MSG_UBL_SIDE_POINTS                 = _UxGT("Postranné body");
174
   PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("Typ siete bodov");
174
   PROGMEM Language_Str MSG_UBL_MAP_TYPE                    = _UxGT("Typ siete bodov");
175
   PROGMEM Language_Str MSG_UBL_OUTPUT_MAP                  = _UxGT("Exportovať sieť");
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
   PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("Hustota mriežky");
180
   PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT               = _UxGT("Hustota mriežky");
181
   PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("Ručné vyplnenie");
181
   PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN               = _UxGT("Ručné vyplnenie");
182
   PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("Chytré vyplnenie");
182
   PROGMEM Language_Str MSG_UBL_SMART_FILLIN                = _UxGT("Chytré vyplnenie");
302
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD");
302
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Kontrast LCD");
303
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Uložiť nastavenie");
303
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Uložiť nastavenie");
304
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Načítať nastavenie");
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
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Inicializ. EEPROM");
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
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Aktualizovať z SD");
310
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Aktualizovať z SD");
308
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Reštart. tlačiar.");
311
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Reštart. tlačiar.");
309
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Obnoviť");
312
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Obnoviť");

+ 3
- 3
Marlin/src/lcd/language/language_test.h Целия файл

149
     PROGMEM Language_Str MSG_MOTION                          = STRG_OKTAL_4;
149
     PROGMEM Language_Str MSG_MOTION                          = STRG_OKTAL_4;
150
     PROGMEM Language_Str MSG_FILAMENT                        = STRG_OKTAL_5;
150
     PROGMEM Language_Str MSG_FILAMENT                        = STRG_OKTAL_5;
151
     PROGMEM Language_Str MSG_CONTRAST                        = STRG_OKTAL_6;
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
     PROGMEM Language_Str MSG_NOZZLE                          = STRG_OKTAL_8;
154
     PROGMEM Language_Str MSG_NOZZLE                          = STRG_OKTAL_8;
155
     PROGMEM Language_Str MSG_NOZZLE_N                        = STRG_OKTAL_8 " ~";
155
     PROGMEM Language_Str MSG_NOZZLE_N                        = STRG_OKTAL_8 " ~";
186
     PROGMEM Language_Str MSG_MOTION                          = STRG_OKTAL_4;
186
     PROGMEM Language_Str MSG_MOTION                          = STRG_OKTAL_4;
187
     PROGMEM Language_Str MSG_FILAMENT                        = STRG_OKTAL_5;
187
     PROGMEM Language_Str MSG_FILAMENT                        = STRG_OKTAL_5;
188
     PROGMEM Language_Str MSG_CONTRAST                        = STRG_OKTAL_6;
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
     PROGMEM Language_Str MSG_NOZZLE                          = STRG_OKTAL_8;
191
     PROGMEM Language_Str MSG_NOZZLE                          = STRG_OKTAL_8;
192
     PROGMEM Language_Str MSG_NOZZLE_N                        = STRG_OKTAL_8 " ~";
192
     PROGMEM Language_Str MSG_NOZZLE_N                        = STRG_OKTAL_8 " ~";
222
     PROGMEM Language_Str MSG_MOTION                          = STRG_OKTAL_4;
222
     PROGMEM Language_Str MSG_MOTION                          = STRG_OKTAL_4;
223
     PROGMEM Language_Str MSG_FILAMENT                        = STRG_OKTAL_5;
223
     PROGMEM Language_Str MSG_FILAMENT                        = STRG_OKTAL_5;
224
     PROGMEM Language_Str MSG_CONTRAST                        = STRG_OKTAL_6;
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
     PROGMEM Language_Str MSG_NOZZLE                          = STRG_OKTAL_8;
227
     PROGMEM Language_Str MSG_NOZZLE                          = STRG_OKTAL_8;
228
     PROGMEM Language_Str MSG_NOZZLE_N                        = STRG_OKTAL_8 " ~";
228
     PROGMEM Language_Str MSG_NOZZLE_N                        = STRG_OKTAL_8 " ~";

+ 1
- 1
Marlin/src/lcd/language/language_tr.h Целия файл

266
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD Kontrast");
266
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("LCD Kontrast");
267
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Hafızaya Al");
267
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Hafızaya Al");
268
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Hafızadan Yükle");
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
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("EEPROM'u başlat");
270
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("EEPROM'u başlat");
271
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("SD Güncellemesi");
271
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("SD Güncellemesi");
272
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Yazıcıyı Resetle");
272
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Yazıcıyı Resetle");

+ 1
- 1
Marlin/src/lcd/language/language_uk.h Целия файл

139
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("контраст LCD");
139
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("контраст LCD");
140
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Зберегти в ПЗП");
140
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Зберегти в ПЗП");
141
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Зчитати з ПЗП");
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
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Поновити");
143
   PROGMEM Language_Str MSG_REFRESH                         = LCD_STR_REFRESH  _UxGT("Поновити");
144
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Інформація");
144
   PROGMEM Language_Str MSG_INFO_SCREEN                     = _UxGT("Інформація");
145
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Підготувати");
145
   PROGMEM Language_Str MSG_PREPARE                         = _UxGT("Підготувати");

+ 2
- 2
Marlin/src/lcd/language/language_vi.h Целия файл

266
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Độ tương phản LCD");                    // LCD contrast
266
   PROGMEM Language_Str MSG_CONTRAST                        = _UxGT("Độ tương phản LCD");                    // LCD contrast
267
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Lưu các thiết lập");                    // Store settings
267
   PROGMEM Language_Str MSG_STORE_EEPROM                    = _UxGT("Lưu các thiết lập");                    // Store settings
268
   PROGMEM Language_Str MSG_LOAD_EEPROM                     = _UxGT("Tải các cài đặt");                      // Load settings
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
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Khởi Tạo EEPROM");                      // Initialize EEPROM
270
   PROGMEM Language_Str MSG_INIT_EEPROM                     = _UxGT("Khởi Tạo EEPROM");                      // Initialize EEPROM
271
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Cập Nhật phương tiện");                 // Update media
271
   PROGMEM Language_Str MSG_MEDIA_UPDATE                    = _UxGT("Cập Nhật phương tiện");                 // Update media
272
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Bặt Lại Máy In");
272
   PROGMEM Language_Str MSG_RESET_PRINTER                   = _UxGT("Bặt Lại Máy In");
309
   PROGMEM Language_Str MSG_FILAMENTUNLOAD                  = _UxGT("Dỡ dây nhựa");                          // unload filament
309
   PROGMEM Language_Str MSG_FILAMENTUNLOAD                  = _UxGT("Dỡ dây nhựa");                          // unload filament
310
   PROGMEM Language_Str MSG_FILAMENTUNLOAD_E                = _UxGT("Dỡ dây nhựa *");                        // unload filament
310
   PROGMEM Language_Str MSG_FILAMENTUNLOAD_E                = _UxGT("Dỡ dây nhựa *");                        // unload filament
311
   PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL              = _UxGT("Dỡ tất cả");                            // Unload All
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
   PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Thay phương tiện");                     // Change midea
313
   PROGMEM Language_Str MSG_CHANGE_MEDIA                    = _UxGT("Thay phương tiện");                     // Change midea
314
   PROGMEM Language_Str MSG_RELEASE_MEDIA                   = _UxGT("Phát hành phương tiện");
314
   PROGMEM Language_Str MSG_RELEASE_MEDIA                   = _UxGT("Phát hành phương tiện");
315
   PROGMEM Language_Str MSG_ZPROBE_OUT                      = _UxGT("Đầu Dò Z qua bàn");                     // Z Probe past bed
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 Целия файл


Някои файлове не бяха показани, защото твърде много файлове са промени

Loading…
Отказ
Запис